<?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>149852</bug_id>
          
          <creation_ts>2015-10-06 10:55:59 -0700</creation_ts>
          <short_desc>GC should have a Baker barrier for concurrent copying</short_desc>
          <delta_ts>2015-10-12 15:42:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>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>149869</dependson>
    
    <dependson>149878</dependson>
    
    <dependson>149879</dependson>
    
    <dependson>149884</dependson>
    
    <dependson>149885</dependson>
    
    <dependson>149892</dependson>
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1131030</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-06 10:55:59 -0700</bug_when>
    <thetext>Hopefully I can make this barrier fast enough that we can do concurrent copying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131031</commentid>
    <comment_count>1</comment_count>
      <attachid>262527</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-06 10:57:02 -0700</bug_when>
    <thetext>Created attachment 262527
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131060</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-06 11:48:38 -0700</bug_when>
    <thetext>Here&apos;s what I want from a read barrier on pointers to copied space:

- Once you load a backing store, you can hold onto it across GCs.
- The barrier is just one extra branch.
- The barrier slow path is no worse than Baker - it either copies the object, or waits for the object to be copied by someone else. I.e. it&apos;s O(backing store size).

Here&apos;s how I&apos;m going to implement this amazing barrier:

A backing store pointer will contain two low bits for copying state. Copying state is mostly concerned with whether the object is in to-space or in from-space. The bits will be:

0 =&gt; It&apos;s in to-space.
1 =&gt; We are planning to copy it. It&apos;s in to-space if the copy phase hasn&apos;t started yet. It&apos;s in from-space if the copy phase has started.
2 =&gt; It&apos;s being copied right now. Anyone who needs this object to be copied should wait for copying to finish by CASing the state to 3, and parking conditionally.
3 =&gt; It&apos;s being copied right now and people are parked waiting for copying to finish. When copying is done, the copier will unparkAll.

The barrier will check if the two low bits are zero. If they are, then we have a to-space pointer. This pointer will continue to be valid indefinitely, since if the GC decides to copy it after we did the load, then it will have to do a handshake and stack scan, which will pin the backing store if the pointer is still on the stack.

In C++ code, the barrier will no longer allow loads except if you pass the owning object pointer. This is needed by the slow path to get the VM&amp; and to know which object to ask to copy the backing store.  An example use of the barrier will be something like: m_butterfly.get(this)-&gt;stuff.

If the barrier sees that the two low bits are non-zero, it will invoke copying by doing:

1) Get the VM&amp; and Heap&amp; using the owner.

2) Check the state. If the state is 0, then we&apos;re done. If the state is 1, then we&apos;re done if the copy phase hasn&apos;t started. In all other cases, attempt to lock the backing store by CASing 1-&gt;2.

3) If that fails because the state is already 2 or 3, then CAS 2-&gt;3 and park conditionally. When parking returns, loop around to (1).

4) If CAS 1-&gt;2 succeeded, above, then ask the owning object for the CopyToken for the given backing store pointer. JSCell will have a new virtual method, called copyTokenForPointer().

5) Call copyBackingStore().

6) Unlock the backing store by doing CAS 2-&gt;0. That may fail if the state is 3, in which case do unparkAll and set the state to 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131083</commentid>
    <comment_count>3</comment_count>
      <attachid>262536</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-06 12:39:39 -0700</bug_when>
    <thetext>Created attachment 262536
something compiles

I still haven&apos;t added barriers to JIT code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131211</commentid>
    <comment_count>4</comment_count>
      <attachid>262572</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-06 20:15:41 -0700</bug_when>
    <thetext>Created attachment 262572
starting to make some JIT changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131221</commentid>
    <comment_count>5</comment_count>
      <attachid>262575</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-06 21:15:58 -0700</bug_when>
    <thetext>Created attachment 262575
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131358</commentid>
    <comment_count>6</comment_count>
      <attachid>262621</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-07 12:05:55 -0700</bug_when>
    <thetext>Created attachment 262621
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131397</commentid>
    <comment_count>7</comment_count>
      <attachid>262633</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-07 13:38:14 -0700</bug_when>
    <thetext>Created attachment 262633
it is written

Now I have to compile it and see how much of a slow-down this is.  If the slow-down is too big, we won&apos;t do concurrent copying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131411</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-07 14:08:56 -0700</bug_when>
    <thetext>Attachment 262633 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSObject.h:819:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2481:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
Total errors found: 2 in 35 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>1131451</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-07 15:56:29 -0700</bug_when>
    <thetext>Looks like this is an Octane slow-down.  I will investigate some options for reducing this slow-down.  If I can&apos;t do it, then we&apos;ll have to scrap concurrent copying.

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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190675)
&quot;CopyBarrier&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190682)

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                CopyBarrier                                    

encrypt                 0.16790+-0.00258          0.16719+-0.00230       
decrypt                 2.86774+-0.01985    !     3.15941+-0.03599       ! definitely 1.1017x slower
deltablue      x2       0.13659+-0.00115    !     0.14497+-0.00352       ! definitely 1.0613x slower
earley                  0.30416+-0.00487    ?     0.30778+-0.00294       ? might be 1.0119x slower
boyer                   4.42021+-0.11711          4.36209+-0.07179         might be 1.0133x faster
navier-stokes  x2       4.85377+-0.03649          4.81558+-0.01112       
raytrace       x2       0.85975+-0.00776    ?     0.87472+-0.01173       ? might be 1.0174x slower
richards       x2       0.08832+-0.00050    !     0.09011+-0.00119       ! definitely 1.0202x slower
splay          x2       0.35115+-0.00418          0.34995+-0.01242       
regexp         x2      24.65362+-0.14126         24.62663+-0.31218       
pdfjs          x2      36.46518+-0.55242    ?    37.31270+-0.47465       ? might be 1.0232x slower
mandreel       x2      42.71301+-0.44397    ?    42.72978+-0.57699       ?
gbemu          x2      31.33819+-0.19275    !    34.86179+-2.00016       ! definitely 1.1124x slower
closure                 0.57518+-0.00524          0.57508+-0.00287       
jquery                  7.25927+-0.03098          7.25026+-0.03321       
box2d          x2       9.09817+-0.11729    !     9.39515+-0.03719       ! definitely 1.0326x slower
zlib           x2     378.31843+-11.71091       373.01766+-7.70996         might be 1.0142x faster
typescript     x2     659.46139+-5.79322    ?   667.88110+-7.43388       ? might be 1.0128x slower

&lt;geometric&gt;             5.32863+-0.02331    !     5.43187+-0.02289       ! definitely 1.0194x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131456</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-07 16:04:23 -0700</bug_when>
    <thetext>Looks like most of that slow-down is due to the butterfly barrier in the FTL.  If I remove that, I get:

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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190675)
&quot;CopyBarrier&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190682)

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                CopyBarrier                                    

encrypt                 0.16692+-0.00209          0.16629+-0.00296       
decrypt                 2.87282+-0.04412          2.84572+-0.02408       
deltablue      x2       0.13846+-0.00603          0.13697+-0.00260         might be 1.0109x faster
earley                  0.29956+-0.00342    ?     0.30632+-0.00388       ? might be 1.0225x slower
boyer                   4.32069+-0.02527    ?     4.41047+-0.18573       ? might be 1.0208x slower
navier-stokes  x2       4.83726+-0.03186          4.83127+-0.01830       
raytrace       x2       0.85305+-0.00492    ?     0.86138+-0.00582       ?
richards       x2       0.08915+-0.00064    ?     0.09028+-0.00089       ? might be 1.0126x slower
splay          x2       0.34658+-0.00307    ?     0.34891+-0.00336       ?
regexp         x2      24.58088+-0.35666         24.51731+-0.18466       
pdfjs          x2      36.37347+-0.64157    ?    37.33655+-0.42489       ? might be 1.0265x slower
mandreel       x2      42.32493+-0.27079    ?    42.44305+-0.37117       ?
gbemu          x2      32.69099+-3.14224    ?    32.95333+-0.40209       ?
closure                 0.57916+-0.00414          0.57455+-0.00347       
jquery                  7.27796+-0.05738    ?     7.33825+-0.07197       ?
box2d          x2       9.09603+-0.16579    ?     9.20729+-0.07010       ? might be 1.0122x slower
zlib           x2     379.60745+-14.03118   ?   382.13815+-8.49859       ?
typescript     x2     661.29077+-11.22800   ?   668.84047+-14.93767      ? might be 1.0114x slower

&lt;geometric&gt;             5.33260+-0.05320    ?     5.36849+-0.01035       ? might be 1.0067x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131459</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-07 16:13:32 -0700</bug_when>
    <thetext>OK, if the barrier masks the low bits instead of branching on them, the overhead becomes:

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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190675)
&quot;CopyBarrier&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190682)

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                CopyBarrier                                    

encrypt                 0.16557+-0.00047    ?     0.16584+-0.00208       ?
decrypt                 2.85933+-0.03293    !     2.94218+-0.00994       ! definitely 1.0290x slower
deltablue      x2       0.13595+-0.00254    ?     0.14036+-0.00484       ? might be 1.0325x slower
earley                  0.30679+-0.00515    ?     0.30979+-0.00580       ?
boyer                   4.36666+-0.09113          4.34825+-0.05969       
navier-stokes  x2       4.82753+-0.02203    ?     4.86634+-0.03402       ?
raytrace       x2       0.85859+-0.00615    ?     0.86685+-0.00765       ?
richards       x2       0.08878+-0.00069    ?     0.08927+-0.00082       ?
splay          x2       0.34879+-0.00460          0.34585+-0.00302       
regexp         x2      24.75299+-0.46284         24.28325+-0.23334         might be 1.0193x faster
pdfjs          x2      36.51325+-0.50687    !    37.39663+-0.26215       ! definitely 1.0242x slower
mandreel       x2      42.33943+-0.75062    ?    42.49637+-0.25814       ?
gbemu          x2      33.15231+-2.73128    ?    34.63046+-3.35769       ? might be 1.0446x slower
closure                 0.57394+-0.00168    ?     0.57444+-0.00364       ?
jquery                  7.28736+-0.10461    ?     7.37467+-0.12286       ? might be 1.0120x slower
box2d          x2       9.15321+-0.07894    ?     9.26354+-0.07849       ? might be 1.0121x slower
zlib           x2     386.29176+-5.55499        378.18919+-19.91077        might be 1.0214x faster
typescript     x2     670.35142+-8.24484    ?   671.42533+-14.72365      ?

&lt;geometric&gt;             5.35383+-0.04159    ?     5.39428+-0.04954       ? might be 1.0076x slower

I think we can live with this.  I have an idea for an optimization pass that will make most barriers just mask.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131479</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-07 17:07:45 -0700</bug_when>
    <thetext>Here&apos;s the plan.  There will be two copied space read barriers:

Read-only read barrier: appropriate for when you will only be reading from copied space.

Normal read barrier: appropriate for reading and writing.

The read-only barrier will just mask off the space bits in the storage pointer.  The normal barrier will actually do copying.  My experiments show that just masking lowers the performance overhead to something that we can allow.

The way that this would work is that the copy phase would handshake before reusing any blocks that were evacuated by the copy phase.  Hence, if you load a pointer to copy space, that pointer remains valid until the next handshake.  It actually also remains valid across handshakes that just arise from allocation slow-paths, since those don&apos;t claim to overwrite the butterfly pointer.  It will be worth investigating whether that&apos;s a good idea or not.  It could be made to work if the copied space handshakes also do stack scans.  Those stack scans could then pin additional blocks.

This also happens to be correct because we cannot have concurrent writes to copied space.  If there is a write to copied space on this thread, then we&apos;ll just have to make sure that we don&apos;t use the read-only barrier. Basically, the phase to strength-reduce the barrier to be read-only would have to ensure that this does not happen:

a: GetButterflyReadOnly(@x)
b: GetButterfly(@y)
c: PutByOffset(@b, @x, things)
d: GetByOffset(@a, @y, things)

If we had this, then the GetByOffset would not read the right value in case @y ended up being the same as @x.  It would read the value for a different copy of the butterfly.

The way I want to formulate this optimization is that we use GetButterfly during most of compilation and then at the bitter end, we convert GetButterfly to GetButterflyReadOnly in cases where it&apos;s obviously legal.  I believe that it&apos;s legal so long as between the use of GetButterfly and the GetButterfly itself there are no operations that could repoint the butterfly.  We could even disable the optimization if there are any operations that could GC or even do any kinds of writes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131707</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-08 13:11:20 -0700</bug_when>
    <thetext>I managed to reduce the overhead a bit, by doing a combination of compiler optimizations and making the copy barrier slow path be an AnyRegCC patchpoint.  This ensures that the slow path call doesn&apos;t disturb register allocation.

I&apos;ll investigate why JSRegress had one crash.


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 (r190675)
&quot;CopyBarrier&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190682)

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                CopyBarrier                                    
SunSpider:
   3d-cube                                            4.7662+-0.3804            4.6425+-0.1875          might be 1.0266x faster
   3d-morph                                           5.3014+-0.0927     ?      5.5327+-0.4370        ? might be 1.0436x slower
   3d-raytrace                                        5.0922+-0.0475     !      5.2341+-0.0544        ! definitely 1.0279x slower
   access-binary-trees                                2.0643+-0.0744            2.0571+-0.0718        
   access-fannkuch                                    5.4184+-0.0530     ?      5.8516+-0.4520        ? might be 1.0799x slower
   access-nbody                                       2.6244+-0.2624            2.5362+-0.0986          might be 1.0348x faster
   access-nsieve                                      3.3632+-0.0717     ?      3.5043+-0.2237        ? might be 1.0419x slower
   bitops-3bit-bits-in-byte                           1.1710+-0.0277            1.1602+-0.0321        
   bitops-bits-in-byte                                3.1855+-0.0378     ?      3.2047+-0.0869        ?
   bitops-bitwise-and                                 2.0696+-0.1232            1.9996+-0.0656          might be 1.0350x faster
   bitops-nsieve-bits                                 3.0688+-0.3496     ?      3.1589+-0.2174        ? might be 1.0293x slower
   controlflow-recursive                              2.4271+-0.1528            2.3625+-0.0697          might be 1.0273x faster
   crypto-aes                                         3.9245+-0.1522     ?      4.1014+-0.2598        ? might be 1.0451x slower
   crypto-md5                                         2.4805+-0.1096            2.4675+-0.0426        
   crypto-sha1                                        2.5451+-0.2419     ?      2.5510+-0.1450        ?
   date-format-tofte                                  6.5511+-0.2136     ?      6.8525+-0.2094        ? might be 1.0460x slower
   date-format-xparb                                  4.5945+-0.2071     ?      4.7220+-0.3604        ? might be 1.0277x slower
   math-cordic                                        2.8170+-0.1096     ?      3.1216+-0.3657        ? might be 1.1081x slower
   math-partial-sums                                  4.7665+-0.1009     ?      4.7856+-0.2028        ?
   math-spectral-norm                                 1.9088+-0.0544     ?      1.9929+-0.1855        ? might be 1.0441x slower
   regexp-dna                                         6.2725+-0.2896            6.1806+-0.4382          might be 1.0149x faster
   string-base64                                      4.2017+-0.0722     ?      4.4229+-0.1821        ? might be 1.0527x slower
   string-fasta                                       5.8637+-0.1479     ?      6.1821+-0.6061        ? might be 1.0543x slower
   string-tagcloud                                    8.3752+-0.3444            8.3298+-0.8538        
   string-unpack-code                                18.2429+-0.4129     ?     18.3629+-0.7286        ?
   string-validate-input                              4.4104+-0.1731            4.3731+-0.1402        

   &lt;arithmetic&gt;                                       4.5195+-0.0273     ?      4.6035+-0.0595        ? might be 1.0186x slower

                                                        TipOfTree                CopyBarrier                                    
LongSpider:
   3d-cube                                          808.3404+-8.3470          798.3175+-6.3350          might be 1.0126x faster
   3d-morph                                        1516.9481+-7.1683         1512.5900+-11.8904       
   3d-raytrace                                      603.7644+-8.0754     ?    612.5661+-18.1150       ? might be 1.0146x slower
   access-binary-trees                              799.3973+-7.4798          796.1500+-6.6762        
   access-fannkuch                                  277.7800+-5.2077     !    297.7609+-12.0903       ! definitely 1.0719x slower
   access-nbody                                     525.1432+-13.5283         520.0782+-5.1100        
   access-nsieve                                    386.8527+-10.9209         380.0312+-5.7167          might be 1.0179x faster
   bitops-3bit-bits-in-byte                          34.3152+-0.7558     ?     34.7849+-1.3063        ? might be 1.0137x slower
   bitops-bits-in-byte                               75.0086+-1.8267     ?     75.4874+-2.3529        ?
   bitops-nsieve-bits                               408.7583+-4.0125     ?    409.1795+-5.1137        ?
   controlflow-recursive                            445.1824+-11.3172    ?    449.6433+-17.6219       ? might be 1.0100x slower
   crypto-aes                                       557.1924+-11.6190    ?    576.1128+-7.6855        ? might be 1.0340x slower
   crypto-md5                                       480.6033+-37.7685         454.6957+-14.4116         might be 1.0570x faster
   crypto-sha1                                      639.8119+-11.7997    !    664.6239+-5.9341        ! definitely 1.0388x slower
   date-format-tofte                                489.0001+-3.6508     !    512.3349+-8.0459        ! definitely 1.0477x slower
   date-format-xparb                                660.8737+-4.2211          654.9119+-6.0432        
   hash-map                                         153.3190+-3.5448          150.5832+-1.7580          might be 1.0182x faster
   math-cordic                                      484.3883+-3.7712     ?    486.5361+-4.9109        ?
   math-partial-sums                                461.9594+-9.7303     ?    465.6082+-7.5737        ?
   math-spectral-norm                               559.9304+-10.3547    ?    560.2048+-14.6957       ?
   string-base64                                    380.2801+-6.6147     ?    382.0573+-6.1234        ?
   string-fasta                                     368.0956+-4.1089     ?    369.5788+-4.3027        ?
   string-tagcloud                                  176.9904+-2.7296          176.8583+-2.3708        

   &lt;geometric&gt;                                      390.6977+-1.5000     ?    392.8431+-2.3303        ? might be 1.0055x slower

                                                        TipOfTree                CopyBarrier                                    
V8Spider:
   crypto                                            48.6737+-2.2567     ?     50.9360+-1.3245        ? might be 1.0465x slower
   deltablue                                         79.0785+-1.8271     ?     80.6070+-4.0047        ? might be 1.0193x slower
   earley-boyer                                      43.7642+-1.6482           43.2371+-1.1393          might be 1.0122x faster
   raytrace                                          30.5356+-1.3369     ?     31.5893+-1.1895        ? might be 1.0345x slower
   regexp                                            61.9969+-2.3919     ?     63.0524+-1.4130        ? might be 1.0170x slower
   richards                                          54.7079+-1.8301     ?     55.0555+-1.7762        ?
   splay                                             37.4195+-1.6466           36.3323+-1.6335          might be 1.0299x faster

   &lt;geometric&gt;                                       48.7045+-0.8551     ?     49.2693+-0.7708        ? might be 1.0116x slower

                                                        TipOfTree                CopyBarrier                                    
Octane:
   encrypt                                           0.16729+-0.00265          0.16563+-0.00408       
   decrypt                                           2.89979+-0.01268    !     3.08545+-0.07238       ! definitely 1.0640x slower
   deltablue                                x2       0.13879+-0.00177    !     0.14482+-0.00152       ! definitely 1.0434x slower
   earley                                            0.30634+-0.00287    ?     0.31311+-0.01222       ? might be 1.0221x slower
   boyer                                             4.46265+-0.13253          4.44548+-0.09677       
   navier-stokes                            x2       4.94364+-0.06512          4.89325+-0.04401         might be 1.0103x faster
   raytrace                                 x2       0.86805+-0.00914    ?     0.88108+-0.01718       ? might be 1.0150x slower
   richards                                 x2       0.09034+-0.00151    ?     0.09257+-0.00305       ? might be 1.0247x slower
   splay                                    x2       0.35379+-0.00776    ?     0.35436+-0.00824       ?
   regexp                                   x2      24.73347+-0.31910         24.62138+-0.61104       
   pdfjs                                    x2      36.85924+-0.48381    !    37.87825+-0.48652       ! definitely 1.0276x slower
   mandreel                                 x2      43.08522+-0.77892    ?    43.70283+-0.89659       ? might be 1.0143x slower
   gbemu                                    x2      31.57263+-0.94809    !    33.02382+-0.42752       ! definitely 1.0460x slower
   closure                                           0.58578+-0.00828          0.58408+-0.00695       
   jquery                                            7.50441+-0.27548          7.41799+-0.04790         might be 1.0117x faster
   box2d                                    x2       9.17197+-0.07876    !     9.37812+-0.10869       ! definitely 1.0225x slower
   zlib                                     x2     374.45736+-16.43373   ?   386.19931+-2.58896       ? might be 1.0314x slower
   typescript                               x2     659.08562+-7.71867    ?   665.02002+-7.03933       ?

   &lt;geometric&gt;                                       5.37771+-0.03183    !     5.46636+-0.02598       ! definitely 1.0165x slower

                                                        TipOfTree                CopyBarrier                                    
Kraken:
   ai-astar                                          137.638+-24.798           132.320+-1.326           might be 1.0402x faster
   audio-beat-detection                               50.059+-0.414      ?      50.917+-0.653         ? might be 1.0171x slower
   audio-dft                                          98.919+-1.813             97.646+-2.843           might be 1.0130x faster
   audio-fft                                          35.749+-0.572             35.317+-0.693           might be 1.0122x faster
   audio-oscillator                                   58.898+-1.842      ?      59.197+-1.135         ?
   imaging-darkroom                                   63.163+-3.830             61.218+-3.853           might be 1.0318x faster
   imaging-desaturate                                 51.681+-3.726             48.907+-1.590           might be 1.0567x faster
   imaging-gaussian-blur                              87.250+-2.235             87.209+-0.563         
   json-parse-financial                               39.864+-2.423             37.913+-1.305           might be 1.0515x faster
   json-stringify-tinderbox                           22.839+-0.862      ?      23.434+-0.864         ? might be 1.0260x slower
   stanford-crypto-aes                                40.409+-1.346      ?      42.930+-2.481         ? might be 1.0624x slower
   stanford-crypto-ccm                                35.866+-1.143      ?      37.068+-1.114         ? might be 1.0335x slower
   stanford-crypto-pbkdf2                             95.547+-1.506      ?      97.809+-2.936         ? might be 1.0237x slower
   stanford-crypto-sha256-iterative                   36.868+-0.800      ?      39.146+-2.638         ? might be 1.0618x slower

   &lt;arithmetic&gt;                                       61.054+-2.110             60.788+-0.955           might be 1.0044x faster

                                                        TipOfTree                CopyBarrier                                    
JSRegress:
   abc-forward-loop-equal                            30.6590+-1.8215     ?     31.1541+-1.3827        ? might be 1.0161x slower
   abc-postfix-backward-loop                         29.6855+-1.2718     ?     30.6586+-0.9921        ? might be 1.0328x slower
   abc-simple-backward-loop                          29.3266+-0.9622     ?     29.9937+-1.2130        ? might be 1.0227x slower
   abc-simple-forward-loop                           30.7038+-0.8400           29.8054+-0.8279          might be 1.0301x faster
   abc-skippy-loop                                   21.2514+-0.3127     ?     22.4727+-1.3827        ? might be 1.0575x slower
   abs-boolean                                        2.4490+-0.0571     ?      2.5211+-0.2224        ? might be 1.0294x slower
   adapt-to-double-divide                            16.4074+-0.4094     ?     16.6128+-0.2955        ? might be 1.0125x slower
   aliased-arguments-getbyval                         1.3188+-0.1840            1.2580+-0.0953          might be 1.0484x faster
   allocate-big-object                                2.6286+-0.3641                ERROR             
   arguments-named-and-reflective                    10.7695+-0.3839     ?     10.8425+-0.5374        ?
   arguments-out-of-bounds                            9.2255+-0.3140     ?      9.4253+-0.1036        ? might be 1.0217x slower
   arguments-strict-mode                              9.2814+-0.2862     ?      9.7877+-0.6464        ? might be 1.0546x slower
   arguments                                          8.6960+-0.3973            8.6681+-0.2989        
   arity-mismatch-inlining                            0.8626+-0.0891            0.8553+-0.0433        
   array-access-polymorphic-structure                 7.0733+-0.0932     ?      7.1838+-0.3399        ? might be 1.0156x slower
   array-nonarray-polymorhpic-access                 23.8139+-0.6369     ?     24.9086+-0.8931        ? might be 1.0460x slower
   array-prototype-every                             78.0103+-3.0998           77.9435+-2.8470        
   array-prototype-forEach                           86.3915+-24.9340          75.5431+-1.9417          might be 1.1436x faster
   array-prototype-map                               84.2718+-2.5272           81.0442+-1.1908          might be 1.0398x faster
   array-prototype-reduce                            72.5066+-2.0828     ?     72.6929+-1.7754        ?
   array-prototype-reduceRight                       73.3231+-1.9726           72.8541+-1.6228        
   array-prototype-some                              77.4330+-1.9121           76.2155+-1.0174          might be 1.0160x faster
   array-splice-contiguous                           21.4319+-0.9223     !     23.9982+-1.2467        ! definitely 1.1197x slower
   array-with-double-add                              3.5051+-0.1155     ?      3.7520+-0.3955        ? might be 1.0704x slower
   array-with-double-increment                        3.0282+-0.0292     !      3.1891+-0.0931        ! definitely 1.0531x slower
   array-with-double-mul-add                          4.3388+-0.2839     ?      4.3917+-0.0691        ? might be 1.0122x slower
   array-with-double-sum                              3.2249+-0.1514            3.1937+-0.0959        
   array-with-int32-add-sub                           5.7432+-0.1193     ?      5.9404+-0.1346        ? might be 1.0343x slower
   array-with-int32-or-double-sum                     3.2309+-0.0419     ?      3.4370+-0.3736        ? might be 1.0638x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     26.8286+-1.4572           26.6568+-0.9483        
   ArrayBuffer-DataView-alloc-long-lived             12.2605+-0.5788     ?     12.3423+-0.2830        ?
   ArrayBuffer-Int32Array-byteOffset                  3.6029+-0.1094     ?      3.6260+-0.1349        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     27.6990+-1.8468     ?     29.2463+-5.6984        ? might be 1.0559x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.3241+-1.0080     ?     20.4301+-1.2533        ?
   ArrayBuffer-Int8Array-alloc-long-lived            11.5661+-1.0370     ?     11.6934+-0.7619        ? might be 1.0110x slower
   ArrayBuffer-Int8Array-alloc                        9.7154+-0.2716     ?     10.2774+-1.2309        ? might be 1.0579x slower
   arrowfunction-call                                10.9705+-0.1618     ?     11.0342+-0.5708        ?
   asmjs_bool_bug                                     7.6852+-0.2311     ?      7.8523+-0.3048        ? might be 1.0218x slower
   assign-custom-setter-polymorphic                   2.4664+-0.1589            2.4250+-0.0416          might be 1.0171x faster
   assign-custom-setter                               3.3037+-0.2110     ?      3.3522+-0.1698        ? might be 1.0147x slower
   basic-set                                          7.5387+-0.6027            7.4205+-0.5196          might be 1.0159x faster
   big-int-mul                                        3.5354+-0.1981            3.4749+-0.0683          might be 1.0174x faster
   boolean-test                                       3.0661+-0.2779            2.9166+-0.0489          might be 1.0513x faster
   branch-fold                                        3.5935+-0.0624     ?      3.6259+-0.0816        ?
   branch-on-string-as-boolean                       16.3489+-0.2960     ?     16.9280+-0.5899        ? might be 1.0354x slower
   by-val-generic                                     2.4171+-0.0855     ?      2.4299+-0.0733        ?
   call-spread-apply                                 27.4577+-1.4944     ?     28.4024+-1.3483        ? might be 1.0344x slower
   call-spread-call                                  20.8317+-0.9600     !     22.9287+-1.0916        ! definitely 1.1007x slower
   captured-assignments                               0.4188+-0.0075     ?      0.4575+-0.0704        ? might be 1.0923x slower
   cast-int-to-double                                 5.0900+-0.0455     ?      5.2130+-0.2157        ? might be 1.0242x slower
   cell-argument                                      5.8991+-0.1209     ?      6.2134+-0.6124        ? might be 1.0533x slower
   cfg-simplify                                       2.8357+-0.0547     ?      2.9210+-0.0878        ? might be 1.0301x slower
   chain-getter-access                                8.3406+-0.0886     ?      8.3418+-0.1720        ?
   cmpeq-obj-to-obj-other                            12.7599+-1.3523           12.7399+-1.3246        
   constant-test                                      5.0051+-0.2606            4.8210+-0.1080          might be 1.0382x faster
   create-lots-of-functions                           9.9673+-0.6443            9.8217+-0.5093          might be 1.0148x faster
   cse-new-array-buffer                               2.4275+-0.1078            2.3741+-0.1696          might be 1.0225x faster
   cse-new-array                                      2.3277+-0.1113     ?      2.3931+-0.0902        ? might be 1.0281x slower
   DataView-custom-properties                        31.9180+-1.0935     ?     32.6223+-1.2261        ? might be 1.0221x slower
   delay-tear-off-arguments-strictmode               11.8948+-0.1806     ?     13.2699+-1.2740        ? might be 1.1156x slower
   deltablue-varargs                                173.6674+-2.9296     ?    174.5814+-8.9779        ?
   destructuring-arguments                          158.9051+-1.9785     !    168.6236+-6.6302        ! definitely 1.0612x slower
   destructuring-parameters-overridden-by-function   
                                                      0.4663+-0.0259            0.4491+-0.0128          might be 1.0384x faster
   destructuring-swap                                 4.8332+-0.1437            4.7660+-0.0568          might be 1.0141x faster
   direct-arguments-getbyval                          1.2699+-0.1097     ?      1.3331+-0.1926        ? might be 1.0497x slower
   div-boolean-double                                 5.3303+-0.0516            5.2781+-0.0696        
   div-boolean                                        8.1428+-0.1021     ?      8.2388+-0.1650        ? might be 1.0118x slower
   double-get-by-val-out-of-bounds                    4.5391+-0.1188            4.3255+-0.1394          might be 1.0494x faster
   double-pollution-getbyval                          8.7385+-0.1204            8.6365+-0.1980          might be 1.0118x faster
   double-pollution-putbyoffset                       3.6040+-0.0959     ?      3.7566+-0.1989        ? might be 1.0423x slower
   double-real-use                                   25.8704+-2.0018           24.2866+-1.0300          might be 1.0652x faster
   double-to-int32-typed-array-no-inline              2.4109+-0.2561            2.2370+-0.1353          might be 1.0778x faster
   double-to-int32-typed-array                        2.0393+-0.0323     ?      2.1896+-0.2445        ? might be 1.0737x slower
   double-to-uint32-typed-array-no-inline             2.3761+-0.1894            2.2871+-0.0599          might be 1.0389x faster
   double-to-uint32-typed-array                       2.1503+-0.0702            2.1140+-0.0431          might be 1.0171x faster
   elidable-new-object-dag                           34.3404+-0.9224           34.2019+-1.1904        
   elidable-new-object-roflcopter                    33.2028+-1.5736           32.9451+-1.0707        
   elidable-new-object-then-call                     32.7499+-1.7140           31.2056+-0.2664          might be 1.0495x faster
   elidable-new-object-tree                          37.9596+-1.0419     ?     38.0883+-1.5517        ?
   empty-string-plus-int                              4.9589+-0.2909            4.8333+-0.1714          might be 1.0260x faster
   emscripten-cube2hash                              26.8223+-1.5437     ?     28.4890+-0.8371        ? might be 1.0621x slower
   exit-length-on-plain-object                       14.7855+-0.4407     ?     15.5168+-0.2944        ? might be 1.0495x slower
   external-arguments-getbyval                        1.2294+-0.0927     ?      1.3449+-0.2542        ? might be 1.0939x slower
   external-arguments-putbyval                        2.5083+-0.6202            2.2907+-0.1813          might be 1.0950x faster
   fixed-typed-array-storage-var-index                1.2506+-0.0517     ?      1.2661+-0.0773        ? might be 1.0124x slower
   fixed-typed-array-storage                          0.9774+-0.0986            0.9364+-0.0795          might be 1.0438x faster
   Float32Array-matrix-mult                           4.0558+-0.1321     ?      4.3664+-0.2486        ? might be 1.0766x slower
   Float32Array-to-Float64Array-set                  51.3637+-2.3033     !     57.7694+-2.1006        ! definitely 1.1247x slower
   Float64Array-alloc-long-lived                     61.3879+-2.9361     ?     62.4184+-2.1785        ? might be 1.0168x slower
   Float64Array-to-Int16Array-set                    60.1937+-2.2801     !     67.5167+-2.2053        ! definitely 1.1217x slower
   fold-double-to-int                                12.2568+-0.2925     ?     12.7076+-0.5708        ? might be 1.0368x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.7931+-0.9654     ?     11.4110+-1.3351        ? might be 1.0573x slower
   fold-get-by-id-to-multi-get-by-offset              9.7948+-0.4183     ?     10.0356+-1.4843        ? might be 1.0246x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.4846+-1.4414     ?      9.1590+-0.9151        ? might be 1.0795x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.1879+-1.1790            8.0919+-1.2143          might be 1.0119x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.4583+-1.2846     ?      9.9604+-1.6790        ? might be 1.0531x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                     10.7438+-0.5967           10.4461+-0.6831          might be 1.0285x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.1764+-1.0502            9.6116+-0.4345          might be 1.0588x faster
   fold-put-by-id-to-multi-put-by-offset             10.0394+-0.6644     ?     11.4487+-1.4304        ? might be 1.1404x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                      9.9450+-0.5614     ?     11.2488+-1.5738        ? might be 1.1311x slower
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     10.7750+-1.4143     ?     11.3511+-1.5385        ? might be 1.0535x slower
   fold-put-structure                                 8.4439+-0.4773            7.8015+-1.1897          might be 1.0823x faster
   for-of-iterate-array-entries                      10.9854+-0.3150     ?     11.0797+-0.2976        ?
   for-of-iterate-array-keys                          3.4847+-0.2165     ?      3.5036+-0.1870        ?
   for-of-iterate-array-values                        3.3423+-0.0517     ?      3.6323+-0.4162        ? might be 1.0868x slower
   fround                                            18.3348+-1.1165           17.6717+-0.4989          might be 1.0375x faster
   ftl-library-inlining-dataview                     56.7878+-0.8081     ?     58.1045+-0.8218        ? might be 1.0232x slower
   ftl-library-inlining                              99.9291+-3.7241     ?    103.9301+-2.8443        ? might be 1.0400x slower
   function-call                                     11.1311+-0.4290           10.9091+-0.3288          might be 1.0203x faster
   function-dot-apply                                 2.0285+-0.0364     ?      2.0495+-0.0366        ? might be 1.0104x slower
   function-test                                      2.7009+-0.0333     ?      2.7052+-0.0665        ?
   function-with-eval                                84.9795+-1.8859     ?     85.2165+-3.0844        ?
   gcse-poly-get-less-obvious                        21.9874+-0.4175           21.4637+-0.6506          might be 1.0244x faster
   gcse-poly-get                                     22.0220+-0.5826     ?     23.0745+-2.2413        ? might be 1.0478x slower
   gcse                                               3.4215+-0.0610     ?      3.4631+-0.2481        ? might be 1.0122x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.6172+-0.0821     ?      2.6242+-0.0934        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      4.7314+-0.1266     ?      4.8940+-0.6550        ? might be 1.0344x slower
   get-by-id-chain-from-try-block                     2.4050+-0.0302     ?      2.4995+-0.0918        ? might be 1.0393x slower
   get-by-id-check-structure-elimination              3.9420+-0.0968     ?      3.9546+-0.1441        ?
   get-by-id-proto-or-self                           15.1943+-0.3947     ?     16.2537+-1.1803        ? might be 1.0697x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.9506+-0.2353            2.8646+-0.0570          might be 1.0300x faster
   get-by-id-self-or-proto                           15.2104+-0.9210     ?     15.9092+-0.7481        ? might be 1.0459x slower
   get-by-val-out-of-bounds                           4.1004+-0.0671     ?      4.2407+-0.1140        ? might be 1.0342x slower
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7057+-0.0600            2.6989+-0.0237        
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.0554+-0.0734            6.0462+-0.0358        
   get-by-val-with-string-chain-from-try-block   
                                                      2.4565+-0.0854     ?      2.6935+-0.4360        ? might be 1.0965x slower
   get-by-val-with-string-check-structure-elimination   
                                                      5.3286+-0.3639            5.3104+-0.1357        
   get-by-val-with-string-proto-or-self              15.5826+-0.9410     ?     16.1534+-0.7691        ? might be 1.0366x slower
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.0785+-0.0949     ?      3.1017+-0.0754        ?
   get-by-val-with-string-self-or-proto              16.6108+-0.5025     ?     16.6999+-1.0083        ?
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      2.8737+-0.0361     ?      2.9304+-0.0524        ? might be 1.0197x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.6238+-0.4383           12.5592+-0.5372        
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.5432+-0.1498     ?      2.7756+-0.4494        ? might be 1.0914x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.1808+-0.1683     ?     11.7356+-0.6821        ? might be 1.0496x slower
   get-by-val-with-symbol-proto-or-self              16.3438+-0.7637           16.1578+-0.4404          might be 1.0115x faster
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.6880+-0.0605     ?      3.8547+-0.3592        ? might be 1.0452x slower
   get-by-val-with-symbol-self-or-proto              17.1835+-1.9067           16.0462+-0.4939          might be 1.0709x faster
   get_callee_monomorphic                             2.4547+-0.3754     ?      2.4604+-0.2923        ?
   get_callee_polymorphic                             3.2985+-0.1343     ?      3.3481+-0.1732        ? might be 1.0150x slower
   getter-no-activation                               4.8664+-0.1482     ?      4.8853+-0.1574        ?
   getter-prototype                                   7.7094+-0.0770     ?      8.4655+-1.4652        ? might be 1.0981x slower
   getter-richards-try-catch                       1005.4488+-24.8125    ?   1021.9084+-22.9692       ? might be 1.0164x slower
   getter-richards                                  115.3779+-4.2928     ?    118.5544+-5.5394        ? might be 1.0275x slower
   getter                                             5.6022+-0.5553     ?      5.6796+-0.6410        ? might be 1.0138x slower
   global-object-access-with-mutating-structure   
                                                      5.7913+-0.2995            5.6892+-0.3438          might be 1.0179x faster
   global-var-const-infer-fire-from-opt               0.9864+-0.2678            0.8283+-0.1334          might be 1.1909x faster
   global-var-const-infer                             0.6588+-0.0508            0.6459+-0.0350          might be 1.0200x faster
   hard-overflow-check-equal                         28.1686+-0.9434           27.9182+-1.3270        
   hard-overflow-check                               28.0322+-1.1118           27.0617+-0.6689          might be 1.0359x faster
   HashMap-put-get-iterate-keys                      25.6188+-1.6080     ?     26.3565+-1.1643        ? might be 1.0288x slower
   HashMap-put-get-iterate                           28.6742+-1.1881     ?     29.2480+-1.8918        ? might be 1.0200x slower
   HashMap-string-put-get-iterate                    24.6393+-1.8683     ?     25.0311+-1.3551        ? might be 1.0159x slower
   hoist-make-rope                                    8.2698+-0.5685     ?      9.0882+-0.7496        ? might be 1.0990x slower
   hoist-poly-check-structure-effectful-loop   
                                                      3.6452+-0.3195            3.6182+-0.0769        
   hoist-poly-check-structure                         3.0615+-0.0686     ?      3.1478+-0.1459        ? might be 1.0282x slower
   imul-double-only                                   7.5462+-0.3738     ?      7.8336+-0.5846        ? might be 1.0381x slower
   imul-int-only                                      8.3655+-0.9055     ?      8.8296+-0.8829        ? might be 1.0555x slower
   imul-mixed                                         7.0018+-0.6150     ?      7.3048+-0.4367        ? might be 1.0433x slower
   in-four-cases                                     17.3836+-0.7132     ?     17.6914+-1.0427        ? might be 1.0177x slower
   in-one-case-false                                  9.3865+-0.2369     !     10.1736+-0.4552        ! definitely 1.0839x slower
   in-one-case-true                                   9.7138+-0.4195     ?      9.8720+-0.2090        ? might be 1.0163x slower
   in-two-cases                                       9.5970+-0.2521     !     10.7829+-0.7989        ! definitely 1.1236x slower
   indexed-properties-in-objects                      2.8835+-0.1862     ?      2.9231+-0.1013        ? might be 1.0137x slower
   infer-closure-const-then-mov-no-inline             3.7053+-0.3934            3.6172+-0.0348          might be 1.0243x faster
   infer-closure-const-then-mov                      18.5825+-0.8745     ?     18.6647+-0.4938        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.9288+-0.3482     ?     11.1655+-0.3255        ? might be 1.0217x slower
   infer-closure-const-then-put-to-scope             23.1673+-0.5307           22.5123+-0.2859          might be 1.0291x faster
   infer-closure-const-then-reenter-no-inline   
                                                     48.3849+-1.0860     ?     49.0010+-1.5179        ? might be 1.0127x slower
   infer-closure-const-then-reenter                  23.2185+-1.6642     ?     23.7557+-1.3734        ? might be 1.0231x slower
   infer-constant-global-property                     3.3882+-0.0847     ?      3.4458+-0.0883        ? might be 1.0170x slower
   infer-constant-property                            2.6484+-0.1086     ?      2.7165+-0.1910        ? might be 1.0257x slower
   infer-one-time-closure-ten-vars                    8.0185+-0.6982     ?      8.2620+-0.6667        ? might be 1.0304x slower
   infer-one-time-closure-two-vars                    7.6945+-0.5659            7.3807+-0.1622          might be 1.0425x faster
   infer-one-time-closure                             7.3712+-0.5684     ?      7.4239+-0.4141        ?
   infer-one-time-deep-closure                       10.8376+-0.2950     ?     10.8435+-0.4889        ?
   inline-arguments-access                            3.6148+-0.1043     ?      3.6495+-0.1774        ?
   inline-arguments-aliased-access                    3.7190+-0.2212     ?      3.8235+-0.5617        ? might be 1.0281x slower
   inline-arguments-local-escape                      3.8052+-0.3365            3.6920+-0.1036          might be 1.0307x faster
   inline-get-scoped-var                              4.5738+-0.1311     ?      4.6055+-0.1369        ?
   inlined-put-by-id-transition                       9.4571+-0.3305     ?      9.6647+-0.4817        ? might be 1.0219x slower
   inlined-put-by-val-with-string-transition   
                                                     41.4900+-1.4196     ?     41.8797+-1.2046        ?
   inlined-put-by-val-with-symbol-transition   
                                                     42.3209+-2.0520     ?     43.5560+-2.5896        ? might be 1.0292x slower
   int-or-other-abs-then-get-by-val                   4.5505+-0.0627            4.5249+-0.1030        
   int-or-other-abs-zero-then-get-by-val             15.8814+-0.7079     ?     16.3388+-0.4567        ? might be 1.0288x slower
   int-or-other-add-then-get-by-val                   4.5638+-0.1009     ^      4.3886+-0.0632        ^ definitely 1.0399x faster
   int-or-other-add                                   5.5571+-1.3414     ?      6.0696+-2.7271        ? might be 1.0922x slower
   int-or-other-div-then-get-by-val                   3.7647+-0.1109     ?      3.9653+-0.2868        ? might be 1.0533x slower
   int-or-other-max-then-get-by-val                   4.0655+-0.2394            3.8470+-0.0757          might be 1.0568x faster
   int-or-other-min-then-get-by-val                   3.7535+-0.0579            3.7424+-0.1476        
   int-or-other-mod-then-get-by-val                   3.5207+-0.0894            3.4862+-0.0283        
   int-or-other-mul-then-get-by-val                   3.6046+-0.2118     ?      3.7240+-0.1508        ? might be 1.0331x slower
   int-or-other-neg-then-get-by-val                   4.0672+-0.0996     ?      4.3342+-0.3377        ? might be 1.0657x slower
   int-or-other-neg-zero-then-get-by-val             15.4683+-0.2474     !     16.8065+-0.9258        ! definitely 1.0865x slower
   int-or-other-sub-then-get-by-val                   4.5749+-0.1324     ?      4.6178+-0.2710        ?
   int-or-other-sub                                   3.5448+-0.1300            3.4526+-0.0462          might be 1.0267x faster
   int-overflow-local                                 4.4065+-0.5137            4.1514+-0.1157          might be 1.0614x faster
   Int16Array-alloc-long-lived                       45.5349+-1.7437           44.6700+-1.9541          might be 1.0194x faster
   Int16Array-bubble-sort-with-byteLength            17.5338+-0.6191     !     20.7324+-1.2414        ! definitely 1.1824x slower
   Int16Array-bubble-sort                            17.7482+-1.5849           17.5123+-0.3778          might be 1.0135x faster
   Int16Array-load-int-mul                            1.4406+-0.0453     ?      1.4452+-0.0282        ?
   Int16Array-to-Int32Array-set                      46.1750+-1.1464     !     55.1577+-3.0383        ! definitely 1.1945x slower
   Int32Array-alloc-large                            13.0186+-1.2865           12.8819+-0.7258          might be 1.0106x faster
   Int32Array-alloc-long-lived                       49.9589+-1.3855     ?     51.4449+-2.5524        ? might be 1.0297x slower
   Int32Array-alloc                                   2.7975+-0.1117     ?      2.8990+-0.1627        ? might be 1.0363x slower
   Int32Array-Int8Array-view-alloc                    5.9952+-0.1325     ?      6.2015+-0.4513        ? might be 1.0344x slower
   int52-spill                                        4.5902+-0.1451            4.5542+-0.1192        
   Int8Array-alloc-long-lived                        39.1768+-0.5026     ?     39.9347+-1.5429        ? might be 1.0193x slower
   Int8Array-load-with-byteLength                     3.3650+-0.0787     ?      3.4258+-0.0959        ? might be 1.0181x slower
   Int8Array-load                                     3.3515+-0.0271     ?      3.6637+-0.5932        ? might be 1.0932x slower
   integer-divide                                    10.4616+-0.3260           10.3649+-0.2060        
   integer-modulo                                     1.5902+-0.0432            1.5768+-0.0560        
   is-boolean-fold-tricky                             3.8190+-0.0910     ?      3.8734+-0.2205        ? might be 1.0142x slower
   is-boolean-fold                                    2.6538+-0.0298     ?      2.6738+-0.0672        ?
   is-function-fold-tricky-internal-function   
                                                      9.4066+-0.2308     ?      9.7077+-0.2618        ? might be 1.0320x slower
   is-function-fold-tricky                            4.0384+-0.0703     ?      4.0931+-0.1233        ? might be 1.0135x slower
   is-function-fold                                   2.6630+-0.0312     ?      2.7481+-0.0927        ? might be 1.0320x slower
   is-number-fold-tricky                              3.9123+-0.1018     ?      4.0567+-0.0621        ? might be 1.0369x slower
   is-number-fold                                     2.6808+-0.0678            2.6515+-0.0460          might be 1.0110x faster
   is-object-or-null-fold-functions                   2.6874+-0.0788     ?      2.7388+-0.0847        ? might be 1.0191x slower
   is-object-or-null-fold-less-tricky                 4.0190+-0.0490     ?      4.0589+-0.1453        ?
   is-object-or-null-fold-tricky                      4.7369+-0.0716     ?      4.7738+-0.1126        ?
   is-object-or-null-fold                             2.6790+-0.0532     ?      2.7861+-0.1835        ? might be 1.0400x slower
   is-object-or-null-trickier-function                4.0523+-0.0890     ?      4.5141+-0.9218        ? might be 1.1140x slower
   is-object-or-null-trickier-internal-function   
                                                      9.8590+-0.3874            9.7710+-0.1937        
   is-object-or-null-tricky-function                  4.0529+-0.1096     ?      4.2453+-0.2571        ? might be 1.0475x slower
   is-object-or-null-tricky-internal-function   
                                                      7.7717+-0.5504            7.2287+-0.1001          might be 1.0751x faster
   is-string-fold-tricky                              3.9346+-0.0938     ?      4.0119+-0.0373        ? might be 1.0197x slower
   is-string-fold                                     2.6622+-0.0624     ?      2.6888+-0.0813        ?
   is-undefined-fold-tricky                           3.4983+-0.2280            3.3741+-0.0840          might be 1.0368x faster
   is-undefined-fold                                  2.6226+-0.0496     ?      2.6937+-0.1122        ? might be 1.0271x slower
   JSONP-negative-0                                   0.2531+-0.0076     ?      0.2716+-0.0387        ? might be 1.0729x slower
   large-int-captured                                 4.1351+-0.2436            4.0534+-0.1025          might be 1.0201x faster
   large-int-neg                                     14.0043+-0.4924     ?     14.8794+-0.7836        ? might be 1.0625x slower
   large-int                                         13.0544+-0.4132           12.8546+-0.2972          might be 1.0155x faster
   load-varargs-elimination                          21.4800+-1.1890     ?     21.7145+-0.8264        ? might be 1.0109x slower
   logical-not-weird-types                            3.0872+-0.0412            3.0623+-0.0619        
   logical-not                                        4.5747+-0.4507            4.3923+-0.0677          might be 1.0415x faster
   lots-of-fields                                     9.0352+-0.2073     ?      9.6231+-0.5304        ? might be 1.0651x slower
   make-indexed-storage                               2.7673+-0.1632     ?      3.1042+-0.4340        ? might be 1.1218x slower
   make-rope-cse                                      3.7874+-0.3563     ?      3.8360+-0.4716        ? might be 1.0128x slower
   marsaglia-larger-ints                             32.4641+-1.2311     ?     32.6179+-1.4938        ?
   marsaglia-osr-entry                               21.5866+-0.7689     ?     21.6602+-0.7443        ?
   math-with-out-of-bounds-array-values              22.5623+-1.0670           21.9959+-0.8702          might be 1.0258x faster
   max-boolean                                        2.6351+-0.1115            2.6151+-0.0321        
   method-on-number                                  16.3605+-0.6159     !     17.6190+-0.5695        ! definitely 1.0769x slower
   min-boolean                                        2.6448+-0.0393            2.6247+-0.0493        
   minus-boolean-double                               3.0406+-0.0366     ?      3.1110+-0.0585        ? might be 1.0232x slower
   minus-boolean                                      2.3601+-0.1217            2.3158+-0.0318          might be 1.0191x faster
   misc-strict-eq                                    27.7926+-0.9336     ?     29.6031+-1.7581        ? might be 1.0651x slower
   mod-boolean-double                                11.1963+-0.3291           11.1539+-0.2415        
   mod-boolean                                        8.5988+-0.4055            8.3114+-0.1436          might be 1.0346x faster
   mul-boolean-double                                 3.7711+-0.4771            3.6164+-0.0693          might be 1.0428x faster
   mul-boolean                                        2.7920+-0.0761     ?      2.8013+-0.0596        ?
   neg-boolean                                        3.1075+-0.0679     ?      3.1896+-0.2640        ? might be 1.0264x slower
   negative-zero-divide                               0.3801+-0.0205     ^      0.3404+-0.0109        ^ definitely 1.1167x faster
   negative-zero-modulo                               0.3342+-0.0192     ?      0.3752+-0.1188        ? might be 1.1225x slower
   negative-zero-negate                               0.3390+-0.0376            0.3221+-0.0202          might be 1.0526x faster
   nested-function-parsing                           46.2588+-2.0377           45.0798+-0.4822          might be 1.0262x faster
   new-array-buffer-dead                             90.1220+-1.9132           88.8659+-1.9215          might be 1.0141x faster
   new-array-buffer-push                              6.7249+-0.7724            6.3567+-0.5220          might be 1.0579x faster
   new-array-dead                                    15.6755+-1.7513           15.5379+-0.7764        
   new-array-push                                     3.4268+-0.0946     ?      3.6585+-0.1564        ? might be 1.0676x slower
   no-inline-constructor                             32.0386+-0.9367     ?     32.5082+-1.2402        ? might be 1.0147x slower
   number-test                                        2.9875+-0.0959            2.8943+-0.0827          might be 1.0322x faster
   object-closure-call                                4.9897+-0.3767            4.8914+-0.1829          might be 1.0201x faster
   object-get-own-property-symbols-on-large-array   
                                                      4.1511+-0.2788     ?      4.2866+-0.3505        ? might be 1.0326x slower
   object-test                                        2.8504+-0.3006            2.6847+-0.0463          might be 1.0617x faster
   obvious-sink-pathology-taken                      98.6789+-1.0103     ?     99.8858+-3.0662        ? might be 1.0122x slower
   obvious-sink-pathology                            95.2815+-1.7659           94.1987+-0.8287          might be 1.0115x faster
   obviously-elidable-new-object                     29.4531+-1.5140           29.0735+-0.7013          might be 1.0131x faster
   plus-boolean-arith                                 2.4350+-0.0585            2.4219+-0.1009        
   plus-boolean-double                                3.0693+-0.0662     ?      3.1041+-0.0415        ? might be 1.0114x slower
   plus-boolean                                       2.5217+-0.0309     ?      2.6392+-0.2970        ? might be 1.0466x slower
   poly-chain-access-different-prototypes-simple   
                                                      2.6056+-0.0838     ?      2.6952+-0.2737        ? might be 1.0344x slower
   poly-chain-access-different-prototypes             2.5197+-0.0438     ?      2.5754+-0.0537        ? might be 1.0221x slower
   poly-chain-access-simpler                          2.5987+-0.0807     ?      2.7213+-0.1822        ? might be 1.0472x slower
   poly-chain-access                                  2.5794+-0.1711     ?      2.6528+-0.2711        ? might be 1.0284x slower
   poly-stricteq                                     50.2005+-0.8556     ?     52.5764+-1.9447        ? might be 1.0473x slower
   polymorphic-array-call                             1.4366+-0.4321            1.2825+-0.0799          might be 1.1202x faster
   polymorphic-get-by-id                              2.9078+-0.2080            2.8430+-0.0287          might be 1.0228x faster
   polymorphic-put-by-id                             27.6405+-0.7440     ?     28.5027+-0.8366        ? might be 1.0312x slower
   polymorphic-put-by-val-with-string                29.1290+-0.9583           29.0407+-1.1219        
   polymorphic-put-by-val-with-symbol                29.3390+-0.9446           28.8688+-0.7776          might be 1.0163x faster
   polymorphic-structure                             12.5812+-0.4667           12.5263+-0.2383        
   polyvariant-monomorphic-get-by-id                  6.5031+-0.7705     ?      6.9377+-1.0840        ? might be 1.0668x slower
   proto-getter-access                                8.3912+-0.3632            8.2522+-0.2482          might be 1.0169x faster
   prototype-access-with-mutating-prototype           5.3131+-0.1031     ?      5.3802+-0.1355        ? might be 1.0126x slower
   put-by-id-replace-and-transition                   7.6355+-0.2486     ?      7.7525+-0.6745        ? might be 1.0153x slower
   put-by-id-slightly-polymorphic                     2.7017+-0.0881            2.6827+-0.0528        
   put-by-id                                         10.1748+-0.5817            9.6402+-0.6494          might be 1.0555x faster
   put-by-val-direct                                  0.3390+-0.0228            0.3358+-0.0192        
   put-by-val-large-index-blank-indexing-type   
                                                      5.2655+-0.3618     ?      5.3822+-0.3356        ? might be 1.0222x slower
   put-by-val-machine-int                             2.4635+-0.1209            2.4504+-0.0718        
   put-by-val-with-string-replace-and-transition   
                                                     10.2629+-0.6259           10.0688+-0.2064          might be 1.0193x faster
   put-by-val-with-string-slightly-polymorphic   
                                                      2.9965+-0.2743     ?      3.0203+-0.1120        ?
   put-by-val-with-string                            10.9746+-0.8727           10.8697+-0.7526        
   put-by-val-with-symbol-replace-and-transition   
                                                     12.5726+-1.3784           12.1820+-0.6581          might be 1.0321x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.1781+-0.0371     ?      3.2084+-0.0559        ?
   put-by-val-with-symbol                            11.0080+-1.0843           10.5042+-0.6367          might be 1.0480x faster
   rare-osr-exit-on-local                            13.7280+-0.2775     ?     13.7878+-0.4894        ?
   raytrace-with-empty-try-catch                      5.5283+-0.9665            5.2341+-0.1108          might be 1.0562x faster
   raytrace-with-try-catch                            9.6937+-0.2994     ?     10.0346+-0.3156        ? might be 1.0352x slower
   register-pressure-from-osr                        16.8567+-0.5259           16.5480+-0.3758          might be 1.0187x faster
   repeat-multi-get-by-offset                        22.1275+-0.5520     ?     22.2415+-0.6833        ?
   richards-empty-try-catch                          72.1535+-2.1002     ?     73.4194+-2.1236        ? might be 1.0175x slower
   richards-try-catch                               248.0147+-11.1846         245.6300+-11.0472       
   setter-prototype                                   7.7951+-0.2406     ?      7.8192+-0.2876        ?
   setter                                             6.0612+-0.6760     ?      6.4061+-0.5878        ? might be 1.0569x slower
   simple-activation-demo                            24.5290+-0.8675           24.5137+-0.8074        
   simple-getter-access                              11.0701+-0.2543           10.8294+-0.2550          might be 1.0222x faster
   simple-poly-call-nested                            8.3529+-0.2052     ?      8.7873+-0.4768        ? might be 1.0520x slower
   simple-poly-call                                   1.3114+-0.1706            1.2464+-0.0204          might be 1.0522x faster
   sin-boolean                                       21.9640+-2.3730     ?     22.1023+-1.4629        ?
   singleton-scope                                   64.8886+-2.1527           64.5591+-2.8261        
   sink-function                                     10.0872+-0.7003     ?     10.4530+-0.6297        ? might be 1.0363x slower
   sink-huge-activation                              16.4399+-0.5120     ?     16.5466+-0.7431        ?
   sinkable-new-object-dag                           55.2156+-0.9195           53.9531+-1.8180          might be 1.0234x faster
   sinkable-new-object-taken                         43.7229+-2.3522     ?     44.5783+-1.4770        ? might be 1.0196x slower
   sinkable-new-object                               30.6088+-1.2905           30.2974+-1.7581          might be 1.0103x faster
   slow-array-profile-convergence                     2.4709+-0.1486     ?      2.5106+-0.0856        ? might be 1.0161x slower
   slow-convergence                                   2.3703+-0.0779     ?      2.5733+-0.2804        ? might be 1.0857x slower
   slow-ternaries                                    17.2039+-0.3595     ?     17.8428+-0.6943        ? might be 1.0371x slower
   sorting-benchmark                                 17.7844+-0.5417           17.2147+-0.5698          might be 1.0331x faster
   sparse-conditional                                 1.1694+-0.0464     ?      1.1936+-0.0814        ? might be 1.0208x slower
   splice-to-remove                                  11.8294+-0.2611     ?     12.6182+-0.7353        ? might be 1.0667x slower
   string-char-code-at                               13.5095+-0.5580           13.4676+-0.4817        
   string-concat-object                               2.3062+-0.3523            2.2257+-0.0686          might be 1.0362x faster
   string-concat-pair-object                          2.2621+-0.2072            2.2247+-0.1676          might be 1.0168x faster
   string-concat-pair-simple                         10.1936+-1.1152            9.8425+-0.7879          might be 1.0357x faster
   string-concat-simple                               9.6889+-0.4141            9.5481+-0.4937          might be 1.0147x faster
   string-cons-repeat                                 6.9606+-0.5722            6.7498+-0.5440          might be 1.0312x faster
   string-cons-tower                                  7.0413+-0.5018            6.6422+-0.1573          might be 1.0601x faster
   string-equality                                   16.6834+-0.6328           16.3899+-0.5369          might be 1.0179x faster
   string-get-by-val-big-char                         6.5370+-0.1401     ?      6.6460+-0.2875        ? might be 1.0167x slower
   string-get-by-val-out-of-bounds-insane             3.1190+-0.0918            3.1025+-0.1195        
   string-get-by-val-out-of-bounds                    3.9538+-0.1674     ?      4.0521+-0.2490        ? might be 1.0249x slower
   string-get-by-val                                  2.7898+-0.0781     ?      2.8165+-0.0416        ?
   string-hash                                        1.9460+-0.2163     ?      2.0063+-0.3249        ? might be 1.0310x slower
   string-long-ident-equality                        13.5823+-0.2945     ?     13.9297+-0.3259        ? might be 1.0256x slower
   string-out-of-bounds                              10.9208+-1.6288           10.1681+-0.4432          might be 1.0740x faster
   string-repeat-arith                               26.7042+-0.5691     ?     27.6851+-1.2294        ? might be 1.0367x slower
   string-sub                                        57.4428+-2.0544           56.4015+-1.4757          might be 1.0185x faster
   string-test                                        2.8979+-0.3048            2.8677+-0.0659          might be 1.0106x faster
   string-var-equality                               25.7244+-1.0075     ?     27.4883+-1.0510        ? might be 1.0686x slower
   structure-hoist-over-transitions                   2.3739+-0.2678            2.2733+-0.0739          might be 1.0443x faster
   substring-concat-weird                            35.4907+-0.9397     ?     35.9782+-1.1048        ? might be 1.0137x slower
   substring-concat                                  39.5767+-0.4379     ?     41.3360+-1.8453        ? might be 1.0445x slower
   substring                                         44.3896+-1.1623     ?     45.3562+-1.5479        ? might be 1.0218x slower
   switch-char-constant                               2.6786+-0.0872     ?      2.6955+-0.0453        ?
   switch-char                                        5.6897+-0.8430     ?      6.2449+-0.7555        ? might be 1.0976x slower
   switch-constant                                    8.2615+-0.6175     ?      9.3535+-1.5654        ? might be 1.1322x slower
   switch-string-basic-big-var                       14.4728+-0.4816     !     16.2736+-1.2623        ! definitely 1.1244x slower
   switch-string-basic-big                           15.0027+-0.4638     ?     15.2704+-0.4213        ? might be 1.0178x slower
   switch-string-basic-var                           13.6650+-0.3257     !     15.4670+-0.8951        ! definitely 1.1319x slower
   switch-string-basic                               12.6801+-0.3286     ?     14.0801+-2.8104        ? might be 1.1104x slower
   switch-string-big-length-tower-var                18.5501+-1.1404     ?     19.8722+-0.3838        ? might be 1.0713x slower
   switch-string-length-tower-var                    13.3670+-0.4494     ?     13.8947+-0.2923        ? might be 1.0395x slower
   switch-string-length-tower                        11.7568+-0.3351           11.7160+-0.3285        
   switch-string-short                               11.4887+-0.2341     ?     11.6582+-0.1717        ? might be 1.0148x slower
   switch                                            11.3312+-0.5178     ?     11.3649+-0.4613        ?
   tear-off-arguments-simple                          2.9987+-0.1132     ?      3.3155+-0.6137        ? might be 1.1056x slower
   tear-off-arguments                                 4.7560+-1.7917            4.1872+-0.2821          might be 1.1358x faster
   temporal-structure                                11.9780+-0.4517           11.7229+-0.2228          might be 1.0218x faster
   to-int32-boolean                                  12.5300+-0.2005     ?     12.7318+-0.2852        ? might be 1.0161x slower
   try-catch-get-by-val-cloned-arguments              8.9381+-0.3116     ?      9.1713+-0.1575        ? might be 1.0261x slower
   try-catch-get-by-val-direct-arguments              2.1664+-0.0708     ?      2.2987+-0.3635        ? might be 1.0611x slower
   try-catch-get-by-val-scoped-arguments              4.6540+-0.3343     ?      4.7850+-0.3400        ? might be 1.0282x slower
   typed-array-get-set-by-val-profiling              27.7601+-1.1876     ?     27.8776+-0.9896        ?
   undefined-property-access                        224.0288+-7.2697          219.3663+-3.0073          might be 1.0213x faster
   undefined-test                                     3.2122+-0.5520            3.0397+-0.2599          might be 1.0567x faster
   unprofiled-licm                                    9.8947+-0.4975            9.4136+-0.1062          might be 1.0511x faster
   v8-raytrace-with-empty-try-catch                  24.1227+-0.5679     ?     24.6723+-0.6499        ? might be 1.0228x slower
   v8-raytrace-with-try-catch                        63.5427+-0.9339           61.4447+-1.3039          might be 1.0341x faster
   varargs-call                                      13.1496+-0.2166     ?     13.3098+-0.6952        ? might be 1.0122x slower
   varargs-construct-inline                          22.2813+-0.7684     ?     23.0854+-1.0940        ? might be 1.0361x slower
   varargs-construct                                 22.1055+-1.2991           20.5477+-0.4616          might be 1.0758x faster
   varargs-inline                                     8.8925+-0.2107     ?      8.9015+-0.3577        ?
   varargs-strict-mode                                9.9533+-0.1941     ?     10.0381+-0.1355        ?
   varargs                                           10.2448+-0.7531           10.0682+-0.3935          might be 1.0175x faster
   weird-inlining-const-prop                          2.2250+-0.1494     ?      2.3942+-0.3290        ? might be 1.0760x slower

   &lt;geometric&gt;                                        8.1120+-0.0211                ERROR             

                                                        TipOfTree                CopyBarrier                                    
AsmBench:
   bigfib.cpp                                       459.0153+-10.2528    ?    460.5957+-16.2095       ?
   cray.c                                           399.0892+-5.0726          394.5936+-6.9938          might be 1.0114x faster
   dry.c                                            424.7751+-10.1913    ?    431.6040+-6.5051        ? might be 1.0161x slower
   FloatMM.c                                        694.0030+-3.9148     ?    696.0337+-6.3042        ?
   gcc-loops.cpp                                   3488.9203+-48.9453        3474.9813+-17.3350       
   n-body.c                                         840.0966+-12.5275    ?    850.6762+-19.0963       ? might be 1.0126x slower
   Quicksort.c                                      416.2937+-6.6109          409.9180+-6.3406          might be 1.0156x faster
   stepanov_container.cpp                          3638.8120+-185.5335       3548.0878+-111.7123        might be 1.0256x faster
   Towers.c                                         236.4852+-4.2395     ?    239.5927+-6.6650        ? might be 1.0131x slower

   &lt;geometric&gt;                                      726.7828+-4.3967          726.1412+-4.0736          might be 1.0009x faster

                                                        TipOfTree                CopyBarrier                                    
CompressionBench:
   huffman                                           63.4103+-4.6493           62.3862+-3.1287          might be 1.0164x faster
   arithmetic-simple                                274.6436+-1.9738     ?    281.8087+-14.2624       ? might be 1.0261x slower
   arithmetic-precise                               247.6661+-4.6923     ?    252.2318+-4.1505        ? might be 1.0184x slower
   arithmetic-complex-precise                       246.7713+-2.1247     ?    255.1078+-7.3175        ? might be 1.0338x slower
   arithmetic-precise-order-0                       288.3261+-5.5442          285.8680+-3.5287        
   arithmetic-precise-order-1                       306.6312+-1.8643     ?    308.9940+-2.4984        ?
   arithmetic-precise-order-2                       361.0420+-14.9012    ?    361.4166+-13.3314       ?
   arithmetic-simple-order-1                        324.5730+-4.0259     ?    326.0039+-4.6573        ?
   arithmetic-simple-order-2                        381.0219+-8.2712          378.9940+-2.5014        
   lz-string                                        316.1736+-8.5894     ?    317.0848+-5.5384        ?

   &lt;geometric&gt;                                      258.3139+-1.6448     ?    259.9582+-1.3443        ? might be 1.0064x slower

                                                        TipOfTree                CopyBarrier                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                   50.5998+-0.2791                ERROR</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131710</commentid>
    <comment_count>14</comment_count>
      <attachid>262708</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-08 13:17:47 -0700</bug_when>
    <thetext>Created attachment 262708
so far</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131715</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-08 14:05:52 -0700</bug_when>
    <thetext>Latest performance numbers, showing the effect of the copy barrier optimization phase.

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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190682)
&quot;CopyBarrier&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190682)
    export JSC_enableCopyBarrierOptimization=false
&quot;CopyBarrierOpt&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r190682)
    export JSC_enableCopyBarrierOptimization=true

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                CopyBarrier              CopyBarrierOpt        CopyBarrierOpt v. TipOfTree
SunSpider:
   3d-cube                                    4.5721+-0.1898     ?      4.6021+-0.0796     ?      4.7252+-0.1747        ? might be 1.0335x slower
   3d-morph                                   5.3564+-0.1712            5.2216+-0.0289     ?      5.3242+-0.1205        
   3d-raytrace                                5.1527+-0.1191     ?      5.5182+-0.3596     ?      5.8713+-1.2334        ? might be 1.1395x slower
   access-binary-trees                        2.1350+-0.0853     ?      2.2193+-0.1832            2.1990+-0.0490        ? might be 1.0300x slower
   access-fannkuch                            5.6855+-0.4303            5.6654+-0.0389            5.6428+-0.2465        
   access-nbody                               2.5809+-0.1795            2.4614+-0.0094     ?      2.6533+-0.3544        ? might be 1.0280x slower
   access-nsieve                              3.3419+-0.0528     ?      3.4241+-0.1110            3.3756+-0.0522        ? might be 1.0101x slower
   bitops-3bit-bits-in-byte                   1.2219+-0.0906            1.1496+-0.0240            1.1424+-0.0088          might be 1.0696x faster
   bitops-bits-in-byte                        3.2175+-0.0318            3.1651+-0.0353     ?      3.2522+-0.1197        ? might be 1.0108x slower
   bitops-bitwise-and                         2.0001+-0.0636            1.9570+-0.0217     ?      1.9667+-0.0318          might be 1.0170x faster
   bitops-nsieve-bits                         2.9967+-0.0403            2.9883+-0.0482     ?      3.0973+-0.2347        ? might be 1.0336x slower
   controlflow-recursive                      2.4226+-0.1548            2.4148+-0.1507     ?      2.5106+-0.2389        ? might be 1.0363x slower
   crypto-aes                                 3.9853+-0.2508     ?      4.6087+-1.0312            3.9963+-0.0861        ?
   crypto-md5                                 2.5252+-0.1221            2.5084+-0.0577            2.4888+-0.0195          might be 1.0146x faster
   crypto-sha1                                2.4983+-0.2548            2.3832+-0.1266     ?      2.4609+-0.1064          might be 1.0152x faster
   date-format-tofte                          6.4712+-0.1451     ?      6.6422+-0.2300     ?      6.6562+-0.1144        ? might be 1.0286x slower
   date-format-xparb                          4.7646+-0.3031            4.6238+-0.2491            4.5939+-0.1951          might be 1.0372x faster
   math-cordic                                2.9044+-0.0798            2.8462+-0.0309     ?      2.8783+-0.1676        
   math-partial-sums                          4.8412+-0.3354            4.7773+-0.1840            4.7106+-0.0494          might be 1.0277x faster
   math-spectral-norm                         1.9065+-0.0346     ?      1.9287+-0.0594     ?      1.9986+-0.1588        ? might be 1.0483x slower
   regexp-dna                                 6.1029+-0.2218            5.8811+-0.0540     ?      6.0347+-0.1214          might be 1.0113x faster
   string-base64                              4.3992+-0.3132            4.2300+-0.1044            4.2033+-0.0966          might be 1.0466x faster
   string-fasta                               5.8228+-0.0580     ?      5.8901+-0.0695     ?      6.0822+-0.2053        ? might be 1.0446x slower
   string-tagcloud                            8.1520+-0.3861     ?      8.1737+-0.5061            7.8560+-0.0591          might be 1.0377x faster
   string-unpack-code                        17.8078+-0.4178     ?     18.4489+-0.3517           18.1601+-0.6132        ? might be 1.0198x slower
   string-validate-input                      4.3659+-0.0407     ?      4.3680+-0.0786     ?      4.5140+-0.0737        ! definitely 1.0339x slower

   &lt;arithmetic&gt;                               4.5089+-0.0305     ?      4.5422+-0.0494     ?      4.5536+-0.0932        ? might be 1.0099x slower

                                                TipOfTree                CopyBarrier              CopyBarrierOpt        CopyBarrierOpt v. TipOfTree
Octane:
   encrypt                                   0.16521+-0.00185          0.16234+-0.00319    ?     0.16931+-0.00833       ? might be 1.0248x slower
   decrypt                                   2.88344+-0.06234    !     2.98891+-0.00480    ?     2.99204+-0.01106       ! definitely 1.0377x slower
   deltablue                        x2       0.13644+-0.00366    ?     0.14246+-0.00307          0.13944+-0.00339       ? might be 1.0219x slower
   earley                                    0.30293+-0.00376    ?     0.30763+-0.00666    ?     0.31010+-0.00478       ? might be 1.0237x slower
   boyer                                     4.31132+-0.07610    ?     4.32429+-0.02416          4.32208+-0.02500       ?
   navier-stokes                    x2       4.80795+-0.01294    ?     4.83122+-0.04205          4.80958+-0.01626       ?
   raytrace                         x2       0.86060+-0.01900    ?     0.86200+-0.00611          0.85726+-0.00284       
   richards                         x2       0.08764+-0.00061    ?     0.08913+-0.00110    ?     0.09067+-0.00167       ! definitely 1.0345x slower
   splay                            x2       0.34653+-0.00568    ?     0.34695+-0.00237    ?     0.34771+-0.00403       ?
   regexp                           x2      24.27927+-0.17910    ?    24.33368+-0.44329    ?    24.39920+-0.22915       ?
   pdfjs                            x2      36.72067+-0.27012    ?    36.83530+-0.51404         36.74419+-0.27888       ?
   mandreel                         x2      42.52937+-0.28322    ?    42.69942+-0.38495    ?    42.88097+-0.55514       ?
   gbemu                            x2      32.33045+-3.18465    ?    33.05323+-0.41560    ?    34.68046+-2.66312       ? might be 1.0727x slower
   closure                                   0.57172+-0.00246    ?     0.57713+-0.00321          0.57506+-0.00465       ?
   jquery                                    7.33717+-0.16750          7.26847+-0.03362    ?     7.27272+-0.03504       
   box2d                            x2       9.10412+-0.10617    !     9.30991+-0.09120    ?     9.35421+-0.10469       ! definitely 1.0275x slower
   zlib                             x2     385.08296+-13.10943   ?   387.37541+-4.07915        385.13042+-12.43483      ?
   typescript                       x2     658.71606+-8.25185    ?   667.48417+-10.05048   ?   670.49756+-10.65652      ? might be 1.0179x slower

   &lt;geometric&gt;                               5.32258+-0.03704    !     5.38102+-0.01676    ?     5.40406+-0.03677       ! definitely 1.0153x slower

                                                TipOfTree                CopyBarrier              CopyBarrierOpt        CopyBarrierOpt v. TipOfTree
Kraken:
   ai-astar                                  126.113+-0.742      !     135.045+-1.990      ^     130.187+-1.599         ! definitely 1.0323x slower
   audio-beat-detection                       49.906+-0.294      ?      51.054+-1.012             50.326+-0.436         ?
   audio-dft                                  95.675+-1.569             95.354+-1.686      ?      95.846+-1.990         ?
   audio-fft                                  35.014+-0.212      ?      35.486+-0.898             34.956+-0.152         
   audio-oscillator                           57.656+-1.260      ?      58.068+-1.097      ?      58.478+-1.255         ? might be 1.0143x slower
   imaging-darkroom                           59.879+-0.495             59.664+-0.163             59.590+-0.067         
   imaging-desaturate                         47.894+-0.838      ?      47.923+-0.476      ?      48.286+-0.171         ?
   imaging-gaussian-blur                      85.079+-0.772      ?      86.362+-0.617      !      87.855+-0.549         ! definitely 1.0326x slower
   json-parse-financial                       38.421+-0.932      ?      38.477+-2.097             36.878+-0.739           might be 1.0418x faster
   json-stringify-tinderbox                   23.033+-1.795      ?      24.373+-1.583             22.889+-0.515         
   stanford-crypto-aes                        42.364+-1.632      ?      42.466+-1.161      ?      43.806+-1.177         ? might be 1.0340x slower
   stanford-crypto-ccm                        36.149+-1.295      ?      37.032+-1.048      ?      37.707+-1.147         ? might be 1.0431x slower
   stanford-crypto-pbkdf2                     93.964+-0.551      !      95.899+-0.825      ?      96.614+-0.992         ! definitely 1.0282x slower
   stanford-crypto-sha256-iterative           36.489+-1.281      ?      36.923+-0.958             36.432+-0.731         

   &lt;arithmetic&gt;                               59.117+-0.181      !      60.295+-0.206             59.989+-0.203         ! definitely 1.0148x slower

                                                TipOfTree                CopyBarrier              CopyBarrierOpt        CopyBarrierOpt v. TipOfTree
AsmBench:
   bigfib.cpp                               446.5175+-9.1130          445.7001+-5.2597          442.9327+-3.7050        
   cray.c                                   394.6010+-7.1274          391.2347+-1.5308     ?    392.3571+-2.8396        
   dry.c                                    443.2237+-51.7062         423.4469+-6.5492     ?    424.1293+-8.6882          might be 1.0450x faster
   FloatMM.c                                682.0114+-2.3816          680.2244+-1.4557     ?    680.7390+-2.7814        
   gcc-loops.cpp                           3406.6056+-6.7398     ?   3409.2352+-6.7551         3406.1016+-5.7223        
   n-body.c                                 820.9925+-1.8666     ?    821.3039+-1.7482          820.6895+-1.3974        
   Quicksort.c                              401.8433+-5.0803     ?    407.3869+-5.7041          402.8898+-3.1773        ?
   stepanov_container.cpp                  3481.6228+-17.7819    ?   3521.8627+-84.3928        3480.7144+-19.7138       
   Towers.c                                 232.4265+-1.3775     ?    232.5645+-1.1338     ?    232.7243+-0.6798        ?

   &lt;geometric&gt;                              713.8794+-7.6870          711.7949+-3.0812          709.8513+-2.3189          might be 1.0057x faster

                                                TipOfTree                CopyBarrier              CopyBarrierOpt        CopyBarrierOpt v. TipOfTree
Geomean of preferred means:
   &lt;scaled-result&gt;                           31.7227+-0.0675     !     32.0025+-0.0780           31.9934+-0.1861        ! definitely 1.0085x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131717</commentid>
    <comment_count>16</comment_count>
      <attachid>262709</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-08 14:23:31 -0700</bug_when>
    <thetext>Created attachment 262709
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131718</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-08 14:26:46 -0700</bug_when>
    <thetext>Attachment 262709 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCopyBarrierOptimizationPhase.cpp:99:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:819:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:2481:  Declaration has space between type name and * in newVectorLength * sizeof  [whitespace/declaration] [3]
Total errors found: 3 in 57 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>1132451</commentid>
    <comment_count>18</comment_count>
      <attachid>262709</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-12 13:00:06 -0700</bug_when>
    <thetext>Comment on attachment 262709
the patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +        copied, what stage of copying its in. Two barrier variants are supported:

its =&gt; it&apos;s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132490</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-12 14:39:22 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Comment on attachment 262709 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=262709&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:14
&gt; &gt; +        copied, what stage of copying its in. Two barrier variants are supported:
&gt; 
&gt; its =&gt; it&apos;s

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132535</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-12 15:42:49 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/190896</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262527</attachid>
            <date>2015-10-06 10:57:02 -0700</date>
            <delta_ts>2015-10-06 12:39:39 -0700</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>70058</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA2MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDA4LDYgKzQwOCw3IEBACiAJCTBGNzkwODU2MTlBMjkw
QjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3OTA4NTQxOUEyOTBCMjAwRjYz
MTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmggKi87IH07CiAJCTBGN0IyOTRC
MTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuaCAqLzsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERG
R0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENE
QiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3QzExQUMxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MDIzRUExNjEz
ODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODMz
NUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMw
MDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY4MzM1Qjgx
NjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzMSw3ICs5MzIsNiBAQAogCQkyQTRCQjdGMzE4QTQx
MTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKIAkJMkE0RUM5MEIxODYwRDZDMjAwOTRG
NzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRFQzkwOTE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJy
aWVyQnVmZmVyLmNwcCAqLzsgfTsKIAkJMkE0RUM5MEMxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRl
QmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTJBNjgyOTVC
MTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTY4Mjk1QTE4NzVGODA1MDBCNkMzRTIgLyog
Q29weVdyaXRlQmFycmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTJBNkY0NjI2MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTZGNDYyNTE3
RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBE
ZWZlckdDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLzsgfTsKIAkJMkE4MzYz
ODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE4MzYzODMxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovOyB9OwpAQCAtMjI1Niw2ICsy
MjU2LDcgQEAKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc5MDg1MzE5QTI5MEIyMDBGNjMx
MEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3OTA4NTQxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVy
ZVJlZ2lzdHJhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlUmVn
aXN0cmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3QzExQUMx
QkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvcHlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
ODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNTE2MzlDMUUzMDAx
NDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNzQ5LDcgKzI3NTAsNiBAQAogCQkyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0Qg
LyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01hbmFnZWRWYWx1ZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJBNEVDOTA5MTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV3JpdGVCYXJyaWVyQnVmZmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE0RUM5MEExODYwRDZDMjAwOTRGNzgy
IC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXcml0ZUJhcnJpZXJCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkE2
ODI5NUExODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVdyaXRlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwT3BlcmF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZl
ckdDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVyR0MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0Mg
LyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQyMzksMTIgKzQyMzksMTIgQEAKIAkJCQlDMjQwMzA1MzE0QjQwNEM5MDA3
OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovLAogCQkJCUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTEx
MiAvKiBDb3BpZWRTcGFjZS5oICovLAogCQkJCUMyQzhEMDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBD
b3BpZWRTcGFjZUlubGluZXMuaCAqLywKKwkJCQkwRjdDMTFBQzFCQzM4NjJDMDBDNzRDREIgLyog
Q29weUJhcnJpZXIuaCAqLywKIAkJCQkwRjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRv
a2VuLmggKi8sCiAJCQkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNw
cCAqLywKIAkJCQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCAqLywK
IAkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8s
CiAJCQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICovLAotCQkJ
CTJBNjgyOTVBMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJ
MkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRC
MTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCiAJCQkJMkE4MzYzODMxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLApAQCAtNjA3Nyw3ICs2MDc3
LDYgQEAKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMThEMTQwMTY1NUNGRDUwMDYyQkI4MSAvKiBD
b3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTJBNjgyOTVCMTg3NUY4MDUwMEI2QzNF
MiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGNDFBMDVD
OTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRC
NkYzMUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFk
ZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSBpbiBIZWFkZXJzICovLApAQCAtNjc2MCw2ICs2NzU5LDcgQEAKIAkJCQk4Njg5MTZCMDE1NUYy
ODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUw
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3
NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5QmFycmllci5oCShyZXZpc2lvbiAxOTA2MDMpCShmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcHlXcml0ZUJhcnJpZXIuaDoxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3B5QmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvcHlXcml0ZUJhcnJpZXJfaAorI2RlZmluZSBDb3B5
V3JpdGVCYXJyaWVyX2gKKworI2luY2x1ZGUgIkhlYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgQ29weVdyaXRlQmFycmllciB7CitwdWJsaWM6
CisgICAgQ29weVdyaXRlQmFycmllcigpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgQ29weVdyaXRlQmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwgJnZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgQ29weVdyaXRlQmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2Vs
bCogb3duZXIsIFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwg
dmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFtX3ZhbHVlOyB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBnZXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFQqIG9wZXJhdG9yKigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gZ2V0KCk7CisgICAgfQorICAgIAorICAgIFQqIG9wZXJh
dG9yLT4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldCgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAg
IHsKKyAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOworICAgICAgICB2bS5oZWFwLndyaXRl
QmFycmllcihvd25lcik7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0V2l0aG91dFdyaXRlQmFy
cmllcihUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZSA9IDA7IH0KKworcHJpdmF0ZToK
KyAgICBUKiBtX3ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBD
b3B5V3JpdGVCYXJyaWVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlC
YXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weUJh
cnJpZXIuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
eUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNjcgKzIzLDg4IEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDb3B5V3JpdGVCYXJyaWVy
X2gKLSNkZWZpbmUgQ29weVdyaXRlQmFycmllcl9oCisjaWZuZGVmIENvcHlCYXJyaWVyX2gKKyNk
ZWZpbmUgQ29weUJhcnJpZXJfaAogCiAjaW5jbHVkZSAiSGVhcC5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBDb3B5V3JpdGVCYXJyaWVyIHsKK2Ns
YXNzIENvcHlCYXJyaWVyQmFzZSB7CiBwdWJsaWM6Ci0gICAgQ29weVdyaXRlQmFycmllcigpCi0g
ICAgICAgIDogbV92YWx1ZSgwKQorICAgIENvcHlCYXJyaWVyQmFzZSgpCisgICAgICAgIDogbV92
YWx1ZShudWxscHRyKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgQ29weVdyaXRlQmFycmllcihW
TSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQmIHZhbHVlKQorICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgLy8gV2hlbiB3ZSBhcmUg
aW4gdGhlIGNvbmN1cnJlbnQgY29weWluZyBwaGFzZSwgdGhpcyBtZXRob2QgbWF5IGxvY2sgdGhl
IGJhcnJpZXIgb2JqZWN0IChpLmUuIHRoZSBmaWVsZAorICAgIC8vIHBvaW50aW5nIHRvIGNvcGll
ZCBzcGFjZSkgYW5kIGNhbGwgZGlyZWN0bHkgaW50byB0aGUgb3duaW5nIG9iamVjdCdzIGNvcHlC
YWNraW5nU3RvcmUoKSBtZXRob2QuCisgICAgdm9pZCogZ2V0KEpTQ2VsbCogb3duZXIpIGNvbnN0
CiAgICAgewotICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCAmdmFsdWUpOworICAgICAgICB2
bS5oZWFwLmNvcHlCYXJyaWVyKG93bmVyLCBtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG1fdmFs
dWU7CiAgICAgfQogICAgIAotICAgIENvcHlXcml0ZUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0Nl
bGwqIG93bmVyLCBUKiB2YWx1ZSkKKyAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gbnVsbHB0
cjsgfQorCitwcm90ZWN0ZWQ6CisgICAgQ29weUJhcnJpZXJCYXNlKFZNJiB2bSwgY29uc3QgSlND
ZWxsKiBvd25lciwgdm9pZCogdmFsdWUpCiAgICAgewogICAgICAgICB0aGlzLT5zZXQodm0sIG93
bmVyLCB2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIW1fdmFsdWU7IH0KKyAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOwor
ICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgfQogICAgIAotICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgdm9p
ZCBzZXRXaXRob3V0QmFycmllcih2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPm1f
dmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSB2b2lkKiBtX3Zh
bHVlOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBDb3B5QmFycmllciA6IHB1
YmxpYyBDb3B5QmFycmllckJhc2UgeworcHVibGljOgorICAgIENvcHlCYXJyaWVyKCkKKyAgICB7
CisgICAgfQogICAgIAotICAgIFQqIGdldCgpIGNvbnN0CisgICAgQ29weUJhcnJpZXIoVk0mIHZt
LCBjb25zdCBKU0NlbGwqIG93bmVyLCBUJiB2YWx1ZSkKKyAgICAgICAgOiBDb3B5QmFycmllckJh
c2Uodm0sIG93bmVyLCAmdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZTsKICAg
ICB9CiAgICAgCi0gICAgVCogb3BlcmF0b3IqKCkgY29uc3QKKyAgICBDb3B5QmFycmllcihWTSYg
dm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAgICAgICA6IENvcHlCYXJyaWVy
QmFzZSh2bSwgb3duZXIsIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldCgpOwogICAg
IH0KICAgICAKLSAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QKKyAgICBUKiBnZXQoSlNDZWxsKiBv
d25lcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBnZXQoKTsKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxUKj4oQ29weUJhcnJpZXJCYXNlOjpnZXQob3duZXIpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBzZXQoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgdm0uaGVhcC53
cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICBDb3B5QmFycmllckJhc2U6OnNldCh2bSwgb3du
ZXIsIHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRXaXRob3V0V3JpdGVCYXJyaWVy
KFQqIHZhbHVlKQorICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIoVCogdmFsdWUpCiAgICAgewot
ICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIENvcHlCYXJyaWVyQmFzZTo6
c2V0V2l0aG91dEJhcnJpZXIodmFsdWUpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIGNsZWFyKCkg
eyBtX3ZhbHVlID0gMDsgfQotCi1wcml2YXRlOgotICAgIFQqIG1fdmFsdWU7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIENvcHlXcml0ZUJhcnJpZXJfaAorI2VuZGlmIC8v
IENvcHlCYXJyaWVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNp
dG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cHlWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCAr
MzQsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBib29sIENvcHlWaXNpdG9yOjpj
aGVja0lmU2hvdWxkQ29weSh2b2lkKiBvbGRQdHIpCitpbmxpbmUgYm9vbCBDb3B5VmlzaXRvcjo6
Y2hlY2tJZlNob3VsZENvcHkoQ29weUJhcnJpZXImIGJhcnJpZXIpCiB7CisgICAgdm9pZCogb2xk
UHRyID0gYmFycmllci5nZXQoKTsKKyAgICBpZiAoIW9sZFB0cikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihvbGRQ
dHIpOwogICAgIGlmIChibG9jay0+aXNPdmVyc2l6ZSgpIHx8IGJsb2NrLT5pc1Bpbm5lZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3B5V3JpdGVCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVdyaXRlQmFycmllci5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3B5V3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29weVdyaXRlQmFycmllcl9oCi0jZGVmaW5l
IENvcHlXcml0ZUJhcnJpZXJfaAotCi0jaW5jbHVkZSAiSGVhcC5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBDb3B5V3JpdGVCYXJyaWVyIHsKLXB1
YmxpYzoKLSAgICBDb3B5V3JpdGVCYXJyaWVyKCkKLSAgICAgICAgOiBtX3ZhbHVlKDApCi0gICAg
ewotICAgIH0KLSAgICAKLSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxs
KiBvd25lciwgVCYgdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCAm
dmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3Qg
SlNDZWxsKiBvd25lciwgVCogdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5zZXQodm0sIG93
bmVyLCB2YWx1ZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIW1fdmFsdWU7IH0KLSAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIAotICAgIFQqIGdldCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgVCogb3BlcmF0b3IqKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgVCog
b3BlcmF0b3ItPigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0KCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc2V0KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUp
Ci0gICAgewotICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKG93bmVyKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKFQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVl
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gMDsgfQotCi1wcml2
YXRlOgotICAgIFQqIG1fdmFsdWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIENvcHlXcml0ZUJhcnJpZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAzLDYgKzEwMDMsMTEgQEAgdm9pZCBIZWFwOjphZGRU
b1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAgIG1fc2xvdFZpc2l0b3IuYXBwZW5kVG9NYXJr
U3RhY2soY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CiB9CiAKK3ZvaWQgY29weUJhcnJpZXJT
bG93KEpTQ2VsbCosIHZvaWQqJikKK3sKKyAgICAvLyBEbyBub3RoaW5nIGZvciBub3cuCit9CisK
IHZvaWQgSGVhcDo6Y29sbGVjdEFuZFN3ZWVwKEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUp
CiB7CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKICAgICB2b2lkIHdyaXRl
QmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKIAorICAgIHN0YXRpYyB2b2lkIGNvcHlC
YXJyaWVyKEpTQ2VsbCogb3duZXIsIHZvaWQqJiBjb3BpZWRTcGFjZVBvaW50ZXIpOworCiAgICAg
V3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIoKSB7IHJldHVybiBtX3dyaXRl
QmFycmllckJ1ZmZlcjsgfQogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoSlNDZWxs
Kik7CiAKQEAgLTMyMSw2ICszMjMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJVbm1hcmtl
ZEV4ZWN1dGFibGVzKCk7CiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2Vs
bCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNvcHlCYXJyaWVyU2xvdyhK
U0NlbGwqIG93bmVyLCB2b2lkKiYgY29waWVkU3BhY2VQb2ludGVyKTsKICAgICB2b2lkIHVwZGF0
ZUFsbG9jYXRpb25MaW1pdHMoKTsKICAgICB2b2lkIGRpZEZpbmlzaENvbGxlY3Rpb24oZG91Ymxl
IGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIHJlc3VtZUNvbXBpbGVyVGhyZWFkcygpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShyZXZpc2lvbiAxOTA2MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjAsNiArMTIwLDEyIEBAIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihj
b25zdCBKU0MKICAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9CiAKK2lubGluZSB2b2lk
IEhlYXA6OmNvcHlCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHZvaWQqJiBjb3BpZWRTcGFjZVBvaW50
ZXIpCit7CisgICAgaWYgKFVOTElLRUxZKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNvcGllZFNw
YWNlUG9pbnRlcikgJiAzKSkKKyAgICAgICAgY29weUJhcnJpZXJTbG93KG93bmVyLCBjb3BpZWRT
cGFjZVBvaW50ZXIpOworfQorCiBpbmxpbmUgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUFs
bG9jYXRlZChzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAoc2l6ZSA+IG1pbkV4dHJhTWVtb3J5KSAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1l
bnRzLmNwcAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDEwICsxMDgsNyBA
QCB2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weUJhY2tpbmdTdG9yZShKCiAgICAgCiAgICAgUkVM
RUFTRV9BU1NFUlQodG9rZW4gPT0gRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuKTsK
ICAgICAKLSAgICBib29sKiBvbGRPdmVycmlkZXMgPSB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5n
ZXQoKTsKLSAgICBpZiAoIW9sZE92ZXJyaWRlcykKLSAgICAgICAgcmV0dXJuOwotICAgIAorICAg
IHZvaWQqIG9sZE92ZXJyaWRlcyA9IHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpOwogICAg
IGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG9sZE92ZXJyaWRlcykpIHsKICAgICAgICAg
Ym9vbCogbmV3T3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHZpc2l0b3IuYWxsb2NhdGVO
ZXdTcGFjZSh0aGlzT2JqZWN0LT5vdmVycmlkZXNTaXplKCkpKTsKICAgICAgICAgbWVtY3B5KG5l
d092ZXJyaWRlcywgb2xkT3ZlcnJpZGVzLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7CkBAIC0xMzcs
NyArMTM0LDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKFZNJgogICAg
IFJFTEVBU0VfQVNTRVJUKHZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIG92ZXJyaWRl
c1NpemUoKSwgJmJhY2tpbmdTdG9yZSkpOwogICAgIG1fb3ZlcnJpZGVzLnNldCh2bSwgdGhpcywg
c3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IG1fbGVuZ3RoOyBpLS07KQotICAgICAgICBtX292ZXJyaWRlcy5nZXQoKVtpXSA9IGZhbHNlOwor
ICAgICAgICBtX292ZXJyaWRlc1tpXSA9IGZhbHNlOwogfQogCiB2b2lkIERpcmVjdEFyZ3VtZW50
czo6b3ZlcnJpZGVUaGluZ3NJZk5lY2Vzc2FyeShWTSYgdm0pCkBAIC0xNDksNyArMTQ2LDcgQEAg
dm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzSWZOZQogdm9pZCBEaXJlY3RBcmd1
bWVudHM6Om92ZXJyaWRlQXJndW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBv
dmVycmlkZVRoaW5nc0lmTmVjZXNzYXJ5KHZtKTsKLSAgICBtX292ZXJyaWRlcy5nZXQoKVtpbmRl
eF0gPSB0cnVlOworICAgIG1fb3ZlcnJpZGVzW2luZGV4XSA9IHRydWU7CiB9CiAKIHZvaWQgRGly
ZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVn
aXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVu
dHMuaAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGlj
OgogICAgIAogICAgIGJvb2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0
CiAgICAgewotICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICghbV9vdmVycmlkZXMgfHwg
IW1fb3ZlcnJpZGVzLmdldCgpW2ldKTsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAo
IW1fb3ZlcnJpZGVzIHx8ICFtX292ZXJyaWRlc1tpXSk7CiAgICAgfQogCiAgICAgYm9vbCBjYW5B
Y2Nlc3NBcmd1bWVudEluZGV4UXVpY2tseUluREZHKHVpbnQzMl90IGkpIGNvbnN0CkBAIC0xNDgs
NyArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbV9jYWxs
ZWU7CiAgICAgdWludDMyX3QgbV9sZW5ndGg7IC8vIEFsd2F5cyB0aGUgYWN0dWFsIGxlbmd0aCBv
ZiBjYXB0dXJlZCBhcmd1bWVudHMgYW5kIG5ldmVyIHdoYXQgd2FzIHN0b3JlZCBpbnRvIHRoZSBs
ZW5ndGggcHJvcGVydHkuCiAgICAgdWludDMyX3QgbV9taW5DYXBhY2l0eTsgLy8gVGhlIG1heCBv
ZiB0aGlzIGFuZCBsZW5ndGggZGV0ZXJtaW5lcyB0aGUgY2FwYWNpdHkgb2YgdGhpcyBvYmplY3Qu
IEl0IG1heSBiZSB0aGUgYWN0dWFsIGNhcGFjaXR5LCBvciBtYXliZSBzb21ldGhpbmcgc21hbGxl
ci4gV2UgYXJyYW5nZSBpdCB0aGlzIHdheSB0byBiZSBraW5kIHRvIHRoZSBKSVRzLgotICAgIENv
cHlXcml0ZUJhcnJpZXI8Ym9vbD4gbV9vdmVycmlkZXM7IC8vIElmIG5vbi1udWxsLCBpdCBtZWFu
cyB0aGF0IGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQg
cHJvcGVydGllcy4KKyAgICBDb3B5QmFycmllcjxib29sPiBtX292ZXJyaWRlczsgLy8gSWYgbm9u
LW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5
IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuY3BwCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDEwICs4OCwxMCBA
QCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIs
CiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogICAgIDogbV9zdHJ1
Y3R1cmUoc3RydWN0dXJlKQotICAgICwgbV92ZWN0b3Ioc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFy
cmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9mZnNldCkKICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkK
ICAgICAsIG1fbW9kZShXYXN0ZWZ1bFR5cGVkQXJyYXkpCiB7CisgICAgbV92ZWN0b3Iuc2V0V2l0
aG91dEJhcnJpZXIoc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsg
Ynl0ZU9mZnNldCk7CiAgICAgSW5kZXhpbmdIZWFkZXIgaW5kZXhpbmdIZWFkZXI7CiAgICAgaW5k
ZXhpbmdIZWFkZXIuc2V0QXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIuZ2V0KCkpOwogICAgIG1fYnV0
dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUodm0sIDAsIDAsIDAsIHRydWUsIGluZGV4aW5nSGVh
ZGVyLCAwKTsKQEAgLTEwMSwxOSArMTAxLDE5IEBAIEpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1
Y3Rpb25Db250ZXh0OjoKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYXJyYXlCdWZmZXIsCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoLCBEYXRhVmlld1RhZykKICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKLSAgICAs
IG1fdmVjdG9yKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5
dGVPZmZzZXQpCiAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX21vZGUoRGF0YVZpZXdN
b2RlKQogICAgICwgbV9idXR0ZXJmbHkoMCkKIHsKKyAgICBtX3ZlY3Rvci5zZXRXaXRob3V0QmFy
cmllcihzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zm
c2V0KTsKIH0KIAogSlNBcnJheUJ1ZmZlclZpZXc6OkpTQXJyYXlCdWZmZXJWaWV3KFZNJiB2bSwg
Q29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKICAgICA6IEJhc2Uodm0sIGNvbnRleHQuc3Ry
dWN0dXJlKCksIGNvbnRleHQuYnV0dGVyZmx5KCkpCi0gICAgLCBtX3ZlY3Rvcihjb250ZXh0LnZl
Y3RvcigpKQogICAgICwgbV9sZW5ndGgoY29udGV4dC5sZW5ndGgoKSkKICAgICAsIG1fbW9kZShj
b250ZXh0Lm1vZGUoKSkKIHsKKyAgICBtX3ZlY3Rvci5zZXRXaXRob3V0QmFycmllcihjb250ZXh0
LnZlY3RvcigpKTsKIH0KIAogdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFs
aXplKEpTQ2VsbCoKICAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19j
YXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1f
bW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkgfHwgdGhpc09iamVjdC0+bV9tb2RlID09IFdhc3Rl
ZnVsVHlwZWRBcnJheSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5
cGVkQXJyYXkpCi0gICAgICAgIGZhc3RGcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsKKyAgICAg
ICAgZmFzdEZyZWUodGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcg
KzE2MSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gaW1wbCgp
OwogICAgIHZvaWQgbmV1dGVyKCk7CiAgICAgCi0gICAgdm9pZCogdmVjdG9yKCkgeyByZXR1cm4g
bV92ZWN0b3I7IH0KKyAgICB2b2lkKiB2ZWN0b3IoKSB7IHJldHVybiBtX3ZlY3Rvci5nZXQoKTsg
fQogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2xlbmd0aDsgfQogCkBAIC0xNzcsNyArMTc3LDcgQEAgcHJpdmF0ZToKIHBy
b3RlY3RlZDoKICAgICBBcnJheUJ1ZmZlciogZXhpc3RpbmdCdWZmZXJJbkJ1dHRlcmZseSgpOwog
Ci0gICAgdm9pZCogbV92ZWN0b3I7CisgICAgQ29weUJhcnJpZXI8dm9pZD4gbV92ZWN0b3I7CiAg
ICAgdWludDMyX3QgbV9sZW5ndGg7CiAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNyArNTksNyBAQCBpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkK
IHsKICAgICBBU1NFUlQoaGFzQXJyYXlCdWZmZXIoKSk7CiAgICAgbV9sZW5ndGggPSAwOwotICAg
IG1fdmVjdG9yID0gMDsKKyAgICBtX3ZlY3Rvci5jbGVhcigpOwogfQogCiBpbmxpbmUgdW5zaWdu
ZWQgSlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQoKQpAQCAtNjgsNyArNjgsNyBAQCBpbmxp
bmUgdW5zaWduZWQgSlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPCiAgICAgICAgIHJldHVybiAwOwog
ICAgIAogICAgIHB0cmRpZmZfdCBkZWx0YSA9Ci0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihtX3ZlY3RvcikgLSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyKCktPmRhdGEoKSk7Cisg
ICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX3ZlY3Rvci5nZXQoKSkgLSBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oYnVmZmVyKCktPmRhdGEoKSk7CiAgICAgCiAgICAgdW5zaWduZWQgcmVzdWx0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlbHRhKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihyZXN1bHQpID09IGRlbHRhKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNp
b24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDExICsxMDgsMTEgQEAgcHVibGlj
OgogICAgIAogICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yLmdldCgpKTsKICAgICB9CiAgICAg
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3Iu
Z2V0KCkpOwogICAgIH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG1lYW50IHRvIG1hdGNo
IGluZGV4ZWQgYWNjZXNzIG1ldGhvZHMgdGhhdCBKU09iamVjdApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NDEsNyArNDQxLDcgQEAgdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6dgogICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CiAgICAgY2FzZSBGYXN0VHlw
ZWRBcnJheTogewogICAgICAgICBpZiAodGhpc09iamVjdC0+bV92ZWN0b3IpCi0gICAgICAgICAg
ICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBUeXBlZEFycmF5VmVjdG9yQ29weVRva2Vu
LCB0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAg
ICAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBUeXBlZEFycmF5VmVjdG9yQ29weVRv
a2VuLCB0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQoKSwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00NjgsMTIgKzQ2OCwxMiBAQCB2
b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjCiAgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
PihjZWxsKTsKICAgICAKICAgICBpZiAodG9rZW4gPT0gVHlwZWRBcnJheVZlY3RvckNvcHlUb2tl
bgotICAgICAgICAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1fdmVj
dG9yKSkgeworICAgICAgICAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3Qt
Pm1fdmVjdG9yLmdldCgpKSkgewogICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3Ip
OwotICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3RvcjsKKyAgICAg
ICAgdm9pZCogb2xkVmVjdG9yID0gdGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KCk7CiAgICAgICAg
IHZvaWQqIG5ld1ZlY3RvciA9IHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5i
eXRlU2l6ZSgpKTsKICAgICAgICAgbWVtY3B5KG5ld1ZlY3Rvciwgb2xkVmVjdG9yLCB0aGlzT2Jq
ZWN0LT5ieXRlU2l6ZSgpKTsKLSAgICAgICAgdGhpc09iamVjdC0+bV92ZWN0b3IgPSBuZXdWZWN0
b3I7CisgICAgICAgIHRoaXNPYmplY3QtPm1fdmVjdG9yLnNldFdpdGhvdXRCYXJyaWVyKG5ld1Zl
Y3Rvcik7CiAgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5
dGVTaXplKCkpOwogICAgIH0KICAgICAKQEAgLTUwOSw3ICs1MDksNyBAQCBBcnJheUJ1ZmZlciog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhCiAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5t
X3ZlY3Rvcik7CiAgICAgICAgIC8vIFJldXNlIGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBpZiBh
dCBhbGwgcG9zc2libGUuCiAgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxJbmRleGluZ0hlYWRlcio+
KHRoaXNPYmplY3QtPm1fdmVjdG9yKS0+YnV0dGVyZmx5KCkpOworICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPih0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQoKSktPmJ1dHRl
cmZseSgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBWTSYgdm0gPSAqaGVhcC0+dm0oKTsKICAg
ICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzT2JqZWN0LCBCdXR0ZXJm
bHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCkBAIC01MjEsMTQgKzUyMSwxNCBAQCBBcnJheUJ1
ZmZlciogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhCiAgICAgCiAgICAgc3dpdGNoICh0aGlz
T2JqZWN0LT5tX21vZGUpIHsKICAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgotICAgICAgICBidWZm
ZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0
LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHRo
aXNPYmplY3QtPm1fdmVjdG9yLmdldCgpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CiAgICAg
ICAgIC8vIEZJWE1FOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJhY3Rpbmci
IGZyb20gZXh0cmEgbWVtb3J5CiAgICAgICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5vdyB0aGlz
IGNhc2Ugd2lsbCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRlZAogICAg
ICAgICAvLyB0aGUgd2hvbGUgYnVmZmVyLgotICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6
Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0
aCgpKTsKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQodGhpc09i
amVjdC0+bV92ZWN0b3IuZ2V0KCksIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpAQCAtNTM3LDcgKzUzNyw3IEBAIEFycmF5
QnVmZmVyKiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGEKICAgICB9CiAKICAgICB0aGlzT2Jq
ZWN0LT5idXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVy
LmdldCgpKTsKLSAgICB0aGlzT2JqZWN0LT5tX3ZlY3RvciA9IGJ1ZmZlci0+ZGF0YSgpOworICAg
IHRoaXNPYmplY3QtPm1fdmVjdG9yLnNldFdpdGhvdXRCYXJyaWVyKGJ1ZmZlci0+ZGF0YSgpKTsK
ICAgICB0aGlzT2JqZWN0LT5tX21vZGUgPSBXYXN0ZWZ1bFR5cGVkQXJyYXk7CiAgICAgaGVhcC0+
YWRkUmVmZXJlbmNlKHRoaXNPYmplY3QsIGJ1ZmZlci5nZXQoKSk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxOTA2MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0MSw3ICszNDEsNyBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2Uo
KTsKICAgICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIApAQCAtNTE0LDcgKzUxNCw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKICAgICAgICAgaWYg
KHByb3BlcnR5TmFtZSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNTM2LDcgKzUzNiw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCAKICAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlOgogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewotICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0
dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAo
cHJvcGVydHlOYW1lID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgYnJl
YWs7CkBAIC02MTMsNyArNjEzLDcgQEAgdm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SW5k
ZXhpbmdNbwogICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9y
YWdlQWxyZWFkeUV4aXN0cyh2bSwgZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyh2bSkpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAg
ICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4
aXN0cyh2bSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgZW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0
dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgZGVmYXVsdDoKQEAgLTY0Myw3ICs2NDMsNyBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsSW5kZXhlCiAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNl
KCkpOwogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwgQkFTRV9W
RUNUT1JfTEVOKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3Jl
YXRlT3JHcm93QXJyYXlSaWdodCgKLSAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KCksIHZtLCB0aGlz
LCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAw
LAorICAgICAgICBtX2J1dHRlcmZseS5nZXQodGhpcyksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwg
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAogICAgICAgICBlbGVt
ZW50U2l6ZSAqIHZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5n
dGgobGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5n
dGgpOwpAQCAtNjk1LDcgKzY5NSw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFy
cmF5U3RvcmEKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IGluZGV4aW5nVHlwZSgpOwogICAg
IEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpKTsK
ICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJy
YXlSaWdodCgKLSAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUs
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAgIG1fYnV0
dGVyZmx5LmdldCh0aGlzKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKICAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXplRm9yKHZl
Y3Rvckxlbmd0aCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG5ld0J1dHRlcmZseSk7CiAKQEAgLTcx
OSwzMSArNzE5LDMyIEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGUK
IHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAgICAgc2V0U3Ry
dWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KHZtKSwgQWxsb2NhdGVJbnQzMikpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91
c0ludDMyKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91c0lu
dDMyKCk7CiB9CiAKIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVk
VG9Eb3VibGUoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBl
KCkpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCk7IGktLTspCi0gICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0g
PSBQTmFOOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhp
cyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0t
OykKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwogICAg
IAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlRG91YmxlKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlz
KS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6
OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNV
bmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZUNvbnRp
Z3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICByZXR1
cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5n
RWxlbWVudHMoVk0mIHZtLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCiB7CiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwotICAgIHVuc2lnbmVkIHB1YmxpY0xl
bmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBwdWJsaWNM
ZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpOwogICAgIHVuc2ln
bmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAg
ICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCk7CiAg
ICAgCkBAIC03NTIsNyArNzUzLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29uc3RydWN0
Q29udmVydAogICAgIAogICAgIG1lbWNweSgKICAgICAgICAgbmV3QnV0dGVyZmx5LT5wcm9wZXJ0
eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKLSAgICAgICAgbV9idXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBtX2J1dHRlcmZseS5nZXQodGhpcykt
PnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAogICAgICAgICBwcm9wZXJ0eVNpemUg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICAKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0
b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwpAQCAtNzcwLDcgKzc3MSw3IEBA
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKICAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkp
OwogCi0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+
dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY29uc3RydWN0Q29u
dmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3Ro
KTsKICAgICAvLyBObyBuZWVkIHRvIGNvcHkgZWxlbWVudHMuCiAgICAgCkBAIC03ODcsOSArNzg4
LDEwIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKIENvbnRpZ3Vv
dXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0RvdWJsZShWTSYgdm0pCiB7CiAgICAg
QVNTRVJUKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KSB7Ci0gICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogY3VycmVudCA9ICZtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMy
KClbaV07CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlz
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07
KSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudCA9ICZidXR0ZXJmbHkt
PmNvbnRpZ3VvdXNJbnQzMigpW2ldOwogICAgICAgICBkb3VibGUqIGN1cnJlbnRBc0RvdWJsZSA9
IGJpdHdpc2VfY2FzdDxkb3VibGUqPihjdXJyZW50KTsKICAgICAgICAgSlNWYWx1ZSB2ID0gY3Vy
cmVudC0+Z2V0KCk7CiAgICAgICAgIGlmICghdikgewpAQCAtODAxLDcgKzgwMyw3IEBAIENvbnRp
Z3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzIKICAgICB9CiAgICAgCiAgICAgc2V0
U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKHZtKSwgQWxsb2NhdGVEb3VibGUpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXNEb3VibGUoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1
b3VzRG91YmxlKCk7CiB9CiAKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydElu
dDMyVG9Db250aWd1b3VzKFZNJiB2bSkKQEAgLTgwOSw3ICs4MTEsNyBAQCBDb250aWd1b3VzSlNW
YWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzCiAgICAgQVNTRVJUKGhhc0ludDMyKGluZGV4aW5n
VHlwZSgpKSk7CiAgICAgCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgQWxsb2NhdGVDb250aWd1b3VzKSk7Ci0g
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LmdldCh0aGlzKS0+Y29udGlndW91cygpOwogfQogCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlv
biB0cmFuc2l0aW9uKQpAQCAtODE3LDEwICs4MTksMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydEludDMyVG9BcgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBB
U1NFUlQoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5
U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhv
dXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIEpT
VmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgICAgICBK
U1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgaWYg
KHYpIHsKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIodik7CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
Kys7CkBAIC04NDEsOSArODQ0LDEwIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJ
bnQzMlRvQXIKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQ29u
dGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkp
OwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsgaS0tOykgewotICAgICAgICBkb3VibGUqIGN1cnJlbnQgPSAmbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXNEb3VibGUoKVtpXTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCk7IGktLTspIHsKKyAgICAgICAgZG91YmxlKiBjdXJyZW50ID0gJmJ1dHRlcmZseS0+Y29u
dGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJl
bnRBc1ZhbHVlID0gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KGN1cnJlbnQp
OwogICAgICAgICBkb3VibGUgdmFsdWUgPSAqY3VycmVudDsKICAgICAgICAgaWYgKHZhbHVlICE9
IHZhbHVlKSB7CkBAIC04NTUsNyArODU5LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0
Ojpjb252ZXJ0RG91YgogICAgIH0KICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZUNvbnRp
Z3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICByZXR1
cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3Bl
cnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQpAQCAtODYzLDEwICs4NjcsMTEgQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKICAgICBBU1NFUlQoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgo
KTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJh
eVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykg
ewotICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBp
KyspIHsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KClbaV07CiAgICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkgewogICAgICAgICAgICAgbmV3U3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKEpTVmFsdWU6
OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOwogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcisrOwpAQCAtODg5LDEwICs4OTQsMTEgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y29udmVydENvbnRpZ3VvdQogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAg
ICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkpOwogCi0gICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVk
IHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7CiAg
ICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9y
YWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKLSAg
ICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7Cisg
ICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAg
ICAgICBpZiAodikgewogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0
aG91dFdyaXRlQmFycmllcih2KTsKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVz
SW5WZWN0b3IrKzsKQEAgLTk1Nyw4ICs5NjMsOCBAQCB2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0SW50
MzJGb3JWYWx1ZShWTSYgCiAKIHZvaWQgSlNPYmplY3Q6OnNldEluZGV4UXVpY2tseVRvVW5kZWNp
ZGVkKFZNJiB2bSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgQVNTRVJU
KGluZGV4IDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKLSAgICBBU1NFUlQoaW5kZXgg
PCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIEFTU0VSVChpbmRleCA8IG1fYnV0
dGVyZmx5LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCkpOworICAgIEFTU0VSVChpbmRleCA8IG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIGNvbnZlcnRVbmRlY2lk
ZWRGb3JWYWx1ZSh2bSwgdmFsdWUpOwogICAgIHNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZh
bHVlKTsKIH0KQEAgLTExMTQsNyArMTEyMCw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVu
c3VyZUFycmF5U3RvcmEKICAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBjb252ZXJ0Q29udGlndW91c1RvQXJy
YXlTdG9yYWdlKHZtKSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6Ci0gICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVX
aGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpKTsKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJh
eVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3Rv
cmFnZSgpKTsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTEz
NTYsNyArMTM2Miw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0MK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpOwogICAgICAg
ICAKICAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkgewogICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5tX3ZlY3Rvcltp
XTsKQEAgLTE1NDYsNyArMTU1Miw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmoKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS5nZXQodGhpcyktPmFy
cmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICB1bnNpZ25lZCB1c2VkVmVj
dG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9y
TGVuZ3RoOyArK2kpIHsKQEAgLTE2OTksNyArMTcwNSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEpT
T2JqZWN0OjpmaWxsR2V0dGVyUHIKIHZvaWQgSlNPYmplY3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9y
KEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCwgY29uc3QgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZERlc2Ny
aXB0b3IpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIG1hcCA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CisgICAgYXV0byBtYXAg
PSBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQo
KTsKIAogICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewogICAgICAgICBp
ZiAoZGVzY3JpcHRvci52YWx1ZSgpKQpAQCAtMTc1OCw3ICsxNzY0LDcgQEAgYm9vbCBKU09iamVj
dDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogICAgIGlmIChkZXNjcmlwdG9yLmF0dHJpYnV0
ZXMoKSAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKICAgICAgICAgbm90aWZ5UHJlc2VuY2VPZklu
ZGV4ZWRBY2Nlc3NvcnMoZXhlYy0+dm0oKSk7CiAKLSAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOworICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlT
dG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1hcCk7CiAK
ICAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0
T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4K
QEAgLTE3OTAsOCArMTc5Niw5IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9w
ZXJ0eSgKICAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsKIAogICAgICAgICBwdXRJ
bmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBkZWZhdWx0cyk7
Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0
aCgpKQotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgo
aW5kZXggKyAxKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQodGhpcyk7CisgICAgICAgIGlmIChpbmRleCA+PSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldExl
bmd0aChpbmRleCArIDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE5MTEs
MTcgKzE5MTgsMTkgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbgog
ewogICAgIEFTU0VSVCgoaW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzaykgPT0gaW5k
ZXhpbmdTaGFwZSk7CiAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJlU3BhcnNlKCkpOworCisg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgCiAg
ICAgLy8gRm9yIHVzIHRvIGdldCBoZXJlLCB0aGUgaW5kZXggaXMgZWl0aGVyIGdyZWF0ZXIgdGhh
biB0aGUgcHVibGljIGxlbmd0aCwgb3IgZ3JlYXRlciB0aGFuCiAgICAgLy8gb3IgZXF1YWwgdG8g
dGhlIHZlY3RvciBsZW5ndGguCi0gICAgQVNTRVJUKGkgPj0gbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICBBU1NFUlQoaSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAg
ICAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIAogICAgIGlmIChpID49IE1BWF9BUlJB
WV9JTkRFWCAtIDEKICAgICAgICAgfHwgKGkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWAotICAg
ICAgICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgY291bnRFbGVtZW50czxpbmRl
eGluZ1NoYXBlPihidXR0ZXJmbHkoKSkpKQotICAgICAgICB8fCBpbmRleElzU3VmZmljaWVudGx5
QmV5b25kTGVuZ3RoRm9yU3BhcnNlTWFwKGksIG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkp
IHsKKyAgICAgICAgICAgICYmICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIGNvdW50RWxlbWVu
dHM8aW5kZXhpbmdTaGFwZT4oYnV0dGVyZmx5KSkpCisgICAgICAgIHx8IGluZGV4SXNTdWZmaWNp
ZW50bHlCZXlvbmRMZW5ndGhGb3JTcGFyc2VNYXAoaSwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSkpIHsKICAgICAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKICAgICAgICAgZW5z
dXJlQXJyYXlTdG9yYWdlU2xvdyh2bSk7CiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAodm0pOwpAQCAtMTkzMiwyNCArMTk0MSwyNSBAQCB2
b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAgICAgfQogCiAgICAgZW5z
dXJlTGVuZ3RoKHZtLCBpICsgMSk7CisgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRo
aXMpOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwog
ICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewogICAgIGNhc2UgSW50MzJTaGFwZToKICAgICAg
ICAgQVNTRVJUKHZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgYnV0
dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgRG91YmxlU2hhcGU6IHsKICAg
ICAgICAgQVNTRVJUKHZhbHVlLmlzTnVtYmVyKCkpOwogICAgICAgICBkb3VibGUgdmFsdWVBc0Rv
dWJsZSA9IHZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAgIEFTU0VSVCh2YWx1ZUFzRG91YmxlID09
IHZhbHVlQXNEb3VibGUpOwotICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldID0gdmFsdWVBc0RvdWJsZTsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KClbaV0gPSB2YWx1ZUFzRG91YmxlOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGRlZmF1bHQ6CkBAIC0yMjIzLDcgKzIyMzMsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5H
X1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICBpZiAoaSA8
IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChpIDwgbV9idXR0
ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGks
IHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIHJldHVybiBwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUs
IGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKHZtKSk7CiAgICAg
ICAgIH0KQEAgLTIyMzcsNyArMjI0Nyw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG8KICAgICAgICAgCiAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVT
OiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHku
Z2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVl
LCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJp
YnV0ZXMsIG1vZGUsIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICB9
CkBAIC0yMjU2LDcgKzIyNjYsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9u
ZFZlY3RvCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIGlmIChpIDwgbV9idXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS5n
ZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwdXREaXJl
Y3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUs
IGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4
QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmli
dXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAg
ICB9CkBAIC0yMjY2LDcgKzIyNzYsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJl
eW9uZFZlY3RvCiAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpAQCAtMjM0Nyw4ICsyMzU3LDggQEAgQUxX
QVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAgIHVuc2lnbmVkIGxlbmd0
aDsKICAgICAKICAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKSB7
Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKLSAg
ICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICB2ZWN0
b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpOworICAgICAg
ICBsZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIHZlY3Rvckxlbmd0aCA9IDA7CiAgICAgICAgIGxlbmd0aCA9IDA7CkBA
IC0yNDU0LDI1ICsyNDY0LDI4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3Ro
KFZNJiAKIAogdm9pZCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIHVuc2lnbmVk
IGxlbmd0aCkKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0
aGlzKTsKKyAgICAKICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKICAgICBB
U1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkgfHwgaGFzSW50MzIoaW5kZXhpbmdU
eXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkgfHwgaGFzVW5kZWNpZGVkKGluZGV4
aW5nVHlwZSgpKSk7Ci0gICAgQVNTRVJUKGxlbmd0aCA+IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgQVNTRVJUKGxlbmd0aCA+IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwog
ICAgIAogICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKAogICAgICAgICBs
ZW5ndGggPDwgMSwKICAgICAgICAgTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCk7Ci0gICAgdW5z
aWduZWQgb2xkVmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAg
IHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhp
cywgbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAgIGJ1dHRlcmZseSA9IGJ1dHRlcmZs
eS0+Z3Jvd0FycmF5UmlnaHQoCiAgICAgICAgIHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgc3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCiAgICAgICAgIG9sZFZlY3Rvckxlbmd0
aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSksCi0gICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSk7CisgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJm
bHkpOwogCi0gICAgbV9idXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgp
OworICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAKICAg
ICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAg
ICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpW2ldID0gUE5hTjsKKyAg
ICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47
CiAgICAgfQogfQogCkBAIC0yNDg1LDEwICsyNDk4LDEwIEBAIHZvaWQgSlNPYmplY3Q6OnJlYWxs
b2NhdGVBbmRTaHJpbmtCdXR0ZXIKICAgICBBU1NFUlQoIW1fYnV0dGVyZmx5LT5pbmRleGluZ0hl
YWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUoKSkpOwogCiAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHktPnJl
c2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9y
KGxlbmd0aCkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcihsZW5ndGgpKTsKICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG5ld0J1
dHRlcmZseSk7Ci0gICAgbV9idXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOwotICAg
IG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHkt
PnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOworICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVu
Z3RoKGxlbmd0aCk7CiB9CiAKIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9y
YWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQpAQCAtMjQ5OCw3ICsy
NTExLDcgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZwogICAgIC8v
IEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVseSBvbiBzdHJ1Y3R1cmUo
KSwgZm9yIHRoZSBwcm9wZXJ0eQogICAgIC8vIGNhcGFjaXR5LCBzaW5jZSB3ZSBtaWdodCBoYXZl
IGFscmVhZHkgbXV0YXRlZCB0aGUgc3RydWN0dXJlIGluLXBsYWNlLgogICAgIAotICAgIHJldHVy
biBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShtX2J1dHRlcmZseS5nZXQo
KSwgdm0sIHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1NpemUpOworICAgIHJldHVy
biBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShtX2J1dHRlcmZseS5nZXQo
dGhpcyksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUodm0pLCBvbGRTaXplLCBuZXdTaXplKTsKIH0KIAog
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQpAQCAtMjc4NSw3ICsyNzk4LDcgQEAgdWludDMyX3QgSlNPYmplY3Q6OmdldEVudW1lcmFibGVM
ZW5ndGgoRQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gb2JqZWN0LT5tX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpOwogICAgICAg
ICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVy
cy5oIgotI2luY2x1ZGUgIkNvcHlXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlICJDb3B5QmFycmll
ci5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRlZmVyR0Mu
aCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0xMzEsMTQgKzEzMSwxNCBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBpZiAoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5n
dGgoKTsKICAgICB9CiAgICAgICAgIAogICAgIHVuc2lnbmVkIGdldFZlY3Rvckxlbmd0aCgpCiAg
ICAgewogICAgICAgICBpZiAoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkK
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JM
ZW5ndGgoKTsKICAgICB9CiAgICAgICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOwpAQCAtMTgxLDIzICsxODEsMjQgQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgY2FuR2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAgICAgeworICAgICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNoIChp
bmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJl
dHVybiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV07CisgICAgICAgICAgICByZXR1cm4gaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkgJiYgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV07CiAgICAgICAgIGNhc2UgQUxMX0RP
VUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgaWYgKGkgPj0gbV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBkb3Vi
bGUgdmFsdWUgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAg
ICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAgICAg
ICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBpIDwgbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgcmV0dXJuIGkgPCBidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0yMDYsMTUgKzIwNywxNiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIEpTVmFsdWUgZ2V0SW5k
ZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAgICAgeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUo
KSkgewogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAg
IHJldHVybiBqc051bWJlcihtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpLmFzSW50
MzIoKSk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uZ2V0KCkuYXNJbnQzMigpKTsKICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmdldCgpOwogICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKVtpXSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1Zh
bHVlOjpFbmNvZGVBc0RvdWJsZSwgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0pOwog
ICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7
CisgICAgICAgICAgICByZXR1cm4gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTIyMywzMiAr
MjI1LDMzIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgSlNWYWx1ZSB0cnlHZXRJbmRleFF1aWNr
bHkodW5zaWduZWQgaSkgY29uc3QKICAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNl
IEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBpZiAoaSA8IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVz
dWx0ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGlm
IChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdC5pc0ludDMyKCkgfHwgIXJlc3VsdCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgaWYg
KGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoaSA8
IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgaWYgKGkgPj0g
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgaWYgKGkgPj0gYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRvdWJsZSByZXN1bHQgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAg
ICAgICAgICAgZG91YmxlIHJlc3VsdCA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ld
OwogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHQpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
cmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKGkgPCBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNzYsNiArMjc5LDcgQEAgcHVibGljOgogICAgICAg
ICAKICAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKKyAgICAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgICAg
IHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKQEAg
LTI4NSwxMSArMjg5LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAg
ICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuIGkg
PCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICByZXR1cm4gaSA8IGJ1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
OgotICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZl
Y3Rvckxlbmd0aCgpCi0gICAgICAgICAgICAgICAgJiYgISFtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgcmV0dXJuIGkgPCBidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKQorICAgICAgICAgICAgICAgICYmICEhYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMzA2LDcgKzMxMCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExfRE9V
QkxFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgot
ICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAg
ICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE1LDkgKzMxOSwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KFZNJiB2bSwgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2KQogICAgIHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQodGhpcyk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAg
ICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFTU0VS
VChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChp
IDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoIXYuaXNJbnQz
MigpKSB7CiAgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGVPckNvbnRpZ3VvdXNX
aGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMzI1LDE0ICszMzAsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgRkFMTFRIUk9VR0g7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzog
ewotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwot
ICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQodm0sIHRoaXMsIHYp
OwotICAgICAgICAgICAgaWYgKGkgPj0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQotICAg
ICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOworICAgICAg
ICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAg
IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldCh2bSwgdGhpcywgdik7CisgICAgICAgICAg
ICBpZiAoaSA+PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGJ1
dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAg
ICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAg
ICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlm
ICghdi5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGln
dW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0zNDIsMTMgKzM0NywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29u
dmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2J1
dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gdmFsdWU7Ci0gICAgICAgICAgICBpZiAo
aSA+PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgbV9idXR0
ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZhbHVlOworICAgICAgICAgICAgaWYgKGkgPj0gYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1Ymxp
Y0xlbmd0aChpICsgMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwog
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV07CiAgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7CiAgICAgICAgICAgICB4LnNl
dCh2bSwgdGhpcywgdik7CkBAIC0zNzEsMTQgKzM3NiwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGluaXRpYWxpemVJbmRleChWTSYgdm0sIHVuc2lnbmVkIGksIEpTVmFsdWUgdiwgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSkKICAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgewog
ICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAg
IHNldEluZGV4UXVpY2tseVRvVW5kZWNpZGVkKHZtLCBpLCB2KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7Ci0g
ICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAg
ICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAg
ICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAg
QVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICgh
di5pc0ludDMyKCkpIHsKICAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZU9yQ29u
dGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTM4NiwxNCArMzkyLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEZBTExU
SFJPVUdIOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6IHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
KTsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KHZtLCB0aGlz
LCB2KTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7
CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAg
ICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KHZtLCB0aGlzLCB2KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRF
WElOR19UWVBFUzogewotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
KTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAg
ICAgICAgICAgICBpZiAoIXYuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgICAgIGNvbnZlcnRE
b3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwgdik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDAzLDExICs0MDksMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRl
eCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZhbHVlOworICAg
ICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICBBU1NFUlQoaSA8
IHN0b3JhZ2UtPmxlbmd0aCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3Rvcik7CiAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQo
dm0sIHRoaXMsIHYpOwpAQCAtNDI4LDcgKzQzNCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAg
ICAgIHJldHVybiAhIW1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7Cisg
ICAgICAgICAgICByZXR1cm4gISFtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgp
LT5tX3NwYXJzZU1hcDsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NDUsNyAr
NDUxLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTUwLDExICs1NTYsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAgIH0KICAgICAgICAgCi0gICAg
Y29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5n
ZXQoKTsgfQotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJmbHku
Z2V0KCk7IH0KKyAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJu
IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsgfQorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyBy
ZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOyB9CiAgICAgICAgIAotICAgIENvbnN0UHJvcGVy
dHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS0+
cHJvcGVydHlTdG9yYWdlKCk7IH0KLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFn
ZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIENvbnN0
UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRl
cmZseS5nZXQodGhpcyktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgUHJvcGVydHlTdG9yYWdl
IG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPnByb3Bl
cnR5U3RvcmFnZSgpOyB9CiAKICAgICBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBs
b2NhdGlvbkZvck9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0CiAgICAgewpAQCAt
NjU2LDcgKzY2Miw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlSW50
MzIoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNJbnQzMihpbmRleGluZ1R5
cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIo
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNJ
bnQzMigpOwogICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVJbnQzMlNsb3codm0p
OwogICAgIH0KQEAgLTY2OCw3ICs2NzQsNyBAQCBwdWJsaWM6CiAgICAgQ29udGlndW91c0RvdWJs
ZXMgZW5zdXJlRG91YmxlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzRG91
YmxlKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhp
cyktPmNvbnRpZ3VvdXNEb3VibGUoKTsKICAgICAgICAgICAgIAogICAgICAgICByZXR1cm4gZW5z
dXJlRG91YmxlU2xvdyh2bSk7CiAgICAgfQpAQCAtNjc4LDcgKzY4NCw3IEBAIHB1YmxpYzoKICAg
ICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlQ29udGlndW91cyhWTSYgdm0pCiAgICAgewogICAg
ICAgICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91cygpOwogICAgICAgICAgICAgCiAgICAg
ICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyh2bSk7CiAgICAgfQpAQCAtNjkwLDcgKzY5
Niw3IEBAIHB1YmxpYzoKICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShWTSYg
dm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0FueUFycmF5U3RvcmFnZShpbmRleGlu
Z1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFn
ZSgpOwogCiAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKICAgICB9
CkBAIC03MzYsNyArNzQyLDcgQEAgcHJvdGVjdGVkOgogICAgIEFycmF5U3RvcmFnZSogYXJyYXlT
dG9yYWdlKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhp
bmdUeXBlKCkpKTsKLSAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CiAg
ICAgfQogICAgICAgICAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gcHJlZGljYXRl
IHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKQEAgLTc0NSw3ICs3NTEsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTgwOSwxMiArODE1LDEy
IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlf
SU5ERVgpOwogICAgICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkgfHwg
aGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkgfHwg
aGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYg
KG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkKKworICAgICAgICBpZiAobV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkKICAgICAgICAgICAg
IGVuc3VyZUxlbmd0aFNsb3codm0sIGxlbmd0aCk7CiAgICAgICAgICAgICAKLSAgICAgICAgaWYg
KG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8IGxlbmd0aCkKLSAgICAgICAgICAgIG1fYnV0
dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgaWYgKG1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAgICBtX2J1dHRl
cmZseS5nZXQodGhpcyktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIH0KICAgICAgICAg
CiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50IHRvIHNocmluayB0aGUgYnV0dGVyZmx5IGJh
Y2tpbmcgc3RvcmUsIGFuZCB5b3UncmUKQEAgLTg3NCw3ICs4ODAsNyBAQCBwcml2YXRlOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhW
TSYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ29weVdyaXRlQmFycmllcjxCdXR0ZXJmbHk+IG1fYnV0
dGVyZmx5OworICAgIENvcHlCYXJyaWVyPEJ1dHRlcmZseT4gbV9idXR0ZXJmbHk7CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9wYWRkaW5nOwpAQCAtMTM0
OCw3ICsxMzU0LDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgog
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVy
U2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBBU1NFUlQoIXZhbHVl
LmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQodGhpcyk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGlu
ZVN0b3JhZ2UoKSkKICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uo
dm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2Vz
dGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWFwRGF0YS5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYg
TWFwRGF0YV9oCiAjZGVmaW5lIE1hcERhdGFfaAogCisjaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIK
ICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KQEAgLTEzNiw3ICsxMzcsNyBAQCBwcml2YXRlOgog
ICAgIGludDMyX3QgbV9jYXBhY2l0eTsKICAgICBpbnQzMl90IG1fc2l6ZTsKICAgICBpbnQzMl90
IG1fZGVsZXRlZENvdW50OwotICAgIEVudHJ5KiBtX2VudHJpZXM7CisgICAgQ29weUJhcnJpZXI8
RW50cnk+IG1fZW50cmllczsKICAgICBXZWFrR0NNYXA8SlNJdGVyYXRvciosIEpTSXRlcmF0b3I+
IG1faXRlcmF0b3JzOwogfTsKIApAQCAtMTQ1LDcgKzE0Niw2IEBAIEFMV0FZU19JTkxJTkUgTWFw
RGF0YUltcGw8RW50cnksIEpTSXRlcmEKICAgICA6IG1fY2FwYWNpdHkoMCkKICAgICAsIG1fc2l6
ZSgwKQogICAgICwgbV9kZWxldGVkQ291bnQoMCkKLSAgICAsIG1fZW50cmllcyhudWxscHRyKQog
ICAgICwgbV9pdGVyYXRvcnModm0pCiB7CiB9CkBAIC0yMDQsNyArMjA0LDcgQEAgQUxXQVlTX0lO
TElORSBpbnQzMl90IE1hcERhdGFJbXBsPEVudHJ5LAogICAgIGlmIChpc0ZpbmlzaGVkKCkpCiAg
ICAgICAgIHJldHVybiBtX2luZGV4OwogCi0gICAgRW50cnkqIGVudHJpZXMgPSBtX21hcERhdGEt
Pm1fZW50cmllczsKKyAgICBFbnRyeSogZW50cmllcyA9IG1fbWFwRGF0YS0+bV9lbnRyaWVzLmdl
dCgpOwogICAgIHNpemVfdCBlbmQgPSBtX21hcERhdGEtPm1fc2l6ZTsKICAgICB3aGlsZSAoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihtX2luZGV4KSA8IGVuZCAmJiAhZW50cmllc1ttX2luZGV4XS5rZXko
KSkKICAgICAgICAgbV9pbmRleCsrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWFwRGF0YUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBEYXRhSW5saW5lcy5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBAIGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG8KICAg
ICBtX2NhcGFjaXR5ID0gMDsKICAgICBtX3NpemUgPSAwOwogICAgIG1fZGVsZXRlZENvdW50ID0g
MDsKLSAgICBtX2VudHJpZXMgPSBudWxscHRyOworICAgIG1fZW50cmllcy5jbGVhcigpOwogICAg
IG1faXRlcmF0b3JzLmZvckVhY2goW10oSlNJdGVyYXRvciogaXRlcmF0b3IsIEpTSXRlcmF0b3Iq
KSB7CiAgICAgICAgIGl0ZXJhdG9yLT5pdGVyYXRvckRhdGEoKS0+ZGlkUmVtb3ZlQWxsRW50cmll
cygpOwogICAgIH0pOwpAQCAtMjA4LDcgKzIwOCw3IEBAIGlubGluZSB2b2lkIE1hcERhdGFJbXBs
PEVudHJ5LCBKU0l0ZXJhdG8KIAogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICBt
X3NpemUgPSBuZXdFbmQ7Ci0gICAgbV9lbnRyaWVzID0gZGVzdGluYXRpb247CisgICAgbV9lbnRy
aWVzLnNldFdpdGhvdXRCYXJyaWVyKGRlc3RpbmF0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+CkBAIC0yMTcsOSArMjE3LDkgQEAgaW5saW5l
IHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAgIEFTU0VSVCghc2hvdWxkUGFj
aygpKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBhY2l0eSA+IDApOwogICAgIEFTU0VSVChu
ZXdDYXBhY2l0eSA+PSBtX2NhcGFjaXR5KTsKLSAgICBtZW1jcHkoZGVzdGluYXRpb24sIG1fZW50
cmllcywgc2l6ZW9mKEVudHJ5KSAqIG1fc2l6ZSk7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBt
X2VudHJpZXMuZ2V0KCksIHNpemVvZihFbnRyeSkgKiBtX3NpemUpOwogICAgIG1fY2FwYWNpdHkg
PSBuZXdDYXBhY2l0eTsKLSAgICBtX2VudHJpZXMgPSBkZXN0aW5hdGlvbjsKKyAgICBtX2VudHJp
ZXMuc2V0V2l0aG91dEJhcnJpZXIoZGVzdGluYXRpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KQEAgLTI0Nyw3ICsyNDcsNyBAQCBpbmxpbmUg
Q2hlY2tlZEJvb2xlYW4gTWFwRGF0YUltcGw8RW50cnksCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRy
eSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KIGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBK
U0l0ZXJhdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKLSAgICBFbnRyeSogZW50cmllcyA9IG1fZW50cmllczsKKyAgICBFbnRyeSogZW50
cmllcyA9IG1fZW50cmllcy5nZXQoKTsKICAgICBpZiAoIWVudHJpZXMpCiAgICAgICAgIHJldHVy
bjsKICAgICBpZiAobV9kZWxldGVkQ291bnQpIHsKQEAgLTI2MSwxNCArMjYxLDE0IEBAIGlubGlu
ZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG8KICAgICAgICAgdmlzaXRvci5hcHBl
bmRWYWx1ZXMocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmZW50cmll
c1swXSksIG1fc2l6ZSAqIChzaXplb2YoRW50cnkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikpKTsKICAgICB9CiAKLSAgICB2aXNpdG9yLmNvcHlMYXRlcihvd25lciwgTWFwQmFja2lu
Z1N0b3JlQ29weVRva2VuLCBlbnRyaWVzLCBjYXBhY2l0eUluQnl0ZXMoKSk7CisgICAgdmlzaXRv
ci5jb3B5TGF0ZXIob3duZXIsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwgbV9lbnRyaWVzLmdl
dCgpLCBjYXBhY2l0eUluQnl0ZXMoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0
eXBlbmFtZSBKU0l0ZXJhdG9yPgogaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRl
cmF0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4g
dG9rZW4pCiB7Ci0gICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiAmJiB2
aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG1fZW50cmllcykpIHsKLSAgICAgICAgRW50cnkqIG9s
ZEVudHJpZXMgPSBtX2VudHJpZXM7CisgICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9yZUNv
cHlUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG1fZW50cmllcy5nZXQoKSkpIHsK
KyAgICAgICAgRW50cnkqIG9sZEVudHJpZXMgPSBtX2VudHJpZXMuZ2V0KCk7CiAgICAgICAgIEVu
dHJ5KiBuZXdFbnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50cnkqPih2aXNpdG9yLmFsbG9jYXRlTmV3
U3BhY2UoY2FwYWNpdHlJbkJ5dGVzKCkpKTsKICAgICAgICAgaWYgKHNob3VsZFBhY2soKSkKICAg
ICAgICAgICAgIHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIG1fY2FwYWNp
dHkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262536</attachid>
            <date>2015-10-06 12:39:39 -0700</date>
            <delta_ts>2015-10-06 20:15:41 -0700</delta_ts>
            <desc>something compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>99321</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA2MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDA4LDYgKzQwOCw3IEBACiAJCTBGNzkwODU2MTlBMjkw
QjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3OTA4NTQxOUEyOTBCMjAwRjYz
MTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmggKi87IH07CiAJCTBGN0IyOTRC
MTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuaCAqLzsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERG
R0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENE
QiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3QzExQUMxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MDIzRUExNjEz
ODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODMz
NUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMw
MDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY4MzM1Qjgx
NjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzMSw3ICs5MzIsNiBAQAogCQkyQTRCQjdGMzE4QTQx
MTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKIAkJMkE0RUM5MEIxODYwRDZDMjAwOTRG
NzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRFQzkwOTE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJy
aWVyQnVmZmVyLmNwcCAqLzsgfTsKIAkJMkE0RUM5MEMxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRl
QmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTJBNjgyOTVC
MTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTY4Mjk1QTE4NzVGODA1MDBCNkMzRTIgLyog
Q29weVdyaXRlQmFycmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTJBNkY0NjI2MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTZGNDYyNTE3
RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBE
ZWZlckdDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLzsgfTsKIAkJMkE4MzYz
ODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE4MzYzODMxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovOyB9OwpAQCAtMjI1Niw2ICsy
MjU2LDcgQEAKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc5MDg1MzE5QTI5MEIyMDBGNjMx
MEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3OTA4NTQxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVy
ZVJlZ2lzdHJhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlUmVn
aXN0cmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3QzExQUMx
QkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvcHlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
ODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNTE2MzlDMUUzMDAx
NDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNzQ5LDcgKzI3NTAsNiBAQAogCQkyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0Qg
LyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01hbmFnZWRWYWx1ZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJBNEVDOTA5MTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV3JpdGVCYXJyaWVyQnVmZmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE0RUM5MEExODYwRDZDMjAwOTRGNzgy
IC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXcml0ZUJhcnJpZXJCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkE2
ODI5NUExODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVdyaXRlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwT3BlcmF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZl
ckdDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVyR0MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0Mg
LyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQyMzksMTIgKzQyMzksMTIgQEAKIAkJCQlDMjQwMzA1MzE0QjQwNEM5MDA3
OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovLAogCQkJCUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTEx
MiAvKiBDb3BpZWRTcGFjZS5oICovLAogCQkJCUMyQzhEMDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBD
b3BpZWRTcGFjZUlubGluZXMuaCAqLywKKwkJCQkwRjdDMTFBQzFCQzM4NjJDMDBDNzRDREIgLyog
Q29weUJhcnJpZXIuaCAqLywKIAkJCQkwRjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRv
a2VuLmggKi8sCiAJCQkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNw
cCAqLywKIAkJCQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCAqLywK
IAkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8s
CiAJCQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICovLAotCQkJ
CTJBNjgyOTVBMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJ
MkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRC
MTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCiAJCQkJMkE4MzYzODMxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLApAQCAtNjA3Nyw3ICs2MDc3
LDYgQEAKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMThEMTQwMTY1NUNGRDUwMDYyQkI4MSAvKiBD
b3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTJBNjgyOTVCMTg3NUY4MDUwMEI2QzNF
MiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGNDFBMDVD
OTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRC
NkYzMUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFk
ZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSBpbiBIZWFkZXJzICovLApAQCAtNjc2MCw2ICs2NzU5LDcgQEAKIAkJCQk4Njg5MTZCMDE1NUYy
ODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUw
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3
NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5QmFycmllci5oCShyZXZpc2lvbiAxOTA2MDMpCShmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcHlXcml0ZUJhcnJpZXIuaDoxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3B5QmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvcHlXcml0ZUJhcnJpZXJfaAorI2RlZmluZSBDb3B5
V3JpdGVCYXJyaWVyX2gKKworI2luY2x1ZGUgIkhlYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgQ29weVdyaXRlQmFycmllciB7CitwdWJsaWM6
CisgICAgQ29weVdyaXRlQmFycmllcigpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgQ29weVdyaXRlQmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwgJnZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgQ29weVdyaXRlQmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2Vs
bCogb3duZXIsIFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwg
dmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFtX3ZhbHVlOyB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBnZXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFQqIG9wZXJhdG9yKigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gZ2V0KCk7CisgICAgfQorICAgIAorICAgIFQqIG9wZXJh
dG9yLT4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldCgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAg
IHsKKyAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOworICAgICAgICB2bS5oZWFwLndyaXRl
QmFycmllcihvd25lcik7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0V2l0aG91dFdyaXRlQmFy
cmllcihUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZSA9IDA7IH0KKworcHJpdmF0ZToK
KyAgICBUKiBtX3ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBD
b3B5V3JpdGVCYXJyaWVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlC
YXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weUJh
cnJpZXIuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
eUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNjcgKzIzLDk4IEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDb3B5V3JpdGVCYXJyaWVy
X2gKLSNkZWZpbmUgQ29weVdyaXRlQmFycmllcl9oCisjaWZuZGVmIENvcHlCYXJyaWVyX2gKKyNk
ZWZpbmUgQ29weUJhcnJpZXJfaAogCiAjaW5jbHVkZSAiSGVhcC5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBDb3B5V3JpdGVCYXJyaWVyIHsKK2Ns
YXNzIENvcHlCYXJyaWVyQmFzZSB7CiBwdWJsaWM6Ci0gICAgQ29weVdyaXRlQmFycmllcigpCi0g
ICAgICAgIDogbV92YWx1ZSgwKQorICAgIENvcHlCYXJyaWVyQmFzZSgpCisgICAgICAgIDogbV92
YWx1ZShudWxscHRyKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgQ29weVdyaXRlQmFycmllcihW
TSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQmIHZhbHVlKQorICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgdm9pZCogZ2V0V2l0aG91
dEJhcnJpZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwgJnZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorCisgICAgLy8gV2hlbiB3ZSBh
cmUgaW4gdGhlIGNvbmN1cnJlbnQgY29weWluZyBwaGFzZSwgdGhpcyBtZXRob2QgbWF5IGxvY2sg
dGhlIGJhcnJpZXIgb2JqZWN0IChpLmUuIHRoZSBmaWVsZAorICAgIC8vIHBvaW50aW5nIHRvIGNv
cGllZCBzcGFjZSkgYW5kIGNhbGwgZGlyZWN0bHkgaW50byB0aGUgb3duaW5nIG9iamVjdCdzIGNv
cHlCYWNraW5nU3RvcmUoKSBtZXRob2QuCisgICAgdm9pZCogZ2V0KGNvbnN0IEpTQ2VsbCogb3du
ZXIpIGNvbnN0CisgICAgeworICAgICAgICBIZWFwOjpjb3B5QmFycmllcihvd25lciwgbV92YWx1
ZSk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOwogICAgIH0KICAgICAKLSAgICBDb3B5V3JpdGVC
YXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCisgICAgdm9pZCBj
bGVhcigpIHsgbV92YWx1ZSA9IG51bGxwdHI7IH0KKworcHJvdGVjdGVkOgorICAgIENvcHlCYXJy
aWVyQmFzZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIHZvaWQqIHZhbHVlKQogICAgIHsK
ICAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgdm9pZCBzZXQo
Vk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3du
ZXIpOworICAgIH0KICAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIodm9pZCogdmFsdWUp
CisgICAgeworICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7CisgICAgfQorCitwcml2YXRl
OgorICAgIG11dGFibGUgdm9pZCogbV92YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorY2xhc3MgQ29weUJhcnJpZXIgOiBwdWJsaWMgQ29weUJhcnJpZXJCYXNlIHsKK3B1YmxpYzoK
KyAgICBDb3B5QmFycmllcigpCisgICAgeworICAgIH0KICAgICAKLSAgICBUKiBnZXQoKSBjb25z
dAorICAgIENvcHlCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCYgdmFsdWUp
CisgICAgICAgIDogQ29weUJhcnJpZXJCYXNlKHZtLCBvd25lciwgJnZhbHVlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgfQogICAgIAotICAgIFQqIG9wZXJhdG9yKigpIGNv
bnN0CisgICAgQ29weUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1
ZSkKKyAgICAgICAgOiBDb3B5QmFycmllckJhc2Uodm0sIG93bmVyLCB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBnZXQoKTsKKyAgICB9CisKKyAgICBUKiBnZXRXaXRob3V0QmFycmllcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihDb3B5QmFycmll
ckJhc2U6OmdldFdpdGhvdXRCYXJyaWVyKCkpOwogICAgIH0KICAgICAKLSAgICBUKiBvcGVyYXRv
ci0+KCkgY29uc3QKKyAgICBUKiBnZXQoY29uc3QgSlNDZWxsKiBvd25lcikgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBnZXQoKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4o
Q29weUJhcnJpZXJCYXNlOjpnZXQob3duZXIpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXQo
Vk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHRo
aXMtPm1fdmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIp
OworICAgICAgICBDb3B5QmFycmllckJhc2U6OnNldCh2bSwgb3duZXIsIHZhbHVlKTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBzZXRXaXRob3V0V3JpdGVCYXJyaWVyKFQqIHZhbHVlKQorICAgIHZv
aWQgc2V0V2l0aG91dEJhcnJpZXIoVCogdmFsdWUpCiAgICAgewotICAgICAgICB0aGlzLT5tX3Zh
bHVlID0gdmFsdWU7CisgICAgICAgIENvcHlCYXJyaWVyQmFzZTo6c2V0V2l0aG91dEJhcnJpZXIo
dmFsdWUpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gMDsgfQot
Ci1wcml2YXRlOgotICAgIFQqIG1fdmFsdWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAot
I2VuZGlmIC8vIENvcHlXcml0ZUJhcnJpZXJfaAorI2VuZGlmIC8vIENvcHlCYXJyaWVyX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5o
CShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5Vmlz
aXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogaW5saW5lIGJvb2wgQ29weVZpc2l0b3I6OmNoZWNrSWZTaG91bGRDb3B5KHZvaWQq
IG9sZFB0cikKIHsKKyAgICBpZiAoIW9sZFB0cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihvbGRQdHIpOwogICAg
IGlmIChibG9jay0+aXNPdmVyc2l6ZSgpIHx8IGJsb2NrLT5pc1Bpbm5lZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5V3JpdGVC
YXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVdy
aXRlQmFycmllci5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5V3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgQ29weVdyaXRlQmFycmllcl9oCi0jZGVmaW5lIENvcHlXcml0
ZUJhcnJpZXJfaAotCi0jaW5jbHVkZSAiSGVhcC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBDb3B5V3JpdGVCYXJyaWVyIHsKLXB1YmxpYzoKLSAg
ICBDb3B5V3JpdGVCYXJyaWVyKCkKLSAgICAgICAgOiBtX3ZhbHVlKDApCi0gICAgewotICAgIH0K
LSAgICAKLSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwg
VCYgdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCAmdmFsdWUpOwot
ICAgIH0KLSAgICAKLSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBv
d25lciwgVCogdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCB2YWx1
ZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1f
dmFsdWU7IH0KLSAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQotICAgIAotICAgIFQqIGdldCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV92YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgVCogb3BlcmF0b3IqKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBnZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgVCogb3BlcmF0b3It
PigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0KCk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgc2V0KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCi0gICAgewot
ICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIHZtLmhlYXAud3JpdGVCYXJy
aWVyKG93bmVyKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRXaXRob3V0V3JpdGVCYXJyaWVy
KFQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gMDsgfQotCi1wcml2YXRlOgotICAg
IFQqIG1fdmFsdWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIENvcHlX
cml0ZUJhcnJpZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlz
aW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAzLDYgKzEwMDMsMTEgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVy
ZWRTZXQoY29uc3QgSlNDZQogICAgIG1fc2xvdFZpc2l0b3IuYXBwZW5kVG9NYXJrU3RhY2soY29u
c3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CiB9CiAKK3ZvaWQgSGVhcDo6Y29weUJhcnJpZXJTbG93
KGNvbnN0IEpTQ2VsbCosIHZvaWQqJikKK3sKKyAgICAvLyBEbyBub3RoaW5nIGZvciBub3cuCit9
CisKIHZvaWQgSGVhcDo6Y29sbGVjdEFuZFN3ZWVwKEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5
cGUpCiB7CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgJKHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKICAgICB2b2lkIHdy
aXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKIAorICAgIHN0YXRpYyB2b2lkIGNv
cHlCYXJyaWVyKGNvbnN0IEpTQ2VsbCogb3duZXIsIHZvaWQqJiBjb3BpZWRTcGFjZVBvaW50ZXIp
OworCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIoKSB7IHJldHVy
biBtX3dyaXRlQmFycmllckJ1ZmZlcjsgfQogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZm
ZXIoSlNDZWxsKik7CiAKQEAgLTMyMSw2ICszMjMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xl
YXJVbm1hcmtlZEV4ZWN1dGFibGVzKCk7CiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZENvbXBpbGVk
Q29kZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNv
bnN0IEpTQ2VsbCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNvcHlCYXJy
aWVyU2xvdyhjb25zdCBKU0NlbGwqIG93bmVyLCB2b2lkKiYgY29waWVkU3BhY2VQb2ludGVyKTsK
ICAgICB2b2lkIHVwZGF0ZUFsbG9jYXRpb25MaW1pdHMoKTsKICAgICB2b2lkIGRpZEZpbmlzaENv
bGxlY3Rpb24oZG91YmxlIGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIHJlc3VtZUNvbXBpbGVyVGhy
ZWFkcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCShy
ZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDEyIEBAIGlubGluZSB2b2lkIEhlYXA6
OndyaXRlQmFycmllcihjb25zdCBKU0MKICAgICBhZGRUb1JlbWVtYmVyZWRTZXQoZnJvbSk7CiB9
CiAKK2lubGluZSB2b2lkIEhlYXA6OmNvcHlCYXJyaWVyKGNvbnN0IEpTQ2VsbCogb3duZXIsIHZv
aWQqJiBjb3BpZWRTcGFjZVBvaW50ZXIpCit7CisgICAgaWYgKFVOTElLRUxZKGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KGNvcGllZFNwYWNlUG9pbnRlcikgJiAzKSkKKyAgICAgICAgY29weUJhcnJp
ZXJTbG93KG93bmVyLCBjb3BpZWRTcGFjZVBvaW50ZXIpOworfQorCiBpbmxpbmUgdm9pZCBIZWFw
OjpyZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAoc2l6
ZSA+IG1pbkV4dHJhTWVtb3J5KSAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihK
U0NlCiAgICAgaWYgKHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzKSB7CiAgICAgICAgIHZpc2l0b3Iu
Y29weUxhdGVyKAogICAgICAgICAgICAgdGhpc09iamVjdCwgRGlyZWN0QXJndW1lbnRzT3ZlcnJp
ZGVzQ29weVRva2VuLAotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0KCks
IHRoaXNPYmplY3QtPm92ZXJyaWRlc1NpemUoKSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5t
X292ZXJyaWRlcy5nZXRXaXRob3V0QmFycmllcigpLCB0aGlzT2JqZWN0LT5vdmVycmlkZXNTaXpl
KCkpOwogICAgIH0KIH0KIApAQCAtMTA4LDE0ICsxMDgsMTEgQEAgdm9pZCBEaXJlY3RBcmd1bWVu
dHM6OmNvcHlCYWNraW5nU3RvcmUoSgogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKHRva2VuID09
IERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbik7CiAgICAgCi0gICAgYm9vbCogb2xk
T3ZlcnJpZGVzID0gdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0KCk7Ci0gICAgaWYgKCFvbGRP
dmVycmlkZXMpCi0gICAgICAgIHJldHVybjsKLSAgICAKKyAgICB2b2lkKiBvbGRPdmVycmlkZXMg
PSB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5nZXRXaXRob3V0QmFycmllcigpOwogICAgIGlmICh2
aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG9sZE92ZXJyaWRlcykpIHsKICAgICAgICAgYm9vbCog
bmV3T3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFj
ZSh0aGlzT2JqZWN0LT5vdmVycmlkZXNTaXplKCkpKTsKICAgICAgICAgbWVtY3B5KG5ld092ZXJy
aWRlcywgb2xkT3ZlcnJpZGVzLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7Ci0gICAgICAgIHRoaXNP
YmplY3QtPm1fb3ZlcnJpZGVzLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobmV3T3ZlcnJpZGVzKTsK
KyAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuc2V0V2l0aG91dEJhcnJpZXIobmV3T3Zl
cnJpZGVzKTsKICAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZE92ZXJyaWRlcywgdGhpc09iamVj
dC0+b3ZlcnJpZGVzU2l6ZSgpKTsKICAgICB9CiB9CkBAIC0xMzUsOSArMTMyLDEwIEBAIHZvaWQg
RGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyhWTSYKICAgICAKICAgICB2b2lkKiBiYWNr
aW5nU3RvcmU7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uo
dGhpcywgb3ZlcnJpZGVzU2l6ZSgpLCAmYmFja2luZ1N0b3JlKSk7Ci0gICAgbV9vdmVycmlkZXMu
c2V0KHZtLCB0aGlzLCBzdGF0aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKSk7CisgICAgYm9v
bCogb3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CisgICAgbV9v
dmVycmlkZXMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IG1fbGVuZ3RoOyBpLS07KQotICAgICAgICBtX292ZXJyaWRlcy5nZXQoKVtpXSA9IGZhbHNlOwor
ICAgICAgICBvdmVycmlkZXNbaV0gPSBmYWxzZTsKIH0KIAogdm9pZCBEaXJlY3RBcmd1bWVudHM6
Om92ZXJyaWRlVGhpbmdzSWZOZWNlc3NhcnkoVk0mIHZtKQpAQCAtMTQ5LDcgKzE0Nyw3IEBAIHZv
aWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5nc0lmTmUKIHZvaWQgRGlyZWN0QXJndW1l
bnRzOjpvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgb3Zl
cnJpZGVUaGluZ3NJZk5lY2Vzc2FyeSh2bSk7Ci0gICAgbV9vdmVycmlkZXMuZ2V0KClbaW5kZXhd
ID0gdHJ1ZTsKKyAgICBtX292ZXJyaWRlcy5nZXQodGhpcylbaW5kZXhdID0gdHJ1ZTsKIH0KIAog
dm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZp
cnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVj
dEFyZ3VtZW50cy5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjYW5BY2Nlc3NJbmRleFF1aWNrbHkodWludDMyX3Qg
aSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgKCFtX292ZXJy
aWRlcyB8fCAhbV9vdmVycmlkZXMuZ2V0KClbaV0pOworICAgICAgICByZXR1cm4gaSA8IG1fbGVu
Z3RoICYmICghbV9vdmVycmlkZXMgfHwgIW1fb3ZlcnJpZGVzLmdldCh0aGlzKVtpXSk7CiAgICAg
fQogCiAgICAgYm9vbCBjYW5BY2Nlc3NBcmd1bWVudEluZGV4UXVpY2tseUluREZHKHVpbnQzMl90
IGkpIGNvbnN0CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8
SlNGdW5jdGlvbj4gbV9jYWxsZWU7CiAgICAgdWludDMyX3QgbV9sZW5ndGg7IC8vIEFsd2F5cyB0
aGUgYWN0dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMgYW5kIG5ldmVyIHdoYXQgd2Fz
IHN0b3JlZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCiAgICAgdWludDMyX3QgbV9taW5DYXBh
Y2l0eTsgLy8gVGhlIG1heCBvZiB0aGlzIGFuZCBsZW5ndGggZGV0ZXJtaW5lcyB0aGUgY2FwYWNp
dHkgb2YgdGhpcyBvYmplY3QuIEl0IG1heSBiZSB0aGUgYWN0dWFsIGNhcGFjaXR5LCBvciBtYXli
ZSBzb21ldGhpbmcgc21hbGxlci4gV2UgYXJyYW5nZSBpdCB0aGlzIHdheSB0byBiZSBraW5kIHRv
IHRoZSBKSVRzLgotICAgIENvcHlXcml0ZUJhcnJpZXI8Ym9vbD4gbV9vdmVycmlkZXM7IC8vIElm
IG5vbi1udWxsLCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBm
dWxseSBtYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KKyAgICBDb3B5QmFycmllcjxib29sPiBtX292
ZXJyaWRlczsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUsIGFu
ZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmNwcAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Miw2ICszOTIsNyBAQCBib29sIEpTQXJy
YXk6OnNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCiAKIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3Ro
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9u
KQogeworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwog
ICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAg
ICAgIGlmICghbmV3TGVuZ3RoKQpAQCAtNDA4LDcgKzQwOSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0
TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICBjYXNlIEFycmF5V2l0aEludDMyOgogICAgIGNh
c2UgQXJyYXlXaXRoRG91YmxlOgogICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogewotICAg
ICAgICBpZiAobmV3TGVuZ3RoID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAg
ICAgaWYgKG5ld0xlbmd0aCA9PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChuZXdMZW5ndGggPj0gTUFYX0FSUkFZX0lOREVY
IC8vIFRoaXMgY2FzZSBlbnN1cmVzIHRoYXQgd2UgY2FuIGRvIGZhc3QgcHVzaC4KICAgICAgICAg
ICAgIHx8IChuZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWApAQCAtNDE3LDEyICs0
MTgsMTIgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAgICAg
ICAgICAgICAgIGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sCiAgICAgICAgICAgICAg
ICAgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgfQotICAgICAgICBp
ZiAobmV3TGVuZ3RoID4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7CisgICAgICAgIGlm
IChuZXdMZW5ndGggPiBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7CiAgICAgICAgICAgICBl
bnN1cmVMZW5ndGgoZXhlYy0+dm0oKSwgbmV3TGVuZ3RoKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoVG9DbGVhciA9IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSAtIG5ld0xlbmd0aDsKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoVG9DbGVhciA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgLSBuZXdMZW5ndGg7CiAgICAg
ICAgIHVuc2lnbmVkIGNvc3RUb0FsbG9jYXRlTmV3QnV0dGVyZmx5ID0gNjQ7IC8vIGEgaGV1cmlz
dGljLgogICAgICAgICBpZiAobGVuZ3RoVG9DbGVhciA+IG5ld0xlbmd0aCAmJiBsZW5ndGhUb0Ns
ZWFyID4gY29zdFRvQWxsb2NhdGVOZXdCdXR0ZXJmbHkpIHsKICAgICAgICAgICAgIHJlYWxsb2Nh
dGVBbmRTaHJpbmtCdXR0ZXJmbHkoZXhlYy0+dm0oKSwgbmV3TGVuZ3RoKTsKQEAgLTQzMCwxMyAr
NDMxLDEzIEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChpbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUpIHsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KTsgaS0tID4gbmV3TGVuZ3RoOykKLSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGln
dW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJ1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGktLSA+IG5ld0xlbmd0aDspCisgICAgICAgICAgICAg
ICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOyBpLS0gPiBuZXdMZW5ndGg7KQotICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJ1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGktLSA+IG5ld0xlbmd0aDspCisgICAgICAgICAgICAg
ICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgfQotICAgICAg
ICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKG5ld0xlbmd0aCk7CisgICAgICAgIGJ1dHRl
cmZseS0+c2V0UHVibGljTGVuZ3RoKG5ld0xlbmd0aCk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAgICAgCkBAIC00NTIsNTEgKzQ1Myw1MyBAQCBib29sIEpTQXJyYXk6OnNldExl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlz
KTsKKyAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNs
YXNzOgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCiAgICAgY2FzZSBB
cnJheVdpdGhVbmRlY2lkZWQ6Ci0gICAgICAgIGlmICghbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpKQorICAgICAgICBpZiAoIWJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgLy8gV2UgaGF2ZSBub3RoaW5nIGJ1dCBo
b2xlcy4gU28sIGRyb3AgZG93biB0byB0aGUgc2xvdyB2ZXJzaW9uLgogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhJbnQzMjoKICAgICBjYXNlIEFycmF5V2l0aENv
bnRpZ3VvdXM6IHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOwogICAgICAgICAKICAgICAgICAgaWYgKCFsZW5ndGgtLSkKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVu
Z3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQobGVuZ3RoIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmdldCgpOwog
ICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbbGVuZ3RoXS5jbGVhcigpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xl
bmd0aChsZW5ndGgpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3Ro
XS5jbGVhcigpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3Ro
KTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOiB7Ci0gICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgCiAgICAg
ICAgIGlmICghbGVuZ3RoLS0pCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKClbbGVuZ3RoXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoIDwgYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZs
eS0+Y29udGlndW91c0RvdWJsZSgpW2xlbmd0aF07CiAgICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1
ZSkgewotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtsZW5ndGhd
ID0gUE5hTjsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3Ro
KTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2xlbmd0aF0gPSBQ
TmFOOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFS
UkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgCiAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgICAgICBpZiAo
IWxlbmd0aCkgewpAQCAtNTQ3LDYgKzU1MCw4IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNT
dGF0ZSogZXhlYykKIC8vICAtIHB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBz
dG9yZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCiB2b2lkIEpTQXJy
YXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIAogICAgIHN3aXRjaCAo
aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6IHsKICAgICAgICAgY3JlYXRl
SW5pdGlhbFVuZGVjaWRlZChleGVjLT52bSgpLCAwKTsKQEAgLTU2NiwxMSArNTcxLDExIEBAIHZv
aWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsKLSAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpOwotICAgICAgICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKSB7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbbGVu
Z3RoXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKLSAgICAgICAgICAgIG1fYnV0dGVy
Zmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0g
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlmIChsZW5ndGggPCBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJ
bnQzMigpW2xlbmd0aF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgICAg
ICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTU4NiwxMSArNTkxLDExIEBAIHZvaWQgSlNB
cnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICB9CiAKICAgICBjYXNlIEFycmF5
V2l0aENvbnRpZ3VvdXM6IHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpOwotICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3Ro
XS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBidXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IGJ1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2xl
bmd0aF0uc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIGJ1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIApAQCAtNjE4LDExICs2MjMsMTEgQEAgdm9pZCBKU0FycmF5OjpwdXNo
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwot
ICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0g
ICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpIHsKLSAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbbGVuZ3RoXSA9IHZhbHVlQXNE
b3VibGU7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCAr
IDEpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICBpZiAobGVuZ3RoIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAg
ICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbbGVuZ3RoXSA9IHZhbHVlQXNEb3Vi
bGU7CisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTY0OCw3ICs2NTMs
NyBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKICAgICAg
ICAgLy8gRmFzdCBjYXNlIC0gcHVzaCB3aXRoaW4gdmVjdG9yLCBhbHdheXMgdXBkYXRlIG1fbGVu
Z3RoICYgbV9udW1WYWx1ZXNJblZlY3Rvci4KICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Rv
cmFnZS0+bGVuZ3RoKCk7CkBAIC02OTYsOSArNzAxLDkgQEAgSlNBcnJheSogSlNBcnJheTo6ZmFz
dFNsaWNlKEV4ZWNTdGF0ZSYgZQogCiAgICAgICAgIGF1dG8mIHJlc3VsdEJ1dHRlcmZseSA9ICpy
ZXN1bHRBcnJheS0+YnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChhcnJheVR5cGUgPT0gQXJyYXlX
aXRoRG91YmxlKQotICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3Vz
RG91YmxlKCkuZGF0YSgpLCBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSAr
IHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAgIG1lbWNw
eShyZXN1bHRCdXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9idXR0ZXJmbHku
Z2V0KHRoaXMpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9m
KEpTVmFsdWUpICogY291bnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZW1jcHkocmVz
dWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOworICAgICAg
ICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2J1dHRl
cmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2Yo
SlNWYWx1ZSkgKiBjb3VudCk7CiAgICAgICAgIHJlc3VsdEJ1dHRlcmZseS5zZXRQdWJsaWNMZW5n
dGgoY291bnQpOwogCiAgICAgICAgIHJldHVybiByZXN1bHRBcnJheTsKQEAgLTcxNSw4ICs3MjAs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0FycmF5OjpmYXN0Q29uY2F0V2l0aChFCiAgICAgVk0mIHZt
ID0gZXhlYy52bSgpOwogICAgIEFTU0VSVChuZXdBcnJheVR5cGUgPT0gZmFzdENvbmNhdFR5cGUo
dm0sICp0aGlzLCBvdGhlckFycmF5KSk7CiAKLSAgICB1bnNpZ25lZCB0aGlzQXJyYXlTaXplID0g
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwotICAgIHVuc2lnbmVkIG90aGVyQXJyYXlTaXpl
ID0gb3RoZXJBcnJheS5tX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgdW5zaWduZWQg
dGhpc0FycmF5U2l6ZSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCk7Cisg
ICAgdW5zaWduZWQgb3RoZXJBcnJheVNpemUgPSBvdGhlckFycmF5Lm1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+cHVibGljTGVuZ3RoKCk7CiAgICAgQVNTRVJUKHRoaXNBcnJheVNpemUgKyBvdGhlckFy
cmF5U2l6ZSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpOwogCiAgICAgU3RydWN0dXJlKiByZXN1
bHRTdHJ1Y3R1cmUgPSBleGVjLmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5ld0FycmF5VHlwZSk7CkBAIC03MjgsMTEg
KzczMywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0FycmF5OjpmYXN0Q29uY2F0V2l0aChFCiAgICAg
YXV0byYgb3RoZXJCdXR0ZXJmbHkgPSAqb3RoZXJBcnJheS5idXR0ZXJmbHkoKTsKICAgICBpZiAo
bmV3QXJyYXlUeXBlID09IEFycmF5V2l0aERvdWJsZSkgewogICAgICAgICBhdXRvIGJ1ZmZlciA9
IHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpOwotICAgICAgICBtZW1j
cHkoYnVmZmVyLCBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9m
KEpTVmFsdWUpICogdGhpc0FycmF5U2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIG1fYnV0
dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9mKEpTVmFs
dWUpICogdGhpc0FycmF5U2l6ZSk7CiAgICAgICAgIG1lbWNweShidWZmZXIgKyB0aGlzQXJyYXlT
aXplLCBvdGhlckJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNW
YWx1ZSkgKiBvdGhlckFycmF5U2l6ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBidWZm
ZXIgPSByZXN1bHRCdXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgbWVtY3B5
KGJ1ZmZlciwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVl
KSAqIHRoaXNBcnJheVNpemUpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBtX2J1dHRlcmZseS5n
ZXQodGhpcyktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNBcnJh
eVNpemUpOwogICAgICAgICBtZW1jcHkoYnVmZmVyICsgdGhpc0FycmF5U2l6ZSwgb3RoZXJCdXR0
ZXJmbHkuY29udGlndW91cygpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogb3RoZXJBcnJheVNp
emUpOwogICAgIH0KIApAQCAtODA1LDggKzgxMCw5IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3Vu
dFdpdGhBcnJheVN0b3JhZ2UKICAgICAgICAgLy8gQWRqdXN0IHRoZSBCdXR0ZXJmbHkgYW5kIHRo
ZSBpbmRleCBiaWFzLiBXZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBoZXJlIGJlY2F1c2Ugd2UncmUg
Y2hhbmdpbmcKICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBCdXR0ZXJmbHksIHdoaWNoIG5l
ZWRzIHRvIHBvaW50IGF0IHRoZSBmaXJzdCBpbmRleGVkIHByb3BlcnR5IGluIHRoZSB1c2VkCiAg
ICAgICAgIC8vIHBvcnRpb24gb2YgdGhlIHZlY3Rvci4KLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0
V2l0aG91dFdyaXRlQmFycmllcihtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50
KSk7Ci0gICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5zaGlmdChz
dHJ1Y3R1cmUoKSwgY291bnQpOworICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmll
cihidXR0ZXJmbHkpOworICAgICAgICBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKICAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgKz0gY291bnQ7CiAKICAgICAgICAgLy8g
U2luY2Ugd2UncmUgY29uc3VtaW5nIHBhcnQgb2YgdGhlIHZlY3RvciBieSBtb3ZpbmcgaXRzIGJl
Z2lubmluZyB0byB0aGUgbGVmdCwKQEAgLTg0OCw2ICs4NTQsOCBAQCBib29sIEpTQXJyYXk6OnNo
aWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChjb3VudCA+IDApOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUo
KSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKQEAgLTg1OSw3ICs4NjcsNyBAQCBib29sIEpTQXJy
YXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlX
aXRoSW50MzI6CiAgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIHVuc2ln
bmVkIG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5z
aWduZWQgb2xkTGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY291bnQgPD0gb2xkTGVuZ3RoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdl
IG1heSBoYXZlIHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgc2hpZnQuIFdlJ3Jl
IHdpbGxpbmcgdG8gZG8KQEAgLTg3NCwyOCArODgyLDI4IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRD
b3VudFdpdGhBbnlJbmRleGluZ1QKICAgICAgICAgdW5zaWduZWQgZW5kID0gb2xkTGVuZ3RoIC0g
Y291bnQ7CiAgICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUodm0pLT5ob2xlc011c3RGb3J3YXJk
VG9Qcm90b3R5cGUodm0pKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydElu
ZGV4OyBpIDwgZW5kOyArK2kpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpW2kgKyBjb3VudF0uZ2V0KCk7CisgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5nZXQoKTsKICAgICAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
SW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJh
eVN0b3JhZ2Uodm0sIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICAgICAgICAgIGJ1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtZW1tb3ZlKG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgCi0gICAgICAgICAgICAgICAgbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291bnQsIAorICAg
ICAgICAgICAgbWVtbW92ZShidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydElu
ZGV4LCAKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBz
dGFydEluZGV4ICsgY291bnQsIAogICAgICAgICAgICAgICAgIHNpemVvZihKU1ZhbHVlKSAqIChl
bmQgLSBzdGFydEluZGV4KSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBlbmQ7IGkgPCBvbGRMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmNsZWFyKCk7CiAgICAgICAgIAotICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVu
Z3RoKG9sZExlbmd0aCAtIGNvdW50KTsKKyAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5n
dGgob2xkTGVuZ3RoIC0gY291bnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOiB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExl
bmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgb2xk
TGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY291bnQgPD0gb2xkTGVuZ3RoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG1heSBoYXZl
IHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgc2hpZnQuIFdlJ3JlIHdpbGxpbmcg
dG8gZG8KQEAgLTkxMCwyMiArOTE4LDIyIEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhB
bnlJbmRleGluZ1QKICAgICAgICAgdW5zaWduZWQgZW5kID0gb2xkTGVuZ3RoIC0gY291bnQ7CiAg
ICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUodm0pLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5
cGUodm0pKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwg
ZW5kOyArK2kpIHsKLSAgICAgICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbaSArIGNvdW50XTsKKyAgICAgICAgICAgICAgICBkb3VibGUgdiA9IGJ1
dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2kgKyBjb3VudF07CiAgICAgICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHYgIT0gdikpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9
IGk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFn
ZSh2bSwgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZSh2bSkpOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpW2ldID0gdjsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KVtpXSA9IHY7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBt
ZW1tb3ZlKG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRl
eCwKLSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEo
KSArIHN0YXJ0SW5kZXggKyBjb3VudCwKKyAgICAgICAgICAgIG1lbW1vdmUoYnV0dGVyZmx5LT5j
b250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwKKyAgICAgICAgICAgICAgICBi
dXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291bnQs
CiAgICAgICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogKGVuZCAtIHN0YXJ0SW5kZXgpKTsK
ICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQ7IGkgPCBvbGRMZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQ
TmFOOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFO
OwogICAgICAgICAKLSAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChvbGRMZW5n
dGggLSBjb3VudCk7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKG9sZExlbmd0
aCAtIGNvdW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKQEAgLTk4
Niw2ICs5OTQsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAK
IGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogeworICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIAogICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgY2FzZSBBcnJh
eVdpdGhVbmRlY2lkZWQ6CkBAIC05OTQsNyArMTAwNCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50V2l0aEFueUluZGV4aW4KIAogICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6CiAgICAgY2Fz
ZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0g
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG1heSBo
YXZlIHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgdW5zaGlmdC4gV2UncmUgd2ls
bGluZyB0byBkbyBzbwogICAgICAgICAvLyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cu
CkBAIC0xMDAyLDE5ICsxMDEyLDIwIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFu
eUluZGV4aW4KICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdl
KGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkp
OwogICAgICAgICAKICAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG9sZExlbmd0aCAr
IGNvdW50KTsKKyAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogCiAg
ICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3ZSBzdGFydCBtb3Zp
bmcgdGhpbmdzIGFyb3VuZCBzbyB0aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5IAogICAgICAgICAv
LyB0aHJvdWdoIHNoaWZ0aW5nIGFuZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxkIGhhdmUgYmVlbiBp
biBBcnJheVN0b3JhZ2UgbW9kZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkTGVuZ3Ro
OyBpLS0gPiBzdGFydEluZGV4OykgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShl
eGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZExlbmd0aDsgaS0tID4g
c3RhcnRJbmRleDspIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2KTsKLSAgICAgICAgICAg
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKHYpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAv
LyBOT1RFOiB3ZSdyZSBsZWF2aW5nIGJlaW5nIGdhcmJhZ2UgaW4gdGhlIHBhcnQgb2YgdGhlIGFy
cmF5IHRoYXQgd2Ugc2hpZnRlZCBvdXQKQEAgLTEwMjYsNyArMTAzNyw3IEBAIGJvb2wgSlNBcnJh
eTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4KICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
QXJyYXlXaXRoRG91YmxlOiB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRv
IHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgdW5zaGlmdC4gV2UncmUgd2lsbGluZyB0
byBkbyBzbwogICAgICAgICAvLyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCkBAIC0x
MDM0LDE5ICsxMDQ1LDIwIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4
aW4KICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAg
ICAgICAKICAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG9sZExlbmd0aCArIGNvdW50
KTsKKyAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgICAgICAK
ICAgICAgICAgLy8gV2UgaGF2ZSB0byBjaGVjayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1v
dmluZyB0aGluZ3MgYXJvdW5kIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAg
IC8vIHRocm91Z2ggc2hpZnRpbmcgYW5kIHRoZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVu
IGluIEFycmF5U3RvcmFnZSBtb2RlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5n
dGg7IGktLSA+IHN0YXJ0SW5kZXg7KSB7Ci0gICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHYg
IT0gdikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3Jh
Z2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgp
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGkt
LSA+IHN0YXJ0SW5kZXg7KSB7Ci0gICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICAgICAgQVNTRVJUKHYgPT0gdik7Ci0gICAg
ICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2kgKyBjb3VudF0gPSB2Owor
ICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaSArIGNvdW50XSA9IHY7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE5PVEU6IHdlJ3JlIGxlYXZpbmcgYmVp
bmcgZ2FyYmFnZSBpbiB0aGUgcGFydCBvZiB0aGUgYXJyYXkgdGhhdCB3ZSBzaGlmdGVkIG91dApA
QCAtMTA3Miw2ICsxMDg0LDggQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUq
IGV4ZQogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBl
KCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CkBAIC0xMDg1LDE2ICsxMDk5LDE2IEBAIHZvaWQg
SlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICAgICAgCiAgICAgY2FzZSBB
cnJheVdpdGhJbnQzMjoKICAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKLSAgICAgICAg
dmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwotICAgICAgICB2ZWN0b3Ig
PSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKKyAgICAgICAgdmVjdG9yRW5kID0g
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yID0gYnV0dGVyZmx5LT5j
b250aWd1b3VzKCkuZGF0YSgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgQXJyYXlXaXRoRG91YmxlOiB7CiAgICAgICAgIHZlY3RvciA9IDA7CiAgICAgICAgIHZl
Y3RvckVuZCA9IDA7Ci0gICAgICAgIGZvciAoOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXNEb3VibGUoKVtpXTsKKyAgICAgICAgZm9yICg7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbaV07CiAgICAgICAgICAgICBpZiAodiAhPSB2KQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgYXJncy5hcHBlbmQoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0Rv
dWJsZSwgdikpOwpAQCAtMTEwMyw3ICsxMTE3LDcgQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlz
dChFeGVjU3RhdGUqIGV4ZQogICAgIH0KICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICB2ZWN0
b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICAgICAgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2Ut
Pmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CkBAIC0xMTQxLDYgKzExNTUsOCBA
QCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgLy8gRklYTUU6
IFdoYXQgcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGNhbGxlZCB3aXRoIGEgUnVudGltZUFycmF5
PyBUaGUgbGVuZ3RoIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiAwIGluIHRoYXQgY2FzZS4K
ICAgICBBU1NFUlQobGVuZ3RoID09IHRoaXMtPmxlbmd0aCgpKTsKIAorICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIAogICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJldHVybjsKQEAg
LTExNTMsMTcgKzExNjksMTcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0
YXRlKgogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aEludDMyOgogICAgIGNhc2UgQXJyYXlX
aXRoQ29udGlndW91czogewotICAgICAgICB2ZWN0b3IgPSBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpLmRhdGEoKTsKLSAgICAgICAgdmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOworICAgICAgICB2ZWN0b3IgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Cisg
ICAgICAgIHZlY3RvckVuZCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhEb3VibGU6IHsKICAgICAg
ICAgdmVjdG9yID0gMDsKICAgICAgICAgdmVjdG9yRW5kID0gMDsKLSAgICAgICAgZm9yICg7IGkg
PCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgQVNTRVJU
KGkgPCBidXR0ZXJmbHkoKS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgZG91YmxlIHYg
PSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICBmb3IgKDsgaSA8
IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgQVNTRVJUKGkg
PCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0
dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgICAgICBpZiAodiAhPSB2KQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnRE
ZXN0ICsgaSAtIG9mZnNldCkgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2KTsK
QEAgLTExNzIsNyArMTE4OCw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNT
dGF0ZSoKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgdmVjdG9yID0gc3RvcmFnZS0+bV92
ZWN0b3I7CiAgICAgICAgIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAxOTA2MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDEwICs4OCwxMCBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3Ry
dWN0aW9uQ29udGV4dDo6CiAgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIsCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQogICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgICwgbV92
ZWN0b3Ioc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9m
ZnNldCkKICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAsIG1fbW9kZShXYXN0ZWZ1bFR5cGVk
QXJyYXkpCiB7CisgICAgbV92ZWN0b3IgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZm
ZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0OwogICAgIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVh
ZGVyOwogICAgIGluZGV4aW5nSGVhZGVyLnNldEFycmF5QnVmZmVyKGFycmF5QnVmZmVyLmdldCgp
KTsKICAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAwLCAwLCAwLCB0cnVl
LCBpbmRleGluZ0hlYWRlciwgMCk7CkBAIC0xMDEsMTkgKzEwMSwxOSBAQCBKU0FycmF5QnVmZmVy
Vmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyLAogICAgIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgRGF0YVZpZXdUYWcpCiAgICAgOiBtX3N0cnVjdHVyZShzdHJ1
Y3R1cmUpCi0gICAgLCBtX3ZlY3RvcihzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXIt
PmRhdGEoKSkgKyBieXRlT2Zmc2V0KQogICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICwgbV9t
b2RlKERhdGFWaWV3TW9kZSkKICAgICAsIG1fYnV0dGVyZmx5KDApCiB7CisgICAgbV92ZWN0b3Ig
PSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0
OwogfQogCiBKU0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25z
dHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQogICAgIDogQmFzZSh2bSwgY29udGV4dC5zdHJ1Y3R1
cmUoKSwgY29udGV4dC5idXR0ZXJmbHkoKSkKLSAgICAsIG1fdmVjdG9yKGNvbnRleHQudmVjdG9y
KCkpCiAgICAgLCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQogICAgICwgbV9tb2RlKGNvbnRl
eHQubW9kZSgpKQogeworICAgIG1fdmVjdG9yLnNldFdpdGhvdXRCYXJyaWVyKHN0YXRpY19jYXN0
PGNoYXIqPihjb250ZXh0LnZlY3RvcigpKSk7CiB9CiAKIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIEpTQXJyYXlC
dWZmZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqCiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwogICAgIEFTU0VS
VCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3Qt
Pm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX21v
ZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQotICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5t
X3ZlY3Rvcik7CisgICAgICAgIGZhc3RGcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldFdpdGhv
dXRCYXJyaWVyKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24g
MTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIHB1YmxpYzoKICAgICBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gaW1wbCgpOwogICAgIHZvaWQgbmV1dGVyKCk7CiAgICAg
Ci0gICAgdm9pZCogdmVjdG9yKCkgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICB2b2lkKiB2ZWN0
b3IoKSB7IHJldHVybiBtX3ZlY3Rvci5nZXQodGhpcyk7IH0KICAgICB1bnNpZ25lZCBieXRlT2Zm
c2V0KCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0K
IApAQCAtMTc3LDcgKzE3Nyw3IEBAIHByaXZhdGU6CiBwcm90ZWN0ZWQ6CiAgICAgQXJyYXlCdWZm
ZXIqIGV4aXN0aW5nQnVmZmVySW5CdXR0ZXJmbHkoKTsKIAotICAgIHZvaWQqIG1fdmVjdG9yOwor
ICAgIENvcHlCYXJyaWVyPGNoYXI+IG1fdmVjdG9yOyAvLyB0aGlzIGlzIHJlYWxseSBhIHZvaWQq
LCBidXQgdm9pZCB3b3VsZCBub3Qgd29yayBoZXJlLgogICAgIHVpbnQzMl90IG1fbGVuZ3RoOwog
ICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkocmV2
aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5l
IHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpCiB7CiAgICAgQVNTRVJUKGhhc0FycmF5
QnVmZmVyKCkpOwogICAgIG1fbGVuZ3RoID0gMDsKLSAgICBtX3ZlY3RvciA9IDA7CisgICAgbV92
ZWN0b3IuY2xlYXIoKTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3Ojpi
eXRlT2Zmc2V0KCkKQEAgLTY4LDcgKzY4LDcgQEAgaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZm
ZXJWaWV3OjpieXRlTwogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBwdHJkaWZmX3QgZGVs
dGEgPQotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV92ZWN0b3IpIC0gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGJ1ZmZlcigpLT5kYXRhKCkpOworICAgICAgICBiaXR3aXNlX2Nhc3Q8dWlu
dDhfdCo+KG1fdmVjdG9yLmdldCh0aGlzKSkgLSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVy
KCktPmRhdGEoKSk7CiAgICAgCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGRlbHRhKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihyZXN1bHQp
ID09IGRlbHRhKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMTkwNjAzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA4LDExICsxMDgsMTEgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0
IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92
ZWN0b3IpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNvbnN0IHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGUqPihtX3ZlY3Rvci5nZXQodGhpcykpOwogICAgIH0KICAgICB0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpCiAgICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IuZ2V0KHRoaXMpKTsK
ICAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBpbmRleGVk
IGFjY2VzcyBtZXRob2RzIHRoYXQgSlNPYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5s
aW5lcy5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQx
LDcgKzQ0MSw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnYKICAg
ICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgewogICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6
IHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPm1fdmVjdG9yKQotICAgICAgICAgICAgdmlzaXRv
ci5jb3B5TGF0ZXIodGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09i
amVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICAgICAgdmlz
aXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhp
c09iamVjdC0+bV92ZWN0b3IuZ2V0V2l0aG91dEJhcnJpZXIoKSwgdGhpc09iamVjdC0+Ynl0ZVNp
emUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00NjgsMTIgKzQ2OCwx
MiBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjCiAgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqPihjZWxsKTsKICAgICAKICAgICBpZiAodG9rZW4gPT0gVHlwZWRBcnJheVZlY3RvckNv
cHlUb2tlbgotICAgICAgICAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3Qt
Pm1fdmVjdG9yKSkgeworICAgICAgICAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNP
YmplY3QtPm1fdmVjdG9yLmdldFdpdGhvdXRCYXJyaWVyKCkpKSB7CiAgICAgICAgIEFTU0VSVCh0
aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Ci0gICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRoaXNPYmpl
Y3QtPm1fdmVjdG9yOworICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0LT5tX3Zl
Y3Rvci5nZXQodGhpc09iamVjdCk7CiAgICAgICAgIHZvaWQqIG5ld1ZlY3RvciA9IHZpc2l0b3Iu
YWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKICAgICAgICAgbWVtY3B5
KG5ld1ZlY3Rvciwgb2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKLSAgICAgICAg
dGhpc09iamVjdC0+bV92ZWN0b3IgPSBuZXdWZWN0b3I7CisgICAgICAgIHRoaXNPYmplY3QtPm1f
dmVjdG9yLnNldFdpdGhvdXRCYXJyaWVyKHN0YXRpY19jYXN0PGNoYXIqPihuZXdWZWN0b3IpKTsK
ICAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUo
KSk7CiAgICAgfQogICAgIApAQCAtNTA4LDggKzUwOCw4IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGEKICAgICAgICAgJiYgIXRoaXNPYmplY3QtPmJ1dHRlcmZseSgp
ICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgewogICAgICAgICBBU1NFUlQodGhp
c09iamVjdC0+bV92ZWN0b3IpOwogICAgICAgICAvLyBSZXVzZSBhbHJlYWR5IGFsbG9jYXRlZCBt
ZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxlLgotICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5kZXhp
bmdIZWFkZXIqPih0aGlzT2JqZWN0LT5tX3ZlY3RvciktPmJ1dHRlcmZseSgpKTsKKyAgICAgICAg
dGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIoCisgICAgICAgICAgICBi
aXR3aXNlX2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPih0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQodGhp
c09iamVjdCkpLT5idXR0ZXJmbHkoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVk0mIHZtID0g
KmhlYXAtPnZtKCk7CiAgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldCh2bSwgdGhp
c09iamVjdCwgQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KApAQCAtNTIxLDE0ICs1
MjEsMTQgQEAgQXJyYXlCdWZmZXIqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYQogICAgIAog
ICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CiAgICAgY2FzZSBGYXN0VHlwZWRBcnJh
eToKLSAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSh0aGlzT2JqZWN0LT5tX3Zl
Y3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnVmZmVyID0gQXJyYXlC
dWZmZXI6OmNyZWF0ZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQodGhpc09iamVjdCksIHRoaXNP
YmplY3QtPmJ5dGVMZW5ndGgoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNl
IE92ZXJzaXplVHlwZWRBcnJheToKICAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRvaW5nIHNv
bWV0aGluZyBsaWtlICJzdWJ0cmFjdGluZyIgZnJvbSBleHRyYSBtZW1vcnkKICAgICAgICAgLy8g
Y29zdCwgc2luY2UgcmlnaHQgbm93IHRoaXMgY2FzZSB3aWxsIGNhdXNlIHRoZSBHQyB0byB0aGlu
ayB0aGF0IHdlIHJlYWxsb2NhdGVkCiAgICAgICAgIC8vIHRoZSB3aG9sZSBidWZmZXIuCi0gICAg
ICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVj
dG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBidWZmZXIgPSBBcnJheUJ1
ZmZlcjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQodGhpc09iamVjdCks
IHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBkZWZhdWx0OgpAQCAtNTM3LDcgKzUzNyw3IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGEKICAgICB9CiAKICAgICB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKS0+aW5k
ZXhpbmdIZWFkZXIoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKLSAgICB0aGlzT2Jq
ZWN0LT5tX3ZlY3RvciA9IGJ1ZmZlci0+ZGF0YSgpOworICAgIHRoaXNPYmplY3QtPm1fdmVjdG9y
LnNldFdpdGhvdXRCYXJyaWVyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXItPmRhdGEoKSkpOwog
ICAgIHRoaXNPYmplY3QtPm1fbW9kZSA9IFdhc3RlZnVsVHlwZWRBcnJheTsKICAgICBoZWFwLT5h
ZGRSZWZlcmVuY2UodGhpc09iamVjdCwgYnVmZmVyLmdldCgpKTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcg
KzExNyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNNYXAoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9t
YXBEYXRhKHZtKQorICAgICAgICAsIG1fbWFwRGF0YSh2bSwgdGhpcykKICAgICB7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZp
c2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SlNPYmplY3Q6OmNvcHlCdXR0ZXJmCiAgICAgICAgICAgICBtZW1jcHkoY3VycmVudFRhcmdldCwg
Y3VycmVudFNvdXJjZSwgY291bnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91dFdyaXRlQmFycmllcihu
ZXdCdXR0ZXJmbHkpOworICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcihuZXdC
dXR0ZXJmbHkpOwogICAgICAgICB2aXNpdG9yLmRpZENvcHkoYnV0dGVyZmx5LT5iYXNlKHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKICAgICB9IAogfQpA
QCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOwor
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0V2l0
aG91dEJhcnJpZXIoKTsKICAgICBpZiAoYnV0dGVyZmx5KQogICAgICAgICB0aGlzT2JqZWN0LT52
aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2
aXNpdG9yLnZtKCkpLT5vdXRPZkxpbmVTaXplKCkpOwogCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9p
ZCBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIAogICAgIGlmICh0b2tlbiAhPSBC
dXR0ZXJmbHlDb3B5VG9rZW4pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0V2l0aG91dEJhcnJpZXIoKTsKICAg
ICBpZiAoYnV0dGVyZmx5KQogICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0
b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7
CiB9CkBAIC0zNDEsNyArMzQxLDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleAogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0
LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCh0aGlzT2JqZWN0KS0+YXJyYXlTdG9y
YWdlKCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKQEAgLTUxNCw3ICs1MTQsNyBAQCB2b2lkIEpTT2JqZWN0
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+
bV9idXR0ZXJmbHkuZ2V0KHRoaXNPYmplY3QpLT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAg
ICAgICAgICBicmVhazsKQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6IHsK
LSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseS5nZXQodGhpc09iamVjdCktPmFycmF5U3RvcmFnZSgpOwogICAgICAg
ICAKICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjEzLDcgKzYxMyw3IEBAIHZvaWQgSlNPYmplY3Q6OmVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW8KICAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGVuc3VyZUFycmF5U3RvcmFnZVNs
b3codm0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5
U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7Cisg
ICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5
RXhpc3RzKHZtLCBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC02NDMsNyArNjQzLDcgQEAgQnV0
dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZQogICAgIEFTU0VSVCghaW5kZXhp
bmdTaG91bGRCZVNwYXJzZSgpKTsKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1h
eChsZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIG1fYnV0dGVyZmx5
LmdldCgpLCB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCBmYWxzZSwgMCwKKyAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLCB2bSwgdGhp
cywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwg
MCwKICAgICAgICAgZWxlbWVudFNpemUgKiB2ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JM
ZW5ndGgodmVjdG9yTGVuZ3RoKTsKQEAgLTY5NSw3ICs2OTUsNyBAQCBBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRl
eGluZ1R5cGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVy
dGllcyhvbGRUeXBlKSk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6
OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLCB2bSwg
dGhpcywgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAw
LAorICAgICAgICBtX2J1dHRlcmZseS5nZXQodGhpcyksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCiAgICAgICAgIEFycmF5U3Rv
cmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0
ZXJmbHkpOwogCkBAIC03MTksMzEgKzcxOSwzMiBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmpl
Y3Q6OmNvbnZlcnRVbmRlCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUo
KSkpOwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlSW50MzIpKTsKLSAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhp
cyktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQogCiBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6
Y29udmVydFVuZGVjaWRlZFRvRG91YmxlKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNp
ZGVkKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQotICAgICAgICBtX2J1dHRlcmZseS0+Y29udGln
dW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCk7IGktLTspCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldID0gUE5hTjsKICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZURvdWJsZSkpOwotICAg
IHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOworICAgIHJldHVybiBtX2J1
dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIAogQ29udGlndW91c0pT
VmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKFZNJiB2bSkKIHsK
ICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAgICAgc2V0U3RydWN0
dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgQWxsb2NhdGVDb250aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91cygpOwog
fQogCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3Jh
Z2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKFZNJiB2bSwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQog
ewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKLSAgICB1
bnNpZ25lZCBwdWJsaWNMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAg
dW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5n
dGgoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZS0+b3V0
T2ZMaW5lU2l6ZSgpOwogICAgIApAQCAtNzUyLDcgKzc1Myw3IEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNvbnN0cnVjdENvbnZlcnQKICAgICAKICAgICBtZW1jcHkoCiAgICAgICAgIG5ld0J1
dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCi0gICAgICAgIG1fYnV0
dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgbV9idXR0
ZXJmbHkuZ2V0KHRoaXMpLT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKICAgICAg
ICAgcHJvcGVydHlTaXplICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgCiAgICAgQXJy
YXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAg
LTc3MCw3ICs3NzEsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVk
CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQo
aW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRl
cmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHMo
dm0sIHZlY3Rvckxlbmd0aCk7CiAgICAgLy8gTm8gbmVlZCB0byBjb3B5IGVsZW1lbnRzLgogICAg
IApAQCAtNzg3LDkgKzc4OCwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5k
ZWNpZGVkCiBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyVG9Eb3VibGUo
Vk0mIHZtKQogewogICAgIEFTU0VSVChoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwotICAgIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykg
ewotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAmbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXNJbnQzMigpW2ldOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQodGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsgaS0tOykgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJl
bnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91YmxlKiBj
dXJyZW50QXNEb3VibGUgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CiAgICAgICAg
IEpTVmFsdWUgdiA9IGN1cnJlbnQtPmdldCgpOwogICAgICAgICBpZiAoIXYpIHsKQEAgLTgwMSw3
ICs4MDMsNyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyCiAgICAg
fQogICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlRG91YmxlKSk7Ci0gICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNvbnZlcnRJbnQzMlRvQ29udGlndW91cyhWTSYgdm0pCkBAIC04MDksNyArODExLDcg
QEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MwogICAgIEFTU0VSVCho
YXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwogICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRl
Q29udGlndW91cykpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAg
IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXMoKTsKIH0KIAogQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBOb25Q
cm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKQEAgLTgxNywxMCArODE5LDExIEBAIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5n
dGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRB
cnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkr
KykgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdl
dCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBp
KyspIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0
KCk7CiAgICAgICAgIGlmICh2KSB7CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvcisrOwpAQCAtODQxLDkgKzg0NCwxMCBAQCBBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNv
bnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNEb3VibGUo
aW5kZXhpbmdUeXBlKCkpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspIHsKLSAgICAgICAgZG91YmxlKiBjdXJyZW50ID0gJm1f
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KSB7CisgICAgICAgIGRvdWJsZSogY3VycmVudCA9
ICZidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBjdXJyZW50QXNWYWx1ZSA9IGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5r
bm93bj4qPihjdXJyZW50KTsKICAgICAgICAgZG91YmxlIHZhbHVlID0gKmN1cnJlbnQ7CiAgICAg
ICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgewpAQCAtODU1LDcgKzg1OSw3IEBAIENvbnRpZ3VvdXNK
U1ZhbHVlcyBKU09iamVjdDo6Y29udmVydERvdWIKICAgICB9CiAgICAgCiAgICAgc2V0U3RydWN0
dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgQWxsb2NhdGVDb250aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91cygpOwog
fQogCiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uo
Vk0mIHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKQEAgLTg2MywxMCArODY3
LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShpbmRleGluZ1R5cGUo
KSkpOwogCi0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlz
KS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3Ry
dWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9y
TGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCh0aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsKICAg
ICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
SlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKICAgICAgICAgICAgIG5l
d1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKQEAgLTg4OSwxMCArODk0LDExIEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3UKICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpKTsK
IAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZl
Y3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENv
bnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0
aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsgaSsrKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
dGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5nZXQoKTsKICAgICAgICAgaWYgKHYpIHsKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1f
dmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CiAgICAgICAgICAgICBuZXdTdG9y
YWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CkBAIC05NTcsOCArOTYzLDggQEAgdm9pZCBKU09i
amVjdDo6Y29udmVydEludDMyRm9yVmFsdWUoVk0mIAogCiB2b2lkIEpTT2JqZWN0OjpzZXRJbmRl
eFF1aWNrbHlUb1VuZGVjaWRlZChWTSYgdm0sIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0g
ICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBBU1NF
UlQoaW5kZXggPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICBB
U1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKTsKICAg
ICBjb252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUodm0sIHZhbHVlKTsKICAgICBzZXRJbmRleFF1aWNr
bHkodm0sIGluZGV4LCB2YWx1ZSk7CiB9CkBAIC0xMTE0LDcgKzExMjAsNyBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiAgICAgICAgIHJldHVybiBlbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgY29udmVy
dENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAg
IENSQVNIKCk7CkBAIC0xMzU2LDcgKzEzNjIsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KHRoaXNPYmplY3QpLT5h
cnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90
ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CkBAIC0xNTQ2LDcgKzE1NTIsNyBAQCB2b2lkIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9i
dXR0ZXJmbHkuZ2V0KG9iamVjdCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVu
Z3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKQEAgLTE2OTksNyArMTcwNSw3
IEBAIE5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHIKIHZvaWQgSlNPYmpl
Y3Q6OnB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRy
eSogZW50cnlJbk1hcCwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3IpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBhdXRvIG1hcCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VN
YXAuZ2V0KCk7CisgICAgYXV0byBtYXAgPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3Rv
cmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKIAogICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURl
c2NyaXB0b3IoKSkgewogICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQpAQCAtMTc1OCw3
ICsxNzY0LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogICAg
IGlmIChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKICAg
ICAgICAgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoZXhlYy0+dm0oKSk7CiAKLSAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fc3BhcnNlTWFwLmdldCgpOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0
dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOwogICAg
IFJFTEVBU0VfQVNTRVJUKG1hcCk7CiAKICAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2Yg
TyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KQEAgLTE3OTAsOCArMTc5Niw5IEBAIGJvb2wgSlNPYmpl
Y3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRl
ZmF1bHRzKTsKIAogICAgICAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFw
LCBkZXNjcmlwdG9yLCBkZWZhdWx0cyk7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpKQotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgoaW5kZXggKyAxKTsKKyAgICAgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgICAgIGlmIChpbmRleCA+PSBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnNldExlbmd0aChpbmRleCArIDEpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTE5MTEsMTcgKzE5MTgsMTkgQEAgdm9pZCBKU09iamVjdDo6cHV0
QnlJbmRleEJleW9uZFZlY3RvckxlbgogewogICAgIEFTU0VSVCgoaW5kZXhpbmdUeXBlKCkgJiBJ
bmRleGluZ1NoYXBlTWFzaykgPT0gaW5kZXhpbmdTaGFwZSk7CiAgICAgQVNTRVJUKCFpbmRleGlu
Z1Nob3VsZEJlU3BhcnNlKCkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQodGhpcyk7CiAgICAgCiAgICAgLy8gRm9yIHVzIHRvIGdldCBoZXJlLCB0aGUgaW5k
ZXggaXMgZWl0aGVyIGdyZWF0ZXIgdGhhbiB0aGUgcHVibGljIGxlbmd0aCwgb3IgZ3JlYXRlciB0
aGFuCiAgICAgLy8gb3IgZXF1YWwgdG8gdGhlIHZlY3RvciBsZW5ndGguCi0gICAgQVNTRVJUKGkg
Pj0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBBU1NFUlQoaSA+PSBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IAogICAgIGlmIChpID49IE1BWF9BUlJBWV9JTkRFWCAtIDEKICAgICAgICAgfHwgKGkgPj0gTUlO
X1NQQVJTRV9BUlJBWV9JTkRFWAotICAgICAgICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0
b3IoaSwgY291bnRFbGVtZW50czxpbmRleGluZ1NoYXBlPihidXR0ZXJmbHkoKSkpKQotICAgICAg
ICB8fCBpbmRleElzU3VmZmljaWVudGx5QmV5b25kTGVuZ3RoRm9yU3BhcnNlTWFwKGksIG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICYmICFpc0RlbnNlRW5vdWdo
Rm9yVmVjdG9yKGksIGNvdW50RWxlbWVudHM8aW5kZXhpbmdTaGFwZT4oYnV0dGVyZmx5KSkpCisg
ICAgICAgIHx8IGluZGV4SXNTdWZmaWNpZW50bHlCZXlvbmRMZW5ndGhGb3JTcGFyc2VNYXAoaSwg
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkpIHsKICAgICAgICAgQVNTRVJUKGkgPD0gTUFYX0FS
UkFZX0lOREVYKTsKICAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyh2bSk7CiAgICAgICAg
IFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAodm0pOwpA
QCAtMTkzMiwyNCArMTk0MSwyNSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVj
dG9yTGVuCiAgICAgfQogCiAgICAgZW5zdXJlTGVuZ3RoKHZtLCBpICsgMSk7CisgICAgYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoaSA8IG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaSA8IGJ1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewogICAg
IGNhc2UgSW50MzJTaGFwZToKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIoKSk7Ci0gICAg
ICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKHZhbHVlKTsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAg
IGNhc2UgRG91YmxlU2hhcGU6IHsKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzTnVtYmVyKCkpOwog
ICAgICAgICBkb3VibGUgdmFsdWVBc0RvdWJsZSA9IHZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAg
IEFTU0VSVCh2YWx1ZUFzRG91YmxlID09IHZhbHVlQXNEb3VibGUpOwotICAgICAgICBtX2J1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gdmFsdWVBc0RvdWJsZTsKKyAgICAgICAgYnV0
dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZUFzRG91YmxlOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAg
ICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAg
ICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC0yMjIzLDcgKzIyMzMsNyBA
QCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIAogICAg
IGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVz
KSB7Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAg
ICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRJbnQzMlRv
QXJyYXlTdG9yYWdlKHZtKSk7CiAgICAgICAgIH0KQEAgLTIyMzcsNyArMjI0Nyw3IEBAIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8KICAgICAgICAgCiAgICAgY2FzZSBB
TExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0g
ICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAg
ICAgIGlmIChpIDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0
b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAg
ICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3Jh
Z2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnREb3VibGVUb0FycmF5
U3RvcmFnZSh2bSkpOwogICAgICAgICB9CkBAIC0yMjU2LDcgKzIyNjYsNyBAQCBib29sIEpTT2Jq
ZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAg
ICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAg
ICAgaWYgKGkgPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3Rv
cmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAg
ICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0Fy
cmF5U3RvcmFnZSh2bSkpOwogICAgICAgICB9CkBAIC0yMjY2LDcgKzIyNzYsNyBAQCBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAKICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAg
ICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBp
ZiAoaSA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdl
RXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3Rv
cmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpA
QCAtMjM0Nyw4ICsyMzU3LDggQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0
TmV3VgogICAgIHVuc2lnbmVkIGxlbmd0aDsKICAgICAKICAgICBpZiAoaGFzSW5kZXhlZFByb3Bl
cnRpZXMoaW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOworICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcykt
PnZlY3Rvckxlbmd0aCgpOworICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcykt
PnB1YmxpY0xlbmd0aCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZlY3Rvckxlbmd0aCA9IDA7
CiAgICAgICAgIGxlbmd0aCA9IDA7CkBAIC0yNDU0LDI1ICsyNDY0LDI4IEBAIGJvb2wgSlNPYmpl
Y3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKIAogdm9pZCBKU09iamVjdDo6ZW5zdXJlTGVu
Z3RoU2xvdyhWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICAKICAgICBBU1NFUlQobGVuZ3RoIDwg
TUFYX0FSUkFZX0lOREVYKTsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUo
KSkgfHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUo
KSkgfHwgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgQVNTRVJUKGxlbmd0aCA+
IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgQVNTRVJUKGxlbmd0aCA+IGJ1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIAogICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0
aCA9IHN0ZDo6bWluKAogICAgICAgICBsZW5ndGggPDwgMSwKICAgICAgICAgTUFYX1NUT1JBR0Vf
VkVDVE9SX0xFTkdUSCk7Ci0gICAgdW5zaWduZWQgb2xkVmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9IGJ1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAg
IG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAor
ICAgIGJ1dHRlcmZseSA9IGJ1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCiAgICAgICAgIHZtLCB0
aGlzLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUs
CiAgICAgICAgIG9sZFZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSksCi0gICAg
ICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAg
bmV3VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgbV9idXR0ZXJm
bHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwogCi0gICAgbV9idXR0ZXJmbHktPnNldFZlY3Rv
ckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3Ro
KG5ld1ZlY3Rvckxlbmd0aCk7CiAKICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0
b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KCkuZGF0YSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47CiAgICAgfQogfQogCkBAIC0yNDg1LDEwICsyNDk4LDEw
IEBAIHZvaWQgSlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXIKICAgICBBU1NFUlQo
IW1fYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUoKSkp
OwogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwg
MCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3Ry
dWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKTsKICAgICBtX2J1dHRl
cmZseS5zZXQodm0sIHRoaXMsIG5ld0J1dHRlcmZseSk7Ci0gICAgbV9idXR0ZXJmbHktPnNldFZl
Y3Rvckxlbmd0aChsZW5ndGgpOwotICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVu
Z3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOworICAgIG5l
d0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiB9CiAKIEJ1dHRlcmZseSogSlNP
YmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVf
dCBuZXdTaXplKQpAQCAtMjQ5OCw3ICsyNTExLDcgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jv
d091dE9mTGluZVN0b3JhZwogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlv
biBub3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQogICAgIC8vIGNhcGFj
aXR5LCBzaW5jZSB3ZSBtaWdodCBoYXZlIGFscmVhZHkgbXV0YXRlZCB0aGUgc3RydWN0dXJlIGlu
LXBsYWNlLgogICAgIAotICAgIHJldHVybiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5
U3RvcmFnZShtX2J1dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNp
emUsIG5ld1NpemUpOworICAgIHJldHVybiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5
U3RvcmFnZShtX2J1dHRlcmZseS5nZXQodGhpcyksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUodm0pLCBv
bGRTaXplLCBuZXdTaXplKTsKIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtMjc4NSw3ICsyNzk4LDcgQEAgdWludDMyX3Qg
SlNPYmplY3Q6OmdldEVudW1lcmFibGVMZW5ndGgoRQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS5nZXQob2JqZWN0
KS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQo
KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgog
I2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29weVdyaXRlQmFycmll
ci5oIgorI2luY2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0
dGVyLmgiCiAjaW5jbHVkZSAiRGVmZXJHQy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTEzMSwx
NCArMTMxLDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghaGFzSW5kZXhlZFByb3Bl
cnRpZXMoaW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpOwogICAgIH0KICAgICAgICAgCiAgICAgdW5z
aWduZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKICAgICB7CiAgICAgICAgIGlmICghaGFzSW5kZXhlZFBy
b3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBtX2J1
dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpOwogICAgIH0KICAgICAgICAgCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xODEsMjMgKzE4MSwy
NCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQg
aSkKICAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQUxM
X0lOVDMyX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkgJiYgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXTsKKyAgICAgICAgICAgIHJldHVy
biBpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSAmJiBidXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXTsKICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAg
ICAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBp
ZiAoaSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgot
ICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07Cisg
ICAgICAgICAgICByZXR1cm4gaSA8IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpICYmIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIwNiwxNSArMjA3LDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgCiAgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICB7Cisg
ICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAg
ICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lO
REVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uZ2V0KCkuYXNJbnQzMigpKTsKKyAgICAgICAgICAgIHJldHVybiBqc051
bWJlcihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKS5hc0ludDMyKCkpOwogICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4g
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIGNhc2UgQUxMX0RPVUJM
RV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6OkVu
Y29kZUFzRG91YmxlLCBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldKTsKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBidXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKVtpXSk7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwpAQCAtMjIzLDMyICsyMjUsMzMgQEAgcHVibGljOgogICAgICAgICAKICAg
ICBKU1ZhbHVlIHRyeUdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKKyAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAg
ICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBF
UzoKLSAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7Ci0g
ICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOworICAgICAgICAgICAgaWYgKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBidXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmlzSW50MzIoKSB8
fCAhcmVzdWx0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5n
ZXQoKTsKKyAgICAgICAgICAgIGlmIChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVT
OiB7Ci0gICAgICAgICAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisg
ICAgICAgICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJl
c3VsdCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCByZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBpZiAoaSA8
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0
KCk7CisgICAgICAgICAgICBpZiAoaSA8IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBidXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI3Niw2
ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5
KHVuc2lnbmVkIGkpCiAgICAgeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAg
ICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5E
RUNJREVEX0lOREVYSU5HX1RZUEVTOgpAQCAtMjg1LDExICsyODksMTEgQEAgcHVibGljOgogICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6Ci0gICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsK
KyAgICAgICAgICAgIHJldHVybiBpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICAg
ICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkKLSAgICAgICAgICAgICAgICAm
JiAhIW1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAg
ICByZXR1cm4gaSA8IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpCisg
ICAgICAgICAgICAgICAgJiYgISFidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rvcltp
XTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMDYsNyArMzEwLDcgQEAgcHVi
bGljOgogICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHku
Z2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0zMTUsOSArMzE5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgdm9pZCBzZXRJbmRl
eFF1aWNrbHkoVk0mIHZtLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgeworICAgICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dp
dGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19U
WVBFUzogewotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsK
ICAgICAgICAgICAgIGlmICghdi5pc0ludDMyKCkpIHsKICAgICAgICAgICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zMjUsMTQgKzMzMCwxNCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGln
dW91cygpW2ldLnNldCh2bSwgdGhpcywgdik7Ci0gICAgICAgICAgICBpZiAoaSA+PSBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1
YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0
KHZtLCB0aGlzLCB2KTsKKyAgICAgICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCkpCisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfRE9VQkxF
X0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKCF2LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAg
ICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgodm0s
IGksIHYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTM0MiwxMyArMzQ3LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJm
b3JtaW5nU2V0SW5kZXgodm0sIGksIHYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0g
PSB2YWx1ZTsKLSAgICAgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSkKLSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsK
KyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gdmFsdWU7Cisg
ICAgICAgICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAg
ICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6IHsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4mIHggPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAgIEpTVmFsdWUgb2xkID0g
eC5nZXQoKTsKICAgICAgICAgICAgIHguc2V0KHZtLCB0aGlzLCB2KTsKQEAgLTM3MSwxNCArMzc2
LDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KFZNJiB2bSwgdW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKKyAgICAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgICAg
IHN3aXRjaCAoaW5kZXhpbmdUeXBlKSB7CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRF
WElOR19UWVBFUzogewogICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQodm0s
IGksIHYpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExf
SU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOwogICAgICAgICAgICAgaWYgKCF2LmlzSW50MzIoKSkgewogICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgo
dm0sIGksIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzg2LDE0ICszOTIsMTQgQEAg
cHVibGljOgogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgQVNTRVJUKGkg
PCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5zZXQodm0sIHRoaXMsIHYpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBi
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5zZXQodm0sIHRoaXMsIHYpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBU1NF
UlQoaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQo
aSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8
IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghdi5pc051bWJlcigpKSB7
CiAgICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWlu
Z1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00MDMsMTEg
KzQwOSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGln
dW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldID0gdmFsdWU7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXSA9IHZhbHVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwogICAgICAgICAg
ICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKICAgICAgICAgICAg
IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldCh2bSwgdGhpcywgdik7CkBAIC00MjgsNyArNDM0LDcg
QEAgcHVibGljOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuICEhbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKKyAgICAgICAgICAgIHJldHVybiAhIW1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTQ0NSw3ICs0NTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgp
LT5pblNwYXJzZU1vZGUoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NTAs
MTEgKzU1NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZl
KCk7CiAgICAgfQogICAgICAgICAKLSAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpOyB9Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkoKSB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKTsgfQorICAgIGNvbnN0IEJ1dHRlcmZseSog
YnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOyB9CisgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyk7IH0K
ICAgICAgICAgCi0gICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQotICAgIFByb3Bl
cnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHJvcGVydHlTdG9yYWdl
KCk7IH0KKyAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KIAogICAgIGNvbnN0IFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkgY29uc3QKICAgICB7CkBAIC02NTYsNyArNjYyLDcgQEAgcHVibGljOgogICAgIENv
bnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVJbnQzMihWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAo
TElLRUxZKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LmdldCh0aGlzKS0+Y29udGlndW91c0ludDMyKCk7CiAgICAgICAgICAgICAKICAgICAgICAg
cmV0dXJuIGVuc3VyZUludDMyU2xvdyh2bSk7CiAgICAgfQpAQCAtNjY4LDcgKzY3NCw3IEBAIHB1
YmxpYzoKICAgICBDb250aWd1b3VzRG91YmxlcyBlbnN1cmVEb3VibGUoVk0mIHZtKQogICAgIHsK
ICAgICAgICAgaWYgKExJS0VMWShoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOworICAgICAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91c0RvdWJsZSgpOwogICAgICAg
ICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVEb3VibGVTbG93KHZtKTsKICAgICB9CkBAIC02
NzgsNyArNjg0LDcgQEAgcHVibGljOgogICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVDb250
aWd1b3VzKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzQ29udGlndW91cyhp
bmRleGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1
b3VzKCk7CiAgICAgICAgICAgICAKICAgICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93
KHZtKTsKICAgICB9CkBAIC02OTAsNyArNjk2LDcgQEAgcHVibGljOgogICAgIEFycmF5U3RvcmFn
ZSogZW5zdXJlQXJyYXlTdG9yYWdlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFko
aGFzQW55QXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CiAKICAgICAgICAgcmV0dXJuIGVuc3VyZUFy
cmF5U3RvcmFnZVNsb3codm0pOwogICAgIH0KQEAgLTczNiw3ICs3NDIsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGhhc0FueUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUoKSkpOwotICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5hcnJheVN0b3JhZ2UoKTsKICAgICB9CiAgICAgICAgIAogICAgIC8vIENhbGwgdGhp
cyBpZiB5b3Ugd2FudCB0byBwcmVkaWNhdGUgc29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90
IHRoZQpAQCAtNzQ1LDcgKzc1MSw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3Jh
Z2UoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJl
dHVybiAwOwpAQCAtODA5LDEyICs4MTUsMTIgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAg
QVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgICAgIEFTU0VSVChoYXNDb250
aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkgfHwgaGFz
RG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsK
LSAgICAgICAgICAgIAotICAgICAgICBpZiAobV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpIDwg
bGVuZ3RoKQorCisgICAgICAgIGlmIChtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0
aCgpIDwgbGVuZ3RoKQogICAgICAgICAgICAgZW5zdXJlTGVuZ3RoU2xvdyh2bSwgbGVuZ3RoKTsK
ICAgICAgICAgICAgIAotICAgICAgICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDwg
bGVuZ3RoKQotICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgp
OworICAgICAgICBpZiAobV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKSA8IGxl
bmd0aCkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+c2V0UHVibGljTGVuZ3Ro
KGxlbmd0aCk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQg
dG8gc2hyaW5rIHRoZSBidXR0ZXJmbHkgYmFja2luZyBzdG9yZSwgYW5kIHlvdSdyZQpAQCAtODc0
LDcgKzg4MCw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQXJyYXlTdG9yYWdl
KiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KFZNJik7CiAKIHByb3RlY3RlZDoKLSAgICBDb3B5V3Jp
dGVCYXJyaWVyPEJ1dHRlcmZseT4gbV9idXR0ZXJmbHk7CisgICAgQ29weUJhcnJpZXI8QnV0dGVy
Zmx5PiBtX2J1dHRlcmZseTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogcHJpdmF0ZToKICAgICB1
aW50MzJfdCBtX3BhZGRpbmc7CkBAIC0xMzQ4LDcgKzEzNTQsNyBAQCBpbmxpbmUgdm9pZCBKU09i
amVjdDo6cHV0RGlyZWN0V2l0aG91dFRyCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwog
ICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nl
c3NvcikpOwogICAgIEFTU0VSVCghdmFsdWUuaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSk7Ci0gICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBCdXR0ZXJm
bHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICBpZiAoc3RydWN0
dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAgICAgICBuZXdCdXR0ZXJm
bHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHko
KSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAkocmV2aXNpb24gMTkwNjAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTEyLDcgKzExMiw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNTZXQoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAg
ICwgbV9zZXREYXRhKHZtKQorICAgICAgICAsIG1fc2V0RGF0YSh2bSwgdGhpcykKICAgICB7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCShyZXZp
c2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgTWFwRGF0YV9oCiAjZGVmaW5l
IE1hcERhdGFfaAogCisjaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIKICNpbmNsdWRlICJKU0NlbGwu
aCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5j
dGlvbnMuaD4KQEAgLTk0LDcgKzk1LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlIHZhbHVl
OwogICAgIH07CiAKLSAgICBNYXBEYXRhSW1wbChWTSYpOworICAgIE1hcERhdGFJbXBsKFZNJiwg
SlNDZWxsKiBvd25lcik7CiAKICAgICB2b2lkIHNldChFeGVjU3RhdGUqLCBKU0NlbGwqIG93bmVy
LCBLZXlUeXBlLCBKU1ZhbHVlKTsKICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBLZXlUeXBl
KTsKQEAgLTEzNiwxNiArMTM3LDE3IEBAIHByaXZhdGU6CiAgICAgaW50MzJfdCBtX2NhcGFjaXR5
OwogICAgIGludDMyX3QgbV9zaXplOwogICAgIGludDMyX3QgbV9kZWxldGVkQ291bnQ7Ci0gICAg
RW50cnkqIG1fZW50cmllczsKKyAgICBKU0NlbGwqIG1fb3duZXI7CisgICAgQ29weUJhcnJpZXI8
RW50cnk+IG1fZW50cmllczsKICAgICBXZWFrR0NNYXA8SlNJdGVyYXRvciosIEpTSXRlcmF0b3I+
IG1faXRlcmF0b3JzOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpT
SXRlcmF0b3I+Ci1BTFdBWVNfSU5MSU5FIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6
TWFwRGF0YUltcGwoVk0mIHZtKQorQUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJ
dGVyYXRvcj46Ok1hcERhdGFJbXBsKFZNJiB2bSwgSlNDZWxsKiBvd25lcikKICAgICA6IG1fY2Fw
YWNpdHkoMCkKICAgICAsIG1fc2l6ZSgwKQogICAgICwgbV9kZWxldGVkQ291bnQoMCkKLSAgICAs
IG1fZW50cmllcyhudWxscHRyKQorICAgICwgbV9vd25lcihvd25lcikKICAgICAsIG1faXRlcmF0
b3JzKHZtKQogewogfQpAQCAtMTgyLDcgKzE4NCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBNYXBE
YXRhSW1wbDxFbnRyeSwgSlMKIHsKICAgICBpZiAoIWVuc3VyZVNsb3QoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIEVudHJ5KiBlbnRyeSA9ICZtX21hcERhdGEtPm1fZW50cmllc1ttX2lu
ZGV4XTsKKyAgICBFbnRyeSogZW50cnkgPSAmbV9tYXBEYXRhLT5tX2VudHJpZXMuZ2V0KG1fbWFw
RGF0YS0+bV9vd25lcilbbV9pbmRleF07CiAgICAgcGFpciA9IFdURjo6S2V5VmFsdWVQYWlyPEpT
VmFsdWUsIEpTVmFsdWU+KGVudHJ5LT5rZXkoKS5nZXQoKSwgZW50cnktPnZhbHVlKCkuZ2V0KCkp
OwogICAgIG1faW5kZXggKz0gMTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIwNCw3ICsyMDYsNyBA
QCBBTFdBWVNfSU5MSU5FIGludDMyX3QgTWFwRGF0YUltcGw8RW50cnksCiAgICAgaWYgKGlzRmlu
aXNoZWQoKSkKICAgICAgICAgcmV0dXJuIG1faW5kZXg7CiAKLSAgICBFbnRyeSogZW50cmllcyA9
IG1fbWFwRGF0YS0+bV9lbnRyaWVzOworICAgIEVudHJ5KiBlbnRyaWVzID0gbV9tYXBEYXRhLT5t
X2VudHJpZXMuZ2V0KG1fbWFwRGF0YS0+bV9vd25lcik7CiAgICAgc2l6ZV90IGVuZCA9IG1fbWFw
RGF0YS0+bV9zaXplOwogICAgIHdoaWxlIChzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5kZXgpIDwg
ZW5kICYmICFlbnRyaWVzW21faW5kZXhdLmtleSgpKQogICAgICAgICBtX2luZGV4Kys7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGFJbmxpbmVzLmgJKHJl
dmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGFJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgaW5saW5lIHZvaWQgTWFw
RGF0YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAgIG1fY2FwYWNpdHkgPSAwOwogICAgIG1fc2l6
ZSA9IDA7CiAgICAgbV9kZWxldGVkQ291bnQgPSAwOwotICAgIG1fZW50cmllcyA9IG51bGxwdHI7
CisgICAgbV9lbnRyaWVzLmNsZWFyKCk7CiAgICAgbV9pdGVyYXRvcnMuZm9yRWFjaChbXShKU0l0
ZXJhdG9yKiBpdGVyYXRvciwgSlNJdGVyYXRvciopIHsKICAgICAgICAgaXRlcmF0b3ItPml0ZXJh
dG9yRGF0YSgpLT5kaWRSZW1vdmVBbGxFbnRyaWVzKCk7CiAgICAgfSk7CkBAIC02MCwyNSArNjAs
MjUgQEAgaW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYQogICAgICAgICBh
dXRvIGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFibGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52
YWx1ZShleGVjKS5pbXBsKCkpOwogICAgICAgICBpZiAoaXRlciA9PSBtX3N0cmluZ0tleWVkVGFi
bGUuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJp
ZXNbaXRlci0+dmFsdWVdOworICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilb
aXRlci0+dmFsdWVdOwogICAgIH0KICAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpIHsKICAg
ICAgICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQoYXNTeW1ib2woa2V5LnZh
bHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fc3ltYm9s
S2V5ZWRUYWJsZS5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4g
Jm1fZW50cmllc1tpdGVyLT52YWx1ZV07CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzLmdldCht
X293bmVyKVtpdGVyLT52YWx1ZV07CiAgICAgfQogICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkp
IHsKICAgICAgICAgYXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5h
c0NlbGwoKSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFs
dWVdOworICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRlci0+dmFsdWVd
OwogICAgIH0KIAogICAgIGF1dG8gaXRlciA9IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQoSlNWYWx1
ZTo6ZW5jb2RlKGtleS52YWx1ZSkpOwogICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRhYmxl
LmVuZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gJm1fZW50cmllc1tpdGVyLT52
YWx1ZV07CisgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2l0ZXItPnZhbHVlXTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+CkBAIC05
MywxNCArOTMsMTQgQEAgaW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYQog
ewogICAgIHR5cGVuYW1lIE1hcDo6aXRlcmF0b3IgbG9jYXRpb24gPSBtYXAuZmluZChrZXkpOwog
ICAgIGlmIChsb2NhdGlvbiAhPSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAmbV9lbnRyaWVz
W2xvY2F0aW9uLT52YWx1ZV07CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzLmdldChtX293bmVy
KVtsb2NhdGlvbi0+dmFsdWVdOwogCiAgICAgaWYgKCFlbnN1cmVTcGFjZUZvckFwcGVuZChleGVj
LCBvd25lcikpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgYXV0byByZXN1bHQgPSBtYXAuYWRk
KGtleSwgbV9zaXplKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7Ci0g
ICAgRW50cnkqIGVudHJ5ID0gJm1fZW50cmllc1ttX3NpemUrK107CisgICAgRW50cnkqIGVudHJ5
ID0gJm1fZW50cmllcy5nZXQobV9vd25lcilbbV9zaXplKytdOwogICAgIG5ldyAoZW50cnkpIEVu
dHJ5KCk7CiAgICAgZW50cnktPnNldEtleShleGVjLT52bSgpLCBvd25lciwga2V5VmFsdWUudmFs
dWUpOwogICAgIHJldHVybiBlbnRyeTsKQEAgLTE2NCw3ICsxNjQsNyBAQCBpbmxpbmUgYm9vbCBN
YXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvCiAgICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFs
dWU7CiAgICAgICAgIG1fdmFsdWVLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKICAgICB9Ci0gICAg
bV9lbnRyaWVzW2xvY2F0aW9uXS5jbGVhcigpOworICAgIG1fZW50cmllcy5nZXQobV9vd25lcilb
bG9jYXRpb25dLmNsZWFyKCk7CiAgICAgbV9kZWxldGVkQ291bnQrKzsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTE3Niw3ICsxNzYsNyBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeSwg
SlNJdGVyYXRvCiAgICAgaW50MzJfdCBuZXdFbmQgPSAwOwogICAgIFJFTEVBU0VfQVNTRVJUKG5l
d0NhcGFjaXR5ID4gMCk7CiAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKysp
IHsKLSAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW2ldOworICAgICAgICBFbnRyeSYg
ZW50cnkgPSBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKVtpXTsKICAgICAgICAgaWYgKCFl
bnRyeS5rZXkoKSkgewogICAgICAgICAgICAgbV9pdGVyYXRvcnMuZm9yRWFjaChbbmV3RW5kXShK
U0l0ZXJhdG9yKiBpdGVyYXRvciwgSlNJdGVyYXRvciopIHsKICAgICAgICAgICAgICAgICBpdGVy
YXRvci0+aXRlcmF0b3JEYXRhKCktPmRpZFJlbW92ZUVudHJ5KG5ld0VuZCk7CkBAIC0xOTUsMjAg
KzE5NSwyMCBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvCiAKICAg
ICAvLyBGaXh1cCBmb3IgdGhlIGhhc2htYXBzCiAgICAgZm9yIChhdXRvIHB0ciA9IG1fdmFsdWVL
ZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIp
Ci0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCku
YXNJbnQzMigpOworICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJy
aWVyKClbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwogICAgIGZvciAoYXV0byBw
dHIgPSBtX2NlbGxLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX2NlbGxLZXllZFRhYmxlLmVu
ZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5r
ZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXMuZ2V0
V2l0aG91dEJhcnJpZXIoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CiAgICAg
Zm9yIChhdXRvIHB0ciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zdHJp
bmdLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmll
c1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgICAgIHB0ci0+dmFsdWUg
PSBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5h
c0ludDMyKCk7CiAgICAgZm9yIChhdXRvIHB0ciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5iZWdpbigp
OyBwdHIgIT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52
YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAg
ICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKVtwdHItPnZhbHVl
XS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CiAKICAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkg
PT0gbV9kZWxldGVkQ291bnQpOwogICAgIG1fZGVsZXRlZENvdW50ID0gMDsKIAogICAgIG1fY2Fw
YWNpdHkgPSBuZXdDYXBhY2l0eTsKICAgICBtX3NpemUgPSBuZXdFbmQ7Ci0gICAgbV9lbnRyaWVz
ID0gZGVzdGluYXRpb247CisgICAgbV9lbnRyaWVzLnNldFdpdGhvdXRCYXJyaWVyKGRlc3RpbmF0
aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+
CkBAIC0yMTcsOSArMjE3LDkgQEAgaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRl
cmF0bwogICAgIEFTU0VSVCghc2hvdWxkUGFjaygpKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdD
YXBhY2l0eSA+IDApOwogICAgIEFTU0VSVChuZXdDYXBhY2l0eSA+PSBtX2NhcGFjaXR5KTsKLSAg
ICBtZW1jcHkoZGVzdGluYXRpb24sIG1fZW50cmllcywgc2l6ZW9mKEVudHJ5KSAqIG1fc2l6ZSk7
CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKSwg
c2l6ZW9mKEVudHJ5KSAqIG1fc2l6ZSk7CiAgICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5Owot
ICAgIG1fZW50cmllcyA9IGRlc3RpbmF0aW9uOworICAgIG1fZW50cmllcy5zZXRXaXRob3V0QmFy
cmllcihkZXN0aW5hdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFt
ZSBKU0l0ZXJhdG9yPgpAQCAtMjM2LDYgKzIzNiw4IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBN
YXBEYXRhSW1wbDxFbnRyeSwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBFbnRy
eSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4obmV3U3RvcmFnZSk7CisgICAgLy8g
RG8gYSByZWFkIGJhcnJpZXIgdG8gZW5zdXJlIHRoYXQgbV9lbnRyaWVzIHBvaW50cyB0byB0by1z
cGFjZSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGlzIEdDIGVwb2NoLgorICAgIG1fZW50cmllcy5n
ZXQobV9vd25lcik7IAogICAgIGlmIChzaG91bGRQYWNrKCkpCiAgICAgICAgIHJlcGxhY2VBbmRQ
YWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7CiAgICAgZWxzZQpAQCAt
MjQ3LDcgKzI0OSw3IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBNYXBEYXRhSW1wbDxFbnRyeSwK
IHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgogaW5saW5lIHZv
aWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
b3duZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEVudHJ5KiBlbnRyaWVzID0gbV9l
bnRyaWVzOworICAgIEVudHJ5KiBlbnRyaWVzID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVy
KCk7CiAgICAgaWYgKCFlbnRyaWVzKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fZGVsZXRl
ZENvdW50KSB7CkBAIC0yNjEsMTQgKzI2MywxNCBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxF
bnRyeSwgSlNJdGVyYXRvCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHJlaW50ZXJwcmV0
X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oJmVudHJpZXNbMF0pLCBtX3NpemUgKiAoc2l6
ZW9mKEVudHJ5KSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAgICAgfQogCi0g
ICAgdmlzaXRvci5jb3B5TGF0ZXIob3duZXIsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwgZW50
cmllcywgY2FwYWNpdHlJbkJ5dGVzKCkpOworICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBN
YXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpLCBj
YXBhY2l0eUluQnl0ZXMoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFt
ZSBKU0l0ZXJhdG9yPgogaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+
Ojpjb3B5QmFja2luZ1N0b3JlKENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4p
CiB7Ci0gICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiAmJiB2aXNpdG9y
LmNoZWNrSWZTaG91bGRDb3B5KG1fZW50cmllcykpIHsKLSAgICAgICAgRW50cnkqIG9sZEVudHJp
ZXMgPSBtX2VudHJpZXM7CisgICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tl
biAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG1fZW50cmllcy5nZXRXaXRob3V0QmFycmll
cigpKSkgeworICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IG1fZW50cmllcy5nZXRXaXRob3V0
QmFycmllcigpOwogICAgICAgICBFbnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5
Kj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcygpKSk7CiAgICAgICAg
IGlmIChzaG91bGRQYWNrKCkpCiAgICAgICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9y
ZShuZXdFbnRyaWVzLCBtX2NhcGFjaXR5KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262572</attachid>
            <date>2015-10-06 20:15:41 -0700</date>
            <delta_ts>2015-10-06 21:15:58 -0700</delta_ts>
            <desc>starting to make some JIT changes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>109001</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA2MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDA4LDYgKzQwOCw3IEBACiAJCTBGNzkwODU2MTlBMjkw
QjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3OTA4NTQxOUEyOTBCMjAwRjYz
MTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmggKi87IH07CiAJCTBGN0IyOTRC
MTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuaCAqLzsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERG
R0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENE
QiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3QzExQUMxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MDIzRUExNjEz
ODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODMz
NUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMw
MDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY4MzM1Qjgx
NjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzMSw3ICs5MzIsNiBAQAogCQkyQTRCQjdGMzE4QTQx
MTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKIAkJMkE0RUM5MEIxODYwRDZDMjAwOTRG
NzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRFQzkwOTE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJy
aWVyQnVmZmVyLmNwcCAqLzsgfTsKIAkJMkE0RUM5MEMxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRl
QmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTJBNjgyOTVC
MTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTY4Mjk1QTE4NzVGODA1MDBCNkMzRTIgLyog
Q29weVdyaXRlQmFycmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTJBNkY0NjI2MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTZGNDYyNTE3
RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBE
ZWZlckdDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLzsgfTsKIAkJMkE4MzYz
ODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE4MzYzODMxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovOyB9OwpAQCAtMjI1Niw2ICsy
MjU2LDcgQEAKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc5MDg1MzE5QTI5MEIyMDBGNjMx
MEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3OTA4NTQxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVy
ZVJlZ2lzdHJhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlUmVn
aXN0cmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3QzExQUMx
QkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvcHlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
ODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNTE2MzlDMUUzMDAx
NDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNzQ5LDcgKzI3NTAsNiBAQAogCQkyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0Qg
LyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01hbmFnZWRWYWx1ZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJBNEVDOTA5MTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV3JpdGVCYXJyaWVyQnVmZmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE0RUM5MEExODYwRDZDMjAwOTRGNzgy
IC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXcml0ZUJhcnJpZXJCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkE2
ODI5NUExODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVdyaXRlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwT3BlcmF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZl
ckdDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVyR0MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0Mg
LyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQyMzksMTIgKzQyMzksMTIgQEAKIAkJCQlDMjQwMzA1MzE0QjQwNEM5MDA3
OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovLAogCQkJCUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTEx
MiAvKiBDb3BpZWRTcGFjZS5oICovLAogCQkJCUMyQzhEMDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBD
b3BpZWRTcGFjZUlubGluZXMuaCAqLywKKwkJCQkwRjdDMTFBQzFCQzM4NjJDMDBDNzRDREIgLyog
Q29weUJhcnJpZXIuaCAqLywKIAkJCQkwRjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRv
a2VuLmggKi8sCiAJCQkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNw
cCAqLywKIAkJCQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCAqLywK
IAkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8s
CiAJCQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICovLAotCQkJ
CTJBNjgyOTVBMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJ
MkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRC
MTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCiAJCQkJMkE4MzYzODMxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLApAQCAtNjA3Nyw3ICs2MDc3
LDYgQEAKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMThEMTQwMTY1NUNGRDUwMDYyQkI4MSAvKiBD
b3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTJBNjgyOTVCMTg3NUY4MDUwMEI2QzNF
MiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGNDFBMDVD
OTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRC
NkYzMUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFk
ZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSBpbiBIZWFkZXJzICovLApAQCAtNjc2MCw2ICs2NzU5LDcgQEAKIAkJCQk4Njg5MTZCMDE1NUYy
ODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUw
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3
NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAxOTA2
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzksNiArNDc5LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAogICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKICAgICAgICAgICAgICAgICAgICAgbG9hZGVk
VmFsdWVHUFIpOworICAgICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2hJZk5vdFRvU3BhY2UobG9hZGVkVmFsdWVHUFIpKTsKICAgICAgICAgICAgICAgICBz
dG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7CiAgICAgICAgICAgICB9CiAKQEAgLTcyMyw2ICs3
MjQsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAg
ICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5i
cmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgaml0LnN0b3JlVmFs
dWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcygKQEAgLTc4Niw2ICs3ODgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRT
aXplKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSMyk7CisgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5v
dFRvU3BhY2Uoc2NyYXRjaEdQUjMpKTsKICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29w
aWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1
YlB0cigKQEAgLTgyOSw4ICs4MzIsMTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nl
c3NHZW5lcmF0aQogICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKwogICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9v
ZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoIXNjcmF0Y2hHUFJIYXNTdG9yYWdlKQorICAgICAgICAgICAgaWYgKCFzY3JhdGNoR1BS
SGFzU3RvcmFnZSkgewogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
SWZOb3RUb1NwYWNlKHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVncywKICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9v
ZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CkBAIC05MTcsNiArOTIyLDcgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogCiAgICAgY2FzZSBBcnJheUxlbmd0aDog
ewogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZh
aWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaEdQUikpOwog
ICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIHN0YXRlLmZh
aWxBbmRJZ25vcmUuYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVy
czo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Myw3ICs2NDMsOSBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0CiAgICAgaWYgKFVOTElLRUxZKHNpemUgPCAwKSkKICAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXJyYXkgc2l6ZSBp
cyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSkpKTsKIAotICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJl
LCBzaXplKSk7CisgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJy
YXlTdHJ1Y3R1cmUsIHNpemUpOworICAgIHJlc3VsdC0+YnV0dGVyZmx5KCk7IC8vIEVuc3VyZSB0
aGF0IHRoZSBiYWNraW5nIHN0b3JlIGlzIGluIHRvLXNwYWNlLgorICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJl
LCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQpAQCAtMTE3Niw2ICsxMTc4LDE0IEBAIGludDMy
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHIKICAgICByZXR1cm4gZXhlYy0+Y29k
ZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1
ZShzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpOwogfQogCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0VHlwZWRB
cnJheUJ5dGVPZmZzZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisKKyAgICByZXR1cm4ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCktPmJ5
dGVPZmZzZXQoKTsKK30KKwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRl
KEV4ZWNTdGF0ZSogZXhlYywgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2ICsxMzAsNyBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MyhFCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IHNpemVfdCB0YWJsZUluZGV4KTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNo
U3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOwogaW50MzJf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZ0FuZEdldEJyYW5jaE9mZnNldChF
eGVjU3RhdGUqLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcqKTsKK2ludDMyX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRUeXBlZEFycmF5Qnl0ZU9mZnNldChFeGVjU3RhdGUqLCBKU0Nl
bGwqKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUq
LCBXYXRjaHBvaW50U2V0Kik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFj
a092ZXJmbG93Rm9yVmFyYXJncyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBpbnQzMl90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBhcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDA5LDkgKzQ0MDksMTMgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZk1vZGUoKSksCiAgICAgICAgIFRydXN0ZWRJbW0zMihXYXN0ZWZ1bFR5
cGVkQXJyYXkpKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAK
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGRhdGFHUFIpOworICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2hJZk5vdFRvU3BhY2UoZGF0YUdQUikpOwogICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
VmVjdG9yKCkpLCB2ZWN0b3JHUFIpOworICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5vdFRvU3BhY2UodmVjdG9yR1BSKSk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhkYXRhR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mQXJyYXlCdWZmZXIoKSksIGRh
dGFHUFIpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGF0YUdQ
UiwgQXJyYXlCdWZmZXI6Om9mZnNldE9mRGF0YSgpKSwgZGF0YUdQUik7CiAgICAgbV9qaXQuc3Vi
UHRyKGRhdGFHUFIsIHZlY3RvckdQUik7CkBAIC00NDIyLDYgKzQ0MjYsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cigwKSwgdmVjdG9yR1BSKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAg
ICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQsIHZlY3Rv
ckdQUiwgYmFzZUdQUikpOwogICAgIAogICAgIGludDMyUmVzdWx0KHZlY3RvckdQUiwgbm9kZSk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5QmFycmllci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlCYXJyaWVyLmgJKHJldmlz
aW9uIDE5MDYwMykJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVdyaXRlQmFy
cmllci5oOjE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlCYXJyaWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q29weVdyaXRlQmFycmllcl9oCisjZGVmaW5lIENvcHlXcml0ZUJhcnJpZXJfaAorCisjaW5jbHVk
ZSAiSGVhcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citj
bGFzcyBDb3B5V3JpdGVCYXJyaWVyIHsKK3B1YmxpYzoKKyAgICBDb3B5V3JpdGVCYXJyaWVyKCkK
KyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBDb3B5V3JpdGVC
YXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCYgdmFsdWUpCisgICAgeworICAg
ICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCAmdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBDb3B5
V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCisgICAg
eworICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KKyAgICAKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAor
ICAgIFQqIGdldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9
CisgICAgCisgICAgVCogb3BlcmF0b3IqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBn
ZXQoKTsKKyAgICB9CisgICAgCisgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gZ2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KFZNJiB2bSwgY29u
c3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCisgICAgeworICAgICAgICB0aGlzLT5tX3ZhbHVl
ID0gdmFsdWU7CisgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzZXRXaXRob3V0V3JpdGVCYXJyaWVyKFQqIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFy
KCkgeyBtX3ZhbHVlID0gMDsgfQorCitwcml2YXRlOgorICAgIFQqIG1fdmFsdWU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENvcHlXcml0ZUJhcnJpZXJfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5QmFycmllci5oCSh3b3JraW5nIGNvcHkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5QmFycmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMyw2NyArMjMsMTU4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBDb3B5V3JpdGVCYXJyaWVyX2gKLSNkZWZpbmUgQ29weVdyaXRlQmFy
cmllcl9oCisjaWZuZGVmIENvcHlCYXJyaWVyX2gKKyNkZWZpbmUgQ29weUJhcnJpZXJfaAogCiAj
aW5jbHVkZSAiSGVhcC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci1jbGFzcyBDb3B5V3JpdGVCYXJyaWVyIHsKK2VudW0gY2xhc3MgQ29weVN0YXRlIHsKKyAg
ICAvLyBUaGUgYmFja2luZyBzdG9yZSBpcyBub3QgcGxhbm5lZCB0byBnZXQgY29waWVkIGluIHRo
aXMgZXBvY2guIElmIHlvdSBrZWVwIGEgcG9pbnRlciB0byB0aGUgYmFja2luZworICAgIC8vIHN0
b3JlIG9uIHRoZSBzdGFjaywgaXQgd2lsbCBub3QgZ2V0IGNvcGllZC4gSWYgeW91IGRvbid0IGtl
ZXAgaXQgb24gdGhlIHN0YWNrLCBpdCBtYXkgZ2V0IGNvcGllZAorICAgIC8vIHN0YXJ0aW5nIGF0
IHRoZSBuZXh0IGhhbmRzaGFrZSAodGhhdCBpcywgaXQgbWF5IHRyYW5zaXRpb24gZnJvbSBUb1Nw
YWNlIHRvIENvcHlQbGFubmVkLCBidXQKKyAgICAvLyBDb3B5UGxhbm5lZCBtZWFucyBUb1NwYWNl
IHByaW9yIHRvIHRoZSBoYW5kc2hha2UgdGhhdCBzdGFydHMgdGhlIGNvcHkgcGhhc2UpLgorICAg
IFRvU3BhY2UsCisKKyAgICAvLyBUaGUgbWFya2luZyBwaGFzZSBoYXMgc2VsZWN0ZWQgdGhpcyBi
YWNraW5nIHN0b3JlIHRvIGJlIGNvcGllZC4gSWYgd2UgYXJlIG5vdCB5ZXQgaW4gdGhlIGNvcHlp
bmcKKyAgICAvLyBwaGFzZSwgdGhpcyBiYWNraW5nIHN0b3JlIGlzIHN0aWxsIGluIHRvLXNwYWNl
LiBBbGwgdGhhdCBpcyBuZWVkZWQgaW4gc3VjaCBhIGNhc2UgaXMgdG8gbWFzayBvZmYgdGhlCisg
ICAgLy8gbG93IGJpdHMuIElmIHdlIGFyZSBpbiB0aGUgY29weWluZyBwaGFzZSwgdGhpcyBtZWFu
cyB0aGF0IHRoZSBvYmplY3QgcG9pbnRzIHRvIGZyb20tc3BhY2UuIFRoZQorICAgIC8vIGJhcnJp
ZXIgc2hvdWxkIGZpcnN0IGNvcHkgdGhlIG9iamVjdCAtIG9yIHdhaXQgZm9yIGNvcHlpbmcgdG8g
ZmluaXNoIC0gYmVmb3JlIHVzaW5nIHRoZSBvYmplY3QuCisgICAgQ29weVBsYW5uZWQsCisKKyAg
ICAvLyBUaGUgb2JqZWN0IGlzIGJlaW5nIGNvcGllZCByaWdodCBub3cuIEFueW9uZSB3YW50aW5n
IHRvIHVzZSB0aGUgb2JqZWN0IG11c3Qgd2FpdCBmb3IgdGhlIG9iamVjdCB0bworICAgIC8vIGZp
bmlzaCBiZWluZyBjb3BpZWQuIE5vdGlmaWNhdGlvbnMgYWJvdXQgY29weWluZyB1c2UgdGhlIFBh
cmtpbmdMb3QgY29tYmluZWQgd2l0aCB0aGVzZSBiaXRzLiBJZiB0aGUKKyAgICAvLyBzdGF0ZSBp
cyBDb3B5aW5nQW5kV2FpdGluZywgdGhlbiB3aGVuIHRoZSBjb3B5aW5nIGZpbmlzaGVzLCB3aGF0
ZXZlciB0aHJlYWQgd2FzIGRvaW5nIGl0IHdpbGwKKyAgICAvLyB1bnBhcmtBbGwoKSBvbiB0aGUg
YWRkcmVzcyBvZiB0aGUgQ29weUJhcnJpZXJCYXNlLiBTbywgdG8gd2FpdCBmb3IgY29weWluZyB0
byBmaW5pc2gsIENBUyB0aGlzIHRvCisgICAgLy8gQ29weWluZ0FuZFdhaXRpbmcgYW5kIHRoZW4g
cGFya0NvbmRpdGlvbmFsbHkgb24gdGhlIGJhcnJpZXIgYWRkcmVzcy4KKyAgICBDb3B5aW5nLAor
CisgICAgLy8gVGhlIG9iamVjdCBpcyBiZWluZyBjb3BpZWQgcmlnaHQgbm93LCBhbmQgdGhlcmUg
YXJlIG9uZSBvciBtb3JlIHRocmVhZHMgcGFya2VkLiBUaG9zZSB0aHJlYWRzIHdhbnQKKyAgICAv
LyB0byBiZSB1bnBhcmtlZCB3aGVuIGNvcHlpbmcgaXMgZG9uZS4gU28sIHdoaWNoZXZlciB0aHJl
YWQgZG9lcyB0aGUgY29weWluZyBuZWVkcyB0byBjYWxsIHVucGFya0FsbCgpCisgICAgLy8gb24g
dGhlIGJhcnJpZXIgYWRkcmVzcyBhZnRlciBjb3B5aW5nIGlzIGRvbmUuCisgICAgQ29weWluZ0Fu
ZFdhaXRpbmcKK307CisKK2NsYXNzIENvcHlCYXJyaWVyQmFzZSB7CiBwdWJsaWM6Ci0gICAgQ29w
eVdyaXRlQmFycmllcigpCi0gICAgICAgIDogbV92YWx1ZSgwKQorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzcGFjZUJpdHMgPSAzOworCisgICAgQ29weUJhcnJpZXJCYXNlKCkKKyAgICAgICAg
OiBtX3ZhbHVlKG51bGxwdHIpCiAgICAgewogICAgIH0KICAgICAKLSAgICBDb3B5V3JpdGVCYXJy
aWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCYgdmFsdWUpCisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhbV92YWx1ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICB2b2lkKiBnZXRX
aXRob3V0QmFycmllcigpIGNvbnN0CiAgICAgewotICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVy
LCAmdmFsdWUpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKICAgICB9Ci0gICAgCi0gICAgQ29w
eVdyaXRlQmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorCisg
ICAgLy8gV2hlbiB3ZSBhcmUgaW4gdGhlIGNvbmN1cnJlbnQgY29weWluZyBwaGFzZSwgdGhpcyBt
ZXRob2QgbWF5IGxvY2sgdGhlIGJhcnJpZXIgb2JqZWN0IChpLmUuIHRoZSBmaWVsZAorICAgIC8v
IHBvaW50aW5nIHRvIGNvcGllZCBzcGFjZSkgYW5kIGNhbGwgZGlyZWN0bHkgaW50byB0aGUgb3du
aW5nIG9iamVjdCdzIGNvcHlCYWNraW5nU3RvcmUoKSBtZXRob2QuCisgICAgdm9pZCogZ2V0KGNv
bnN0IEpTQ2VsbCogb3duZXIpIGNvbnN0CisgICAgeworICAgICAgICB2b2lkKiByZXN1bHQgPSBt
X3ZhbHVlOworICAgICAgICBpZiAoVU5MSUtFTFkoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocmVz
dWx0KSAmIHNwYWNlQml0cykpCisgICAgICAgICAgICByZXR1cm4gSGVhcDo6Y29weUJhcnJpZXIo
b3duZXIsIG1fdmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIENv
cHlTdGF0ZSBjb3B5U3RhdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENvcHlTdGF0ZT4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV92YWx1ZSkgJiBzcGFjZUJp
dHMpOworICAgIH0KKworICAgIC8vIFRoaXMgb25seSB3b3JrcyB3aGVuIHlvdSBrbm93IHRoYXQg
dGhlcmUgaXMgbm9ib2R5IGVsc2UgY29uY3VycmVudGx5IG1lc3Npbmcgd2l0aCB0aGlzIENvcHlC
YXJyaWVyLgorICAgIC8vIFRoYXQncyBoYXJkIHRvIGd1YXJhbnRlZSwgdGhvdWdoIHRoZXJlIGFy
ZSBhIGZldyB1bnVzdWFsIHBsYWNlcyB3aGVyZSB0aGlzIGVuZHMgdXAgYmVpbmcgc2FmZS4KKyAg
ICAvLyBVc3VhbGx5IHlvdSB3YW50IHRvIHVzZSBDb3B5QmFycmllcjo6d2Vha0NBUygpLgorICAg
IHZvaWQgc2V0Q29weVN0YXRlKENvcHlTdGF0ZSBjb3B5U3RhdGUpCisgICAgeworICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICB1aW50cHRyX3QgdmFsdWUgPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihtX3ZhbHVlKTsKKyAgICAgICAgdmFsdWUgJj0gfnN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oc3BhY2VCaXRzKTsKKyAgICAgICAgdmFsdWUgfD0gc3RhdGljX2Nhc3Q8dWlu
dHB0cl90Pihjb3B5U3RhdGUpOworICAgICAgICBtX3ZhbHVlID0gYml0d2lzZV9jYXN0PHZvaWQq
Pih2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZSA9IG51bGxwdHI7
IH0KKworcHJvdGVjdGVkOgorICAgIENvcHlCYXJyaWVyQmFzZShWTSYgdm0sIGNvbnN0IEpTQ2Vs
bCogb3duZXIsIHZvaWQqIHZhbHVlKQogICAgIHsKICAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25l
ciwgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuICFtX3ZhbHVlOyB9CisgICAgdm9pZCBzZXQoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVy
LCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAg
ICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgIH0KICAgICAKLSAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIHZvaWQg
c2V0V2l0aG91dEJhcnJpZXIodm9pZCogdmFsdWUpCisgICAgeworICAgICAgICB0aGlzLT5tX3Zh
bHVlID0gdmFsdWU7CisgICAgfQorCisgICAgYm9vbCB3ZWFrQ0FTV2l0aG91dEJhcnJpZXIoCisg
ICAgICAgIHZvaWQqIG9sZFBvaW50ZXIsIENvcHlTdGF0ZSBvbGRDb3B5U3RhdGUsIHZvaWQqIG5l
d1BvaW50ZXIsIENvcHlTdGF0ZSBuZXdDb3B5U3RhdGUpCisgICAgeworICAgICAgICB1aW50cHRy
X3Qgb2xkVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihvbGRQb2ludGVyKSB8IHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4ob2xkQ29weVN0YXRlKTsKKyAgICAgICAgdWludHB0cl90IG5ld1Zh
bHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3UG9pbnRlcikgfCBzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KG5ld0NvcHlTdGF0ZSk7CisgICAgICAgIHJldHVybiB3ZWFrQ29tcGFyZUFuZFN3
YXAoJm1fdmFsdWUsIGJpdHdpc2VfY2FzdDx2b2lkKj4ob2xkVmFsdWUpLCBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KG5ld1ZhbHVlKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIG11dGFibGUgdm9pZCog
bV92YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgQ29weUJhcnJpZXIg
OiBwdWJsaWMgQ29weUJhcnJpZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBDb3B5QmFycmllcigpCisg
ICAgeworICAgIH0KICAgICAKLSAgICBUKiBnZXQoKSBjb25zdAorICAgIENvcHlCYXJyaWVyKFZN
JiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCYgdmFsdWUpCisgICAgICAgIDogQ29weUJhcnJp
ZXJCYXNlKHZtLCBvd25lciwgJnZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWU7
CiAgICAgfQogICAgIAotICAgIFQqIG9wZXJhdG9yKigpIGNvbnN0CisgICAgQ29weUJhcnJpZXIo
Vk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKKyAgICAgICAgOiBDb3B5QmFy
cmllckJhc2Uodm0sIG93bmVyLCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBnZXQoKTsK
KyAgICB9CisKKyAgICBUKiBnZXRXaXRob3V0QmFycmllcigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihDb3B5QmFycmllckJhc2U6OmdldFdpdGhvdXRCYXJy
aWVyKCkpOwogICAgIH0KICAgICAKLSAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QKKyAgICBUKiBn
ZXQoY29uc3QgSlNDZWxsKiBvd25lcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBnZXQo
KTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4oQ29weUJhcnJpZXJCYXNlOjpnZXQo
b3duZXIpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXQoVk0mIHZtLCBjb25zdCBKU0NlbGwq
IG93bmVyLCBUKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsK
LSAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICBDb3B5QmFycmll
ckJhc2U6OnNldCh2bSwgb3duZXIsIHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRX
aXRob3V0V3JpdGVCYXJyaWVyKFQqIHZhbHVlKQorICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIo
VCogdmFsdWUpCiAgICAgewotICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAg
IENvcHlCYXJyaWVyQmFzZTo6c2V0V2l0aG91dEJhcnJpZXIodmFsdWUpOwogICAgIH0KLSAgICAK
LSAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gMDsgfQogCi1wcml2YXRlOgotICAgIFQqIG1f
dmFsdWU7CisgICAgYm9vbCB3ZWFrQ0FTV2l0aG91dEJhcnJpZXIoVCogb2xkUG9pbnRlciwgQ29w
eVN0YXRlIG9sZENvcHlTdGF0ZSwgVCogbmV3UG9pbnRlciwgQ29weVN0YXRlIG5ld0NvcHlTdGF0
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBDb3B5QmFycmllckJhc2U6OndlYWtDQVNXaXRob3V0
QmFycmllcihvbGRQb2ludGVyLCBvbGRDb3B5U3RhdGUsIG5ld1BvaW50ZXIsIG5ld0NvcHlTdGF0
ZSk7CisgICAgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBDb3B5V3Jp
dGVCYXJyaWVyX2gKKyNlbmRpZiAvLyBDb3B5QmFycmllcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTkwNjAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBi
b29sIENvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29weSh2b2lkKiBvbGRQdHIpCiB7CisgICAg
aWYgKCFvbGRQdHIpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBDb3BpZWRCbG9jayogYmxv
Y2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3Iob2xkUHRyKTsKICAgICBpZiAoYmxvY2stPmlzT3Zl
cnNpemUoKSB8fCBibG9jay0+aXNQaW5uZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVdyaXRlQmFycmllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlXcml0ZUJhcnJpZXIuaAkocmV2
aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVdyaXRlQmFy
cmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIENvcHlXcml0ZUJhcnJpZXJfaAotI2RlZmluZSBDb3B5V3JpdGVCYXJyaWVyX2gKLQotI2lu
Y2x1ZGUgIkhlYXAuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotY2xhc3MgQ29weVdyaXRlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAgQ29weVdyaXRlQmFycmll
cigpCi0gICAgICAgIDogbV92YWx1ZSgwKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ29weVdy
aXRlQmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwgJnZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAg
Q29weVdyaXRlQmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwgdmFsdWUpOwotICAgIH0KLSAgICAK
LSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9Ci0gICAgCi0g
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAg
ICAKLSAgICBUKiBnZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0g
ICAgfQotICAgIAotICAgIFQqIG9wZXJhdG9yKigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGdldCgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChWTSYgdm0s
IGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy0+bV92
YWx1ZSA9IHZhbHVlOwotICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgc2V0V2l0aG91dFdyaXRlQmFycmllcihUKiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
bGVhcigpIHsgbV92YWx1ZSA9IDA7IH0KLQotcHJpdmF0ZToKLSAgICBUKiBtX3ZhbHVlOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBDb3B5V3JpdGVCYXJyaWVyX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxOTA2MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAw
Myw2ICsxMDAzLDEyIEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UK
ICAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4o
Y2VsbCkpOwogfQogCit2b2lkKiBIZWFwOjpjb3B5QmFycmllcihjb25zdCBKU0NlbGwqLCB2b2lk
KiYgcG9pbnRlcikKK3sKKyAgICAvLyBEbyBub3RoaW5nIGZvciBub3cuCisgICAgcmV0dXJuIHBv
aW50ZXI7Cit9CisKIHZvaWQgSGVhcDo6Y29sbGVjdEFuZFN3ZWVwKEhlYXBPcGVyYXRpb24gY29s
bGVjdGlvblR5cGUpCiB7CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKICAg
ICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKIAorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkKiBjb3B5QmFycmllcihjb25zdCBKU0NlbGwqIG93bmVy
LCB2b2lkKiYgY29waWVkU3BhY2VQb2ludGVyKTsKKwogICAgIFdyaXRlQmFycmllckJ1ZmZlciYg
d3JpdGVCYXJyaWVyQnVmZmVyKCkgeyByZXR1cm4gbV93cml0ZUJhcnJpZXJCdWZmZXI7IH0KICAg
ICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCopOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDE5MDYwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgSGVhcElubGluZXNfaAogI2RlZmluZSBIZWFwSW5saW5l
c19oCiAKKyNpbmNsdWRlICJDb3B5QmFycmllci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNs
dWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTkwNjAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNzU0LDYgKzc1NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2hQdHIo
Y29uZGl0aW9uLCBsZWZ0SGFuZFNpZGUsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CiAjZW5k
aWYKICAgICB9CisKKyAgICBKdW1wIGJyYW5jaElmTm90VG9TcGFjZShHUFJSZWcgc3RvcmFnZUdQ
UikKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoTm9uWmVybywgc3RvcmFnZUdQ
UiwgVHJ1c3RlZEltbTMyKENvcHlCYXJyaWVyOjpzcGFjZUJpdHMpKTsKKyAgICB9CiAgICAgCiAg
ICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvckJ5dGVPZmZzZXQocHRyZGlmZl90IGJ5dGVPZmZz
ZXQpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3
ICs5Nyw3IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UKICAgICBp
ZiAodGhpc09iamVjdC0+bV9vdmVycmlkZXMpIHsKICAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIo
CiAgICAgICAgICAgICB0aGlzT2JqZWN0LCBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9r
ZW4sCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5nZXQoKSwgdGhpc09iamVj
dC0+b3ZlcnJpZGVzU2l6ZSgpKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVz
LmdldFdpdGhvdXRCYXJyaWVyKCksIHRoaXNPYmplY3QtPm92ZXJyaWRlc1NpemUoKSk7CiAgICAg
fQogfQogCkBAIC0xMDgsMTQgKzEwOCwxMSBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6Y29weUJh
Y2tpbmdTdG9yZShKCiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQodG9rZW4gPT0gRGlyZWN0QXJn
dW1lbnRzT3ZlcnJpZGVzQ29weVRva2VuKTsKICAgICAKLSAgICBib29sKiBvbGRPdmVycmlkZXMg
PSB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5nZXQoKTsKLSAgICBpZiAoIW9sZE92ZXJyaWRlcykK
LSAgICAgICAgcmV0dXJuOwotICAgIAorICAgIHZvaWQqIG9sZE92ZXJyaWRlcyA9IHRoaXNPYmpl
Y3QtPm1fb3ZlcnJpZGVzLmdldFdpdGhvdXRCYXJyaWVyKCk7CiAgICAgaWYgKHZpc2l0b3IuY2hl
Y2tJZlNob3VsZENvcHkob2xkT3ZlcnJpZGVzKSkgewogICAgICAgICBib29sKiBuZXdPdmVycmlk
ZXMgPSBzdGF0aWNfY2FzdDxib29sKj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmpl
Y3QtPm92ZXJyaWRlc1NpemUoKSkpOwogICAgICAgICBtZW1jcHkobmV3T3ZlcnJpZGVzLCBvbGRP
dmVycmlkZXMsIHRoaXNPYmplY3QtPm1fbGVuZ3RoKTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9v
dmVycmlkZXMuc2V0V2l0aG91dFdyaXRlQmFycmllcihuZXdPdmVycmlkZXMpOworICAgICAgICB0
aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5zZXRXaXRob3V0QmFycmllcihuZXdPdmVycmlkZXMpOwog
ICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkT3ZlcnJpZGVzLCB0aGlzT2JqZWN0LT5vdmVycmlk
ZXNTaXplKCkpOwogICAgIH0KIH0KQEAgLTEzNSw5ICsxMzIsMTAgQEAgdm9pZCBEaXJlY3RBcmd1
bWVudHM6Om92ZXJyaWRlVGhpbmdzKFZNJgogICAgIAogICAgIHZvaWQqIGJhY2tpbmdTdG9yZTsK
ICAgICBSRUxFQVNFX0FTU0VSVCh2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCBvdmVy
cmlkZXNTaXplKCksICZiYWNraW5nU3RvcmUpKTsKLSAgICBtX292ZXJyaWRlcy5zZXQodm0sIHRo
aXMsIHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpKTsKKyAgICBib29sKiBvdmVycmlk
ZXMgPSBzdGF0aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKTsKKyAgICBtX292ZXJyaWRlcy5z
ZXQodm0sIHRoaXMsIG92ZXJyaWRlcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sZW5ndGg7
IGktLTspCi0gICAgICAgIG1fb3ZlcnJpZGVzLmdldCgpW2ldID0gZmFsc2U7CisgICAgICAgIG92
ZXJyaWRlc1tpXSA9IGZhbHNlOwogfQogCiB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVU
aGluZ3NJZk5lY2Vzc2FyeShWTSYgdm0pCkBAIC0xNDksNyArMTQ3LDcgQEAgdm9pZCBEaXJlY3RB
cmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzSWZOZQogdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJy
aWRlQXJndW1lbnQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCkKIHsKICAgICBvdmVycmlkZVRoaW5n
c0lmTmVjZXNzYXJ5KHZtKTsKLSAgICBtX292ZXJyaWRlcy5nZXQoKVtpbmRleF0gPSB0cnVlOwor
ICAgIG1fb3ZlcnJpZGVzLmdldCh0aGlzKVtpbmRleF0gPSB0cnVlOwogfQogCiB2b2lkIERpcmVj
dEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmgJKHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICBib29sIGNhbkFjY2Vzc0luZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fb3ZlcnJpZGVzIHx8ICFt
X292ZXJyaWRlcy5nZXQoKVtpXSk7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgKCFt
X292ZXJyaWRlcyB8fCAhbV9vdmVycmlkZXMuZ2V0KHRoaXMpW2ldKTsKICAgICB9CiAKICAgICBi
b29sIGNhbkFjY2Vzc0FyZ3VtZW50SW5kZXhRdWlja2x5SW5ERkcodWludDMyX3QgaSkgY29uc3QK
QEAgLTE0OCw3ICsxNDgsNyBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9u
PiBtX2NhbGxlZTsKICAgICB1aW50MzJfdCBtX2xlbmd0aDsgLy8gQWx3YXlzIHRoZSBhY3R1YWwg
bGVuZ3RoIG9mIGNhcHR1cmVkIGFyZ3VtZW50cyBhbmQgbmV2ZXIgd2hhdCB3YXMgc3RvcmVkIGlu
dG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KICAgICB1aW50MzJfdCBtX21pbkNhcGFjaXR5OyAvLyBU
aGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0aCBkZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBvZiB0aGlz
IG9iamVjdC4gSXQgbWF5IGJlIHRoZSBhY3R1YWwgY2FwYWNpdHksIG9yIG1heWJlIHNvbWV0aGlu
ZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0IHRoaXMgd2F5IHRvIGJlIGtpbmQgdG8gdGhlIEpJVHMu
Ci0gICAgQ29weVdyaXRlQmFycmllcjxib29sPiBtX292ZXJyaWRlczsgLy8gSWYgbm9uLW51bGws
IGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVy
aWFsaXplZCBwcm9wZXJ0aWVzLgorICAgIENvcHlCYXJyaWVyPGJvb2w+IG1fb3ZlcnJpZGVzOyAv
LyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBh
cmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZp
c2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzkyLDYgKzM5Miw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVu
Z3RoV2l0aEFycmF5U3RvcmFnZSgKIAogYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBuZXdMZW5ndGgsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CisgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgc3dpdGNo
IChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgaWYgKCFu
ZXdMZW5ndGgpCkBAIC00MDgsNyArNDA5LDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhl
Y1N0YXRlKiBleGVjLAogICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6CiAgICAgY2FzZSBBcnJheVdp
dGhEb3VibGU6CiAgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIGlmIChu
ZXdMZW5ndGggPT0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICBpZiAobmV3
TGVuZ3RoID09IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgaWYgKG5ld0xlbmd0aCA+PSBNQVhfQVJSQVlfSU5ERVggLy8gVGhpcyBj
YXNlIGVuc3VyZXMgdGhhdCB3ZSBjYW4gZG8gZmFzdCBwdXNoLgogICAgICAgICAgICAgfHwgKG5l
d0xlbmd0aCA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYCkBAIC00MTcsMTIgKzQxOCwxMiBAQCBi
b29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAg
ZXhlYywgbmV3TGVuZ3RoLCB0aHJvd0V4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICBlbnN1cmVB
cnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChuZXdMZW5n
dGggPiBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKG5ld0xlbmd0
aCA+IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpIHsKICAgICAgICAgICAgIGVuc3VyZUxlbmd0
aChleGVjLT52bSgpLCBuZXdMZW5ndGgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBsZW5ndGhUb0NsZWFyID0gbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpIC0gbmV3TGVuZ3RoOworICAgICAgICB1bnNpZ25lZCBsZW5ndGhUb0NsZWFy
ID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSAtIG5ld0xlbmd0aDsKICAgICAgICAgdW5zaWdu
ZWQgY29zdFRvQWxsb2NhdGVOZXdCdXR0ZXJmbHkgPSA2NDsgLy8gYSBoZXVyaXN0aWMuCiAgICAg
ICAgIGlmIChsZW5ndGhUb0NsZWFyID4gbmV3TGVuZ3RoICYmIGxlbmd0aFRvQ2xlYXIgPiBjb3N0
VG9BbGxvY2F0ZU5ld0J1dHRlcmZseSkgewogICAgICAgICAgICAgcmVhbGxvY2F0ZUFuZFNocmlu
a0J1dHRlcmZseShleGVjLT52bSgpLCBuZXdMZW5ndGgpOwpAQCAtNDMwLDEzICs0MzEsMTMgQEAg
Ym9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKGluZGV4aW5nVHlwZSgpID09IEFycmF5V2l0aERvdWJsZSkgewotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpLS0gPiBu
ZXdMZW5ndGg7KQotICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KClbaV0gPSBQTmFOOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsgaS0tID4gbmV3TGVuZ3RoOykKKyAgICAgICAgICAgICAgICBidXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkt
LSA+IG5ld0xlbmd0aDspCi0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5jbGVhcigpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsgaS0tID4gbmV3TGVuZ3RoOykKKyAgICAgICAgICAgICAgICBidXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgICAgICB9Ci0gICAgICAgIG1fYnV0dGVy
Zmx5LT5zZXRQdWJsaWNMZW5ndGgobmV3TGVuZ3RoKTsKKyAgICAgICAgYnV0dGVyZmx5LT5zZXRQ
dWJsaWNMZW5ndGgobmV3TGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
ICAgICAKQEAgLTQ1Miw1MSArNDUzLDUzIEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywKIAogSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIAog
ICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aFVu
ZGVjaWRlZDoKLSAgICAgICAgaWYgKCFtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAg
ICAgIGlmICghYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgICAgICAvLyBXZSBoYXZlIG5vdGhpbmcgYnV0IGhvbGVzLiBTbywg
ZHJvcCBkb3duIHRvIHRoZSBzbG93IHZlcnNpb24uCiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIEFycmF5V2l0aEludDMyOgogICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czog
ewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAg
ICAgICAgIAogICAgICAgICBpZiAoIWxlbmd0aC0tKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPCBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmdldCgpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChsZW5ndGggPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uZ2V0KCk7CiAgICAgICAgIGlm
ICh2YWx1ZSkgewotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhd
LmNsZWFyKCk7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0
aCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmNsZWFyKCk7
CisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhEb3VibGU6IHsKLSAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAgICAgICAKICAgICAgICAgaWYgKCFs
ZW5ndGgtLSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
KTsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KVtsZW5ndGhdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPCBidXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKClbbGVuZ3RoXTsKICAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKSB7Ci0gICAg
ICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2xlbmd0aF0gPSBQTmFOOwot
ICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAg
ICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbbGVuZ3RoXSA9IFBOYU47CisgICAg
ICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKTsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9B
UlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAKICAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmICghbGVuZ3RoKSB7
CkBAIC01NDcsNiArNTUwLDggQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVj
KQogLy8gIC0gcHVzaGluZyB0byBhbiBhcnJheSBvZiBsZW5ndGggMl4zMi0xIHN0b3JlcyB0aGUg
cHJvcGVydHksIGJ1dCB0aHJvd3MgYSByYW5nZSBlcnJvci4KIHZvaWQgSlNBcnJheTo6cHVzaChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5
cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczogewogICAgICAgICBjcmVhdGVJbml0aWFsVW5k
ZWNpZGVkKGV4ZWMtPnZtKCksIDApOwpAQCAtNTY2LDExICs1NzEsMTEgQEAgdm9pZCBKU0FycmF5
OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOwotICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSk7Ci0gICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpIHsK
LSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtsZW5ndGhdLnNldFdp
dGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1
YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBidXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IGJ1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbbGVu
Z3RoXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKKyAgICAgICAgICAgIGJ1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIApAQCAtNTg2LDExICs1OTEsMTEgQEAgdm9pZCBKU0FycmF5OjpwdXNo
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIH0KIAogICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7Ci0gICAgICAgIEFTU0VSVChsZW5ndGggPD0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpKTsKLSAgICAgICAgaWYgKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkg
ewotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLnNldChleGVj
LT52bSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGlj
TGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBidXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpOworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpOworICAgICAgICBpZiAobGVuZ3RoIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSkgeworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5zZXQo
ZXhlYy0+dm0oKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJs
aWNMZW5ndGgobGVuZ3RoICsgMSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC02MTgsMTEgKzYyMywxMSBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRl
KiBleGVjLCBKU1ZhCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7Ci0gICAgICAgIEFT
U0VSVChsZW5ndGggPD0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgaWYg
KGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgewotICAgICAgICAgICAgbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtsZW5ndGhdID0gdmFsdWVBc0RvdWJsZTsKLSAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAg
IEFTU0VSVChsZW5ndGggPD0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlm
IChsZW5ndGggPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBidXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtsZW5ndGhdID0gdmFsdWVBc0RvdWJsZTsKKyAgICAg
ICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjQ4LDcgKzY1Myw3IEBAIHZvaWQg
SlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKIAogICAgICAgICAvLyBGYXN0
IGNhc2UgLSBwdXNoIHdpdGhpbiB2ZWN0b3IsIGFsd2F5cyB1cGRhdGUgbV9sZW5ndGggJiBtX251
bVZhbHVlc0luVmVjdG9yLgogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5n
dGgoKTsKQEAgLTY5Niw5ICs3MDEsOSBAQCBKU0FycmF5KiBKU0FycmF5OjpmYXN0U2xpY2UoRXhl
Y1N0YXRlJiBlCiAKICAgICAgICAgYXV0byYgcmVzdWx0QnV0dGVyZmx5ID0gKnJlc3VsdEFycmF5
LT5idXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGFycmF5VHlwZSA9PSBBcnJheVdpdGhEb3VibGUp
Ci0gICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5k
YXRhKCksIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRl
eCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOworICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1
dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBtX2J1dHRlcmZseS5nZXQodGhpcykt
PmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkg
KiBjb3VudCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lbWNweShyZXN1bHRCdXR0ZXJm
bHkuY29udGlndW91cygpLmRhdGEoKSwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkg
KyBzdGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkgKiBjb3VudCk7CisgICAgICAgICAgICBtZW1j
cHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIG1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAq
IGNvdW50KTsKICAgICAgICAgcmVzdWx0QnV0dGVyZmx5LnNldFB1YmxpY0xlbmd0aChjb3VudCk7
CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwpAQCAtNzE1LDggKzcyMCw4IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQXJyYXk6OmZhc3RDb25jYXRXaXRoKEUKICAgICBWTSYgdm0gPSBleGVjLnZt
KCk7CiAgICAgQVNTRVJUKG5ld0FycmF5VHlwZSA9PSBmYXN0Q29uY2F0VHlwZSh2bSwgKnRoaXMs
IG90aGVyQXJyYXkpKTsKIAotICAgIHVuc2lnbmVkIHRoaXNBcnJheVNpemUgPSBtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgb3RoZXJBcnJheVNpemUgPSBvdGhlckFy
cmF5Lm1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB0aGlzQXJyYXlT
aXplID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNpZ25l
ZCBvdGhlckFycmF5U2l6ZSA9IG90aGVyQXJyYXkubV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJs
aWNMZW5ndGgoKTsKICAgICBBU1NFUlQodGhpc0FycmF5U2l6ZSArIG90aGVyQXJyYXlTaXplIDwg
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWCk7CiAKICAgICBTdHJ1Y3R1cmUqIHJlc3VsdFN0cnVjdHVy
ZSA9IGV4ZWMubGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24obmV3QXJyYXlUeXBlKTsKQEAgLTcyOCwxMSArNzMzLDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQXJyYXk6OmZhc3RDb25jYXRXaXRoKEUKICAgICBhdXRvJiBvdGhl
ckJ1dHRlcmZseSA9ICpvdGhlckFycmF5LmJ1dHRlcmZseSgpOwogICAgIGlmIChuZXdBcnJheVR5
cGUgPT0gQXJyYXlXaXRoRG91YmxlKSB7CiAgICAgICAgIGF1dG8gYnVmZmVyID0gcmVzdWx0QnV0
dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCk7Ci0gICAgICAgIG1lbWNweShidWZmZXIs
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkg
KiB0aGlzQXJyYXlTaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiB0aGlz
QXJyYXlTaXplKTsKICAgICAgICAgbWVtY3B5KGJ1ZmZlciArIHRoaXNBcnJheVNpemUsIG90aGVy
QnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIG90
aGVyQXJyYXlTaXplKTsKICAgICB9IGVsc2UgewogICAgICAgICBhdXRvIGJ1ZmZlciA9IHJlc3Vs
dEJ1dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBt
X2J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogdGhpc0Fy
cmF5U2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+
Y29udGlndW91cygpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogdGhpc0FycmF5U2l6ZSk7CiAg
ICAgICAgIG1lbWNweShidWZmZXIgKyB0aGlzQXJyYXlTaXplLCBvdGhlckJ1dHRlcmZseS5jb250
aWd1b3VzKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiBvdGhlckFycmF5U2l6ZSk7CiAgICAg
fQogCkBAIC04MDUsOCArODEwLDkgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5
U3RvcmFnZQogICAgICAgICAvLyBBZGp1c3QgdGhlIEJ1dHRlcmZseSBhbmQgdGhlIGluZGV4IGJp
YXMuIFdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIGhlcmUgYmVjYXVzZSB3ZSdyZSBjaGFuZ2luZwog
ICAgICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIEJ1dHRlcmZseSwgd2hpY2ggbmVlZHMgdG8gcG9p
bnQgYXQgdGhlIGZpcnN0IGluZGV4ZWQgcHJvcGVydHkgaW4gdGhlIHVzZWQKICAgICAgICAgLy8g
cG9ydGlvbiBvZiB0aGUgdmVjdG9yLgotICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKG1fYnV0dGVyZmx5LT5zaGlmdChzdHJ1Y3R1cmUoKSwgY291bnQpKTsKLSAgICAg
ICAgc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnNoaWZ0KHN0cnVjdHVyZSgp
LCBjb3VudCk7CisgICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKGJ1dHRlcmZs
eSk7CisgICAgICAgIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAg
ICBzdG9yYWdlLT5tX2luZGV4QmlhcyArPSBjb3VudDsKIAogICAgICAgICAvLyBTaW5jZSB3ZSdy
ZSBjb25zdW1pbmcgcGFydCBvZiB0aGUgdmVjdG9yIGJ5IG1vdmluZyBpdHMgYmVnaW5uaW5nIHRv
IHRoZSBsZWZ0LApAQCAtODQ4LDYgKzg1NCw4IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdp
dGhBbnlJbmRleGluZ1QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKGNvdW50ID4gMCk7CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCh0aGlzKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAg
Y2FzZSBBcnJheUNsYXNzOgpAQCAtODU5LDcgKzg2Nyw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRD
b3VudFdpdGhBbnlJbmRleGluZ1QKICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhJbnQzMjoK
ICAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKLSAgICAgICAgdW5zaWduZWQgb2xkTGVu
Z3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBvbGRM
ZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VChjb3VudCA8PSBvbGRMZW5ndGgpOwogICAgICAgICAKICAgICAgICAgLy8gV2UgbWF5IGhhdmUg
dG8gd2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSBzaGlmdC4gV2UncmUgd2lsbGluZyB0
byBkbwpAQCAtODc0LDI4ICs4ODIsMjggQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFu
eUluZGV4aW5nVAogICAgICAgICB1bnNpZ25lZCBlbmQgPSBvbGRMZW5ndGggLSBjb3VudDsKICAg
ICAgICAgaWYgKHRoaXMtPnN0cnVjdHVyZSh2bSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlw
ZSh2bSkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBl
bmQ7ICsraSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaSArIGNvdW50XS5nZXQoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBi
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpICsgY291bnRdLmdldCgpOwogICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghdikpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh2
bSwgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1lbW1vdmUobV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKS5kYXRhKCkgKyBzdGFydEluZGV4LCAKLSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXggKyBjb3VudCwgCisgICAgICAgICAgICBt
ZW1tb3ZlKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIAorICAg
ICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgg
KyBjb3VudCwgCiAgICAgICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogKGVuZCAtIHN0YXJ0
SW5kZXgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZDsgaSA8
IG9sZExlbmd0aDsgKytpKQotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5jbGVhcigpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIo
KTsKICAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgob2xkTGVu
Z3RoIC0gY291bnQpOworICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChvbGRMZW5n
dGggLSBjb3VudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBBcnJheVdpdGhEb3VibGU6IHsKLSAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBi
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCA8
PSBvbGRMZW5ndGgpOwogICAgICAgICAKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0
aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSBzaGlmdC4gV2UncmUgd2lsbGluZyB0byBkbwpAQCAt
OTEwLDIyICs5MTgsMjIgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5n
VAogICAgICAgICB1bnNpZ25lZCBlbmQgPSBvbGRMZW5ndGggLSBjb3VudDsKICAgICAgICAgaWYg
KHRoaXMtPnN0cnVjdHVyZSh2bSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSkpIHsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmQ7ICsraSkg
ewotICAgICAgICAgICAgICAgIGRvdWJsZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpICsgY291bnRdOworICAgICAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5j
b250aWd1b3VzRG91YmxlKClbaSArIGNvdW50XTsKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkodiAhPSB2KSkgewogICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gaTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHZtLCBzdGFy
dEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKHZtKSk7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2
OworICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gdjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1lbW1vdmUobV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LAotICAgICAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJ
bmRleCArIGNvdW50LAorICAgICAgICAgICAgbWVtbW92ZShidXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LAorICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXggKyBjb3VudCwKICAgICAgICAg
ICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiAoZW5kIC0gc3RhcnRJbmRleCkpOwogICAgICAgICB9
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZDsgaSA8IG9sZExlbmd0aDsgKytpKQotICAg
ICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAg
ICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CiAgICAgICAg
IAotICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50
KTsKKyAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgob2xkTGVuZ3RoIC0gY291bnQp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIApAQCAtOTg2LDYgKzk5NCw4
IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmEKIAogYm9vbCBKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCiB7CisgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgCiAgICAgc3dpdGNoIChpbmRleGlu
Z1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICBjYXNlIEFycmF5V2l0aFVuZGVj
aWRlZDoKQEAgLTk5NCw3ICsxMDA0LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRo
QW55SW5kZXhpbgogCiAgICAgY2FzZSBBcnJheVdpdGhJbnQzMjoKICAgICBjYXNlIEFycmF5V2l0
aENvbnRpZ3VvdXM6IHsKLSAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbV9idXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBidXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpOwogICAgICAgICAKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2Fs
ayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSB1bnNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRv
IHNvCiAgICAgICAgIC8vIG9ubHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xvdy4KQEAgLTEwMDIs
MTkgKzEwMTIsMjAgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbgog
ICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3Rh
cnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAg
IAogICAgICAgICBlbnN1cmVMZW5ndGgoZXhlYy0+dm0oKSwgb2xkTGVuZ3RoICsgY291bnQpOwor
ICAgICAgICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAKICAgICAgICAgLy8g
V2UgaGF2ZSB0byBjaGVjayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1vdmluZyB0aGluZ3Mg
YXJvdW5kIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAgIC8vIHRocm91Z2gg
c2hpZnRpbmcgYW5kIHRoZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGluIEFycmF5U3Rv
cmFnZSBtb2RlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGktLSA+IHN0
YXJ0SW5kZXg7KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGln
dW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQogICAgICAg
ICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0
SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAgICB9
CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkTGVuZ3RoOyBpLS0gPiBzdGFydEluZGV4
OykgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5nZXQoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKHYpOwotICAgICAgICAgICAgbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpICsgY291bnRdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7Cisg
ICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpICsgY291bnRdLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIodik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE5PVEU6IHdl
J3JlIGxlYXZpbmcgYmVpbmcgZ2FyYmFnZSBpbiB0aGUgcGFydCBvZiB0aGUgYXJyYXkgdGhhdCB3
ZSBzaGlmdGVkIG91dApAQCAtMTAyNiw3ICsxMDM3LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnRXaXRoQW55SW5kZXhpbgogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhE
b3VibGU6IHsKLSAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBidXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOwogICAgICAgICAKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUg
ZW50aXJlIGFycmF5IHRvIGRvIHRoZSB1bnNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvIHNvCiAg
ICAgICAgIC8vIG9ubHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xvdy4KQEAgLTEwMzQsMTkgKzEw
NDUsMjAgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbgogICAgICAg
ICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRl
eCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAgIAogICAg
ICAgICBlbnN1cmVMZW5ndGgoZXhlYy0+dm0oKSwgb2xkTGVuZ3RoICsgY291bnQpOworICAgICAg
ICBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgICAgIAogICAgICAgICAv
LyBXZSBoYXZlIHRvIGNoZWNrIGZvciBob2xlcyBiZWZvcmUgd2Ugc3RhcnQgbW92aW5nIHRoaW5n
cyBhcm91bmQgc28gdGhhdCB3ZSBkb24ndCBnZXQgaGFsZndheSAKICAgICAgICAgLy8gdGhyb3Vn
aCBzaGlmdGluZyBhbmQgdGhlbiByZWFsaXplIHdlIHNob3VsZCBoYXZlIGJlZW4gaW4gQXJyYXlT
dG9yYWdlIG1vZGUuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZExlbmd0aDsgaS0tID4g
c3RhcnRJbmRleDspIHsKLSAgICAgICAgICAgIGRvdWJsZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkodiAhPSB2KSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBz
dGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZExlbmd0aDsgaS0tID4gc3RhcnRJ
bmRleDspIHsKLSAgICAgICAgICAgIGRvdWJsZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXTsKKyAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbaV07CiAgICAgICAgICAgICBBU1NFUlQodiA9PSB2KTsKLSAgICAgICAgICAgIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaSArIGNvdW50XSA9IHY7CisgICAgICAgICAg
ICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpICsgY291bnRdID0gdjsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgLy8gTk9URTogd2UncmUgbGVhdmluZyBiZWluZyBnYXJiYWdl
IGluIHRoZSBwYXJ0IG9mIHRoZSBhcnJheSB0aGF0IHdlIHNoaWZ0ZWQgb3V0CkBAIC0xMDcyLDYg
KzEwODQsOCBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlCiAgICAg
dW5zaWduZWQgaSA9IDA7CiAgICAgdW5zaWduZWQgdmVjdG9yRW5kOwogICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogdmVjdG9yOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQodGhpcyk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAg
IGNhc2UgQXJyYXlDbGFzczoKQEAgLTEwODUsMTYgKzEwOTksMTYgQEAgdm9pZCBKU0FycmF5Ojpm
aWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aElu
dDMyOgogICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogewotICAgICAgICB2ZWN0b3JFbmQg
PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7Ci0gICAgICAgIHZlY3RvciA9IG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOworICAgICAgICB2ZWN0b3JFbmQgPSBidXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpOworICAgICAgICB2ZWN0b3IgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KS5kYXRhKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJh
eVdpdGhEb3VibGU6IHsKICAgICAgICAgdmVjdG9yID0gMDsKICAgICAgICAgdmVjdG9yRW5kID0g
MDsKLSAgICAgICAgZm9yICg7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7ICsraSkg
ewotICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgp
W2ldOworICAgICAgICBmb3IgKDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7ICsraSkg
eworICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XTsKICAgICAgICAgICAgIGlmICh2ICE9IHYpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBhcmdzLmFwcGVuZChKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2KSk7
CkBAIC0xMTAzLDcgKzExMTcsNyBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0
ZSogZXhlCiAgICAgfQogICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIHZlY3RvciA9IHN0b3Jh
Z2UtPm1fdmVjdG9yOwogICAgICAgICB2ZWN0b3JFbmQgPSBtaW4oc3RvcmFnZS0+bGVuZ3RoKCks
IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKQEAgLTExNDEsNiArMTE1NSw4IEBAIHZvaWQgSlNB
cnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSoKICAgICAvLyBGSVhNRTogV2hhdCBwcmV2
ZW50cyB0aGlzIGZyb20gYmVpbmcgY2FsbGVkIHdpdGggYSBSdW50aW1lQXJyYXk/IFRoZSBsZW5n
dGggZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIDAgaW4gdGhhdCBjYXNlLgogICAgIEFTU0VS
VChsZW5ndGggPT0gdGhpcy0+bGVuZ3RoKCkpOwogCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUo
KSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuOwpAQCAtMTE1MywxNyAr
MTE2OSwxNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAg
ICAgIAogICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6CiAgICAgY2FzZSBBcnJheVdpdGhDb250aWd1
b3VzOiB7Ci0gICAgICAgIHZlY3RvciA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgp
OwotICAgICAgICB2ZWN0b3JFbmQgPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAg
ICAgIHZlY3RvciA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKKyAgICAgICAgdmVj
dG9yRW5kID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aERvdWJsZTogewogICAgICAgICB2ZWN0b3Ig
PSAwOwogICAgICAgICB2ZWN0b3JFbmQgPSAwOwotICAgICAgICBmb3IgKDsgaSA8IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRl
cmZseSgpLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgIGZvciAoOyBpIDwgYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgICAgIGlmICh2ICE9IHYpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0g
b2Zmc2V0KSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpOwpAQCAtMTE3Miw3
ICsxMTg4LDcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKgogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOwogICAgICAgICB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAg
ICAgICAgdmVjdG9yRW5kID0gbWluKGxlbmd0aCwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwog
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsMTAgKzg4LDEwIEBAIEpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250
ZXh0OjoKICAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBhcnJheUJ1ZmZlciwKICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCiAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCi0gICAgLCBtX3ZlY3RvcihzdGF0
aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0KQogICAg
ICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICwgbV9tb2RlKFdhc3RlZnVsVHlwZWRBcnJheSkKIHsK
KyAgICBtX3ZlY3RvciA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgp
KSArIGJ5dGVPZmZzZXQ7CiAgICAgSW5kZXhpbmdIZWFkZXIgaW5kZXhpbmdIZWFkZXI7CiAgICAg
aW5kZXhpbmdIZWFkZXIuc2V0QXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIuZ2V0KCkpOwogICAgIG1f
YnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUodm0sIDAsIDAsIDAsIHRydWUsIGluZGV4aW5n
SGVhZGVyLCAwKTsKQEAgLTEwMSwxOSArMTAxLDE5IEBAIEpTQXJyYXlCdWZmZXJWaWV3OjpDb25z
dHJ1Y3Rpb25Db250ZXh0OjoKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIsCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoLCBEYXRhVmlld1RhZykKICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKLSAg
ICAsIG1fdmVjdG9yKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSAr
IGJ5dGVPZmZzZXQpCiAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX21vZGUoRGF0YVZp
ZXdNb2RlKQogICAgICwgbV9idXR0ZXJmbHkoMCkKIHsKKyAgICBtX3ZlY3RvciA9IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQ7CiB9CiAKIEpT
QXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNv
bnRleHQmIGNvbnRleHQpCiAgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpLCBjb250
ZXh0LmJ1dHRlcmZseSgpKQotICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3IoKSkKICAgICAs
IG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCiAgICAgLCBtX21vZGUoY29udGV4dC5tb2RlKCkp
CiB7CisgICAgbV92ZWN0b3Iuc2V0V2l0aG91dEJhcnJpZXIoc3RhdGljX2Nhc3Q8Y2hhcio+KGNv
bnRleHQudmVjdG9yKCkpKTsKIH0KIAogdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6
OmZpbmFsaXplKEpTQ2VsbCoKICAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0
YXRpY19jYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CiAgICAgQVNTRVJUKHRoaXNPYmpl
Y3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkgfHwgdGhpc09iamVjdC0+bV9tb2RlID09
IFdhc3RlZnVsVHlwZWRBcnJheSk7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVy
c2l6ZVR5cGVkQXJyYXkpCi0gICAgICAgIGZhc3RGcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsK
KyAgICAgICAgZmFzdEZyZWUodGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0V2l0aG91dEJhcnJpZXIo
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAxOTA2MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiBpbXBsKCk7CiAgICAgdm9pZCBuZXV0ZXIoKTsKICAgICAKLSAgICB2b2lk
KiB2ZWN0b3IoKSB7IHJldHVybiBtX3ZlY3RvcjsgfQorICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0
dXJuIG1fdmVjdG9yLmdldCh0aGlzKTsgfQogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKTsKICAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCkBAIC0xNzcs
NyArMTc3LDcgQEAgcHJpdmF0ZToKIHByb3RlY3RlZDoKICAgICBBcnJheUJ1ZmZlciogZXhpc3Rp
bmdCdWZmZXJJbkJ1dHRlcmZseSgpOwogCi0gICAgdm9pZCogbV92ZWN0b3I7CisgICAgQ29weUJh
cnJpZXI8Y2hhcj4gbV92ZWN0b3I7IC8vIHRoaXMgaXMgcmVhbGx5IGEgdm9pZCosIGJ1dCB2b2lk
IHdvdWxkIG5vdCB3b3JrIGhlcmUuCiAgICAgdWludDMyX3QgbV9sZW5ndGg7CiAgICAgVHlwZWRB
cnJheU1vZGUgbV9tb2RlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAxOTA2
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBpbmxpbmUgdm9pZCBKU0Fy
cmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKIHsKICAgICBBU1NFUlQoaGFzQXJyYXlCdWZmZXIoKSk7
CiAgICAgbV9sZW5ndGggPSAwOwotICAgIG1fdmVjdG9yID0gMDsKKyAgICBtX3ZlY3Rvci5jbGVh
cigpOwogfQogCiBpbmxpbmUgdW5zaWduZWQgSlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQo
KQpAQCAtNjgsNyArNjgsNyBAQCBpbmxpbmUgdW5zaWduZWQgSlNBcnJheUJ1ZmZlclZpZXc6OmJ5
dGVPCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIHB0cmRpZmZfdCBkZWx0YSA9Ci0gICAg
ICAgIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX3ZlY3RvcikgLSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4oYnVmZmVyKCktPmRhdGEoKSk7CisgICAgICAgIGJpdHdpc2VfY2FzdDx1aW50OF90Kj4obV92
ZWN0b3IuZ2V0KHRoaXMpKSAtIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIoKS0+ZGF0YSgp
KTsKICAgICAKICAgICB1bnNpZ25lZCByZXN1bHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVs
dGEpOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHJlc3VsdCkgPT0gZGVsdGEp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDgsMTEgKzEwOCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgdHlwZW5hbWUg
QWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7Cisg
ICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+
KG1fdmVjdG9yLmdldCh0aGlzKSk7CiAgICAgfQogICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUq
IHR5cGVkVmVjdG9yKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvci5nZXQodGhpcykpOwogICAgIH0KIAog
ICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG1lYW50IHRvIG1hdGNoIGluZGV4ZWQgYWNjZXNzIG1l
dGhvZHMgdGhhdCBKU09iamVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJl
dmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsNyArNDQxLDcg
QEAgdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dgogICAgIHN3aXRjaCAo
dGhpc09iamVjdC0+bV9tb2RlKSB7CiAgICAgY2FzZSBGYXN0VHlwZWRBcnJheTogewogICAgICAg
ICBpZiAodGhpc09iamVjdC0+bV92ZWN0b3IpCi0gICAgICAgICAgICB2aXNpdG9yLmNvcHlMYXRl
cih0aGlzT2JqZWN0LCBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuLCB0aGlzT2JqZWN0LT5tX3Zl
Y3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgICAgICB2aXNpdG9yLmNvcHlM
YXRlcih0aGlzT2JqZWN0LCBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuLCB0aGlzT2JqZWN0LT5t
X3ZlY3Rvci5nZXRXaXRob3V0QmFycmllcigpLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQ2OCwxMiArNDY4LDEyIEBAIHZvaWQg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmMKICAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNl
bGwpOwogICAgIAogICAgIGlmICh0b2tlbiA9PSBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCi0g
ICAgICAgICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV92ZWN0b3Ip
KSB7CisgICAgICAgICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV92
ZWN0b3IuZ2V0V2l0aG91dEJhcnJpZXIoKSkpIHsKICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3Qt
Pm1fdmVjdG9yKTsKLSAgICAgICAgdm9pZCogb2xkVmVjdG9yID0gdGhpc09iamVjdC0+bV92ZWN0
b3I7CisgICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldCh0
aGlzT2JqZWN0KTsKICAgICAgICAgdm9pZCogbmV3VmVjdG9yID0gdmlzaXRvci5hbGxvY2F0ZU5l
d1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwogICAgICAgICBtZW1jcHkobmV3VmVjdG9y
LCBvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwotICAgICAgICB0aGlzT2JqZWN0
LT5tX3ZlY3RvciA9IG5ld1ZlY3RvcjsKKyAgICAgICAgdGhpc09iamVjdC0+bV92ZWN0b3Iuc2V0
V2l0aG91dEJhcnJpZXIoc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld1ZlY3RvcikpOwogICAgICAgICB2
aXNpdG9yLmRpZENvcHkob2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKICAgICB9
CiAgICAgCkBAIC01MDgsOCArNTA4LDggQEAgQXJyYXlCdWZmZXIqIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYQogICAgICAgICAmJiAhdGhpc09iamVjdC0+YnV0dGVyZmx5KCkgJiYgc2l6ZSA+
PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSB7CiAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5t
X3ZlY3Rvcik7CiAgICAgICAgIC8vIFJldXNlIGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBpZiBh
dCBhbGwgcG9zc2libGUuCi0gICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxJbmRleGluZ0hlYWRlcio+
KHRoaXNPYmplY3QtPm1fdmVjdG9yKS0+YnV0dGVyZmx5KCkpOworICAgICAgICB0aGlzT2JqZWN0
LT5tX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcigKKyAgICAgICAgICAgIGJpdHdpc2VfY2Fz
dDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldCh0aGlzT2JqZWN0KSkt
PmJ1dHRlcmZseSgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBWTSYgdm0gPSAqaGVhcC0+dm0o
KTsKICAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzT2JqZWN0LCBC
dXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCkBAIC01MjEsMTQgKzUyMSwxNCBAQCBB
cnJheUJ1ZmZlciogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhCiAgICAgCiAgICAgc3dpdGNo
ICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKICAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgotICAgICAg
ICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlz
T2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldCh0aGlzT2JqZWN0KSwgdGhpc09iamVjdC0+Ynl0
ZUxlbmd0aCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgT3ZlcnNpemVU
eXBlZEFycmF5OgogICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgZG9pbmcgc29tZXRoaW5nIGxp
a2UgInN1YnRyYWN0aW5nIiBmcm9tIGV4dHJhIG1lbW9yeQogICAgICAgICAvLyBjb3N0LCBzaW5j
ZSByaWdodCBub3cgdGhpcyBjYXNlIHdpbGwgY2F1c2UgdGhlIEdDIHRvIHRoaW5rIHRoYXQgd2Ug
cmVhbGxvY2F0ZWQKICAgICAgICAgLy8gdGhlIHdob2xlIGJ1ZmZlci4KLSAgICAgICAgYnVmZmVy
ID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNP
YmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVh
dGVBZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldCh0aGlzT2JqZWN0KSwgdGhpc09iamVj
dC0+Ynl0ZUxlbmd0aCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6
CkBAIC01MzcsNyArNTM3LDcgQEAgQXJyYXlCdWZmZXIqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYQogICAgIH0KIAogICAgIHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRl
cigpLT5zZXRBcnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkpOwotICAgIHRoaXNPYmplY3QtPm1fdmVj
dG9yID0gYnVmZmVyLT5kYXRhKCk7CisgICAgdGhpc09iamVjdC0+bV92ZWN0b3Iuc2V0V2l0aG91
dEJhcnJpZXIoc3RhdGljX2Nhc3Q8Y2hhcio+KGJ1ZmZlci0+ZGF0YSgpKSk7CiAgICAgdGhpc09i
amVjdC0+bV9tb2RlID0gV2FzdGVmdWxUeXBlZEFycmF5OwogICAgIGhlYXAtPmFkZFJlZmVyZW5j
ZSh0aGlzT2JqZWN0LCBidWZmZXIuZ2V0KCkpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01hcC5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBKU01hcChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX21hcERhdGEodm0p
CisgICAgICAgICwgbV9tYXBEYXRhKHZtLCB0aGlzKQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE5MDYw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6
Y29weUJ1dHRlcmYKICAgICAgICAgICAgIG1lbWNweShjdXJyZW50VGFyZ2V0LCBjdXJyZW50U291
cmNlLCBjb3VudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG5ld0J1dHRlcmZs
eSk7CisgICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKG5ld0J1dHRlcmZseSk7
CiAgICAgICAgIHZpc2l0b3IuZGlkQ29weShidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHBy
b3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwogICAgIH0gCiB9CkBAIC0yMDYsNyAr
MjA2LDcgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIAog
ICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXRXaXRob3V0QmFycmll
cigpOwogICAgIGlmIChidXR0ZXJmbHkpCiAgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVy
Zmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKHZpc2l0b3Iudm0o
KSktPm91dE9mTGluZVNpemUoKSk7CiAKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIEpTT2JqZWN0
Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogCiAgICAgaWYgKHRva2VuICE9IEJ1dHRlcmZseUNv
cHlUb2tlbikKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXRXaXRob3V0QmFycmllcigpOwogICAgIGlmIChidXR0
ZXJmbHkpCiAgICAgICAgIHRoaXNPYmplY3QtPmNvcHlCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVy
Zmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpKTsKIH0KQEAgLTM0
MSw3ICszNDEsNyBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhp
c09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KHRoaXNPYmplY3QpLT5hcnJheVN0b3JhZ2UoKTsKICAg
ICAgICAgaWYgKGkgPj0gc3RvcmFnZS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIApAQCAtNTE0LDcgKzUxNCw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCAKICAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eS5nZXQodGhpc09iamVjdCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKICAgICAgICAgaWYg
KHByb3BlcnR5TmFtZSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNTM2LDcgKzUzNiw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCAKICAgICAgICAgCiAgICAgY2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlOgogICAgIGNhc2UgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewotICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0
dGVyZmx5LmdldCh0aGlzT2JqZWN0KS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAg
ICBpZiAocHJvcGVydHlOYW1lID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAg
ICAgYnJlYWs7CkBAIC02MTMsNyArNjEzLDcgQEAgdm9pZCBKU09iamVjdDo6ZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNbwogICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJy
YXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyh2bSkpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxy
ZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0s
IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTY0Myw3ICs2NDMsNyBAQCBCdXR0ZXJmbHkqIEpT
T2JqZWN0OjpjcmVhdGVJbml0aWFsSW5kZXhlCiAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJl
U3BhcnNlKCkpOwogICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCwg
QkFTRV9WRUNUT1JfTEVOKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKLSAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KCksIHZt
LCB0aGlzLCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZh
bHNlLCAwLAorICAgICAgICBtX2J1dHRlcmZseS5nZXQodGhpcyksIHZtLCB0aGlzLCBzdHJ1Y3R1
cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAogICAgICAg
ICBlbGVtZW50U2l6ZSAqIHZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJs
aWNMZW5ndGgobGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0
b3JMZW5ndGgpOwpAQCAtNjk1LDcgKzY5NSw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNy
ZWF0ZUFycmF5U3RvcmEKICAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IGluZGV4aW5nVHlwZSgp
OwogICAgIEFTU0VSVF9VTlVTRUQob2xkVHlwZSwgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5
cGUpKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlT3JH
cm93QXJyYXlSaWdodCgKLSAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KCksIHZtLCB0aGlzLCBzdHJ1
Y3R1cmUsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAg
IG1fYnV0dGVyZmx5LmdldCh0aGlzKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKICAgICAgICAgQXJyYXlTdG9yYWdlOjpzaXpl
Rm9yKHZlY3Rvckxlbmd0aCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG5ld0J1dHRlcmZseSk7CiAK
QEAgLTcxOSwzMSArNzE5LDMyIEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVy
dFVuZGUKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAgICAg
c2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlKHZtKSwgQWxsb2NhdGVJbnQzMikpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29u
dGlndW91c0ludDMyKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGln
dW91c0ludDMyKCk7CiB9CiAKIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5k
ZWNpZGVkVG9Eb3VibGUoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhp
bmdUeXBlKCkpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCk7IGktLTspCi0gICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KClbaV0gPSBQTmFOOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQodGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsgaS0tOykKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFO
OwogICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlRG91YmxlKSk7Ci0gICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFTU0VS
VChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0
ZUNvbnRpZ3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAg
ICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRD
b3B5aW5nRWxlbWVudHMoVk0mIHZtLCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpCiB7CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwotICAgIHVuc2lnbmVkIHB1
YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBw
dWJsaWNMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpOwogICAg
IHVuc2lnbmVkIHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlTaXplID0gc3RydWN0dXJlLT5vdXRPZkxpbmVTaXpl
KCk7CiAgICAgCkBAIC03NTIsNyArNzUzLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29u
c3RydWN0Q29udmVydAogICAgIAogICAgIG1lbWNweSgKICAgICAgICAgbmV3QnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKLSAgICAgICAgbV9idXR0ZXJmbHktPnBy
b3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAorICAgICAgICBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAogICAgICAgICBwcm9wZXJ0
eVNpemUgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICAKICAgICBBcnJheVN0b3JhZ2Uq
IG5ld1N0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwpAQCAtNzcwLDcgKzc3
MSw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5
cGUoKSkpOwogCi0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gY29uc3Ry
dWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9y
TGVuZ3RoKTsKICAgICAvLyBObyBuZWVkIHRvIGNvcHkgZWxlbWVudHMuCiAgICAgCkBAIC03ODcs
OSArNzg4LDEwIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKIENv
bnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0RvdWJsZShWTSYgdm0pCiB7
CiAgICAgQVNTRVJUKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KSB7Ci0gICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudCA9ICZtX2J1dHRlcmZseS0+Y29udGlndW91
c0ludDMyKClbaV07CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
OyBpLS07KSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudCA9ICZidXR0
ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldOwogICAgICAgICBkb3VibGUqIGN1cnJlbnRBc0Rv
dWJsZSA9IGJpdHdpc2VfY2FzdDxkb3VibGUqPihjdXJyZW50KTsKICAgICAgICAgSlNWYWx1ZSB2
ID0gY3VycmVudC0+Z2V0KCk7CiAgICAgICAgIGlmICghdikgewpAQCAtODAxLDcgKzgwMyw3IEBA
IENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzIKICAgICB9CiAgICAgCiAg
ICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgQWxsb2NhdGVEb3VibGUpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5j
b250aWd1b3VzRG91YmxlKCk7CiB9CiAKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29u
dmVydEludDMyVG9Db250aWd1b3VzKFZNJiB2bSkKQEAgLTgwOSw3ICs4MTEsNyBAQCBDb250aWd1
b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzCiAgICAgQVNTRVJUKGhhc0ludDMyKGlu
ZGV4aW5nVHlwZSgpKSk7CiAgICAgCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgQWxsb2NhdGVDb250aWd1b3Vz
KSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CisgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91cygpOwogfQogCiBBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJh
bnNpdGlvbiB0cmFuc2l0aW9uKQpAQCAtODE3LDEwICs4MTksMTEgQEAgQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29udmVydEludDMyVG9BcgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsK
ICAgICBBU1NFUlQoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpOwogICAg
IEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFn
ZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7Ci0gICAg
ICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAg
ICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAg
ICAgaWYgKHYpIHsKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIodik7CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yKys7CkBAIC04NDEsOSArODQ0LDEwIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNv
bnZlcnRJbnQzMlRvQXIKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydERvdWJs
ZVRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShpbmRleGluZ1R5
cGUoKSkpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKTsgaS0tOykgewotICAgICAgICBkb3VibGUqIGN1cnJlbnQgPSAmbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCk7IGktLTspIHsKKyAgICAgICAgZG91YmxlKiBjdXJyZW50ID0gJmJ1dHRlcmZs
eS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IGN1cnJlbnRBc1ZhbHVlID0gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KGN1
cnJlbnQpOwogICAgICAgICBkb3VibGUgdmFsdWUgPSAqY3VycmVudDsKICAgICAgICAgaWYgKHZh
bHVlICE9IHZhbHVlKSB7CkBAIC04NTUsNyArODU5LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpT
T2JqZWN0Ojpjb252ZXJ0RG91YgogICAgIH0KICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0
ZUNvbnRpZ3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAg
ICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5v
blByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQpAQCAtODYzLDEwICs4NjcsMTEgQEAgQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKICAgICBBU1NFUlQoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAg
ICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7Cisg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JM
ZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0
ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
IGkrKykgewotICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRo
aXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOyBpKyspIHsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbaV07CiAgICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkgewogICAgICAgICAgICAg
bmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKEpT
VmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSkpOwogICAgICAgICAgICAgbmV3U3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3RvcisrOwpAQCAtODg5LDEwICs4OTQsMTEgQEAgQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdQogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFw
KTsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkpOwogCi0gICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3Ro
KCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJy
YXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKysp
IHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQo
KTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsr
KSB7CisgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgp
OwogICAgICAgICBpZiAodikgewogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVt
VmFsdWVzSW5WZWN0b3IrKzsKQEAgLTk1Nyw4ICs5NjMsOCBAQCB2b2lkIEpTT2JqZWN0Ojpjb252
ZXJ0SW50MzJGb3JWYWx1ZShWTSYgCiAKIHZvaWQgSlNPYmplY3Q6OnNldEluZGV4UXVpY2tseVRv
VW5kZWNpZGVkKFZNJiB2bSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
QVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKLSAgICBBU1NFUlQo
aW5kZXggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIEFTU0VSVChpbmRleCA8
IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCkpOworICAgIEFTU0VSVChpbmRl
eCA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIGNvbnZlcnRV
bmRlY2lkZWRGb3JWYWx1ZSh2bSwgdmFsdWUpOwogICAgIHNldEluZGV4UXVpY2tseSh2bSwgaW5k
ZXgsIHZhbHVlKTsKIH0KQEAgLTExMTQsNyArMTEyMCw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmVuc3VyZUFycmF5U3RvcmEKICAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4
aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBjb252ZXJ0Q29udGlndW91
c1RvQXJyYXlTdG9yYWdlKHZtKSk7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpKTsKKyAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdo
ZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFy
cmF5U3RvcmFnZSgpKTsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsK
QEAgLTEzNTYsNyArMTM2Miw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eChKU0MKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQodGhpc09iamVjdCktPmFycmF5U3RvcmFn
ZSgpOwogICAgICAgICAKICAgICAgICAgaWYgKGkgPCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkg
ewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXTsKQEAgLTE1NDYsNyArMTU1Miw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwor
ICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS5n
ZXQob2JqZWN0KS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHVu
c2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewpAQCAtMTY5OSw3ICsxNzA1LDcgQEAgTkVWRVJf
SU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcgogdm9pZCBKU09iamVjdDo6cHV0SW5k
ZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUlu
TWFwLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3Jp
cHRvciYgb2xkRGVzY3JpcHRvcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1
dG8gbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsK
KyAgICBhdXRvIG1hcCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCktPm1f
c3BhcnNlTWFwLmdldCgpOwogCiAgICAgaWYgKGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigp
KSB7CiAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkpCkBAIC0xNzU4LDcgKzE3NjQsNyBA
QCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoCiAgICAgaWYgKGRlc2Ny
aXB0b3IuYXR0cmlidXRlcygpICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKQogICAgICAgICBub3Rp
ZnlQcmVzZW5jZU9mSW5kZXhlZEFjY2Vzc29ycyhleGVjLT52bSgpKTsKIAotICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VN
YXAuZ2V0KCk7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAgUkVMRUFTRV9B
U1NFUlQobWFwKTsKIAogICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2Fs
bGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJv
cGVydHkgbmFtZSBQLgpAQCAtMTc5MCw4ICsxNzk2LDkgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5l
T3duSW5kZXhlZFByb3BlcnR5KAogICAgICAgICBlbnRyeUluTWFwLT5nZXQoZGVmYXVsdHMpOwog
CiAgICAgICAgIHB1dEluZGV4ZWREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5SW5NYXAsIGRlc2NyaXB0
b3IsIGRlZmF1bHRzKTsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bGVuZ3RoKCkpCi0gICAgICAgICAgICBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnNldExlbmd0aChpbmRleCArIDEpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IGJ1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpKQorICAgICAgICAgICAgYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtMTkxMSwxNyArMTkxOCwxOSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuCiB7CiAgICAgQVNTRVJUKChpbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hh
cGVNYXNrKSA9PSBpbmRleGluZ1NoYXBlKTsKICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVT
cGFyc2UoKSk7CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0
aGlzKTsKICAgICAKICAgICAvLyBGb3IgdXMgdG8gZ2V0IGhlcmUsIHRoZSBpbmRleCBpcyBlaXRo
ZXIgZ3JlYXRlciB0aGFuIHRoZSBwdWJsaWMgbGVuZ3RoLCBvciBncmVhdGVyIHRoYW4KICAgICAv
LyBvciBlcXVhbCB0byB0aGUgdmVjdG9yIGxlbmd0aC4KLSAgICBBU1NFUlQoaSA+PSBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIEFTU0VSVChpID49IGJ1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpOwogICAgIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgCiAgICAgaWYg
KGkgPj0gTUFYX0FSUkFZX0lOREVYIC0gMQogICAgICAgICB8fCAoaSA+PSBNSU5fU1BBUlNFX0FS
UkFZX0lOREVYCi0gICAgICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBjb3Vu
dEVsZW1lbnRzPGluZGV4aW5nU2hhcGU+KGJ1dHRlcmZseSgpKSkpCi0gICAgICAgIHx8IGluZGV4
SXNTdWZmaWNpZW50bHlCZXlvbmRMZW5ndGhGb3JTcGFyc2VNYXAoaSwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKSkgeworICAgICAgICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3Io
aSwgY291bnRFbGVtZW50czxpbmRleGluZ1NoYXBlPihidXR0ZXJmbHkpKSkKKyAgICAgICAgfHwg
aW5kZXhJc1N1ZmZpY2llbnRseUJleW9uZExlbmd0aEZvclNwYXJzZU1hcChpLCBidXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKSkgewogICAgICAgICBBU1NFUlQoaSA8PSBNQVhfQVJSQVlfSU5ERVgp
OwogICAgICAgICBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKICAgICAgICAgU3BhcnNlQXJy
YXlWYWx1ZU1hcCogbWFwID0gYWxsb2NhdGVTcGFyc2VJbmRleE1hcCh2bSk7CkBAIC0xOTMyLDI0
ICsxOTQxLDI1IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KICAg
ICB9CiAKICAgICBlbnN1cmVMZW5ndGgodm0sIGkgKyAxKTsKKyAgICBidXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQodGhpcyk7CiAKLSAgICBSRUxFQVNFX0FTU0VSVChpIDwgbV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7CiAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7CiAgICAgY2FzZSBJbnQz
MlNoYXBlOgogICAgICAgICBBU1NFUlQodmFsdWUuaXNJbnQzMigpKTsKLSAgICAgICAgbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUp
OworICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0
ZUJhcnJpZXIodmFsdWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBEb3Vi
bGVTaGFwZTogewogICAgICAgICBBU1NFUlQodmFsdWUuaXNOdW1iZXIoKSk7CiAgICAgICAgIGRv
dWJsZSB2YWx1ZUFzRG91YmxlID0gdmFsdWUuYXNOdW1iZXIoKTsKICAgICAgICAgQVNTRVJUKHZh
bHVlQXNEb3VibGUgPT0gdmFsdWVBc0RvdWJsZSk7Ci0gICAgICAgIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZUFzRG91YmxlOworICAgICAgICBidXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZhbHVlQXNEb3VibGU7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6Ci0gICAgICAgIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIGJ1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgICAgICBicmVh
azsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTIyMjMsNyArMjIzMyw3IEBAIGJvb2wgSlNP
YmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8KICAgICAgICAgCiAgICAgY2FzZSBBTExf
SU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAg
ICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAg
aWYgKGkgPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFn
ZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShl
eGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydEludDMyVG9BcnJheVN0b3Jh
Z2Uodm0pKTsKICAgICAgICAgfQpAQCAtMjIzNyw3ICsyMjQ3LDcgQEAgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICAKICAgICBjYXNlIEFMTF9ET1VCTEVf
SU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAg
IGlmIChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgaWYgKGkg
PCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0
c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKHZt
KSk7CiAgICAgICAgIH0KQEAgLTIyNTYsNyArMjI2Niw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG8KICAgICAgICAgCiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAg
aWYgKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8
IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShl
eGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3Rz
QW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgICAgICByZXR1cm4g
cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGks
IHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdl
KHZtKSk7CiAgICAgICAgIH0KQEAgLTIyNjYsNyArMjI3Niw3IEBAIGJvb2wgSlNPYmplY3Q6OnB1
dERpcmVjdEluZGV4QmV5b25kVmVjdG8KIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICBpZiAo
aSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChpIDwgbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRF
bnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMs
IGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBhcnJheVN0b3JhZ2UoKSk7CkBAIC0yMzQ3LDgg
KzIzNTcsOCBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpTT2JqZWN0OjpnZXROZXdWCiAgICAg
dW5zaWduZWQgbGVuZ3RoOwogICAgIAogICAgIGlmIChoYXNJbmRleGVkUHJvcGVydGllcyhpbmRl
eGluZ1R5cGUoKSkpIHsKLSAgICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpOwotICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
CisgICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVu
Z3RoKCk7CisgICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVibGljTGVu
Z3RoKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmVjdG9yTGVuZ3RoID0gMDsKICAgICAgICAg
bGVuZ3RoID0gMDsKQEAgLTI0NTQsMjUgKzI0NjQsMjggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVh
c2VWZWN0b3JMZW5ndGgoVk0mIAogCiB2b2lkIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZN
JiB2bSwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIAogICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlf
SU5ERVgpOwogICAgIEFTU0VSVChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJ
bnQzMihpbmRleGluZ1R5cGUoKSkgfHwgaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNV
bmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKLSAgICBBU1NFUlQobGVuZ3RoID4gbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBBU1NFUlQobGVuZ3RoID4gYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7CiAgICAgCiAgICAgdW5zaWduZWQgbmV3VmVjdG9yTGVuZ3RoID0gc3RkOjpt
aW4oCiAgICAgICAgIGxlbmd0aCA8PCAxLAogICAgICAgICBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIKTsKLSAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCk7CisgICAgdW5zaWduZWQgb2xkVmVjdG9yTGVuZ3RoID0gYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbV9idXR0ZXJm
bHkuc2V0KHZtLCB0aGlzLCBtX2J1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCisgICAgYnV0dGVy
Zmx5ID0gYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKICAgICAgICAgdm0sIHRoaXMsIHN0cnVj
dHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwKICAgICAgICAg
b2xkVmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSwKLSAgICAgICAgbmV3VmVj
dG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICBuZXdWZWN0b3JM
ZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKKyAgICBtX2J1dHRlcmZseS5zZXQodm0s
IHRoaXMsIGJ1dHRlcmZseSk7CiAKLSAgICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5l
d1ZlY3Rvckxlbmd0aCk7CisgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9y
TGVuZ3RoKTsKIAogICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsg
KytpKQotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKClb
aV0gPSBQTmFOOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0
YSgpW2ldID0gUE5hTjsKICAgICB9CiB9CiAKQEAgLTI0ODUsMTAgKzI0OTgsMTAgQEAgdm9pZCBK
U09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRlcgogICAgIEFTU0VSVCghbV9idXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSgpKSk7CiAKICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS0+cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0
b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQodGhpcyktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwg
MCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpOwogICAgIG1fYnV0dGVyZmx5LnNldCh2
bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKLSAgICBtX2J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3Ro
KGxlbmd0aCk7Ci0gICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAg
IG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5
LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKIH0KIAogQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jv
d091dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUp
CkBAIC0yNDk4LDcgKzI1MTEsNyBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5l
U3RvcmFnCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5
IG9uIHN0cnVjdHVyZSgpLCBmb3IgdGhlIHByb3BlcnR5CiAgICAgLy8gY2FwYWNpdHksIHNpbmNl
IHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBtdXRhdGVkIHRoZSBzdHJ1Y3R1cmUgaW4tcGxhY2UuCiAg
ICAgCi0gICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93UHJvcGVydHlTdG9yYWdlKG1f
YnV0dGVyZmx5LmdldCgpLCB2bSwgdGhpcywgc3RydWN0dXJlKHZtKSwgb2xkU2l6ZSwgbmV3U2l6
ZSk7CisgICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93UHJvcGVydHlTdG9yYWdlKG1f
YnV0dGVyZmx5LmdldCh0aGlzKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNpemUsIG5l
d1NpemUpOwogfQogCiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCkBAIC0yNzg1LDcgKzI3OTgsNyBAQCB1aW50MzJfdCBKU09iamVjdDo6
Z2V0RW51bWVyYWJsZUxlbmd0aChFCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LmdldChvYmplY3QpLT5hcnJheVN0
b3JhZ2UoKTsKICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKQogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAj
aW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAi
Q29tbW9uSWRlbnRpZmllcnMuaCIKLSNpbmNsdWRlICJDb3B5V3JpdGVCYXJyaWVyLmgiCisjaW5j
bHVkZSAiQ29weUJhcnJpZXIuaCIKICNpbmNsdWRlICJDdXN0b21HZXR0ZXJTZXR0ZXIuaCIKICNp
bmNsdWRlICJEZWZlckdDLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpAQCAtMTMxLDE0ICsxMzEsMTQg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFoYXNJbmRleGVkUHJvcGVydGllcyhpbmRl
eGluZ1R5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+cHVibGljTGVuZ3RoKCk7CiAgICAgfQogICAgICAgICAKICAgICB1bnNpZ25lZCBnZXRW
ZWN0b3JMZW5ndGgoKQogICAgIHsKICAgICAgICAgaWYgKCFoYXNJbmRleGVkUHJvcGVydGllcyhp
bmRleGluZ1R5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgfQogICAgICAgICAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKQEAgLTE4MSwyMyArMTgxLDI0IEBAIHB1Ymxp
YzoKICAgICAKICAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsK
KyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAg
ICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQkxBTktf
SU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBF
UzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
Ci0gICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSAmJiBt
X2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldOworICAgICAgICAgICAgcmV0dXJuIGkgPCBidXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpICYmIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldOwogICAg
ICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIGlmIChp
ID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChpID49IGJ1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KVtpXTsKKyAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldOwogICAgICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkg
JiYgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAg
IHJldHVybiBpIDwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkgJiYg
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMjA2LDE1ICsyMDcsMTYgQEAgcHVibGljOgogICAgICAgICAKICAg
ICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKKyAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIobV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5nZXQoKS5hc0ludDMyKCkpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGJ1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLmdldCgpLmFzSW50MzIoKSk7CiAgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBidXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5H
X1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3Vi
bGUsIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0pOworICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIGJ1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldKTsKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIGJ1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yW2ldLmdldCgpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CkBAIC0yMjMsMzIgKzIyNSwzMyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIEpTVmFsdWUg
dHJ5R2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgeworICAgICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNo
IChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpIHsKLSAgICAgICAgICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
CisgICAgICAgICAgICBpZiAoaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpIHsKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdl
dCgpOwogICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQuaXNJbnQzMigpIHx8ICFyZXN1bHQp
OwogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAg
ICAgICAgICAgaWYgKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAg
ICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAg
IGlmIChpID49IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXTsKKyAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSBidXR0ZXJmbHktPmNvbnRp
Z3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0KQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6
RW5jb2RlQXNEb3VibGUsIHJlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmIChpIDwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVj
dG9yW2ldLmdldCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjc2LDYgKzI3OSw3IEBA
IHB1YmxpYzoKICAgICAgICAgCiAgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQg
aSkKICAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2Ug
QUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5E
RVhJTkdfVFlQRVM6CkBAIC0yODUsMTEgKzI4OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKLSAgICAg
ICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICAg
ICAgcmV0dXJuIGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgICAgICBjYXNlIE5v
bkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKQotICAgICAgICAgICAgICAgICYmICEhbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKKyAgICAgICAgICAgIHJldHVybiBp
IDwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkKKyAgICAgICAgICAg
ICAgICAmJiAhIWJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMwNiw3ICszMTAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpOworICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS5nZXQodGhpcykt
PnZlY3Rvckxlbmd0aCgpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNSw5
ICszMTksMTAgQEAgcHVibGljOgogICAgICAgICAKICAgICB2b2lkIHNldEluZGV4UXVpY2tseShW
TSYgdm0sIHVuc2lnbmVkIGksIEpTVmFsdWUgdikKICAgICB7CisgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgICAgICBzd2l0Y2ggKGluZGV4
aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7Ci0g
ICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
ICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICAg
ICAgaWYgKCF2LmlzSW50MzIoKSkgewogICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlT3JDb250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgodm0sIGksIHYpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTMyNSwxNCArMzMwLDE0IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIEZBTExUSFJPVUdIOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0u
c2V0KHZtLCB0aGlzLCB2KTsKLSAgICAgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3Ro
KGkgKyAxKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQodm0sIHRoaXMs
IHYpOworICAgICAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAg
ICAgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdf
VFlQRVM6IHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7
CiAgICAgICAgICAgICBpZiAoIXYuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgICAgIGNvbnZl
cnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwgdik7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzQyLDEzICszNDcsMTMgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJ
bmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZhbHVlOwot
ICAgICAgICAgICAgaWYgKGkgPj0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQotICAgICAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOworICAgICAgICAg
ICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZTsKKyAgICAgICAgICAg
IGlmIChpID49IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgYnV0
dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewot
ICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgeCA9IHN0
b3JhZ2UtPm1fdmVjdG9yW2ldOwogICAgICAgICAgICAgSlNWYWx1ZSBvbGQgPSB4LmdldCgpOwog
ICAgICAgICAgICAgeC5zZXQodm0sIHRoaXMsIHYpOwpAQCAtMzcxLDE0ICszNzYsMTUgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBpbml0aWFsaXplSW5kZXgoVk0mIHZtLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHYsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgeworICAgICAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNoIChp
bmRleGluZ1R5cGUpIHsKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVT
OiB7CiAgICAgICAgICAgICBzZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZCh2bSwgaSwgdik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRF
WElOR19UWVBFUzogewotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
KTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAg
ICAgICAgICAgICBpZiAoIXYuaXNJbnQzMigpKSB7CiAgICAgICAgICAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGVPckNvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwgdik7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zODYsMTQgKzM5MiwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLnNldCh2bSwgdGhpcywgdik7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldCh2
bSwgdGhpcywgdik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpOwogICAgICAgICAgICAgaWYgKCF2LmlzTnVtYmVyKCkpIHsKICAgICAgICAg
ICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgo
dm0sIGksIHYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTQwMywxMSArNDA5LDExIEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQ
ZXJmb3JtaW5nU2V0SW5kZXgodm0sIGksIHYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClb
aV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ld
ID0gdmFsdWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAg
ICAgICAgQVNTRVJUKGkgPCBzdG9yYWdlLT5sZW5ndGgoKSk7CiAgICAgICAgICAgICBBU1NFUlQo
aSA8IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IpOwogICAgICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0KHZtLCB0aGlzLCB2KTsKQEAgLTQyOCw3ICs0MzQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gISFtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fc3BhcnNlTWFwOworICAgICAgICAgICAgcmV0dXJuICEhbV9idXR0ZXJmbHkuZ2V0KHRoaXMp
LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNDQ1LDcgKzQ1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNlTW9kZSgpOworICAgICAgICAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCktPmluU3BhcnNl
TW9kZSgpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU1MCwxMSArNTU2LDEx
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGlubGluZVN0b3JhZ2VVbnNhZmUoKTsKICAgICB9
CiAgICAgICAgIAotICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1
cm4gbV9idXR0ZXJmbHkuZ2V0KCk7IH0KLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCgpOyB9CisgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHko
KSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyk7IH0KKyAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKTsgfQogICAgICAgICAK
LSAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9Ci0gICAgUHJvcGVydHlTdG9yYWdl
IG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdl
KCk7IH0KKyAgICBDb25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAg
IFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHku
Z2V0KHRoaXMpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogCiAgICAgY29uc3QgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogbG9jYXRpb25Gb3JPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBj
b25zdAogICAgIHsKQEAgLTY1Niw3ICs2NjIsNyBAQCBwdWJsaWM6CiAgICAgQ29udGlndW91c0pT
VmFsdWVzIGVuc3VyZUludDMyKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFz
SW50MzIoaW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+
Y29udGlndW91c0ludDMyKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRo
aXMpLT5jb250aWd1b3VzSW50MzIoKTsKICAgICAgICAgICAgIAogICAgICAgICByZXR1cm4gZW5z
dXJlSW50MzJTbG93KHZtKTsKICAgICB9CkBAIC02NjgsNyArNjc0LDcgQEAgcHVibGljOgogICAg
IENvbnRpZ3VvdXNEb3VibGVzIGVuc3VyZURvdWJsZShWTSYgdm0pCiAgICAgewogICAgICAgICBp
ZiAoTElLRUxZKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzRG91YmxlKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgcmV0dXJuIGVuc3VyZURvdWJsZVNsb3codm0pOwogICAgIH0KQEAgLTY3OCw3ICs2ODQs
NyBAQCBwdWJsaWM6CiAgICAgQ29udGlndW91c0pTVmFsdWVzIGVuc3VyZUNvbnRpZ3VvdXMoVk0m
IHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNDb250aWd1b3VzKGluZGV4aW5nVHlw
ZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXMoKTsKICAg
ICAgICAgICAgIAogICAgICAgICByZXR1cm4gZW5zdXJlQ29udGlndW91c1Nsb3codm0pOwogICAg
IH0KQEAgLTY5MCw3ICs2OTYsNyBAQCBwdWJsaWM6CiAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVB
cnJheVN0b3JhZ2UoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNBbnlBcnJh
eVN0b3JhZ2UoaW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRo
aXMpLT5hcnJheVN0b3JhZ2UoKTsKIAogICAgICAgICByZXR1cm4gZW5zdXJlQXJyYXlTdG9yYWdl
U2xvdyh2bSk7CiAgICAgfQpAQCAtNzM2LDcgKzc0Miw3IEBAIHByb3RlY3RlZDoKICAgICBBcnJh
eVN0b3JhZ2UqIGFycmF5U3RvcmFnZSgpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzQW55QXJy
YXlTdG9yYWdlKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFy
cmF5U3RvcmFnZSgpOwogICAgIH0KICAgICAgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3
YW50IHRvIHByZWRpY2F0ZSBzb21lIGFjdGlvbnMgb24gd2hldGhlciBvciBub3QgdGhlCkBAIC03
NDUsNyArNzUxLDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAgc3dpdGNoIChpbmRleGlu
Z1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIDA7CkBA
IC04MDksMTIgKzgxNSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgICAgICBBU1NFUlQobGVu
Z3RoIDwgTUFYX0FSUkFZX0lOREVYKTsKICAgICAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5k
ZXhpbmdUeXBlKCkpIHx8IGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNEb3VibGUoaW5k
ZXhpbmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwotICAgICAgICAg
ICAgCi0gICAgICAgIGlmIChtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5ndGgpCisK
KyAgICAgICAgaWYgKG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkgPCBsZW5n
dGgpCiAgICAgICAgICAgICBlbnN1cmVMZW5ndGhTbG93KHZtLCBsZW5ndGgpOwogICAgICAgICAg
ICAgCi0gICAgICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCi0g
ICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgICAg
IGlmIChtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpIDwgbGVuZ3RoKQorICAg
ICAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsK
ICAgICB9CiAgICAgICAgIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2FudCB0byBzaHJpbmsg
dGhlIGJ1dHRlcmZseSBiYWNraW5nIHN0b3JlLCBhbmQgeW91J3JlCkBAIC04NzQsNyArODgwLDcg
QEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBBcnJheVN0b3JhZ2UqIGVuc3VyZUFy
cmF5U3RvcmFnZVNsb3coVk0mKTsKIAogcHJvdGVjdGVkOgotICAgIENvcHlXcml0ZUJhcnJpZXI8
QnV0dGVyZmx5PiBtX2J1dHRlcmZseTsKKyAgICBDb3B5QmFycmllcjxCdXR0ZXJmbHk+IG1fYnV0
dGVyZmx5OwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBwcml2YXRlOgogICAgIHVpbnQzMl90IG1f
cGFkZGluZzsKQEAgLTEzNDgsNyArMTM1NCw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXRE
aXJlY3RXaXRob3V0VHIKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJU
KCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAg
ICAgQVNTRVJUKCF2YWx1ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKTsKLSAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0
V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCiAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dP
dXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3Ry
dWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldC5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEy
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1NldChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX3NldERh
dGEodm0pCisgICAgICAgICwgbV9zZXREYXRhKHZtLCB0aGlzKQogICAgIHsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgJKHJldmlzaW9uIDE5MDYw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBNYXBEYXRhX2gKICNkZWZpbmUgTWFwRGF0YV9o
CiAKKyNpbmNsdWRlICJDb3B5QmFycmllci5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1
ZGUgIldlYWtHQ01hcElubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgpA
QCAtOTQsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgfTsK
IAotICAgIE1hcERhdGFJbXBsKFZNJik7CisgICAgTWFwRGF0YUltcGwoVk0mLCBKU0NlbGwqIG93
bmVyKTsKIAogICAgIHZvaWQgc2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCogb3duZXIsIEtleVR5cGUs
IEpTVmFsdWUpOwogICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEtleVR5cGUpOwpAQCAtMTM2
LDE2ICsxMzcsMTcgQEAgcHJpdmF0ZToKICAgICBpbnQzMl90IG1fY2FwYWNpdHk7CiAgICAgaW50
MzJfdCBtX3NpemU7CiAgICAgaW50MzJfdCBtX2RlbGV0ZWRDb3VudDsKLSAgICBFbnRyeSogbV9l
bnRyaWVzOworICAgIEpTQ2VsbCogbV9vd25lcjsKKyAgICBDb3B5QmFycmllcjxFbnRyeT4gbV9l
bnRyaWVzOwogICAgIFdlYWtHQ01hcDxKU0l0ZXJhdG9yKiwgSlNJdGVyYXRvcj4gbV9pdGVyYXRv
cnM7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4K
LUFMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpNYXBEYXRhSW1w
bChWTSYgdm0pCitBTFdBWVNfSU5MSU5FIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6
TWFwRGF0YUltcGwoVk0mIHZtLCBKU0NlbGwqIG93bmVyKQogICAgIDogbV9jYXBhY2l0eSgwKQog
ICAgICwgbV9zaXplKDApCiAgICAgLCBtX2RlbGV0ZWRDb3VudCgwKQotICAgICwgbV9lbnRyaWVz
KG51bGxwdHIpCisgICAgLCBtX293bmVyKG93bmVyKQogICAgICwgbV9pdGVyYXRvcnModm0pCiB7
CiB9CkBAIC0xODIsNyArMTg0LDcgQEAgQUxXQVlTX0lOTElORSBib29sIE1hcERhdGFJbXBsPEVu
dHJ5LCBKUwogewogICAgIGlmICghZW5zdXJlU2xvdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgRW50cnkqIGVudHJ5ID0gJm1fbWFwRGF0YS0+bV9lbnRyaWVzW21faW5kZXhdOworICAg
IEVudHJ5KiBlbnRyeSA9ICZtX21hcERhdGEtPm1fZW50cmllcy5nZXQobV9tYXBEYXRhLT5tX293
bmVyKVttX2luZGV4XTsKICAgICBwYWlyID0gV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNW
YWx1ZT4oZW50cnktPmtleSgpLmdldCgpLCBlbnRyeS0+dmFsdWUoKS5nZXQoKSk7CiAgICAgbV9p
bmRleCArPSAxOwogICAgIHJldHVybiB0cnVlOwpAQCAtMjA0LDcgKzIwNiw3IEBAIEFMV0FZU19J
TkxJTkUgaW50MzJfdCBNYXBEYXRhSW1wbDxFbnRyeSwKICAgICBpZiAoaXNGaW5pc2hlZCgpKQog
ICAgICAgICByZXR1cm4gbV9pbmRleDsKIAotICAgIEVudHJ5KiBlbnRyaWVzID0gbV9tYXBEYXRh
LT5tX2VudHJpZXM7CisgICAgRW50cnkqIGVudHJpZXMgPSBtX21hcERhdGEtPm1fZW50cmllcy5n
ZXQobV9tYXBEYXRhLT5tX293bmVyKTsKICAgICBzaXplX3QgZW5kID0gbV9tYXBEYXRhLT5tX3Np
emU7CiAgICAgd2hpbGUgKHN0YXRpY19jYXN0PHNpemVfdD4obV9pbmRleCkgPCBlbmQgJiYgIWVu
dHJpZXNbbV9pbmRleF0ua2V5KCkpCiAgICAgICAgIG1faW5kZXgrKzsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGFJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaAkocmV2aXNpb24gMTkw
NjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxF
bnRyeSwgSlNJdGVyYXRvCiAgICAgbV9jYXBhY2l0eSA9IDA7CiAgICAgbV9zaXplID0gMDsKICAg
ICBtX2RlbGV0ZWRDb3VudCA9IDA7Ci0gICAgbV9lbnRyaWVzID0gbnVsbHB0cjsKKyAgICBtX2Vu
dHJpZXMuY2xlYXIoKTsKICAgICBtX2l0ZXJhdG9ycy5mb3JFYWNoKFtdKEpTSXRlcmF0b3IqIGl0
ZXJhdG9yLCBKU0l0ZXJhdG9yKikgewogICAgICAgICBpdGVyYXRvci0+aXRlcmF0b3JEYXRhKCkt
PmRpZFJlbW92ZUFsbEVudHJpZXMoKTsKICAgICB9KTsKQEAgLTYwLDI1ICs2MCwyNSBAQCBpbmxp
bmUgRW50cnkqIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhCiAgICAgICAgIGF1dG8gaXRlciA9
IG1fc3RyaW5nS2V5ZWRUYWJsZS5maW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4ZWMp
LmltcGwoKSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKSkK
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gJm1fZW50cmllc1tpdGVyLT52
YWx1ZV07CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzLmdldChtX293bmVyKVtpdGVyLT52YWx1
ZV07CiAgICAgfQogICAgIGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkgewogICAgICAgICBhdXRv
IGl0ZXIgPSBtX3N5bWJvbEtleWVkVGFibGUuZmluZChhc1N5bWJvbChrZXkudmFsdWUpLT5wcml2
YXRlTmFtZSgpLnVpZCgpKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9zeW1ib2xLZXllZFRhYmxl
LmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVz
W2l0ZXItPnZhbHVlXTsKKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2l0
ZXItPnZhbHVlXTsKICAgICB9CiAgICAgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkgewogICAgICAg
ICBhdXRvIGl0ZXIgPSBtX2NlbGxLZXllZFRhYmxlLmZpbmQoa2V5LnZhbHVlLmFzQ2VsbCgpKTsK
ICAgICAgICAgaWYgKGl0ZXIgPT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKSkKICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICByZXR1cm4gJm1fZW50cmllc1tpdGVyLT52YWx1ZV07CisgICAg
ICAgIHJldHVybiAmbV9lbnRyaWVzLmdldChtX293bmVyKVtpdGVyLT52YWx1ZV07CiAgICAgfQog
CiAgICAgYXV0byBpdGVyID0gbV92YWx1ZUtleWVkVGFibGUuZmluZChKU1ZhbHVlOjplbmNvZGUo
a2V5LnZhbHVlKSk7CiAgICAgaWYgKGl0ZXIgPT0gbV92YWx1ZUtleWVkVGFibGUuZW5kKCkpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKKyAg
ICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRlci0+dmFsdWVdOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KQEAgLTkzLDE0ICs5Mywx
NCBAQCBpbmxpbmUgRW50cnkqIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhCiB7CiAgICAgdHlw
ZW5hbWUgTWFwOjppdGVyYXRvciBsb2NhdGlvbiA9IG1hcC5maW5kKGtleSk7CiAgICAgaWYgKGxv
Y2F0aW9uICE9IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbbG9jYXRpb24t
PnZhbHVlXTsKKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2xvY2F0aW9u
LT52YWx1ZV07CiAKICAgICBpZiAoIWVuc3VyZVNwYWNlRm9yQXBwZW5kKGV4ZWMsIG93bmVyKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQoa2V5LCBtX3Np
emUpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBFbnRyeSog
ZW50cnkgPSAmbV9lbnRyaWVzW21fc2l6ZSsrXTsKKyAgICBFbnRyeSogZW50cnkgPSAmbV9lbnRy
aWVzLmdldChtX293bmVyKVttX3NpemUrK107CiAgICAgbmV3IChlbnRyeSkgRW50cnkoKTsKICAg
ICBlbnRyeS0+c2V0S2V5KGV4ZWMtPnZtKCksIG93bmVyLCBrZXlWYWx1ZS52YWx1ZSk7CiAgICAg
cmV0dXJuIGVudHJ5OwpAQCAtMTY0LDcgKzE2NCw3IEBAIGlubGluZSBib29sIE1hcERhdGFJbXBs
PEVudHJ5LCBKU0l0ZXJhdG8KICAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKICAgICAg
ICAgbV92YWx1ZUtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwogICAgIH0KLSAgICBtX2VudHJpZXNb
bG9jYXRpb25dLmNsZWFyKCk7CisgICAgbV9lbnRyaWVzLmdldChtX293bmVyKVtsb2NhdGlvbl0u
Y2xlYXIoKTsKICAgICBtX2RlbGV0ZWRDb3VudCsrOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MTc2LDcgKzE3Niw3IEBAIGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG8K
ICAgICBpbnQzMl90IG5ld0VuZCA9IDA7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3Q2FwYWNpdHkg
PiAwKTsKICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgewotICAgICAg
ICBFbnRyeSYgZW50cnkgPSBtX2VudHJpZXNbaV07CisgICAgICAgIEVudHJ5JiBlbnRyeSA9IG1f
ZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpW2ldOwogICAgICAgICBpZiAoIWVudHJ5LmtleSgp
KSB7CiAgICAgICAgICAgICBtX2l0ZXJhdG9ycy5mb3JFYWNoKFtuZXdFbmRdKEpTSXRlcmF0b3Iq
IGl0ZXJhdG9yLCBKU0l0ZXJhdG9yKikgewogICAgICAgICAgICAgICAgIGl0ZXJhdG9yLT5pdGVy
YXRvckRhdGEoKS0+ZGlkUmVtb3ZlRW50cnkobmV3RW5kKTsKQEAgLTE5NSwyMCArMTk1LDIwIEBA
IGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG8KIAogICAgIC8vIEZpeHVw
IGZvciB0aGUgaGFzaG1hcHMKICAgICBmb3IgKGF1dG8gcHRyID0gbV92YWx1ZUtleWVkVGFibGUu
YmVnaW4oKTsgcHRyICE9IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAg
cHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7
CisgICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKVtwdHIt
PnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CiAgICAgZm9yIChhdXRvIHB0ciA9IG1fY2Vs
bEtleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fY2VsbEtleWVkVGFibGUuZW5kKCk7ICsrcHRy
KQotICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLmtleSgpLmdldCgp
LmFzSW50MzIoKTsKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5nZXRXaXRob3V0QmFy
cmllcigpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKICAgICBmb3IgKGF1dG8g
cHRyID0gbV9zdHJpbmdLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3N0cmluZ0tleWVkVGFi
bGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFs
dWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmll
cy5nZXRXaXRob3V0QmFycmllcigpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsK
ICAgICBmb3IgKGF1dG8gcHRyID0gbV9zeW1ib2xLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBt
X3N5bWJvbEtleWVkVGFibGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHItPnZhbHVlID0gbV9l
bnRyaWVzW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICAgICAgcHRyLT52
YWx1ZSA9IG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpW3B0ci0+dmFsdWVdLmtleSgpLmdl
dCgpLmFzSW50MzIoKTsKIAogICAgIEFTU0VSVCgobV9zaXplIC0gbmV3RW5kKSA9PSBtX2RlbGV0
ZWRDb3VudCk7CiAgICAgbV9kZWxldGVkQ291bnQgPSAwOwogCiAgICAgbV9jYXBhY2l0eSA9IG5l
d0NhcGFjaXR5OwogICAgIG1fc2l6ZSA9IG5ld0VuZDsKLSAgICBtX2VudHJpZXMgPSBkZXN0aW5h
dGlvbjsKKyAgICBtX2VudHJpZXMuc2V0V2l0aG91dEJhcnJpZXIoZGVzdGluYXRpb24pOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KQEAgLTIxNyw5
ICsyMTcsOSBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvCiAgICAg
QVNTRVJUKCFzaG91bGRQYWNrKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG5ld0NhcGFjaXR5ID4g
MCk7CiAgICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fY2FwYWNpdHkpOwotICAgIG1lbWNweShk
ZXN0aW5hdGlvbiwgbV9lbnRyaWVzLCBzaXplb2YoRW50cnkpICogbV9zaXplKTsKKyAgICBtZW1j
cHkoZGVzdGluYXRpb24sIG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpLCBzaXplb2YoRW50
cnkpICogbV9zaXplKTsKICAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7Ci0gICAgbV9lbnRy
aWVzID0gZGVzdGluYXRpb247CisgICAgbV9lbnRyaWVzLnNldFdpdGhvdXRCYXJyaWVyKGRlc3Rp
bmF0aW9uKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0
b3I+CkBAIC0yMzYsNiArMjM2LDggQEAgaW5saW5lIENoZWNrZWRCb29sZWFuIE1hcERhdGFJbXBs
PEVudHJ5LAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIEVudHJ5KiBuZXdFbnRy
aWVzID0gc3RhdGljX2Nhc3Q8RW50cnkqPihuZXdTdG9yYWdlKTsKKyAgICAvLyBEbyBhIHJlYWQg
YmFycmllciB0byBlbnN1cmUgdGhhdCBtX2VudHJpZXMgcG9pbnRzIHRvIHRvLXNwYWNlIGZvciB0
aGUgcmVtYWluZGVyIG9mIHRoaXMgR0MgZXBvY2guCisgICAgbV9lbnRyaWVzLmdldChtX293bmVy
KTsgCiAgICAgaWYgKHNob3VsZFBhY2soKSkKICAgICAgICAgcmVwbGFjZUFuZFBhY2tCYWNraW5n
U3RvcmUobmV3RW50cmllcywgcmVxdWlyZWRTaXplKTsKICAgICBlbHNlCkBAIC0yNDcsNyArMjQ5
LDcgQEAgaW5saW5lIENoZWNrZWRCb29sZWFuIE1hcERhdGFJbXBsPEVudHJ5LAogdGVtcGxhdGU8
dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+CiBpbmxpbmUgdm9pZCBNYXBEYXRh
SW1wbDxFbnRyeSwgSlNJdGVyYXRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBvd25lciwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgRW50cnkqIGVudHJpZXMgPSBtX2VudHJpZXM7Cisg
ICAgRW50cnkqIGVudHJpZXMgPSBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKTsKICAgICBp
ZiAoIWVudHJpZXMpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobV9kZWxldGVkQ291bnQpIHsK
QEAgLTI2MSwxNCArMjYzLDE0IEBAIGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0
ZXJhdG8KICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMocmVpbnRlcnByZXRfY2FzdDxXcml0
ZUJhcnJpZXI8VW5rbm93bj4qPigmZW50cmllc1swXSksIG1fc2l6ZSAqIChzaXplb2YoRW50cnkp
IC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKICAgICB9CiAKLSAgICB2aXNpdG9y
LmNvcHlMYXRlcihvd25lciwgTWFwQmFja2luZ1N0b3JlQ29weVRva2VuLCBlbnRyaWVzLCBjYXBh
Y2l0eUluQnl0ZXMoKSk7CisgICAgdmlzaXRvci5jb3B5TGF0ZXIob3duZXIsIE1hcEJhY2tpbmdT
dG9yZUNvcHlUb2tlbiwgbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKCksIGNhcGFjaXR5SW5C
eXRlcygpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0
b3I+CiBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvcj46OmNvcHlCYWNr
aW5nU3RvcmUoQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKIHsKLSAgICBp
ZiAodG9rZW4gPT0gTWFwQmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNo
b3VsZENvcHkobV9lbnRyaWVzKSkgewotICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IG1fZW50
cmllczsKKyAgICBpZiAodG9rZW4gPT0gTWFwQmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZpc2l0
b3IuY2hlY2tJZlNob3VsZENvcHkobV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKCkpKSB7Cisg
ICAgICAgIEVudHJ5KiBvbGRFbnRyaWVzID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKCk7
CiAgICAgICAgIEVudHJ5KiBuZXdFbnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50cnkqPih2aXNpdG9y
LmFsbG9jYXRlTmV3U3BhY2UoY2FwYWNpdHlJbkJ5dGVzKCkpKTsKICAgICAgICAgaWYgKHNob3Vs
ZFBhY2soKSkKICAgICAgICAgICAgIHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJp
ZXMsIG1fY2FwYWNpdHkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262575</attachid>
            <date>2015-10-06 21:15:58 -0700</date>
            <delta_ts>2015-10-07 12:05:55 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>122485</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA2MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDA4LDYgKzQwOCw3IEBACiAJCTBGNzkwODU2MTlBMjkw
QjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3OTA4NTQxOUEyOTBCMjAwRjYz
MTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmggKi87IH07CiAJCTBGN0IyOTRC
MTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuaCAqLzsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERG
R0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENE
QiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3QzExQUMxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MDIzRUExNjEz
ODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODMz
NUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMw
MDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY4MzM1Qjgx
NjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzMSw3ICs5MzIsNiBAQAogCQkyQTRCQjdGMzE4QTQx
MTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKIAkJMkE0RUM5MEIxODYwRDZDMjAwOTRG
NzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRFQzkwOTE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJy
aWVyQnVmZmVyLmNwcCAqLzsgfTsKIAkJMkE0RUM5MEMxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRl
QmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTJBNjgyOTVC
MTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTY4Mjk1QTE4NzVGODA1MDBCNkMzRTIgLyog
Q29weVdyaXRlQmFycmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTJBNkY0NjI2MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTZGNDYyNTE3
RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBE
ZWZlckdDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLzsgfTsKIAkJMkE4MzYz
ODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE4MzYzODMxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovOyB9OwpAQCAtMjI1Niw2ICsy
MjU2LDcgQEAKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc5MDg1MzE5QTI5MEIyMDBGNjMx
MEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3OTA4NTQxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVy
ZVJlZ2lzdHJhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlUmVn
aXN0cmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3QzExQUMx
QkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvcHlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
ODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNTE2MzlDMUUzMDAx
NDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNzQ5LDcgKzI3NTAsNiBAQAogCQkyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0Qg
LyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01hbmFnZWRWYWx1ZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJBNEVDOTA5MTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV3JpdGVCYXJyaWVyQnVmZmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE0RUM5MEExODYwRDZDMjAwOTRGNzgy
IC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXcml0ZUJhcnJpZXJCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkE2
ODI5NUExODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVdyaXRlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwT3BlcmF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZl
ckdDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVyR0MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0Mg
LyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQyMzksMTIgKzQyMzksMTIgQEAKIAkJCQlDMjQwMzA1MzE0QjQwNEM5MDA3
OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovLAogCQkJCUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTEx
MiAvKiBDb3BpZWRTcGFjZS5oICovLAogCQkJCUMyQzhEMDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBD
b3BpZWRTcGFjZUlubGluZXMuaCAqLywKKwkJCQkwRjdDMTFBQzFCQzM4NjJDMDBDNzRDREIgLyog
Q29weUJhcnJpZXIuaCAqLywKIAkJCQkwRjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRv
a2VuLmggKi8sCiAJCQkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNw
cCAqLywKIAkJCQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCAqLywK
IAkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8s
CiAJCQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICovLAotCQkJ
CTJBNjgyOTVBMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJ
MkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRC
MTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCiAJCQkJMkE4MzYzODMxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLApAQCAtNjA3Nyw3ICs2MDc3
LDYgQEAKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMThEMTQwMTY1NUNGRDUwMDYyQkI4MSAvKiBD
b3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTJBNjgyOTVCMTg3NUY4MDUwMEI2QzNF
MiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGNDFBMDVD
OTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRC
NkYzMUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFk
ZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSBpbiBIZWFkZXJzICovLApAQCAtNjc2MCw2ICs2NzU5LDcgQEAKIAkJCQk4Njg5MTZCMDE1NUYy
ODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUw
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3
NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAxOTA2
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzksNiArNDc5LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAogICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKICAgICAgICAgICAgICAgICAgICAgbG9hZGVk
VmFsdWVHUFIpOworICAgICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2hJZk5vdFRvU3BhY2UobG9hZGVkVmFsdWVHUFIpKTsKICAgICAgICAgICAgICAgICBz
dG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7CiAgICAgICAgICAgICB9CiAKQEAgLTcyMyw2ICs3
MjQsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAg
ICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5i
cmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgaml0LnN0b3JlVmFs
dWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcygKQEAgLTc4Niw2ICs3ODgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRT
aXplKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSMyk7CisgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5v
dFRvU3BhY2Uoc2NyYXRjaEdQUjMpKTsKICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29w
aWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1
YlB0cigKQEAgLTgyOSw4ICs4MzIsMTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nl
c3NHZW5lcmF0aQogICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKwogICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9v
ZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoIXNjcmF0Y2hHUFJIYXNTdG9yYWdlKQorICAgICAgICAgICAgaWYgKCFzY3JhdGNoR1BS
SGFzU3RvcmFnZSkgewogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
SWZOb3RUb1NwYWNlKHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVncywKICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9v
ZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CkBAIC05MTcsNiArOTIyLDcgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogCiAgICAgY2FzZSBBcnJheUxlbmd0aDog
ewogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZh
aWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaEdQUikpOwog
ICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIHN0YXRlLmZh
aWxBbmRJZ25vcmUuYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVy
czo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Myw3ICs2NDMsOSBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0CiAgICAgaWYgKFVOTElLRUxZKHNpemUgPCAwKSkKICAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXJyYXkgc2l6ZSBp
cyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSkpKTsKIAotICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJl
LCBzaXplKSk7CisgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJy
YXlTdHJ1Y3R1cmUsIHNpemUpOworICAgIHJlc3VsdC0+YnV0dGVyZmx5KCk7IC8vIEVuc3VyZSB0
aGF0IHRoZSBiYWNraW5nIHN0b3JlIGlzIGluIHRvLXNwYWNlLgorICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJl
LCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQpAQCAtMTE3Niw2ICsxMTc4LDIyIEBAIGludDMy
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHIKICAgICByZXR1cm4gZXhlYy0+Y29k
ZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1
ZShzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpOwogfQogCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0VHlwZWRB
cnJheUJ5dGVPZmZzZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisKKyAgICByZXR1cm4ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCktPmJ5
dGVPZmZzZXQoKTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCdXR0ZXJm
bHkoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCit7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKS0+YnV0
dGVyZmx5KCkpOworfQorCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUo
RXhlY1N0YXRlKiBleGVjLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw4IEBAIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TdHJDYXQzKEUKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
c2l6ZV90IHRhYmxlSW5kZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hT
dHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiBpbnQzMl90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nQW5kR2V0QnJhbmNoT2Zmc2V0KEV4
ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOworaW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KEV4ZWNTdGF0ZSosIEpTQ2Vs
bCopOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCdXR0ZXJmbHkoRXhlY1N0YXRl
KiwgSlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhl
Y1N0YXRlKiwgV2F0Y2hwb2ludFNldCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRo
cm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogaW50
MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxOCw2ICs0MDE4
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93
UGF0aCA9IG1faml0LmJyYW5jaElmTm90VG9TcGFjZShyZXN1bHRHUFIpOworCisgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
R2V0QnV0dGVyZmx5LCByZXN1bHRHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCiAgICAgICAgIHN0
b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00NjEwLDEw
ICs0NjE0LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBlbnVt
ZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd1BhdGg7CisKICAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQogICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHdyb25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAgICBt
X2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAogICAgICAgICAvLyBJZiBpbmRleCBp
cyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4g
aXQncyBhbiBpbmxpbmUgYWNjZXNzCkBAIC00NjM1LDE0ICs0NjQ1LDE1IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMy
VG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIC8vIFdlIHVzZSByZXN1bHRQ
YXlsb2FkR1BSIGFzIGEgdGVtcG9yYXJ5IGhlcmUuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIGNsb2Ji
ZXIgaXQgYWZ0ZXIgZ2V0dGluZyB0aGUgCiAgICAgICAgIC8vIHZhbHVlIG91dCBvZiBpbmRleEdQ
UiBhbmQgZW51bWVyYXRvckdQUiBiZWNhdXNlIHJlc3VsdFBheWxvYWRHUFIgY291bGQgcmV1c2Ug
ZWl0aGVyIG9mIHRob3NlIHJlZ2lzdGVycy4KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZXN1bHRQYXlsb2FkR1BSKTsgCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0UGF5
bG9hZEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdFRvU3Bh
Y2UocmVzdWx0UGF5bG9hZEdQUikpOwogICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwogICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2Fk
R1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwg
cmVzdWx0UGF5bG9hZEdQUik7CiAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlz
LCBvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwg
YmFzZUdQUiwgcHJvcGVydHlHUFIpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFRh
Z0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpKTsKICNlbmRpZgog
CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBu
b2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAzNCw2ICs0
MDM0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBz
bG93UGF0aCA9IG1faml0LmJyYW5jaElmTm90VG9TcGFjZShyZXN1bHRHUFIpOworCisgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0
aW9uR2V0QnV0dGVyZmx5LCByZXN1bHRHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCiAgICAgICAg
IHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00NjMz
LDEwICs0NjM3LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwogCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKwogICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIHNjcmF0Y2gxR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCAKKyAgICAgICAgICAgICAgICBzY3JhdGNoMUdQUiwKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgZW51bWVyYXRvckdQ
UiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkp
OwogICAgICAgICAKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CiAgICAgICAgIC8vIElm
IGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFn
ZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKQEAgLTQ2NTAsNiArNDY2MCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgLy8gT3RoZXJ3aXNl
IGl0J3Mgb3V0IG9mIGxpbmUKICAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1faml0KTsK
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaDJHUFIpKTsKICAgICAg
ICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaDFHUFIpOwogICAgICAgICBtX2ppdC5zdWIz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7CiAg
ICAgICAgIG1faml0Lm5lZzMyKHNjcmF0Y2gxR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxOTA2MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQwOSw5ICs0NDA5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRUeXBlZEFycmEKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZNb2RlKCkpLAogICAgICAgICBUcnVzdGVkSW1tMzIoV2FzdGVmdWxUeXBlZEFycmF5KSk7
CisKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCiAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBkYXRhR1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNo
SWZOb3RUb1NwYWNlKGRhdGFHUFIpKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwg
dmVjdG9yR1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RUb1NwYWNl
KHZlY3RvckdQUikpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
ZGF0YUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZkFycmF5QnVmZmVyKCkpLCBkYXRhR1BSKTsKICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRhdGFHUFIsIEFycmF5QnVm
ZmVyOjpvZmZzZXRPZkRhdGEoKSksIGRhdGFHUFIpOwogICAgIG1faml0LnN1YlB0cihkYXRhR1BS
LCB2ZWN0b3JHUFIpOwpAQCAtNDQyMiw2ICs0NDI2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldFR5cGVkQXJyYQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgdmVj
dG9yR1BSKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlv
bkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0LCB2ZWN0b3JHUFIsIGJhc2VHUFIpKTsKICAgICAKICAg
ICBpbnQzMlJlc3VsdCh2ZWN0b3JHUFIsIG5vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5MDYwMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjgwLDcgKzIyODAsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Y29tcGlsZUdldEJ1dHRlcmZseSgpCiAgICAgewotICAgICAgICBzZXRTdG9yYWdlKG1fb3V0Lmxv
YWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJm
bHkpKTsKKyAgICAgICAgc2V0U3RvcmFnZShsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIobG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDb25z
dGFudFN0b3JhZ2VQb2ludGVyKCkKQEAgLTIzMzUsMjcgKzIzMzUsMjUgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIExWYWx1ZSBiYXNlUHRyID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsg
ICAgCiAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2ltcGxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgid2FzdGVsZXNzIHR5cGVkIGFycmF5IikpOwotICAgICAgICBMQmFzaWNCbG9jayB3YXN0
ZWZ1bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIndhc3RlZnVsIHR5cGVkIGFycmF5Iikp
OwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoImNvbnRpbnVhdGlvbiBicmFuY2giKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNpbXBsZUNh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0IHdhc3Rl
bGVzcyB0eXBlZCBhcnJheSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgd2FzdGVmdWxDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCB3YXN0ZWZ1bCB0
eXBlZCBhcnJheSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCBjb250aW51YXRpb24iKSk7
CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgbW9kZSA9IG1fb3V0LmxvYWQzMihiYXNlUHRyLCBt
X2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X21vZGUpOwogICAgICAgICBtX291dC5icmFuY2goCiAg
ICAgICAgICAgICBtX291dC5ub3RFcXVhbChtb2RlLCBtX291dC5jb25zdEludDMyKFdhc3RlZnVs
VHlwZWRBcnJheSkpLAogICAgICAgICAgICAgdW5zdXJlKHNpbXBsZUNhc2UpLCB1bnN1cmUod2Fz
dGVmdWxDYXNlKSk7CiAKLSAgICAgICAgLy8gYmVnaW4gc2ltcGxlIGNhc2UgICAgICAgIAogICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNpbXBsZUNhc2UsIHdh
c3RlZnVsQ2FzZSk7CiAKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2ltcGxlT3V0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmNvbnN0SW50UHRyKDApKTsKIAogICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKLSAgICAgICAgLy8gYmVnaW4gd2FzdGVmdWwgY2FzZQogICAgICAgICBtX291
dC5hcHBlbmRUbyh3YXN0ZWZ1bENhc2UsIGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgTFZhbHVl
IHZlY3RvclB0ciA9IG1fb3V0LmxvYWRQdHIoYmFzZVB0ciwgbV9oZWFwcy5KU0FycmF5QnVmZmVy
Vmlld192ZWN0b3IpOwotICAgICAgICBMVmFsdWUgYnV0dGVyZmx5UHRyID0gbV9vdXQubG9hZFB0
cihiYXNlUHRyLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIExWYWx1ZSB2
ZWN0b3JQdHIgPSBsb2FkVmVjdG9yV2l0aEJhcnJpZXIoYmFzZVB0cik7CisgICAgICAgIExWYWx1
ZSBidXR0ZXJmbHlQdHIgPSBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIoYmFzZVB0cik7CiAgICAg
ICAgIExWYWx1ZSBhcnJheUJ1ZmZlclB0ciA9IG1fb3V0LmxvYWRQdHIoYnV0dGVyZmx5UHRyLCBt
X2hlYXBzLkJ1dHRlcmZseV9hcnJheUJ1ZmZlcik7CiAgICAgICAgIExWYWx1ZSBkYXRhUHRyID0g
bV9vdXQubG9hZFB0cihhcnJheUJ1ZmZlclB0ciwgbV9oZWFwcy5BcnJheUJ1ZmZlcl9kYXRhKTsK
IApAQCAtMjM2NCw3ICsyMzYyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKIAotICAgICAgICAvLyBvdXRwdXQKICAgICAgICAgc2V0SW50MzIobV9vdXQuY2FzdFRvSW50
MzIobV9vdXQucGhpKG1fb3V0LmludFB0ciwgc2ltcGxlT3V0LCB3YXN0ZWZ1bE91dCkpKTsKICAg
ICB9CiAgICAgCkBAIC00MDEwLDcgKzQwMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIobWV0
aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLmFzQ2VsbCgpKTsKICAgICAgICAgICAgICAgICBpZiAo
IWlzSW5saW5lT2Zmc2V0KG1ldGhvZC5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5QmFzZSA9IG1fb3V0LmxvYWRQdHIocHJvcGVydHlCYXNlLCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IGxvYWRCdXR0
ZXJmbHlXaXRoQmFycmllcihwcm9wZXJ0eUJhc2UpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGxvYWRQcm9wZXJ0eSgKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRhLmlk
ZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC00MDc4LDcgKzQwNzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChpc0lu
bGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIoYmFz
ZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFu
LnRyYW5zaXRpb25zLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCks
IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLApAQCAtNTMwMiw3ICs1
Mjk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dE9mTGluZUxvYWQsIHNsb3dDYXNlKTsKLSAgICAgICAg
TFZhbHVlIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0
dGVyZmx5KTsKKyAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb2FkQnV0dGVyZmx5V2l0aEJhcnJp
ZXIoYmFzZSk7CiAgICAgICAgIExWYWx1ZSByZWFsSW5kZXggPSBtX291dC5zaWduRXh0KAogICAg
ICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0
b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5
KSkpLCAKICAgICAgICAgICAgIG1fb3V0LmludDY0KTsKQEAgLTU5MzcsMTQgKzU5MzQsMTQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIAogICAgICAgICBp
ZiAocHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV4dFN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRy
KG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICAgICAgcmV0dXJu
IGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihvYmplY3QpOwogICAgICAgICAKICAgICAgICAgTFZh
bHVlIHJlc3VsdDsKICAgICAgICAgaWYgKCFwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9i
amVjdCwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJl
c3VsdCA9IHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgICAgICAgICAgb2JqZWN0
LCBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpLAorICAg
ICAgICAgICAgICAgIG9iamVjdCwgbG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKG9iamVjdCksCiAg
ICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUsIG5leHRTdHJ1Y3R1cmUpOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtNjA1Miw2ICs2MDQ5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CisKKyAgICBMVmFsdWUgbG9hZEJ1dHRlcmZseVdp
dGhCYXJyaWVyKExWYWx1ZSBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gY29weUJhcnJp
ZXIoCisgICAgICAgICAgICBvYmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpT
T2JqZWN0X2J1dHRlcmZseSksIG9wZXJhdGlvbkdldEJ1dHRlcmZseSk7CisgICAgfQorICAgIAor
ICAgIExWYWx1ZSBsb2FkVmVjdG9yV2l0aEJhcnJpZXIoTFZhbHVlIG9iamVjdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb3B5QmFycmllcigKKyAgICAgICAgICAgIG9iamVjdCwgbV9vdXQubG9h
ZFB0cihvYmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSwKKyAgICAgICAg
ICAgIG9wZXJhdGlvbkdldEFycmF5QnVmZmVyVmVjdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZh
bHVlIGNvcHlCYXJyaWVyKExWYWx1ZSBvYmplY3QsIExWYWx1ZSBwb2ludGVyLCBQX0pJVE9wZXJh
dGlvbl9FQyBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIgc2xvdyBwYXRo
IikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImxvYWRCdXR0ZXJmbHlXaXRoQmFycmllciBjb250aW51YXRpb24iKSk7CisKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihwb2ludGVyKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQudGVzdElzWmVyb1B0cihwb2lu
dGVyLCBtX291dC5jb25zdEludFB0cihDb3B5QmFycmllcjo6c3BhY2VCaXRzKSksCisgICAgICAg
ICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93UGF0aCkpOworCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVh
dGlvbik7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cigKKyAgICAgICAgICAgIHZtQ2FsbE5vRXhjZXB0aW9ucyhtX291dC5vcGVyYXRpb24oc2xvd1Bh
dGgpLCBtX2NhbGxGcmFtZSwgb2JqZWN0KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpOworICAgIH0KICAgICAKICAgICBUeXBlZFBvaW50ZXIgYmFzZUluZGV4KEluZGV4ZWRB
YnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBzdG9yYWdlLCBMVmFsdWUgaW5kZXgsIEVkZ2UgZWRn
ZSwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw3ICs0Niw5IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAogICAgICAgICB2bSwg
bnVsbHB0ciwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgSW5kZXhp
bmdIZWFkZXIoKSwgMCk7CiAgICAgCi0gICAgcmV0dXJuIEpTRmluYWxPYmplY3Q6OmNyZWF0ZShl
eGVjLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IEpTRmlu
YWxPYmplY3Q6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgcmVzdWx0
LT5idXR0ZXJmbHkoKTsgLy8gRW5zdXJlIHRoYXQgdGhlIGJ1dHRlcmZseSBpcyBpbiB0by1zcGFj
ZS4KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBleHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsNiArMzYyLDggQEAgcHVi
bGljOgogICAgIExWYWx1ZSB0ZXN0Tm9uWmVybzMyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2sp
IHsgcmV0dXJuIG5vdFplcm8zMihiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogICAgIExWYWx1ZSB0
ZXN0SXNaZXJvNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gaXNaZXJvNjQo
Yml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KICAgICBMVmFsdWUgdGVzdE5vblplcm82NChMVmFsdWUg
dmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3RaZXJvNjQoYml0QW5kKHZhbHVlLCBtYXNr
KSk7IH0KKyAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNr
KSB7IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KKyAgICBMVmFsdWUgdGVz
dE5vblplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gbm90TnVsbChi
aXRBbmQodmFsdWUsIG1hc2spKTsgfQogICAgIAogICAgIExWYWx1ZSBzZWxlY3QoTFZhbHVlIHZh
bHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikgeyByZXR1cm4gYnVpbGRTZWxlY3Qo
bV9idWlsZGVyLCB2YWx1ZSwgdGFrZW4sIG5vdFRha2VuKTsgfQogICAgIExWYWx1ZSBleHRyYWN0
VmFsdWUoTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGJ1aWxkRXh0cmFj
dFZhbHVlKG1fYnVpbGRlciwgYWdnVmFsLCBpbmRleCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcHlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29weUJhcnJpZXIuaAkocmV2aXNpb24gMTkwNjAzKQkoZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5V3JpdGVCYXJyaWVyLmg6MTkwNjAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb3B5V3JpdGVCYXJyaWVyX2gKKyNkZWZp
bmUgQ29weVdyaXRlQmFycmllcl9oCisKKyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIENvcHlXcml0ZUJhcnJpZXIgewor
cHVibGljOgorICAgIENvcHlXcml0ZUJhcnJpZXIoKQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIENvcHlXcml0ZUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0Nl
bGwqIG93bmVyLCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldCh2bSwgb3duZXIs
ICZ2YWx1ZSk7CisgICAgfQorICAgIAorICAgIENvcHlXcml0ZUJhcnJpZXIoVk0mIHZtLCBjb25z
dCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldCh2bSwg
b3duZXIsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhbV92YWx1ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgCisgICAgVCogZ2V0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBUKiBvcGVyYXRvcioo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldCgpOworICAgIH0KKyAgICAKKyAgICBU
KiBvcGVyYXRvci0+KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzZXQoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgdm0uaGVh
cC53cml0ZUJhcnJpZXIob3duZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoVCogdmFsdWUpCisgICAgeworICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFs
dWU7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFsdWUgPSAwOyB9CisKK3By
aXZhdGU6CisgICAgVCogbV92YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gQ29weVdyaXRlQmFycmllcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3B5QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcHlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDY3ICsyMywxNTggQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIENvcHlXcml0
ZUJhcnJpZXJfaAotI2RlZmluZSBDb3B5V3JpdGVCYXJyaWVyX2gKKyNpZm5kZWYgQ29weUJhcnJp
ZXJfaAorI2RlZmluZSBDb3B5QmFycmllcl9oCiAKICNpbmNsdWRlICJIZWFwLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIENvcHlXcml0ZUJhcnJp
ZXIgeworZW51bSBjbGFzcyBDb3B5U3RhdGUgeworICAgIC8vIFRoZSBiYWNraW5nIHN0b3JlIGlz
IG5vdCBwbGFubmVkIHRvIGdldCBjb3BpZWQgaW4gdGhpcyBlcG9jaC4gSWYgeW91IGtlZXAgYSBw
b2ludGVyIHRvIHRoZSBiYWNraW5nCisgICAgLy8gc3RvcmUgb24gdGhlIHN0YWNrLCBpdCB3aWxs
IG5vdCBnZXQgY29waWVkLiBJZiB5b3UgZG9uJ3Qga2VlcCBpdCBvbiB0aGUgc3RhY2ssIGl0IG1h
eSBnZXQgY29waWVkCisgICAgLy8gc3RhcnRpbmcgYXQgdGhlIG5leHQgaGFuZHNoYWtlICh0aGF0
IGlzLCBpdCBtYXkgdHJhbnNpdGlvbiBmcm9tIFRvU3BhY2UgdG8gQ29weVBsYW5uZWQsIGJ1dAor
ICAgIC8vIENvcHlQbGFubmVkIG1lYW5zIFRvU3BhY2UgcHJpb3IgdG8gdGhlIGhhbmRzaGFrZSB0
aGF0IHN0YXJ0cyB0aGUgY29weSBwaGFzZSkuCisgICAgVG9TcGFjZSwKKworICAgIC8vIFRoZSBt
YXJraW5nIHBoYXNlIGhhcyBzZWxlY3RlZCB0aGlzIGJhY2tpbmcgc3RvcmUgdG8gYmUgY29waWVk
LiBJZiB3ZSBhcmUgbm90IHlldCBpbiB0aGUgY29weWluZworICAgIC8vIHBoYXNlLCB0aGlzIGJh
Y2tpbmcgc3RvcmUgaXMgc3RpbGwgaW4gdG8tc3BhY2UuIEFsbCB0aGF0IGlzIG5lZWRlZCBpbiBz
dWNoIGEgY2FzZSBpcyB0byBtYXNrIG9mZiB0aGUKKyAgICAvLyBsb3cgYml0cy4gSWYgd2UgYXJl
IGluIHRoZSBjb3B5aW5nIHBoYXNlLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBwb2ludHMg
dG8gZnJvbS1zcGFjZS4gVGhlCisgICAgLy8gYmFycmllciBzaG91bGQgZmlyc3QgY29weSB0aGUg
b2JqZWN0IC0gb3Igd2FpdCBmb3IgY29weWluZyB0byBmaW5pc2ggLSBiZWZvcmUgdXNpbmcgdGhl
IG9iamVjdC4KKyAgICBDb3B5UGxhbm5lZCwKKworICAgIC8vIFRoZSBvYmplY3QgaXMgYmVpbmcg
Y29waWVkIHJpZ2h0IG5vdy4gQW55b25lIHdhbnRpbmcgdG8gdXNlIHRoZSBvYmplY3QgbXVzdCB3
YWl0IGZvciB0aGUgb2JqZWN0IHRvCisgICAgLy8gZmluaXNoIGJlaW5nIGNvcGllZC4gTm90aWZp
Y2F0aW9ucyBhYm91dCBjb3B5aW5nIHVzZSB0aGUgUGFya2luZ0xvdCBjb21iaW5lZCB3aXRoIHRo
ZXNlIGJpdHMuIElmIHRoZQorICAgIC8vIHN0YXRlIGlzIENvcHlpbmdBbmRXYWl0aW5nLCB0aGVu
IHdoZW4gdGhlIGNvcHlpbmcgZmluaXNoZXMsIHdoYXRldmVyIHRocmVhZCB3YXMgZG9pbmcgaXQg
d2lsbAorICAgIC8vIHVucGFya0FsbCgpIG9uIHRoZSBhZGRyZXNzIG9mIHRoZSBDb3B5QmFycmll
ckJhc2UuIFNvLCB0byB3YWl0IGZvciBjb3B5aW5nIHRvIGZpbmlzaCwgQ0FTIHRoaXMgdG8KKyAg
ICAvLyBDb3B5aW5nQW5kV2FpdGluZyBhbmQgdGhlbiBwYXJrQ29uZGl0aW9uYWxseSBvbiB0aGUg
YmFycmllciBhZGRyZXNzLgorICAgIENvcHlpbmcsCisKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGJl
aW5nIGNvcGllZCByaWdodCBub3csIGFuZCB0aGVyZSBhcmUgb25lIG9yIG1vcmUgdGhyZWFkcyBw
YXJrZWQuIFRob3NlIHRocmVhZHMgd2FudAorICAgIC8vIHRvIGJlIHVucGFya2VkIHdoZW4gY29w
eWluZyBpcyBkb25lLiBTbywgd2hpY2hldmVyIHRocmVhZCBkb2VzIHRoZSBjb3B5aW5nIG5lZWRz
IHRvIGNhbGwgdW5wYXJrQWxsKCkKKyAgICAvLyBvbiB0aGUgYmFycmllciBhZGRyZXNzIGFmdGVy
IGNvcHlpbmcgaXMgZG9uZS4KKyAgICBDb3B5aW5nQW5kV2FpdGluZworfTsKKworY2xhc3MgQ29w
eUJhcnJpZXJCYXNlIHsKIHB1YmxpYzoKLSAgICBDb3B5V3JpdGVCYXJyaWVyKCkKLSAgICAgICAg
OiBtX3ZhbHVlKDApCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwYWNlQml0cyA9IDM7CisK
KyAgICBDb3B5QmFycmllckJhc2UoKQorICAgICAgICA6IG1fdmFsdWUobnVsbHB0cikKICAgICB7
CiAgICAgfQogICAgIAotICAgIENvcHlXcml0ZUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0NlbGwq
IG93bmVyLCBUJiB2YWx1ZSkKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFt
X3ZhbHVlOyB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKworICAgIHZvaWQqIGdldFdpdGhvdXRCYXJyaWVyKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHRoaXMtPnNldCh2bSwgb3duZXIsICZ2YWx1ZSk7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlOwogICAgIH0KLSAgICAKLSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29u
c3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCisKKyAgICAvLyBXaGVuIHdlIGFyZSBpbiB0aGUg
Y29uY3VycmVudCBjb3B5aW5nIHBoYXNlLCB0aGlzIG1ldGhvZCBtYXkgbG9jayB0aGUgYmFycmll
ciBvYmplY3QgKGkuZS4gdGhlIGZpZWxkCisgICAgLy8gcG9pbnRpbmcgdG8gY29waWVkIHNwYWNl
KSBhbmQgY2FsbCBkaXJlY3RseSBpbnRvIHRoZSBvd25pbmcgb2JqZWN0J3MgY29weUJhY2tpbmdT
dG9yZSgpIG1ldGhvZC4KKyAgICB2b2lkKiBnZXQoY29uc3QgSlNDZWxsKiBvd25lcikgY29uc3QK
KyAgICB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IG1fdmFsdWU7CisgICAgICAgIGlmIChVTkxJ
S0VMWShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihyZXN1bHQpICYgc3BhY2VCaXRzKSkKKyAgICAg
ICAgICAgIHJldHVybiBIZWFwOjpjb3B5QmFycmllcihvd25lciwgbV92YWx1ZSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQ29weVN0YXRlIGNvcHlTdGF0ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29weVN0YXRlPihiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihtX3ZhbHVlKSAmIHNwYWNlQml0cyk7CisgICAgfQorCisgICAgLy8gVGhp
cyBvbmx5IHdvcmtzIHdoZW4geW91IGtub3cgdGhhdCB0aGVyZSBpcyBub2JvZHkgZWxzZSBjb25j
dXJyZW50bHkgbWVzc2luZyB3aXRoIHRoaXMgQ29weUJhcnJpZXIuCisgICAgLy8gVGhhdCdzIGhh
cmQgdG8gZ3VhcmFudGVlLCB0aG91Z2ggdGhlcmUgYXJlIGEgZmV3IHVudXN1YWwgcGxhY2VzIHdo
ZXJlIHRoaXMgZW5kcyB1cCBiZWluZyBzYWZlLgorICAgIC8vIFVzdWFsbHkgeW91IHdhbnQgdG8g
dXNlIENvcHlCYXJyaWVyOjp3ZWFrQ0FTKCkuCisgICAgdm9pZCBzZXRDb3B5U3RhdGUoQ29weVN0
YXRlIGNvcHlTdGF0ZSkKKyAgICB7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fdmFsdWUp
OworICAgICAgICB2YWx1ZSAmPSB+c3RhdGljX2Nhc3Q8dWludHB0cl90PihzcGFjZUJpdHMpOwor
ICAgICAgICB2YWx1ZSB8PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvcHlTdGF0ZSk7CisgICAg
ICAgIG1fdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKyAgICB9CisKKyAgICB2
b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gbnVsbHB0cjsgfQorCitwcm90ZWN0ZWQ6CisgICAgQ29w
eUJhcnJpZXJCYXNlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgdm9pZCogdmFsdWUpCiAg
ICAgewogICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KKyAgICB2b2lk
IHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmll
cihvd25lcik7CisgICAgfQogICAgIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgdm9pZCBzZXRXaXRob3V0QmFycmllcih2b2lkKiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKKyAg
ICBib29sIHdlYWtDQVNXaXRob3V0QmFycmllcigKKyAgICAgICAgdm9pZCogb2xkUG9pbnRlciwg
Q29weVN0YXRlIG9sZENvcHlTdGF0ZSwgdm9pZCogbmV3UG9pbnRlciwgQ29weVN0YXRlIG5ld0Nv
cHlTdGF0ZSkKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBvbGRWYWx1ZSA9IGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG9sZFBvaW50ZXIpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihvbGRDb3B5
U3RhdGUpOworICAgICAgICB1aW50cHRyX3QgbmV3VmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihuZXdQb2ludGVyKSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obmV3Q29weVN0YXRlKTsK
KyAgICAgICAgcmV0dXJuIHdlYWtDb21wYXJlQW5kU3dhcCgmbV92YWx1ZSwgYml0d2lzZV9jYXN0
PHZvaWQqPihvbGRWYWx1ZSksIGJpdHdpc2VfY2FzdDx2b2lkKj4obmV3VmFsdWUpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSB2b2lkKiBtX3ZhbHVlOworfTsKKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitjbGFzcyBDb3B5QmFycmllciA6IHB1YmxpYyBDb3B5QmFycmllckJhc2Ug
eworcHVibGljOgorICAgIENvcHlCYXJyaWVyKCkKKyAgICB7CisgICAgfQogICAgIAotICAgIFQq
IGdldCgpIGNvbnN0CisgICAgQ29weUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVy
LCBUJiB2YWx1ZSkKKyAgICAgICAgOiBDb3B5QmFycmllckJhc2Uodm0sIG93bmVyLCAmdmFsdWUp
CiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZTsKICAgICB9CiAgICAgCi0gICAgVCogb3Bl
cmF0b3IqKCkgY29uc3QKKyAgICBDb3B5QmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIFQqIHZhbHVlKQorICAgICAgICA6IENvcHlCYXJyaWVyQmFzZSh2bSwgb3duZXIsIHZhbHVl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldCgpOworICAgIH0KKworICAgIFQqIGdldFdpdGhv
dXRCYXJyaWVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+
KENvcHlCYXJyaWVyQmFzZTo6Z2V0V2l0aG91dEJhcnJpZXIoKSk7CiAgICAgfQogICAgIAotICAg
IFQqIG9wZXJhdG9yLT4oKSBjb25zdAorICAgIFQqIGdldChjb25zdCBKU0NlbGwqIG93bmVyKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldCgpOworICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PFQqPihDb3B5QmFycmllckJhc2U6OmdldChvd25lcikpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAgIHsK
LSAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOwotICAgICAgICB2bS5oZWFwLndyaXRlQmFy
cmllcihvd25lcik7CisgICAgICAgIENvcHlCYXJyaWVyQmFzZTo6c2V0KHZtLCBvd25lciwgdmFs
dWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldFdpdGhvdXRXcml0ZUJhcnJpZXIoVCogdmFs
dWUpCisgICAgdm9pZCBzZXRXaXRob3V0QmFycmllcihUKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgQ29weUJhcnJpZXJCYXNlOjpzZXRXaXRo
b3V0QmFycmllcih2YWx1ZSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFs
dWUgPSAwOyB9CiAKLXByaXZhdGU6Ci0gICAgVCogbV92YWx1ZTsKKyAgICBib29sIHdlYWtDQVNX
aXRob3V0QmFycmllcihUKiBvbGRQb2ludGVyLCBDb3B5U3RhdGUgb2xkQ29weVN0YXRlLCBUKiBu
ZXdQb2ludGVyLCBDb3B5U3RhdGUgbmV3Q29weVN0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IENvcHlCYXJyaWVyQmFzZTo6d2Vha0NBU1dpdGhvdXRCYXJyaWVyKG9sZFBvaW50ZXIsIG9sZENv
cHlTdGF0ZSwgbmV3UG9pbnRlciwgbmV3Q29weVN0YXRlKTsKKyAgICB9CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIENvcHlXcml0ZUJhcnJpZXJfaAorI2VuZGlmIC8vIENv
cHlCYXJyaWVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9y
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlW
aXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIGJvb2wgQ29weVZpc2l0b3I6OmNoZWNrSWZT
aG91bGRDb3B5KHZvaWQqIG9sZFB0cikKIHsKKyAgICBpZiAoIW9sZFB0cikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0Zv
cihvbGRQdHIpOwogICAgIGlmIChibG9jay0+aXNPdmVyc2l6ZSgpIHx8IGJsb2NrLT5pc1Bpbm5l
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5V3JpdGVCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29weVdyaXRlQmFycmllci5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5V3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29weVdyaXRlQmFycmllcl9oCi0j
ZGVmaW5lIENvcHlXcml0ZUJhcnJpZXJfaAotCi0jaW5jbHVkZSAiSGVhcC5oIgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBDb3B5V3JpdGVCYXJyaWVy
IHsKLXB1YmxpYzoKLSAgICBDb3B5V3JpdGVCYXJyaWVyKCkKLSAgICAgICAgOiBtX3ZhbHVlKDAp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3Qg
SlNDZWxsKiBvd25lciwgVCYgdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5zZXQodm0sIG93
bmVyLCAmdmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwg
Y29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5zZXQo
dm0sIG93bmVyLCB2YWx1ZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KLSAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIAotICAgIFQqIGdldCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgVCogb3BlcmF0
b3IqKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXQoKTsKLSAgICB9Ci0gICAgCi0g
ICAgVCogb3BlcmF0b3ItPigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0KCk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgc2V0KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCog
dmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKFQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy0+bV92YWx1ZSA9
IHZhbHVlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gMDsgfQot
Ci1wcml2YXRlOgotICAgIFQqIG1fdmFsdWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQot
I2VuZGlmIC8vIENvcHlXcml0ZUJhcnJpZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAJKHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAzLDYgKzEwMDMsMTIgQEAgdm9pZCBIZWFw
OjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAgIG1fc2xvdFZpc2l0b3IuYXBwZW5k
VG9NYXJrU3RhY2soY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CiB9CiAKK3ZvaWQqIEhlYXA6
OmNvcHlCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIHZvaWQqJiBwb2ludGVyKQoreworICAgIC8vIERv
IG5vdGhpbmcgZm9yIG5vdy4KKyAgICByZXR1cm4gcG9pbnRlcjsKK30KKwogdm9pZCBIZWFwOjpj
b2xsZWN0QW5kU3dlZXAoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSkKIHsKICAgICBpZiAo
IW1faXNTYWZlVG9Db2xsZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2
aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDggQEAgcHVibGljOgogICAgIHZvaWQgd3JpdGVCYXJy
aWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0
IEpTQ2VsbCosIEpTQ2VsbCopOwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQq
IGNvcHlCYXJyaWVyKGNvbnN0IEpTQ2VsbCogb3duZXIsIHZvaWQqJiBjb3BpZWRTcGFjZVBvaW50
ZXIpOworCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIoKSB7IHJl
dHVybiBtX3dyaXRlQmFycmllckJ1ZmZlcjsgfQogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJC
dWZmZXIoSlNDZWxsKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElu
bGluZXMuaAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBI
ZWFwSW5saW5lc19oCiAjZGVmaW5lIEhlYXBJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkNvcHlCYXJy
aWVyLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTQsNiArNzU0LDExIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kaXRpb24sIGxlZnRIYW5kU2lkZSwg
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICNlbmRpZgogICAgIH0KKworICAgIEp1bXAgYnJh
bmNoSWZOb3RUb1NwYWNlKEdQUlJlZyBzdG9yYWdlR1BSKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzdG9yYWdlR1BSLCBUcnVzdGVkSW1tMzIoQ29weUJhcnJp
ZXI6OnNwYWNlQml0cykpOworICAgIH0KICAgICAKICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNz
Rm9yQnl0ZU9mZnNldChwdHJkaWZmX3QgYnl0ZU9mZnNldCkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlz
aW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3Vt
ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBEaXJlY3RBcmd1
bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIGlmICh0aGlzT2JqZWN0LT5tX292ZXJyaWRl
cykgewogICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcigKICAgICAgICAgICAgIHRoaXNPYmplY3Qs
IERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbiwKLSAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fb3ZlcnJpZGVzLmdldCgpLCB0aGlzT2JqZWN0LT5vdmVycmlkZXNTaXplKCkpOworICAg
ICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0V2l0aG91dEJhcnJpZXIoKSwgdGhp
c09iamVjdC0+b3ZlcnJpZGVzU2l6ZSgpKTsKICAgICB9CiB9CiAKQEAgLTEwOCwxNCArMTA4LDEx
IEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKEoKICAgICAKICAgICBS
RUxFQVNFX0FTU0VSVCh0b2tlbiA9PSBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4p
OwogICAgIAotICAgIGJvb2wqIG9sZE92ZXJyaWRlcyA9IHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVz
LmdldCgpOwotICAgIGlmICghb2xkT3ZlcnJpZGVzKQotICAgICAgICByZXR1cm47Ci0gICAgCisg
ICAgdm9pZCogb2xkT3ZlcnJpZGVzID0gdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0V2l0aG91
dEJhcnJpZXIoKTsKICAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShvbGRPdmVycmlk
ZXMpKSB7CiAgICAgICAgIGJvb2wqIG5ld092ZXJyaWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPih2
aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodGhpc09iamVjdC0+b3ZlcnJpZGVzU2l6ZSgpKSk7CiAg
ICAgICAgIG1lbWNweShuZXdPdmVycmlkZXMsIG9sZE92ZXJyaWRlcywgdGhpc09iamVjdC0+bV9s
ZW5ndGgpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKG5ld092ZXJyaWRlcyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLnNl
dFdpdGhvdXRCYXJyaWVyKG5ld092ZXJyaWRlcyk7CiAgICAgICAgIHZpc2l0b3IuZGlkQ29weShv
bGRPdmVycmlkZXMsIHRoaXNPYmplY3QtPm92ZXJyaWRlc1NpemUoKSk7CiAgICAgfQogfQpAQCAt
MTM1LDkgKzEzMiwxMCBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MoVk0m
CiAgICAgCiAgICAgdm9pZCogYmFja2luZ1N0b3JlOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmhl
YXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIG92ZXJyaWRlc1NpemUoKSwgJmJhY2tpbmdTdG9y
ZSkpOwotICAgIG1fb3ZlcnJpZGVzLnNldCh2bSwgdGhpcywgc3RhdGljX2Nhc3Q8Ym9vbCo+KGJh
Y2tpbmdTdG9yZSkpOworICAgIGJvb2wqIG92ZXJyaWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPihi
YWNraW5nU3RvcmUpOworICAgIG1fb3ZlcnJpZGVzLnNldCh2bSwgdGhpcywgb3ZlcnJpZGVzKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xlbmd0aDsgaS0tOykKLSAgICAgICAgbV9vdmVycmlk
ZXMuZ2V0KClbaV0gPSBmYWxzZTsKKyAgICAgICAgb3ZlcnJpZGVzW2ldID0gZmFsc2U7CiB9CiAK
IHZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5nc0lmTmVjZXNzYXJ5KFZNJiB2bSkK
QEAgLTE0OSw3ICsxNDcsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3NJ
Zk5lCiB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVBcmd1bWVudChWTSYgdm0sIHVuc2ln
bmVkIGluZGV4KQogewogICAgIG92ZXJyaWRlVGhpbmdzSWZOZWNlc3Nhcnkodm0pOwotICAgIG1f
b3ZlcnJpZGVzLmdldCgpW2luZGV4XSA9IHRydWU7CisgICAgbV9vdmVycmlkZXMuZ2V0KHRoaXMp
W2luZGV4XSA9IHRydWU7CiB9CiAKIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVu
dHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2aXNpb24gMTkwNjAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgY2FuQWNjZXNz
SW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaSA8
IG1fbGVuZ3RoICYmICghbV9vdmVycmlkZXMgfHwgIW1fb3ZlcnJpZGVzLmdldCgpW2ldKTsKKyAg
ICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fb3ZlcnJpZGVzIHx8ICFtX292ZXJyaWRl
cy5nZXQodGhpcylbaV0pOwogICAgIH0KIAogICAgIGJvb2wgY2FuQWNjZXNzQXJndW1lbnRJbmRl
eFF1aWNrbHlJbkRGRyh1aW50MzJfdCBpKSBjb25zdApAQCAtMTQ4LDcgKzE0OCw3IEBAIHByaXZh
dGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fY2FsbGVlOwogICAgIHVpbnQzMl90
IG1fbGVuZ3RoOyAvLyBBbHdheXMgdGhlIGFjdHVhbCBsZW5ndGggb2YgY2FwdHVyZWQgYXJndW1l
bnRzIGFuZCBuZXZlciB3aGF0IHdhcyBzdG9yZWQgaW50byB0aGUgbGVuZ3RoIHByb3BlcnR5Lgog
ICAgIHVpbnQzMl90IG1fbWluQ2FwYWNpdHk7IC8vIFRoZSBtYXggb2YgdGhpcyBhbmQgbGVuZ3Ro
IGRldGVybWluZXMgdGhlIGNhcGFjaXR5IG9mIHRoaXMgb2JqZWN0LiBJdCBtYXkgYmUgdGhlIGFj
dHVhbCBjYXBhY2l0eSwgb3IgbWF5YmUgc29tZXRoaW5nIHNtYWxsZXIuIFdlIGFycmFuZ2UgaXQg
dGhpcyB3YXkgdG8gYmUga2luZCB0byB0aGUgSklUcy4KLSAgICBDb3B5V3JpdGVCYXJyaWVyPGJv
b2w+IG1fb3ZlcnJpZGVzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgsIGNh
bGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCisgICAg
Q29weUJhcnJpZXI8Ym9vbD4gbV9vdmVycmlkZXM7IC8vIElmIG5vbi1udWxsLCBpdCBtZWFucyB0
aGF0IGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgcHJv
cGVydGllcy4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIs
NiArMzkyLDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAogCiBi
b29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0
aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAg
Y2FzZSBBcnJheUNsYXNzOgogICAgICAgICBpZiAoIW5ld0xlbmd0aCkKQEAgLTQwOCw3ICs0MDks
NyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgY2FzZSBB
cnJheVdpdGhJbnQzMjoKICAgICBjYXNlIEFycmF5V2l0aERvdWJsZToKICAgICBjYXNlIEFycmF5
V2l0aENvbnRpZ3VvdXM6IHsKLSAgICAgICAgaWYgKG5ld0xlbmd0aCA9PSBtX2J1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCkpCisgICAgICAgIGlmIChuZXdMZW5ndGggPT0gYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAobmV3TGVu
Z3RoID49IE1BWF9BUlJBWV9JTkRFWCAvLyBUaGlzIGNhc2UgZW5zdXJlcyB0aGF0IHdlIGNhbiBk
byBmYXN0IHB1c2guCiAgICAgICAgICAgICB8fCAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJS
QVlfSU5ERVgKQEAgLTQxNywxMiArNDE4LDEyIEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4
ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICBleGVjLCBuZXdMZW5ndGgsIHRocm93RXhj
ZXB0aW9uLAogICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5ld0xlbmd0aCA+IG1fYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSkgeworICAgICAgICBpZiAobmV3TGVuZ3RoID4gYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSkgewogICAgICAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG5ld0xlbmd0aCk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVk
IGxlbmd0aFRvQ2xlYXIgPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgLSBuZXdMZW5ndGg7
CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aFRvQ2xlYXIgPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpIC0gbmV3TGVuZ3RoOwogICAgICAgICB1bnNpZ25lZCBjb3N0VG9BbGxvY2F0ZU5ld0J1dHRl
cmZseSA9IDY0OyAvLyBhIGhldXJpc3RpYy4KICAgICAgICAgaWYgKGxlbmd0aFRvQ2xlYXIgPiBu
ZXdMZW5ndGggJiYgbGVuZ3RoVG9DbGVhciA+IGNvc3RUb0FsbG9jYXRlTmV3QnV0dGVyZmx5KSB7
CiAgICAgICAgICAgICByZWFsbG9jYXRlQW5kU2hyaW5rQnV0dGVyZmx5KGV4ZWMtPnZtKCksIG5l
d0xlbmd0aCk7CkBAIC00MzAsMTMgKzQzMSwxMyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChF
eGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaW5kZXhpbmdUeXBlKCkg
PT0gQXJyYXlXaXRoRG91YmxlKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGktLSA+IG5ld0xlbmd0aDspCi0gICAgICAgICAgICAg
ICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpLS0gPiBuZXdM
ZW5ndGg7KQorICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ld
ID0gUE5hTjsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tID4gbmV3TGVuZ3RoOykKLSAgICAgICAg
ICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpLS0gPiBuZXdM
ZW5ndGg7KQorICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFy
KCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChuZXdM
ZW5ndGgpOworICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChuZXdMZW5ndGgpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIApAQCAtNDUyLDUxICs0NTMsNTMg
QEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogCiBKU1ZhbHVlIEpT
QXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUo
KSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoVW5kZWNpZGVkOgotICAgICAgICBpZiAoIW1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgaWYgKCFidXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIC8v
IFdlIGhhdmUgbm90aGluZyBidXQgaG9sZXMuIFNvLCBkcm9wIGRvd24gdG8gdGhlIHNsb3cgdmVy
c2lvbi4KICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6
CiAgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAgIGlmICghbGVu
Z3RoLS0pCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCi0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7
Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0
aF0uZ2V0KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA8IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbbGVuZ3RoXS5nZXQoKTsKICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBt
X2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uY2xlYXIoKTsKLSAgICAgICAgICAgIG1f
YnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgICAgIGJ1dHRlcmZs
eS0+Y29udGlndW91cygpW2xlbmd0aF0uY2xlYXIoKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+
c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0
aERvdWJsZTogewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWxlbmd0aC0tKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVChsZW5n
dGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBkb3VibGUgdmFsdWUg
PSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2xlbmd0aF07CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGxlbmd0aCA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBk
b3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtsZW5ndGhdOwogICAg
ICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbbGVuZ3RoXSA9IFBOYU47Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+
c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3Vv
dXNEb3VibGUoKVtsZW5ndGhdID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVi
bGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpF
bmNvZGVBc0RvdWJsZSwgdmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOwogICAgIAogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5s
ZW5ndGgoKTsKICAgICAgICAgaWYgKCFsZW5ndGgpIHsKQEAgLTU0Nyw2ICs1NTAsOCBAQCBKU1Zh
bHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiAvLyAgLSBwdXNoaW5nIHRvIGFuIGFy
cmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJh
bmdlIGVycm9yLgogdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSkKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlz
KTsKKyAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNs
YXNzOiB7CiAgICAgICAgIGNyZWF0ZUluaXRpYWxVbmRlY2lkZWQoZXhlYy0+dm0oKSwgMCk7CkBA
IC01NjYsMTEgKzU3MSwxMSBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBK
U1ZhCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7Ci0gICAgICAgIEFTU0VSVChsZW5n
dGggPD0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgaWYgKGxlbmd0aCA8
IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgewotICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXNJbnQzMigpW2xlbmd0aF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7
Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOwor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAg
ICAgICBBU1NFUlQobGVuZ3RoIDw9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAg
ICBpZiAobGVuZ3RoIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAg
YnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtsZW5ndGhdLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIodmFsdWUpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3Ro
ICsgMSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01ODYs
MTEgKzU5MSwxMSBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAg
ICAgfQogCiAgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKLSAgICAgICAgQVNTRVJUKGxl
bmd0aCA8PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBpZiAobGVuZ3Ro
IDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpW2xlbmd0aF0uc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHZhbHVlKTsKLSAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAg
IEFTU0VSVChsZW5ndGggPD0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlm
IChsZW5ndGggPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTYxOCwxMSArNjIzLDEx
IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsKLSAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpW2xlbmd0aF0gPSB2YWx1ZUFzRG91YmxlOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNl
dFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2xlbmd0aF0gPSB2YWx1ZUFzRG91YmxlOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJs
aWNMZW5ndGgobGVuZ3RoICsgMSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC02NDgsNyArNjUzLDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOwogCiAgICAgICAgIC8vIEZhc3QgY2FzZSAtIHB1c2ggd2l0aGluIHZlY3Rv
ciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IuCiAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwpAQCAtNjk2LDkgKzcwMSw5IEBA
IEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGUKIAogICAgICAgICBhdXRv
JiByZXN1bHRCdXR0ZXJmbHkgPSAqcmVzdWx0QXJyYXktPmJ1dHRlcmZseSgpOwogICAgICAgICBp
ZiAoYXJyYXlUeXBlID09IEFycmF5V2l0aERvdWJsZSkKLSAgICAgICAgICAgIG1lbWNweShyZXN1
bHRCdXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkgKiBjb3Vu
dCk7CisgICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUo
KS5kYXRhKCksIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEo
KSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgpLCBt
X2J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1Zh
bHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAgIG1lbWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGln
dW91cygpLmRhdGEoKSwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCkuZGF0YSgp
ICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOwogICAgICAgICByZXN1bHRC
dXR0ZXJmbHkuc2V0UHVibGljTGVuZ3RoKGNvdW50KTsKIAogICAgICAgICByZXR1cm4gcmVzdWx0
QXJyYXk7CkBAIC03MTUsOCArNzIwLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNBcnJheTo6ZmFzdENv
bmNhdFdpdGgoRQogICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKICAgICBBU1NFUlQobmV3QXJyYXlU
eXBlID09IGZhc3RDb25jYXRUeXBlKHZtLCAqdGhpcywgb3RoZXJBcnJheSkpOwogCi0gICAgdW5z
aWduZWQgdGhpc0FycmF5U2l6ZSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKLSAgICB1
bnNpZ25lZCBvdGhlckFycmF5U2l6ZSA9IG90aGVyQXJyYXkubV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOworICAgIHVuc2lnbmVkIHRoaXNBcnJheVNpemUgPSBtX2J1dHRlcmZseS5nZXQodGhp
cyktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVkIG90aGVyQXJyYXlTaXplID0gb3RoZXJB
cnJheS5tX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpOwogICAgIEFTU0VSVCh0
aGlzQXJyYXlTaXplICsgb3RoZXJBcnJheVNpemUgPCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsK
IAogICAgIFN0cnVjdHVyZSogcmVzdWx0U3RydWN0dXJlID0gZXhlYy5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihuZXdB
cnJheVR5cGUpOwpAQCAtNzI4LDExICs3MzMsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNBcnJheTo6
ZmFzdENvbmNhdFdpdGgoRQogICAgIGF1dG8mIG90aGVyQnV0dGVyZmx5ID0gKm90aGVyQXJyYXku
YnV0dGVyZmx5KCk7CiAgICAgaWYgKG5ld0FycmF5VHlwZSA9PSBBcnJheVdpdGhEb3VibGUpIHsK
ICAgICAgICAgYXV0byBidWZmZXIgPSByZXN1bHRCdXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgp
LmRhdGEoKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNBcnJheVNpemUpOworICAgICAg
ICBtZW1jcHkoYnVmZmVyLCBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNEb3VibGUo
KS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNBcnJheVNpemUpOwogICAgICAgICBtZW1j
cHkoYnVmZmVyICsgdGhpc0FycmF5U2l6ZSwgb3RoZXJCdXR0ZXJmbHkuY29udGlndW91c0RvdWJs
ZSgpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogb3RoZXJBcnJheVNpemUpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGF1dG8gYnVmZmVyID0gcmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5k
YXRhKCk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCku
ZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiB0aGlzQXJyYXlTaXplKTsKKyAgICAgICAgbWVtY3B5
KGJ1ZmZlciwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBzaXpl
b2YoSlNWYWx1ZSkgKiB0aGlzQXJyYXlTaXplKTsKICAgICAgICAgbWVtY3B5KGJ1ZmZlciArIHRo
aXNBcnJheVNpemUsIG90aGVyQnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIHNpemVvZihK
U1ZhbHVlKSAqIG90aGVyQXJyYXlTaXplKTsKICAgICB9CiAKQEAgLTgwNSw4ICs4MTAsOSBAQCBi
b29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlCiAgICAgICAgIC8vIEFkanVz
dCB0aGUgQnV0dGVyZmx5IGFuZCB0aGUgaW5kZXggYmlhcy4gV2Ugb25seSBuZWVkIHRvIGRvIHRo
aXMgaGVyZSBiZWNhdXNlIHdlJ3JlIGNoYW5naW5nCiAgICAgICAgIC8vIHRoZSBzdGFydCBvZiB0
aGUgQnV0dGVyZmx5LCB3aGljaCBuZWVkcyB0byBwb2ludCBhdCB0aGUgZmlyc3QgaW5kZXhlZCBw
cm9wZXJ0eSBpbiB0aGUgdXNlZAogICAgICAgICAvLyBwb3J0aW9uIG9mIHRoZSB2ZWN0b3IuCi0g
ICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobV9idXR0ZXJmbHktPnNo
aWZ0KHN0cnVjdHVyZSgpLCBjb3VudCkpOwotICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCh0aGlzKS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAgICAgICAgbV9idXR0
ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIoYnV0dGVyZmx5KTsKKyAgICAgICAgc3RvcmFnZSA9IGJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzICs9
IGNvdW50OwogCiAgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGNvbnN1bWluZyBwYXJ0IG9mIHRoZSB2
ZWN0b3IgYnkgbW92aW5nIGl0cyBiZWdpbm5pbmcgdG8gdGhlIGxlZnQsCkBAIC04NDgsNiArODU0
LDggQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgPiAwKTsKKworICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgIAogICAg
IHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CkBAIC04NTks
NyArODY3LDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogICAg
ICAgICAKICAgICBjYXNlIEFycmF5V2l0aEludDMyOgogICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogewotICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CisgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CiAg
ICAgICAgIAogICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkg
dG8gZG8gdGhlIHNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvCkBAIC04NzQsMjggKzg4MiwyOCBA
QCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgIHVuc2ln
bmVkIGVuZCA9IG9sZExlbmd0aCAtIGNvdW50OwogICAgICAgICBpZiAodGhpcy0+c3RydWN0dXJl
KHZtKS0+aG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtKSkgewogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpICsgY291bnRdLmdldCgp
OworICAgICAgICAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2kg
KyBjb3VudF0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkgewogICAg
ICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gaTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHZtLCBzdGFydEluZGV4LCBjb3VudCwgZW5z
dXJlQXJyYXlTdG9yYWdlKHZtKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsK
KyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKHYpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgbWVtbW92ZShtX2J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgs
IAotICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3Rh
cnRJbmRleCArIGNvdW50LCAKKyAgICAgICAgICAgIG1lbW1vdmUoYnV0dGVyZmx5LT5jb250aWd1
b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgCisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5j
b250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCArIGNvdW50LCAKICAgICAgICAgICAgICAg
ICBzaXplb2YoSlNWYWx1ZSkgKiAoZW5kIC0gc3RhcnRJbmRleCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kOyBpIDwgb2xkTGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgICAgICBi
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgICAgICAKLSAgICAgICAgbV9i
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChvbGRMZW5ndGggLSBjb3VudCk7CisgICAgICAgIGJ1
dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aERvdWJsZTogewot
ICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
CisgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhl
IHNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvCkBAIC05MTAsMjIgKzkxOCwyMiBAQCBib29sIEpT
QXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgIHVuc2lnbmVkIGVuZCA9
IG9sZExlbmd0aCAtIGNvdW50OwogICAgICAgICBpZiAodGhpcy0+c3RydWN0dXJlKHZtKS0+aG9s
ZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgZG91Ymxl
IHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2kgKyBjb3VudF07CisgICAgICAg
ICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpICsgY291
bnRdOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2ICE9IHYpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0SW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hp
ZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uodm0sIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJh
eVN0b3JhZ2Uodm0pKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHY7CisgICAgICAgICAgICAgICAgYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2OwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgbWVtbW92ZShtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgsCi0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291bnQsCisgICAgICAgICAg
ICBtZW1tb3ZlKGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5k
ZXgsCisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgp
ICsgc3RhcnRJbmRleCArIGNvdW50LAogICAgICAgICAgICAgICAgIHNpemVvZihKU1ZhbHVlKSAq
IChlbmQgLSBzdGFydEluZGV4KSk7CiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZW5kOyBpIDwgb2xkTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29u
dGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGln
dW91c0RvdWJsZSgpW2ldID0gUE5hTjsKICAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LT5z
ZXRQdWJsaWNMZW5ndGgob2xkTGVuZ3RoIC0gY291bnQpOworICAgICAgICBidXR0ZXJmbHktPnNl
dFB1YmxpY0xlbmd0aChvbGRMZW5ndGggLSBjb3VudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAgICAgCkBAIC05ODYsNiArOTk0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYQogCiBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJ
bmRleGluZ1R5cGUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25l
ZCBjb3VudCkKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0
aGlzKTsKKyAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJh
eUNsYXNzOgogICAgIGNhc2UgQXJyYXlXaXRoVW5kZWNpZGVkOgpAQCAtOTk0LDcgKzEwMDQsNyBA
QCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAKICAgICBjYXNlIEFy
cmF5V2l0aEludDMyOgogICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogewotICAgICAgICB1
bnNpZ25lZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAg
IHVuc2lnbmVkIG9sZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAg
IAogICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8g
dGhlIHVuc2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8gZG8gc28KICAgICAgICAgLy8gb25seSBpZiBp
dCdzIG5vdCBob3JyaWJseSBzbG93LgpAQCAtMTAwMiwxOSArMTAxMiwyMCBAQCBib29sIEpTQXJy
YXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAgICAgICAgICAgICByZXR1cm4gdW5zaGlm
dENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJy
YXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxlbmd0aChl
eGVjLT52bSgpLCBvbGRMZW5ndGggKyBjb3VudCk7CisgICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCh0aGlzKTsKIAogICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciBob2xl
cyBiZWZvcmUgd2Ugc3RhcnQgbW92aW5nIHRoaW5ncyBhcm91bmQgc28gdGhhdCB3ZSBkb24ndCBn
ZXQgaGFsZndheSAKICAgICAgICAgLy8gdGhyb3VnaCBzaGlmdGluZyBhbmQgdGhlbiByZWFsaXpl
IHdlIHNob3VsZCBoYXZlIGJlZW4gaW4gQXJyYXlTdG9yYWdlIG1vZGUuCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG9sZExlbmd0aDsgaS0tID4gc3RhcnRJbmRleDspIHsKLSAgICAgICAgICAg
IEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAg
ICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWSghdikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRD
b3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5
U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBvbGRMZW5ndGg7IGktLSA+IHN0YXJ0SW5kZXg7KSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
IHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgSlNW
YWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgICAgICBB
U1NFUlQodik7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2kgKyBjb3Vu
dF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29u
dGlndW91cygpW2kgKyBjb3VudF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgLy8gTk9URTogd2UncmUgbGVhdmluZyBiZWluZyBnYXJiYWdl
IGluIHRoZSBwYXJ0IG9mIHRoZSBhcnJheSB0aGF0IHdlIHNoaWZ0ZWQgb3V0CkBAIC0xMDI2LDcg
KzEwMzcsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aERvdWJsZTogewotICAgICAgICB1bnNpZ25l
ZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHVuc2ln
bmVkIG9sZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgIAogICAg
ICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHVu
c2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8gZG8gc28KICAgICAgICAgLy8gb25seSBpZiBpdCdzIG5v
dCBob3JyaWJseSBzbG93LgpAQCAtMTAzNCwxOSArMTA0NSwyMCBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50
V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9y
YWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxlbmd0aChleGVjLT52
bSgpLCBvbGRMZW5ndGggKyBjb3VudCk7CisgICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGhv
bGVzIGJlZm9yZSB3ZSBzdGFydCBtb3ZpbmcgdGhpbmdzIGFyb3VuZCBzbyB0aGF0IHdlIGRvbid0
IGdldCBoYWxmd2F5IAogICAgICAgICAvLyB0aHJvdWdoIHNoaWZ0aW5nIGFuZCB0aGVuIHJlYWxp
emUgd2Ugc2hvdWxkIGhhdmUgYmVlbiBpbiBBcnJheVN0b3JhZ2UgbW9kZS4KICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gb2xkTGVuZ3RoOyBpLS0gPiBzdGFydEluZGV4OykgewotICAgICAgICAg
ICAgZG91YmxlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAg
ICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWSh2ICE9IHYpKQogICAgICAgICAgICAgICAgIHJldHVybiB1bnNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVB
cnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAgICB9CiAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gb2xkTGVuZ3RoOyBpLS0gPiBzdGFydEluZGV4OykgewotICAgICAgICAgICAgZG91
YmxlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAg
ZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgICAg
IEFTU0VSVCh2ID09IHYpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpICsgY291bnRdID0gdjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpW2kgKyBjb3VudF0gPSB2OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBO
T1RFOiB3ZSdyZSBsZWF2aW5nIGJlaW5nIGdhcmJhZ2UgaW4gdGhlIHBhcnQgb2YgdGhlIGFycmF5
IHRoYXQgd2Ugc2hpZnRlZCBvdXQKQEAgLTEwNzIsNiArMTA4NCw4IEBAIHZvaWQgSlNBcnJheTo6
ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICB1bnNp
Z25lZCB2ZWN0b3JFbmQ7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3I7CisKKyAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAKICAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgpAQCAtMTA4
NSwxNiArMTA5OSwxNiBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhl
CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6CiAgICAgY2FzZSBBcnJheVdpdGhD
b250aWd1b3VzOiB7Ci0gICAgICAgIHZlY3RvckVuZCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsKLSAgICAgICAgdmVjdG9yID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7
CisgICAgICAgIHZlY3RvckVuZCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAg
IHZlY3RvciA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aERvdWJsZTogewogICAgICAgICB2
ZWN0b3IgPSAwOwogICAgICAgICB2ZWN0b3JFbmQgPSAwOwotICAgICAgICBmb3IgKDsgaSA8IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBkb3VibGUgdiA9
IGJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgIGZvciAoOyBpIDwg
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBkb3VibGUgdiA9
IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICAgICAgaWYgKHYgIT0g
dikKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKEpTVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpKTsKQEAgLTExMDMsNyArMTExNyw3IEBAIHZv
aWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICB9CiAgICAgCiAgICAg
Y2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwog
ICAgICAgICAKICAgICAgICAgdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgICAgIHZl
Y3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
OwpAQCAtMTE0MSw2ICsxMTU1LDggQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhl
Y1N0YXRlKgogICAgIC8vIEZJWE1FOiBXaGF0IHByZXZlbnRzIHRoaXMgZnJvbSBiZWluZyBjYWxs
ZWQgd2l0aCBhIFJ1bnRpbWVBcnJheT8gVGhlIGxlbmd0aCBmdW5jdGlvbiB3aWxsIGFsd2F5cyBy
ZXR1cm4gMCBpbiB0aGF0IGNhc2UuCiAgICAgQVNTRVJUKGxlbmd0aCA9PSB0aGlzLT5sZW5ndGgo
KSk7CiAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsK
KyAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNz
OgogICAgICAgICByZXR1cm47CkBAIC0xMTUzLDE3ICsxMTY5LDE3IEBAIHZvaWQgSlNBcnJheTo6
Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSoKICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhJ
bnQzMjoKICAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKLSAgICAgICAgdmVjdG9yID0g
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgIHZlY3RvckVuZCA9IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yID0gYnV0dGVyZmx5LT5j
b250aWd1b3VzKCkuZGF0YSgpOworICAgICAgICB2ZWN0b3JFbmQgPSBidXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJy
YXlXaXRoRG91YmxlOiB7CiAgICAgICAgIHZlY3RvciA9IDA7CiAgICAgICAgIHZlY3RvckVuZCA9
IDA7Ci0gICAgICAgIGZvciAoOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5KCktPnZlY3Rvckxlbmd0aCgpKTsK
LSAgICAgICAgICAgIGRvdWJsZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XTsKKyAgICAgICAgZm9yICg7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
ICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAg
ICAgICAgICAgaWYgKHYgIT0gdikKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gSlNWYWx1ZShKU1ZhbHVl
OjpFbmNvZGVBc0RvdWJsZSwgdik7CkBAIC0xMTcyLDcgKzExODgsNyBAQCB2b2lkIEpTQXJyYXk6
OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFS
UkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAg
IHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgICAgICB2ZWN0b3JFbmQgPSBtaW4obGVu
Z3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNw
cAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMCArODgsMTAgQEAgSlNB
cnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgIFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyLAogICAg
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICA6IG1fc3RydWN0dXJl
KHN0cnVjdHVyZSkKLSAgICAsIG1fdmVjdG9yKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1
ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQpCiAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAg
LCBtX21vZGUoV2FzdGVmdWxUeXBlZEFycmF5KQogeworICAgIG1fdmVjdG9yID0gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9mZnNldDsKICAgICBJbmRl
eGluZ0hlYWRlciBpbmRleGluZ0hlYWRlcjsKICAgICBpbmRleGluZ0hlYWRlci5zZXRBcnJheUJ1
ZmZlcihhcnJheUJ1ZmZlci5nZXQoKSk7CiAgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNy
ZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5kZXhpbmdIZWFkZXIsIDApOwpAQCAtMTAxLDE5ICsx
MDEsMTkgQEAgSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwK
ICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERhdGFWaWV3VGFnKQog
ICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgICwgbV92ZWN0b3Ioc3RhdGljX2Nhc3Q8
dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9mZnNldCkKICAgICAsIG1fbGVu
Z3RoKGxlbmd0aCkKICAgICAsIG1fbW9kZShEYXRhVmlld01vZGUpCiAgICAgLCBtX2J1dHRlcmZs
eSgwKQogeworICAgIG1fdmVjdG9yID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVy
LT5kYXRhKCkpICsgYnl0ZU9mZnNldDsKIH0KIAogSlNBcnJheUJ1ZmZlclZpZXc6OkpTQXJyYXlC
dWZmZXJWaWV3KFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKICAgICA6IEJh
c2Uodm0sIGNvbnRleHQuc3RydWN0dXJlKCksIGNvbnRleHQuYnV0dGVyZmx5KCkpCi0gICAgLCBt
X3ZlY3Rvcihjb250ZXh0LnZlY3RvcigpKQogICAgICwgbV9sZW5ndGgoY29udGV4dC5sZW5ndGgo
KSkKICAgICAsIG1fbW9kZShjb250ZXh0Lm1vZGUoKSkKIHsKKyAgICBtX3ZlY3Rvci5zZXRXaXRo
b3V0QmFycmllcihzdGF0aWNfY2FzdDxjaGFyKj4oY29udGV4dC52ZWN0b3IoKSkpOwogfQogCiB2
b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC0yMTUsNyAr
MjE1LDcgQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluYWxpemUoSlNDZWxsKgogICAgIEpT
QXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZp
ZXcqPihjZWxsKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlw
ZWRBcnJheSB8fCB0aGlzT2JqZWN0LT5tX21vZGUgPT0gV2FzdGVmdWxUeXBlZEFycmF5KTsKICAg
ICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSkKLSAgICAgICAg
ZmFzdEZyZWUodGhpc09iamVjdC0+bV92ZWN0b3IpOworICAgICAgICBmYXN0RnJlZSh0aGlzT2Jq
ZWN0LT5tX3ZlY3Rvci5nZXRXaXRob3V0QmFycmllcigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmgJKHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEs
NyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKICAg
ICB2b2lkIG5ldXRlcigpOwogICAgIAotICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVj
dG9yOyB9CisgICAgdm9pZCogdmVjdG9yKCkgeyByZXR1cm4gbV92ZWN0b3IuZ2V0KHRoaXMpOyB9
CiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwcml2YXRlOgogcHJv
dGVjdGVkOgogICAgIEFycmF5QnVmZmVyKiBleGlzdGluZ0J1ZmZlckluQnV0dGVyZmx5KCk7CiAK
LSAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICBDb3B5QmFycmllcjxjaGFyPiBtX3ZlY3RvcjsgLy8g
dGhpcyBpcyByZWFsbHkgYSB2b2lkKiwgYnV0IHZvaWQgd291bGQgbm90IHdvcmsgaGVyZS4KICAg
ICB1aW50MzJfdCBtX2xlbmd0aDsKICAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw3ICs1OSw3IEBAIGlubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKQog
ewogICAgIEFTU0VSVChoYXNBcnJheUJ1ZmZlcigpKTsKICAgICBtX2xlbmd0aCA9IDA7Ci0gICAg
bV92ZWN0b3IgPSAwOworICAgIG1fdmVjdG9yLmNsZWFyKCk7CiB9CiAKIGlubGluZSB1bnNpZ25l
ZCBKU0FycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCgpCkBAIC02OCw3ICs2OCw3IEBAIGlubGlu
ZSB1bnNpZ25lZCBKU0FycmF5QnVmZmVyVmlldzo6Ynl0ZU8KICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCiAgICAgcHRyZGlmZl90IGRlbHRhID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+
KG1fdmVjdG9yKSAtIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIoKS0+ZGF0YSgpKTsKKyAg
ICAgICAgYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihtX3ZlY3Rvci5nZXQodGhpcykpIC0gc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlcigpLT5kYXRhKCkpOwogICAgIAogICAgIHVuc2lnbmVkIHJl
c3VsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWx0YSk7CiAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4ocmVzdWx0KSA9PSBkZWx0YSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJl
dmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMSArMTA4LDExIEBAIHB1
YmxpYzoKICAgICAKICAgICBjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3Rv
cigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IuZ2V0KHRoaXMpKTsKICAg
ICB9CiAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rv
cik7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+
KG1fdmVjdG9yLmdldCh0aGlzKSk7CiAgICAgfQogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUg
bWVhbnQgdG8gbWF0Y2ggaW5kZXhlZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0MSw3ICs0NDEsNyBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+Ojp2CiAgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKICAg
ICBjYXNlIEZhc3RUeXBlZEFycmF5OiB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX3ZlY3Rv
cikKLSAgICAgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIFR5cGVkQXJyYXlW
ZWN0b3JDb3B5VG9rZW4sIHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6
ZSgpKTsKKyAgICAgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIFR5cGVkQXJy
YXlWZWN0b3JDb3B5VG9rZW4sIHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldFdpdGhvdXRCYXJyaWVy
KCksIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIApAQCAtNDY4LDEyICs0NjgsMTIgQEAgdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6YwogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CiAgICAgCiAgICAgaWYgKHRva2Vu
ID09IFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4KLSAgICAgICAgJiYgdmlzaXRvci5jaGVja0lm
U2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX3ZlY3RvcikpIHsKKyAgICAgICAgJiYgdmlzaXRvci5j
aGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXRXaXRob3V0QmFycmllcigp
KSkgewogICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3IpOwotICAgICAgICB2b2lk
KiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3RvcjsKKyAgICAgICAgdm9pZCogb2xkVmVj
dG9yID0gdGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3QpOwogICAgICAgICB2b2lk
KiBuZXdWZWN0b3IgPSB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodGhpc09iamVjdC0+Ynl0ZVNp
emUoKSk7CiAgICAgICAgIG1lbWNweShuZXdWZWN0b3IsIG9sZFZlY3RvciwgdGhpc09iamVjdC0+
Ynl0ZVNpemUoKSk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fdmVjdG9yID0gbmV3VmVjdG9yOwor
ICAgICAgICB0aGlzT2JqZWN0LT5tX3ZlY3Rvci5zZXRXaXRob3V0QmFycmllcihzdGF0aWNfY2Fz
dDxjaGFyKj4obmV3VmVjdG9yKSk7CiAgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRWZWN0b3Is
IHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwogICAgIH0KICAgICAKQEAgLTUwOCw4ICs1MDgsOCBA
QCBBcnJheUJ1ZmZlciogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhCiAgICAgICAgICYmICF0
aGlzT2JqZWN0LT5idXR0ZXJmbHkoKSAmJiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRlcikp
IHsKICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsKICAgICAgICAgLy8gUmV1
c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KLSAgICAgICAg
dGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0V2l0aG91dFdyaXRlQmFycmllcigKLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEluZGV4aW5nSGVhZGVyKj4odGhpc09iamVjdC0+bV92ZWN0b3IpLT5i
dXR0ZXJmbHkoKSk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldFdpdGhvdXRC
YXJyaWVyKAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PEluZGV4aW5nSGVhZGVyKj4odGhpc09i
amVjdC0+bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3QpKS0+YnV0dGVyZmx5KCkpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIFZNJiB2bSA9ICpoZWFwLT52bSgpOwogICAgICAgICB0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseS5zZXQodm0sIHRoaXNPYmplY3QsIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJy
YXlSaWdodCgKQEAgLTUyMSwxNCArNTIxLDE0IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGEKICAgICAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgewog
ICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6Ci0gICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpj
cmVhdGUodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7Cisg
ICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUodGhpc09iamVjdC0+bV92ZWN0b3Iu
Z2V0KHRoaXNPYmplY3QpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwogICAgICAgICBicmVh
azsKICAgICAgICAgCiAgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CiAgICAgICAgIC8vIEZJ
WE1FOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJhY3RpbmciIGZyb20gZXh0
cmEgbWVtb3J5CiAgICAgICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5vdyB0aGlzIGNhc2Ugd2ls
bCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRlZAogICAgICAgICAvLyB0
aGUgd2hvbGUgYnVmZmVyLgotICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRv
cHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAg
ICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQodGhpc09iamVjdC0+bV92
ZWN0b3IuZ2V0KHRoaXNPYmplY3QpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTUzNyw3ICs1MzcsNyBAQCBBcnJh
eUJ1ZmZlciogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhCiAgICAgfQogCiAgICAgdGhpc09i
amVjdC0+YnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPnNldEFycmF5QnVmZmVyKGJ1ZmZl
ci5nZXQoKSk7Ci0gICAgdGhpc09iamVjdC0+bV92ZWN0b3IgPSBidWZmZXItPmRhdGEoKTsKKyAg
ICB0aGlzT2JqZWN0LT5tX3ZlY3Rvci5zZXRXaXRob3V0QmFycmllcihzdGF0aWNfY2FzdDxjaGFy
Kj4oYnVmZmVyLT5kYXRhKCkpKTsKICAgICB0aGlzT2JqZWN0LT5tX21vZGUgPSBXYXN0ZWZ1bFR5
cGVkQXJyYXk7CiAgICAgaGVhcC0+YWRkUmVmZXJlbmNlKHRoaXNPYmplY3QsIGJ1ZmZlci5nZXQo
KSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHJldmlz
aW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpT
TWFwKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQotICAgICAgICAsIG1fbWFwRGF0YSh2bSkKKyAgICAgICAgLCBtX21hcERhdGEodm0s
IHRoaXMpCiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpjb3B5QnV0dGVyZgogICAgICAgICAgICAg
bWVtY3B5KGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRTb3VyY2UsIGNvdW50ICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIobmV3QnV0dGVyZmx5KTsKKyAgICAgICAgbV9idXR0ZXJmbHku
c2V0V2l0aG91dEJhcnJpZXIobmV3QnV0dGVyZmx5KTsKICAgICAgICAgdmlzaXRvci5kaWRDb3B5
KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5
SW5CeXRlcyk7CiAgICAgfSAKIH0KQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpTT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlz
T2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5LmdldFdpdGhvdXRCYXJyaWVyKCk7CiAgICAgaWYgKGJ1dHRlcmZseSkK
ICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKS0+b3V0T2ZMaW5lU2l6ZSgpKTsKIApA
QCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxs
KiAKICAgICBpZiAodG9rZW4gIT0gQnV0dGVyZmx5Q29weVRva2VuKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHko
KTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5Lmdl
dFdpdGhvdXRCYXJyaWVyKCk7CiAgICAgaWYgKGJ1dHRlcmZseSkKICAgICAgICAgdGhpc09iamVj
dC0+Y29weUJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVTaXplKCkpOwogfQpAQCAtMzQxLDcgKzM0MSw3IEBAIGJvb2wgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQo
dGhpc09iamVjdCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5s
ZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCkBAIC01MTQsNyAr
NTE0LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgICAg
ICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0
aEFycmF5U3RvcmFnZTogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCh0aGlzT2JqZWN0KS0+YXJyYXlT
dG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IHN0b3JhZ2Ut
PnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC01MzYsNyArNTM2LDcgQEAg
dm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgICAgICAKICAgICBj
YXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KHRoaXNPYmplY3QpLT5h
cnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTYxMyw3ICs2MTMs
NyBAQCB2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vCiAgICAgICAgIGVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZt
LCBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVX
aGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5h
cnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpA
QCAtNjQzLDcgKzY0Myw3IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRl
eGUKICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CiAgICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOwogICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0
KAotICAgICAgICBtX2J1dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAgIG1fYnV0dGVy
Zmx5LmdldCh0aGlzKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCiAgICAgICAgIGVsZW1lbnRTaXplICogdmVjdG9yTGVu
Z3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIG5l
d0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CkBAIC02OTUsNyArNjk1
LDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIEluZGV4
aW5nVHlwZSBvbGRUeXBlID0gaW5kZXhpbmdUeXBlKCk7CiAgICAgQVNTRVJUX1VOVVNFRChvbGRU
eXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2xkVHlwZSkpOwogICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAotICAgICAgICBt
X2J1dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKKyAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLCB2
bSwgdGhpcywgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNl
LCAwLAogICAgICAgICBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQobmV3QnV0dGVyZmx5KTsKIApAQCAtNzE5LDMxICs3MTksMzIgQEAgQ29u
dGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZQogewogICAgIEFTU0VSVChoYXNV
bmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZUludDMy
KSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKKyAgICByZXR1
cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzSW50MzIoKTsKIH0KIAogQ29udGln
dW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZShWTSYgdm0pCiB7
CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwotICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKLSAgICAg
ICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CiAgICAgCiAgICAgc2V0U3RydWN0dXJl
KHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
QWxsb2NhdGVEb3VibGUpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3Vi
bGUoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzRG91Ymxl
KCk7CiB9CiAKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRv
Q29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5
cGUoKSkpOwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlQ29udGlndW91cykpOwotICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPmNvbnRpZ3VvdXMoKTsKIH0KIAogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29uc3Ry
dWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyhWTSYgdm0sIHVu
c2lnbmVkIG5lZWRlZExlbmd0aCkKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMt
PnN0cnVjdHVyZSh2bSk7Ci0gICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0
eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0
eVNpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKTsKICAgICAKQEAgLTc1Miw3ICs3NTMs
NyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0CiAgICAgCiAgICAg
bWVtY3B5KAogICAgICAgICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVy
dHlTaXplLAotICAgICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0
eVNpemUsCisgICAgICAgIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHJvcGVydHlTdG9yYWdlKCkg
LSBwcm9wZXJ0eVNpemUsCiAgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpOwogICAgIAogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CkBAIC03NzAsNyArNzcxLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y29udmVydFVuZGVjaWRlZAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAg
ICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VX
aXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIC8vIE5vIG5lZWQg
dG8gY29weSBlbGVtZW50cy4KICAgICAKQEAgLTc4Nyw5ICs3ODgsMTAgQEAgQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6
OmNvbnZlcnRJbnQzMlRvRG91YmxlKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzSW50MzIoaW5k
ZXhpbmdUeXBlKCkpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBj
dXJyZW50ID0gJm1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsKKworICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspIHsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiBjdXJyZW50ID0gJmJ1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClb
aV07CiAgICAgICAgIGRvdWJsZSogY3VycmVudEFzRG91YmxlID0gYml0d2lzZV9jYXN0PGRvdWJs
ZSo+KGN1cnJlbnQpOwogICAgICAgICBKU1ZhbHVlIHYgPSBjdXJyZW50LT5nZXQoKTsKICAgICAg
ICAgaWYgKCF2KSB7CkBAIC04MDEsNyArODAzLDcgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmpl
Y3Q6OmNvbnZlcnRJbnQzMgogICAgIH0KICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZURv
dWJsZSkpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOworICAg
IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIAog
Q29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0NvbnRpZ3VvdXMoVk0m
IHZtKQpAQCAtODA5LDcgKzgxMSw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29u
dmVydEludDMKICAgICBBU1NFUlQoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKTsKICAgICAKICAg
ICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250
aWd1b3VzKCk7CiB9CiAKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJy
YXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCkBAIC04
MTcsMTAgKzgxOSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0Fy
CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNJbnQzMihpbmRl
eGluZ1R5cGUoKSkpOwogCi0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdl
ID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2
bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICBpZiAodikgewogICAgICAgICAgICAg
bmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKICAgICAg
ICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKQEAgLTg0MSw5ICs4NDQs
MTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMyVG9BcgogQ29udGlndW91
c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKFZNJiB2bSkKIHsK
ICAgICBBU1NFUlQoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KSB7Ci0gICAgICAg
IGRvdWJsZSogY3VycmVudCA9ICZtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwor
CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykgeworICAg
ICAgICBkb3VibGUqIGN1cnJlbnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07
CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudEFzVmFsdWUgPSBiaXR3aXNl
X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oY3VycmVudCk7CiAgICAgICAgIGRvdWJsZSB2
YWx1ZSA9ICpjdXJyZW50OwogICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHsKQEAgLTg1NSw3
ICs4NTksNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnREb3ViCiAgICAg
fQogICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlQ29udGlndW91cykpOwotICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPmNvbnRpZ3VvdXMoKTsKIH0KIAogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVy
dERvdWJsZVRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5z
aXRpb24pCkBAIC04NjMsMTAgKzg2NywxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252
ZXJ0RG91YmxlVG9BCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVCho
YXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9
IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgg
PSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFn
ZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5
aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIGRvdWJsZSB2
YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgICAgICBkb3Vi
bGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgaWYg
KHZhbHVlID09IHZhbHVlKSB7CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZh
bHVlKSk7CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CkBA
IC04ODksMTAgKzg5NCwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGln
dW91CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNDb250aWd1
b3VzKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5l
d1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0Vs
ZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgewotICAgICAgICBKU1ZhbHVlIHYgPSBt
X2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0g
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIGlmICh2KSB7CiAgICAg
ICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYp
OwogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwpAQCAtOTU3
LDggKzk2Myw4IEBAIHZvaWQgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMkZvclZhbHVlKFZNJiAKIAog
dm9pZCBKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQoVk0mIHZtLCB1bnNpZ25l
ZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpOwotICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7CisgICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5w
dWJsaWNMZW5ndGgoKSk7CisgICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMp
LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgY29udmVydFVuZGVjaWRlZEZvclZhbHVlKHZtLCB2YWx1
ZSk7CiAgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOwogfQpAQCAtMTExNCw3
ICsxMTIwLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogICAg
ICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFs
cmVhZHlFeGlzdHModm0sIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0pKTsKICAg
ICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJl
YWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICByZXR1
cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlz
dHModm0sIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAK
ICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMTM1Niw3ICsxMzYyLDcgQEAgYm9v
bCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQwogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVy
Zmx5LmdldCh0aGlzT2JqZWN0KS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwpAQCAtMTU0Niw3
ICsxNTUyLDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzogewotICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0
LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LmdldChvYmplY3QpLT5hcnJheVN0b3JhZ2Uo
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9
IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytp
KSB7CkBAIC0xNjk5LDcgKzE3MDUsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6Zmls
bEdldHRlclByCiB2b2lkIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIGNvbnN0IFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBtYXAgPSBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOworICAgIGF1dG8gbWFwID0gbV9idXR0ZXJm
bHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAKICAgICBp
ZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYgKGRlc2NyaXB0
b3IudmFsdWUoKSkKQEAgLTE3NTgsNyArMTc2NCw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93
bkluZGV4ZWRQcm9wZXJ0eSgKICAgICBpZiAoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiAoUmVh
ZE9ubHkgfCBBY2Nlc3NvcikpCiAgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNz
b3JzKGV4ZWMtPnZtKCkpOwogCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKKyAgICBTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcC5nZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXApOwogCiAgICAgLy8gMS4g
TGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCkBAIC0xNzkwLDgg
KzE3OTYsOSBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoCiAgICAg
ICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CiAKICAgICAgICAgcHV0SW5kZXhlZERlc2Ny
aXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOwotICAgICAgICBp
ZiAoaW5kZXggPj0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSkKLSAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwor
ICAgICAgICBpZiAoaW5kZXggPj0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkp
CisgICAgICAgICAgICBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgoaW5kZXgg
KyAxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xOTExLDE3ICsxOTE4LDE5
IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KIHsKICAgICBBU1NF
UlQoKGluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spID09IGluZGV4aW5nU2hhcGUp
OwogICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgIAogICAgIC8vIEZvciB1
cyB0byBnZXQgaGVyZSwgdGhlIGluZGV4IGlzIGVpdGhlciBncmVhdGVyIHRoYW4gdGhlIHB1Ymxp
YyBsZW5ndGgsIG9yIGdyZWF0ZXIgdGhhbgogICAgIC8vIG9yIGVxdWFsIHRvIHRoZSB2ZWN0b3Ig
bGVuZ3RoLgotICAgIEFTU0VSVChpID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Cisg
ICAgQVNTRVJUKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgCiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICAKICAgICBpZiAoaSA+PSBNQVhfQVJSQVlfSU5ERVggLSAx
CiAgICAgICAgIHx8IChpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgKLSAgICAgICAgICAgICYm
ICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIGNvdW50RWxlbWVudHM8aW5kZXhpbmdTaGFwZT4o
YnV0dGVyZmx5KCkpKSkKLSAgICAgICAgfHwgaW5kZXhJc1N1ZmZpY2llbnRseUJleW9uZExlbmd0
aEZvclNwYXJzZU1hcChpLCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpKSB7CisgICAgICAg
ICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBjb3VudEVsZW1lbnRzPGluZGV4aW5n
U2hhcGU+KGJ1dHRlcmZseSkpKQorICAgICAgICB8fCBpbmRleElzU3VmZmljaWVudGx5QmV5b25k
TGVuZ3RoRm9yU3BhcnNlTWFwKGksIGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpKSB7CiAgICAg
ICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgICAgIGVuc3VyZUFycmF5U3Rv
cmFnZVNsb3codm0pOwogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0
ZVNwYXJzZUluZGV4TWFwKHZtKTsKQEAgLTE5MzIsMjQgKzE5NDEsMjUgQEAgdm9pZCBKU09iamVj
dDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgIH0KIAogICAgIGVuc3VyZUxlbmd0aCh2
bSwgaSArIDEpOworICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKIAotICAg
IFJFTEVBU0VfQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICBzd2l0Y2gg
KGluZGV4aW5nU2hhcGUpIHsKICAgICBjYXNlIEludDMyU2hhcGU6CiAgICAgICAgIEFTU0VSVCh2
YWx1ZS5pc0ludDMyKCkpOwotICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgIGJ1dHRlcmZseS0+Y29u
dGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIERvdWJsZVNoYXBlOiB7CiAgICAgICAgIEFTU0VS
VCh2YWx1ZS5pc051bWJlcigpKTsKICAgICAgICAgZG91YmxlIHZhbHVlQXNEb3VibGUgPSB2YWx1
ZS5hc051bWJlcigpOwogICAgICAgICBBU1NFUlQodmFsdWVBc0RvdWJsZSA9PSB2YWx1ZUFzRG91
YmxlKTsKLSAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZhbHVl
QXNEb3VibGU7CisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gdmFs
dWVBc0RvdWJsZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENv
bnRpZ3VvdXNTaGFwZToKLSAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQo
dm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0
KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0
OgpAQCAtMjIyMyw3ICsyMjMzLDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0bwogICAgICAgICAKICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewog
ICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdElu
ZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVz
LCBtb2RlLCBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICB9CkBAIC0y
MjM3LDcgKzIyNDcsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rv
CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAg
ICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+
dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRl
cywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlKHZtKSk7CiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2Rl
LCBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAgfQpAQCAtMjI1Niw3
ICsyMjY2LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAg
ICAgICAKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAg
IGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52
ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVz
LCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGUodm0pKTsKICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rv
ckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUs
IGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAgfQpAQCAtMjI2
Niw3ICsyMjc2LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwog
CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgaWYg
KGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKQorICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rv
ckxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1v
ZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9k
ZSh2bSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZl
Y3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1v
ZGUsIGFycmF5U3RvcmFnZSgpKTsKQEAgLTIzNDcsOCArMjM1Nyw4IEBAIEFMV0FZU19JTkxJTkUg
dW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAgCiAg
ICAgaWYgKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICB2
ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgIGxlbmd0
aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0g
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgbGVuZ3RoID0g
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKTsKICAgICB9IGVsc2UgewogICAg
ICAgICB2ZWN0b3JMZW5ndGggPSAwOwogICAgICAgICBsZW5ndGggPSAwOwpAQCAtMjQ1NCwyNSAr
MjQ2NCwyOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAKIHZv
aWQgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7
CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAg
CiAgICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgQVNTRVJUKGhhc0Nv
bnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSB8fCBo
YXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkp
OwotICAgIEFTU0VSVChsZW5ndGggPiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAg
IEFTU0VSVChsZW5ndGggPiBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAKICAgICB1
bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbigKICAgICAgICAgbGVuZ3RoIDw8IDEs
CiAgICAgICAgIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotICAgIHVuc2lnbmVkIG9sZFZl
Y3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBv
bGRWZWN0b3JMZW5ndGggPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG1fYnV0dGVy
Zmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICBidXR0ZXJmbHkgPSBidXR0ZXJmbHktPmdyb3dBcnJh
eVJpZ2h0KAogICAgICAgICB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAogICAgICAgICBvbGRWZWN0b3JMZW5ndGggKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpLAotICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpOworICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKIAotICAg
IG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBidXR0
ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogCiAgICAgaWYgKGhhc0Rv
dWJsZShpbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVj
dG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBtX2J1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47CisgICAgICAgICAgICBi
dXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKClbaV0gPSBQTmFOOwogICAgIH0KIH0K
IApAQCAtMjQ4NSwxMCArMjQ5OCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9jYXRlQW5kU2hy
aW5rQnV0dGVyCiAgICAgQVNTRVJUKCFtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJl
Q2FwYWNpdHkoc3RydWN0dXJlKCkpKTsKIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsK
LSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5yZXNpemVBcnJheSh2
bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKTsK
KyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cmVz
aXplQXJyYXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3Io
bGVuZ3RoKSk7CiAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOwot
ICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsKLSAgICBtX2J1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JM
ZW5ndGgobGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgp
OwogfQogCiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYgdm0s
IHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKQEAgLTI0OTgsNyArMjUxMSw3IEBAIEJ1
dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWcKICAgICAvLyBJdCdzIGltcG9y
dGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIGZvciB0aGUg
cHJvcGVydHkKICAgICAvLyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IG11
dGF0ZWQgdGhlIHN0cnVjdHVyZSBpbi1wbGFjZS4KICAgICAKLSAgICByZXR1cm4gQnV0dGVyZmx5
OjpjcmVhdGVPckdyb3dQcm9wZXJ0eVN0b3JhZ2UobV9idXR0ZXJmbHkuZ2V0KCksIHZtLCB0aGlz
LCBzdHJ1Y3R1cmUodm0pLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICByZXR1cm4gQnV0dGVyZmx5
OjpjcmVhdGVPckdyb3dQcm9wZXJ0eVN0b3JhZ2UobV9idXR0ZXJmbHkuZ2V0KHRoaXMpLCB2bSwg
dGhpcywgc3RydWN0dXJlKHZtKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9CiAKIGJvb2wgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTI3ODUs
NyArMjc5OCw3IEBAIHVpbnQzMl90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEUKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+
bV9idXR0ZXJmbHkuZ2V0KG9iamVjdCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoc3Rv
cmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9u
IDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNp
bmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgotI2lu
Y2x1ZGUgIkNvcHlXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlICJDb3B5QmFycmllci5oIgogI2lu
Y2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRlZmVyR0MuaCIKICNpbmNs
dWRlICJIZWFwLmgiCkBAIC0xMzEsMTQgKzEzMSwxNCBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBpZiAoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwor
ICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKTsKICAg
ICB9CiAgICAgICAgIAogICAgIHVuc2lnbmVkIGdldFZlY3Rvckxlbmd0aCgpCiAgICAgewogICAg
ICAgICBpZiAoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkKICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
OworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsK
ICAgICB9CiAgICAgICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOwpAQCAtMTgxLDIzICsxODEsMjQgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgY2FuR2V0
SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAgICAgeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5
cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAg
Y2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBpIDwg
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV07CisgICAgICAgICAgICByZXR1cm4gaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgJiYg
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV07CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRF
WElOR19UWVBFUzogewotICAgICAgICAgICAgaWYgKGkgPj0gbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKQorICAgICAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBkb3VibGUgdmFsdWUg
PSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgZG91Ymxl
IHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgICAgICBp
ZiAodmFsdWUgIT0gdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgcmV0dXJuIGkgPCBidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX3ZlY3RvcltpXTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDYsMTUg
KzIwNywxNiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5
KHVuc2lnbmVkIGkpCiAgICAgeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAg
ICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBq
c051bWJlcihtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpLmFzSW50MzIoKSk7Cisg
ICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0
KCkuYXNJbnQzMigpKTsKICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgp
OworICAgICAgICAgICAgcmV0dXJuIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwog
ICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXNEb3VibGUoKVtpXSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpFbmNv
ZGVBc0RvdWJsZSwgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0pOwogICAgICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAg
ICAgICByZXR1cm4gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTIyMywzMiArMjI1LDMzIEBA
IHB1YmxpYzoKICAgICAgICAgCiAgICAgSlNWYWx1ZSB0cnlHZXRJbmRleFF1aWNrbHkodW5zaWdu
ZWQgaSkgY29uc3QKICAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KHRoaXMpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRF
Q0lERURfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
TExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChpIDwgYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdC5pc0ludDMyKCkgfHwgIXJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgaWYgKGkgPCBtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoaSA8IGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLmdldCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxM
X0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgaWYgKGkgPj0gbV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRvdWJsZSBy
ZXN1bHQgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAg
ZG91YmxlIHJlc3VsdCA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAg
ICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgcmVzdWx0KTsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKGkgPCBidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0yNzYsNiArMjc5LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBi
b29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgICAgIHN3aXRjaCAo
aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6
CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKQEAgLTI4NSwxMSAr
Mjg5LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzoKICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNh
c2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICByZXR1cm4gaSA8IGJ1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZToKICAgICAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAg
ICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpCi0gICAgICAgICAgICAgICAgJiYgISFtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yW2ldOworICAgICAgICAgICAgcmV0dXJuIGkgPCBidXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT52ZWN0b3JMZW5ndGgoKQorICAgICAgICAgICAgICAgICYmICEhYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMzA2LDcgKzMxMCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVY
SU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgog
ICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAg
ICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICBy
ZXR1cm4gaSA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE1LDkgKzMxOSwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgIAogICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KFZNJiB2bSwgdW5zaWduZWQgaSwgSlNWYWx1
ZSB2KQogICAgIHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQodGhpcyk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoIXYuaXNJbnQzMigpKSB7CiAg
ICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGVPckNvbnRpZ3VvdXNXaGlsZVBlcmZv
cm1pbmdTZXRJbmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzI1
LDE0ICszMzAsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewotICAgICAg
ICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAg
ICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQodm0sIHRoaXMsIHYpOwotICAgICAg
ICAgICAgaWYgKGkgPj0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQotICAgICAgICAgICAg
ICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOworICAgICAgICAgICAgQVNT
RVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGJ1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLnNldCh2bSwgdGhpcywgdik7CisgICAgICAgICAgICBpZiAoaSA+
PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+
c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgQVNT
RVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJU
KGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghdi5pc051
bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxl
UGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBA
IC0zNDIsMTMgKzM0NywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udmVydERvdWJs
ZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldID0gdmFsdWU7Ci0gICAgICAgICAgICBpZiAoaSA+PSBtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNl
dFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXSA9IHZhbHVlOworICAgICAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChp
ICsgMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CiAgICAg
ICAgICAgICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7CiAgICAgICAgICAgICB4LnNldCh2bSwgdGhp
cywgdik7CkBAIC0zNzEsMTQgKzM3NiwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGluaXRpYWxp
emVJbmRleChWTSYgdm0sIHVuc2lnbmVkIGksIEpTVmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSkKICAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KHRoaXMpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgewogICAgICAgICBj
YXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgIHNldEluZGV4
UXVpY2tseVRvVW5kZWNpZGVkKHZtLCBpLCB2KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAg
ICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgICAgICBB
U1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NF
UlQoaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkg
PCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghdi5pc0ludDMy
KCkpIHsKICAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1do
aWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTM4NiwxNCArMzkyLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsK
LSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KHZtLCB0aGlzLCB2KTsKKyAg
ICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAg
ICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAg
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KHZtLCB0aGlzLCB2KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBF
UzogewotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkp
OwotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAg
ICBpZiAoIXYuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0Nv
bnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtNDAzLDExICs0MDksMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwg
dik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZhbHVlOworICAgICAgICAgICAg
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6IHsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2Ut
Pmxlbmd0aCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3Rvcik7CiAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQodm0sIHRoaXMs
IHYpOwpAQCAtNDI4LDcgKzQzNCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVy
biAhIW1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CisgICAgICAgICAg
ICByZXR1cm4gISFtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJz
ZU1hcDsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NDUsNyArNDUxLDcgQEAg
cHVibGljOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+aW5TcGFyc2VNb2RlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNTUwLDExICs1NTYsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAgIH0KICAgICAgICAgCi0gICAgY29uc3QgQnV0
dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKTsgfQot
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCk7IH0K
KyAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVy
Zmx5LmdldCh0aGlzKTsgfQorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpOyB9CiAgICAgICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdl
IG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlT
dG9yYWdlKCk7IH0KLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0
dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIENvbnN0UHJvcGVydHlT
dG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGlu
ZVN0b3JhZ2UoKSB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPnByb3BlcnR5U3RvcmFn
ZSgpOyB9CiAKICAgICBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbkZv
ck9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0CiAgICAgewpAQCAtNjU2LDcgKzY2
Miw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlSW50MzIoVk0mIHZt
KQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpKQot
ICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNJbnQzMigpOwog
ICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVJbnQzMlNsb3codm0pOwogICAgIH0K
QEAgLTY2OCw3ICs2NzQsNyBAQCBwdWJsaWM6CiAgICAgQ29udGlndW91c0RvdWJsZXMgZW5zdXJl
RG91YmxlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzRG91YmxlKGluZGV4
aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRp
Z3VvdXNEb3VibGUoKTsKICAgICAgICAgICAgIAogICAgICAgICByZXR1cm4gZW5zdXJlRG91Ymxl
U2xvdyh2bSk7CiAgICAgfQpAQCAtNjc4LDcgKzY4NCw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1
b3VzSlNWYWx1ZXMgZW5zdXJlQ29udGlndW91cyhWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAo
TElLRUxZKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LmdldCh0aGlzKS0+Y29udGlndW91cygpOwogICAgICAgICAgICAgCiAgICAgICAgIHJldHVy
biBlbnN1cmVDb250aWd1b3VzU2xvdyh2bSk7CiAgICAgfQpAQCAtNjkwLDcgKzY5Niw3IEBAIHB1
YmxpYzoKICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShWTSYgdm0pCiAgICAg
ewogICAgICAgICBpZiAoTElLRUxZKGhhc0FueUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUoKSkp
KQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpOwogCiAg
ICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKICAgICB9CkBAIC03MzYs
NyArNzQyLDcgQEAgcHJvdGVjdGVkOgogICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKCkp
KTsKLSAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgfQogICAg
ICAgICAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gcHJlZGljYXRlIHNvbWUgYWN0
aW9ucyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKQEAgLTc0NSw3ICs3NTEsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgewogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTgwOSwxMiArODE1LDEyIEBAIHByb3Rl
Y3RlZDoKICAgICB7CiAgICAgICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOwog
ICAgICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkgfHwgaGFzSW50MzIo
aW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkgfHwgaGFzVW5kZWNp
ZGVkKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkKKworICAgICAgICBpZiAobV9idXR0ZXJmbHku
Z2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkKICAgICAgICAgICAgIGVuc3VyZUxl
bmd0aFNsb3codm0sIGxlbmd0aCk7CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKSA8IGxlbmd0aCkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5z
ZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgaWYgKG1fYnV0dGVyZmx5LmdldCh0aGlz
KS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAgICBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIH0KICAgICAgICAgCiAgICAgLy8g
Q2FsbCB0aGlzIGlmIHlvdSB3YW50IHRvIHNocmluayB0aGUgYnV0dGVyZmx5IGJhY2tpbmcgc3Rv
cmUsIGFuZCB5b3UncmUKQEAgLTg3NCw3ICs4ODAsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhWTSYpOwogCiBw
cm90ZWN0ZWQ6Ci0gICAgQ29weVdyaXRlQmFycmllcjxCdXR0ZXJmbHk+IG1fYnV0dGVyZmx5Owor
ICAgIENvcHlCYXJyaWVyPEJ1dHRlcmZseT4gbV9idXR0ZXJmbHk7CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9wYWRkaW5nOwpAQCAtMTM0OCw3ICsxMzU0
LDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkg
JiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzQ3VzdG9t
R2V0dGVyU2V0dGVyKCkpOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
dGhpcyk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2Uo
KSkKICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0
T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhp
cy0+c3RydWN0dXJlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJ
KHJldmlzaW9uIDE5MDYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIEpTU2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1fc2V0RGF0YSh2bSkKKyAgICAgICAgLCBtX3NldERh
dGEodm0sIHRoaXMpCiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcERhdGEuaAkocmV2aXNpb24gMTkwNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZu
ZGVmIE1hcERhdGFfaAogI2RlZmluZSBNYXBEYXRhX2gKIAorI2luY2x1ZGUgIkNvcHlCYXJyaWVy
LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CkBAIC05NCw3ICs5NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICB9OwogCi0gICAgTWFwRGF0YUltcGwoVk0mKTsK
KyAgICBNYXBEYXRhSW1wbChWTSYsIEpTQ2VsbCogb3duZXIpOwogCiAgICAgdm9pZCBzZXQoRXhl
Y1N0YXRlKiwgSlNDZWxsKiBvd25lciwgS2V5VHlwZSwgSlNWYWx1ZSk7CiAgICAgSlNWYWx1ZSBn
ZXQoRXhlY1N0YXRlKiwgS2V5VHlwZSk7CkBAIC0xMzYsMTYgKzEzNywxNyBAQCBwcml2YXRlOgog
ICAgIGludDMyX3QgbV9jYXBhY2l0eTsKICAgICBpbnQzMl90IG1fc2l6ZTsKICAgICBpbnQzMl90
IG1fZGVsZXRlZENvdW50OwotICAgIEVudHJ5KiBtX2VudHJpZXM7CisgICAgSlNDZWxsKiBtX293
bmVyOworICAgIENvcHlCYXJyaWVyPEVudHJ5PiBtX2VudHJpZXM7CiAgICAgV2Vha0dDTWFwPEpT
SXRlcmF0b3IqLCBKU0l0ZXJhdG9yPiBtX2l0ZXJhdG9yczsKIH07CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgotQUxXQVlTX0lOTElORSBNYXBEYXRhSW1w
bDxFbnRyeSwgSlNJdGVyYXRvcj46Ok1hcERhdGFJbXBsKFZNJiB2bSkKK0FMV0FZU19JTkxJTkUg
TWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpNYXBEYXRhSW1wbChWTSYgdm0sIEpTQ2Vs
bCogb3duZXIpCiAgICAgOiBtX2NhcGFjaXR5KDApCiAgICAgLCBtX3NpemUoMCkKICAgICAsIG1f
ZGVsZXRlZENvdW50KDApCi0gICAgLCBtX2VudHJpZXMobnVsbHB0cikKKyAgICAsIG1fb3duZXIo
b3duZXIpCiAgICAgLCBtX2l0ZXJhdG9ycyh2bSkKIHsKIH0KQEAgLTE4Miw3ICsxODQsNyBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YUltcGw8RW50cnksIEpTCiB7CiAgICAgaWYgKCFlbnN1
cmVTbG90KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBFbnRyeSogZW50cnkgPSAmbV9t
YXBEYXRhLT5tX2VudHJpZXNbbV9pbmRleF07CisgICAgRW50cnkqIGVudHJ5ID0gJm1fbWFwRGF0
YS0+bV9lbnRyaWVzLmdldChtX21hcERhdGEtPm1fb3duZXIpW21faW5kZXhdOwogICAgIHBhaXIg
PSBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPihlbnRyeS0+a2V5KCkuZ2V0KCks
IGVudHJ5LT52YWx1ZSgpLmdldCgpKTsKICAgICBtX2luZGV4ICs9IDE7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0yMDQsNyArMjA2LDcgQEAgQUxXQVlTX0lOTElORSBpbnQzMl90IE1hcERhdGFJbXBs
PEVudHJ5LAogICAgIGlmIChpc0ZpbmlzaGVkKCkpCiAgICAgICAgIHJldHVybiBtX2luZGV4Owog
Ci0gICAgRW50cnkqIGVudHJpZXMgPSBtX21hcERhdGEtPm1fZW50cmllczsKKyAgICBFbnRyeSog
ZW50cmllcyA9IG1fbWFwRGF0YS0+bV9lbnRyaWVzLmdldChtX21hcERhdGEtPm1fb3duZXIpOwog
ICAgIHNpemVfdCBlbmQgPSBtX21hcERhdGEtPm1fc2l6ZTsKICAgICB3aGlsZSAoc3RhdGljX2Nh
c3Q8c2l6ZV90PihtX2luZGV4KSA8IGVuZCAmJiAhZW50cmllc1ttX2luZGV4XS5rZXkoKSkKICAg
ICAgICAgbV9pbmRleCsrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
RGF0YUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBEYXRhSW5saW5lcy5oCShyZXZpc2lvbiAxOTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0
Nyw3IEBAIGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG8KICAgICBtX2Nh
cGFjaXR5ID0gMDsKICAgICBtX3NpemUgPSAwOwogICAgIG1fZGVsZXRlZENvdW50ID0gMDsKLSAg
ICBtX2VudHJpZXMgPSBudWxscHRyOworICAgIG1fZW50cmllcy5jbGVhcigpOwogICAgIG1faXRl
cmF0b3JzLmZvckVhY2goW10oSlNJdGVyYXRvciogaXRlcmF0b3IsIEpTSXRlcmF0b3IqKSB7CiAg
ICAgICAgIGl0ZXJhdG9yLT5pdGVyYXRvckRhdGEoKS0+ZGlkUmVtb3ZlQWxsRW50cmllcygpOwog
ICAgIH0pOwpAQCAtNjAsMjUgKzYwLDI1IEBAIGlubGluZSBFbnRyeSogTWFwRGF0YUltcGw8RW50
cnksIEpTSXRlcmEKICAgICAgICAgYXV0byBpdGVyID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQo
YXNTdHJpbmcoa2V5LnZhbHVlKS0+dmFsdWUoZXhlYykuaW1wbCgpKTsKICAgICAgICAgaWYgKGl0
ZXIgPT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKKyAgICAgICAgcmV0dXJuICZt
X2VudHJpZXMuZ2V0KG1fb3duZXIpW2l0ZXItPnZhbHVlXTsKICAgICB9CiAgICAgaWYgKGtleS52
YWx1ZS5pc1N5bWJvbCgpKSB7CiAgICAgICAgIGF1dG8gaXRlciA9IG1fc3ltYm9sS2V5ZWRUYWJs
ZS5maW5kKGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCkpOwogICAgICAg
ICBpZiAoaXRlciA9PSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCkpCiAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOworICAgICAgICBy
ZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRlci0+dmFsdWVdOwogICAgIH0KICAgICBp
ZiAoa2V5LnZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVk
VGFibGUuZmluZChrZXkudmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAoaXRlciA9PSBtX2Nl
bGxLZXllZFRhYmxlLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVy
biAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0
KG1fb3duZXIpW2l0ZXItPnZhbHVlXTsKICAgICB9CiAKICAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVl
S2V5ZWRUYWJsZS5maW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsKICAgICBpZiAoaXRl
ciA9PSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOworICAgIHJldHVybiAmbV9lbnRyaWVzLmdldCht
X293bmVyKVtpdGVyLT52YWx1ZV07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBl
bmFtZSBKU0l0ZXJhdG9yPgpAQCAtOTMsMTQgKzkzLDE0IEBAIGlubGluZSBFbnRyeSogTWFwRGF0
YUltcGw8RW50cnksIEpTSXRlcmEKIHsKICAgICB0eXBlbmFtZSBNYXA6Oml0ZXJhdG9yIGxvY2F0
aW9uID0gbWFwLmZpbmQoa2V5KTsKICAgICBpZiAobG9jYXRpb24gIT0gbWFwLmVuZCgpKQotICAg
ICAgICByZXR1cm4gJm1fZW50cmllc1tsb2NhdGlvbi0+dmFsdWVdOworICAgICAgICByZXR1cm4g
Jm1fZW50cmllcy5nZXQobV9vd25lcilbbG9jYXRpb24tPnZhbHVlXTsKIAogICAgIGlmICghZW5z
dXJlU3BhY2VGb3JBcHBlbmQoZXhlYywgb3duZXIpKQogICAgICAgICByZXR1cm4gMDsKIAogICAg
IGF1dG8gcmVzdWx0ID0gbWFwLmFkZChrZXksIG1fc2l6ZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0LmlzTmV3RW50cnkpOwotICAgIEVudHJ5KiBlbnRyeSA9ICZtX2VudHJpZXNbbV9zaXpl
KytdOworICAgIEVudHJ5KiBlbnRyeSA9ICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW21fc2l6ZSsr
XTsKICAgICBuZXcgKGVudHJ5KSBFbnRyeSgpOwogICAgIGVudHJ5LT5zZXRLZXkoZXhlYy0+dm0o
KSwgb3duZXIsIGtleVZhbHVlLnZhbHVlKTsKICAgICByZXR1cm4gZW50cnk7CkBAIC0xNjQsNyAr
MTY0LDcgQEAgaW5saW5lIGJvb2wgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAgICAg
ICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwogICAgICAgICBtX3ZhbHVlS2V5ZWRUYWJsZS5yZW1v
dmUoaXRlcik7CiAgICAgfQotICAgIG1fZW50cmllc1tsb2NhdGlvbl0uY2xlYXIoKTsKKyAgICBt
X2VudHJpZXMuZ2V0KG1fb3duZXIpW2xvY2F0aW9uXS5jbGVhcigpOwogICAgIG1fZGVsZXRlZENv
dW50Kys7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNzYsNyArMTc2LDcgQEAgaW5saW5lIHZv
aWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAgIGludDMyX3QgbmV3RW5kID0gMDsK
ICAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBhY2l0eSA+IDApOwogICAgIGZvciAoaW50MzJfdCBp
ID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7Ci0gICAgICAgIEVudHJ5JiBlbnRyeSA9IG1fZW50cmll
c1tpXTsKKyAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVy
KClbaV07CiAgICAgICAgIGlmICghZW50cnkua2V5KCkpIHsKICAgICAgICAgICAgIG1faXRlcmF0
b3JzLmZvckVhY2goW25ld0VuZF0oSlNJdGVyYXRvciogaXRlcmF0b3IsIEpTSXRlcmF0b3IqKSB7
CiAgICAgICAgICAgICAgICAgaXRlcmF0b3ItPml0ZXJhdG9yRGF0YSgpLT5kaWRSZW1vdmVFbnRy
eShuZXdFbmQpOwpAQCAtMTk1LDIwICsxOTUsMjAgQEAgaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8
RW50cnksIEpTSXRlcmF0bwogCiAgICAgLy8gRml4dXAgZm9yIHRoZSBoYXNobWFwcwogICAgIGZv
ciAoYXV0byBwdHIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV92YWx1ZUtl
eWVkVGFibGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0
ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1f
ZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50
MzIoKTsKICAgICBmb3IgKGF1dG8gcHRyID0gbV9jZWxsS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIg
IT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBt
X2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOworICAgICAgICBwdHIt
PnZhbHVlID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKClbcHRyLT52YWx1ZV0ua2V5KCku
Z2V0KCkuYXNJbnQzMigpOwogICAgIGZvciAoYXV0byBwdHIgPSBtX3N0cmluZ0tleWVkVGFibGUu
YmVnaW4oKTsgcHRyICE9IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCi0gICAgICAg
IHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigp
OworICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKClbcHRy
LT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwogICAgIGZvciAoYXV0byBwdHIgPSBtX3N5
bWJvbEtleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fc3ltYm9sS2V5ZWRUYWJsZS5lbmQoKTsg
KytwdHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCku
Z2V0KCkuYXNJbnQzMigpOworICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldFdpdGhv
dXRCYXJyaWVyKClbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwogCiAgICAgQVNT
RVJUKChtX3NpemUgLSBuZXdFbmQpID09IG1fZGVsZXRlZENvdW50KTsKICAgICBtX2RlbGV0ZWRD
b3VudCA9IDA7CiAKICAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAgICAgbV9zaXplID0g
bmV3RW5kOwotICAgIG1fZW50cmllcyA9IGRlc3RpbmF0aW9uOworICAgIG1fZW50cmllcy5zZXRX
aXRob3V0QmFycmllcihkZXN0aW5hdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5
LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgpAQCAtMjE3LDkgKzIxNyw5IEBAIGlubGluZSB2b2lkIE1h
cERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG8KICAgICBBU1NFUlQoIXNob3VsZFBhY2soKSk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQobmV3Q2FwYWNpdHkgPiAwKTsKICAgICBBU1NFUlQobmV3Q2FwYWNp
dHkgPj0gbV9jYXBhY2l0eSk7Ci0gICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2VudHJpZXMsIHNp
emVvZihFbnRyeSkgKiBtX3NpemUpOworICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9lbnRyaWVz
LmdldFdpdGhvdXRCYXJyaWVyKCksIHNpemVvZihFbnRyeSkgKiBtX3NpemUpOwogICAgIG1fY2Fw
YWNpdHkgPSBuZXdDYXBhY2l0eTsKLSAgICBtX2VudHJpZXMgPSBkZXN0aW5hdGlvbjsKKyAgICBt
X2VudHJpZXMuc2V0V2l0aG91dEJhcnJpZXIoZGVzdGluYXRpb24pOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KQEAgLTIzNiw2ICsyMzYsOCBAQCBp
bmxpbmUgQ2hlY2tlZEJvb2xlYW4gTWFwRGF0YUltcGw8RW50cnksCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+
KG5ld1N0b3JhZ2UpOworICAgIC8vIERvIGEgcmVhZCBiYXJyaWVyIHRvIGVuc3VyZSB0aGF0IG1f
ZW50cmllcyBwb2ludHMgdG8gdG8tc3BhY2UgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhpcyBHQyBl
cG9jaC4KKyAgICBtX2VudHJpZXMuZ2V0KG1fb3duZXIpOyAKICAgICBpZiAoc2hvdWxkUGFjaygp
KQogICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCByZXF1aXJl
ZFNpemUpOwogICAgIGVsc2UKQEAgLTI0Nyw3ICsyNDksNyBAQCBpbmxpbmUgQ2hlY2tlZEJvb2xl
YW4gTWFwRGF0YUltcGw8RW50cnksCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUg
SlNJdGVyYXRvcj4KIGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAg
ICBFbnRyeSogZW50cmllcyA9IG1fZW50cmllczsKKyAgICBFbnRyeSogZW50cmllcyA9IG1fZW50
cmllcy5nZXRXaXRob3V0QmFycmllcigpOwogICAgIGlmICghZW50cmllcykKICAgICAgICAgcmV0
dXJuOwogICAgIGlmIChtX2RlbGV0ZWRDb3VudCkgewpAQCAtMjYxLDE0ICsyNjMsMTQgQEAgaW5s
aW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAgICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlcyhyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZlbnRy
aWVzWzBdKSwgbV9zaXplICogKHNpemVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkpOwogICAgIH0KIAotICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBNYXBCYWNr
aW5nU3RvcmVDb3B5VG9rZW4sIGVudHJpZXMsIGNhcGFjaXR5SW5CeXRlcygpKTsKKyAgICB2aXNp
dG9yLmNvcHlMYXRlcihvd25lciwgTWFwQmFja2luZ1N0b3JlQ29weVRva2VuLCBtX2VudHJpZXMu
Z2V0V2l0aG91dEJhcnJpZXIoKSwgY2FwYWNpdHlJbkJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KIGlubGluZSB2b2lkIE1hcERhdGFJ
bXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6Y29weUJhY2tpbmdTdG9yZShDb3B5VmlzaXRvciYgdmlz
aXRvciwgQ29weVRva2VuIHRva2VuKQogewotICAgIGlmICh0b2tlbiA9PSBNYXBCYWNraW5nU3Rv
cmVDb3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShtX2VudHJpZXMpKSB7Ci0g
ICAgICAgIEVudHJ5KiBvbGRFbnRyaWVzID0gbV9lbnRyaWVzOworICAgIGlmICh0b2tlbiA9PSBN
YXBCYWNraW5nU3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShtX2Vu
dHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKSkpIHsKKyAgICAgICAgRW50cnkqIG9sZEVudHJpZXMg
PSBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKTsKICAgICAgICAgRW50cnkqIG5ld0VudHJp
ZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBhY2l0
eUluQnl0ZXMoKSkpOwogICAgICAgICBpZiAoc2hvdWxkUGFjaygpKQogICAgICAgICAgICAgcmVw
bGFjZUFuZFBhY2tCYWNraW5nU3RvcmUobmV3RW50cmllcywgbV9jYXBhY2l0eSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262621</attachid>
            <date>2015-10-07 12:05:55 -0700</date>
            <delta_ts>2015-10-07 13:38:14 -0700</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>130320</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA2NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDA4LDYgKzQwOCw3IEBACiAJCTBGNzkwODU2MTlBMjkw
QjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3OTA4NTQxOUEyOTBCMjAwRjYz
MTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmggKi87IH07CiAJCTBGN0IyOTRC
MTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuaCAqLzsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERG
R0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENE
QiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3QzExQUMxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MDIzRUExNjEz
ODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODMz
NUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMw
MDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY4MzM1Qjgx
NjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzMSw3ICs5MzIsNiBAQAogCQkyQTRCQjdGMzE4QTQx
MTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKIAkJMkE0RUM5MEIxODYwRDZDMjAwOTRG
NzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRFQzkwOTE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJy
aWVyQnVmZmVyLmNwcCAqLzsgfTsKIAkJMkE0RUM5MEMxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRl
QmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTJBNjgyOTVC
MTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTY4Mjk1QTE4NzVGODA1MDBCNkMzRTIgLyog
Q29weVdyaXRlQmFycmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTJBNkY0NjI2MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTZGNDYyNTE3
RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBE
ZWZlckdDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLzsgfTsKIAkJMkE4MzYz
ODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE4MzYzODMxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovOyB9OwpAQCAtMjI1Niw2ICsy
MjU2LDcgQEAKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc5MDg1MzE5QTI5MEIyMDBGNjMx
MEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3OTA4NTQxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVy
ZVJlZ2lzdHJhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlUmVn
aXN0cmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3QzExQUMx
QkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvcHlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
ODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNTE2MzlDMUUzMDAx
NDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNzQ5LDcgKzI3NTAsNiBAQAogCQkyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0Qg
LyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01hbmFnZWRWYWx1ZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJBNEVDOTA5MTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV3JpdGVCYXJyaWVyQnVmZmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE0RUM5MEExODYwRDZDMjAwOTRGNzgy
IC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXcml0ZUJhcnJpZXJCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkE2
ODI5NUExODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVdyaXRlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwT3BlcmF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZl
ckdDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVyR0MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0Mg
LyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQyNDEsMTIgKzQyNDEsMTIgQEAKIAkJCQlDMjQwMzA1MzE0QjQwNEM5MDA3
OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovLAogCQkJCUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTEx
MiAvKiBDb3BpZWRTcGFjZS5oICovLAogCQkJCUMyQzhEMDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBD
b3BpZWRTcGFjZUlubGluZXMuaCAqLywKKwkJCQkwRjdDMTFBQzFCQzM4NjJDMDBDNzRDREIgLyog
Q29weUJhcnJpZXIuaCAqLywKIAkJCQkwRjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRv
a2VuLmggKi8sCiAJCQkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNw
cCAqLywKIAkJCQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCAqLywK
IAkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8s
CiAJCQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICovLAotCQkJ
CTJBNjgyOTVBMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJ
MkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRC
MTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCiAJCQkJMkE4MzYzODMxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLApAQCAtNjA3OSw3ICs2MDc5
LDYgQEAKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMThEMTQwMTY1NUNGRDUwMDYyQkI4MSAvKiBD
b3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTJBNjgyOTVCMTg3NUY4MDUwMEI2QzNF
MiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGNDFBMDVD
OTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRC
NkYzMUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFk
ZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSBpbiBIZWFkZXJzICovLApAQCAtNjc2Miw2ICs2NzYxLDcgQEAKIAkJCQk4Njg5MTZCMDE1NUYy
ODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUw
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3
NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAxOTA2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzksNiArNDc5LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAogICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKICAgICAgICAgICAgICAgICAgICAgbG9hZGVk
VmFsdWVHUFIpOworICAgICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2hJZk5vdFRvU3BhY2UobG9hZGVkVmFsdWVHUFIpKTsKICAgICAgICAgICAgICAgICBz
dG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7CiAgICAgICAgICAgICB9CiAKQEAgLTcyMyw2ICs3
MjQsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAg
ICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5i
cmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgaml0LnN0b3JlVmFs
dWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcygKQEAgLTc4Niw2ICs3ODgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRT
aXplKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSMyk7CisgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5v
dFRvU3BhY2Uoc2NyYXRjaEdQUjMpKTsKICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29w
aWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1
YlB0cigKQEAgLTgyOSw4ICs4MzIsMTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nl
c3NHZW5lcmF0aQogICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKwogICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9v
ZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoIXNjcmF0Y2hHUFJIYXNTdG9yYWdlKQorICAgICAgICAgICAgaWYgKCFzY3JhdGNoR1BS
SGFzU3RvcmFnZSkgewogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
SWZOb3RUb1NwYWNlKHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVncywKICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9v
ZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CkBAIC05MTcsNiArOTIyLDcgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogCiAgICAgY2FzZSBBcnJheUxlbmd0aDog
ewogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZh
aWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaEdQUikpOwog
ICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIHN0YXRlLmZh
aWxBbmRJZ25vcmUuYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVy
czo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDE5MDY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Myw3ICs2NDMsOSBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0CiAgICAgaWYgKFVOTElLRUxZKHNpemUgPCAwKSkKICAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXJyYXkgc2l6ZSBp
cyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSkpKTsKIAotICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJl
LCBzaXplKSk7CisgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJy
YXlTdHJ1Y3R1cmUsIHNpemUpOworICAgIHJlc3VsdC0+YnV0dGVyZmx5KCk7IC8vIEVuc3VyZSB0
aGF0IHRoZSBiYWNraW5nIHN0b3JlIGlzIGluIHRvLXNwYWNlLgorICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJl
LCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQpAQCAtMTE3Niw2ICsxMTc4LDIyIEBAIGludDMy
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHIKICAgICByZXR1cm4gZXhlYy0+Y29k
ZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1
ZShzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpOwogfQogCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0VHlwZWRB
cnJheUJ5dGVPZmZzZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisKKyAgICByZXR1cm4ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCktPmJ5
dGVPZmZzZXQoKTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCdXR0ZXJm
bHkoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCit7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKS0+YnV0
dGVyZmx5KCkpOworfQorCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUo
RXhlY1N0YXRlKiBleGVjLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CShyZXZpc2lvbiAxOTA2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw4IEBAIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TdHJDYXQzKEUKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
c2l6ZV90IHRhYmxlSW5kZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hT
dHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiBpbnQzMl90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nQW5kR2V0QnJhbmNoT2Zmc2V0KEV4
ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOworaW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KEV4ZWNTdGF0ZSosIEpTQ2Vs
bCopOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCdXR0ZXJmbHkoRXhlY1N0YXRl
KiwgSlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhl
Y1N0YXRlKiwgV2F0Y2hwb2ludFNldCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRo
cm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogaW50
MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkocmV2aXNpb24gMTkwNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxOCw2ICs0MDE4
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93
UGF0aCA9IG1faml0LmJyYW5jaElmTm90VG9TcGFjZShyZXN1bHRHUFIpOworCisgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
R2V0QnV0dGVyZmx5LCByZXN1bHRHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCiAgICAgICAgIHN0
b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00NjEwLDEw
ICs0NjE0LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBlbnVt
ZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd1BhdGg7CisKICAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQogICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHdyb25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAgICBt
X2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAogICAgICAgICAvLyBJZiBpbmRleCBp
cyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4g
aXQncyBhbiBpbmxpbmUgYWNjZXNzCkBAIC00NjM1LDE0ICs0NjQ1LDE1IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMy
VG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIC8vIFdlIHVzZSByZXN1bHRQ
YXlsb2FkR1BSIGFzIGEgdGVtcG9yYXJ5IGhlcmUuIFdlIGhhdmUgdG8gbWFrZSBzdXJlIGNsb2Ji
ZXIgaXQgYWZ0ZXIgZ2V0dGluZyB0aGUgCiAgICAgICAgIC8vIHZhbHVlIG91dCBvZiBpbmRleEdQ
UiBhbmQgZW51bWVyYXRvckdQUiBiZWNhdXNlIHJlc3VsdFBheWxvYWRHUFIgY291bGQgcmV1c2Ug
ZWl0aGVyIG9mIHRob3NlIHJlZ2lzdGVycy4KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZXN1bHRQYXlsb2FkR1BSKTsgCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0UGF5
bG9hZEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdFRvU3Bh
Y2UocmVzdWx0UGF5bG9hZEdQUikpOwogICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwogICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2Fk
R1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwg
cmVzdWx0UGF5bG9hZEdQUik7CiAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlz
LCBvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwg
YmFzZUdQUiwgcHJvcGVydHlHUFIpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFRh
Z0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpKTsKICNlbmRpZgog
CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBu
b2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTkwNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAzNCw2ICs0
MDM0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBz
bG93UGF0aCA9IG1faml0LmJyYW5jaElmTm90VG9TcGFjZShyZXN1bHRHUFIpOworCisgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0
aW9uR2V0QnV0dGVyZmx5LCByZXN1bHRHUFIsIGJhc2VHUFIpKTsKICAgICAgICAgCiAgICAgICAg
IHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00NjMz
LDEwICs0NjM3LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigpOwogCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKwogICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIHNjcmF0Y2gxR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCAKKyAgICAgICAgICAgICAgICBzY3JhdGNoMUdQUiwKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgZW51bWVyYXRvckdQ
UiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkp
OwogICAgICAgICAKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CiAgICAgICAgIC8vIElm
IGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFn
ZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKQEAgLTQ2NTAsNiArNDY2MCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgLy8gT3RoZXJ3aXNl
IGl0J3Mgb3V0IG9mIGxpbmUKICAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1faml0KTsK
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaDJHUFIpKTsKICAgICAg
ICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaDFHUFIpOwogICAgICAgICBtX2ppdC5zdWIz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7CiAg
ICAgICAgIG1faml0Lm5lZzMyKHNjcmF0Y2gxR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxOTA2NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQwOSw5ICs0NDA5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRUeXBlZEFycmEKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZNb2RlKCkpLAogICAgICAgICBUcnVzdGVkSW1tMzIoV2FzdGVmdWxUeXBlZEFycmF5KSk7
CisKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCiAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBkYXRhR1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNo
SWZOb3RUb1NwYWNlKGRhdGFHUFIpKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwg
dmVjdG9yR1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RUb1NwYWNl
KHZlY3RvckdQUikpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
ZGF0YUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZkFycmF5QnVmZmVyKCkpLCBkYXRhR1BSKTsKICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRhdGFHUFIsIEFycmF5QnVm
ZmVyOjpvZmZzZXRPZkRhdGEoKSksIGRhdGFHUFIpOwogICAgIG1faml0LnN1YlB0cihkYXRhR1BS
LCB2ZWN0b3JHUFIpOwpAQCAtNDQyMiw2ICs0NDI2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldFR5cGVkQXJyYQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgdmVj
dG9yR1BSKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlv
bkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0LCB2ZWN0b3JHUFIsIGJhc2VHUFIpKTsKICAgICAKICAg
ICBpbnQzMlJlc3VsdCh2ZWN0b3JHUFIsIG5vZGUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5MDY3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjgwLDcgKzIyODAsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Y29tcGlsZUdldEJ1dHRlcmZseSgpCiAgICAgewotICAgICAgICBzZXRTdG9yYWdlKG1fb3V0Lmxv
YWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJm
bHkpKTsKKyAgICAgICAgc2V0U3RvcmFnZShsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIobG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDb25z
dGFudFN0b3JhZ2VQb2ludGVyKCkKQEAgLTIzMzUsMjcgKzIzMzUsMjUgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIExWYWx1ZSBiYXNlUHRyID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsg
ICAgCiAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2ltcGxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgid2FzdGVsZXNzIHR5cGVkIGFycmF5IikpOwotICAgICAgICBMQmFzaWNCbG9jayB3YXN0
ZWZ1bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIndhc3RlZnVsIHR5cGVkIGFycmF5Iikp
OwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoImNvbnRpbnVhdGlvbiBicmFuY2giKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNpbXBsZUNh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0IHdhc3Rl
bGVzcyB0eXBlZCBhcnJheSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgd2FzdGVmdWxDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCB3YXN0ZWZ1bCB0
eXBlZCBhcnJheSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCBjb250aW51YXRpb24iKSk7
CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgbW9kZSA9IG1fb3V0LmxvYWQzMihiYXNlUHRyLCBt
X2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X21vZGUpOwogICAgICAgICBtX291dC5icmFuY2goCiAg
ICAgICAgICAgICBtX291dC5ub3RFcXVhbChtb2RlLCBtX291dC5jb25zdEludDMyKFdhc3RlZnVs
VHlwZWRBcnJheSkpLAogICAgICAgICAgICAgdW5zdXJlKHNpbXBsZUNhc2UpLCB1bnN1cmUod2Fz
dGVmdWxDYXNlKSk7CiAKLSAgICAgICAgLy8gYmVnaW4gc2ltcGxlIGNhc2UgICAgICAgIAogICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNpbXBsZUNhc2UsIHdh
c3RlZnVsQ2FzZSk7CiAKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2ltcGxlT3V0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmNvbnN0SW50UHRyKDApKTsKIAogICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKLSAgICAgICAgLy8gYmVnaW4gd2FzdGVmdWwgY2FzZQogICAgICAgICBtX291
dC5hcHBlbmRUbyh3YXN0ZWZ1bENhc2UsIGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgTFZhbHVl
IHZlY3RvclB0ciA9IG1fb3V0LmxvYWRQdHIoYmFzZVB0ciwgbV9oZWFwcy5KU0FycmF5QnVmZmVy
Vmlld192ZWN0b3IpOwotICAgICAgICBMVmFsdWUgYnV0dGVyZmx5UHRyID0gbV9vdXQubG9hZFB0
cihiYXNlUHRyLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIExWYWx1ZSB2
ZWN0b3JQdHIgPSBsb2FkVmVjdG9yV2l0aEJhcnJpZXIoYmFzZVB0cik7CisgICAgICAgIExWYWx1
ZSBidXR0ZXJmbHlQdHIgPSBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIoYmFzZVB0cik7CiAgICAg
ICAgIExWYWx1ZSBhcnJheUJ1ZmZlclB0ciA9IG1fb3V0LmxvYWRQdHIoYnV0dGVyZmx5UHRyLCBt
X2hlYXBzLkJ1dHRlcmZseV9hcnJheUJ1ZmZlcik7CiAgICAgICAgIExWYWx1ZSBkYXRhUHRyID0g
bV9vdXQubG9hZFB0cihhcnJheUJ1ZmZlclB0ciwgbV9oZWFwcy5BcnJheUJ1ZmZlcl9kYXRhKTsK
IApAQCAtMjM2NCw3ICsyMzYyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKIAotICAgICAgICAvLyBvdXRwdXQKICAgICAgICAgc2V0SW50MzIobV9vdXQuY2FzdFRvSW50
MzIobV9vdXQucGhpKG1fb3V0LmludFB0ciwgc2ltcGxlT3V0LCB3YXN0ZWZ1bE91dCkpKTsKICAg
ICB9CiAgICAgCkBAIC00MDEwLDcgKzQwMDcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gd2Vha1BvaW50ZXIobWV0
aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLmFzQ2VsbCgpKTsKICAgICAgICAgICAgICAgICBpZiAo
IWlzSW5saW5lT2Zmc2V0KG1ldGhvZC5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5QmFzZSA9IG1fb3V0LmxvYWRQdHIocHJvcGVydHlCYXNlLCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IGxvYWRCdXR0
ZXJmbHlXaXRoQmFycmllcihwcm9wZXJ0eUJhc2UpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGxvYWRQcm9wZXJ0eSgKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRhLmlk
ZW50aWZpZXJOdW1iZXIsIG1ldGhvZC5vZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC00MDc4LDcgKzQwNzUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChpc0lu
bGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIoYmFz
ZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFu
LnRyYW5zaXRpb25zLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCks
IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLApAQCAtNTMwMiw3ICs1
Mjk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dE9mTGluZUxvYWQsIHNsb3dDYXNlKTsKLSAgICAgICAg
TFZhbHVlIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0
dGVyZmx5KTsKKyAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb2FkQnV0dGVyZmx5V2l0aEJhcnJp
ZXIoYmFzZSk7CiAgICAgICAgIExWYWx1ZSByZWFsSW5kZXggPSBtX291dC5zaWduRXh0KAogICAg
ICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0
b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5
KSkpLCAKICAgICAgICAgICAgIG1fb3V0LmludDY0KTsKQEAgLTU5MzcsMTQgKzU5MzQsMTQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIAogICAgICAgICBp
ZiAocHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV4dFN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRy
KG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICAgICAgcmV0dXJu
IGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihvYmplY3QpOwogICAgICAgICAKICAgICAgICAgTFZh
bHVlIHJlc3VsdDsKICAgICAgICAgaWYgKCFwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9i
amVjdCwgcHJldmlvdXNTdHJ1Y3R1cmUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJl
c3VsdCA9IHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgICAgICAgICAgb2JqZWN0
LCBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpLAorICAg
ICAgICAgICAgICAgIG9iamVjdCwgbG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKG9iamVjdCksCiAg
ICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUsIG5leHRTdHJ1Y3R1cmUpOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtNjA1Miw2ICs2MDQ5LDM5IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CisKKyAgICBMVmFsdWUgbG9hZEJ1dHRlcmZseVdp
dGhCYXJyaWVyKExWYWx1ZSBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gY29weUJhcnJp
ZXIoCisgICAgICAgICAgICBvYmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpT
T2JqZWN0X2J1dHRlcmZseSksIG9wZXJhdGlvbkdldEJ1dHRlcmZseSk7CisgICAgfQorICAgIAor
ICAgIExWYWx1ZSBsb2FkVmVjdG9yV2l0aEJhcnJpZXIoTFZhbHVlIG9iamVjdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb3B5QmFycmllcigKKyAgICAgICAgICAgIG9iamVjdCwgbV9vdXQubG9h
ZFB0cihvYmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSwKKyAgICAgICAg
ICAgIG9wZXJhdGlvbkdldEFycmF5QnVmZmVyVmVjdG9yKTsKKyAgICB9CisgICAgCisgICAgTFZh
bHVlIGNvcHlCYXJyaWVyKExWYWx1ZSBvYmplY3QsIExWYWx1ZSBwb2ludGVyLCBQX0pJVE9wZXJh
dGlvbl9FQyBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIgc2xvdyBwYXRo
IikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImxvYWRCdXR0ZXJmbHlXaXRoQmFycmllciBjb250aW51YXRpb24iKSk7CisKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihwb2ludGVyKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQudGVzdElzWmVyb1B0cihwb2lu
dGVyLCBtX291dC5jb25zdEludFB0cihDb3B5QmFycmllcjo6c3BhY2VCaXRzKSksCisgICAgICAg
ICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93UGF0aCkpOworCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVh
dGlvbik7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cigKKyAgICAgICAgICAgIHZtQ2FsbE5vRXhjZXB0aW9ucyhtX291dC5vcGVyYXRpb24oc2xvd1Bh
dGgpLCBtX2NhbGxGcmFtZSwgb2JqZWN0KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpOworICAgIH0KICAgICAKICAgICBUeXBlZFBvaW50ZXIgYmFzZUluZGV4KEluZGV4ZWRB
YnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBzdG9yYWdlLCBMVmFsdWUgaW5kZXgsIEVkZ2UgZWRn
ZSwgcHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxOTA2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw3ICs0Niw5IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAogICAgICAgICB2bSwg
bnVsbHB0ciwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgSW5kZXhp
bmdIZWFkZXIoKSwgMCk7CiAgICAgCi0gICAgcmV0dXJuIEpTRmluYWxPYmplY3Q6OmNyZWF0ZShl
eGVjLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IEpTRmlu
YWxPYmplY3Q6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgcmVzdWx0
LT5idXR0ZXJmbHkoKTsgLy8gRW5zdXJlIHRoYXQgdGhlIGJ1dHRlcmZseSBpcyBpbiB0by1zcGFj
ZS4KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBleHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxOTA2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsNiArMzYyLDggQEAgcHVi
bGljOgogICAgIExWYWx1ZSB0ZXN0Tm9uWmVybzMyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2sp
IHsgcmV0dXJuIG5vdFplcm8zMihiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogICAgIExWYWx1ZSB0
ZXN0SXNaZXJvNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gaXNaZXJvNjQo
Yml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KICAgICBMVmFsdWUgdGVzdE5vblplcm82NChMVmFsdWUg
dmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3RaZXJvNjQoYml0QW5kKHZhbHVlLCBtYXNr
KSk7IH0KKyAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNr
KSB7IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KKyAgICBMVmFsdWUgdGVz
dE5vblplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gbm90TnVsbChi
aXRBbmQodmFsdWUsIG1hc2spKTsgfQogICAgIAogICAgIExWYWx1ZSBzZWxlY3QoTFZhbHVlIHZh
bHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikgeyByZXR1cm4gYnVpbGRTZWxlY3Qo
bV9idWlsZGVyLCB2YWx1ZSwgdGFrZW4sIG5vdFRha2VuKTsgfQogICAgIExWYWx1ZSBleHRyYWN0
VmFsdWUoTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGJ1aWxkRXh0cmFj
dFZhbHVlKG1fYnVpbGRlciwgYWdnVmFsLCBpbmRleCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcHlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29weUJhcnJpZXIuaAkocmV2aXNpb24gMTkwNjAzKQkoZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5V3JpdGVCYXJyaWVyLmg6MTkwNjAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb3B5V3JpdGVCYXJyaWVyX2gKKyNkZWZp
bmUgQ29weVdyaXRlQmFycmllcl9oCisKKyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIENvcHlXcml0ZUJhcnJpZXIgewor
cHVibGljOgorICAgIENvcHlXcml0ZUJhcnJpZXIoKQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIENvcHlXcml0ZUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0Nl
bGwqIG93bmVyLCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldCh2bSwgb3duZXIs
ICZ2YWx1ZSk7CisgICAgfQorICAgIAorICAgIENvcHlXcml0ZUJhcnJpZXIoVk0mIHZtLCBjb25z
dCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldCh2bSwg
b3duZXIsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhbV92YWx1ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgCisgICAgVCogZ2V0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBUKiBvcGVyYXRvcioo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldCgpOworICAgIH0KKyAgICAKKyAgICBU
KiBvcGVyYXRvci0+KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzZXQoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgdm0uaGVh
cC53cml0ZUJhcnJpZXIob3duZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoVCogdmFsdWUpCisgICAgeworICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFs
dWU7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFsdWUgPSAwOyB9CisKK3By
aXZhdGU6CisgICAgVCogbV92YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gQ29weVdyaXRlQmFycmllcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3B5QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcHlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDY3ICsyMywxNTggQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIENvcHlXcml0
ZUJhcnJpZXJfaAotI2RlZmluZSBDb3B5V3JpdGVCYXJyaWVyX2gKKyNpZm5kZWYgQ29weUJhcnJp
ZXJfaAorI2RlZmluZSBDb3B5QmFycmllcl9oCiAKICNpbmNsdWRlICJIZWFwLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIENvcHlXcml0ZUJhcnJp
ZXIgeworZW51bSBjbGFzcyBDb3B5U3RhdGUgeworICAgIC8vIFRoZSBiYWNraW5nIHN0b3JlIGlz
IG5vdCBwbGFubmVkIHRvIGdldCBjb3BpZWQgaW4gdGhpcyBlcG9jaC4gSWYgeW91IGtlZXAgYSBw
b2ludGVyIHRvIHRoZSBiYWNraW5nCisgICAgLy8gc3RvcmUgb24gdGhlIHN0YWNrLCBpdCB3aWxs
IG5vdCBnZXQgY29waWVkLiBJZiB5b3UgZG9uJ3Qga2VlcCBpdCBvbiB0aGUgc3RhY2ssIGl0IG1h
eSBnZXQgY29waWVkCisgICAgLy8gc3RhcnRpbmcgYXQgdGhlIG5leHQgaGFuZHNoYWtlICh0aGF0
IGlzLCBpdCBtYXkgdHJhbnNpdGlvbiBmcm9tIFRvU3BhY2UgdG8gQ29weVBsYW5uZWQsIGJ1dAor
ICAgIC8vIENvcHlQbGFubmVkIG1lYW5zIFRvU3BhY2UgcHJpb3IgdG8gdGhlIGhhbmRzaGFrZSB0
aGF0IHN0YXJ0cyB0aGUgY29weSBwaGFzZSkuCisgICAgVG9TcGFjZSwKKworICAgIC8vIFRoZSBt
YXJraW5nIHBoYXNlIGhhcyBzZWxlY3RlZCB0aGlzIGJhY2tpbmcgc3RvcmUgdG8gYmUgY29waWVk
LiBJZiB3ZSBhcmUgbm90IHlldCBpbiB0aGUgY29weWluZworICAgIC8vIHBoYXNlLCB0aGlzIGJh
Y2tpbmcgc3RvcmUgaXMgc3RpbGwgaW4gdG8tc3BhY2UuIEFsbCB0aGF0IGlzIG5lZWRlZCBpbiBz
dWNoIGEgY2FzZSBpcyB0byBtYXNrIG9mZiB0aGUKKyAgICAvLyBsb3cgYml0cy4gSWYgd2UgYXJl
IGluIHRoZSBjb3B5aW5nIHBoYXNlLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBwb2ludHMg
dG8gZnJvbS1zcGFjZS4gVGhlCisgICAgLy8gYmFycmllciBzaG91bGQgZmlyc3QgY29weSB0aGUg
b2JqZWN0IC0gb3Igd2FpdCBmb3IgY29weWluZyB0byBmaW5pc2ggLSBiZWZvcmUgdXNpbmcgdGhl
IG9iamVjdC4KKyAgICBDb3B5UGxhbm5lZCwKKworICAgIC8vIFRoZSBvYmplY3QgaXMgYmVpbmcg
Y29waWVkIHJpZ2h0IG5vdy4gQW55b25lIHdhbnRpbmcgdG8gdXNlIHRoZSBvYmplY3QgbXVzdCB3
YWl0IGZvciB0aGUgb2JqZWN0IHRvCisgICAgLy8gZmluaXNoIGJlaW5nIGNvcGllZC4gTm90aWZp
Y2F0aW9ucyBhYm91dCBjb3B5aW5nIHVzZSB0aGUgUGFya2luZ0xvdCBjb21iaW5lZCB3aXRoIHRo
ZXNlIGJpdHMuIElmIHRoZQorICAgIC8vIHN0YXRlIGlzIENvcHlpbmdBbmRXYWl0aW5nLCB0aGVu
IHdoZW4gdGhlIGNvcHlpbmcgZmluaXNoZXMsIHdoYXRldmVyIHRocmVhZCB3YXMgZG9pbmcgaXQg
d2lsbAorICAgIC8vIHVucGFya0FsbCgpIG9uIHRoZSBhZGRyZXNzIG9mIHRoZSBDb3B5QmFycmll
ckJhc2UuIFNvLCB0byB3YWl0IGZvciBjb3B5aW5nIHRvIGZpbmlzaCwgQ0FTIHRoaXMgdG8KKyAg
ICAvLyBDb3B5aW5nQW5kV2FpdGluZyBhbmQgdGhlbiBwYXJrQ29uZGl0aW9uYWxseSBvbiB0aGUg
YmFycmllciBhZGRyZXNzLgorICAgIENvcHlpbmcsCisKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGJl
aW5nIGNvcGllZCByaWdodCBub3csIGFuZCB0aGVyZSBhcmUgb25lIG9yIG1vcmUgdGhyZWFkcyBw
YXJrZWQuIFRob3NlIHRocmVhZHMgd2FudAorICAgIC8vIHRvIGJlIHVucGFya2VkIHdoZW4gY29w
eWluZyBpcyBkb25lLiBTbywgd2hpY2hldmVyIHRocmVhZCBkb2VzIHRoZSBjb3B5aW5nIG5lZWRz
IHRvIGNhbGwgdW5wYXJrQWxsKCkKKyAgICAvLyBvbiB0aGUgYmFycmllciBhZGRyZXNzIGFmdGVy
IGNvcHlpbmcgaXMgZG9uZS4KKyAgICBDb3B5aW5nQW5kV2FpdGluZworfTsKKworY2xhc3MgQ29w
eUJhcnJpZXJCYXNlIHsKIHB1YmxpYzoKLSAgICBDb3B5V3JpdGVCYXJyaWVyKCkKLSAgICAgICAg
OiBtX3ZhbHVlKDApCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwYWNlQml0cyA9IDM7CisK
KyAgICBDb3B5QmFycmllckJhc2UoKQorICAgICAgICA6IG1fdmFsdWUobnVsbHB0cikKICAgICB7
CiAgICAgfQogICAgIAotICAgIENvcHlXcml0ZUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0NlbGwq
IG93bmVyLCBUJiB2YWx1ZSkKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFt
X3ZhbHVlOyB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKworICAgIHZvaWQqIGdldFdpdGhvdXRCYXJyaWVyKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHRoaXMtPnNldCh2bSwgb3duZXIsICZ2YWx1ZSk7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlOwogICAgIH0KLSAgICAKLSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29u
c3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCisKKyAgICAvLyBXaGVuIHdlIGFyZSBpbiB0aGUg
Y29uY3VycmVudCBjb3B5aW5nIHBoYXNlLCB0aGlzIG1ldGhvZCBtYXkgbG9jayB0aGUgYmFycmll
ciBvYmplY3QgKGkuZS4gdGhlIGZpZWxkCisgICAgLy8gcG9pbnRpbmcgdG8gY29waWVkIHNwYWNl
KSBhbmQgY2FsbCBkaXJlY3RseSBpbnRvIHRoZSBvd25pbmcgb2JqZWN0J3MgY29weUJhY2tpbmdT
dG9yZSgpIG1ldGhvZC4KKyAgICB2b2lkKiBnZXQoY29uc3QgSlNDZWxsKiBvd25lcikgY29uc3QK
KyAgICB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IG1fdmFsdWU7CisgICAgICAgIGlmIChVTkxJ
S0VMWShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihyZXN1bHQpICYgc3BhY2VCaXRzKSkKKyAgICAg
ICAgICAgIHJldHVybiBIZWFwOjpjb3B5QmFycmllcihvd25lciwgbV92YWx1ZSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQ29weVN0YXRlIGNvcHlTdGF0ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29weVN0YXRlPihiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihtX3ZhbHVlKSAmIHNwYWNlQml0cyk7CisgICAgfQorCisgICAgLy8gVGhp
cyBvbmx5IHdvcmtzIHdoZW4geW91IGtub3cgdGhhdCB0aGVyZSBpcyBub2JvZHkgZWxzZSBjb25j
dXJyZW50bHkgbWVzc2luZyB3aXRoIHRoaXMgQ29weUJhcnJpZXIuCisgICAgLy8gVGhhdCdzIGhh
cmQgdG8gZ3VhcmFudGVlLCB0aG91Z2ggdGhlcmUgYXJlIGEgZmV3IHVudXN1YWwgcGxhY2VzIHdo
ZXJlIHRoaXMgZW5kcyB1cCBiZWluZyBzYWZlLgorICAgIC8vIFVzdWFsbHkgeW91IHdhbnQgdG8g
dXNlIENvcHlCYXJyaWVyOjp3ZWFrQ0FTKCkuCisgICAgdm9pZCBzZXRDb3B5U3RhdGUoQ29weVN0
YXRlIGNvcHlTdGF0ZSkKKyAgICB7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fdmFsdWUp
OworICAgICAgICB2YWx1ZSAmPSB+c3RhdGljX2Nhc3Q8dWludHB0cl90PihzcGFjZUJpdHMpOwor
ICAgICAgICB2YWx1ZSB8PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvcHlTdGF0ZSk7CisgICAg
ICAgIG1fdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKyAgICB9CisKKyAgICB2
b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gbnVsbHB0cjsgfQorCitwcm90ZWN0ZWQ6CisgICAgQ29w
eUJhcnJpZXJCYXNlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgdm9pZCogdmFsdWUpCiAg
ICAgewogICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KKyAgICB2b2lk
IHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmll
cihvd25lcik7CisgICAgfQogICAgIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgdm9pZCBzZXRXaXRob3V0QmFycmllcih2b2lkKiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKKyAg
ICBib29sIHdlYWtDQVNXaXRob3V0QmFycmllcigKKyAgICAgICAgdm9pZCogb2xkUG9pbnRlciwg
Q29weVN0YXRlIG9sZENvcHlTdGF0ZSwgdm9pZCogbmV3UG9pbnRlciwgQ29weVN0YXRlIG5ld0Nv
cHlTdGF0ZSkKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBvbGRWYWx1ZSA9IGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG9sZFBvaW50ZXIpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihvbGRDb3B5
U3RhdGUpOworICAgICAgICB1aW50cHRyX3QgbmV3VmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihuZXdQb2ludGVyKSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obmV3Q29weVN0YXRlKTsK
KyAgICAgICAgcmV0dXJuIHdlYWtDb21wYXJlQW5kU3dhcCgmbV92YWx1ZSwgYml0d2lzZV9jYXN0
PHZvaWQqPihvbGRWYWx1ZSksIGJpdHdpc2VfY2FzdDx2b2lkKj4obmV3VmFsdWUpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSB2b2lkKiBtX3ZhbHVlOworfTsKKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitjbGFzcyBDb3B5QmFycmllciA6IHB1YmxpYyBDb3B5QmFycmllckJhc2Ug
eworcHVibGljOgorICAgIENvcHlCYXJyaWVyKCkKKyAgICB7CisgICAgfQogICAgIAotICAgIFQq
IGdldCgpIGNvbnN0CisgICAgQ29weUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVy
LCBUJiB2YWx1ZSkKKyAgICAgICAgOiBDb3B5QmFycmllckJhc2Uodm0sIG93bmVyLCAmdmFsdWUp
CiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZTsKICAgICB9CiAgICAgCi0gICAgVCogb3Bl
cmF0b3IqKCkgY29uc3QKKyAgICBDb3B5QmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3du
ZXIsIFQqIHZhbHVlKQorICAgICAgICA6IENvcHlCYXJyaWVyQmFzZSh2bSwgb3duZXIsIHZhbHVl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldCgpOworICAgIH0KKworICAgIFQqIGdldFdpdGhv
dXRCYXJyaWVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+
KENvcHlCYXJyaWVyQmFzZTo6Z2V0V2l0aG91dEJhcnJpZXIoKSk7CiAgICAgfQogICAgIAotICAg
IFQqIG9wZXJhdG9yLT4oKSBjb25zdAorICAgIFQqIGdldChjb25zdCBKU0NlbGwqIG93bmVyKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldCgpOworICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PFQqPihDb3B5QmFycmllckJhc2U6OmdldChvd25lcikpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAgIHsK
LSAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOwotICAgICAgICB2bS5oZWFwLndyaXRlQmFy
cmllcihvd25lcik7CisgICAgICAgIENvcHlCYXJyaWVyQmFzZTo6c2V0KHZtLCBvd25lciwgdmFs
dWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldFdpdGhvdXRXcml0ZUJhcnJpZXIoVCogdmFs
dWUpCisgICAgdm9pZCBzZXRXaXRob3V0QmFycmllcihUKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgQ29weUJhcnJpZXJCYXNlOjpzZXRXaXRo
b3V0QmFycmllcih2YWx1ZSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFs
dWUgPSAwOyB9CiAKLXByaXZhdGU6Ci0gICAgVCogbV92YWx1ZTsKKyAgICBib29sIHdlYWtDQVNX
aXRob3V0QmFycmllcihUKiBvbGRQb2ludGVyLCBDb3B5U3RhdGUgb2xkQ29weVN0YXRlLCBUKiBu
ZXdQb2ludGVyLCBDb3B5U3RhdGUgbmV3Q29weVN0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IENvcHlCYXJyaWVyQmFzZTo6d2Vha0NBU1dpdGhvdXRCYXJyaWVyKG9sZFBvaW50ZXIsIG9sZENv
cHlTdGF0ZSwgbmV3UG9pbnRlciwgbmV3Q29weVN0YXRlKTsKKyAgICB9CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIENvcHlXcml0ZUJhcnJpZXJfaAorI2VuZGlmIC8vIENv
cHlCYXJyaWVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9y
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlW
aXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAxOTA2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIGJvb2wgQ29weVZpc2l0b3I6OmNoZWNrSWZT
aG91bGRDb3B5KHZvaWQqIG9sZFB0cikKIHsKKyAgICBpZiAoIW9sZFB0cikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0Zv
cihvbGRQdHIpOwogICAgIGlmIChibG9jay0+aXNPdmVyc2l6ZSgpIHx8IGJsb2NrLT5pc1Bpbm5l
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5V3JpdGVCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29weVdyaXRlQmFycmllci5oCShyZXZpc2lvbiAxOTA2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5V3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29weVdyaXRlQmFycmllcl9oCi0j
ZGVmaW5lIENvcHlXcml0ZUJhcnJpZXJfaAotCi0jaW5jbHVkZSAiSGVhcC5oIgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBDb3B5V3JpdGVCYXJyaWVy
IHsKLXB1YmxpYzoKLSAgICBDb3B5V3JpdGVCYXJyaWVyKCkKLSAgICAgICAgOiBtX3ZhbHVlKDAp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3Qg
SlNDZWxsKiBvd25lciwgVCYgdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5zZXQodm0sIG93
bmVyLCAmdmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwg
Y29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5zZXQo
dm0sIG93bmVyLCB2YWx1ZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KLSAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIAotICAgIFQqIGdldCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgVCogb3BlcmF0
b3IqKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXQoKTsKLSAgICB9Ci0gICAgCi0g
ICAgVCogb3BlcmF0b3ItPigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0KCk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgc2V0KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCog
dmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKFQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy0+bV92YWx1ZSA9
IHZhbHVlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gMDsgfQot
Ci1wcml2YXRlOgotICAgIFQqIG1fdmFsdWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQot
I2VuZGlmIC8vIENvcHlXcml0ZUJhcnJpZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAJKHJldmlzaW9uIDE5MDY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEwLDYgKzEwMTAsMTIgQEAgdm9pZCBIZWFw
OjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogICAgIG1fc2xvdFZpc2l0b3IuYXBwZW5k
VG9NYXJrU3RhY2soY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CiB9CiAKK3ZvaWQqIEhlYXA6
OmNvcHlCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIHZvaWQqJiBwb2ludGVyKQoreworICAgIC8vIERv
IG5vdGhpbmcgZm9yIG5vdy4KKyAgICByZXR1cm4gcG9pbnRlcjsKK30KKwogdm9pZCBIZWFwOjpj
b2xsZWN0QW5kU3dlZXAoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSkKIHsKICAgICBpZiAo
IW1faXNTYWZlVG9Db2xsZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2
aXNpb24gMTkwNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDggQEAgcHVibGljOgogICAgIHZvaWQgd3JpdGVCYXJy
aWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0
IEpTQ2VsbCosIEpTQ2VsbCopOwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQq
IGNvcHlCYXJyaWVyKGNvbnN0IEpTQ2VsbCogb3duZXIsIHZvaWQqJiBjb3BpZWRTcGFjZVBvaW50
ZXIpOworCiAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIoKSB7IHJl
dHVybiBtX3dyaXRlQmFycmllckJ1ZmZlcjsgfQogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJC
dWZmZXIoSlNDZWxsKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElu
bGluZXMuaAkocmV2aXNpb24gMTkwNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBI
ZWFwSW5saW5lc19oCiAjZGVmaW5lIEhlYXBJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkNvcHlCYXJy
aWVyLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAxOTA2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTQsNiArNzU0LDExIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kaXRpb24sIGxlZnRIYW5kU2lkZSwg
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICNlbmRpZgogICAgIH0KKworICAgIEp1bXAgYnJh
bmNoSWZOb3RUb1NwYWNlKEdQUlJlZyBzdG9yYWdlR1BSKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaFRlc3QzMihOb25aZXJvLCBzdG9yYWdlR1BSLCBUcnVzdGVkSW1tMzIoQ29weUJhcnJp
ZXI6OnNwYWNlQml0cykpOworICAgIH0KICAgICAKICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNz
Rm9yQnl0ZU9mZnNldChwdHJkaWZmX3QgYnl0ZU9mZnNldCkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxOTA2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNzQsNiArMTE3NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9k
aXJlY3RfcG5hbWUoSW5zdHIKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAg
IG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90VG9TcGFjZShyZWdUMCkpOwogICAgIHN1YjMyKEFkZHJlc3MocmVnVDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1Qy
KTsKICAgICBuZWczMihyZWdUMik7CiAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9m
ZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKQEAgLTExOTAsNiArMTE5MSw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZGlyZWN0X3BuYW1lKEkKICAgICBpbnQgYmFzZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0Nl
bGwoaXRlciwgYmFzZSk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKIAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSk7CiAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMTkwNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5Niw2ICsxMTk2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cgogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBv
ZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QwKSk7CiAgICAgc3ViMzIoQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgcmVnVDEpOwogICAgIG5lZzMyKHJlZ1QxKTsKICAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMSwgcmVnVDEpOwpAQCAtMTIxMiw2ICsxMjEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9kaXJlY3RfcG5hbWUoSQogICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsKICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDE5MDY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1LDcgQEAgSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXREb3VibGVMb2FkKEluc3RydQogICAgIAogICAgIGJhZFR5cGUgPSBwYXRjaGFi
bGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihEb3VibGVTaGFwZSkpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QyKSk7
CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CiAgICAgbG9h
ZERvdWJsZShCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgZnBSZWdUMCk7CiAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hEb3VibGUoRG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZCwgZnBSZWdUMCwgZnBSZWdUMCkpOwpAQCAtMTc4LDYgKzE3OSw3IEBAIEpJVDo6SnVtcExpc3Qg
SklUOjplbWl0Q29udGlndW91c0xvYWQoSW4KICAgICAKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxl
QnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QyKSk7
CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CiAgICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7CiAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0NjQoWmVybywgcmVnVDApKTsKQEAgLTE5Myw2ICsxOTUs
NyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUxvYWQoCiAgICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaDMyKEFib3ZlLCByZWdUMywgVHJ1c3RlZEltbTMyKFNsb3dQdXRB
cnJheVN0b3JhZ2VTaGFwZSAtIEFycmF5U3RvcmFnZVNoYXBlKSk7CiAKICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90VG9TcGFjZShyZWdUMikpOwogICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
KSwgcmVnVDApOwpAQCAtMjUxLDYgKzI1NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfdmFsKEluc3RydWMKICAgICBub3RTdHJpbmcubGluayh0aGlzKTsKICAgICBub25DZWxsLmxp
bmsodGhpcyk7CiAgICAgCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyByZWFkIGJhcnJpZXIK
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCiAgICAgCkBAIC0zMjMsNiArMzI3LDcgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91cwogICAgIGJhZFR5cGUgPSBw
YXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1No
YXBlKSk7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2x3b0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRv
U3BhY2UocmVnVDIpKTsKICAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSk7CiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7CkBAIC0zNzgsNiArMzgz
LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeQogICAgIAogICAg
IGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0z
MihBcnJheVN0b3JhZ2VTaGFwZSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RUb1NwYWNlKHJlZ1QyKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSkpOwogCiAgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3Q2NChaZXJvLCBC
YXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKQEAgLTQ0OCw2ICs0NTQsOSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBw
cm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBub3Qg
YXJyYXkgY2hlY2sKICAgICAKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHJlYWQgYmFycmll
cgorICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gb3V0IG9mIGJvdW5kcworICAgIAogICAgIEpJ
VEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwogICAgIHN3aXRjaCAo
bW9kZSkgewogICAgIGNhc2UgSklUSW50MzI6CkBAIC00NTgsMTEgKzQ2Nyw2IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWMKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIAotICAgIEp1bXAgc2tpcFByb2ZpbGluZyA9IGp1bXAoKTsKLSAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7IC8vIG91dCBvZiBib3VuZHMKLSAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNT
cGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBza2lwUHJvZmlsaW5nLmxpbmsodGhpcyk7Ci0gICAg
CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihiYXNlLCByZWdUMCk7CkBAIC03OTYsNiArODAwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoSW5zdHJ1YwogICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmso
dGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaCkpOwogICAgICAgICAgICAgbmVnMzIo
b2Zmc2V0KTsKICAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsK
ICAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBy
ZXN1bHQpOwpAQCAtODc1LDggKzg4MCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUoSW5zCiAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsUHJvcGVydHkgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIGJhZCBzdHJ1Y3R1cmUKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyByZWFk
IGJhcnJpZXIKKyAgICB9CiAKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFZhciBpbmplY3Rpb25zIGNoZWNrLgogICAgICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7CkBAIC05MzgsNiArOTQ1LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VG9TcGFjZShyZWdUMCkpOwogICAgICAgICAg
ICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1Qx
KTsKICAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpKTsKQEAgLTEwMzEsOCArMTAzOSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X3RvX3Njb3BlKEluc3RyCiAgICAgICAgICB8fCByZXNvbHZlVHlwZSA9PSBMb2NhbENsb3N1cmVW
YXIpCiAgICAgICAgICYmIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQtPnN0
YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkKICAgICAgICAgbGlua0NvdW50Kys7Ci0gICAgaWYgKHJl
c29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgbGlua0NvdW50Kys7CisgICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsaW5rQ291bnQrKzsgLy8g
YmFkIHN0cnVjdHVyZQorICAgICAgICBsaW5rQ291bnQrKzsgLy8gcmVhZCBiYXJyaWVyCisgICAg
fQogICAgIGlmIChnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpICE9IEluaXRpYWxpemF0
aW9uICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgLy8gVERaIGNoZWNrLgog
ICAgICAgICBsaW5rQ291bnQrKzsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gVW5yZXNvbHZlZFBy
b3BlcnR5IHx8IHJlc29sdmVUeXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMTkwNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcs
NyArOTcsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAg
aWYgKHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzKSB7CiAgICAgICAgIHZpc2l0b3IuY29weUxhdGVy
KAogICAgICAgICAgICAgdGhpc09iamVjdCwgRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVzQ29weVRv
a2VuLAotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0KCksIHRoaXNPYmpl
Y3QtPm92ZXJyaWRlc1NpemUoKSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyaWRl
cy5nZXRXaXRob3V0QmFycmllcigpLCB0aGlzT2JqZWN0LT5vdmVycmlkZXNTaXplKCkpOwogICAg
IH0KIH0KIApAQCAtMTA4LDE0ICsxMDgsMTEgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlC
YWNraW5nU3RvcmUoSgogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKHRva2VuID09IERpcmVjdEFy
Z3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbik7CiAgICAgCi0gICAgYm9vbCogb2xkT3ZlcnJpZGVz
ID0gdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0KCk7Ci0gICAgaWYgKCFvbGRPdmVycmlkZXMp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKKyAgICB2b2lkKiBvbGRPdmVycmlkZXMgPSB0aGlzT2Jq
ZWN0LT5tX292ZXJyaWRlcy5nZXRXaXRob3V0QmFycmllcigpOwogICAgIGlmICh2aXNpdG9yLmNo
ZWNrSWZTaG91bGRDb3B5KG9sZE92ZXJyaWRlcykpIHsKICAgICAgICAgYm9vbCogbmV3T3ZlcnJp
ZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2Jq
ZWN0LT5vdmVycmlkZXNTaXplKCkpKTsKICAgICAgICAgbWVtY3B5KG5ld092ZXJyaWRlcywgb2xk
T3ZlcnJpZGVzLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1f
b3ZlcnJpZGVzLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobmV3T3ZlcnJpZGVzKTsKKyAgICAgICAg
dGhpc09iamVjdC0+bV9vdmVycmlkZXMuc2V0V2l0aG91dEJhcnJpZXIobmV3T3ZlcnJpZGVzKTsK
ICAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZE92ZXJyaWRlcywgdGhpc09iamVjdC0+b3ZlcnJp
ZGVzU2l6ZSgpKTsKICAgICB9CiB9CkBAIC0xMzUsOSArMTMyLDEwIEBAIHZvaWQgRGlyZWN0QXJn
dW1lbnRzOjpvdmVycmlkZVRoaW5ncyhWTSYKICAgICAKICAgICB2b2lkKiBiYWNraW5nU3RvcmU7
CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgb3Zl
cnJpZGVzU2l6ZSgpLCAmYmFja2luZ1N0b3JlKSk7Ci0gICAgbV9vdmVycmlkZXMuc2V0KHZtLCB0
aGlzLCBzdGF0aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKSk7CisgICAgYm9vbCogb3ZlcnJp
ZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CisgICAgbV9vdmVycmlkZXMu
c2V0KHZtLCB0aGlzLCBvdmVycmlkZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3Ro
OyBpLS07KQotICAgICAgICBtX292ZXJyaWRlcy5nZXQoKVtpXSA9IGZhbHNlOworICAgICAgICBv
dmVycmlkZXNbaV0gPSBmYWxzZTsKIH0KIAogdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRl
VGhpbmdzSWZOZWNlc3NhcnkoVk0mIHZtKQpAQCAtMTQ5LDcgKzE0Nyw3IEBAIHZvaWQgRGlyZWN0
QXJndW1lbnRzOjpvdmVycmlkZVRoaW5nc0lmTmUKIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVy
cmlkZUFyZ3VtZW50KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgb3ZlcnJpZGVUaGlu
Z3NJZk5lY2Vzc2FyeSh2bSk7Ci0gICAgbV9vdmVycmlkZXMuZ2V0KClbaW5kZXhdID0gdHJ1ZTsK
KyAgICBtX292ZXJyaWRlcy5nZXQodGhpcylbaW5kZXhdID0gdHJ1ZTsKIH0KIAogdm9pZCBEaXJl
Y3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5oCShyZXZpc2lvbiAxOTA2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
aXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgYm9vbCBjYW5BY2Nlc3NJbmRleFF1aWNrbHkodWludDMyX3QgaSkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgKCFtX292ZXJyaWRlcyB8fCAh
bV9vdmVycmlkZXMuZ2V0KClbaV0pOworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICgh
bV9vdmVycmlkZXMgfHwgIW1fb3ZlcnJpZGVzLmdldCh0aGlzKVtpXSk7CiAgICAgfQogCiAgICAg
Ym9vbCBjYW5BY2Nlc3NBcmd1bWVudEluZGV4UXVpY2tseUluREZHKHVpbnQzMl90IGkpIGNvbnN0
CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlv
bj4gbV9jYWxsZWU7CiAgICAgdWludDMyX3QgbV9sZW5ndGg7IC8vIEFsd2F5cyB0aGUgYWN0dWFs
IGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMgYW5kIG5ldmVyIHdoYXQgd2FzIHN0b3JlZCBp
bnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCiAgICAgdWludDMyX3QgbV9taW5DYXBhY2l0eTsgLy8g
VGhlIG1heCBvZiB0aGlzIGFuZCBsZW5ndGggZGV0ZXJtaW5lcyB0aGUgY2FwYWNpdHkgb2YgdGhp
cyBvYmplY3QuIEl0IG1heSBiZSB0aGUgYWN0dWFsIGNhcGFjaXR5LCBvciBtYXliZSBzb21ldGhp
bmcgc21hbGxlci4gV2UgYXJyYW5nZSBpdCB0aGlzIHdheSB0byBiZSBraW5kIHRvIHRoZSBKSVRz
LgotICAgIENvcHlXcml0ZUJhcnJpZXI8Ym9vbD4gbV9vdmVycmlkZXM7IC8vIElmIG5vbi1udWxs
LCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRl
cmlhbGl6ZWQgcHJvcGVydGllcy4KKyAgICBDb3B5QmFycmllcjxib29sPiBtX292ZXJyaWRlczsg
Ly8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIg
YXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2
aXNpb24gMTkwNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Miw2ICszOTIsNyBAQCBib29sIEpTQXJyYXk6OnNldExl
bmd0aFdpdGhBcnJheVN0b3JhZ2UoCiAKIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQogeworICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIGlmICgh
bmV3TGVuZ3RoKQpAQCAtNDA4LDcgKzQwOSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4
ZWNTdGF0ZSogZXhlYywKICAgICBjYXNlIEFycmF5V2l0aEludDMyOgogICAgIGNhc2UgQXJyYXlX
aXRoRG91YmxlOgogICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogewotICAgICAgICBpZiAo
bmV3TGVuZ3RoID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgaWYgKG5l
d0xlbmd0aCA9PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGlmIChuZXdMZW5ndGggPj0gTUFYX0FSUkFZX0lOREVYIC8vIFRoaXMg
Y2FzZSBlbnN1cmVzIHRoYXQgd2UgY2FuIGRvIGZhc3QgcHVzaC4KICAgICAgICAgICAgIHx8IChu
ZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWApAQCAtNDE3LDEyICs0MTgsMTIgQEAg
Ym9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAg
IGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sCiAgICAgICAgICAgICAgICAgZW5zdXJl
QXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgfQotICAgICAgICBpZiAobmV3TGVu
Z3RoID4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7CisgICAgICAgIGlmIChuZXdMZW5n
dGggPiBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7CiAgICAgICAgICAgICBlbnN1cmVMZW5n
dGgoZXhlYy0+dm0oKSwgbmV3TGVuZ3RoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoVG9DbGVhciA9IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSAtIG5ld0xlbmd0aDsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoVG9DbGVh
ciA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgLSBuZXdMZW5ndGg7CiAgICAgICAgIHVuc2ln
bmVkIGNvc3RUb0FsbG9jYXRlTmV3QnV0dGVyZmx5ID0gNjQ7IC8vIGEgaGV1cmlzdGljLgogICAg
ICAgICBpZiAobGVuZ3RoVG9DbGVhciA+IG5ld0xlbmd0aCAmJiBsZW5ndGhUb0NsZWFyID4gY29z
dFRvQWxsb2NhdGVOZXdCdXR0ZXJmbHkpIHsKICAgICAgICAgICAgIHJlYWxsb2NhdGVBbmRTaHJp
bmtCdXR0ZXJmbHkoZXhlYy0+dm0oKSwgbmV3TGVuZ3RoKTsKQEAgLTQzMCwxMyArNDMxLDEzIEBA
IGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChpbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUpIHsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tID4g
bmV3TGVuZ3RoOykKLSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCk7IGktLSA+IG5ld0xlbmd0aDspCisgICAgICAgICAgICAgICAgYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBp
LS0gPiBuZXdMZW5ndGg7KQotICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uY2xlYXIoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCk7IGktLSA+IG5ld0xlbmd0aDspCisgICAgICAgICAgICAgICAgYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgfQotICAgICAgICBtX2J1dHRl
cmZseS0+c2V0UHVibGljTGVuZ3RoKG5ld0xlbmd0aCk7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0
UHVibGljTGVuZ3RoKG5ld0xlbmd0aCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICAgICAgCkBAIC00NTIsNTEgKzQ1Myw1MyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVj
U3RhdGUqIGV4ZWMsCiAKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICAK
ICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhV
bmRlY2lkZWQ6Ci0gICAgICAgIGlmICghbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAg
ICAgICBpZiAoIWJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICAgICAgLy8gV2UgaGF2ZSBub3RoaW5nIGJ1dCBob2xlcy4gU28s
IGRyb3AgZG93biB0byB0aGUgc2xvdyB2ZXJzaW9uLgogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBBcnJheVdpdGhJbnQzMjoKICAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6
IHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwog
ICAgICAgICAKICAgICAgICAgaWYgKCFsZW5ndGgtLSkKICAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoIDwgbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobGVuZ3RoIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmdldCgpOwogICAgICAgICBp
ZiAodmFsdWUpIHsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3Ro
XS5jbGVhcigpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5n
dGgpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5jbGVhcigp
OworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKICAgICAg
ICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAgIGlmICgh
bGVuZ3RoLS0pCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCi0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KSk7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KClbbGVuZ3RoXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoIDwgYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGln
dW91c0RvdWJsZSgpW2xlbmd0aF07CiAgICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkgewotICAg
ICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtsZW5ndGhdID0gUE5hTjsK
LSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAg
ICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2xlbmd0aF0gPSBQTmFOOworICAg
ICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgCiAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgICAgICBpZiAoIWxlbmd0aCkg
ewpAQCAtNTQ3LDYgKzU1MCw4IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhl
YykKIC8vICAtIHB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9yZXMgdGhl
IHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCiB2b2lkIEpTQXJyYXk6OnB1c2go
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdU
eXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6IHsKICAgICAgICAgY3JlYXRlSW5pdGlhbFVu
ZGVjaWRlZChleGVjLT52bSgpLCAwKTsKQEAgLTU2NiwxMSArNTcxLDExIEBAIHZvaWQgSlNBcnJh
eTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsKLSAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOwotICAgICAgICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7
Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbbGVuZ3RoXS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQ
dWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlmIChsZW5ndGggPCBidXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpKSB7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2xl
bmd0aF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgICAgICBidXR0ZXJm
bHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTU4NiwxMSArNTkxLDExIEBAIHZvaWQgSlNBcnJheTo6cHVz
aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICB9CiAKICAgICBjYXNlIEFycmF5V2l0aENvbnRp
Z3VvdXM6IHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOwotICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSk7Ci0gICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkp
IHsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1Ymxp
Y0xlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBidXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IGJ1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpIHsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uc2V0
KGV4ZWMtPnZtKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVi
bGljTGVuZ3RoKGxlbmd0aCArIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIApAQCAtNjE4LDExICs2MjMsMTEgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwotICAgICAgICBB
U1NFUlQobGVuZ3RoIDw9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIGlm
IChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbbGVuZ3RoXSA9IHZhbHVlQXNEb3VibGU7Ci0g
ICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOworICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAg
ICBBU1NFUlQobGVuZ3RoIDw9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBp
ZiAobGVuZ3RoIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgYnV0
dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbbGVuZ3RoXSA9IHZhbHVlQXNEb3VibGU7CisgICAg
ICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTY0OCw3ICs2NTMsNyBAQCB2b2lk
IEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0
b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKICAgICAgICAgLy8gRmFz
dCBjYXNlIC0gcHVzaCB3aXRoaW4gdmVjdG9yLCBhbHdheXMgdXBkYXRlIG1fbGVuZ3RoICYgbV9u
dW1WYWx1ZXNJblZlY3Rvci4KICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bGVu
Z3RoKCk7CkBAIC02OTYsOSArNzAxLDkgQEAgSlNBcnJheSogSlNBcnJheTo6ZmFzdFNsaWNlKEV4
ZWNTdGF0ZSYgZQogCiAgICAgICAgIGF1dG8mIHJlc3VsdEJ1dHRlcmZseSA9ICpyZXN1bHRBcnJh
eS0+YnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChhcnJheVR5cGUgPT0gQXJyYXlXaXRoRG91Ymxl
KQotICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCku
ZGF0YSgpLCBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5k
ZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAgIG1lbWNweShyZXN1bHRC
dXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMp
LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUp
ICogY291bnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVy
Zmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgp
ICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOworICAgICAgICAgICAgbWVt
Y3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkg
KiBjb3VudCk7CiAgICAgICAgIHJlc3VsdEJ1dHRlcmZseS5zZXRQdWJsaWNMZW5ndGgoY291bnQp
OwogCiAgICAgICAgIHJldHVybiByZXN1bHRBcnJheTsKQEAgLTcxNSw4ICs3MjAsOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0FycmF5OjpmYXN0Q29uY2F0V2l0aChFCiAgICAgVk0mIHZtID0gZXhlYy52
bSgpOwogICAgIEFTU0VSVChuZXdBcnJheVR5cGUgPT0gZmFzdENvbmNhdFR5cGUodm0sICp0aGlz
LCBvdGhlckFycmF5KSk7CiAKLSAgICB1bnNpZ25lZCB0aGlzQXJyYXlTaXplID0gbV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpOwotICAgIHVuc2lnbmVkIG90aGVyQXJyYXlTaXplID0gb3RoZXJB
cnJheS5tX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdGhpc0FycmF5
U2l6ZSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCk7CisgICAgdW5zaWdu
ZWQgb3RoZXJBcnJheVNpemUgPSBvdGhlckFycmF5Lm1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVi
bGljTGVuZ3RoKCk7CiAgICAgQVNTRVJUKHRoaXNBcnJheVNpemUgKyBvdGhlckFycmF5U2l6ZSA8
IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpOwogCiAgICAgU3RydWN0dXJlKiByZXN1bHRTdHJ1Y3R1
cmUgPSBleGVjLmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5ld0FycmF5VHlwZSk7CkBAIC03MjgsMTEgKzczMywxMSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0FycmF5OjpmYXN0Q29uY2F0V2l0aChFCiAgICAgYXV0byYgb3Ro
ZXJCdXR0ZXJmbHkgPSAqb3RoZXJBcnJheS5idXR0ZXJmbHkoKTsKICAgICBpZiAobmV3QXJyYXlU
eXBlID09IEFycmF5V2l0aERvdWJsZSkgewogICAgICAgICBhdXRvIGJ1ZmZlciA9IHJlc3VsdEJ1
dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpOwotICAgICAgICBtZW1jcHkoYnVmZmVy
LCBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUp
ICogdGhpc0FycmF5U2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogdGhp
c0FycmF5U2l6ZSk7CiAgICAgICAgIG1lbWNweShidWZmZXIgKyB0aGlzQXJyYXlTaXplLCBvdGhl
ckJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiBv
dGhlckFycmF5U2l6ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBidWZmZXIgPSByZXN1
bHRCdXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwg
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNB
cnJheVNpemUpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBtX2J1dHRlcmZseS5nZXQodGhpcykt
PmNvbnRpZ3VvdXMoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNBcnJheVNpemUpOwog
ICAgICAgICBtZW1jcHkoYnVmZmVyICsgdGhpc0FycmF5U2l6ZSwgb3RoZXJCdXR0ZXJmbHkuY29u
dGlndW91cygpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogb3RoZXJBcnJheVNpemUpOwogICAg
IH0KIApAQCAtODA1LDggKzgxMCw5IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJh
eVN0b3JhZ2UKICAgICAgICAgLy8gQWRqdXN0IHRoZSBCdXR0ZXJmbHkgYW5kIHRoZSBpbmRleCBi
aWFzLiBXZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBoZXJlIGJlY2F1c2Ugd2UncmUgY2hhbmdpbmcK
ICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBCdXR0ZXJmbHksIHdoaWNoIG5lZWRzIHRvIHBv
aW50IGF0IHRoZSBmaXJzdCBpbmRleGVkIHByb3BlcnR5IGluIHRoZSB1c2VkCiAgICAgICAgIC8v
IHBvcnRpb24gb2YgdGhlIHZlY3Rvci4KLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91dFdy
aXRlQmFycmllcihtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KSk7Ci0gICAg
ICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5zaGlmdChzdHJ1Y3R1cmUo
KSwgY291bnQpOworICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcihidXR0ZXJm
bHkpOworICAgICAgICBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAg
ICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgKz0gY291bnQ7CiAKICAgICAgICAgLy8gU2luY2Ugd2Un
cmUgY29uc3VtaW5nIHBhcnQgb2YgdGhlIHZlY3RvciBieSBtb3ZpbmcgaXRzIGJlZ2lubmluZyB0
byB0aGUgbGVmdCwKQEAgLTg0OCw2ICs4NTQsOCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRX
aXRoQW55SW5kZXhpbmdUCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBSRUxFQVNF
X0FTU0VSVChjb3VudCA+IDApOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQodGhpcyk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAg
IGNhc2UgQXJyYXlDbGFzczoKQEAgLTg1OSw3ICs4NjcsNyBAQCBib29sIEpTQXJyYXk6OnNoaWZ0
Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6
CiAgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExl
bmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgb2xk
TGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY291bnQgPD0gb2xkTGVuZ3RoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG1heSBoYXZl
IHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgc2hpZnQuIFdlJ3JlIHdpbGxpbmcg
dG8gZG8KQEAgLTg3NCwyOCArODgyLDI4IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhB
bnlJbmRleGluZ1QKICAgICAgICAgdW5zaWduZWQgZW5kID0gb2xkTGVuZ3RoIC0gY291bnQ7CiAg
ICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUodm0pLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5
cGUodm0pKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwg
ZW5kOyArK2kpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29u
dGlndW91cygpW2kgKyBjb3VudF0uZ2V0KCk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2ID0g
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5nZXQoKTsKICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoIXYpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uo
dm0sIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtZW1tb3ZlKG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgCi0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291bnQsIAorICAgICAgICAgICAg
bWVtbW92ZShidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4LCAKKyAg
ICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4
ICsgY291bnQsIAogICAgICAgICAgICAgICAgIHNpemVvZihKU1ZhbHVlKSAqIChlbmQgLSBzdGFy
dEluZGV4KSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQ7IGkg
PCBvbGRMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uY2xlYXIoKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFy
KCk7CiAgICAgICAgIAotICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKG9sZExl
bmd0aCAtIGNvdW50KTsKKyAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgob2xkTGVu
Z3RoIC0gY291bnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIAogICAg
IGNhc2UgQXJyYXlXaXRoRG91YmxlOiB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0g
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQg
PD0gb2xkTGVuZ3RoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIHdhbGsg
dGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgc2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8gZG8KQEAg
LTkxMCwyMiArOTE4LDIyIEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGlu
Z1QKICAgICAgICAgdW5zaWduZWQgZW5kID0gb2xkTGVuZ3RoIC0gY291bnQ7CiAgICAgICAgIGlm
ICh0aGlzLT5zdHJ1Y3R1cmUodm0pLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0pKSB7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91
YmxlKClbaSArIGNvdW50XTsKKyAgICAgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2kgKyBjb3VudF07CiAgICAgICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHYgIT0gdikpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh2bSwgc3Rh
cnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0g
djsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHY7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtZW1tb3ZlKG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwKLSAgICAg
ICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0
SW5kZXggKyBjb3VudCwKKyAgICAgICAgICAgIG1lbW1vdmUoYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291bnQsCiAgICAgICAg
ICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogKGVuZCAtIHN0YXJ0SW5kZXgpKTsKICAgICAgICAg
fQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQ7IGkgPCBvbGRMZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAg
ICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwogICAgICAg
ICAKLSAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChvbGRMZW5ndGggLSBjb3Vu
dCk7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKQEAgLTk4Niw2ICs5OTQs
OCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAKIGJvb2wgSlNB
cnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogeworICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIAogICAgIHN3aXRjaCAoaW5kZXhp
bmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgY2FzZSBBcnJheVdpdGhVbmRl
Y2lkZWQ6CkBAIC05OTQsNyArMTAwNCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0
aEFueUluZGV4aW4KIAogICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6CiAgICAgY2FzZSBBcnJheVdp
dGhDb250aWd1b3VzOiB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIHdh
bGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgdW5zaGlmdC4gV2UncmUgd2lsbGluZyB0byBk
byBzbwogICAgICAgICAvLyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCkBAIC0xMDAy
LDE5ICsxMDEyLDIwIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4K
ICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0
YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAg
ICAKICAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG9sZExlbmd0aCArIGNvdW50KTsK
KyAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogCiAgICAgICAgIC8v
IFdlIGhhdmUgdG8gY2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3ZSBzdGFydCBtb3ZpbmcgdGhpbmdz
IGFyb3VuZCBzbyB0aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5IAogICAgICAgICAvLyB0aHJvdWdo
IHNoaWZ0aW5nIGFuZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxkIGhhdmUgYmVlbiBpbiBBcnJheVN0
b3JhZ2UgbW9kZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkTGVuZ3RoOyBpLS0gPiBz
dGFydEluZGV4OykgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLmdldCgpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFy
dEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAg
fQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZExlbmd0aDsgaS0tID4gc3RhcnRJbmRl
eDspIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uZ2V0KCk7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2KTsKLSAgICAgICAgICAgIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwor
ICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKHYpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBOT1RFOiB3
ZSdyZSBsZWF2aW5nIGJlaW5nIGdhcmJhZ2UgaW4gdGhlIHBhcnQgb2YgdGhlIGFycmF5IHRoYXQg
d2Ugc2hpZnRlZCBvdXQKQEAgLTEwMjYsNyArMTAzNyw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50V2l0aEFueUluZGV4aW4KICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRo
RG91YmxlOiB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIHdhbGsgdGhl
IGVudGlyZSBhcnJheSB0byBkbyB0aGUgdW5zaGlmdC4gV2UncmUgd2lsbGluZyB0byBkbyBzbwog
ICAgICAgICAvLyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCkBAIC0xMDM0LDE5ICsx
MDQ1LDIwIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4KICAgICAg
ICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5k
ZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAgICAKICAg
ICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG9sZExlbmd0aCArIGNvdW50KTsKKyAgICAg
ICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgICAgICAKICAgICAgICAg
Ly8gV2UgaGF2ZSB0byBjaGVjayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1vdmluZyB0aGlu
Z3MgYXJvdW5kIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAgIC8vIHRocm91
Z2ggc2hpZnRpbmcgYW5kIHRoZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGluIEFycmF5
U3RvcmFnZSBtb2RlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGktLSA+
IHN0YXJ0SW5kZXg7KSB7Ci0gICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+Y29u
dGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHYgIT0gdikpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywg
c3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGktLSA+IHN0YXJ0
SW5kZXg7KSB7Ci0gICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbaV07CisgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldOwogICAgICAgICAgICAgQVNTRVJUKHYgPT0gdik7Ci0gICAgICAgICAgICBt
X2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2kgKyBjb3VudF0gPSB2OworICAgICAgICAg
ICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaSArIGNvdW50XSA9IHY7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIC8vIE5PVEU6IHdlJ3JlIGxlYXZpbmcgYmVpbmcgZ2FyYmFn
ZSBpbiB0aGUgcGFydCBvZiB0aGUgYXJyYXkgdGhhdCB3ZSBzaGlmdGVkIG91dApAQCAtMTA3Miw2
ICsxMDg0LDggQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4ZQogICAg
IHVuc2lnbmVkIGkgPSAwOwogICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHZlY3RvcjsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KHRoaXMpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAg
ICBjYXNlIEFycmF5Q2xhc3M6CkBAIC0xMDg1LDE2ICsxMDk5LDE2IEBAIHZvaWQgSlNBcnJheTo6
ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhJ
bnQzMjoKICAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKLSAgICAgICAgdmVjdG9yRW5k
ID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwotICAgICAgICB2ZWN0b3IgPSBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKKyAgICAgICAgdmVjdG9yRW5kID0gYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yID0gYnV0dGVyZmx5LT5jb250aWd1b3Vz
KCkuZGF0YSgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJy
YXlXaXRoRG91YmxlOiB7CiAgICAgICAgIHZlY3RvciA9IDA7CiAgICAgICAgIHZlY3RvckVuZCA9
IDA7Ci0gICAgICAgIGZvciAoOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUo
KVtpXTsKKyAgICAgICAgZm9yICg7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kp
IHsKKyAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClb
aV07CiAgICAgICAgICAgICBpZiAodiAhPSB2KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgYXJncy5hcHBlbmQoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdikp
OwpAQCAtMTEwMyw3ICsxMTE3LDcgQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3Rh
dGUqIGV4ZQogICAgIH0KICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICB2ZWN0b3IgPSBzdG9y
YWdlLT5tX3ZlY3RvcjsKICAgICAgICAgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPmxlbmd0aCgp
LCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CkBAIC0xMTQxLDYgKzExNTUsOCBAQCB2b2lkIEpT
QXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgLy8gRklYTUU6IFdoYXQgcHJl
dmVudHMgdGhpcyBmcm9tIGJlaW5nIGNhbGxlZCB3aXRoIGEgUnVudGltZUFycmF5PyBUaGUgbGVu
Z3RoIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiAwIGluIHRoYXQgY2FzZS4KICAgICBBU1NF
UlQobGVuZ3RoID09IHRoaXMtPmxlbmd0aCgpKTsKIAorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBl
KCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJldHVybjsKQEAgLTExNTMsMTcg
KzExNjksMTcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKgogICAg
ICAgICAKICAgICBjYXNlIEFycmF5V2l0aEludDMyOgogICAgIGNhc2UgQXJyYXlXaXRoQ29udGln
dW91czogewotICAgICAgICB2ZWN0b3IgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEo
KTsKLSAgICAgICAgdmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAg
ICAgICB2ZWN0b3IgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7CisgICAgICAgIHZl
Y3RvckVuZCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhEb3VibGU6IHsKICAgICAgICAgdmVjdG9y
ID0gMDsKICAgICAgICAgdmVjdG9yRW5kID0gMDsKLSAgICAgICAgZm9yICg7IGkgPCBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0
ZXJmbHkoKS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgZG91YmxlIHYgPSBtX2J1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICBmb3IgKDsgaSA8IGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5j
b250aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgICAgICBpZiAodiAhPSB2KQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAt
IG9mZnNldCkgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2KTsKQEAgLTExNzIs
NyArMTE4OCw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSoKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAg
ICAgICAgIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsK
ICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAxOTA2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg4LDEwICs4OCwxMCBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29u
dGV4dDo6CiAgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYXJyYXlCdWZmZXIsCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQogICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgICwgbV92ZWN0b3Ioc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9mZnNldCkKICAg
ICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAsIG1fbW9kZShXYXN0ZWZ1bFR5cGVkQXJyYXkpCiB7
CisgICAgbV92ZWN0b3IgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEo
KSkgKyBieXRlT2Zmc2V0OwogICAgIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyOwogICAg
IGluZGV4aW5nSGVhZGVyLnNldEFycmF5QnVmZmVyKGFycmF5QnVmZmVyLmdldCgpKTsKICAgICBt
X2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAwLCAwLCAwLCB0cnVlLCBpbmRleGlu
Z0hlYWRlciwgMCk7CkBAIC0xMDEsMTkgKzEwMSwxOSBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyLAogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCwgRGF0YVZpZXdUYWcpCiAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCi0g
ICAgLCBtX3ZlY3RvcihzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkg
KyBieXRlT2Zmc2V0KQogICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICwgbV9tb2RlKERhdGFW
aWV3TW9kZSkKICAgICAsIG1fYnV0dGVyZmx5KDApCiB7CisgICAgbV92ZWN0b3IgPSBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0OwogfQogCiBK
U0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25D
b250ZXh0JiBjb250ZXh0KQogICAgIDogQmFzZSh2bSwgY29udGV4dC5zdHJ1Y3R1cmUoKSwgY29u
dGV4dC5idXR0ZXJmbHkoKSkKLSAgICAsIG1fdmVjdG9yKGNvbnRleHQudmVjdG9yKCkpCiAgICAg
LCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQogICAgICwgbV9tb2RlKGNvbnRleHQubW9kZSgp
KQogeworICAgIG1fdmVjdG9yLnNldFdpdGhvdXRCYXJyaWVyKHN0YXRpY19jYXN0PGNoYXIqPihj
b250ZXh0LnZlY3RvcigpKSk7CiB9CiAKIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3
OjpmaW5hbGl6ZShKU0NlbGwqCiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwogICAgIEFTU0VSVCh0aGlzT2Jq
ZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9
PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3Zl
cnNpemVUeXBlZEFycmF5KQotICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7
CisgICAgICAgIGZhc3RGcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldFdpdGhvdXRCYXJyaWVy
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMTkwNjc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gaW1wbCgpOwogICAgIHZvaWQgbmV1dGVyKCk7CiAgICAgCi0gICAgdm9p
ZCogdmVjdG9yKCkgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICB2b2lkKiB2ZWN0b3IoKSB7IHJl
dHVybiBtX3ZlY3Rvci5nZXQodGhpcyk7IH0KICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KCk7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KIApAQCAtMTc3
LDcgKzE3Nyw3IEBAIHByaXZhdGU6CiBwcm90ZWN0ZWQ6CiAgICAgQXJyYXlCdWZmZXIqIGV4aXN0
aW5nQnVmZmVySW5CdXR0ZXJmbHkoKTsKIAotICAgIHZvaWQqIG1fdmVjdG9yOworICAgIENvcHlC
YXJyaWVyPGNoYXI+IG1fdmVjdG9yOyAvLyB0aGlzIGlzIHJlYWxseSBhIHZvaWQqLCBidXQgdm9p
ZCB3b3VsZCBub3Qgd29yayBoZXJlLgogICAgIHVpbnQzMl90IG1fbGVuZ3RoOwogICAgIFR5cGVk
QXJyYXlNb2RlIG1fbW9kZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkocmV2aXNpb24gMTkw
Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIHZvaWQgSlNB
cnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpCiB7CiAgICAgQVNTRVJUKGhhc0FycmF5QnVmZmVyKCkp
OwogICAgIG1fbGVuZ3RoID0gMDsKLSAgICBtX3ZlY3RvciA9IDA7CisgICAgbV92ZWN0b3IuY2xl
YXIoKTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0
KCkKQEAgLTY4LDcgKzY4LDcgQEAgaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3Ojpi
eXRlTwogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBwdHJkaWZmX3QgZGVsdGEgPQotICAg
ICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV92ZWN0b3IpIC0gc3RhdGljX2Nhc3Q8dWludDhf
dCo+KGJ1ZmZlcigpLT5kYXRhKCkpOworICAgICAgICBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KG1f
dmVjdG9yLmdldCh0aGlzKSkgLSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyKCktPmRhdGEo
KSk7CiAgICAgCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRl
bHRhKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihyZXN1bHQpID09IGRlbHRh
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMTkwNjc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDExICsxMDgsMTEgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IHR5cGVuYW1l
IEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOwor
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUq
PihtX3ZlY3Rvci5nZXQodGhpcykpOwogICAgIH0KICAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
KiB0eXBlZFZlY3RvcigpCiAgICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IuZ2V0KHRoaXMpKTsKICAgICB9CiAK
ICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBpbmRleGVkIGFjY2VzcyBt
ZXRob2RzIHRoYXQgSlNPYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShy
ZXZpc2lvbiAxOTA2NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQxLDcgKzQ0MSw3
IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnYKICAgICBzd2l0Y2gg
KHRoaXNPYmplY3QtPm1fbW9kZSkgewogICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6IHsKICAgICAg
ICAgaWYgKHRoaXNPYmplY3QtPm1fdmVjdG9yKQotICAgICAgICAgICAgdmlzaXRvci5jb3B5TGF0
ZXIodGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09iamVjdC0+bV92
ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICAgICAgdmlzaXRvci5jb3B5
TGF0ZXIodGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09iamVjdC0+
bV92ZWN0b3IuZ2V0V2l0aG91dEJhcnJpZXIoKSwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00NjgsMTIgKzQ2OCwxMiBAQCB2b2lk
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjCiAgICAgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihj
ZWxsKTsKICAgICAKICAgICBpZiAodG9rZW4gPT0gVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbgot
ICAgICAgICAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1fdmVjdG9y
KSkgeworICAgICAgICAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1f
dmVjdG9yLmdldFdpdGhvdXRCYXJyaWVyKCkpKSB7CiAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0
LT5tX3ZlY3Rvcik7Ci0gICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRoaXNPYmplY3QtPm1fdmVj
dG9yOworICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQo
dGhpc09iamVjdCk7CiAgICAgICAgIHZvaWQqIG5ld1ZlY3RvciA9IHZpc2l0b3IuYWxsb2NhdGVO
ZXdTcGFjZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKICAgICAgICAgbWVtY3B5KG5ld1ZlY3Rv
ciwgb2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKLSAgICAgICAgdGhpc09iamVj
dC0+bV92ZWN0b3IgPSBuZXdWZWN0b3I7CisgICAgICAgIHRoaXNPYmplY3QtPm1fdmVjdG9yLnNl
dFdpdGhvdXRCYXJyaWVyKHN0YXRpY19jYXN0PGNoYXIqPihuZXdWZWN0b3IpKTsKICAgICAgICAg
dmlzaXRvci5kaWRDb3B5KG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CiAgICAg
fQogICAgIApAQCAtNTA4LDggKzUwOCw4IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGEKICAgICAgICAgJiYgIXRoaXNPYmplY3QtPmJ1dHRlcmZseSgpICYmIHNpemUg
Pj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgewogICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+
bV92ZWN0b3IpOwogICAgICAgICAvLyBSZXVzZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYg
YXQgYWxsIHBvc3NpYmxlLgotICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5kZXhpbmdIZWFkZXIq
Pih0aGlzT2JqZWN0LT5tX3ZlY3RvciktPmJ1dHRlcmZseSgpKTsKKyAgICAgICAgdGhpc09iamVj
dC0+bV9idXR0ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIoCisgICAgICAgICAgICBiaXR3aXNlX2Nh
c3Q8SW5kZXhpbmdIZWFkZXIqPih0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQodGhpc09iamVjdCkp
LT5idXR0ZXJmbHkoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVk0mIHZtID0gKmhlYXAtPnZt
KCk7CiAgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldCh2bSwgdGhpc09iamVjdCwg
QnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KApAQCAtNTIxLDE0ICs1MjEsMTQgQEAg
QXJyYXlCdWZmZXIqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYQogICAgIAogICAgIHN3aXRj
aCAodGhpc09iamVjdC0+bV9tb2RlKSB7CiAgICAgY2FzZSBGYXN0VHlwZWRBcnJheToKLSAgICAg
ICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhp
c09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNy
ZWF0ZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQodGhpc09iamVjdCksIHRoaXNPYmplY3QtPmJ5
dGVMZW5ndGgoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE92ZXJzaXpl
VHlwZWRBcnJheToKICAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRvaW5nIHNvbWV0aGluZyBs
aWtlICJzdWJ0cmFjdGluZyIgZnJvbSBleHRyYSBtZW1vcnkKICAgICAgICAgLy8gY29zdCwgc2lu
Y2UgcmlnaHQgbm93IHRoaXMgY2FzZSB3aWxsIGNhdXNlIHRoZSBHQyB0byB0aGluayB0aGF0IHdl
IHJlYWxsb2NhdGVkCiAgICAgICAgIC8vIHRoZSB3aG9sZSBidWZmZXIuCi0gICAgICAgIGJ1ZmZl
ciA9IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlz
T2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3Jl
YXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQodGhpc09iamVjdCksIHRoaXNPYmpl
Y3QtPmJ5dGVMZW5ndGgoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0
OgpAQCAtNTM3LDcgKzUzNyw3IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGEKICAgICB9CiAKICAgICB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFk
ZXIoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKLSAgICB0aGlzT2JqZWN0LT5tX3Zl
Y3RvciA9IGJ1ZmZlci0+ZGF0YSgpOworICAgIHRoaXNPYmplY3QtPm1fdmVjdG9yLnNldFdpdGhv
dXRCYXJyaWVyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXItPmRhdGEoKSkpOwogICAgIHRoaXNP
YmplY3QtPm1fbW9kZSA9IFdhc3RlZnVsVHlwZWRBcnJheTsKICAgICBoZWFwLT5hZGRSZWZlcmVu
Y2UodGhpc09iamVjdCwgYnVmZmVyLmdldCgpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXAuaAkocmV2aXNpb24gMTkwNjc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNNYXAoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9tYXBEYXRhKHZt
KQorICAgICAgICAsIG1fbWFwRGF0YSh2bSwgdGhpcykKICAgICB7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxOTA2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6
OmNvcHlCdXR0ZXJmCiAgICAgICAgICAgICBtZW1jcHkoY3VycmVudFRhcmdldCwgY3VycmVudFNv
dXJjZSwgY291bnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91dFdyaXRlQmFycmllcihuZXdCdXR0ZXJm
bHkpOworICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcihuZXdCdXR0ZXJmbHkp
OwogICAgICAgICB2aXNpdG9yLmRpZENvcHkoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKICAgICB9IAogfQpAQCAtMjA2LDcg
KzIwNiw3IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAK
ICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0V2l0aG91dEJhcnJp
ZXIoKTsKICAgICBpZiAoYnV0dGVyZmx5KQogICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRl
cmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZt
KCkpLT5vdXRPZkxpbmVTaXplKCkpOwogCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBKU09iamVj
dDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIAogICAgIGlmICh0b2tlbiAhPSBCdXR0ZXJmbHlD
b3B5VG9rZW4pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
dGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0V2l0aG91dEJhcnJpZXIoKTsKICAgICBpZiAoYnV0
dGVyZmx5KQogICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRl
cmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7CiB9CkBAIC0z
NDEsNyArMzQxLDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCh0aGlzT2JqZWN0KS0+YXJyYXlTdG9yYWdlKCk7CiAg
ICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKQEAgLTUxNCw3ICs1MTQsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJm
bHkuZ2V0KHRoaXNPYmplY3QpLT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChwcm9wZXJ0eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICBi
cmVhazsKQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZToKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseS5nZXQodGhpc09iamVjdCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKICAgICAg
ICAgaWYgKHByb3BlcnR5TmFtZSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNjEzLDcgKzYxMyw3IEBAIHZvaWQgSlNPYmplY3Q6OmVudGVyRGljdGlv
bmFyeUluZGV4aW5nTW8KICAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFy
cmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGVuc3VyZUFycmF5U3RvcmFnZVNsb3codm0pKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzoKLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFs
cmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIGVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZt
LCBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC02NDMsNyArNjQzLDcgQEAgQnV0dGVyZmx5KiBK
U09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZQogICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRC
ZVNwYXJzZSgpKTsKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChsZW5ndGgs
IEJBU0VfVkVDVE9SX0xFTik7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJm
bHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLCB2
bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBm
YWxzZSwgMCwKKyAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLCB2bSwgdGhpcywgc3RydWN0
dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKICAgICAg
ICAgZWxlbWVudFNpemUgKiB2ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0UHVi
bGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVj
dG9yTGVuZ3RoKTsKQEAgLTY5NSw3ICs2OTUsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
cmVhdGVBcnJheVN0b3JhCiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRleGluZ1R5cGUo
KTsKICAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRU
eXBlKSk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9y
R3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLCB2bSwgdGhpcywgc3Ry
dWN0dXJlLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAorICAgICAg
ICBtX2J1dHRlcmZseS5nZXQodGhpcyksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCiAgICAgICAgIEFycmF5U3RvcmFnZTo6c2l6
ZUZvcih2ZWN0b3JMZW5ndGgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJmbHkpOwog
CkBAIC03MTksMzEgKzcxOSwzMiBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZl
cnRVbmRlCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwogICAg
IHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIEFsbG9jYXRlSW50MzIpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXNJbnQzMigpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRp
Z3VvdXNJbnQzMigpOwogfQogCiBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydFVu
ZGVjaWRlZFRvRG91YmxlKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4
aW5nVHlwZSgpKSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpOyBpLS07KQotICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpW2ldID0gUE5hTjsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0KHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCk7IGktLTspCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5h
TjsKICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZURvdWJsZSkpOwotICAgIHJldHVybiBt
X2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5n
ZXQodGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIAogQ29udGlndW91c0pTVmFsdWVzIEpT
T2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKFZNJiB2bSkKIHsKICAgICBBU1NF
UlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgQWxsb2Nh
dGVDb250aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7Cisg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91cygpOwogfQogCiBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0
Q29weWluZ0VsZW1lbnRzKFZNJiB2bSwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQogewogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKLSAgICB1bnNpZ25lZCBw
dWJsaWNMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgdW5zaWduZWQg
cHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKTsKICAg
ICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lU2l6
ZSgpOwogICAgIApAQCAtNzUyLDcgKzc1Myw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNv
bnN0cnVjdENvbnZlcnQKICAgICAKICAgICBtZW1jcHkoCiAgICAgICAgIG5ld0J1dHRlcmZseS0+
cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCi0gICAgICAgIG1fYnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKICAgICAgICAgcHJvcGVy
dHlTaXplICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgCiAgICAgQXJyYXlTdG9yYWdl
KiBuZXdTdG9yYWdlID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTc3MCw3ICs3
NzEsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdU
eXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGNvbnN0
cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rv
ckxlbmd0aCk7CiAgICAgLy8gTm8gbmVlZCB0byBjb3B5IGVsZW1lbnRzLgogICAgIApAQCAtNzg3
LDkgKzc4OCwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiBD
b250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyVG9Eb3VibGUoVk0mIHZtKQog
ewogICAgIEFTU0VSVChoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwotICAgIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykgewotICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAmbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXNJbnQzMigpW2ldOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQodGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsgaS0tOykgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAmYnV0
dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91YmxlKiBjdXJyZW50QXNE
b3VibGUgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CiAgICAgICAgIEpTVmFsdWUg
diA9IGN1cnJlbnQtPmdldCgpOwogICAgICAgICBpZiAoIXYpIHsKQEAgLTgwMSw3ICs4MDMsNyBA
QCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyCiAgICAgfQogICAgIAog
ICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlRG91YmxlKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+
Y29udGlndW91c0RvdWJsZSgpOwogfQogCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNv
bnZlcnRJbnQzMlRvQ29udGlndW91cyhWTSYgdm0pCkBAIC04MDksNyArODExLDcgQEAgQ29udGln
dW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MwogICAgIEFTU0VSVChoYXNJbnQzMihp
bmRleGluZ1R5cGUoKSkpOwogICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlQ29udGlndW91
cykpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgIHJldHVybiBt
X2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXMoKTsKIH0KIAogQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb24gdHJhbnNpdGlvbikKQEAgLTgxNywxMCArODE5LDExIEBAIEFycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
CiAgICAgQVNTRVJUKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQg
dmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKICAg
ICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3Jh
Z2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgewotICAg
ICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAg
ICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAg
ICAgIGlmICh2KSB7CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKHYpOwogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvcisrOwpAQCAtODQxLDkgKzg0NCwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
b252ZXJ0SW50MzJUb0FyCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnREb3Vi
bGVUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNEb3VibGUoaW5kZXhpbmdU
eXBlKCkpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCk7IGktLTspIHsKLSAgICAgICAgZG91YmxlKiBjdXJyZW50ID0gJm1fYnV0dGVyZmx5
LT5jb250aWd1b3VzRG91YmxlKClbaV07CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpOyBpLS07KSB7CisgICAgICAgIGRvdWJsZSogY3VycmVudCA9ICZidXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBjdXJyZW50QXNWYWx1ZSA9IGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihj
dXJyZW50KTsKICAgICAgICAgZG91YmxlIHZhbHVlID0gKmN1cnJlbnQ7CiAgICAgICAgIGlmICh2
YWx1ZSAhPSB2YWx1ZSkgewpAQCAtODU1LDcgKzg1OSw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y29udmVydERvdWIKICAgICB9CiAgICAgCiAgICAgc2V0U3RydWN0dXJlKHZtLCBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgQWxsb2Nh
dGVDb250aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7Cisg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91cygpOwogfQogCiBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBO
b25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKQEAgLTg2MywxMCArODY3LDExIEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkpOwogCi0g
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwor
ICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9y
TGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVy
dGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OyBpKyspIHsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0
aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsgaSsrKSB7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldOwogICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsKICAgICAgICAgICAg
IG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZShK
U1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKICAgICAgICAgICAgIG5ld1N0b3JhZ2Ut
Pm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKQEAgLTg4OSwxMCArODk0LDExIEBAIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3UKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVh
cCk7CiAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVu
c2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1
bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0
aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFy
cmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsr
KSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0
KCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkr
KykgeworICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQo
KTsKICAgICAgICAgaWYgKHYpIHsKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ld
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251
bVZhbHVlc0luVmVjdG9yKys7CkBAIC05NTcsOCArOTYzLDggQEAgdm9pZCBKU09iamVjdDo6Y29u
dmVydEludDMyRm9yVmFsdWUoVk0mIAogCiB2b2lkIEpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHlU
b1VuZGVjaWRlZChWTSYgdm0sIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlKQogewotICAg
IEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAgQVNTRVJU
KGluZGV4IDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBBU1NFUlQoaW5kZXgg
PCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICBBU1NFUlQoaW5k
ZXggPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKTsKICAgICBjb252ZXJ0
VW5kZWNpZGVkRm9yVmFsdWUodm0sIHZhbHVlKTsKICAgICBzZXRJbmRleFF1aWNrbHkodm0sIGlu
ZGV4LCB2YWx1ZSk7CiB9CkBAIC0xMTE0LDcgKzExMjAsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0OjplbnN1cmVBcnJheVN0b3JhCiAgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRl
eGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgY29udmVydENvbnRpZ3Vv
dXNUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKSk7CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVX
aGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5h
cnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7
CkBAIC0xMzU2LDcgKzEzNjIsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgoSlNDCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3Qt
Pm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KHRoaXNPYmplY3QpLT5hcnJheVN0b3Jh
Z2UoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
IHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFn
ZS0+bV92ZWN0b3JbaV07CkBAIC0xNTQ2LDcgKzE1NTIsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBcnJh
eVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
KyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHku
Z2V0KG9iamVjdCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICB1
bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKQEAgLTE2OTksNyArMTcwNSw3IEBAIE5FVkVS
X0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHIKIHZvaWQgSlNPYmplY3Q6OnB1dElu
ZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJ
bk1hcCwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIG9sZERlc2NyaXB0b3IpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBh
dXRvIG1hcCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7
CisgICAgYXV0byBtYXAgPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcC5nZXQoKTsKIAogICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3Io
KSkgewogICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQpAQCAtMTc1OCw3ICsxNzY0LDcg
QEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogICAgIGlmIChkZXNj
cmlwdG9yLmF0dHJpYnV0ZXMoKSAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKICAgICAgICAgbm90
aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoZXhlYy0+dm0oKSk7CiAKLSAgICBTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwLmdldCgpOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKG1hcCk7CiAKICAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNh
bGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHBy
b3BlcnR5IG5hbWUgUC4KQEAgLTE3OTAsOCArMTc5Niw5IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmlu
ZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1bHRzKTsK
IAogICAgICAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlw
dG9yLCBkZWZhdWx0cyk7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPmxlbmd0aCgpKQotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5zZXRMZW5ndGgoaW5kZXggKyAxKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgICAgIGlmIChpbmRleCA+PSBidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnNldExlbmd0aChpbmRleCArIDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTE5MTEsMTcgKzE5MTgsMTkgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJl
eW9uZFZlY3RvckxlbgogewogICAgIEFTU0VSVCgoaW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1No
YXBlTWFzaykgPT0gaW5kZXhpbmdTaGFwZSk7CiAgICAgQVNTRVJUKCFpbmRleGluZ1Nob3VsZEJl
U3BhcnNlKCkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
dGhpcyk7CiAgICAgCiAgICAgLy8gRm9yIHVzIHRvIGdldCBoZXJlLCB0aGUgaW5kZXggaXMgZWl0
aGVyIGdyZWF0ZXIgdGhhbiB0aGUgcHVibGljIGxlbmd0aCwgb3IgZ3JlYXRlciB0aGFuCiAgICAg
Ly8gb3IgZXF1YWwgdG8gdGhlIHZlY3RvciBsZW5ndGguCi0gICAgQVNTRVJUKGkgPj0gbV9idXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBBU1NFUlQoaSA+PSBidXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpKTsKICAgICAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIAogICAgIGlm
IChpID49IE1BWF9BUlJBWV9JTkRFWCAtIDEKICAgICAgICAgfHwgKGkgPj0gTUlOX1NQQVJTRV9B
UlJBWV9JTkRFWAotICAgICAgICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3IoaSwgY291
bnRFbGVtZW50czxpbmRleGluZ1NoYXBlPihidXR0ZXJmbHkoKSkpKQotICAgICAgICB8fCBpbmRl
eElzU3VmZmljaWVudGx5QmV5b25kTGVuZ3RoRm9yU3BhcnNlTWFwKGksIG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICYmICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9y
KGksIGNvdW50RWxlbWVudHM8aW5kZXhpbmdTaGFwZT4oYnV0dGVyZmx5KSkpCisgICAgICAgIHx8
IGluZGV4SXNTdWZmaWNpZW50bHlCZXlvbmRMZW5ndGhGb3JTcGFyc2VNYXAoaSwgYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKSkpIHsKICAgICAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVY
KTsKICAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyh2bSk7CiAgICAgICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAodm0pOwpAQCAtMTkzMiwy
NCArMTk0MSwyNSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCiAg
ICAgfQogCiAgICAgZW5zdXJlTGVuZ3RoKHZtLCBpICsgMSk7CisgICAgYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoaSA8IG1fYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpOwogICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewogICAgIGNhc2UgSW50
MzJTaGFwZToKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgIG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVl
KTsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgRG91
YmxlU2hhcGU6IHsKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzTnVtYmVyKCkpOwogICAgICAgICBk
b3VibGUgdmFsdWVBc0RvdWJsZSA9IHZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAgIEFTU0VSVCh2
YWx1ZUFzRG91YmxlID09IHZhbHVlQXNEb3VibGUpOwotICAgICAgICBtX2J1dHRlcmZseS0+Y29u
dGlndW91c0RvdWJsZSgpW2ldID0gdmFsdWVBc0RvdWJsZTsKKyAgICAgICAgYnV0dGVyZmx5LT5j
b250aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZUFzRG91YmxlOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAgICBidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC0yMjIzLDcgKzIyMzMsNyBAQCBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIAogICAgIGNhc2UgQUxM
X0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAg
ICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAg
IGlmIChpIDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3Jh
Z2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAg
IHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9y
YWdlKHZtKSk7CiAgICAgICAgIH0KQEAgLTIyMzcsNyArMjI0Nyw3IEBAIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8KICAgICAgICAgCiAgICAgY2FzZSBBTExfRE9VQkxF
X0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAg
ICBpZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChp
IDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdl
KGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlz
dHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIHJldHVy
biBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywg
aSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2
bSkpOwogICAgICAgICB9CkBAIC0yMjU2LDcgKzIyNjYsNyBAQCBib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNf
SU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAg
IGlmIChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgaWYgKGkg
PCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0
c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZSh2bSkpOwogICAgICAgICB9CkBAIC0yMjY2LDcgKzIyNzYsNyBAQCBib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAgaWYg
KGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8IG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5k
RW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVj
LCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpAQCAtMjM0Nyw4
ICsyMzU3LDggQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3VgogICAg
IHVuc2lnbmVkIGxlbmd0aDsKICAgICAKICAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5k
ZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsKLSAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OworICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxl
bmd0aCgpOworICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xl
bmd0aCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZlY3Rvckxlbmd0aCA9IDA7CiAgICAgICAg
IGxlbmd0aCA9IDA7CkBAIC0yNDU0LDI1ICsyNDY0LDI4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3Jl
YXNlVmVjdG9yTGVuZ3RoKFZNJiAKIAogdm9pZCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhW
TSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICAKICAgICBBU1NFUlQobGVuZ3RoIDwgTUFYX0FSUkFZ
X0lOREVYKTsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkgfHwgaGFz
SW50MzIoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkgfHwgaGFz
VW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgQVNTRVJUKGxlbmd0aCA+IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgQVNTRVJUKGxlbmd0aCA+IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpOwogICAgIAogICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9IHN0ZDo6
bWluKAogICAgICAgICBsZW5ndGggPDwgMSwKICAgICAgICAgTUFYX1NUT1JBR0VfVkVDVE9SX0xF
TkdUSCk7Ci0gICAgdW5zaWduZWQgb2xkVmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpOworICAgIHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1fYnV0dGVy
Zmx5LnNldCh2bSwgdGhpcywgbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAgIGJ1dHRl
cmZseSA9IGJ1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCiAgICAgICAgIHZtLCB0aGlzLCBzdHJ1
Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCiAgICAgICAg
IG9sZFZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSksCi0gICAgICAgIG5ld1Zl
Y3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgbmV3VmVjdG9y
TGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgbV9idXR0ZXJmbHkuc2V0KHZt
LCB0aGlzLCBidXR0ZXJmbHkpOwogCi0gICAgbV9idXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChu
ZXdWZWN0b3JMZW5ndGgpOworICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rv
ckxlbmd0aCk7CiAKICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgp
W2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRh
dGEoKVtpXSA9IFBOYU47CiAgICAgfQogfQogCkBAIC0yNDg1LDEwICsyNDk4LDEwIEBAIHZvaWQg
SlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXIKICAgICBBU1NFUlQoIW1fYnV0dGVy
Zmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUoKSkpOwogCiAgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCks
IDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKTsKICAgICBtX2J1dHRlcmZseS5zZXQo
dm0sIHRoaXMsIG5ld0J1dHRlcmZseSk7Ci0gICAgbV9idXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0
aChsZW5ndGgpOwotICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAg
ICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOworICAgIG5ld0J1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiB9CiAKIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdy
b3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXpl
KQpAQCAtMjQ5OCw3ICsyNTExLDcgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGlu
ZVN0b3JhZwogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBub3QgcmVs
eSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQogICAgIC8vIGNhcGFjaXR5LCBzaW5j
ZSB3ZSBtaWdodCBoYXZlIGFscmVhZHkgbXV0YXRlZCB0aGUgc3RydWN0dXJlIGluLXBsYWNlLgog
ICAgIAotICAgIHJldHVybiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZSht
X2J1dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNpemUsIG5ld1Np
emUpOworICAgIHJldHVybiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZSht
X2J1dHRlcmZseS5nZXQodGhpcyksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUodm0pLCBvbGRTaXplLCBu
ZXdTaXplKTsKIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQpAQCAtMjc4NSw3ICsyNzk4LDcgQEAgdWludDMyX3QgSlNPYmplY3Q6
OmdldEVudW1lcmFibGVMZW5ndGgoRQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlT
dG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS5nZXQob2JqZWN0KS0+YXJyYXlT
dG9yYWdlKCk7CiAgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTkwNjc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2luY2x1ZGUg
IkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29weVdyaXRlQmFycmllci5oIgorI2lu
Y2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiRGVmZXJHQy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTEzMSwxNCArMTMxLDE0
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5k
ZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBtX2J1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPnB1YmxpY0xlbmd0aCgpOwogICAgIH0KICAgICAgICAgCiAgICAgdW5zaWduZWQgZ2V0
VmVjdG9yTGVuZ3RoKCkKICAgICB7CiAgICAgICAgIGlmICghaGFzSW5kZXhlZFByb3BlcnRpZXMo
aW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5n
ZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpOwogICAgIH0KICAgICAgICAgCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xODEsMjMgKzE4MSwyNCBAQCBwdWJs
aWM6CiAgICAgCiAgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICB7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwog
ICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0JMQU5L
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lO
REVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgJiYg
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXTsKKyAgICAgICAgICAgIHJldHVybiBpIDwgYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSAmJiBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXTsKICAg
ICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBpZiAo
aSA+PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoaSA+PSBi
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KClbaV07CisgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAg
ICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
ICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAg
ICByZXR1cm4gaSA8IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpICYm
IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTIwNiwxNSArMjA3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICB7CisgICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgICAgICBzd2l0
Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uZ2V0KCkuYXNJbnQzMigpKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKS5hc0ludDMyKCkpOwogICAgICAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElO
R19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91
YmxlLCBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldKTsKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBidXR0ZXJmbHktPmNvbnRpZ3Vv
dXNEb3VibGUoKVtpXSk7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdf
VFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOwpAQCAtMjIzLDMyICsyMjUsMzMgQEAgcHVibGljOgogICAgICAgICAKICAgICBKU1ZhbHVl
IHRyeUdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKKyAgICAgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgICAgIHN3aXRj
aCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgp
OworICAgICAgICAgICAgaWYgKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7CisgICAg
ICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5n
ZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmlzSW50MzIoKSB8fCAhcmVzdWx0
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAg
ICAgICAgICAgIGlmIChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAg
ICAgICAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAg
ICBpZiAoaSA+PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbaV07CisgICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdCkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6
OkVuY29kZUFzRG91YmxlLCByZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoaSA8IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcltpXS5nZXQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI3Niw2ICsyNzksNyBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVk
IGkpCiAgICAgeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lO
REVYSU5HX1RZUEVTOgpAQCAtMjg1LDExICsyODksMTEgQEAgcHVibGljOgogICAgICAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAg
ICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAg
ICAgIHJldHVybiBpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgY2FzZSBO
b25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkKLSAgICAgICAgICAgICAgICAmJiAhIW1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICByZXR1cm4g
aSA8IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpCisgICAgICAgICAg
ICAgICAgJiYgISFidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMDYsNyArMzEwLDcgQEAgcHVibGljOgogICAg
ICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsKKyAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMp
LT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTUs
OSArMzE5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgdm9pZCBzZXRJbmRleFF1aWNrbHko
Vk0mIHZtLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgeworICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNoIChpbmRl
eGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewot
ICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAg
ICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAg
ICAgIGlmICghdi5pc0ludDMyKCkpIHsKICAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CkBAIC0zMjUsMTQgKzMzMCwxNCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LnNldCh2bSwgdGhpcywgdik7Ci0gICAgICAgICAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0
aChpICsgMSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KHZtLCB0aGlz
LCB2KTsKKyAgICAgICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisg
ICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5H
X1RZUEVTOiB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkp
OwogICAgICAgICAgICAgaWYgKCF2LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAgICBjb252
ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgodm0sIGksIHYpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTM0MiwxMyArMzQ3LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0
SW5kZXgodm0sIGksIHYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZTsK
LSAgICAgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKLSAgICAg
ICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKKyAgICAgICAg
ICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gdmFsdWU7CisgICAgICAgICAg
ICBpZiAoaSA+PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGJ1
dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsK
LSAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHggPSBz
dG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAgIEpTVmFsdWUgb2xkID0geC5nZXQoKTsK
ICAgICAgICAgICAgIHguc2V0KHZtLCB0aGlzLCB2KTsKQEAgLTM3MSwxNCArMzc2LDE1IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KFZNJiB2bSwgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgICAgIHN3aXRjaCAo
aW5kZXhpbmdUeXBlKSB7CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBF
UzogewogICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQodm0sIGksIHYpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwog
ICAgICAgICAgICAgaWYgKCF2LmlzSW50MzIoKSkgewogICAgICAgICAgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlT3JDb250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgodm0sIGksIHYp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzg2LDE0ICszOTIsMTQgQEAgcHVibGljOgog
ICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5zZXQodm0sIHRoaXMsIHYpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQo
dm0sIHRoaXMsIHYpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghdi5pc051bWJlcigpKSB7CiAgICAgICAg
ICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4
KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00MDMsMTEgKzQwOSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxl
UGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldID0gdmFsdWU7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XSA9IHZhbHVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgQXJyYXlTdG9y
YWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAg
ICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwogICAgICAgICAgICAgQVNTRVJU
KGkgPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKICAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yW2ldLnNldCh2bSwgdGhpcywgdik7CkBAIC00MjgsNyArNDM0LDcgQEAgcHVibGlj
OgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuICEhbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX3NwYXJzZU1hcDsKKyAgICAgICAgICAgIHJldHVybiAhIW1fYnV0dGVyZmx5LmdldCh0aGlz
KS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTQ0NSw3ICs0NTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJz
ZU1vZGUoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NTAsMTEgKzU1Niwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7CiAgICAg
fQogICAgICAgICAKLSAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCgpOyB9Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJl
dHVybiBtX2J1dHRlcmZseS5nZXQoKTsgfQorICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5
KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOyB9CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkoKSB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyk7IH0KICAgICAgICAg
Ci0gICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQotICAgIFByb3BlcnR5U3RvcmFn
ZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5U3RvcmFn
ZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KKyAg
ICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KIAogICAgIGNvbnN0IFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkg
Y29uc3QKICAgICB7CkBAIC02NTYsNyArNjYyLDcgQEAgcHVibGljOgogICAgIENvbnRpZ3VvdXNK
U1ZhbHVlcyBlbnN1cmVJbnQzMihWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhh
c0ludDMyKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXNJbnQzMigpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+Y29udGlndW91c0ludDMyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgcmV0dXJuIGVu
c3VyZUludDMyU2xvdyh2bSk7CiAgICAgfQpAQCAtNjY4LDcgKzY3NCw3IEBAIHB1YmxpYzoKICAg
ICBDb250aWd1b3VzRG91YmxlcyBlbnN1cmVEb3VibGUoVk0mIHZtKQogICAgIHsKICAgICAgICAg
aWYgKExJS0VMWShoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOworICAgICAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91c0RvdWJsZSgpOwogICAgICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBlbnN1cmVEb3VibGVTbG93KHZtKTsKICAgICB9CkBAIC02NzgsNyArNjg0
LDcgQEAgcHVibGljOgogICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVDb250aWd1b3VzKFZN
JiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzQ29udGlndW91cyhpbmRleGluZ1R5
cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93KHZtKTsKICAg
ICB9CkBAIC02OTAsNyArNjk2LDcgQEAgcHVibGljOgogICAgIEFycmF5U3RvcmFnZSogZW5zdXJl
QXJyYXlTdG9yYWdlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzQW55QXJy
YXlTdG9yYWdlKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+YXJyYXlTdG9yYWdlKCk7CiAKICAgICAgICAgcmV0dXJuIGVuc3VyZUFycmF5U3RvcmFn
ZVNsb3codm0pOwogICAgIH0KQEAgLTczNiw3ICs3NDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQXJy
YXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc0FueUFy
cmF5U3RvcmFnZShpbmRleGluZ1R5cGUoKSkpOwotICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5h
cnJheVN0b3JhZ2UoKTsKICAgICB9CiAgICAgICAgIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ug
d2FudCB0byBwcmVkaWNhdGUgc29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90IHRoZQpAQCAt
NzQ1LDcgKzc1MSw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhp
bmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiAwOwpA
QCAtODA5LDEyICs4MTUsMTIgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAgQVNTRVJUKGxl
bmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgICAgIEFTU0VSVChoYXNDb250aWd1b3VzKGlu
ZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkgfHwgaGFzRG91YmxlKGlu
ZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICBpZiAobV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpIDwgbGVuZ3RoKQor
CisgICAgICAgIGlmIChtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpIDwgbGVu
Z3RoKQogICAgICAgICAgICAgZW5zdXJlTGVuZ3RoU2xvdyh2bSwgbGVuZ3RoKTsKICAgICAgICAg
ICAgIAotICAgICAgICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDwgbGVuZ3RoKQot
ICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgICAg
ICBpZiAobV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKSA8IGxlbmd0aCkKKyAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7
CiAgICAgfQogICAgICAgICAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gc2hyaW5r
IHRoZSBidXR0ZXJmbHkgYmFja2luZyBzdG9yZSwgYW5kIHlvdSdyZQpAQCAtODc0LDcgKzg4MCw3
IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQXJyYXlTdG9yYWdlKiBlbnN1cmVB
cnJheVN0b3JhZ2VTbG93KFZNJik7CiAKIHByb3RlY3RlZDoKLSAgICBDb3B5V3JpdGVCYXJyaWVy
PEJ1dHRlcmZseT4gbV9idXR0ZXJmbHk7CisgICAgQ29weUJhcnJpZXI8QnV0dGVyZmx5PiBtX2J1
dHRlcmZseTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogcHJpdmF0ZToKICAgICB1aW50MzJfdCBt
X3BhZGRpbmc7CkBAIC0xMzQ4LDcgKzEzNTQsNyBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0
RGlyZWN0V2l0aG91dFRyCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VS
VCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwog
ICAgIEFTU0VSVCghdmFsdWUuaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICBpZiAoc3RydWN0dXJlKCktPnB1
dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0
cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAkocmV2aXNpb24gMTkwNjc1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzEx
Miw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNTZXQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9zZXRE
YXRhKHZtKQorICAgICAgICAsIG1fc2V0RGF0YSh2bSwgdGhpcykKICAgICB7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCShyZXZpc2lvbiAxOTA2
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgTWFwRGF0YV9oCiAjZGVmaW5lIE1hcERhdGFf
aAogCisjaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNs
dWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4K
QEAgLTk0LDcgKzk1LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlIHZhbHVlOwogICAgIH07
CiAKLSAgICBNYXBEYXRhSW1wbChWTSYpOworICAgIE1hcERhdGFJbXBsKFZNJiwgSlNDZWxsKiBv
d25lcik7CiAKICAgICB2b2lkIHNldChFeGVjU3RhdGUqLCBKU0NlbGwqIG93bmVyLCBLZXlUeXBl
LCBKU1ZhbHVlKTsKICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBLZXlUeXBlKTsKQEAgLTEz
NiwxNiArMTM3LDE3IEBAIHByaXZhdGU6CiAgICAgaW50MzJfdCBtX2NhcGFjaXR5OwogICAgIGlu
dDMyX3QgbV9zaXplOwogICAgIGludDMyX3QgbV9kZWxldGVkQ291bnQ7Ci0gICAgRW50cnkqIG1f
ZW50cmllczsKKyAgICBKU0NlbGwqIG1fb3duZXI7CisgICAgQ29weUJhcnJpZXI8RW50cnk+IG1f
ZW50cmllczsKICAgICBXZWFrR0NNYXA8SlNJdGVyYXRvciosIEpTSXRlcmF0b3I+IG1faXRlcmF0
b3JzOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+
Ci1BTFdBWVNfSU5MSU5FIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6TWFwRGF0YUlt
cGwoVk0mIHZtKQorQUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvcj46
Ok1hcERhdGFJbXBsKFZNJiB2bSwgSlNDZWxsKiBvd25lcikKICAgICA6IG1fY2FwYWNpdHkoMCkK
ICAgICAsIG1fc2l6ZSgwKQogICAgICwgbV9kZWxldGVkQ291bnQoMCkKLSAgICAsIG1fZW50cmll
cyhudWxscHRyKQorICAgICwgbV9vd25lcihvd25lcikKICAgICAsIG1faXRlcmF0b3JzKHZtKQog
ewogfQpAQCAtMTgyLDcgKzE4NCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhSW1wbDxF
bnRyeSwgSlMKIHsKICAgICBpZiAoIWVuc3VyZVNsb3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIEVudHJ5KiBlbnRyeSA9ICZtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XTsKKyAg
ICBFbnRyeSogZW50cnkgPSAmbV9tYXBEYXRhLT5tX2VudHJpZXMuZ2V0KG1fbWFwRGF0YS0+bV9v
d25lcilbbV9pbmRleF07CiAgICAgcGFpciA9IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpT
VmFsdWU+KGVudHJ5LT5rZXkoKS5nZXQoKSwgZW50cnktPnZhbHVlKCkuZ2V0KCkpOwogICAgIG1f
aW5kZXggKz0gMTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIwNCw3ICsyMDYsNyBAQCBBTFdBWVNf
SU5MSU5FIGludDMyX3QgTWFwRGF0YUltcGw8RW50cnksCiAgICAgaWYgKGlzRmluaXNoZWQoKSkK
ICAgICAgICAgcmV0dXJuIG1faW5kZXg7CiAKLSAgICBFbnRyeSogZW50cmllcyA9IG1fbWFwRGF0
YS0+bV9lbnRyaWVzOworICAgIEVudHJ5KiBlbnRyaWVzID0gbV9tYXBEYXRhLT5tX2VudHJpZXMu
Z2V0KG1fbWFwRGF0YS0+bV9vd25lcik7CiAgICAgc2l6ZV90IGVuZCA9IG1fbWFwRGF0YS0+bV9z
aXplOwogICAgIHdoaWxlIChzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5kZXgpIDwgZW5kICYmICFl
bnRyaWVzW21faW5kZXhdLmtleSgpKQogICAgICAgICBtX2luZGV4Kys7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGFJbmxpbmVzLmgJKHJldmlzaW9uIDE5
MDY3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGFJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8
RW50cnksIEpTSXRlcmF0bwogICAgIG1fY2FwYWNpdHkgPSAwOwogICAgIG1fc2l6ZSA9IDA7CiAg
ICAgbV9kZWxldGVkQ291bnQgPSAwOwotICAgIG1fZW50cmllcyA9IG51bGxwdHI7CisgICAgbV9l
bnRyaWVzLmNsZWFyKCk7CiAgICAgbV9pdGVyYXRvcnMuZm9yRWFjaChbXShKU0l0ZXJhdG9yKiBp
dGVyYXRvciwgSlNJdGVyYXRvciopIHsKICAgICAgICAgaXRlcmF0b3ItPml0ZXJhdG9yRGF0YSgp
LT5kaWRSZW1vdmVBbGxFbnRyaWVzKCk7CiAgICAgfSk7CkBAIC02MCwyNSArNjAsMjUgQEAgaW5s
aW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYQogICAgICAgICBhdXRvIGl0ZXIg
PSBtX3N0cmluZ0tleWVkVGFibGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShleGVj
KS5pbXBsKCkpOwogICAgICAgICBpZiAoaXRlciA9PSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCkp
CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+
dmFsdWVdOworICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRlci0+dmFs
dWVdOwogICAgIH0KICAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpIHsKICAgICAgICAgYXV0
byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQoYXNTeW1ib2woa2V5LnZhbHVlKS0+cHJp
dmF0ZU5hbWUoKS51aWQoKSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fc3ltYm9sS2V5ZWRUYWJs
ZS5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gJm1fZW50cmll
c1tpdGVyLT52YWx1ZV07CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzLmdldChtX293bmVyKVtp
dGVyLT52YWx1ZV07CiAgICAgfQogICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpIHsKICAgICAg
ICAgYXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5hc0NlbGwoKSk7
CiAgICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCiAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOworICAg
ICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRlci0+dmFsdWVdOwogICAgIH0K
IAogICAgIGF1dG8gaXRlciA9IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQoSlNWYWx1ZTo6ZW5jb2Rl
KGtleS52YWx1ZSkpOwogICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gJm1fZW50cmllc1tpdGVyLT52YWx1ZV07Cisg
ICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2l0ZXItPnZhbHVlXTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+CkBAIC05MywxNCArOTMs
MTQgQEAgaW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYQogewogICAgIHR5
cGVuYW1lIE1hcDo6aXRlcmF0b3IgbG9jYXRpb24gPSBtYXAuZmluZChrZXkpOwogICAgIGlmIChs
b2NhdGlvbiAhPSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2xvY2F0aW9u
LT52YWx1ZV07CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzLmdldChtX293bmVyKVtsb2NhdGlv
bi0+dmFsdWVdOwogCiAgICAgaWYgKCFlbnN1cmVTcGFjZUZvckFwcGVuZChleGVjLCBvd25lcikp
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKGtleSwgbV9z
aXplKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgRW50cnkq
IGVudHJ5ID0gJm1fZW50cmllc1ttX3NpemUrK107CisgICAgRW50cnkqIGVudHJ5ID0gJm1fZW50
cmllcy5nZXQobV9vd25lcilbbV9zaXplKytdOwogICAgIG5ldyAoZW50cnkpIEVudHJ5KCk7CiAg
ICAgZW50cnktPnNldEtleShleGVjLT52bSgpLCBvd25lciwga2V5VmFsdWUudmFsdWUpOwogICAg
IHJldHVybiBlbnRyeTsKQEAgLTE2NCw3ICsxNjQsNyBAQCBpbmxpbmUgYm9vbCBNYXBEYXRhSW1w
bDxFbnRyeSwgSlNJdGVyYXRvCiAgICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7CiAgICAg
ICAgIG1fdmFsdWVLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKICAgICB9Ci0gICAgbV9lbnRyaWVz
W2xvY2F0aW9uXS5jbGVhcigpOworICAgIG1fZW50cmllcy5nZXQobV9vd25lcilbbG9jYXRpb25d
LmNsZWFyKCk7CiAgICAgbV9kZWxldGVkQ291bnQrKzsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTE3Niw3ICsxNzYsNyBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRv
CiAgICAgaW50MzJfdCBuZXdFbmQgPSAwOwogICAgIFJFTEVBU0VfQVNTRVJUKG5ld0NhcGFjaXR5
ID4gMCk7CiAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKLSAgICAg
ICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW2ldOworICAgICAgICBFbnRyeSYgZW50cnkgPSBt
X2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKVtpXTsKICAgICAgICAgaWYgKCFlbnRyeS5rZXko
KSkgewogICAgICAgICAgICAgbV9pdGVyYXRvcnMuZm9yRWFjaChbbmV3RW5kXShKU0l0ZXJhdG9y
KiBpdGVyYXRvciwgSlNJdGVyYXRvciopIHsKICAgICAgICAgICAgICAgICBpdGVyYXRvci0+aXRl
cmF0b3JEYXRhKCktPmRpZFJlbW92ZUVudHJ5KG5ld0VuZCk7CkBAIC0xOTUsMjAgKzE5NSwyMCBA
QCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvCiAKICAgICAvLyBGaXh1
cCBmb3IgdGhlIGhhc2htYXBzCiAgICAgZm9yIChhdXRvIHB0ciA9IG1fdmFsdWVLZXllZFRhYmxl
LmJlZ2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCi0gICAgICAg
IHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigp
OworICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKClbcHRy
LT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwogICAgIGZvciAoYXV0byBwdHIgPSBtX2Nl
bGxLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpOyArK3B0
cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQo
KS5hc0ludDMyKCk7CisgICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXMuZ2V0V2l0aG91dEJh
cnJpZXIoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CiAgICAgZm9yIChhdXRv
IHB0ciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zdHJpbmdLZXllZFRh
YmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZh
bHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJp
ZXMuZ2V0V2l0aG91dEJhcnJpZXIoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7
CiAgICAgZm9yIChhdXRvIHB0ciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0g
bV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1f
ZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgICAgIHB0ci0+
dmFsdWUgPSBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKVtwdHItPnZhbHVlXS5rZXkoKS5n
ZXQoKS5hc0ludDMyKCk7CiAKICAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkgPT0gbV9kZWxl
dGVkQ291bnQpOwogICAgIG1fZGVsZXRlZENvdW50ID0gMDsKIAogICAgIG1fY2FwYWNpdHkgPSBu
ZXdDYXBhY2l0eTsKICAgICBtX3NpemUgPSBuZXdFbmQ7Ci0gICAgbV9lbnRyaWVzID0gZGVzdGlu
YXRpb247CisgICAgbV9lbnRyaWVzLnNldFdpdGhvdXRCYXJyaWVyKGRlc3RpbmF0aW9uKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+CkBAIC0yMTcs
OSArMjE3LDkgQEAgaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAg
IEFTU0VSVCghc2hvdWxkUGFjaygpKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBhY2l0eSA+
IDApOwogICAgIEFTU0VSVChuZXdDYXBhY2l0eSA+PSBtX2NhcGFjaXR5KTsKLSAgICBtZW1jcHko
ZGVzdGluYXRpb24sIG1fZW50cmllcywgc2l6ZW9mKEVudHJ5KSAqIG1fc2l6ZSk7CisgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uLCBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKSwgc2l6ZW9mKEVu
dHJ5KSAqIG1fc2l6ZSk7CiAgICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwotICAgIG1fZW50
cmllcyA9IGRlc3RpbmF0aW9uOworICAgIG1fZW50cmllcy5zZXRXaXRob3V0QmFycmllcihkZXN0
aW5hdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJh
dG9yPgpAQCAtMjM2LDYgKzIzNiw4IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBNYXBEYXRhSW1w
bDxFbnRyeSwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBFbnRyeSogbmV3RW50
cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4obmV3U3RvcmFnZSk7CisgICAgLy8gRG8gYSByZWFk
IGJhcnJpZXIgdG8gZW5zdXJlIHRoYXQgbV9lbnRyaWVzIHBvaW50cyB0byB0by1zcGFjZSBmb3Ig
dGhlIHJlbWFpbmRlciBvZiB0aGlzIEdDIGVwb2NoLgorICAgIG1fZW50cmllcy5nZXQobV9vd25l
cik7IAogICAgIGlmIChzaG91bGRQYWNrKCkpCiAgICAgICAgIHJlcGxhY2VBbmRQYWNrQmFja2lu
Z1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7CiAgICAgZWxzZQpAQCAtMjQ3LDcgKzI0
OSw3IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBNYXBEYXRhSW1wbDxFbnRyeSwKIHRlbXBsYXRl
PHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgogaW5saW5lIHZvaWQgTWFwRGF0
YUltcGw8RW50cnksIEpTSXRlcmF0b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogb3duZXIsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEVudHJ5KiBlbnRyaWVzID0gbV9lbnRyaWVzOwor
ICAgIEVudHJ5KiBlbnRyaWVzID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKCk7CiAgICAg
aWYgKCFlbnRyaWVzKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fZGVsZXRlZENvdW50KSB7
CkBAIC0yNjEsMTQgKzI2MywxNCBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJ
dGVyYXRvCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHJlaW50ZXJwcmV0X2Nhc3Q8V3Jp
dGVCYXJyaWVyPFVua25vd24+Kj4oJmVudHJpZXNbMF0pLCBtX3NpemUgKiAoc2l6ZW9mKEVudHJ5
KSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAgICAgfQogCi0gICAgdmlzaXRv
ci5jb3B5TGF0ZXIob3duZXIsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwgZW50cmllcywgY2Fw
YWNpdHlJbkJ5dGVzKCkpOworICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBNYXBCYWNraW5n
U3RvcmVDb3B5VG9rZW4sIG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpLCBjYXBhY2l0eUlu
Qnl0ZXMoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJh
dG9yPgogaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+Ojpjb3B5QmFj
a2luZ1N0b3JlKENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCiB7Ci0gICAg
aWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZT
aG91bGRDb3B5KG1fZW50cmllcykpIHsKLSAgICAgICAgRW50cnkqIG9sZEVudHJpZXMgPSBtX2Vu
dHJpZXM7CisgICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiAmJiB2aXNp
dG9yLmNoZWNrSWZTaG91bGRDb3B5KG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpKSkgewor
ICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigp
OwogICAgICAgICBFbnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4odmlzaXRv
ci5hbGxvY2F0ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcygpKSk7CiAgICAgICAgIGlmIChzaG91
bGRQYWNrKCkpCiAgICAgICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRy
aWVzLCBtX2NhcGFjaXR5KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262633</attachid>
            <date>2015-10-07 13:38:14 -0700</date>
            <delta_ts>2015-10-08 13:17:47 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>139855</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA2ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDA4LDYgKzQwOCw3IEBACiAJCTBGNzkwODU2MTlBMjkw
QjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3OTA4NTQxOUEyOTBCMjAwRjYz
MTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmggKi87IH07CiAJCTBGN0IyOTRC
MTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBE
RkdDYXBhYmlsaXRpZXMuaCAqLzsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERG
R0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENE
QiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3QzExQUMxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MDIzRUExNjEz
ODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODMz
NUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMw
MDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY4MzM1Qjgx
NjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNC
NSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzMSw3ICs5MzIsNiBAQAogCQkyQTRCQjdGMzE4QTQx
MTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKIAkJMkE0RUM5MEIxODYwRDZDMjAwOTRG
NzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRFQzkwOTE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJy
aWVyQnVmZmVyLmNwcCAqLzsgfTsKIAkJMkE0RUM5MEMxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRl
QmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTJBNjgyOTVC
MTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTY4Mjk1QTE4NzVGODA1MDBCNkMzRTIgLyog
Q29weVdyaXRlQmFycmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTJBNkY0NjI2MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTZGNDYyNTE3
RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBE
ZWZlckdDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLzsgfTsKIAkJMkE4MzYz
ODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE4MzYzODMxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovOyB9OwpAQCAtMjI1Niw2ICsy
MjU2LDcgQEAKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc5MDg1MzE5QTI5MEIyMDBGNjMx
MEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3OTA4NTQxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVy
ZVJlZ2lzdHJhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlUmVn
aXN0cmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3QzExQUMx
QkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvcHlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
ODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnlWYWxJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNTE2MzlDMUUzMDAx
NDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yNzQ5LDcgKzI3NTAsNiBAQAogCQkyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0Qg
LyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01hbmFnZWRWYWx1ZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJBNEVDOTA5MTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV3JpdGVCYXJyaWVyQnVmZmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE0RUM5MEExODYwRDZDMjAwOTRGNzgy
IC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXcml0ZUJhcnJpZXJCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkE2
ODI5NUExODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVdyaXRlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwT3BlcmF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZl
ckdDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVyR0MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0Mg
LyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQyNDEsMTIgKzQyNDEsMTIgQEAKIAkJCQlDMjQwMzA1MzE0QjQwNEM5MDA3
OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovLAogCQkJCUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTEx
MiAvKiBDb3BpZWRTcGFjZS5oICovLAogCQkJCUMyQzhEMDJCMTRBM0M2QjIwMDU3OEU2NSAvKiBD
b3BpZWRTcGFjZUlubGluZXMuaCAqLywKKwkJCQkwRjdDMTFBQzFCQzM4NjJDMDBDNzRDREIgLyog
Q29weUJhcnJpZXIuaCAqLywKIAkJCQkwRjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRv
a2VuLmggKi8sCiAJCQkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNw
cCAqLywKIAkJCQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCAqLywK
IAkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8s
CiAJCQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICovLAotCQkJ
CTJBNjgyOTVBMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJ
MkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovLAogCQkJCTBGMTM2RDRC
MTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCiAJCQkJMkE4MzYzODMxOEQ3RDBFRTAw
MDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLApAQCAtNjA3OSw3ICs2MDc5
LDYgQEAKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMThEMTQwMTY1NUNGRDUwMDYyQkI4MSAvKiBD
b3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTJBNjgyOTVCMTg3NUY4MDUwMEI2QzNF
MiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGNDFBMDVD
OTQ0MDA1Q0FCNzYgLyogY3BwX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRC
NkYzMUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFk
ZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSBpbiBIZWFkZXJzICovLApAQCAtNjc2Miw2ICs2NzYxLDcgQEAKIAkJCQk4Njg5MTZCMDE1NUYy
ODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUw
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3
NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAxOTA2
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzksNiArNDc5LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKAogICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwKICAgICAgICAgICAgICAgICAgICAgbG9hZGVk
VmFsdWVHUFIpOworICAgICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGpp
dC5icmFuY2hJZk5vdFRvU3BhY2UobG9hZGVkVmFsdWVHUFIpKTsKICAgICAgICAgICAgICAgICBz
dG9yYWdlR1BSID0gbG9hZGVkVmFsdWVHUFI7CiAgICAgICAgICAgICB9CiAKQEAgLTcyMyw2ICs3
MjQsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAg
ICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29mZnNldCkgKiBzaXplb2YoSlNW
YWx1ZSkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5i
cmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgaml0LnN0b3JlVmFs
dWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAogICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcygKQEAgLTc4Niw2ICs3ODgsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRT
aXplKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSMyk7CisgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5v
dFRvU3BhY2Uoc2NyYXRjaEdQUjMpKTsKICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cigmY29w
aWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcsIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgaml0LmJyYW5jaFN1
YlB0cigKQEAgLTgyOSw4ICs4MzIsMTAgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nl
c3NHZW5lcmF0aQogICAgICAgICAgICAgICAgICAgICBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKwogICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9v
ZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoIXNjcmF0Y2hHUFJIYXNTdG9yYWdlKQorICAgICAgICAgICAgaWYgKCFzY3JhdGNoR1BS
SGFzU3RvcmFnZSkgewogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZChqaXQuYnJhbmNo
SWZOb3RUb1NwYWNlKHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGpp
dC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVncywKICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkobV9v
ZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CkBAIC05MTcsNiArOTIyLDcgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogCiAgICAgY2FzZSBBcnJheUxlbmd0aDog
ewogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0YXRlLmZh
aWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaEdQUikpOwog
ICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJh
eVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIHN0YXRlLmZh
aWxBbmRJZ25vcmUuYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVy
czo6TGVzc1RoYW4sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Myw3ICs2NDMsOSBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0CiAgICAgaWYgKFVOTElLRUxZKHNpemUgPCAwKSkKICAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQXJyYXkgc2l6ZSBp
cyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSkpKTsKIAotICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgqdm0sIGFycmF5U3RydWN0dXJl
LCBzaXplKSk7CisgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJy
YXlTdHJ1Y3R1cmUsIHNpemUpOworICAgIHJlc3VsdC0+YnV0dGVyZmx5KCk7IC8vIEVuc3VyZSB0
aGF0IHRoZSBiYWNraW5nIHN0b3JlIGlzIGluIHRvLXNwYWNlLgorICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJl
LCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQpAQCAtMTE3Niw2ICsxMTc4LDMwIEBAIGludDMy
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHIKICAgICByZXR1cm4gZXhlYy0+Y29k
ZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1
ZShzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpOwogfQogCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0VHlwZWRB
cnJheUJ5dGVPZmZzZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisKKyAgICByZXR1cm4ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCktPmJ5
dGVPZmZzZXQoKTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCdXR0ZXJm
bHkoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCit7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKS0+YnV0
dGVyZmx5KCkpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEFycmF5QnVm
ZmVyVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQoreworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworCisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oanNDYXN0PEpTQXJyYXlCdWZmZXJW
aWV3Kj4oY2VsbCktPnZlY3RvcigpKTsKK30KKwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2ICsxMzAsOSBAQCBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MyhFCiBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmlu
ZyopOwogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZ0FuZEdldEJy
YW5jaE9mZnNldChFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcqKTsKK2lu
dDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRUeXBlZEFycmF5Qnl0ZU9mZnNldChFeGVj
U3RhdGUqLCBKU0NlbGwqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnV0dGVy
Zmx5KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRBcnJheUJ1ZmZlclZlY3RvcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqLCBXYXRjaHBvaW50U2V0Kik7CiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyhF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U2l6ZU9mVmFyYXJncyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMy
X3QgZmlyc3RWYXJBcmdPZmZzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxOTA2ODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDE4LDYgKzQwMTgsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworCisg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoSWZOb3RUb1Nw
YWNlKHJlc3VsdEdQUik7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhD
YWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRCdXR0ZXJmbHksIHJlc3VsdEdQUiwgYmFz
ZUdQUikpOwogICAgICAgICAKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OwogICAgICAgICBicmVhazsKQEAgLTQ2MTAsMTAgKzQ2MTQsMTYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRl
eC5ncHIoKTsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigp
OwogCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKwogICAgICAg
ICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3R1cmUgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZCgKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCisgICAgICAgICAgICAgICAgc2NyYXRjaEdQ
UiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAgICAg
ICAgICAgICAgZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogICAgICAgICAKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUg
b2Zmc2V0CiAgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidz
IGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKQEAgLTQ2
MzUsMTQgKzQ2NDUsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgLy8gV2UgdXNlIHJlc3VsdFBheWxvYWRHUFIgYXMgYSB0ZW1wb3JhcnkgaGVy
ZS4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgY2xvYmJlciBpdCBhZnRlciBnZXR0aW5nIHRoZSAKICAg
ICAgICAgLy8gdmFsdWUgb3V0IG9mIGluZGV4R1BSIGFuZCBlbnVtZXJhdG9yR1BSIGJlY2F1c2Ug
cmVzdWx0UGF5bG9hZEdQUiBjb3VsZCByZXVzZSBlaXRoZXIgb2YgdGhvc2UgcmVnaXN0ZXJzLgot
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdFBheWxvYWRHUFIpOyAKKyAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKG1faml0LmJyYW5jaElmTm90VG9TcGFjZShyZXN1bHRQYXlsb2FkR1BSKSk7CiAgICAg
ICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
b2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHJlc3VsdFBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKIAogICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVz
dWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikpOworICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUikpOwogI2VuZGlmCiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxOTA2
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MDM0LDYgKzQwMzQsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwor
CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoSWZOb3RU
b1NwYWNlKHJlc3VsdEdQUik7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1Bh
dGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRCdXR0ZXJmbHksIHJlc3VsdEdQUiwg
YmFzZUdQUikpOwogICAgICAgICAKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOwogICAgICAgICBicmVhazsKQEAgLTQ2MzMsMTAgKzQ2MzcsMTYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIg
PSBzY3JhdGNoMS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIu
Z3ByKCk7CiAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworCiAg
ICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2gxR1BSKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3R1
cmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAg
ICAgc2NyYXRjaDFHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworICAg
ICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAorICAgICAgICAgICAgICAgIHNj
cmF0Y2gxR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAg
ICAgICAgICAgICAgICAgICBlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBDb21w
dXRlIHRoZSBvZmZzZXQKICAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVt
ZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vz
cwpAQCAtNDY1MCw2ICs0NjYwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgICAgICBv
dXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaElmTm90
VG9TcGFjZShzY3JhdGNoMkdQUikpOwogICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3Jh
dGNoMUdQUik7CiAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgbV9qaXQubmVnMzIoc2NyYXRjaDFH
UFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mzg5LDYgKzQzODksMTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgICAgICBtX2pp
dC5sb2FkUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLAogICAgICAgICAgICAgc3RvcmFn
ZVJlZyk7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93
UGF0aENhbGwoCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZOb3RUb1NwYWNlKHN0b3Jh
Z2VSZWcpLAorICAgICAgICAgICAgICAgIHRoaXMsIG9wZXJhdGlvbkdldEFycmF5QnVmZmVyVmVj
dG9yLCBzdG9yYWdlUmVnLCBiYXNlUmVnKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAK
QEAgLTQ0MDksOSArNDQxNCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlw
ZWRBcnJhCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTW9k
ZSgpKSwKICAgICAgICAgVHJ1c3RlZEltbTMyKFdhc3RlZnVsVHlwZWRBcnJheSkpOworCisgICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIAogICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgZGF0YUdQUik7CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaElmTm90VG9T
cGFjZShkYXRhR1BSKSk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHZlY3RvckdQ
Uik7CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaElmTm90VG9TcGFjZSh2ZWN0b3JH
UFIpKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRhdGFHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZBcnJheUJ1ZmZlcigpKSwgZGF0YUdQUik7CiAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkYXRhR1BSLCBBcnJheUJ1ZmZlcjo6b2Zm
c2V0T2ZEYXRhKCkpLCBkYXRhR1BSKTsKICAgICBtX2ppdC5zdWJQdHIoZGF0YUdQUiwgdmVjdG9y
R1BSKTsKQEAgLTQ0MjIsNiArNDQzMSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRUeXBlZEFycmEKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHZlY3RvckdQUik7
CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKKyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25HZXRUeXBl
ZEFycmF5Qnl0ZU9mZnNldCwgdmVjdG9yR1BSLCBiYXNlR1BSKSk7CiAgICAgCiAgICAgaW50MzJS
ZXN1bHQodmVjdG9yR1BSLCBub2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI4MCw3ICsyMjgwLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVH
ZXRCdXR0ZXJmbHkoKQogICAgIHsKLSAgICAgICAgc2V0U3RvcmFnZShtX291dC5sb2FkUHRyKGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7Cisg
ICAgICAgIHNldFN0b3JhZ2UobG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ29uc3RhbnRTdG9y
YWdlUG9pbnRlcigpCkBAIC0yMzE1LDcgKzIzMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzZXRTdG9yYWdlKG1fb3V0Lmxv
YWRQdHIoY2VsbCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpKTsKKyAgICAgICAg
c2V0U3RvcmFnZShsb2FkVmVjdG9yV2l0aEJhcnJpZXIoY2VsbCk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZUNoZWNrQXJyYXkoKQpAQCAtMjMzNSwyNyArMjMzNSwyNSBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgTFZhbHVlIGJhc2VQdHIgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOyAgICAKIAotICAgICAgICBMQmFzaWNCbG9jayBzaW1wbGVDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJ3YXN0ZWxlc3MgdHlwZWQgYXJyYXkiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2Nr
IHdhc3RlZnVsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgid2FzdGVmdWwgdHlwZWQgYXJy
YXkiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiY29udGludWF0aW9uIGJyYW5jaCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2lt
cGxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQg
d2FzdGVsZXNzIHR5cGVkIGFycmF5IikpOworICAgICAgICBMQmFzaWNCbG9jayB3YXN0ZWZ1bENh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0IHdhc3Rl
ZnVsIHR5cGVkIGFycmF5IikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0IGNvbnRpbnVhdGlv
biIpKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBtb2RlID0gbV9vdXQubG9hZDMyKGJhc2VQ
dHIsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfbW9kZSk7CiAgICAgICAgIG1fb3V0LmJyYW5j
aCgKICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKG1vZGUsIG1fb3V0LmNvbnN0SW50MzIoV2Fz
dGVmdWxUeXBlZEFycmF5KSksCiAgICAgICAgICAgICB1bnN1cmUoc2ltcGxlQ2FzZSksIHVuc3Vy
ZSh3YXN0ZWZ1bENhc2UpKTsKIAotICAgICAgICAvLyBiZWdpbiBzaW1wbGUgY2FzZSAgICAgICAg
CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2ltcGxlQ2Fz
ZSwgd2FzdGVmdWxDYXNlKTsKIAogICAgICAgICBWYWx1ZUZyb21CbG9jayBzaW1wbGVPdXQgPSBt
X291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOwogCiAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKIAotICAgICAgICAvLyBiZWdpbiB3YXN0ZWZ1bCBjYXNlCiAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHdhc3RlZnVsQ2FzZSwgY29udGludWF0aW9uKTsKIAotICAgICAgICBM
VmFsdWUgdmVjdG9yUHRyID0gbV9vdXQubG9hZFB0cihiYXNlUHRyLCBtX2hlYXBzLkpTQXJyYXlC
dWZmZXJWaWV3X3ZlY3Rvcik7Ci0gICAgICAgIExWYWx1ZSBidXR0ZXJmbHlQdHIgPSBtX291dC5s
b2FkUHRyKGJhc2VQdHIsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgTFZh
bHVlIHZlY3RvclB0ciA9IGxvYWRWZWN0b3JXaXRoQmFycmllcihiYXNlUHRyKTsKKyAgICAgICAg
TFZhbHVlIGJ1dHRlcmZseVB0ciA9IGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihiYXNlUHRyKTsK
ICAgICAgICAgTFZhbHVlIGFycmF5QnVmZmVyUHRyID0gbV9vdXQubG9hZFB0cihidXR0ZXJmbHlQ
dHIsIG1faGVhcHMuQnV0dGVyZmx5X2FycmF5QnVmZmVyKTsKICAgICAgICAgTFZhbHVlIGRhdGFQ
dHIgPSBtX291dC5sb2FkUHRyKGFycmF5QnVmZmVyUHRyLCBtX2hlYXBzLkFycmF5QnVmZmVyX2Rh
dGEpOwogCkBAIC0yMzY0LDcgKzIzNjIsNiBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwogCi0gICAgICAgIC8vIG91dHB1dAogICAgICAgICBzZXRJbnQzMihtX291dC5jYXN0
VG9JbnQzMihtX291dC5waGkobV9vdXQuaW50UHRyLCBzaW1wbGVPdXQsIHdhc3RlZnVsT3V0KSkp
OwogICAgIH0KICAgICAKQEAgLTQwMTAsNyArNDAwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSB3ZWFrUG9pbnRl
cihtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCkuYXNDZWxsKCkpOwogICAgICAgICAgICAgICAg
IGlmICghaXNJbmxpbmVPZmZzZXQobWV0aG9kLm9mZnNldCgpKSkKLSAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlCYXNlID0gbV9vdXQubG9hZFB0cihwcm9wZXJ0eUJhc2UsIG1faGVhcHMuSlNP
YmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gbG9h
ZEJ1dHRlcmZseVdpdGhCYXJyaWVyKHByb3BlcnR5QmFzZSk7CiAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gbG9hZFByb3BlcnR5KAogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UsIGRh
dGEuaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9mZnNldCgpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTQwNzgsNyArNDA3NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5
KTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGxvYWRCdXR0ZXJmbHlXaXRoQmFycmll
cihiYXNlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3BsYW4udHJhbnNpdGlvbnMuYWRkTGF6aWx5KAogICAgICAgICAgICAgICAgICAgICBjb2RlQmxv
Y2soKSwgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCkBAIC01MzAy
LDcgKzUyOTksNyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZMaW5lTG9hZCwgc2xvd0Nhc2UpOwotICAg
ICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVj
dF9idXR0ZXJmbHkpOworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvYWRCdXR0ZXJmbHlXaXRo
QmFycmllcihiYXNlKTsKICAgICAgICAgTFZhbHVlIHJlYWxJbmRleCA9IG1fb3V0LnNpZ25FeHQo
CiAgICAgICAgICAgICBtX291dC5uZWcobV9vdXQuc3ViKGluZGV4LCBtX291dC5sb2FkMzIoZW51
bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2Fw
YWNpdHkpKSksIAogICAgICAgICAgICAgbV9vdXQuaW50NjQpOwpAQCAtNTkzNywxNCArNTkzNCwx
NCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgCiAgICAg
ICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXh0U3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lmxv
YWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgICAgICBy
ZXR1cm4gbG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKG9iamVjdCk7CiAgICAgICAgIAogICAgICAg
ICBMVmFsdWUgcmVzdWx0OwogICAgICAgICBpZiAoIXByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKQogICAgICAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2Uob2JqZWN0LCBwcmV2aW91c1N0cnVjdHVyZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgcmVzdWx0ID0gcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAgICAgICBv
YmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSks
CisgICAgICAgICAgICAgICAgb2JqZWN0LCBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIob2JqZWN0
KSwKICAgICAgICAgICAgICAgICBwcmV2aW91c1N0cnVjdHVyZSwgbmV4dFN0cnVjdHVyZSk7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC02MDUyLDYgKzYwNDksMzkgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KKworICAgIExWYWx1ZSBsb2FkQnV0dGVy
Zmx5V2l0aEJhcnJpZXIoTFZhbHVlIG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb3B5
QmFycmllcigKKyAgICAgICAgICAgIG9iamVjdCwgbV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVh
cHMuSlNPYmplY3RfYnV0dGVyZmx5KSwgb3BlcmF0aW9uR2V0QnV0dGVyZmx5KTsKKyAgICB9Cisg
ICAgCisgICAgTFZhbHVlIGxvYWRWZWN0b3JXaXRoQmFycmllcihMVmFsdWUgb2JqZWN0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAorICAgICAgICAgICAgb2JqZWN0LCBtX291
dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpLAorICAg
ICAgICAgICAgb3BlcmF0aW9uR2V0QXJyYXlCdWZmZXJWZWN0b3IpOworICAgIH0KKyAgICAKKyAg
ICBMVmFsdWUgY29weUJhcnJpZXIoTFZhbHVlIG9iamVjdCwgTFZhbHVlIHBvaW50ZXIsIFBfSklU
T3BlcmF0aW9uX0VDIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1Bh
dGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRCdXR0ZXJmbHlXaXRoQmFycmllciBzbG93
IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgibG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyIGNvbnRpbnVhdGlvbiIpKTsKKwor
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHBvaW50ZXIp
OworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvUHRy
KHBvaW50ZXIsIG1fb3V0LmNvbnN0SW50UHRyKENvcHlCYXJyaWVyOjpzcGFjZUJpdHMpKSwKKyAg
ICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisKKyAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29u
dGludWF0aW9uKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQu
YW5jaG9yKAorICAgICAgICAgICAgdm1DYWxsTm9FeGNlcHRpb25zKG1fb3V0Lm9wZXJhdGlvbihz
bG93UGF0aCksIG1fY2FsbEZyYW1lLCBvYmplY3QpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCk7CisgICAgfQogICAgIAogICAgIFR5cGVkUG9pbnRlciBiYXNlSW5kZXgoSW5k
ZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1ZSBpbmRleCwgRWRn
ZSBlZGdlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDkgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aQogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUoCiAgICAgICAg
IHZtLCBudWxscHRyLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCBJ
bmRleGluZ0hlYWRlcigpLCAwKTsKICAgICAKLSAgICByZXR1cm4gSlNGaW5hbE9iamVjdDo6Y3Jl
YXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICBKU09iamVjdCogcmVzdWx0ID0g
SlNGaW5hbE9iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICBy
ZXN1bHQtPmJ1dHRlcmZseSgpOyAvLyBFbnN1cmUgdGhhdCB0aGUgYnV0dGVyZmx5IGlzIGluIHRv
LXNwYWNlLgorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblBvcHVsYXRlT2JqZWN0SW5PU1IoCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Miw2ICszNjIsOCBA
QCBwdWJsaWM6CiAgICAgTFZhbHVlIHRlc3ROb25aZXJvMzIoTFZhbHVlIHZhbHVlLCBMVmFsdWUg
bWFzaykgeyByZXR1cm4gbm90WmVybzMyKGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9CiAgICAgTFZh
bHVlIHRlc3RJc1plcm82NChMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc1pl
cm82NChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogICAgIExWYWx1ZSB0ZXN0Tm9uWmVybzY0KExW
YWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIG5vdFplcm82NChiaXRBbmQodmFsdWUs
IG1hc2spKTsgfQorICAgIExWYWx1ZSB0ZXN0SXNaZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVl
IG1hc2spIHsgcmV0dXJuIGlzTnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQorICAgIExWYWx1
ZSB0ZXN0Tm9uWmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3RO
dWxsKGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9CiAgICAgCiAgICAgTFZhbHVlIHNlbGVjdChMVmFs
dWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVybiBidWlsZFNl
bGVjdChtX2J1aWxkZXIsIHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOyB9CiAgICAgTFZhbHVlIGV4
dHJhY3RWYWx1ZShMVmFsdWUgYWdnVmFsLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gYnVpbGRF
eHRyYWN0VmFsdWUobV9idWlsZGVyLCBhZ2dWYWwsIGluZGV4KTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29weUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3B5QmFycmllci5oCShyZXZpc2lvbiAxOTA2MDMpCShmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlXcml0ZUJhcnJpZXIuaDoxOTA2MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5QmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvcHlXcml0ZUJhcnJpZXJfaAor
I2RlZmluZSBDb3B5V3JpdGVCYXJyaWVyX2gKKworI2luY2x1ZGUgIkhlYXAuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgQ29weVdyaXRlQmFycmll
ciB7CitwdWJsaWM6CisgICAgQ29weVdyaXRlQmFycmllcigpCisgICAgICAgIDogbV92YWx1ZSgw
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ29weVdyaXRlQmFycmllcihWTSYgdm0sIGNvbnN0
IEpTQ2VsbCogb3duZXIsIFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0KHZtLCBv
d25lciwgJnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgQ29weVdyaXRlQmFycmllcihWTSYgdm0s
IGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0
KHZtLCBvd25lciwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBnZXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorICAgIAorICAgIFQqIG9wZXJh
dG9yKigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2V0KCk7CisgICAgfQorICAgIAor
ICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldCgpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQq
IHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOworICAgICAgICB2
bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0V2l0
aG91dFdyaXRlQmFycmllcihUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPm1fdmFsdWUg
PSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZSA9IDA7IH0K
KworcHJpdmF0ZToKKyAgICBUKiBtX3ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBDb3B5V3JpdGVCYXJyaWVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29weUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNjcgKzIzLDE1OCBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQ29w
eVdyaXRlQmFycmllcl9oCi0jZGVmaW5lIENvcHlXcml0ZUJhcnJpZXJfaAorI2lmbmRlZiBDb3B5
QmFycmllcl9oCisjZGVmaW5lIENvcHlCYXJyaWVyX2gKIAogI2luY2x1ZGUgIkhlYXAuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgQ29weVdyaXRl
QmFycmllciB7CitlbnVtIGNsYXNzIENvcHlTdGF0ZSB7CisgICAgLy8gVGhlIGJhY2tpbmcgc3Rv
cmUgaXMgbm90IHBsYW5uZWQgdG8gZ2V0IGNvcGllZCBpbiB0aGlzIGVwb2NoLiBJZiB5b3Uga2Vl
cCBhIHBvaW50ZXIgdG8gdGhlIGJhY2tpbmcKKyAgICAvLyBzdG9yZSBvbiB0aGUgc3RhY2ssIGl0
IHdpbGwgbm90IGdldCBjb3BpZWQuIElmIHlvdSBkb24ndCBrZWVwIGl0IG9uIHRoZSBzdGFjaywg
aXQgbWF5IGdldCBjb3BpZWQKKyAgICAvLyBzdGFydGluZyBhdCB0aGUgbmV4dCBoYW5kc2hha2Ug
KHRoYXQgaXMsIGl0IG1heSB0cmFuc2l0aW9uIGZyb20gVG9TcGFjZSB0byBDb3B5UGxhbm5lZCwg
YnV0CisgICAgLy8gQ29weVBsYW5uZWQgbWVhbnMgVG9TcGFjZSBwcmlvciB0byB0aGUgaGFuZHNo
YWtlIHRoYXQgc3RhcnRzIHRoZSBjb3B5IHBoYXNlKS4KKyAgICBUb1NwYWNlLAorCisgICAgLy8g
VGhlIG1hcmtpbmcgcGhhc2UgaGFzIHNlbGVjdGVkIHRoaXMgYmFja2luZyBzdG9yZSB0byBiZSBj
b3BpZWQuIElmIHdlIGFyZSBub3QgeWV0IGluIHRoZSBjb3B5aW5nCisgICAgLy8gcGhhc2UsIHRo
aXMgYmFja2luZyBzdG9yZSBpcyBzdGlsbCBpbiB0by1zcGFjZS4gQWxsIHRoYXQgaXMgbmVlZGVk
IGluIHN1Y2ggYSBjYXNlIGlzIHRvIG1hc2sgb2ZmIHRoZQorICAgIC8vIGxvdyBiaXRzLiBJZiB3
ZSBhcmUgaW4gdGhlIGNvcHlpbmcgcGhhc2UsIHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IHBv
aW50cyB0byBmcm9tLXNwYWNlLiBUaGUKKyAgICAvLyBiYXJyaWVyIHNob3VsZCBmaXJzdCBjb3B5
IHRoZSBvYmplY3QgLSBvciB3YWl0IGZvciBjb3B5aW5nIHRvIGZpbmlzaCAtIGJlZm9yZSB1c2lu
ZyB0aGUgb2JqZWN0LgorICAgIENvcHlQbGFubmVkLAorCisgICAgLy8gVGhlIG9iamVjdCBpcyBi
ZWluZyBjb3BpZWQgcmlnaHQgbm93LiBBbnlvbmUgd2FudGluZyB0byB1c2UgdGhlIG9iamVjdCBt
dXN0IHdhaXQgZm9yIHRoZSBvYmplY3QgdG8KKyAgICAvLyBmaW5pc2ggYmVpbmcgY29waWVkLiBO
b3RpZmljYXRpb25zIGFib3V0IGNvcHlpbmcgdXNlIHRoZSBQYXJraW5nTG90IGNvbWJpbmVkIHdp
dGggdGhlc2UgYml0cy4gSWYgdGhlCisgICAgLy8gc3RhdGUgaXMgQ29weWluZ0FuZFdhaXRpbmcs
IHRoZW4gd2hlbiB0aGUgY29weWluZyBmaW5pc2hlcywgd2hhdGV2ZXIgdGhyZWFkIHdhcyBkb2lu
ZyBpdCB3aWxsCisgICAgLy8gdW5wYXJrQWxsKCkgb24gdGhlIGFkZHJlc3Mgb2YgdGhlIENvcHlC
YXJyaWVyQmFzZS4gU28sIHRvIHdhaXQgZm9yIGNvcHlpbmcgdG8gZmluaXNoLCBDQVMgdGhpcyB0
bworICAgIC8vIENvcHlpbmdBbmRXYWl0aW5nIGFuZCB0aGVuIHBhcmtDb25kaXRpb25hbGx5IG9u
IHRoZSBiYXJyaWVyIGFkZHJlc3MuCisgICAgQ29weWluZywKKworICAgIC8vIFRoZSBvYmplY3Qg
aXMgYmVpbmcgY29waWVkIHJpZ2h0IG5vdywgYW5kIHRoZXJlIGFyZSBvbmUgb3IgbW9yZSB0aHJl
YWRzIHBhcmtlZC4gVGhvc2UgdGhyZWFkcyB3YW50CisgICAgLy8gdG8gYmUgdW5wYXJrZWQgd2hl
biBjb3B5aW5nIGlzIGRvbmUuIFNvLCB3aGljaGV2ZXIgdGhyZWFkIGRvZXMgdGhlIGNvcHlpbmcg
bmVlZHMgdG8gY2FsbCB1bnBhcmtBbGwoKQorICAgIC8vIG9uIHRoZSBiYXJyaWVyIGFkZHJlc3Mg
YWZ0ZXIgY29weWluZyBpcyBkb25lLgorICAgIENvcHlpbmdBbmRXYWl0aW5nCit9OworCitjbGFz
cyBDb3B5QmFycmllckJhc2UgewogcHVibGljOgotICAgIENvcHlXcml0ZUJhcnJpZXIoKQotICAg
ICAgICA6IG1fdmFsdWUoMCkKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3BhY2VCaXRzID0g
MzsKKworICAgIENvcHlCYXJyaWVyQmFzZSgpCisgICAgICAgIDogbV92YWx1ZShudWxscHRyKQog
ICAgIHsKICAgICB9CiAgICAgCi0gICAgQ29weVdyaXRlQmFycmllcihWTSYgdm0sIGNvbnN0IEpT
Q2VsbCogb3duZXIsIFQmIHZhbHVlKQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIW1fdmFsdWU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgdm9pZCogZ2V0V2l0aG91dEJhcnJpZXIoKSBjb25z
dAogICAgIHsKLSAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwgJnZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIG1fdmFsdWU7CiAgICAgfQotICAgIAotICAgIENvcHlXcml0ZUJhcnJpZXIoVk0mIHZt
LCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKKworICAgIC8vIFdoZW4gd2UgYXJlIGlu
IHRoZSBjb25jdXJyZW50IGNvcHlpbmcgcGhhc2UsIHRoaXMgbWV0aG9kIG1heSBsb2NrIHRoZSBi
YXJyaWVyIG9iamVjdCAoaS5lLiB0aGUgZmllbGQKKyAgICAvLyBwb2ludGluZyB0byBjb3BpZWQg
c3BhY2UpIGFuZCBjYWxsIGRpcmVjdGx5IGludG8gdGhlIG93bmluZyBvYmplY3QncyBjb3B5QmFj
a2luZ1N0b3JlKCkgbWV0aG9kLgorICAgIHZvaWQqIGdldChjb25zdCBKU0NlbGwqIG93bmVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gbV92YWx1ZTsKKyAgICAgICAgaWYg
KFVOTElLRUxZKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHJlc3VsdCkgJiBzcGFjZUJpdHMpKQor
ICAgICAgICAgICAgcmV0dXJuIEhlYXA6OmNvcHlCYXJyaWVyKG93bmVyLCBtX3ZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBDb3B5U3RhdGUgY29weVN0YXRlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb3B5U3RhdGU+KGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KG1fdmFsdWUpICYgc3BhY2VCaXRzKTsKKyAgICB9CisKKyAgICAv
LyBUaGlzIG9ubHkgd29ya3Mgd2hlbiB5b3Uga25vdyB0aGF0IHRoZXJlIGlzIG5vYm9keSBlbHNl
IGNvbmN1cnJlbnRseSBtZXNzaW5nIHdpdGggdGhpcyBDb3B5QmFycmllci4KKyAgICAvLyBUaGF0
J3MgaGFyZCB0byBndWFyYW50ZWUsIHRob3VnaCB0aGVyZSBhcmUgYSBmZXcgdW51c3VhbCBwbGFj
ZXMgd2hlcmUgdGhpcyBlbmRzIHVwIGJlaW5nIHNhZmUuCisgICAgLy8gVXN1YWxseSB5b3Ugd2Fu
dCB0byB1c2UgQ29weUJhcnJpZXI6OndlYWtDQVMoKS4KKyAgICB2b2lkIHNldENvcHlTdGF0ZShD
b3B5U3RhdGUgY29weVN0YXRlKQorICAgIHsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKKyAgICAgICAgdWludHB0cl90IHZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV92
YWx1ZSk7CisgICAgICAgIHZhbHVlICY9IH5zdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHNwYWNlQml0
cyk7CisgICAgICAgIHZhbHVlIHw9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oY29weVN0YXRlKTsK
KyAgICAgICAgbV92YWx1ZSA9IGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWUpOworICAgIH0KKwor
ICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFsdWUgPSBudWxscHRyOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBDb3B5QmFycmllckJhc2UoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCB2b2lkKiB2YWx1
ZSkKICAgICB7CiAgICAgICAgIHRoaXMtPnNldCh2bSwgb3duZXIsIHZhbHVlKTsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV92YWx1ZTsgfQorICAg
IHZvaWQgc2V0KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgdm9pZCogdmFsdWUpCisgICAg
eworICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKG93bmVyKTsKKyAgICB9CiAgICAgCi0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICB2b2lkIHNldFdpdGhvdXRCYXJyaWVyKHZv
aWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOworICAgIH0K
KworICAgIGJvb2wgd2Vha0NBU1dpdGhvdXRCYXJyaWVyKAorICAgICAgICB2b2lkKiBvbGRQb2lu
dGVyLCBDb3B5U3RhdGUgb2xkQ29weVN0YXRlLCB2b2lkKiBuZXdQb2ludGVyLCBDb3B5U3RhdGUg
bmV3Q29weVN0YXRlKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IG9sZFZhbHVlID0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4ob2xkUG9pbnRlcikgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG9s
ZENvcHlTdGF0ZSk7CisgICAgICAgIHVpbnRwdHJfdCBuZXdWYWx1ZSA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KG5ld1BvaW50ZXIpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihuZXdDb3B5U3Rh
dGUpOworICAgICAgICByZXR1cm4gd2Vha0NvbXBhcmVBbmRTd2FwKCZtX3ZhbHVlLCBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KG9sZFZhbHVlKSwgYml0d2lzZV9jYXN0PHZvaWQqPihuZXdWYWx1ZSkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBtdXRhYmxlIHZvaWQqIG1fdmFsdWU7Cit9OworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIENvcHlCYXJyaWVyIDogcHVibGljIENvcHlCYXJyaWVy
QmFzZSB7CitwdWJsaWM6CisgICAgQ29weUJhcnJpZXIoKQorICAgIHsKKyAgICB9CiAgICAgCi0g
ICAgVCogZ2V0KCkgY29uc3QKKyAgICBDb3B5QmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCog
b3duZXIsIFQmIHZhbHVlKQorICAgICAgICA6IENvcHlCYXJyaWVyQmFzZSh2bSwgb3duZXIsICZ2
YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlOwogICAgIH0KICAgICAKLSAgICBU
KiBvcGVyYXRvciooKSBjb25zdAorICAgIENvcHlCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxs
KiBvd25lciwgVCogdmFsdWUpCisgICAgICAgIDogQ29weUJhcnJpZXJCYXNlKHZtLCBvd25lciwg
dmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0KCk7CisgICAgfQorCisgICAgVCogZ2V0
V2l0aG91dEJhcnJpZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxUKj4oQ29weUJhcnJpZXJCYXNlOjpnZXRXaXRob3V0QmFycmllcigpKTsKICAgICB9CiAgICAg
Ci0gICAgVCogb3BlcmF0b3ItPigpIGNvbnN0CisgICAgVCogZ2V0KGNvbnN0IEpTQ2VsbCogb3du
ZXIpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gZ2V0KCk7CisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8VCo+KENvcHlCYXJyaWVyQmFzZTo6Z2V0KG93bmVyKSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgc2V0KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCiAg
ICAgewotICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKG93bmVyKTsKKyAgICAgICAgQ29weUJhcnJpZXJCYXNlOjpzZXQodm0sIG93bmVy
LCB2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0V2l0aG91dFdyaXRlQmFycmllcihU
KiB2YWx1ZSkKKyAgICB2b2lkIHNldFdpdGhvdXRCYXJyaWVyKFQqIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOworICAgICAgICBDb3B5QmFycmllckJhc2U6OnNl
dFdpdGhvdXRCYXJyaWVyKHZhbHVlKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhcigpIHsg
bV92YWx1ZSA9IDA7IH0KIAotcHJpdmF0ZToKLSAgICBUKiBtX3ZhbHVlOworICAgIGJvb2wgd2Vh
a0NBU1dpdGhvdXRCYXJyaWVyKFQqIG9sZFBvaW50ZXIsIENvcHlTdGF0ZSBvbGRDb3B5U3RhdGUs
IFQqIG5ld1BvaW50ZXIsIENvcHlTdGF0ZSBuZXdDb3B5U3RhdGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gQ29weUJhcnJpZXJCYXNlOjp3ZWFrQ0FTV2l0aG91dEJhcnJpZXIob2xkUG9pbnRlciwg
b2xkQ29weVN0YXRlLCBuZXdQb2ludGVyLCBuZXdDb3B5U3RhdGUpOworICAgIH0KIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCi0jZW5kaWYgLy8gQ29weVdyaXRlQmFycmllcl9oCisjZW5kaWYg
Ly8gQ29weUJhcnJpZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZp
c2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29weVZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBpbmxpbmUgYm9vbCBDb3B5VmlzaXRvcjo6Y2hl
Y2tJZlNob3VsZENvcHkodm9pZCogb2xkUHRyKQogeworICAgIGlmICghb2xkUHRyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkU3BhY2U6OmJs
b2NrRm9yKG9sZFB0cik7CiAgICAgaWYgKGJsb2NrLT5pc092ZXJzaXplKCkgfHwgYmxvY2stPmlz
UGlubmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcHlXcml0ZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3B5V3JpdGVCYXJyaWVyLmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlXcml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb3B5V3JpdGVCYXJyaWVy
X2gKLSNkZWZpbmUgQ29weVdyaXRlQmFycmllcl9oCi0KLSNpbmNsdWRlICJIZWFwLmgiCi0KLW5h
bWVzcGFjZSBKU0MgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIENvcHlXcml0ZUJh
cnJpZXIgewotcHVibGljOgotICAgIENvcHlXcml0ZUJhcnJpZXIoKQotICAgICAgICA6IG1fdmFs
dWUoMCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENvcHlXcml0ZUJhcnJpZXIoVk0mIHZtLCBj
b25zdCBKU0NlbGwqIG93bmVyLCBUJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMtPnNldCh2
bSwgb3duZXIsICZ2YWx1ZSk7Ci0gICAgfQotICAgIAotICAgIENvcHlXcml0ZUJhcnJpZXIoVk0m
IHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMt
PnNldCh2bSwgb3duZXIsIHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhbV92YWx1ZTsgfQotICAgIAotICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgCi0gICAgVCogZ2V0KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlOwotICAgIH0KLSAgICAKLSAgICBUKiBv
cGVyYXRvciooKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldCgpOwotICAgIH0KLSAg
ICAKLSAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXQo
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXQoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVy
LCBUKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKLSAgICAg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoVCogdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5tX3Zh
bHVlID0gdmFsdWU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFsdWUgPSAw
OyB9Ci0KLXByaXZhdGU6Ci0gICAgVCogbV92YWx1ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCi0jZW5kaWYgLy8gQ29weVdyaXRlQmFycmllcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTAsNiArMTAxMCwxMiBAQCB2b2lk
IEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgbV9zbG90VmlzaXRvci5h
cHBlbmRUb01hcmtTdGFjayhjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKIH0KIAordm9pZCog
SGVhcDo6Y29weUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgdm9pZComIHBvaW50ZXIpCit7CisgICAg
Ly8gRG8gbm90aGluZyBmb3Igbm93LgorICAgIHJldHVybiBwb2ludGVyOworfQorCiB2b2lkIEhl
YXA6OmNvbGxlY3RBbmRTd2VlcChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKQogewogICAg
IGlmICghbV9pc1NhZmVUb0NvbGxlY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB3cml0
ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIo
Y29uc3QgSlNDZWxsKiwgSlNDZWxsKik7CiAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCogY29weUJhcnJpZXIoY29uc3QgSlNDZWxsKiBvd25lciwgdm9pZComIGNvcGllZFNwYWNl
UG9pbnRlcik7CisKICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlcigp
IHsgcmV0dXJuIG1fd3JpdGVCYXJyaWVyQnVmZmVyOyB9CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFy
cmllckJ1ZmZlcihKU0NlbGwqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwSW5saW5lcy5oCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZu
ZGVmIEhlYXBJbmxpbmVzX2gKICNkZWZpbmUgSGVhcElubGluZXNfaAogCisjaW5jbHVkZSAiQ29w
eUJhcnJpZXIuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1NCw2ICs3NTQsMTEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmRpdGlvbiwgbGVmdEhhbmRT
aWRlLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogI2VuZGlmCiAgICAgfQorCisgICAgSnVt
cCBicmFuY2hJZk5vdFRvU3BhY2UoR1BSUmVnIHN0b3JhZ2VHUFIpCisgICAgeworICAgICAgICBy
ZXR1cm4gYnJhbmNoVGVzdDMyKE5vblplcm8sIHN0b3JhZ2VHUFIsIFRydXN0ZWRJbW0zMihDb3B5
QmFycmllcjo6c3BhY2VCaXRzKSk7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBBZGRyZXNzIGFk
ZHJlc3NGb3JCeXRlT2Zmc2V0KHB0cmRpZmZfdCBieXRlT2Zmc2V0KQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9u
IDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE3NCw2ICsxMTc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2RpcmVjdF9wbmFtZShJbnN0cgogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5l
CiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QwKSk7CiAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwg
cmVnVDIpOwogICAgIG5lZzMyKHJlZ1QyKTsKICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwpAQCAtMTE5MCw2ICsxMTkxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9kaXJlY3RfcG5hbWUoSQogICAgIGludCBiYXNl
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBsaW5rU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpdGVyLCBiYXNlKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOwogCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTk2LDYgKzExOTYsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKEluc3RyCiAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mg
b3V0IG9mIGxpbmUKICAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFRvU3BhY2UocmVnVDApKTsKICAgICBzdWIzMihBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgbmVnMzIocmVnVDEpOwogICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QxLCByZWdUMSk7CkBAIC0xMjEyLDYgKzEyMTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2RpcmVjdF9wbmFtZShJCiAgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2Up
OwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNyBAQCBKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUxvYWQoSW5zdHJ1CiAgICAgCiAgICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKERvdWJsZVNoYXBl
KSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2UocmVn
VDIpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAg
ICBsb2FkRG91YmxlKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpLCBmcFJlZ1Qw
KTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaERvdWJsZShEb3VibGVOb3RFcXVhbE9yVW5v
cmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QwKSk7CkBAIC0xNzgsNiArMTc5LDcgQEAgSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzTG9hZChJbgogICAgIAogICAgIGJhZFR5cGUgPSBwYXRj
aGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihleHBlY3RlZFNoYXBl
KSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2UocmVn
VDIpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAg
ICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCkpOwpAQCAtMTkzLDYg
KzE5NSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlTG9hZCgKICAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoU2xv
d1B1dEFycmF5U3RvcmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUpKTsKIAogICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QyKSk7CiAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkpLCByZWdUMCk7CkBAIC0yNTEsNiArMjU0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoSW5zdHJ1YwogICAgIG5vdFN0cmluZy5saW5rKHRoaXMpOwogICAgIG5vbkNl
bGwubGluayh0aGlzKTsKICAgICAKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHJlYWQgYmFy
cmllcgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdmVjdG9yIGxlbmd0aCBjaGVjawogICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFsdWUKICAgICAKQEAgLTMyMyw2ICszMjcs
NyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzCiAgICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4
aW5nU2hhcGUpKTsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbHdvQ2FzZXMuYXBwZW5kKGJyYW5jaElm
Tm90VG9TcGFjZShyZWdUMikpOwogICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKTsKIAogICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKQEAgLTM3OCw2
ICszODMsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5CiAgICAg
CiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdFRvU3BhY2UocmVnVDIpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdDY0KFpl
cm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwpAQCAtNDQ4LDggKzQ1NCw5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNl
IG5vdCBhcnJheSBjaGVjawogICAgIAorICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcmVhZCBi
YXJyaWVyCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBvdXQgb2YgYm91bmRzCi0KKyAgICAK
ICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKICAgICBz
d2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIEpJVEludDMyOgpAQCAtNzgwLDYgKzc4Nyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWMKICAgICAgICAgICAgICAgICBp
c091dE9mTGluZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2gpKTsKICAg
ICAgICAgICAgIG5lZzMyKG9mZnNldCk7CiAgICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihv
ZmZzZXQsIG9mZnNldCk7CiAgICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9m
ZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKQEAgLTg1OSw4ICs4NjcsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKElucwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYWQgc3RydWN0dXJlCisgICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gcmVhZCBiYXJyaWVyCisgICAgfQogCiAgICAgaWYgKHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBWYXIgaW5qZWN0aW9u
cyBjaGVjay4KICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwpAQCAtOTIyLDYgKzkzMiw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFRvU3BhY2UocmVn
VDApKTsKICAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKICAgICAgICAg
ICAgIG5lZ1B0cihyZWdUMSk7CiAgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4
KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CkBAIC0xMDE1LDggKzEwMjYsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF90b19zY29wZShJbnN0cgogICAgICAgICAgfHwgcmVzb2x2ZVR5cGUg
PT0gTG9jYWxDbG9zdXJlVmFyKQogICAgICAgICAmJiBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53
YXRjaHBvaW50U2V0LT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpCiAgICAgICAgIGxpbmtDb3Vu
dCsrOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCByZXNvbHZlVHlw
ZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGxpbmtD
b3VudCsrOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAg
bGlua0NvdW50Kys7IC8vIGJhZCBzdHJ1Y3R1cmUKKyAgICAgICAgbGlua0NvdW50Kys7IC8vIHJl
YWQgYmFycmllcgorICAgIH0KICAgICBpZiAoZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUo
KSAhPSBJbml0aWFsaXphdGlvbiAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
IC8vIFREWiBjaGVjay4KICAgICAgICAgbGlua0NvdW50Kys7CiAgICAgaWYgKHJlc29sdmVUeXBl
ID09IFVucmVzb2x2ZWRQcm9wZXJ0eSB8fCByZXNvbHZlVHlwZSA9PSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CkBAIC0xNDQwLDIzICsxNDUzLDI0IEBAIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICBsb2FkOChBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBl
Rm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6
Om9mZnNldE9mTGVuZ3RoKCkpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlC
dWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgYmFzZSk7CisgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaCk7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaCkpOwogICAgIAog
ICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIGlm
IChpc1NpZ25lZCh0eXBlKSkKLSAgICAgICAgICAgIGxvYWQ4U2lnbmVkRXh0ZW5kVG8zMihCYXNl
SW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAg
ICAgICBsb2FkOFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBU
aW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2Fk
OChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7Cisg
ICAgICAgICAgICBsb2FkOChCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSwg
cmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgICAgaWYg
KGlzU2lnbmVkKHR5cGUpKQotICAgICAgICAgICAgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihCYXNl
SW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAg
ICAgICBsb2FkMTZTaWduZWRFeHRlbmRUbzMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwg
VGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9h
ZDE2KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsK
KyAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzVHdv
KSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoKLSAgICAgICAg
bG9hZDMyKEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSwgcmVzdWx0UGF5bG9h
ZCk7CisgICAgICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91
ciksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICBDUkFTSCgpOwpAQCAtMTUxMSwxNSArMTUyNSwxNiBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEZsb2F0VHlwZWRBcnJheUdlCiAgICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBl
KHR5cGUpKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgp
KSkpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZWZWN0b3IoKSksIGJhc2UpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOworICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2gpKTsKICAgICAKICAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgotICAgICAgICBsb2FkRmxvYXQoQmFzZUluZGV4
KGJhc2UsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCBmcFJlZ1QwKTsKKyAgICAgICAgbG9hZEZsb2F0
KEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSwgZnBSZWdUMCk7CiAgICAg
ICAgIGNvbnZlcnRGbG9hdFRvRG91YmxlKGZwUmVnVDAsIGZwUmVnVDApOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIDg6IHsKLSAgICAgICAgbG9hZERvdWJsZShCYXNlSW5kZXgoYmFzZSwgcHJv
cGVydHksIFRpbWVzRWlnaHQpLCBmcFJlZ1QwKTsKKyAgICAgICAgbG9hZERvdWJsZShCYXNlSW5k
ZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRWlnaHQpLCBmcFJlZ1QwKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0xNTc5LDYgKzE1OTQsNyBAQCBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgLy8gV2Ugd291bGQgYmUgbG9hZGlu
ZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwog
ICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KICAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBs
YXRlU2NyYXRjaCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2UobGF0
ZVNjcmF0Y2gpKTsKICAgICAKICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CiAgICAgICAgIEFT
U0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKQEAgLTE2NjQsNiArMTY4MCw3IEBAIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAgICAvLyBXZSB3b3VsZCBiZSBs
b2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBz
bG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgogICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3Io
KSksIGxhdGVTY3JhdGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90VG9TcGFj
ZShsYXRlU2NyYXRjaCkpOwogICAgIAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsK
ICAgICBjYXNlIDQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTExODgsOSArMTE4OCwxMCBAQCBfbGxpbnRfb3BfaXNfb2JqZWN0OgogICAgIGRp
c3BhdGNoKDMpCiAKIAotbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0
eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKK21hY3JvIGxvYWRQcm9wZXJ0
eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwg
dmFsdWUsIHNsb3cpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGlu
ZU9mZnNldCwgLmlzSW5saW5lCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVj
dEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgY29weUJhcnJpZXIob2JqZWN0QW5k
U3RvcmFnZSwgc2xvdykKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycSBw
cm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQpA
QCAtMTIwMSw5ICsxMjAyLDEwIEBAIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQo
cHJvcGUKIGVuZAogCiAKLW1hY3JvIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3Bl
cnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQorbWFjcm8gc3RvcmVQcm9w
ZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFn
ZSwgdmFsdWUsIHNsb3cpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9m
TGluZU9mZnNldCwgLmlzSW5saW5lCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29i
amVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgY29weUJhcnJpZXIob2JqZWN0
QW5kU3RvcmFnZSwgc2xvdykKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGky
cSBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFk
eQpAQCAtMTIyMiw3ICsxMjI0LDcgQEAgX2xsaW50X29wX2dldF9ieV9pZDoKICAgICBiaW5lcSB0
MiwgdDEsIC5vcEdldEJ5SWRTbG93CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDUsIHQxKQog
ICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MikKLSAgICBsb2FkUHJvcGVydHlBdFZhcmlh
YmxlT2Zmc2V0KHQxLCB0MywgdDApCisgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0
MSwgdDMsIHQwLiBvcEdldEJ5SWRTbG93KQogICAgIHN0b3JlcSB0MCwgW2NmciwgdDIsIDhdCiAg
ICAgdmFsdWVQcm9maWxlKHQwLCA4LCB0MSkKICAgICBkaXNwYXRjaCg5KQpAQCAtMTI0Myw2ICsx
MjQ1LDcgQEAgX2xsaW50X29wX2dldF9hcnJheV9sZW5ndGg6CiAgICAgYnRpeiB0MiwgSW5kZXhp
bmdTaGFwZU1hc2ssIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRpc0Zyb21JbnN0cnVj
dGlvbigxLCB0MSkKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MAorICAg
IGNvcHlCYXJyaWVyKHQwLCAub3BHZXRBcnJheUxlbmd0aFNsb3cpCiAgICAgbG9hZGkgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3Ro
W3QwXSwgdDAKICAgICBiaWx0IHQwLCAwLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKICAgICBvcnEg
dGFnVHlwZU51bWJlciwgdDAKQEAgLTEzODIsNyArMTM4NSw3IEBAIF9sbGludF9vcF9wdXRfYnlf
aWQ6CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQxKQogICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUodDEsIHQyKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig1LCB0MSkKLSAgICBz
dG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyKQorICAgIHN0b3JlUHJvcGVy
dHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIsIC5vcFB1dEJ5SWRTbG93KQogICAgIGRpc3Bh
dGNoKDkpCiAKIC5vcFB1dEJ5SWRTbG93OgpAQCAtMTQwMSw2ICsxNDA0LDcgQEAgX2xsaW50X29w
X2dldF9ieV92YWw6CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQzLCB0MSwgLm9w
R2V0QnlWYWxTbG93KQogICAgIHN4aTJxIHQxLCB0MQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1
dHRlcmZseVt0MF0sIHQzCisgICAgY29weUJhcnJpZXIodDMsIC5vcEdldEJ5VmFsU2xvdykKICAg
ICBhbmRpIEluZGV4aW5nU2hhcGVNYXNrLCB0MgogICAgIGJpZXEgdDIsIEludDMyU2hhcGUsIC5v
cEdldEJ5VmFsSXNDb250aWd1b3VzCiAgICAgYmluZXEgdDIsIENvbnRpZ3VvdXNTaGFwZSwgLm9w
R2V0QnlWYWxOb3RDb250aWd1b3VzCkBAIC0xNDcxLDYgKzE0NzUsNyBAQCBtYWNybyBwdXRCeVZh
bChzbG93UGF0aCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDAsIHQzLCAub3BQ
dXRCeVZhbFNsb3cpCiAgICAgc3hpMnEgdDMsIHQzCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0
dGVyZmx5W3QxXSwgdDAKKyAgICBjb3B5QmFycmllcih0MCwgLm9wUHV0QnlWYWxTbG93KQogICAg
IGFuZGkgSW5kZXhpbmdTaGFwZU1hc2ssIHQyCiAgICAgYmluZXEgdDIsIEludDMyU2hhcGUsIC5v
cFB1dEJ5VmFsTm90SW50MzIKICAgICBjb250aWd1b3VzUHV0QnlWYWwoCkBAIC0xOTkxLDkgKzE5
OTYsOSBAQCBtYWNybyBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKG9wZXJhbmQsIHNsCiAgICAgYnBu
ZXEgdDIsIHQxLCBzbG93UGF0aAogZW5kCiAKLW1hY3JvIGdldFByb3BlcnR5KCkKK21hY3JvIGdl
dFByb3BlcnR5KHNsb3cpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQotICAgIGxv
YWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQwLCB0MikKKyAgICBsb2FkUHJvcGVydHlB
dFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIsIHNsb3cpCiAgICAgdmFsdWVQcm9maWxlKHQyLCA3
LCB0MCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDApCiAgICAgc3RvcmVxIHQyLCBb
Y2ZyLCB0MCwgOF0KQEAgLTIwMjQsNyArMjAyOSw3IEBAIF9sbGludF9vcF9nZXRfZnJvbV9zY29w
ZToKICNnR2xvYmFsUHJvcGVydHk6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAuZ0ds
b2JhbFZhcgogICAgIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2soMiwgLmdEeW5hbWljKQotICAgIGdl
dFByb3BlcnR5KCkKKyAgICBnZXRQcm9wZXJ0eSguZ0R5bmFtaWMpCiAgICAgZGlzcGF0Y2goOCkK
IAogLmdHbG9iYWxWYXI6CkBAIC0yMDQ5LDcgKzIwNTQsNyBAQCBfbGxpbnRfb3BfZ2V0X2Zyb21f
c2NvcGU6CiAuZ0dsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5l
cSB0MCwgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuZ0dsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MKICAgICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKDIsIC5nRHlu
YW1pYykKLSAgICBnZXRQcm9wZXJ0eSgpCisgICAgZ2V0UHJvcGVydHkoLmdEeW5hbWljKQogICAg
IGRpc3BhdGNoKDgpCiAKIC5nR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKQEAgLTIw
NzksMTEgKzIwODQsMTEgQEAgX2xsaW50X29wX2dldF9mcm9tX3Njb3BlOgogICAgIGRpc3BhdGNo
KDgpCiAKIAotbWFjcm8gcHV0UHJvcGVydHkoKQorbWFjcm8gcHV0UHJvcGVydHkoc2xvdykKICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZSh0MSwgdDIpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQotICAgIHN0b3JlUHJv
cGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIpCisgICAgc3RvcmVQcm9wZXJ0eUF0VmFy
aWFibGVPZmZzZXQodDEsIHQwLCB0Miwgc2xvdykKIGVuZAogCiBtYWNybyBwdXRHbG9iYWxWYXJp
YWJsZSgpCkBAIC0yMTQxLDcgKzIxNDYsNyBAQCBfbGxpbnRfb3BfcHV0X3RvX3Njb3BlOgogICAg
IGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnBHbG9iYWxWYXIKICAgICB3cml0ZUJhcnJpZXJP
bk9wZXJhbmRzKDEsIDMpCiAgICAgbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjaygxLCAucER5bmFtaWMp
Ci0gICAgcHV0UHJvcGVydHkoKQorICAgIHB1dFByb3BlcnR5KC5wRHluYW1pYykKICAgICBkaXNw
YXRjaCg3KQogCiAucEdsb2JhbFZhcjoKQEAgLTIxNjgsNyArMjE3Myw3IEBAIF9sbGludF9vcF9w
dXRfdG9fc2NvcGU6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcywgLnBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgd3JpdGVCYXJy
aWVyT25PcGVyYW5kcygxLCAzKQogICAgIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2soMSwgLnBEeW5h
bWljKQotICAgIHB1dFByb3BlcnR5KCkKKyAgICBwdXRQcm9wZXJ0eSgucER5bmFtaWMpCiAgICAg
ZGlzcGF0Y2goNykKIAogLnBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNiArMjIwLDggQEAg
Y29uc3QgUHV0QnlJZFNlY29uZGFyeVR5cGVPYmplY3QgPSAweDMwCiBjb25zdCBQdXRCeUlkU2Vj
b25kYXJ5VHlwZU9iamVjdE9yT3RoZXIgPSAweDM4CiBjb25zdCBQdXRCeUlkU2Vjb25kYXJ5VHlw
ZVRvcCA9IDB4NDAKIAorY29uc3QgQ29weUJhcnJpZXJTcGFjZUJpdHMgPSAzCisKIGNvbnN0IENh
bGxPcENvZGVTaXplID0gOQogCiBpZiBYODZfNjQgb3IgQVJNNjQgb3IgQ19MT09QCkBAIC02NjQs
NiArNjY2LDEwIEBAIG1hY3JvIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChkZXMKICAg
ICBlbmQKIGVuZAogCittYWNybyBjb3B5QmFycmllcih2YWx1ZSwgc2xvdykKKyAgICBidHBueiBv
YmplY3RBbmRTdG9yYWdlLCBDb3B5QmFycmllclNwYWNlQml0cywgc2xvdworZW5kCisKIG1hY3Jv
IGZ1bmN0aW9uUHJvbG9ndWUoKQogICAgIGlmIFg4NiBvciBYODZfV0lOIG9yIFg4Nl82NCBvciBY
ODZfNjRfV0lOCiAgICAgICAgIHB1c2ggY2ZyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hp
bGRyZW4oSlNDZQogICAgIGlmICh0aGlzT2JqZWN0LT5tX292ZXJyaWRlcykgewogICAgICAgICB2
aXNpdG9yLmNvcHlMYXRlcigKICAgICAgICAgICAgIHRoaXNPYmplY3QsIERpcmVjdEFyZ3VtZW50
c092ZXJyaWRlc0NvcHlUb2tlbiwKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVz
LmdldCgpLCB0aGlzT2JqZWN0LT5vdmVycmlkZXNTaXplKCkpOworICAgICAgICAgICAgdGhpc09i
amVjdC0+bV9vdmVycmlkZXMuZ2V0V2l0aG91dEJhcnJpZXIoKSwgdGhpc09iamVjdC0+b3ZlcnJp
ZGVzU2l6ZSgpKTsKICAgICB9CiB9CiAKQEAgLTEwOCwxNCArMTA4LDExIEBAIHZvaWQgRGlyZWN0
QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKEoKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVCh0
b2tlbiA9PSBEaXJlY3RBcmd1bWVudHNPdmVycmlkZXNDb3B5VG9rZW4pOwogICAgIAotICAgIGJv
b2wqIG9sZE92ZXJyaWRlcyA9IHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpOwotICAgIGlm
ICghb2xkT3ZlcnJpZGVzKQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgdm9pZCogb2xkT3Zl
cnJpZGVzID0gdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0V2l0aG91dEJhcnJpZXIoKTsKICAg
ICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShvbGRPdmVycmlkZXMpKSB7CiAgICAgICAg
IGJvb2wqIG5ld092ZXJyaWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPih2aXNpdG9yLmFsbG9jYXRl
TmV3U3BhY2UodGhpc09iamVjdC0+b3ZlcnJpZGVzU2l6ZSgpKSk7CiAgICAgICAgIG1lbWNweShu
ZXdPdmVycmlkZXMsIG9sZE92ZXJyaWRlcywgdGhpc09iamVjdC0+bV9sZW5ndGgpOwotICAgICAg
ICB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG5ld092ZXJy
aWRlcyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLnNldFdpdGhvdXRCYXJyaWVy
KG5ld092ZXJyaWRlcyk7CiAgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRPdmVycmlkZXMsIHRo
aXNPYmplY3QtPm92ZXJyaWRlc1NpemUoKSk7CiAgICAgfQogfQpAQCAtMTM1LDkgKzEzMiwxMCBA
QCB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MoVk0mCiAgICAgCiAgICAgdm9p
ZCogYmFja2luZ1N0b3JlOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmhlYXAudHJ5QWxsb2NhdGVT
dG9yYWdlKHRoaXMsIG92ZXJyaWRlc1NpemUoKSwgJmJhY2tpbmdTdG9yZSkpOwotICAgIG1fb3Zl
cnJpZGVzLnNldCh2bSwgdGhpcywgc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSkpOwor
ICAgIGJvb2wqIG92ZXJyaWRlcyA9IHN0YXRpY19jYXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOwor
ICAgIG1fb3ZlcnJpZGVzLnNldCh2bSwgdGhpcywgb3ZlcnJpZGVzKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2xlbmd0aDsgaS0tOykKLSAgICAgICAgbV9vdmVycmlkZXMuZ2V0KClbaV0gPSBm
YWxzZTsKKyAgICAgICAgb3ZlcnJpZGVzW2ldID0gZmFsc2U7CiB9CiAKIHZvaWQgRGlyZWN0QXJn
dW1lbnRzOjpvdmVycmlkZVRoaW5nc0lmTmVjZXNzYXJ5KFZNJiB2bSkKQEAgLTE0OSw3ICsxNDcs
NyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3NJZk5lCiB2b2lkIERpcmVj
dEFyZ3VtZW50czo6b3ZlcnJpZGVBcmd1bWVudChWTSYgdm0sIHVuc2lnbmVkIGluZGV4KQogewog
ICAgIG92ZXJyaWRlVGhpbmdzSWZOZWNlc3Nhcnkodm0pOwotICAgIG1fb3ZlcnJpZGVzLmdldCgp
W2luZGV4XSA9IHRydWU7CisgICAgbV9vdmVycmlkZXMuZ2V0KHRoaXMpW2luZGV4XSA9IHRydWU7
CiB9CiAKIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBl
eGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcg
KzczLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVp
bnQzMl90IGkpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICgh
bV9vdmVycmlkZXMgfHwgIW1fb3ZlcnJpZGVzLmdldCgpW2ldKTsKKyAgICAgICAgcmV0dXJuIGkg
PCBtX2xlbmd0aCAmJiAoIW1fb3ZlcnJpZGVzIHx8ICFtX292ZXJyaWRlcy5nZXQodGhpcylbaV0p
OwogICAgIH0KIAogICAgIGJvb2wgY2FuQWNjZXNzQXJndW1lbnRJbmRleFF1aWNrbHlJbkRGRyh1
aW50MzJfdCBpKSBjb25zdApAQCAtMTQ4LDcgKzE0OCw3IEBAIHByaXZhdGU6CiAgICAgV3JpdGVC
YXJyaWVyPEpTRnVuY3Rpb24+IG1fY2FsbGVlOwogICAgIHVpbnQzMl90IG1fbGVuZ3RoOyAvLyBB
bHdheXMgdGhlIGFjdHVhbCBsZW5ndGggb2YgY2FwdHVyZWQgYXJndW1lbnRzIGFuZCBuZXZlciB3
aGF0IHdhcyBzdG9yZWQgaW50byB0aGUgbGVuZ3RoIHByb3BlcnR5LgogICAgIHVpbnQzMl90IG1f
bWluQ2FwYWNpdHk7IC8vIFRoZSBtYXggb2YgdGhpcyBhbmQgbGVuZ3RoIGRldGVybWluZXMgdGhl
IGNhcGFjaXR5IG9mIHRoaXMgb2JqZWN0LiBJdCBtYXkgYmUgdGhlIGFjdHVhbCBjYXBhY2l0eSwg
b3IgbWF5YmUgc29tZXRoaW5nIHNtYWxsZXIuIFdlIGFycmFuZ2UgaXQgdGhpcyB3YXkgdG8gYmUg
a2luZCB0byB0aGUgSklUcy4KLSAgICBDb3B5V3JpdGVCYXJyaWVyPGJvb2w+IG1fb3ZlcnJpZGVz
OyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhhdCBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxl
ciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMuCisgICAgQ29weUJhcnJpZXI8Ym9v
bD4gbV9vdmVycmlkZXM7IC8vIElmIG5vbi1udWxsLCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2Fs
bGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsNiArMzkyLDcgQEAgYm9v
bCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKAogCiBib29sIEpTQXJyYXk6OnNl
dExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4
Y2VwdGlvbikKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0
aGlzKTsKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNz
OgogICAgICAgICBpZiAoIW5ld0xlbmd0aCkKQEAgLTQwOCw3ICs0MDksNyBAQCBib29sIEpTQXJy
YXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgY2FzZSBBcnJheVdpdGhJbnQzMjoK
ICAgICBjYXNlIEFycmF5V2l0aERvdWJsZToKICAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6
IHsKLSAgICAgICAgaWYgKG5ld0xlbmd0aCA9PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkp
CisgICAgICAgIGlmIChuZXdMZW5ndGggPT0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAobmV3TGVuZ3RoID49IE1BWF9BUlJB
WV9JTkRFWCAvLyBUaGlzIGNhc2UgZW5zdXJlcyB0aGF0IHdlIGNhbiBkbyBmYXN0IHB1c2guCiAg
ICAgICAgICAgICB8fCAobmV3TGVuZ3RoID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgKQEAgLTQx
NywxMiArNDE4LDEyIEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywK
ICAgICAgICAgICAgICAgICBleGVjLCBuZXdMZW5ndGgsIHRocm93RXhjZXB0aW9uLAogICAgICAg
ICAgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKG5ld0xlbmd0aCA+IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkgeworICAg
ICAgICBpZiAobmV3TGVuZ3RoID4gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkgewogICAgICAg
ICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG5ld0xlbmd0aCk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aFRvQ2xlYXIg
PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgLSBuZXdMZW5ndGg7CisgICAgICAgIHVuc2ln
bmVkIGxlbmd0aFRvQ2xlYXIgPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIC0gbmV3TGVuZ3Ro
OwogICAgICAgICB1bnNpZ25lZCBjb3N0VG9BbGxvY2F0ZU5ld0J1dHRlcmZseSA9IDY0OyAvLyBh
IGhldXJpc3RpYy4KICAgICAgICAgaWYgKGxlbmd0aFRvQ2xlYXIgPiBuZXdMZW5ndGggJiYgbGVu
Z3RoVG9DbGVhciA+IGNvc3RUb0FsbG9jYXRlTmV3QnV0dGVyZmx5KSB7CiAgICAgICAgICAgICBy
ZWFsbG9jYXRlQW5kU2hyaW5rQnV0dGVyZmx5KGV4ZWMtPnZtKCksIG5ld0xlbmd0aCk7CkBAIC00
MzAsMTMgKzQzMSwxMyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMs
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaW5kZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoRG91
YmxlKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCk7IGktLSA+IG5ld0xlbmd0aDspCi0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpLS0gPiBuZXdMZW5ndGg7KQorICAgICAg
ICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsgaS0tID4gbmV3TGVuZ3RoOykKLSAgICAgICAgICAgICAgICBtX2J1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpLS0gPiBuZXdMZW5ndGg7KQorICAgICAg
ICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgICAgIH0K
LSAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChuZXdMZW5ndGgpOworICAgICAg
ICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChuZXdMZW5ndGgpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgICAgIApAQCAtNDUyLDUxICs0NTMsNTMgQEAgYm9vbCBKU0FycmF5
OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogCiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVj
U3RhdGUqIGV4ZWMpCiB7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5n
ZXQodGhpcyk7CisgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2Ug
QXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAogICAg
IGNhc2UgQXJyYXlXaXRoVW5kZWNpZGVkOgotICAgICAgICBpZiAoIW1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSkKKyAgICAgICAgaWYgKCFidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIC8vIFdlIGhhdmUgbm90aGlu
ZyBidXQgaG9sZXMuIFNvLCBkcm9wIGRvd24gdG8gdGhlIHNsb3cgdmVyc2lvbi4KICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6CiAgICAgY2FzZSBBcnJh
eVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAgIGlmICghbGVuZ3RoLS0pCiAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uZ2V0KCk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5n
ZXQoKTsKICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29u
dGlndW91cygpW2xlbmd0aF0uY2xlYXIoKTsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQ
dWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2xlbmd0aF0uY2xlYXIoKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3Ro
KGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aERvdWJsZTogewotICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAg
IAogICAgICAgICBpZiAoIWxlbmd0aC0tKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPCBtX2J1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2J1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2xlbmd0aF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0
aCA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBkb3VibGUgdmFsdWUgPSBi
dXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtsZW5ndGhdOwogICAgICAgICBpZiAodmFsdWUg
PT0gdmFsdWUpIHsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClb
bGVuZ3RoXSA9IFBOYU47Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3Ro
KGxlbmd0aCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtsZW5n
dGhdID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0
aCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwg
dmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwog
ICAgIAogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICAg
ICAgaWYgKCFsZW5ndGgpIHsKQEAgLTU0Nyw2ICs1NTAsOCBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBv
cChFeGVjU3RhdGUqIGV4ZWMpCiAvLyAgLSBwdXNoaW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAy
XjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0IHRocm93cyBhIHJhbmdlIGVycm9yLgogdm9p
ZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICAKICAgICBz
d2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOiB7CiAgICAgICAg
IGNyZWF0ZUluaXRpYWxVbmRlY2lkZWQoZXhlYy0+dm0oKSwgMCk7CkBAIC01NjYsMTEgKzU3MSwx
MSBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7Ci0gICAgICAgIEFTU0VSVChsZW5ndGggPD0gbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgaWYgKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKSkgewotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQz
MigpW2xlbmd0aF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7Ci0gICAgICAgICAgICBt
X2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOworICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBBU1NFUlQobGVu
Z3RoIDw9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBpZiAobGVuZ3RoIDwg
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250
aWd1b3VzSW50MzIoKVtsZW5ndGhdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOworICAg
ICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC01ODYsMTEgKzU5MSwxMSBAQCB2
b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgfQogCiAgICAgY2Fz
ZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKLSAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygp
W2xlbmd0aF0uc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgIG1fYnV0
dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CisgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVChsZW5ndGgg
PD0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlmIChsZW5ndGggPCBidXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtsZW5ndGhdLnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBi
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTYxOCwxMSArNjIzLDExIEBAIHZvaWQgSlNBcnJh
eTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsKLSAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOwotICAgICAgICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7
Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2xlbmd0aF0gPSB2
YWx1ZUFzRG91YmxlOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChs
ZW5ndGggKyAxKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2xlbmd0aF0gPSB2YWx1
ZUFzRG91YmxlOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3Ro
ICsgMSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02NDgs
NyArNjUzLDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwog
CiAgICAgICAgIC8vIEZhc3QgY2FzZSAtIHB1c2ggd2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0
ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0b3IuCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwpAQCAtNjk2LDkgKzcwMSw5IEBAIEpTQXJyYXkqIEpTQXJy
YXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGUKIAogICAgICAgICBhdXRvJiByZXN1bHRCdXR0ZXJm
bHkgPSAqcmVzdWx0QXJyYXktPmJ1dHRlcmZseSgpOwogICAgICAgICBpZiAoYXJyYXlUeXBlID09
IEFycmF5V2l0aERvdWJsZSkKLSAgICAgICAgICAgIG1lbWNweShyZXN1bHRCdXR0ZXJmbHkuY29u
dGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5k
YXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2YoSlNWYWx1ZSkgKiBjb3VudCk7CisgICAgICAgICAg
ICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIG1fYnV0
dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgs
IHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVt
Y3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2J1dHRlcmZseS0+Y29u
dGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsK
KyAgICAgICAgICAgIG1lbWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKSwg
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwg
c2l6ZW9mKEpTVmFsdWUpICogY291bnQpOwogICAgICAgICByZXN1bHRCdXR0ZXJmbHkuc2V0UHVi
bGljTGVuZ3RoKGNvdW50KTsKIAogICAgICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CkBAIC03MTUs
OCArNzIwLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNBcnJheTo6ZmFzdENvbmNhdFdpdGgoRQogICAg
IFZNJiB2bSA9IGV4ZWMudm0oKTsKICAgICBBU1NFUlQobmV3QXJyYXlUeXBlID09IGZhc3RDb25j
YXRUeXBlKHZtLCAqdGhpcywgb3RoZXJBcnJheSkpOwogCi0gICAgdW5zaWduZWQgdGhpc0FycmF5
U2l6ZSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBvdGhlckFy
cmF5U2l6ZSA9IG90aGVyQXJyYXkubV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgIHVu
c2lnbmVkIHRoaXNBcnJheVNpemUgPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0
aCgpOworICAgIHVuc2lnbmVkIG90aGVyQXJyYXlTaXplID0gb3RoZXJBcnJheS5tX2J1dHRlcmZs
eS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpOwogICAgIEFTU0VSVCh0aGlzQXJyYXlTaXplICsg
b3RoZXJBcnJheVNpemUgPCBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKTsKIAogICAgIFN0cnVjdHVy
ZSogcmVzdWx0U3RydWN0dXJlID0gZXhlYy5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihuZXdBcnJheVR5cGUpOwpAQCAt
NzI4LDExICs3MzMsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNBcnJheTo6ZmFzdENvbmNhdFdpdGgo
RQogICAgIGF1dG8mIG90aGVyQnV0dGVyZmx5ID0gKm90aGVyQXJyYXkuYnV0dGVyZmx5KCk7CiAg
ICAgaWYgKG5ld0FycmF5VHlwZSA9PSBBcnJheVdpdGhEb3VibGUpIHsKICAgICAgICAgYXV0byBi
dWZmZXIgPSByZXN1bHRCdXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgpLmRhdGEoKTsKLSAgICAg
ICAgbWVtY3B5KGJ1ZmZlciwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCks
IHNpemVvZihKU1ZhbHVlKSAqIHRoaXNBcnJheVNpemUpOworICAgICAgICBtZW1jcHkoYnVmZmVy
LCBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIHNpemVv
ZihKU1ZhbHVlKSAqIHRoaXNBcnJheVNpemUpOwogICAgICAgICBtZW1jcHkoYnVmZmVyICsgdGhp
c0FycmF5U2l6ZSwgb3RoZXJCdXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6
ZW9mKEpTVmFsdWUpICogb3RoZXJBcnJheVNpemUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1
dG8gYnVmZmVyID0gcmVzdWx0QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAg
IG1lbWNweShidWZmZXIsIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBzaXplb2Yo
SlNWYWx1ZSkgKiB0aGlzQXJyYXlTaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgbV9idXR0
ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiB0
aGlzQXJyYXlTaXplKTsKICAgICAgICAgbWVtY3B5KGJ1ZmZlciArIHRoaXNBcnJheVNpemUsIG90
aGVyQnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIG90aGVy
QXJyYXlTaXplKTsKICAgICB9CiAKQEAgLTgwNSw4ICs4MTAsOSBAQCBib29sIEpTQXJyYXk6OnNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlCiAgICAgICAgIC8vIEFkanVzdCB0aGUgQnV0dGVyZmx5
IGFuZCB0aGUgaW5kZXggYmlhcy4gV2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgaGVyZSBiZWNhdXNl
IHdlJ3JlIGNoYW5naW5nCiAgICAgICAgIC8vIHRoZSBzdGFydCBvZiB0aGUgQnV0dGVyZmx5LCB3
aGljaCBuZWVkcyB0byBwb2ludCBhdCB0aGUgZmlyc3QgaW5kZXhlZCBwcm9wZXJ0eSBpbiB0aGUg
dXNlZAogICAgICAgICAvLyBwb3J0aW9uIG9mIHRoZSB2ZWN0b3IuCi0gICAgICAgIG1fYnV0dGVy
Zmx5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobV9idXR0ZXJmbHktPnNoaWZ0KHN0cnVjdHVyZSgp
LCBjb3VudCkpOwotICAgICAgICBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+
c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAgICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91
dEJhcnJpZXIoYnV0dGVyZmx5KTsKKyAgICAgICAgc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzICs9IGNvdW50OwogCiAgICAg
ICAgIC8vIFNpbmNlIHdlJ3JlIGNvbnN1bWluZyBwYXJ0IG9mIHRoZSB2ZWN0b3IgYnkgbW92aW5n
IGl0cyBiZWdpbm5pbmcgdG8gdGhlIGxlZnQsCkBAIC04NDgsNiArODU0LDggQEAgYm9vbCBKU0Fy
cmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgPiAwKTsKKworICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhp
bmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CkBAIC04NTksNyArODY3LDcgQEAgYm9v
bCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogICAgICAgICAKICAgICBjYXNl
IEFycmF5V2l0aEludDMyOgogICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogewotICAgICAg
ICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAg
ICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CiAgICAgICAgIAogICAgICAg
ICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHNoaWZ0
LiBXZSdyZSB3aWxsaW5nIHRvIGRvCkBAIC04NzQsMjggKzg4MiwyOCBAQCBib29sIEpTQXJyYXk6
OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgIHVuc2lnbmVkIGVuZCA9IG9sZExl
bmd0aCAtIGNvdW50OwogICAgICAgICBpZiAodGhpcy0+c3RydWN0dXJlKHZtKS0+aG9sZXNNdXN0
Rm9yd2FyZFRvUHJvdG90eXBlKHZtKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
c3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB2ID0g
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpICsgY291bnRdLmdldCgpOworICAgICAgICAgICAg
ICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2kgKyBjb3VudF0uZ2V0KCk7
CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkgewogICAgICAgICAgICAgICAgICAg
ICBzdGFydEluZGV4ID0gaTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRX
aXRoQXJyYXlTdG9yYWdlKHZtLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdl
KHZtKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgICAgICAg
ICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVtbW92ZShtX2J1
dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIAotICAgICAgICAgICAg
ICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCArIGNvdW50
LCAKKyAgICAgICAgICAgIG1lbW1vdmUoYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpICsg
c3RhcnRJbmRleCwgCisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0
YSgpICsgc3RhcnRJbmRleCArIGNvdW50LCAKICAgICAgICAgICAgICAgICBzaXplb2YoSlNWYWx1
ZSkgKiAoZW5kIC0gc3RhcnRJbmRleCkpOwogICAgICAgICB9CiAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gZW5kOyBpIDwgb2xkTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5jbGVhcigpOwogICAgICAgICAKLSAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1
YmxpY0xlbmd0aChvbGRMZW5ndGggLSBjb3VudCk7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVi
bGljTGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aERvdWJsZTogewotICAgICAgICB1bnNpZ25l
ZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHVuc2ln
bmVkIG9sZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBt
YXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHNoaWZ0LiBXZSdyZSB3
aWxsaW5nIHRvIGRvCkBAIC05MTAsMjIgKzkxOCwyMiBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291
bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgIHVuc2lnbmVkIGVuZCA9IG9sZExlbmd0aCAtIGNv
dW50OwogICAgICAgICBpZiAodGhpcy0+c3RydWN0dXJlKHZtKS0+aG9sZXNNdXN0Rm9yd2FyZFRv
UHJvdG90eXBlKHZtKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRl
eDsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHYgPSBtX2J1dHRlcmZs
eS0+Y29udGlndW91c0RvdWJsZSgpW2kgKyBjb3VudF07CisgICAgICAgICAgICAgICAgZG91Ymxl
IHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpICsgY291bnRdOwogICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWSh2ICE9IHYpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
SW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJh
eVN0b3JhZ2Uodm0sIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXNEb3VibGUoKVtpXSA9IHY7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbaV0gPSB2OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgbWVtbW92ZShtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0
YXJ0SW5kZXgsCi0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291bnQsCisgICAgICAgICAgICBtZW1tb3ZlKGJ1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgsCisgICAgICAgICAg
ICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCAr
IGNvdW50LAogICAgICAgICAgICAgICAgIHNpemVvZihKU1ZhbHVlKSAqIChlbmQgLSBzdGFydElu
ZGV4KSk7CiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kOyBpIDwgb2xk
TGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ld
ID0gUE5hTjsKICAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgo
b2xkTGVuZ3RoIC0gY291bnQpOworICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChv
bGRMZW5ndGggLSBjb3VudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAg
CkBAIC05ODYsNiArOTk0LDggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYQogCiBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKIHsKKyAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICAKICAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgIGNh
c2UgQXJyYXlXaXRoVW5kZWNpZGVkOgpAQCAtOTk0LDcgKzEwMDQsNyBAQCBib29sIEpTQXJyYXk6
OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAKICAgICBjYXNlIEFycmF5V2l0aEludDMyOgog
ICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogewotICAgICAgICB1bnNpZ25lZCBvbGRMZW5n
dGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHVuc2lnbmVkIG9sZExl
bmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgIAogICAgICAgICAvLyBX
ZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHVuc2hpZnQuIFdl
J3JlIHdpbGxpbmcgdG8gZG8gc28KICAgICAgICAgLy8gb25seSBpZiBpdCdzIG5vdCBob3JyaWJs
eSBzbG93LgpAQCAtMTAwMiwxOSArMTAxMiwyMCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3Vu
dFdpdGhBbnlJbmRleGluCiAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5
U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMt
PnZtKCkpKTsKICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxlbmd0aChleGVjLT52bSgpLCBvbGRM
ZW5ndGggKyBjb3VudCk7CisgICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlz
KTsKIAogICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciBob2xlcyBiZWZvcmUgd2Ugc3Rh
cnQgbW92aW5nIHRoaW5ncyBhcm91bmQgc28gdGhhdCB3ZSBkb24ndCBnZXQgaGFsZndheSAKICAg
ICAgICAgLy8gdGhyb3VnaCBzaGlmdGluZyBhbmQgdGhlbiByZWFsaXplIHdlIHNob3VsZCBoYXZl
IGJlZW4gaW4gQXJyYXlTdG9yYWdlIG1vZGUuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9s
ZExlbmd0aDsgaS0tID4gc3RhcnRJbmRleDspIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBKU1ZhbHVlIHYg
PSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSghdikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52
bSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7
IGktLSA+IHN0YXJ0SW5kZXg7KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQodik7Ci0gICAg
ICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2kgKyBjb3VudF0uc2V0V2l0aG91dFdy
aXRlQmFycmllcih2KTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2kgKyBj
b3VudF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gTk9URTogd2UncmUgbGVhdmluZyBiZWluZyBnYXJiYWdlIGluIHRoZSBwYXJ0IG9m
IHRoZSBhcnJheSB0aGF0IHdlIHNoaWZ0ZWQgb3V0CkBAIC0xMDI2LDcgKzEwMzcsNyBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEFycmF5V2l0aERvdWJsZTogewotICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBt
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9
IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBtYXkg
aGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHVuc2hpZnQuIFdlJ3JlIHdp
bGxpbmcgdG8gZG8gc28KICAgICAgICAgLy8gb25seSBpZiBpdCdzIG5vdCBob3JyaWJseSBzbG93
LgpAQCAtMTAzNCwxOSArMTA0NSwyMCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhB
bnlJbmRleGluCiAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFn
ZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkp
KTsKICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxlbmd0aChleGVjLT52bSgpLCBvbGRMZW5ndGgg
KyBjb3VudCk7CisgICAgICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3ZSBz
dGFydCBtb3ZpbmcgdGhpbmdzIGFyb3VuZCBzbyB0aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5IAog
ICAgICAgICAvLyB0aHJvdWdoIHNoaWZ0aW5nIGFuZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxkIGhh
dmUgYmVlbiBpbiBBcnJheVN0b3JhZ2UgbW9kZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
b2xkTGVuZ3RoOyBpLS0gPiBzdGFydEluZGV4OykgewotICAgICAgICAgICAgZG91YmxlIHYgPSBt
X2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgZG91YmxlIHYg
PSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSh2ICE9IHYpKQogICAgICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhl
Yy0+dm0oKSkpOwogICAgICAgICB9CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkTGVu
Z3RoOyBpLS0gPiBzdGFydEluZGV4OykgewotICAgICAgICAgICAgZG91YmxlIHYgPSBtX2J1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgICAgIEFTU0VSVCh2ID09IHYp
OwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpICsgY291bnRd
ID0gdjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2kgKyBjb3Vu
dF0gPSB2OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBOT1RFOiB3ZSdyZSBsZWF2
aW5nIGJlaW5nIGdhcmJhZ2UgaW4gdGhlIHBhcnQgb2YgdGhlIGFycmF5IHRoYXQgd2Ugc2hpZnRl
ZCBvdXQKQEAgLTEwNzIsNiArMTA4NCw4IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhl
Y1N0YXRlKiBleGUKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7
CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2ZWN0b3I7CisKKyAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4
aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgpAQCAtMTA4NSwxNiArMTA5OSwxNiBA
QCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIAogICAg
IGNhc2UgQXJyYXlXaXRoSW50MzI6CiAgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Ci0g
ICAgICAgIHZlY3RvckVuZCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKLSAgICAgICAg
dmVjdG9yID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7CisgICAgICAgIHZlY3Rv
ckVuZCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHZlY3RvciA9IGJ1dHRl
cmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIEFycmF5V2l0aERvdWJsZTogewogICAgICAgICB2ZWN0b3IgPSAwOwogICAg
ICAgICB2ZWN0b3JFbmQgPSAwOwotICAgICAgICBmb3IgKDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseSgpLT5j
b250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgIGZvciAoOyBpIDwgYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+Y29u
dGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICAgICAgaWYgKHYgIT0gdikKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKEpTVmFsdWUoSlNWYWx1ZTo6RW5j
b2RlQXNEb3VibGUsIHYpKTsKQEAgLTExMDMsNyArMTExNyw3IEBAIHZvaWQgSlNBcnJheTo6Zmls
bEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICB9CiAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRI
X0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAKICAgICAg
ICAgdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgICAgIHZlY3RvckVuZCA9IG1pbihz
dG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwpAQCAtMTE0MSw2ICsx
MTU1LDggQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKgogICAgIC8v
IEZJWE1FOiBXaGF0IHByZXZlbnRzIHRoaXMgZnJvbSBiZWluZyBjYWxsZWQgd2l0aCBhIFJ1bnRp
bWVBcnJheT8gVGhlIGxlbmd0aCBmdW5jdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gMCBpbiB0aGF0
IGNhc2UuCiAgICAgQVNTRVJUKGxlbmd0aCA9PSB0aGlzLT5sZW5ndGgoKSk7CiAKKyAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICAKICAgICBzd2l0
Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1
cm47CkBAIC0xMTUzLDE3ICsxMTY5LDE3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRz
KEV4ZWNTdGF0ZSoKICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhJbnQzMjoKICAgICBjYXNl
IEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKLSAgICAgICAgdmVjdG9yID0gbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgIHZlY3RvckVuZCA9IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0
YSgpOworICAgICAgICB2ZWN0b3JFbmQgPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOiB7
CiAgICAgICAgIHZlY3RvciA9IDA7CiAgICAgICAgIHZlY3RvckVuZCA9IDA7Ci0gICAgICAgIGZv
ciAoOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAg
IEFTU0VSVChpIDwgYnV0dGVyZmx5KCktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgICAgIGRv
dWJsZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgZm9y
ICg7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIEFT
U0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBkb3VibGUg
diA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICAgICAgaWYgKHYg
IT0gdikKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGV4ZWMtPnIoZmlyc3RF
bGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJs
ZSwgdik7CkBAIC0xMTcyLDcgKzExODgsNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50
cyhFeGVjU3RhdGUqCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHZlY3RvciA9IHN0b3Jh
Z2UtPm1fdmVjdG9yOwogICAgICAgICB2ZWN0b3JFbmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52
ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMTkw
NjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMCArODgsMTAgQEAgSlNBcnJheUJ1ZmZlclZpZXc6
OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyLAogICAgIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKLSAg
ICAsIG1fdmVjdG9yKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSAr
IGJ5dGVPZmZzZXQpCiAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX21vZGUoV2FzdGVm
dWxUeXBlZEFycmF5KQogeworICAgIG1fdmVjdG9yID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFy
cmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9mZnNldDsKICAgICBJbmRleGluZ0hlYWRlciBpbmRl
eGluZ0hlYWRlcjsKICAgICBpbmRleGluZ0hlYWRlci5zZXRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZl
ci5nZXQoKSk7CiAgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSh2bSwgMCwgMCwg
MCwgdHJ1ZSwgaW5kZXhpbmdIZWFkZXIsIDApOwpAQCAtMTAxLDE5ICsxMDEsMTkgQEAgSlNBcnJh
eUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwKICAgICB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERhdGFWaWV3VGFnKQogICAgIDogbV9zdHJ1Y3R1
cmUoc3RydWN0dXJlKQotICAgICwgbV92ZWN0b3Ioc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5
QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9mZnNldCkKICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAg
ICAsIG1fbW9kZShEYXRhVmlld01vZGUpCiAgICAgLCBtX2J1dHRlcmZseSgwKQogeworICAgIG1f
dmVjdG9yID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0
ZU9mZnNldDsKIH0KIAogSlNBcnJheUJ1ZmZlclZpZXc6OkpTQXJyYXlCdWZmZXJWaWV3KFZNJiB2
bSwgQ29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKICAgICA6IEJhc2Uodm0sIGNvbnRleHQu
c3RydWN0dXJlKCksIGNvbnRleHQuYnV0dGVyZmx5KCkpCi0gICAgLCBtX3ZlY3Rvcihjb250ZXh0
LnZlY3RvcigpKQogICAgICwgbV9sZW5ndGgoY29udGV4dC5sZW5ndGgoKSkKICAgICAsIG1fbW9k
ZShjb250ZXh0Lm1vZGUoKSkKIHsKKyAgICBtX3ZlY3Rvci5zZXRXaXRob3V0QmFycmllcihzdGF0
aWNfY2FzdDxjaGFyKj4oY29udGV4dC52ZWN0b3IoKSkpOwogfQogCiB2b2lkIEpTQXJyYXlCdWZm
ZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBK
U0FycmF5QnVmZmVyVmlldzo6ZmluYWxpemUoSlNDZWxsKgogICAgIEpTQXJyYXlCdWZmZXJWaWV3
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKICAg
ICBBU1NFUlQodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSB8fCB0aGlz
T2JqZWN0LT5tX21vZGUgPT0gV2FzdGVmdWxUeXBlZEFycmF5KTsKICAgICBpZiAodGhpc09iamVj
dC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSkKLSAgICAgICAgZmFzdEZyZWUodGhpc09i
amVjdC0+bV92ZWN0b3IpOworICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5n
ZXRXaXRob3V0QmFycmllcigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJl
dmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJsaWM6CiAg
ICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKICAgICB2b2lkIG5ldXRlcigp
OwogICAgIAotICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAgdm9p
ZCogdmVjdG9yKCkgeyByZXR1cm4gbV92ZWN0b3IuZ2V0KHRoaXMpOyB9CiAgICAgdW5zaWduZWQg
Ynl0ZU9mZnNldCgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVu
Z3RoOyB9CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwcml2YXRlOgogcHJvdGVjdGVkOgogICAgIEFy
cmF5QnVmZmVyKiBleGlzdGluZ0J1ZmZlckluQnV0dGVyZmx5KCk7CiAKLSAgICB2b2lkKiBtX3Zl
Y3RvcjsKKyAgICBDb3B5QmFycmllcjxjaGFyPiBtX3ZlY3RvcjsgLy8gdGhpcyBpcyByZWFsbHkg
YSB2b2lkKiwgYnV0IHZvaWQgd291bGQgbm90IHdvcmsgaGVyZS4KICAgICB1aW50MzJfdCBtX2xl
bmd0aDsKICAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVz
LmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBA
IGlubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKQogewogICAgIEFTU0VSVCho
YXNBcnJheUJ1ZmZlcigpKTsKICAgICBtX2xlbmd0aCA9IDA7Ci0gICAgbV92ZWN0b3IgPSAwOwor
ICAgIG1fdmVjdG9yLmNsZWFyKCk7CiB9CiAKIGlubGluZSB1bnNpZ25lZCBKU0FycmF5QnVmZmVy
Vmlldzo6Ynl0ZU9mZnNldCgpCkBAIC02OCw3ICs2OCw3IEBAIGlubGluZSB1bnNpZ25lZCBKU0Fy
cmF5QnVmZmVyVmlldzo6Ynl0ZU8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgcHRyZGlm
Zl90IGRlbHRhID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fdmVjdG9yKSAtIHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAgICAgYml0d2lzZV9j
YXN0PHVpbnQ4X3QqPihtX3ZlY3Rvci5nZXQodGhpcykpIC0gc3RhdGljX2Nhc3Q8dWludDhfdCo+
KGJ1ZmZlcigpLT5kYXRhKCkpOwogICAgIAogICAgIHVuc2lnbmVkIHJlc3VsdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihkZWx0YSk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
cmVzdWx0KSA9PSBkZWx0YSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDE5MDY4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMSArMTA4LDExIEBAIHB1YmxpYzoKICAgICAKICAg
ICBjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSo+KG1fdmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjb25zdCB0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IuZ2V0KHRoaXMpKTsKICAgICB9CiAgICAgdHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7CisgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yLmdldCh0
aGlzKSk7CiAgICAgfQogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbWVhbnQgdG8gbWF0Y2gg
aW5kZXhlZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0MSw3ICs0NDEsNyBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
Ojp2CiAgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKICAgICBjYXNlIEZhc3RUeXBl
ZEFycmF5OiB7CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX3ZlY3RvcikKLSAgICAgICAgICAg
IHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4s
IHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAg
ICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9r
ZW4sIHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldFdpdGhvdXRCYXJyaWVyKCksIHRoaXNPYmplY3Qt
PmJ5dGVTaXplKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNDY4LDEy
ICs0NjgsMTIgQEAgdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6YwogICAg
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CiAgICAgCiAgICAgaWYgKHRva2VuID09IFR5cGVkQXJyYXlW
ZWN0b3JDb3B5VG9rZW4KLSAgICAgICAgJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weSh0aGlz
T2JqZWN0LT5tX3ZlY3RvcikpIHsKKyAgICAgICAgJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29w
eSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXRXaXRob3V0QmFycmllcigpKSkgewogICAgICAgICBB
U1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3IpOwotICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0
aGlzT2JqZWN0LT5tX3ZlY3RvcjsKKyAgICAgICAgdm9pZCogb2xkVmVjdG9yID0gdGhpc09iamVj
dC0+bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3QpOwogICAgICAgICB2b2lkKiBuZXdWZWN0b3IgPSB2
aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CiAgICAgICAg
IG1lbWNweShuZXdWZWN0b3IsIG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7Ci0g
ICAgICAgIHRoaXNPYmplY3QtPm1fdmVjdG9yID0gbmV3VmVjdG9yOworICAgICAgICB0aGlzT2Jq
ZWN0LT5tX3ZlY3Rvci5zZXRXaXRob3V0QmFycmllcihzdGF0aWNfY2FzdDxjaGFyKj4obmV3VmVj
dG9yKSk7CiAgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5
dGVTaXplKCkpOwogICAgIH0KICAgICAKQEAgLTUwOCw4ICs1MDgsOCBAQCBBcnJheUJ1ZmZlciog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhCiAgICAgICAgICYmICF0aGlzT2JqZWN0LT5idXR0
ZXJmbHkoKSAmJiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRlcikpIHsKICAgICAgICAgQVNT
RVJUKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsKICAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxv
Y2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KLSAgICAgICAgdGhpc09iamVjdC0+bV9i
dXR0ZXJmbHkuc2V0V2l0aG91dFdyaXRlQmFycmllcigKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PEluZGV4aW5nSGVhZGVyKj4odGhpc09iamVjdC0+bV92ZWN0b3IpLT5idXR0ZXJmbHkoKSk7Cisg
ICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldFdpdGhvdXRCYXJyaWVyKAorICAgICAg
ICAgICAgYml0d2lzZV9jYXN0PEluZGV4aW5nSGVhZGVyKj4odGhpc09iamVjdC0+bV92ZWN0b3Iu
Z2V0KHRoaXNPYmplY3QpKS0+YnV0dGVyZmx5KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFZN
JiB2bSA9ICpoZWFwLT52bSgpOwogICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXQo
dm0sIHRoaXNPYmplY3QsIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKQEAgLTUy
MSwxNCArNTIxLDE0IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGEK
ICAgICAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgewogICAgIGNhc2UgRmFzdFR5
cGVkQXJyYXk6Ci0gICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUodGhpc09iamVj
dC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJ1ZmZlciA9
IEFycmF5QnVmZmVyOjpjcmVhdGUodGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3Qp
LCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CiAgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBk
b2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJhY3RpbmciIGZyb20gZXh0cmEgbWVtb3J5CiAgICAg
ICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5vdyB0aGlzIGNhc2Ugd2lsbCBjYXVzZSB0aGUgR0Mg
dG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRlZAogICAgICAgICAvLyB0aGUgd2hvbGUgYnVmZmVy
LgotICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0
LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnVmZmVyID0g
QXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQodGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KHRoaXNP
YmplY3QpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgZGVmYXVsdDoKQEAgLTUzNyw3ICs1MzcsNyBAQCBBcnJheUJ1ZmZlciogSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhCiAgICAgfQogCiAgICAgdGhpc09iamVjdC0+YnV0dGVyZmx5
KCktPmluZGV4aW5nSGVhZGVyKCktPnNldEFycmF5QnVmZmVyKGJ1ZmZlci5nZXQoKSk7Ci0gICAg
dGhpc09iamVjdC0+bV92ZWN0b3IgPSBidWZmZXItPmRhdGEoKTsKKyAgICB0aGlzT2JqZWN0LT5t
X3ZlY3Rvci5zZXRXaXRob3V0QmFycmllcihzdGF0aWNfY2FzdDxjaGFyKj4oYnVmZmVyLT5kYXRh
KCkpKTsKICAgICB0aGlzT2JqZWN0LT5tX21vZGUgPSBXYXN0ZWZ1bFR5cGVkQXJyYXk7CiAgICAg
aGVhcC0+YWRkUmVmZXJlbmNlKHRoaXNPYmplY3QsIGJ1ZmZlci5nZXQoKSk7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHJldmlzaW9uIDE5MDY4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTTWFwKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAg
ICAsIG1fbWFwRGF0YSh2bSkKKyAgICAgICAgLCBtX21hcERhdGEodm0sIHRoaXMpCiAgICAgewog
ICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpTT2JqZWN0Ojpjb3B5QnV0dGVyZgogICAgICAgICAgICAgbWVtY3B5KGN1cnJlbnRU
YXJnZXQsIGN1cnJlbnRTb3VyY2UsIGNvdW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIobmV3QnV0dGVyZmx5KTsKKyAgICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91dEJhcnJp
ZXIobmV3QnV0dGVyZmx5KTsKICAgICAgICAgdmlzaXRvci5kaWRDb3B5KGJ1dHRlcmZseS0+YmFz
ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CiAgICAg
fSAKIH0KQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJm
bHkoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5
LmdldFdpdGhvdXRCYXJyaWVyKCk7CiAgICAgaWYgKGJ1dHRlcmZseSkKICAgICAgICAgdGhpc09i
amVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUodmlzaXRvci52bSgpKS0+b3V0T2ZMaW5lU2l6ZSgpKTsKIApAQCAtMjIzLDcgKzIyMyw3
IEBAIHZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiAKICAgICBpZiAodG9r
ZW4gIT0gQnV0dGVyZmx5Q29weVRva2VuKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldFdpdGhvdXRCYXJyaWVy
KCk7CiAgICAgaWYgKGJ1dHRlcmZseSkKICAgICAgICAgdGhpc09iamVjdC0+Y29weUJ1dHRlcmZs
eSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVT
aXplKCkpOwogfQpAQCAtMzQxLDcgKzM0MSw3IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhp
c09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQodGhpc09iamVjdCktPmFy
cmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoaSA+PSBzdG9yYWdlLT5sZW5ndGgoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCkBAIC01MTQsNyArNTE0LDcgQEAgdm9pZCBK
U09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgICAgICAKICAgICBjYXNlIE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTog
ewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5LmdldCh0aGlzT2JqZWN0KS0+YXJyYXlTdG9yYWdlKCk7CiAgICAg
ICAgIAogICAgICAgICBpZiAocHJvcGVydHlOYW1lID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KQogICAgICAgICAgICAgYnJlYWs7CkBAIC01MzYsNyArNTM2LDcgQEAgdm9pZCBKU09iamVjdDo6
cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
dGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KHRoaXNPYmplY3QpLT5hcnJheVN0b3JhZ2UoKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTYxMyw3ICs2MTMsNyBAQCB2b2lkIEpTT2Jq
ZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vCiAgICAgICAgIGVudGVyRGljdGlvbmFyeUlu
ZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBlbnN1cmVBcnJheVN0
b3JhZ2VTbG93KHZtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdo
ZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCkpOworICAgICAgICBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpAQCAtNjQzLDcgKzY0Myw3
IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbmRleGUKICAgICBBU1NFUlQo
IWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0g
c3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9MRU4pOwogICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAotICAgICAgICBtX2J1
dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAgICAgIG1fYnV0dGVyZmx5LmdldCh0aGlzKSwg
dm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwg
ZmFsc2UsIDAsCiAgICAgICAgIGVsZW1lbnRTaXplICogdmVjdG9yTGVuZ3RoKTsKICAgICBuZXdC
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0
VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CkBAIC02OTUsNyArNjk1LDcgQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIEluZGV4aW5nVHlwZSBvbGRUeXBl
ID0gaW5kZXhpbmdUeXBlKCk7CiAgICAgQVNTRVJUX1VOVVNFRChvbGRUeXBlLCAhaGFzSW5kZXhl
ZFByb3BlcnRpZXMob2xkVHlwZSkpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0
dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAotICAgICAgICBtX2J1dHRlcmZseS5nZXQo
KSwgdm0sIHRoaXMsIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBm
YWxzZSwgMCwKKyAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLCB2bSwgdGhpcywgc3RydWN0
dXJlLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAogICAgICAgICBB
cnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVuZ3RoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
bmV3QnV0dGVyZmx5KTsKIApAQCAtNzE5LDMxICs3MTksMzIgQEAgQ29udGlndW91c0pTVmFsdWVz
IEpTT2JqZWN0Ojpjb252ZXJ0VW5kZQogewogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhp
bmdUeXBlKCkpKTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZUludDMyKSk7Ci0gICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHku
Z2V0KHRoaXMpLT5jb250aWd1b3VzSW50MzIoKTsKIH0KIAogQ29udGlndW91c0RvdWJsZXMgSlNP
YmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0RvdWJsZShWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhh
c1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9
IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKLSAgICAgICAgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXSA9IFBOYU47CiAgICAgCiAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgQWxsb2NhdGVEb3VibGUp
KTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKKyAgICByZXR1
cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzRG91YmxlKCk7CiB9CiAKIENvbnRp
Z3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyhWTSYg
dm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwogICAgIHNl
dFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSh2bSksIEFsbG9jYXRlQ29udGlndW91cykpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3Vv
dXMoKTsKIH0KIAogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29uc3RydWN0Q29udmVydGVkQXJy
YXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyhWTSYgdm0sIHVuc2lnbmVkIG5lZWRlZExl
bmd0aCkKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7
Ci0gICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OworICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVi
bGljTGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1
cmUtPm91dE9mTGluZVNpemUoKTsKICAgICAKQEAgLTc1Miw3ICs3NTMsNyBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0CiAgICAgCiAgICAgbWVtY3B5KAogICAgICAg
ICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlTaXplLAotICAgICAg
ICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAg
IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUs
CiAgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIAog
ICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CkBAIC03NzAsNyArNzcxLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVu
ZGVjaWRlZAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBBU1NFUlQoaGFzVW5k
ZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0g
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0Vs
ZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAgIC8vIE5vIG5lZWQgdG8gY29weSBlbGVtZW50
cy4KICAgICAKQEAgLTc4Nyw5ICs3ODgsMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29u
dmVydFVuZGVjaWRlZAogQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRv
RG91YmxlKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKTsK
LSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7
IGktLTspIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50ID0gJm1fYnV0
dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBjdXJyZW50ID0gJmJ1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV07CiAgICAgICAgIGRv
dWJsZSogY3VycmVudEFzRG91YmxlID0gYml0d2lzZV9jYXN0PGRvdWJsZSo+KGN1cnJlbnQpOwog
ICAgICAgICBKU1ZhbHVlIHYgPSBjdXJyZW50LT5nZXQoKTsKICAgICAgICAgaWYgKCF2KSB7CkBA
IC04MDEsNyArODAzLDcgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQz
MgogICAgIH0KICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZURvdWJsZSkpOwotICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOworICAgIHJldHVybiBtX2J1dHRl
cmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIAogQ29udGlndW91c0pTVmFs
dWVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0NvbnRpZ3VvdXMoVk0mIHZtKQpAQCAtODA5LDcg
KzgxMSw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydEludDMKICAgICBB
U1NFUlQoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKTsKICAgICAKICAgICBzZXRTdHJ1Y3R1cmUo
dm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBB
bGxvY2F0ZUNvbnRpZ3VvdXMpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCk7CiB9CiAK
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJiB2
bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCkBAIC04MTcsMTAgKzgxOSwxMSBA
QCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwog
Ci0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgp
OworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVj
dG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29u
dmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3Ro
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0
aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOwogICAgICAgICBpZiAodikgewogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92
ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKICAgICAgICAgICAgIG5ld1N0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKQEAgLTg0MSw5ICs4NDQsMTAgQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydEludDMyVG9BcgogQ29udGlndW91c0pTVmFsdWVzIEpTT2Jq
ZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFz
RG91YmxlKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KSB7Ci0gICAgICAgIGRvdWJsZSogY3VycmVu
dCA9ICZtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworCisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykgeworICAgICAgICBkb3VibGUqIGN1
cnJlbnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogY3VycmVudEFzVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJy
aWVyPFVua25vd24+Kj4oY3VycmVudCk7CiAgICAgICAgIGRvdWJsZSB2YWx1ZSA9ICpjdXJyZW50
OwogICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHsKQEAgLTg1NSw3ICs4NTksNyBAQCBDb250
aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnREb3ViCiAgICAgfQogICAgIAogICAgIHNl
dFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSh2bSksIEFsbG9jYXRlQ29udGlndW91cykpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3Vv
dXMoKTsKIH0KIAogQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlT
dG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCkBAIC04NjMs
MTAgKzg2NywxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNEb3VibGUoaW5kZXhp
bmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5n
ZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9
IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0s
IHZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgeworICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgaWYgKHZhbHVlID09IHZhbHVl
KSB7CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKSk7CiAgICAgICAg
ICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CkBAIC04ODksMTAgKzg5NCwx
MSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlw
ZSgpKSk7CiAKLSAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRo
aXMpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25z
dHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0
b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCk7IGkrKykgewotICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLmdldCgpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIGlmICh2KSB7CiAgICAgICAgICAgICBuZXdTdG9y
YWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwogICAgICAgICAgICAg
bmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwpAQCAtOTU3LDggKzk2Myw4IEBAIHZv
aWQgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMkZvclZhbHVlKFZNJiAKIAogdm9pZCBKU09iamVjdDo6
c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQoVk0mIHZtLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1
ZSB2YWx1ZSkKIHsKLSAgICBBU1NFUlQoaW5kZXggPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkpOwotICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Cisg
ICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKSk7
CisgICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgo
KSk7CiAgICAgY29udmVydFVuZGVjaWRlZEZvclZhbHVlKHZtLCB2YWx1ZSk7CiAgICAgc2V0SW5k
ZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOwogfQpAQCAtMTExNCw3ICsxMTIwLDcgQEAgQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJyYXlTdG9yYQogICAgICAgICByZXR1cm4gZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0s
IGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAgCiAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgcmV0dXJuIGVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9u
YXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVy
Zmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAKICAgICBkZWZhdWx0Ogog
ICAgICAgICBDUkFTSCgpOwpAQCAtMTM1Niw3ICsxMzYyLDcgQEAgYm9vbCBKU09iamVjdDo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCh0aGlzT2Jq
ZWN0KS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoaSA8IHN0b3JhZ2Ut
PnZlY3Rvckxlbmd0aCgpKSB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZh
bHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldOwpAQCAtMTU0Niw3ICsxNTUyLDcgQEAgdm9p
ZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewot
ICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmpl
Y3QtPm1fYnV0dGVyZmx5LmdldChvYmplY3QpLT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3Jh
Z2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CkBAIC0xNjk5LDcg
KzE3MDUsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEdldHRlclByCiB2b2lk
IEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFy
cmF5RW50cnkqIGVudHJ5SW5NYXAsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgYXV0byBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
c3BhcnNlTWFwLmdldCgpOworICAgIGF1dG8gbWFwID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5h
cnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAKICAgICBpZiAoZGVzY3JpcHRvci5p
c0RhdGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKQEAg
LTE3NTgsNyArMTc2NCw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0
eSgKICAgICBpZiAoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiAoUmVhZE9ubHkgfCBBY2Nlc3Nv
cikpCiAgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKGV4ZWMtPnZtKCkp
OwogCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAg
PSBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQo
KTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXApOwogCiAgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUg
dGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0
aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCkBAIC0xNzkwLDggKzE3OTYsOSBAQCBib29s
IEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoCiAgICAgICAgIGVudHJ5SW5NYXAt
PmdldChkZWZhdWx0cyk7CiAKICAgICAgICAgcHV0SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50
cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMpOwotICAgICAgICBpZiAoaW5kZXggPj0gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3RoKGluZGV4ICsgMSk7CisgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgICAgICBpZiAoaW5k
ZXggPj0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRMZW5ndGgoaW5kZXggKyAxKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xOTExLDE3ICsxOTE4LDE5IEBAIHZvaWQgSlNPYmpl
Y3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4KIHsKICAgICBBU1NFUlQoKGluZGV4aW5nVHlw
ZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spID09IGluZGV4aW5nU2hhcGUpOwogICAgIEFTU0VSVCgh
aW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgIAogICAgIC8vIEZvciB1cyB0byBnZXQgaGVyZSwg
dGhlIGluZGV4IGlzIGVpdGhlciBncmVhdGVyIHRoYW4gdGhlIHB1YmxpYyBsZW5ndGgsIG9yIGdy
ZWF0ZXIgdGhhbgogICAgIC8vIG9yIGVxdWFsIHRvIHRoZSB2ZWN0b3IgbGVuZ3RoLgotICAgIEFT
U0VSVChpID49IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgQVNTRVJUKGkgPj0g
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgCiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICAKICAgICBpZiAoaSA+PSBNQVhfQVJSQVlfSU5ERVggLSAxCiAgICAgICAgIHx8IChp
ID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgKLSAgICAgICAgICAgICYmICFpc0RlbnNlRW5vdWdo
Rm9yVmVjdG9yKGksIGNvdW50RWxlbWVudHM8aW5kZXhpbmdTaGFwZT4oYnV0dGVyZmx5KCkpKSkK
LSAgICAgICAgfHwgaW5kZXhJc1N1ZmZpY2llbnRseUJleW9uZExlbmd0aEZvclNwYXJzZU1hcChp
LCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAmJiAhaXNEZW5z
ZUVub3VnaEZvclZlY3RvcihpLCBjb3VudEVsZW1lbnRzPGluZGV4aW5nU2hhcGU+KGJ1dHRlcmZs
eSkpKQorICAgICAgICB8fCBpbmRleElzU3VmZmljaWVudGx5QmV5b25kTGVuZ3RoRm9yU3BhcnNl
TWFwKGksIGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpKSB7CiAgICAgICAgIEFTU0VSVChpIDw9
IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZVNsb3codm0pOwog
ICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFw
KHZtKTsKQEAgLTE5MzIsMjQgKzE5NDEsMjUgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJl
eW9uZFZlY3RvckxlbgogICAgIH0KIAogICAgIGVuc3VyZUxlbmd0aCh2bSwgaSArIDEpOworICAg
IGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKIAotICAgIFJFTEVBU0VfQVNTRVJU
KGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGkg
PCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUp
IHsKICAgICBjYXNlIEludDMyU2hhcGU6CiAgICAgICAgIEFTU0VSVCh2YWx1ZS5pc0ludDMyKCkp
OwotICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICBjYXNlIERvdWJsZVNoYXBlOiB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS5pc051bWJl
cigpKTsKICAgICAgICAgZG91YmxlIHZhbHVlQXNEb3VibGUgPSB2YWx1ZS5hc051bWJlcigpOwog
ICAgICAgICBBU1NFUlQodmFsdWVBc0RvdWJsZSA9PSB2YWx1ZUFzRG91YmxlKTsKLSAgICAgICAg
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZhbHVlQXNEb3VibGU7CisgICAg
ICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gdmFsdWVBc0RvdWJsZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToK
LSAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KHZtLCB0aGlzLCB2YWx1
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpAQCAtMjIyMyw3ICsy
MjMzLDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAg
ICAKICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoYXR0
cmlidXRlcykgewotICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpCisgICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVu
Z3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9y
TGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwg
ZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZt
KSk7CiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0
SW50MzJUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICB9CkBAIC0yMjM3LDcgKzIyNDcsNyBA
QCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIAogICAg
IGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoYXR0cmlidXRl
cykgewotICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisg
ICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
V2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJl
QXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAg
ICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJy
YXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0RG91Ymxl
VG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAgfQpAQCAtMjI1Niw3ICsyMjY2LDcgQEAgYm9v
bCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICAKICAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVz
KSB7Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAg
ICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhX
aXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVB
cnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAg
ICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJh
eVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRDb250aWd1
b3VzVG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAgfQpAQCAtMjI2Niw3ICsyMjc2LDcgQEAg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0bwogCiAgICAgY2FzZSBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsK
LSAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAg
ICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhB
cnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5
U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhB
cnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGFycmF5U3RvcmFn
ZSgpKTsKQEAgLTIzNDcsOCArMjM1Nyw4IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmpl
Y3Q6OmdldE5ld1YKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAgCiAgICAgaWYgKGhhc0luZGV4
ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICB2ZWN0b3JMZW5ndGggPSBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7Ci0gICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5wdWJsaWNMZW5ndGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICB2ZWN0b3JMZW5n
dGggPSAwOwogICAgICAgICBsZW5ndGggPSAwOwpAQCAtMjQ1NCwyNSArMjQ2NCwyOCBAQCBib29s
IEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAKIHZvaWQgSlNPYmplY3Q6OmVu
c3VyZUxlbmd0aFNsb3coVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgCiAgICAgQVNTRVJUKGxl
bmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhp
bmdUeXBlKCkpIHx8IGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNEb3VibGUoaW5kZXhp
bmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwotICAgIEFTU0VSVChs
ZW5ndGggPiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgIEFTU0VSVChsZW5ndGgg
PiBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAKICAgICB1bnNpZ25lZCBuZXdWZWN0
b3JMZW5ndGggPSBzdGQ6Om1pbigKICAgICAgICAgbGVuZ3RoIDw8IDEsCiAgICAgICAgIE1BWF9T
VE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotICAgIHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9IG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGgg
PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFw
KTsKLSAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG1fYnV0dGVyZmx5LT5ncm93QXJyYXlS
aWdodCgKKyAgICBidXR0ZXJmbHkgPSBidXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAogICAgICAg
ICB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
LCB0cnVlLAogICAgICAgICBvbGRWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
LAotICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Cisg
ICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIG1f
YnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKIAotICAgIG1fYnV0dGVyZmx5LT5z
ZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICBidXR0ZXJmbHktPnNldFZlY3Rv
ckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogCiAgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5
cGUoKSkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwg
bmV3VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRp
Z3VvdXNEb3VibGUoKS5kYXRhKClbaV0gPSBQTmFOOwogICAgIH0KIH0KIApAQCAtMjQ4NSwxMCAr
MjQ5OCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9jYXRlQW5kU2hyaW5rQnV0dGVyCiAgICAg
QVNTRVJUKCFtX2J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0
dXJlKCkpKTsKIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0
dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKTsKKyAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cmVzaXplQXJyYXkodm0sIHRo
aXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSk7CiAgICAg
bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOwotICAgIG1fYnV0dGVyZmx5
LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsKLSAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVu
Z3RoKGxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsK
KyAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogfQogCiBCdXR0ZXJm
bHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYgdm0sIHNpemVfdCBvbGRTaXpl
LCBzaXplX3QgbmV3U2l6ZSkKQEAgLTI0OTgsNyArMjUxMSw3IEBAIEJ1dHRlcmZseSogSlNPYmpl
Y3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWcKICAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMg
ZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJlKCksIGZvciB0aGUgcHJvcGVydHkKICAgICAv
LyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IG11dGF0ZWQgdGhlIHN0cnVj
dHVyZSBpbi1wbGFjZS4KICAgICAKLSAgICByZXR1cm4gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dQ
cm9wZXJ0eVN0b3JhZ2UobV9idXR0ZXJmbHkuZ2V0KCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUodm0p
LCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICByZXR1cm4gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dQ
cm9wZXJ0eVN0b3JhZ2UobV9idXR0ZXJmbHkuZ2V0KHRoaXMpLCB2bSwgdGhpcywgc3RydWN0dXJl
KHZtKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTI3ODUsNyArMjc5OCw3IEBAIHVp
bnQzMl90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEUKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHkuZ2V0
KG9iamVjdCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VN
YXAuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDbGFzc0lu
Zm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgotI2luY2x1ZGUgIkNvcHlXcml0
ZUJhcnJpZXIuaCIKKyNpbmNsdWRlICJDb3B5QmFycmllci5oIgogI2luY2x1ZGUgIkN1c3RvbUdl
dHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRlZmVyR0MuaCIKICNpbmNsdWRlICJIZWFwLmgiCkBA
IC0xMzEsMTQgKzEzMSwxNCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIWhhc0luZGV4
ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICByZXR1cm4g
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKTsKICAgICB9CiAgICAgICAgIAog
ICAgIHVuc2lnbmVkIGdldFZlY3Rvckxlbmd0aCgpCiAgICAgewogICAgICAgICBpZiAoIWhhc0lu
ZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAgICAgICByZXR1
cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKICAgICB9CiAgICAgICAg
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpAQCAtMTgxLDIz
ICsxODEsMjQgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgY2FuR2V0SW5kZXhRdWlja2x5KHVu
c2lnbmVkIGkpCiAgICAgeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJ
REVEX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBj
YXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV07CisgICAgICAgICAg
ICByZXR1cm4gaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkgJiYgYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV07CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewot
ICAgICAgICAgICAgaWYgKGkgPj0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAg
ICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2J1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgICAgICBpZiAodmFsdWUgIT0gdmFs
dWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzoKLSAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9y
W2ldOworICAgICAgICAgICAgcmV0dXJuIGkgPCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKSAmJiBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDYsMTUgKzIwNywxNiBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAg
ICAgeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlz
KTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9J
TlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihtX2J1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLmdldCgpLmFzSW50MzIoKSk7CisgICAgICAgICAgICByZXR1
cm4ganNOdW1iZXIoYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCkuYXNJbnQzMigpKTsK
ICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAg
cmV0dXJuIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICBjYXNlIEFM
TF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1Zh
bHVlOjpFbmNvZGVBc0RvdWJsZSwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSk7
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgYnV0
dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0pOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9T
VE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTIyMywzMiArMjI1LDMzIEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgSlNWYWx1ZSB0cnlHZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkgY29uc3QKICAg
ICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMp
OwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0JM
QU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdf
VFlQRVM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJ
TkdfVFlQRVM6Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChpIDwgYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0lu
dDMyKCkgfHwgIXJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdl
dCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElO
R19UWVBFUzogewotICAgICAgICAgICAgaWYgKGkgPj0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpKQorICAgICAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSBtX2J1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9
IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICAgICAgaWYgKHJlc3Vs
dCAhPSByZXN1bHQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgcmVzdWx0KTsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAg
aWYgKGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9y
W2ldLmdldCgpOworICAgICAgICAgICAgaWYgKGkgPCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC0yNzYsNiArMjc5LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBib29sIGNhblNldEluZGV4
UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkp
IHsKICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2Ug
QUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKQEAgLTI4NSwxMSArMjg5LDExIEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAg
Y2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJy
YXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCk7CisgICAgICAgICAgICByZXR1cm4gaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7
CiAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAg
Y2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJuIGkg
PCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpCi0gICAgICAgICAg
ICAgICAgJiYgISFtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAg
ICAgICAgICAgcmV0dXJuIGkgPCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5n
dGgoKQorICAgICAgICAgICAgICAgICYmICEhYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3JbaV07CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzA2LDcgKzMxMCw3
IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgogICAg
ICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIGkgPCBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0
dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMzE1LDkgKzMxOSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIHZvaWQg
c2V0SW5kZXhRdWlja2x5KFZNJiB2bSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgIHsKKyAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAg
ICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rv
ckxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSk7CiAgICAgICAgICAgICBpZiAoIXYuaXNJbnQzMigpKSB7CiAgICAgICAgICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGVPckNvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2
bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzI1LDE0ICszMzAsMTQgQEAg
cHVibGljOgogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgQVNTRVJUKGkg
PCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtpXS5zZXQodm0sIHRoaXMsIHYpOwotICAgICAgICAgICAgaWYgKGkgPj0g
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQotICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLnNldCh2bSwgdGhpcywgdik7CisgICAgICAgICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3Ro
KGkgKyAxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxM
X0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRl
cmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghdi5pc051bWJlcigpKSB7CiAgICAg
ICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldElu
ZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zNDIsMTMgKzM0Nywx
MyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91c1do
aWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpW2ldID0gdmFsdWU7Ci0gICAgICAgICAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVibGlj
TGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChp
ICsgMSk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZh
bHVlOworICAgICAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAg
ICAgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB4ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07CiAgICAgICAgICAgICBKU1ZhbHVl
IG9sZCA9IHguZ2V0KCk7CiAgICAgICAgICAgICB4LnNldCh2bSwgdGhpcywgdik7CkBAIC0zNzEs
MTQgKzM3NiwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGluaXRpYWxpemVJbmRleChWTSYgdm0s
IHVuc2lnbmVkIGksIEpTVmFsdWUgdiwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwog
ICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkgewogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lE
RURfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgICAgIHNldEluZGV4UXVpY2tseVRvVW5kZWNp
ZGVkKHZtLCBpLCB2KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1f
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghdi5pc0ludDMyKCkpIHsKICAgICAgICAg
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1Nl
dEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM4NiwxNCArMzky
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFT
U0VSVChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKLSAgICAgICAgICAgIEFTU0VS
VChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgICAgIG1fYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0uc2V0KHZtLCB0aGlzLCB2KTsKKyAgICAgICAgICAgIEFTU0VS
VChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8
IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uc2V0KHZtLCB0aGlzLCB2KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAg
ICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwotICAgICAgICAgICAg
QVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNT
RVJUKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChp
IDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoIXYuaXNOdW1i
ZXIoKSkgewogICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBl
cmZvcm1pbmdTZXRJbmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
NDAzLDExICs0MDksMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVU
b0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwgdik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZhbHVlOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAg
ICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCk7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKICAg
ICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rvcik7CiAgICAg
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXQodm0sIHRoaXMsIHYpOwpAQCAtNDI4LDcg
KzQzNCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiAhIW1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7CisgICAgICAgICAgICByZXR1cm4gISFtX2J1
dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcDsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NDUsNyArNDUxLDcgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgot
ICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VN
b2RlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0
b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNTUwLDExICs1NTYsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFn
ZVVuc2FmZSgpOwogICAgIH0KICAgICAgICAgCi0gICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJm
bHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKTsgfQotICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCk7IH0KKyAgICBjb25zdCBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKTsg
fQorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRo
aXMpOyB9CiAgICAgICAgIAotICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3Jh
Z2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KLSAg
ICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIENvbnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGlu
ZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPnByb3BlcnR5
U3RvcmFnZSgpOyB9CisgICAgUHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJl
dHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICBj
b25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBsb2NhdGlvbkZvck9mZnNldChQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpIGNvbnN0CiAgICAgewpAQCAtNjU2LDcgKzY2Miw3IEBAIHB1YmxpYzoK
ICAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlSW50MzIoVk0mIHZtKQogICAgIHsKICAgICAg
ICAgaWYgKExJS0VMWShoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKKyAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNJbnQzMigpOwogICAgICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBlbnN1cmVJbnQzMlNsb3codm0pOwogICAgIH0KQEAgLTY2OCw3ICs2NzQs
NyBAQCBwdWJsaWM6CiAgICAgQ29udGlndW91c0RvdWJsZXMgZW5zdXJlRG91YmxlKFZNJiB2bSkK
ICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkpCi0g
ICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKTsK
ICAgICAgICAgICAgIAogICAgICAgICByZXR1cm4gZW5zdXJlRG91YmxlU2xvdyh2bSk7CiAgICAg
fQpAQCAtNjc4LDcgKzY4NCw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5z
dXJlQ29udGlndW91cyhWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0NvbnRp
Z3VvdXMoaW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+
Y29udGlndW91cygpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+
Y29udGlndW91cygpOwogICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1
b3VzU2xvdyh2bSk7CiAgICAgfQpAQCAtNjkwLDcgKzY5Niw3IEBAIHB1YmxpYzoKICAgICBBcnJh
eVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAo
TElLRUxZKGhhc0FueUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUoKSkpKQotICAgICAgICAgICAg
cmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIHJldHVybiBt
X2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpOwogCiAgICAgICAgIHJldHVybiBl
bnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKICAgICB9CkBAIC03MzYsNyArNzQyLDcgQEAgcHJv
dGVjdGVkOgogICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChoYXNBbnlBcnJheVN0b3JhZ2UoaW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgcmV0dXJuIG1fYnV0dGVy
Zmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBD
YWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gcHJlZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVy
IG9yIG5vdCB0aGUKQEAgLTc0NSw3ICs3NTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgICAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJy
YXlTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICByZXR1cm4gMDsKQEAgLTgwOSwxMiArODE1LDEyIEBAIHByb3RlY3RlZDoKICAgICB7CiAg
ICAgICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOwogICAgICAgICBBU1NFUlQo
aGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkgfHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkp
IHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkgfHwgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlw
ZSgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSA8IGxlbmd0aCkKKworICAgICAgICBpZiAobV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0
b3JMZW5ndGgoKSA8IGxlbmd0aCkKICAgICAgICAgICAgIGVuc3VyZUxlbmd0aFNsb3codm0sIGxl
bmd0aCk7CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKSA8IGxlbmd0aCkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgo
bGVuZ3RoKTsKKyAgICAgICAgaWYgKG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVibGljTGVuZ3Ro
KCkgPCBsZW5ndGgpCisgICAgICAgICAgICBtX2J1dHRlcmZseS5nZXQodGhpcyktPnNldFB1Ymxp
Y0xlbmd0aChsZW5ndGgpOwogICAgIH0KICAgICAgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlv
dSB3YW50IHRvIHNocmluayB0aGUgYnV0dGVyZmx5IGJhY2tpbmcgc3RvcmUsIGFuZCB5b3UncmUK
QEAgLTg3NCw3ICs4ODAsNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEFycmF5
U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyhWTSYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAg
Q29weVdyaXRlQmFycmllcjxCdXR0ZXJmbHk+IG1fYnV0dGVyZmx5OworICAgIENvcHlCYXJyaWVy
PEJ1dHRlcmZseT4gbV9idXR0ZXJmbHk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIHByaXZhdGU6
CiAgICAgdWludDMyX3QgbV9wYWRkaW5nOwpAQCAtMTM0OCw3ICsxMzU0LDcgQEAgaW5saW5lIHZv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVz
ICYgQWNjZXNzb3IpKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkp
OwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgaWYg
KHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKICAgICAgICAgbmV3
QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNh
cGFjaXR5KCkpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJKHJldmlzaW9uIDE5MDY4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExMiw3ICsxMTIsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTU2V0KFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQot
ICAgICAgICAsIG1fc2V0RGF0YSh2bSkKKyAgICAgICAgLCBtX3NldERhdGEodm0sIHRoaXMpCiAg
ICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEu
aAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIE1hcERhdGFfaAog
I2RlZmluZSBNYXBEYXRhX2gKIAorI2luY2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAi
SlNDZWxsLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoRnVuY3Rpb25zLmg+CkBAIC05NCw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1
ZSB2YWx1ZTsKICAgICB9OwogCi0gICAgTWFwRGF0YUltcGwoVk0mKTsKKyAgICBNYXBEYXRhSW1w
bChWTSYsIEpTQ2VsbCogb3duZXIpOwogCiAgICAgdm9pZCBzZXQoRXhlY1N0YXRlKiwgSlNDZWxs
KiBvd25lciwgS2V5VHlwZSwgSlNWYWx1ZSk7CiAgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwg
S2V5VHlwZSk7CkBAIC0xMzYsMTYgKzEzNywxNyBAQCBwcml2YXRlOgogICAgIGludDMyX3QgbV9j
YXBhY2l0eTsKICAgICBpbnQzMl90IG1fc2l6ZTsKICAgICBpbnQzMl90IG1fZGVsZXRlZENvdW50
OwotICAgIEVudHJ5KiBtX2VudHJpZXM7CisgICAgSlNDZWxsKiBtX293bmVyOworICAgIENvcHlC
YXJyaWVyPEVudHJ5PiBtX2VudHJpZXM7CiAgICAgV2Vha0dDTWFwPEpTSXRlcmF0b3IqLCBKU0l0
ZXJhdG9yPiBtX2l0ZXJhdG9yczsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBl
bmFtZSBKU0l0ZXJhdG9yPgotQUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVy
YXRvcj46Ok1hcERhdGFJbXBsKFZNJiB2bSkKK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50
cnksIEpTSXRlcmF0b3I+OjpNYXBEYXRhSW1wbChWTSYgdm0sIEpTQ2VsbCogb3duZXIpCiAgICAg
OiBtX2NhcGFjaXR5KDApCiAgICAgLCBtX3NpemUoMCkKICAgICAsIG1fZGVsZXRlZENvdW50KDAp
Ci0gICAgLCBtX2VudHJpZXMobnVsbHB0cikKKyAgICAsIG1fb3duZXIob3duZXIpCiAgICAgLCBt
X2l0ZXJhdG9ycyh2bSkKIHsKIH0KQEAgLTE4Miw3ICsxODQsNyBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgTWFwRGF0YUltcGw8RW50cnksIEpTCiB7CiAgICAgaWYgKCFlbnN1cmVTbG90KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBFbnRyeSogZW50cnkgPSAmbV9tYXBEYXRhLT5tX2VudHJp
ZXNbbV9pbmRleF07CisgICAgRW50cnkqIGVudHJ5ID0gJm1fbWFwRGF0YS0+bV9lbnRyaWVzLmdl
dChtX21hcERhdGEtPm1fb3duZXIpW21faW5kZXhdOwogICAgIHBhaXIgPSBXVEY6OktleVZhbHVl
UGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPihlbnRyeS0+a2V5KCkuZ2V0KCksIGVudHJ5LT52YWx1ZSgp
LmdldCgpKTsKICAgICBtX2luZGV4ICs9IDE7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDQsNyAr
MjA2LDcgQEAgQUxXQVlTX0lOTElORSBpbnQzMl90IE1hcERhdGFJbXBsPEVudHJ5LAogICAgIGlm
IChpc0ZpbmlzaGVkKCkpCiAgICAgICAgIHJldHVybiBtX2luZGV4OwogCi0gICAgRW50cnkqIGVu
dHJpZXMgPSBtX21hcERhdGEtPm1fZW50cmllczsKKyAgICBFbnRyeSogZW50cmllcyA9IG1fbWFw
RGF0YS0+bV9lbnRyaWVzLmdldChtX21hcERhdGEtPm1fb3duZXIpOwogICAgIHNpemVfdCBlbmQg
PSBtX21hcERhdGEtPm1fc2l6ZTsKICAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2lu
ZGV4KSA8IGVuZCAmJiAhZW50cmllc1ttX2luZGV4XS5rZXkoKSkKICAgICAgICAgbV9pbmRleCsr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5l
cy5oCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXBEYXRhSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGlubGluZSB2
b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG8KICAgICBtX2NhcGFjaXR5ID0gMDsKICAg
ICBtX3NpemUgPSAwOwogICAgIG1fZGVsZXRlZENvdW50ID0gMDsKLSAgICBtX2VudHJpZXMgPSBu
dWxscHRyOworICAgIG1fZW50cmllcy5jbGVhcigpOwogICAgIG1faXRlcmF0b3JzLmZvckVhY2go
W10oSlNJdGVyYXRvciogaXRlcmF0b3IsIEpTSXRlcmF0b3IqKSB7CiAgICAgICAgIGl0ZXJhdG9y
LT5pdGVyYXRvckRhdGEoKS0+ZGlkUmVtb3ZlQWxsRW50cmllcygpOwogICAgIH0pOwpAQCAtNjAs
MjUgKzYwLDI1IEBAIGlubGluZSBFbnRyeSogTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmEKICAg
ICAgICAgYXV0byBpdGVyID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQoYXNTdHJpbmcoa2V5LnZh
bHVlKS0+dmFsdWUoZXhlYykuaW1wbCgpKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdL
ZXllZFRhYmxlLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAm
bV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1f
b3duZXIpW2l0ZXItPnZhbHVlXTsKICAgICB9CiAgICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgp
KSB7CiAgICAgICAgIGF1dG8gaXRlciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9s
KGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCkpOwogICAgICAgICBpZiAoaXRlciA9PSBt
X3N5bWJvbEtleWVkVGFibGUuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
cmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOworICAgICAgICByZXR1cm4gJm1fZW50cmll
cy5nZXQobV9vd25lcilbaXRlci0+dmFsdWVdOwogICAgIH0KICAgICBpZiAoa2V5LnZhbHVlLmlz
Q2VsbCgpKSB7CiAgICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXku
dmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVu
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0
ZXItPnZhbHVlXTsKKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2l0ZXIt
PnZhbHVlXTsKICAgICB9CiAKICAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5k
KEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsKICAgICBpZiAoaXRlciA9PSBtX3ZhbHVlS2V5
ZWRUYWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuICZtX2VudHJpZXNb
aXRlci0+dmFsdWVdOworICAgIHJldHVybiAmbV9lbnRyaWVzLmdldChtX293bmVyKVtpdGVyLT52
YWx1ZV07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9y
PgpAQCAtOTMsMTQgKzkzLDE0IEBAIGlubGluZSBFbnRyeSogTWFwRGF0YUltcGw8RW50cnksIEpT
SXRlcmEKIHsKICAgICB0eXBlbmFtZSBNYXA6Oml0ZXJhdG9yIGxvY2F0aW9uID0gbWFwLmZpbmQo
a2V5KTsKICAgICBpZiAobG9jYXRpb24gIT0gbWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gJm1f
ZW50cmllc1tsb2NhdGlvbi0+dmFsdWVdOworICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQo
bV9vd25lcilbbG9jYXRpb24tPnZhbHVlXTsKIAogICAgIGlmICghZW5zdXJlU3BhY2VGb3JBcHBl
bmQoZXhlYywgb3duZXIpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGF1dG8gcmVzdWx0ID0g
bWFwLmFkZChrZXksIG1fc2l6ZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmlzTmV3RW50
cnkpOwotICAgIEVudHJ5KiBlbnRyeSA9ICZtX2VudHJpZXNbbV9zaXplKytdOworICAgIEVudHJ5
KiBlbnRyeSA9ICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW21fc2l6ZSsrXTsKICAgICBuZXcgKGVu
dHJ5KSBFbnRyeSgpOwogICAgIGVudHJ5LT5zZXRLZXkoZXhlYy0+dm0oKSwgb3duZXIsIGtleVZh
bHVlLnZhbHVlKTsKICAgICByZXR1cm4gZW50cnk7CkBAIC0xNjQsNyArMTY0LDcgQEAgaW5saW5l
IGJvb2wgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAgICAgICBsb2NhdGlvbiA9IGl0
ZXItPnZhbHVlOwogICAgICAgICBtX3ZhbHVlS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CiAgICAg
fQotICAgIG1fZW50cmllc1tsb2NhdGlvbl0uY2xlYXIoKTsKKyAgICBtX2VudHJpZXMuZ2V0KG1f
b3duZXIpW2xvY2F0aW9uXS5jbGVhcigpOwogICAgIG1fZGVsZXRlZENvdW50Kys7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC0xNzYsNyArMTc2LDcgQEAgaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8
RW50cnksIEpTSXRlcmF0bwogICAgIGludDMyX3QgbmV3RW5kID0gMDsKICAgICBSRUxFQVNFX0FT
U0VSVChuZXdDYXBhY2l0eSA+IDApOwogICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG1fc2l6
ZTsgaSsrKSB7Ci0gICAgICAgIEVudHJ5JiBlbnRyeSA9IG1fZW50cmllc1tpXTsKKyAgICAgICAg
RW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKClbaV07CiAgICAgICAg
IGlmICghZW50cnkua2V5KCkpIHsKICAgICAgICAgICAgIG1faXRlcmF0b3JzLmZvckVhY2goW25l
d0VuZF0oSlNJdGVyYXRvciogaXRlcmF0b3IsIEpTSXRlcmF0b3IqKSB7CiAgICAgICAgICAgICAg
ICAgaXRlcmF0b3ItPml0ZXJhdG9yRGF0YSgpLT5kaWRSZW1vdmVFbnRyeShuZXdFbmQpOwpAQCAt
MTk1LDIwICsxOTUsMjAgQEAgaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0
bwogCiAgICAgLy8gRml4dXAgZm9yIHRoZSBoYXNobWFwcwogICAgIGZvciAoYXV0byBwdHIgPSBt
X3ZhbHVlS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV92YWx1ZUtleWVkVGFibGUuZW5kKCk7
ICsrcHRyKQotICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLmtleSgp
LmdldCgpLmFzSW50MzIoKTsKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllcy5nZXRXaXRo
b3V0QmFycmllcigpW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKICAgICBmb3Ig
KGF1dG8gcHRyID0gbV9jZWxsS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9jZWxsS2V5ZWRU
YWJsZS5lbmQoKTsgKytwdHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52
YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOworICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRy
aWVzLmdldFdpdGhvdXRCYXJyaWVyKClbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigp
OwogICAgIGZvciAoYXV0byBwdHIgPSBtX3N0cmluZ0tleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9
IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBt
X2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOworICAgICAgICBwdHIt
PnZhbHVlID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKClbcHRyLT52YWx1ZV0ua2V5KCku
Z2V0KCkuYXNJbnQzMigpOwogICAgIGZvciAoYXV0byBwdHIgPSBtX3N5bWJvbEtleWVkVGFibGUu
YmVnaW4oKTsgcHRyICE9IG1fc3ltYm9sS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCi0gICAgICAg
IHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigp
OworICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKClbcHRy
LT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwogCiAgICAgQVNTRVJUKChtX3NpemUgLSBu
ZXdFbmQpID09IG1fZGVsZXRlZENvdW50KTsKICAgICBtX2RlbGV0ZWRDb3VudCA9IDA7CiAKICAg
ICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAgICAgbV9zaXplID0gbmV3RW5kOwotICAgIG1f
ZW50cmllcyA9IGRlc3RpbmF0aW9uOworICAgIG1fZW50cmllcy5zZXRXaXRob3V0QmFycmllcihk
ZXN0aW5hdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0
ZXJhdG9yPgpAQCAtMjE3LDkgKzIxNyw5IEBAIGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5
LCBKU0l0ZXJhdG8KICAgICBBU1NFUlQoIXNob3VsZFBhY2soKSk7CiAgICAgUkVMRUFTRV9BU1NF
UlQobmV3Q2FwYWNpdHkgPiAwKTsKICAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9jYXBhY2l0
eSk7Ci0gICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2VudHJpZXMsIHNpemVvZihFbnRyeSkgKiBt
X3NpemUpOworICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJy
aWVyKCksIHNpemVvZihFbnRyeSkgKiBtX3NpemUpOwogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBh
Y2l0eTsKLSAgICBtX2VudHJpZXMgPSBkZXN0aW5hdGlvbjsKKyAgICBtX2VudHJpZXMuc2V0V2l0
aG91dEJhcnJpZXIoZGVzdGluYXRpb24pOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwg
dHlwZW5hbWUgSlNJdGVyYXRvcj4KQEAgLTIzNiw2ICsyMzYsOCBAQCBpbmxpbmUgQ2hlY2tlZEJv
b2xlYW4gTWFwRGF0YUltcGw8RW50cnksCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KG5ld1N0b3JhZ2UpOwor
ICAgIC8vIERvIGEgcmVhZCBiYXJyaWVyIHRvIGVuc3VyZSB0aGF0IG1fZW50cmllcyBwb2ludHMg
dG8gdG8tc3BhY2UgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhpcyBHQyBlcG9jaC4KKyAgICBtX2Vu
dHJpZXMuZ2V0KG1fb3duZXIpOyAKICAgICBpZiAoc2hvdWxkUGFjaygpKQogICAgICAgICByZXBs
YWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOwogICAgIGVs
c2UKQEAgLTI0Nyw3ICsyNDksNyBAQCBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gTWFwRGF0YUltcGw8
RW50cnksCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KIGlu
bGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBFbnRyeSogZW50cmll
cyA9IG1fZW50cmllczsKKyAgICBFbnRyeSogZW50cmllcyA9IG1fZW50cmllcy5nZXRXaXRob3V0
QmFycmllcigpOwogICAgIGlmICghZW50cmllcykKICAgICAgICAgcmV0dXJuOwogICAgIGlmICht
X2RlbGV0ZWRDb3VudCkgewpAQCAtMjYxLDE0ICsyNjMsMTQgQEAgaW5saW5lIHZvaWQgTWFwRGF0
YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhyZWlu
dGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZlbnRyaWVzWzBdKSwgbV9zaXpl
ICogKHNpemVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogICAg
IH0KIAotICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBNYXBCYWNraW5nU3RvcmVDb3B5VG9r
ZW4sIGVudHJpZXMsIGNhcGFjaXR5SW5CeXRlcygpKTsKKyAgICB2aXNpdG9yLmNvcHlMYXRlcihv
d25lciwgTWFwQmFja2luZ1N0b3JlQ29weVRva2VuLCBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJp
ZXIoKSwgY2FwYWNpdHlJbkJ5dGVzKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwg
dHlwZW5hbWUgSlNJdGVyYXRvcj4KIGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0
ZXJhdG9yPjo6Y29weUJhY2tpbmdTdG9yZShDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2Vu
IHRva2VuKQogewotICAgIGlmICh0b2tlbiA9PSBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4gJiYg
dmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShtX2VudHJpZXMpKSB7Ci0gICAgICAgIEVudHJ5KiBv
bGRFbnRyaWVzID0gbV9lbnRyaWVzOworICAgIGlmICh0b2tlbiA9PSBNYXBCYWNraW5nU3RvcmVD
b3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShtX2VudHJpZXMuZ2V0V2l0aG91
dEJhcnJpZXIoKSkpIHsKKyAgICAgICAgRW50cnkqIG9sZEVudHJpZXMgPSBtX2VudHJpZXMuZ2V0
V2l0aG91dEJhcnJpZXIoKTsKICAgICAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2Fz
dDxFbnRyeSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBhY2l0eUluQnl0ZXMoKSkpOwog
ICAgICAgICBpZiAoc2hvdWxkUGFjaygpKQogICAgICAgICAgICAgcmVwbGFjZUFuZFBhY2tCYWNr
aW5nU3RvcmUobmV3RW50cmllcywgbV9jYXBhY2l0eSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262708</attachid>
            <date>2015-10-08 13:17:47 -0700</date>
            <delta_ts>2015-10-08 14:23:31 -0700</delta_ts>
            <desc>so far</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>168779</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA2ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQAogCQkwRjA0Mzk2RTFCMDNEQzBC
MDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0Nv
bWJpbmVkTGl2ZW5lc3MuaCAqLzsgfTsKIAkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERG
R0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDVDM0IyMTY4M0NGOEYwMEJBRjQ1QiAvKiBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmggKi87IH07CiAJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAv
KiBKSVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwNzc2QkQxNEZGMDAyODAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9u
RWZmb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYwOTgxRjcxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYwOTgxRjUxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhh
c2UuY3BwICovOyB9OworCQkwRjA5ODFGODFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJp
ZXJPcHRpbWl6YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwOTgxRjYxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0
aW1pemF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIElu
ZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCAqLzsgfTsK
IAkJMEYwQTc1MjMxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQTc1MjExQjk0QkZBOTAwMTEw
NjYwIC8qIEluZmVycmVkVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMEI4MzlDMTRCQ0Y0NjMwMDg4NUI0RiAvKiBMTEludFRodW5rcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODM5
NzE0QkNGNDVBMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwICovOyB9OwpAQCAtNDA4LDYgKzQx
MCw3IEBACiAJCTBGNzkwODU2MTlBMjkwQjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3Ry
YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3OTA4NTQxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBo
YXNlLmggKi87IH07CiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLzsgfTsKIAkJMEY3QjI5
NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0Nv
bW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzExQUMxQkMzODYyQzAwQzc0Q0RC
IC8qIENvcHlCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MDIzRTkxNjEzODMy
MzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGODMzNUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9j
YXRpb25Qcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxl
LmNwcCAqLzsgfTsKIAkJMEY4MzM1QjgxNjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlv
blByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzMSw3ICs5
MzQsNiBAQAogCQkyQTRCQjdGMzE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0
QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsK
IAkJMkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRFQzkwOTE4NjBE
NkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCAqLzsgfTsKIAkJMkE0RUM5MEMx
ODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8q
IFdyaXRlQmFycmllckJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTJBNjgyOTVCMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJy
aWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTY4
Mjk1QTE4NzVGODA1MDBCNkMzRTIgLyogQ29weVdyaXRlQmFycmllci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBNkY0NjI2MTdFOTU5Q0UwMEM0
NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBN0E1
OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZl
ckdDLmNwcCAqLzsgfTsKIAkJMkE4MzYzODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2
aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkE4MzYzODMxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwICovOyB9OwpAQCAtMTkzNiw2ICsxOTM4LDggQEAKIAkJMEYwNDM5NkMxQjAzREMwQjAwOTU5
OEI3IC8qIERGR0NvbWJpbmVkTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQ29tYmluZWRMaXZlbmVzcy5oOyBwYXRoID0gZGZnL0RGR0NvbWJpbmVkTGl2ZW5l
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwNUMzQjIxNjgzQ0Y4RjAwQkFG
NDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZn
L0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwNzc2QkQxNEZGMDAyODAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVENvbXBpbGF0aW9uRWZmb3J0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMDk4MUY1MUJDNUU1NjUwMDQ4MTRGOCAv
KiBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjA5ODFGNjFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJh
cnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29weUJh
cnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjBBNzUyMDFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMEE3NTIxMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEI4Mzk3MTRCQ0Y0NUEwMDg4NUI0RiAvKiBMTElu
dFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludFRo
dW5rcy5jcHA7IHBhdGggPSBsbGludC9MTEludFRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yMjU2LDYgKzIyNjAsNyBAQAogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzkwODUzMTlBMjkwQjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdHJ1Y3R1cmVS
ZWdpc3RyYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9u
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc5MDg1NDE5QTI5MEIy
MDBGNjMxMEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjdDMTFBQzFCQzM4NjJDMDBDNzRDREIgLyogQ29weUJhcnJpZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weUJhcnJpZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5m
by5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeVZhbEluZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5
QWxsb2NhdGlvblByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2ZpbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3NDksNyArMjc1NCw2IEBACiAJCTJB
NEJCN0YyMThBNDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE0RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8qIFdy
aXRlQmFycmllckJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
QTRFQzkwQTE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllckJ1ZmZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkyQTY4Mjk1QTE4NzVGODA1MDBCNkMzRTIgLyogQ29weVdyaXRl
QmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3B5V3JpdGVCYXJy
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBNkY0NjI1MTdFOTU5Q0UwMEM0
NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhlYXBPcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE3QTU4RUUx
ODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGVmZXJHQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJB
ODM2MzgzMThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI0MSwxMiArNDI0NSwxMiBAQAog
CQkJCUMyNDAzMDUzMTRCNDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi8sCiAJCQkJ
QzJFQUEzRjgxNDlBODMwODAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmggKi8sCiAJCQkJQzJDOEQw
MkIxNEEzQzZCMjAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5lcy5oICovLAorCQkJCTBGN0Mx
MUFDMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oICovLAogCQkJCTBGNUE1MkNGMTdB
REQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCAqLywKIAkJCQlDMjIzOUQxMjE2MjYyQkREMDA1
QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICovLAogCQkJCUMyMjM5RDEzMTYyNjJCREQwMDVBQzVG
RCAvKiBDb3B5VmlzaXRvci5oICovLAogCQkJCUMyMjM5RDE0MTYyNjJCREQwMDVBQzVGRCAvKiBD
b3B5VmlzaXRvcklubGluZXMuaCAqLywKIAkJCQlDMjE4RDEzRjE2NTVDRkQ1MDA2MkJCODEgLyog
Q29weVdvcmtMaXN0LmggKi8sCi0JCQkJMkE2ODI5NUExODc1RjgwNTAwQjZDM0UyIC8qIENvcHlX
cml0ZUJhcnJpZXIuaCAqLywKIAkJCQkyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJH
Qy5jcHAgKi8sCiAJCQkJMEYxMzZENEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywK
IAkJCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5j
cHAgKi8sCkBAIC01MjM4LDYgKzUyNDIsOCBAQAogCQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBG
RiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovLAogCQkJCTBGRUQ2N0I3MUIyNjI1NkQw
MDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovLAogCQkJCTBGRUQ2N0I4
MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLywKKwkJCQkw
RjA5ODFGNTFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFz
ZS5jcHAgKi8sCisJCQkJMEYwOTgxRjYxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVy
T3B0aW1pemF0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkJFMEY2QjE2QzFEQjAxMDA4MkM1RTggLyog
REZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgKi8sCiAJCQkJMEZCRTBGNkMxNkMxREIwMTAwODJD
NUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCAqLywKIAkJCQlBN0Q4OUNFNjE3QTBCOEND
MDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgKi8sCkBAIC02MDc5
LDcgKzYwODUsNiBAQAogCQkJCUMyMjM5RDE4MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlW
aXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIxOEQxNDAxNjU1Q0ZENTAwNjJC
QjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkE2ODI5NUIxODc1Rjgw
NTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRC
NkY0MUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yLnB5IGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzRGNEI2RjMxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9o
YXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCkBAIC02NTE3LDYgKzY1MjIsNyBAQAogCQkJCUE3QTRB
RTEwMTc5NzNCNEQwMDU2MTJCMSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjA5ODFGODFCQzVFNTY1MDA0
ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc2RjU0QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFw
cGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNB
UElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTY3NjIsNiArNjc2OCw3IEBACiAJ
CQkJODY4OTE2QjAxNTVGMjg2MzAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ1MDBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTVDRDQ1NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2Zp
bGVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUxMDAwRjVCQTMgLyog
UHJvZmlsZXJCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAw
MEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTgxMTIsNiAr
ODExOSw3IEBACiAJCQkJNzA5RkI4NkIxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8qIFdy
aXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUwQjE0MDQzQzBF
MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjA5ODFGNzFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QUIzQTE3OTlFNEIyMDBEMjgzM0QgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4
NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njcw
NEI4NDEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nzks
NiArNDc5LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAg
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKAogICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUZvckFjY2Vzc0dQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwKICAgICAgICAgICAgICAgICAgICAgbG9hZGVkVmFsdWVHUFIpOworICAgICAgICAgICAgICAg
IGppdC5yZW1vdmVTcGFjZUJpdHMobG9hZGVkVmFsdWVHUFIpOwogICAgICAgICAgICAgICAgIHN0
b3JhZ2VHUFIgPSBsb2FkZWRWYWx1ZUdQUjsKICAgICAgICAgICAgIH0KIApAQCAtNzIzLDYgKzcy
NCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAg
ICAgICAgICAgICAgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1Zh
bHVlKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9yZS5hcHBlbmQoaml0LmJy
YW5jaElmTm90VG9TcGFjZShzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1
ZSgKICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MsCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKApAQCAtNzg2LDYgKzc4OCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNp
emUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIzKTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90
VG9TcGFjZShzY3JhdGNoR1BSMykpOwogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKCZjb3Bp
ZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZywgc2NyYXRjaEdQUik7CiAgICAgICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICBqaXQuYnJhbmNoU3Vi
UHRyKApAQCAtODI5LDggKzgzMiwxMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vz
c0dlbmVyYXRpCiAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSArCiAgICAgICAgICAgICAgICAgICAgIG9mZnNldEluSW5saW5lU3RvcmFnZShtX29m
ZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmICghc2NyYXRjaEdQUkhhc1N0b3JhZ2UpCisgICAgICAgICAgICBpZiAoIXNjcmF0Y2hHUFJI
YXNTdG9yYWdlKSB7CiAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUuYXBwZW5kKGppdC5icmFuY2hJ
Zk5vdFRvU3BhY2Uoc2NyYXRjaEdQUikpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaml0
LnN0b3JlVmFsdWUoCiAgICAgICAgICAgICAgICAgdmFsdWVSZWdzLAogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShtX29m
ZnNldCkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKQEAgLTkxNyw2ICs5MjIsNyBAQCB2b2lkIEFjY2Vz
c0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAKICAgICBjYXNlIEFycmF5TGVuZ3RoOiB7
CiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LnJlbW92
ZVNwYWNlQml0cyhzY3JhdGNoR1BSKTsKICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOwogICAgICAgICBzdGF0ZS5mYWlsQW5kSWdub3JlLmFwcGVuZCgKICAgICAgICAgICAg
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNp
b24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY4LDYgKzE5NjgsNyBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFk
T25seToKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgZm9yTm9kZShub2RlKS5jbGVhcigpOyAvLyBU
aGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNiArMTkyLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgorICAgICAgICAgICAgICAgIGNh
c2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYmFy
ZWx5IHdvcmtzLiBUaGUgZGFuZ2VyIGlzIHRoYXQgdGhlIEdldEJ1dHRlcmZseSBpcyB1c2VkIGJ5
IHNvbWV0aGluZyB0aGF0CiAgICAgICAgICAgICAgICAgICAgIC8vIGRvZXMgc29tZXRoaW5nIGVz
Y2FwaW5nIHRvIGEgY2FuZGlkYXRlLiBGb3J0dW5hdGVseSwgdGhlIG9ubHkgYnV0dGVyZmx5LXVz
aW5nIG9wcwogICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHdlIGV4ZW1wdCBoZXJlIGFsc28g
dXNlIHRoZSBjYW5kaWRhdGUgZGlyZWN0bHkuIElmIHRoZXJlIGV2ZXIgd2FzIGEKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxOTA2ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMxLDYgKzczMSwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgZGVm
KEhlYXBMb2NhdGlvbihCdXR0ZXJmbHlMb2MsIEpTT2JqZWN0X2J1dHRlcmZseSwgbm9kZS0+Y2hp
bGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgR2V0
QnV0dGVyZmx5UmVhZE9ubHk6CisgICAgICAgIC8vIFRoaXMgcnVsZSBpcyBzZXBhcmF0ZSB0byBw
cmV2ZW50IENTRSBvZiBHZXRCdXR0ZXJmbHkgd2l0aCBHZXRCdXR0ZXJmbHlSZWFkT25seS4gQnV0
IGluIHJlYWxpdHksCisgICAgICAgIC8vIHRoaXMgd29ya3MgYmVjYXVzZSB3ZSBkb24ndCBpbnRy
b2R1Y2UgR2V0QnV0dGVyZmx5UmVhZE9ubHkgdW50aWwgdGhlIGJpdHRlciBlbmQgb2YgY29tcGls
YXRpb24uCisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihCdXR0ZXJmbHlSZWFkT25seUxvYywgSlNPYmplY3RfYnV0dGVyZmx5LCBub2Rl
LT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIEFycmF5aWZ5OgogICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb3B5QmFy
cmllck9wdGltaXphdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZH
RG9lc0dDLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgQ29weUJh
cnJpZXJPcHRpbWl6YXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ29w
eUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJjb3B5IGJhcnJpZXIgb3B0aW1pemF0aW9uIikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCJTdGFydGluZyBjb3B5IGJhcnJpZXIgb3B0aW1pemF0aW9uOlxuIik7CisgICAg
ICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpcnN0IGNv
bnZlcnQgYWxsIEdldEJ1dHRlcmZseSBub2RlcyBpbnRvIEdldEJ1dHRlcmZseVJlYWRPbmx5Lgor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxP
cmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRCdXR0ZXJmbHkpCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldE9wKEdldEJ1dHRlcmZseVJlYWRPbmx5KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8vIEFueXRpbWUgd2UgdXNlIGEgR2V0QnV0dGVyZmx5UmVh
ZE9ubHkgaW4gYSBzZXR0aW5nIHRoYXQgbWF5IHdyaXRlIHRvIHRoZSBoZWFwLCBvciBpZiB3ZSdy
ZSBpbiBhCisgICAgICAgIC8vIG5ldyBlcG9jaCwgY29udmVydCBpdCB0byBhIEdldEJ1dHRlcmZs
eS4gVGhlIGVwb2NoIGdldHMgaW5jcmVtZW50ZWQgYXQgYmFzaWMgYmxvY2sgYm91bmRhcmllcywK
KyAgICAgICAgLy8gYW55dGltZSB3ZSBHQywgYW5kIGFueXRpbWUgYSBiYXJyaWVyIG9uIHRoZSBi
dXR0ZXJmbHkgbWF5IGJlIGV4ZWN1dGVkLiBXZSB0cmF2ZXJzZSB0aGUgcHJvZ3JhbQorICAgICAg
ICAvLyBpbiBwcmUtb3JkZXIgc28gdGhhdCB3ZSBhbHdheXMgc2VlIHVzZXMgYWZ0ZXIgZGVmcy4g
Tm90ZSB0aGF0IHRoaXMgaXMgYSBmaXhwb2ludCBiZWNhdXNlIGlmIHdlCisgICAgICAgIC8vIHR1
cm4gYSBHZXRCdXR0ZXJmbHlSZWFkT25seSBpbnRvIGEgR2V0QnV0dGVyZmx5LCB0aGVuIHdlJ3Zl
IGludHJvZHVjZWQgYSBidXR0ZXJmbHkgcmVhbGxvY2F0aW9uLgorICAgICAgICBib29sIGNoYW5n
ZWQgPSB0cnVlOworICAgICAgICBFcG9jaCBjdXJyZW50RXBvY2ggPSBFcG9jaDo6Zmlyc3QoKTsK
KyAgICAgICAgbV9ncmFwaC5jbGVhckVwb2NocygpOworICAgICAgICB3aGlsZSAoY2hhbmdlZCkg
eworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAgICAgICAg
ICAgY3VycmVudEVwb2NoLmJ1bXAoKTsKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUg
OiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0ZXNUb0hlYXAgPSB3cml0
ZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEhlYXApOworCisgICAgICAgICAgICAgICAgICAgIGJv
b2wgcmVhbGxvY2F0ZXNCdXR0ZXJmbHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGRvZXNHQyhtX2dyYXBoLCBub2RlKSB8fCB3cml0ZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIEpT
T2JqZWN0X2J1dHRlcmZseSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZWFsbG9jYXRlc0J1
dHRlcmZseSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0IG9mIHRoaW5ncyB0
aGF0IHdpbGwgZXhlY3V0ZSBjb3B5IGJhcnJpZXJzLiBNb3N0CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGluZ3MgdGhhdCBleGVjdXRlIGNvcHkgYmFycmllcnMgYWxzbyBkbyBHQyBvciBo
YXZlIHdyaXRlcyB0aGF0IG92ZXJsYXAgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBi
dXR0ZXJmbHkgaGVhcCwgYW5kIHdlIGNhdGNoIHRoYXQgYWJvdmUuCisgICAgICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgR2V0QnV0dGVyZmx5OgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5
T2Zmc2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxsb2NhdGVzQnV0dGVyZmx5
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZd
IChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZS0+b3Ao
KSAhPSBHZXRCdXR0ZXJmbHlSZWFkT25seSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHdyaXRlc1RvSGVhcCB8fCBjdXJyZW50RXBvY2ggIT0gZWRnZS0+ZXBvY2go
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+c2V0T3AoR2V0QnV0dGVyZmx5KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocmVhbGxvY2F0ZXNCdXR0ZXJmbHkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50RXBvY2guYnVtcCgpOworCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIHBoYXNl
IGFsd2F5cyB0aGlua3MgdGhhdCBpdCBjaGFuZ2VzIHRoZSBncmFwaC4gVGhhdCdzIE9LLCBiZWNh
dXNlIGl0J3MgYSBsYXRlIHBoYXNlLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9Owor
Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBwZXJmb3JtQ29weUJhcnJpZXJPcHRp
bWl6YXRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVn
aW9uKCJERkcgQ29weSBCYXJyaWVyIE9wdGltaXphdGlvbiBQaGFzZSIpOworICAgIHJldHVybiBy
dW5QaGFzZTxDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvcHlCYXJy
aWVyT3B0aW1pemF0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERGR0NvcHlCYXJyaWVyT3B0
aW1pemF0aW9uUGhhc2VfaAorI2RlZmluZSBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNl
X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDb252ZXJ0cyBHZXRCdXR0ZXJmbHkgbm9kZXMgaW50
byBHZXRCdXR0ZXJmbHlSZWFkT25seSBub2RlcyB3aGVuZXZlciB0aGUgYnV0dGVyZmx5IGlzIG9u
bHkgdXNlZCBmb3IKKy8vIHJlYWQtb25seSBvcGVyYXRpb25zLgorYm9vbCBwZXJmb3JtQ29weUJh
cnJpZXJPcHRpbWl6YXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDb3B5QmFycmllck9w
dGltaXphdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw3IEBAIGJvb2wgZG9lc0dD
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAg
IGNhc2UgR2V0RXhlY3V0YWJsZToKICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICBjYXNlIEdl
dEJ1dHRlcmZseVJlYWRPbmx5OgogICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICBjYXNlIEdldFNj
b3BlOgogICAgIGNhc2UgTG9hZEFycm93RnVuY3Rpb25UaGlzOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDY1LDcgKzEwNjUsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrQ2VsbDoK
ICAgICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIENyZWF0ZVRoaXM6
Ci0gICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OiB7CisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5
OgorICAgICAgICBjYXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OiB7CiAgICAgICAgICAgICBmaXhF
ZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
Y3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hl
YXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDEwIEBAIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICAgICAgb3V0LnByaW50KCJCdXR0
ZXJmbHlMb2MiKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEJ1dHRlcmZs
eVJlYWRPbmx5TG9jOgorICAgICAgICBvdXQucHJpbnQoIkJ1dHRlcmZseVJlYWRPbmx5TG9jIik7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlTG9j
OgogICAgICAgICBvdXQucHJpbnQoIkNoZWNrSGFzSW5zdGFuY2VMb2MiKTsKICAgICAgICAgcmV0
dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5o
CShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBM
b2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIGVudW0gTG9jYXRpb25L
aW5kIHsKICAgICAKICAgICBBcnJheUxlbmd0aExvYywKICAgICBCdXR0ZXJmbHlMb2MsCisgICAg
QnV0dGVyZmx5UmVhZE9ubHlMb2MsCiAgICAgQ2hlY2tIYXNJbnN0YW5jZUxvYywKICAgICBDbG9z
dXJlVmFyaWFibGVMb2MsCiAgICAgRGlyZWN0QXJndW1lbnRzTG9jLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Myw2ICs3MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1f
ZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CiAgICAgICAgIG1fZ3JhcGgu
bV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworCisgICAgICAgIGlm
ICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgTElDTTpcbiIp
OworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIG1fZGF0YS5yZXNpemUobV9ncmFwaC5tX25hdHVyYWxMb29wcy5udW1Mb29wcygpKTsKICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZp
c2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2ICsxODcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1h
Y3JvKEdldEJ1dHRlcmZseSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKKyAgICBtYWNybyhHZXRCdXR0
ZXJmbHlSZWFkT25seSwgTm9kZVJlc3VsdFN0b3JhZ2UpIC8qIEEgbm9kZSB1c2VkIHRvIHJlcGxh
Y2UgR2V0QnV0dGVyZmx5IGF0IHRoZSBiaXR0ZXIgZW5kIG9mIGNvbXBpbGF0aW9uLiAqL1wKICAg
ICBtYWNybyhDaGVja0FycmF5LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQXJyYXlp
ZnksIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhBcnJheWlmeVRvU3RydWN0dXJlLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Myw3ICs2NDMsOSBA
QCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0CiAgICAgaWYgKFVOTElL
RUxZKHNpemUgPCAwKSkKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0
ZXJhbCgiQXJyYXkgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4i
KSkpKTsKIAotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KEpTQXJyYXk6OmNyZWF0ZSgq
dm0sIGFycmF5U3RydWN0dXJlLCBzaXplKSk7CisgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJh
eTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1Y3R1cmUsIHNpemUpOworICAgIHJlc3VsdC0+YnV0dGVy
Zmx5KCk7IC8vIEVuc3VyZSB0aGF0IHRoZSBiYWNraW5nIHN0b3JlIGlzIGluIHRvLXNwYWNlLgor
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIGFycmF5U3RydWN0dXJlLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBzaXplKQpAQCAtMTE3Niw2
ICsxMTc4LDI0IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHIKICAg
ICByZXR1cm4gZXhlYy0+Y29kZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KS5vZmZzZXRGb3JWYWx1ZShzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKSwgc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpOwogfQogCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ1dHRlcmZseShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKworICAgIGRhdGFMb2coIlJhbiB0aGUgYmFycmllci5cbiIpOworCisgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oanNDYXN0PEpTT2JqZWN0Kj4oY2VsbCktPmJ1dHRl
cmZseSgpKTsKK30KKworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRBcnJheUJ1ZmZl
clZlY3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KGNlbGwpLT52ZWN0b3IoKSk7Cit9CisKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25O
b3RpZnlXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNiArMTMwLDggQEAgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0ckNhdDMoRQogY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcq
KTsKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmdBbmRHZXRCcmFu
Y2hPZmZzZXQoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CitjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ1dHRlcmZseShFeGVjU3RhdGUqLCBKU0NlbGwq
KTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QXJyYXlCdWZmZXJWZWN0b3IoRXhl
Y1N0YXRlKiwgSlNDZWxsKik7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3Jp
dGUoRXhlY1N0YXRlKiwgV2F0Y2hwb2ludFNldCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFM
OwogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTkwNjgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkRGR0NsZWFuVXBQaGFzZS5oIgogI2luY2x1
ZGUgIkRGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ29uc3RhbnRIb2lz
dGluZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5o
IgogI2luY2x1ZGUgIkRGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdEQ0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZhaWxlZEZpbmFsaXplci5oIgpAQCAtMzU4LDYg
KzM1OSw4IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAg
ICAgcGVyZm9ybUNsZWFuVXAoZGZnKTsKICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRm
Zyk7CiAgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmVuYWJs
ZUNvcHlCYXJyaWVyT3B0aW1pemF0aW9uKCkpCisgICAgICAgICAgICBwZXJmb3JtQ29weUJhcnJp
ZXJPcHRpbWl6YXRpb24oZGZnKTsKICAgICAgICAgcGVyZm9ybVBoYW50b21JbnNlcnRpb24oZGZn
KTsKICAgICAgICAgcGVyZm9ybVN0YWNrTGF5b3V0KGRmZyk7CiAgICAgICAgIHBlcmZvcm1WaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRmZyk7CkBAIC00MzcsNiArNDQwLDggQEAgUGxhbjo6Q29t
cGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICAgICAgcGVyZm9ybU1vdkhp
bnRSZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DbGVhblVwKGRmZyk7CiAgICAgICAgIHBl
cmZvcm1EQ0UoZGZnKTsgLy8gV2UgcmVseSBvbiB0aGlzIHRvIGtpbGwgZGVhZCBjb2RlIHRoYXQg
d29uJ3QgYmUgcmVjb2duaXplZCBhcyBkZWFkIGJ5IExMVk0uCisgICAgICAgIGlmIChPcHRpb25z
OjplbmFibGVDb3B5QmFycmllck9wdGltaXphdGlvbigpKQorICAgICAgICAgICAgcGVyZm9ybUNv
cHlCYXJyaWVyT3B0aW1pemF0aW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1TdGFja0xheW91dChk
ZmcpOwogICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICBwZXJm
b3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMoZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQyLDcgKzQ0
Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OiAKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJm
bHk6CisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAgICAgICAgIGNhc2UgR2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24g
MTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJz
dHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEdl
dEV4ZWN1dGFibGU6CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgY2FzZSBHZXRCdXR0ZXJm
bHlSZWFkT25seToKICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgY2FzZSBBcnJheWlmeToKICAg
ICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE5MDY4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMTAsMTggKzQwMTAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgR2V0
QnV0dGVyZmx5OiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBi
YXNlKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgCi0gICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIHN0b3JhZ2VS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICBjYXNl
IEdldEJ1dHRlcmZseVJlYWRPbmx5OgorICAgICAgICBjb21waWxlR2V0QnV0dGVyZmx5KG5vZGUp
OwogICAgICAgICBicmVhazsKLSAgICB9CiAKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2U6IHsKICAgICAgICAgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2Uobm9kZSk7
CkBAIC00NjEwLDEwICs0NjAyLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKIAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisKICAgICAgICAgLy8gQ2hlY2sgdGhlIHN0
cnVjdHVyZQogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisg
ICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIAorICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAogICAgICAgICAv
LyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0
b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCkBAIC00NjM1LDE0ICs0NjMzLDE1IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbV9qaXQu
c2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIC8vIFdl
IHVzZSByZXN1bHRQYXlsb2FkR1BSIGFzIGEgdGVtcG9yYXJ5IGhlcmUuIFdlIGhhdmUgdG8gbWFr
ZSBzdXJlIGNsb2JiZXIgaXQgYWZ0ZXIgZ2V0dGluZyB0aGUgCiAgICAgICAgIC8vIHZhbHVlIG91
dCBvZiBpbmRleEdQUiBhbmQgZW51bWVyYXRvckdQUiBiZWNhdXNlIHJlc3VsdFBheWxvYWRHUFIg
Y291bGQgcmV1c2UgZWl0aGVyIG9mIHRob3NlIHJlZ2lzdGVycy4KLSAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZXN1bHRQYXlsb2FkR1BSKTsgCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFu
Y2hJZk5vdFRvU3BhY2UocmVzdWx0UGF5bG9hZEdQUikpOwogICAgICAgICBpbnQzMl90IG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BS
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRU
YWdHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChy
ZXN1bHRQYXlsb2FkR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAKICAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CiAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3Ry
dWN0dXJlLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbENl
bGwsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIp
KTsKICNlbmRpZgogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQ
YXlsb2FkR1BSLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAyNiwxOCArNDAyNiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgY2FzZSBHZXRCdXR0ZXJmbHk6IHsKLSAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGJhc2UpOwotICAgICAgICAKLSAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOworICAgIGNhc2UgR2V0QnV0dGVyZmx5OgorICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9u
bHk6CisgICAgICAgIGNvbXBpbGVHZXRCdXR0ZXJmbHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwot
ICAgIH0KIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewogICAgICAgICBj
b21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZShub2RlKTsKQEAgLTQ2MzMsMTAgKzQ2MjUs
MTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBH
UFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNoMS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CiAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dQYXRoOworCiAgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgd3JvbmdTdHJ1Y3R1cmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIAotICAgICAgICAgICAgc2NyYXRjaDFHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJl
SURPZmZzZXQoKSkpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAgICBtX2pp
dC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAor
ICAgICAgICAgICAgICAgIHNjcmF0Y2gxR1BSLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICBlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CiAgICAgICAg
IAogICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKICAgICAgICAgLy8gSWYgaW5kZXggaXMg
bGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0
J3MgYW4gaW5saW5lIGFjY2VzcwpAQCAtNDY1MCw2ICs0NjQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQg
b2YgbGluZQogICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOwogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5k
KG1faml0LmJyYW5jaElmTm90VG9TcGFjZShzY3JhdGNoMkdQUikpOwogICAgICAgICBtX2ppdC5t
b3ZlKGluZGV4R1BSLCBzY3JhdGNoMUdQUik7CiAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgbV9q
aXQubmVnMzIoc2NyYXRjaDFHUFIpOwpAQCAtNDY1OSw3ICs0NjU4LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OwogCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVj
dHVyZSwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdEdQUiwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbCwgcmVzdWx0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUikpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAg
ICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzODksNiArNDM4
OSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAg
IG1faml0LmxvYWRQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksCiAgICAgICAgICAgICBz
dG9yYWdlUmVnKTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZk5vdFRvU3BhY2Uo
c3RvcmFnZVJlZyksCisgICAgICAgICAgICAgICAgdGhpcywgb3BlcmF0aW9uR2V0QXJyYXlCdWZm
ZXJWZWN0b3IsIHN0b3JhZ2VSZWcsIGJhc2VSZWcpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIApAQCAtNDQwOSw5ICs0NDE0LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRUeXBlZEFycmEKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZNb2RlKCkpLAogICAgICAgICBUcnVzdGVkSW1tMzIoV2FzdGVmdWxUeXBlZEFycmF5KSk7Ci0g
ICAgCisKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGRhdGFHUFIpOworICAgIG1faml0LnJlbW92
ZVNwYWNlQml0cyhkYXRhR1BSKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgdmVj
dG9yR1BSKTsKKyAgICBtX2ppdC5yZW1vdmVTcGFjZUJpdHModmVjdG9yR1BSKTsKICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRhdGFHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZBcnJheUJ1ZmZlcigpKSwgZGF0YUdQUik7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhkYXRhR1BSLCBBcnJheUJ1ZmZlcjo6b2Zmc2V0T2ZEYXRhKCkpLCBk
YXRhR1BSKTsKICAgICBtX2ppdC5zdWJQdHIoZGF0YUdQUiwgdmVjdG9yR1BSKTsKQEAgLTQ0MjIs
NyArNDQyOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmEKICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoMCksIHZlY3RvckdQUik7CiAgICAgCiAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7Ci0gICAgCisKICAgICBpbnQzMlJlc3VsdCh2ZWN0b3JHUFIsIG5vZGUp
OwogfQogCkBAIC01NDkwLDYgKzU0OTcsMzYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVJlYWxsb2NhdGVQcgogICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjEsIG5vZGUpOwogfQog
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnV0dGVyZmx5KE5vZGUqIG5vZGUpCit7
CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgYmFzZSk7CisgICAgCisgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworCisgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaElmTm90VG9TcGFjZShyZXN1bHRHUFIpLAorICAgICAgICAgICAgICAg
IHRoaXMsIG9wZXJhdGlvbkdldEJ1dHRlcmZseSwgcmVzdWx0R1BSLCBiYXNlR1BSKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25seToKKyAgICAgICAgbV9q
aXQucmVtb3ZlU3BhY2VCaXRzKHJlc3VsdEdQUik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVm
YXVsdDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgbm9kZSB0
eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBzdG9yYWdlUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7Cit9CisKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVn
aXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwgQXJyYXlNb2RlIGFycmF5
TW9kZSkKIHsKICAgICBpZiAoIXB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKGFycmF5TW9k
ZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNDcsNiArMjE0Nyw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIGNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKik7CisgICAg
dm9pZCBjb21waWxlR2V0QnV0dGVyZmx5KE5vZGUqKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2VPcGVyYW5kVHlwZSwgdHlwZW5hbWUgUHJv
cGVydHlPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVmFsdWVPcGVyYW5kVHlwZSwgdHlwZW5hbWUgVGFn
VHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
eXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ3LDYgKzI0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAg
ICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25seToKICAgICAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAg
ICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKQEAgLTMyNSw2ICszMjYsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGNhc2Ug
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OgogICAgICAg
ICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERp
cmVjdDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTkwNjgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OCw2ICs2OCw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGls
ZShOb2RlKiAKICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFk
T25seToKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2Ug
TmV3QXJyYXlCdWZmZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NCw2
ICs1NjQsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKICAgICAgICAg
ICAgIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OgorICAgICAgICAgICAgY29tcGlsZUdldEJ1dHRlcmZs
eVJlYWRPbmx5KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDb25zdGFudFN0
b3JhZ2VQb2ludGVyOgogICAgICAgICAgICAgY29tcGlsZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIo
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjI4MCw3ICsyMjgzLDEyIEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlR2V0QnV0dGVyZmx5KCkKICAgICB7Ci0gICAgICAgIHNldFN0
b3JhZ2UobV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpT
T2JqZWN0X2J1dHRlcmZseSkpOworICAgICAgICBzZXRTdG9yYWdlKGxvYWRCdXR0ZXJmbHlXaXRo
QmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgfQorCisgICAgdm9pZCBj
b21waWxlR2V0QnV0dGVyZmx5UmVhZE9ubHkoKQorICAgIHsKKyAgICAgICAgc2V0U3RvcmFnZShs
b2FkQnV0dGVyZmx5UmVhZE9ubHkobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSkpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGNvbXBpbGVDb25zdGFudFN0b3JhZ2VQb2ludGVyKCkKQEAgLTIzMTUs
NyArMjMyMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHNldFN0b3JhZ2UobV9vdXQubG9hZFB0cihjZWxsLCBtX2hlYXBzLkpT
QXJyYXlCdWZmZXJWaWV3X3ZlY3RvcikpOworICAgICAgICBzZXRTdG9yYWdlKGxvYWRWZWN0b3JX
aXRoQmFycmllcihjZWxsKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrQXJy
YXkoKQpAQCAtMjMzNSwyNyArMjM0MywyNSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTFZh
bHVlIGJhc2VQdHIgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOyAgICAKIAotICAgICAgICBM
QmFzaWNCbG9jayBzaW1wbGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJ3YXN0ZWxlc3Mg
dHlwZWQgYXJyYXkiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHdhc3RlZnVsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgid2FzdGVmdWwgdHlwZWQgYXJyYXkiKSk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY29udGludWF0aW9u
IGJyYW5jaCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2ltcGxlQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQgd2FzdGVsZXNzIHR5cGVkIGFycmF5
IikpOworICAgICAgICBMQmFzaWNCbG9jayB3YXN0ZWZ1bENhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0IHdhc3RlZnVsIHR5cGVkIGFycmF5IikpOwor
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0IGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgCiAgICAg
ICAgIExWYWx1ZSBtb2RlID0gbV9vdXQubG9hZDMyKGJhc2VQdHIsIG1faGVhcHMuSlNBcnJheUJ1
ZmZlclZpZXdfbW9kZSk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKICAgICAgICAgICAgIG1fb3V0
Lm5vdEVxdWFsKG1vZGUsIG1fb3V0LmNvbnN0SW50MzIoV2FzdGVmdWxUeXBlZEFycmF5KSksCiAg
ICAgICAgICAgICB1bnN1cmUoc2ltcGxlQ2FzZSksIHVuc3VyZSh3YXN0ZWZ1bENhc2UpKTsKIAot
ICAgICAgICAvLyBiZWdpbiBzaW1wbGUgY2FzZSAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2ltcGxlQ2FzZSwgd2FzdGVmdWxDYXNlKTsKIAog
ICAgICAgICBWYWx1ZUZyb21CbG9jayBzaW1wbGVPdXQgPSBtX291dC5hbmNob3IobV9vdXQuY29u
c3RJbnRQdHIoMCkpOwogCiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAotICAg
ICAgICAvLyBiZWdpbiB3YXN0ZWZ1bCBjYXNlCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHdhc3Rl
ZnVsQ2FzZSwgY29udGludWF0aW9uKTsKIAotICAgICAgICBMVmFsdWUgdmVjdG9yUHRyID0gbV9v
dXQubG9hZFB0cihiYXNlUHRyLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7Ci0g
ICAgICAgIExWYWx1ZSBidXR0ZXJmbHlQdHIgPSBtX291dC5sb2FkUHRyKGJhc2VQdHIsIG1faGVh
cHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgTFZhbHVlIHZlY3RvclB0ciA9IGxvYWRW
ZWN0b3JSZWFkT25seShiYXNlUHRyKTsKKyAgICAgICAgTFZhbHVlIGJ1dHRlcmZseVB0ciA9IGxv
YWRCdXR0ZXJmbHlSZWFkT25seShiYXNlUHRyKTsKICAgICAgICAgTFZhbHVlIGFycmF5QnVmZmVy
UHRyID0gbV9vdXQubG9hZFB0cihidXR0ZXJmbHlQdHIsIG1faGVhcHMuQnV0dGVyZmx5X2FycmF5
QnVmZmVyKTsKICAgICAgICAgTFZhbHVlIGRhdGFQdHIgPSBtX291dC5sb2FkUHRyKGFycmF5QnVm
ZmVyUHRyLCBtX2hlYXBzLkFycmF5QnVmZmVyX2RhdGEpOwogCkBAIC0yMzY0LDcgKzIzNzAsNiBA
QCBwcml2YXRlOgogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogCi0gICAgICAgIC8vIG91dHB1
dAogICAgICAgICBzZXRJbnQzMihtX291dC5jYXN0VG9JbnQzMihtX291dC5waGkobV9vdXQuaW50
UHRyLCBzaW1wbGVPdXQsIHdhc3RlZnVsT3V0KSkpOwogICAgIH0KICAgICAKQEAgLTQwMTAsNyAr
NDAxNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlcihtZXRob2QucHJvdG90eXBlKCktPnZhbHVl
KCkuYXNDZWxsKCkpOwogICAgICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQobWV0aG9k
Lm9mZnNldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gbV9vdXQubG9h
ZFB0cihwcm9wZXJ0eUJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gbG9hZEJ1dHRlcmZseVJlYWRPbmx5KHByb3BlcnR5
QmFzZSk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9hZFByb3BlcnR5KAogICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eUJhc2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgbWV0aG9kLm9m
ZnNldCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQwNzgsNyArNDA4Myw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0
KCkpKQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gYmFzZTsKICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2Us
IG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZSA9IGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihiYXNlKTsKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMuYWRkTGF6aWx5KAog
ICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKSwgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMu
Y29kZU9yaWdpbk93bmVyKCksCkBAIC01MzAyLDcgKzUzMDcsNyBAQCBwcml2YXRlOgogICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0
T2ZMaW5lTG9hZCwgc2xvd0Nhc2UpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0Lmxv
YWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBMVmFsdWUg
c3RvcmFnZSA9IGxvYWRCdXR0ZXJmbHlSZWFkT25seShiYXNlKTsKICAgICAgICAgTFZhbHVlIHJl
YWxJbmRleCA9IG1fb3V0LnNpZ25FeHQoCiAgICAgICAgICAgICBtX291dC5uZWcobV9vdXQuc3Vi
KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpKSksIAogICAgICAgICAgICAgbV9vdXQuaW50
NjQpOwpAQCAtNTkzNywxNCArNTk0MiwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
IG9iamVjdDsKICAgICAgICAgCiAgICAgICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSA9PSBuZXh0U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1
dHRlcmZseSk7CisgICAgICAgICAgICByZXR1cm4gbG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKG9i
amVjdCk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgcmVzdWx0OwogICAgICAgICBpZiAoIXBy
ZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQogICAgICAgICAgICAgcmVzdWx0
ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBwcmV2aW91c1N0cnVjdHVyZSk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmVzdWx0ID0gcmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZSgKLSAgICAgICAgICAgICAgICBvYmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hl
YXBzLkpTT2JqZWN0X2J1dHRlcmZseSksCisgICAgICAgICAgICAgICAgb2JqZWN0LCBsb2FkQnV0
dGVyZmx5V2l0aEJhcnJpZXIob2JqZWN0KSwKICAgICAgICAgICAgICAgICBwcmV2aW91c1N0cnVj
dHVyZSwgbmV4dFN0cnVjdHVyZSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02MDUyLDYgKzYw
NTcsNjcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0K
KworICAgIExWYWx1ZSBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIoTFZhbHVlIG9iamVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBjb3B5QmFycmllcigKKyAgICAgICAgICAgIG9iamVjdCwgbV9v
dXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSwgb3BlcmF0aW9u
R2V0QnV0dGVyZmx5KTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvYWRWZWN0b3JXaXRoQmFy
cmllcihMVmFsdWUgb2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAor
ICAgICAgICAgICAgb2JqZWN0LCBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5
QnVmZmVyVmlld192ZWN0b3IpLAorICAgICAgICAgICAgb3BlcmF0aW9uR2V0QXJyYXlCdWZmZXJW
ZWN0b3IpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgY29weUJhcnJpZXIoTFZhbHVlIG9iamVj
dCwgTFZhbHVlIHBvaW50ZXIsIFBfSklUT3BlcmF0aW9uX0VDIHNsb3dQYXRoRnVuY3Rpb24pCisg
ICAgeworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgibG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJsb2FkQnV0dGVyZmx5
V2l0aEJhcnJpZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZh
c3RSZXN1bHQgPSBtX291dC5hbmNob3IocG9pbnRlcik7CisgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm9QdHIocG9pbnRlciwgbV9vdXQuY29uc3RJbnRQ
dHIoQ29weUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKSwKKyAgICAgICAgICAgIHVzdWFsbHkoY29u
dGludWF0aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKworICAgICAg
ICAvLyBXZSBoYXZlbid0IGdsdWVkIHRoaXMgc2xvdyBwYXRoIHRvIGFjdHVhbGx5IGRvIGFueXRo
aW5nIHlldC4gV2Ugd2lsbCBsYXppbHkgZ2VuZXJhdGUgY29kZSB0bworICAgICAgICAvLyBjYWxs
IHRoZSBmdW5jdGlvbi4KKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAg
ICBVTlVTRURfUEFSQU0oc2xvd1BhdGhGdW5jdGlvbik7CisgICAgICAgIAorICAgICAgICBWZWN0
b3I8TFZhbHVlPiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29u
c3RJbnQ2NChtX3N0YWNrbWFwSURzKyspKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291
dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpKTsK
KyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9vdXQucmVmOCkpOworICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoMSkpOworICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKG9iamVjdCk7CisgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291
dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgc2V0SW5z
dHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNhbGwpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQu
aW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9CisKKyAgICBMVmFsdWUgbG9h
ZEJ1dHRlcmZseVJlYWRPbmx5KExWYWx1ZSBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4g
cmVtb3ZlU3BhY2VCaXRzKG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1
dHRlcmZseSkpOworICAgIH0KKworICAgIExWYWx1ZSBsb2FkVmVjdG9yUmVhZE9ubHkoTFZhbHVl
IG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiByZW1vdmVTcGFjZUJpdHMobV9vdXQubG9h
ZFB0cihvYmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSk7CisgICAgfQor
CisgICAgTFZhbHVlIHJlbW92ZVNwYWNlQml0cyhMVmFsdWUgc3RvcmFnZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX291dC5iaXRBbmQoCisgICAgICAgICAgICBzdG9yYWdlLCBtX291dC5jb25z
dEludFB0cih+c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRz
KSkpOworICAgIH0KICAgICAKICAgICBUeXBlZFBvaW50ZXIgYmFzZUluZGV4KEluZGV4ZWRBYnN0
cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBzdG9yYWdlLCBMVmFsdWUgaW5kZXgsIEVkZ2UgZWRnZSwg
cHRyZGlmZl90IG9mZnNldCA9IDApCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw5IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKAogICAgICAgICB2bSwgbnVs
bHB0ciwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgSW5kZXhpbmdI
ZWFkZXIoKSwgMCk7CiAgICAgCi0gICAgcmV0dXJuIEpTRmluYWxPYmplY3Q6OmNyZWF0ZShleGVj
LCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgSlNPYmplY3QqIHJlc3VsdCA9IEpTRmluYWxP
YmplY3Q6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7CisgICAgcmVzdWx0LT5i
dXR0ZXJmbHkoKTsgLy8gRW5zdXJlIHRoYXQgdGhlIGJ1dHRlcmZseSBpcyBpbiB0by1zcGFjZS4K
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBleHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsNiArMzYyLDggQEAgcHVibGlj
OgogICAgIExWYWx1ZSB0ZXN0Tm9uWmVybzMyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsg
cmV0dXJuIG5vdFplcm8zMihiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogICAgIExWYWx1ZSB0ZXN0
SXNaZXJvNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gaXNaZXJvNjQoYml0
QW5kKHZhbHVlLCBtYXNrKSk7IH0KICAgICBMVmFsdWUgdGVzdE5vblplcm82NChMVmFsdWUgdmFs
dWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3RaZXJvNjQoYml0QW5kKHZhbHVlLCBtYXNrKSk7
IH0KKyAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7
IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KKyAgICBMVmFsdWUgdGVzdE5v
blplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gbm90TnVsbChiaXRB
bmQodmFsdWUsIG1hc2spKTsgfQogICAgIAogICAgIExWYWx1ZSBzZWxlY3QoTFZhbHVlIHZhbHVl
LCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikgeyByZXR1cm4gYnVpbGRTZWxlY3QobV9i
dWlsZGVyLCB2YWx1ZSwgdGFrZW4sIG5vdFRha2VuKTsgfQogICAgIExWYWx1ZSBleHRyYWN0VmFs
dWUoTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGJ1aWxkRXh0cmFjdFZh
bHVlKG1fYnVpbGRlciwgYWdnVmFsLCBpbmRleCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcHlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29weUJhcnJpZXIuaAkocmV2aXNpb24gMTkwNjAzKQkoZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3B5V3JpdGVCYXJyaWVyLmg6MTkwNjAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29weUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb3B5V3JpdGVCYXJyaWVyX2gKKyNkZWZpbmUg
Q29weVdyaXRlQmFycmllcl9oCisKKyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIENvcHlXcml0ZUJhcnJpZXIgeworcHVi
bGljOgorICAgIENvcHlXcml0ZUJhcnJpZXIoKQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIENvcHlXcml0ZUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0NlbGwq
IG93bmVyLCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldCh2bSwgb3duZXIsICZ2
YWx1ZSk7CisgICAgfQorICAgIAorICAgIENvcHlXcml0ZUJhcnJpZXIoVk0mIHZtLCBjb25zdCBK
U0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldCh2bSwgb3du
ZXIsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhbV92YWx1ZTsgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgCisgICAgVCogZ2V0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBUKiBvcGVyYXRvciooKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldCgpOworICAgIH0KKyAgICAKKyAgICBUKiBv
cGVyYXRvci0+KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXQoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzZXQoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgdm0uaGVhcC53
cml0ZUJhcnJpZXIob3duZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFdpdGhvdXRXcml0
ZUJhcnJpZXIoVCogdmFsdWUpCisgICAgeworICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7
CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFsdWUgPSAwOyB9CisKK3ByaXZh
dGU6CisgICAgVCogbV92YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gQ29weVdyaXRlQmFycmllcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3B5QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cHlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcHlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDY3ICsyMywxNTkgQEAKICAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIENvcHlXcml0ZUJh
cnJpZXJfaAotI2RlZmluZSBDb3B5V3JpdGVCYXJyaWVyX2gKKyNpZm5kZWYgQ29weUJhcnJpZXJf
aAorI2RlZmluZSBDb3B5QmFycmllcl9oCiAKICNpbmNsdWRlICJIZWFwLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIENvcHlXcml0ZUJhcnJpZXIg
eworZW51bSBjbGFzcyBDb3B5U3RhdGUgeworICAgIC8vIFRoZSBiYWNraW5nIHN0b3JlIGlzIG5v
dCBwbGFubmVkIHRvIGdldCBjb3BpZWQgaW4gdGhpcyBlcG9jaC4gSWYgeW91IGtlZXAgYSBwb2lu
dGVyIHRvIHRoZSBiYWNraW5nCisgICAgLy8gc3RvcmUgb24gdGhlIHN0YWNrLCBpdCB3aWxsIG5v
dCBnZXQgY29waWVkLiBJZiB5b3UgZG9uJ3Qga2VlcCBpdCBvbiB0aGUgc3RhY2ssIGl0IG1heSBn
ZXQgY29waWVkCisgICAgLy8gc3RhcnRpbmcgYXQgdGhlIG5leHQgaGFuZHNoYWtlICh0aGF0IGlz
LCBpdCBtYXkgdHJhbnNpdGlvbiBmcm9tIFRvU3BhY2UgdG8gQ29weVBsYW5uZWQsIGJ1dAorICAg
IC8vIENvcHlQbGFubmVkIG1lYW5zIFRvU3BhY2UgcHJpb3IgdG8gdGhlIGhhbmRzaGFrZSB0aGF0
IHN0YXJ0cyB0aGUgY29weSBwaGFzZSkuCisgICAgVG9TcGFjZSwKKworICAgIC8vIFRoZSBtYXJr
aW5nIHBoYXNlIGhhcyBzZWxlY3RlZCB0aGlzIGJhY2tpbmcgc3RvcmUgdG8gYmUgY29waWVkLiBJ
ZiB3ZSBhcmUgbm90IHlldCBpbiB0aGUgY29weWluZworICAgIC8vIHBoYXNlLCB0aGlzIGJhY2tp
bmcgc3RvcmUgaXMgc3RpbGwgaW4gdG8tc3BhY2UuIEFsbCB0aGF0IGlzIG5lZWRlZCBpbiBzdWNo
IGEgY2FzZSBpcyB0byBtYXNrIG9mZiB0aGUKKyAgICAvLyBsb3cgYml0cy4gSWYgd2UgYXJlIGlu
IHRoZSBjb3B5aW5nIHBoYXNlLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBwb2ludHMgdG8g
ZnJvbS1zcGFjZS4gVGhlCisgICAgLy8gYmFycmllciBzaG91bGQgZmlyc3QgY29weSB0aGUgb2Jq
ZWN0IC0gb3Igd2FpdCBmb3IgY29weWluZyB0byBmaW5pc2ggLSBiZWZvcmUgdXNpbmcgdGhlIG9i
amVjdC4KKyAgICBDb3B5UGxhbm5lZCwKKworICAgIC8vIFRoZSBvYmplY3QgaXMgYmVpbmcgY29w
aWVkIHJpZ2h0IG5vdy4gQW55b25lIHdhbnRpbmcgdG8gdXNlIHRoZSBvYmplY3QgbXVzdCB3YWl0
IGZvciB0aGUgb2JqZWN0IHRvCisgICAgLy8gZmluaXNoIGJlaW5nIGNvcGllZC4gTm90aWZpY2F0
aW9ucyBhYm91dCBjb3B5aW5nIHVzZSB0aGUgUGFya2luZ0xvdCBjb21iaW5lZCB3aXRoIHRoZXNl
IGJpdHMuIElmIHRoZQorICAgIC8vIHN0YXRlIGlzIENvcHlpbmdBbmRXYWl0aW5nLCB0aGVuIHdo
ZW4gdGhlIGNvcHlpbmcgZmluaXNoZXMsIHdoYXRldmVyIHRocmVhZCB3YXMgZG9pbmcgaXQgd2ls
bAorICAgIC8vIHVucGFya0FsbCgpIG9uIHRoZSBhZGRyZXNzIG9mIHRoZSBDb3B5QmFycmllckJh
c2UuIFNvLCB0byB3YWl0IGZvciBjb3B5aW5nIHRvIGZpbmlzaCwgQ0FTIHRoaXMgdG8KKyAgICAv
LyBDb3B5aW5nQW5kV2FpdGluZyBhbmQgdGhlbiBwYXJrQ29uZGl0aW9uYWxseSBvbiB0aGUgYmFy
cmllciBhZGRyZXNzLgorICAgIENvcHlpbmcsCisKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGJlaW5n
IGNvcGllZCByaWdodCBub3csIGFuZCB0aGVyZSBhcmUgb25lIG9yIG1vcmUgdGhyZWFkcyBwYXJr
ZWQuIFRob3NlIHRocmVhZHMgd2FudAorICAgIC8vIHRvIGJlIHVucGFya2VkIHdoZW4gY29weWlu
ZyBpcyBkb25lLiBTbywgd2hpY2hldmVyIHRocmVhZCBkb2VzIHRoZSBjb3B5aW5nIG5lZWRzIHRv
IGNhbGwgdW5wYXJrQWxsKCkKKyAgICAvLyBvbiB0aGUgYmFycmllciBhZGRyZXNzIGFmdGVyIGNv
cHlpbmcgaXMgZG9uZS4KKyAgICBDb3B5aW5nQW5kV2FpdGluZworfTsKKworY2xhc3MgQ29weUJh
cnJpZXJCYXNlIHsKIHB1YmxpYzoKLSAgICBDb3B5V3JpdGVCYXJyaWVyKCkKLSAgICAgICAgOiBt
X3ZhbHVlKDApCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNwYWNlQml0cyA9IDM7CisKKyAg
ICBDb3B5QmFycmllckJhc2UoKQorICAgICAgICA6IG1fdmFsdWUobnVsbHB0cikKICAgICB7CiAg
ICAgfQogICAgIAotICAgIENvcHlXcml0ZUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93
bmVyLCBUJiB2YWx1ZSkKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3Zh
bHVlOyB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWU7IH0KKworICAgIHZvaWQqIGdldFdpdGhvdXRCYXJyaWVyKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHRoaXMtPnNldCh2bSwgb3duZXIsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBt
X3ZhbHVlOwogICAgIH0KLSAgICAKLSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3Qg
SlNDZWxsKiBvd25lciwgVCogdmFsdWUpCisKKyAgICAvLyBXaGVuIHdlIGFyZSBpbiB0aGUgY29u
Y3VycmVudCBjb3B5aW5nIHBoYXNlLCB0aGlzIG1ldGhvZCBtYXkgbG9jayB0aGUgYmFycmllciBv
YmplY3QgKGkuZS4gdGhlIGZpZWxkCisgICAgLy8gcG9pbnRpbmcgdG8gY29waWVkIHNwYWNlKSBh
bmQgY2FsbCBkaXJlY3RseSBpbnRvIHRoZSBvd25pbmcgb2JqZWN0J3MgY29weUJhY2tpbmdTdG9y
ZSgpIG1ldGhvZC4KKyAgICB2b2lkKiBnZXQoY29uc3QgSlNDZWxsKiBvd25lcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IG1fdmFsdWU7CisgICAgICAgIGlmIChVTkxJS0VM
WShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihyZXN1bHQpICYgc3BhY2VCaXRzKSkKKyAgICAgICAg
ICAgIHJldHVybiBIZWFwOjpjb3B5QmFycmllcihvd25lciwgbV92YWx1ZSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQ29weVN0YXRlIGNvcHlTdGF0ZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29weVN0YXRlPihiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihtX3ZhbHVlKSAmIHNwYWNlQml0cyk7CisgICAgfQorCisgICAgLy8gVGhpcyBv
bmx5IHdvcmtzIHdoZW4geW91IGtub3cgdGhhdCB0aGVyZSBpcyBub2JvZHkgZWxzZSBjb25jdXJy
ZW50bHkgbWVzc2luZyB3aXRoIHRoaXMgQ29weUJhcnJpZXIuCisgICAgLy8gVGhhdCdzIGhhcmQg
dG8gZ3VhcmFudGVlLCB0aG91Z2ggdGhlcmUgYXJlIGEgZmV3IHVudXN1YWwgcGxhY2VzIHdoZXJl
IHRoaXMgZW5kcyB1cCBiZWluZyBzYWZlLgorICAgIC8vIFVzdWFsbHkgeW91IHdhbnQgdG8gdXNl
IENvcHlCYXJyaWVyOjp3ZWFrQ0FTKCkuCisgICAgdm9pZCBzZXRDb3B5U3RhdGUoQ29weVN0YXRl
IGNvcHlTdGF0ZSkKKyAgICB7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAg
ICAgIHVpbnRwdHJfdCB2YWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fdmFsdWUpOwor
ICAgICAgICB2YWx1ZSAmPSB+c3RhdGljX2Nhc3Q8dWludHB0cl90PihzcGFjZUJpdHMpOworICAg
ICAgICB2YWx1ZSB8PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGNvcHlTdGF0ZSk7CisgICAgICAg
IG1fdmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lk
IGNsZWFyKCkgeyBtX3ZhbHVlID0gbnVsbHB0cjsgfQorCitwcm90ZWN0ZWQ6CisgICAgQ29weUJh
cnJpZXJCYXNlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgdm9pZCogdmFsdWUpCiAgICAg
ewogICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CiAgICAgfQogICAgIAotICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KKyAgICB2b2lkIHNl
dChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihv
d25lcik7CisgICAgfQogICAgIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisgICAgdm9pZCBzZXRXaXRob3V0QmFycmllcih2b2lkKiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKKyAgICBi
b29sIHdlYWtDQVNXaXRob3V0QmFycmllcigKKyAgICAgICAgdm9pZCogb2xkUG9pbnRlciwgQ29w
eVN0YXRlIG9sZENvcHlTdGF0ZSwgdm9pZCogbmV3UG9pbnRlciwgQ29weVN0YXRlIG5ld0NvcHlT
dGF0ZSkKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBvbGRWYWx1ZSA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KG9sZFBvaW50ZXIpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihvbGRDb3B5U3Rh
dGUpOworICAgICAgICB1aW50cHRyX3QgbmV3VmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihuZXdQb2ludGVyKSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obmV3Q29weVN0YXRlKTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKAorICAgICAgICAgICAgJm1fdmFs
dWUsIGJpdHdpc2VfY2FzdDx2b2lkKj4ob2xkVmFsdWUpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG5l
d1ZhbHVlKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIG11dGFibGUgdm9pZCogbV92YWx1ZTsK
K307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgQ29weUJhcnJpZXIgOiBwdWJsaWMg
Q29weUJhcnJpZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBDb3B5QmFycmllcigpCisgICAgeworICAg
IH0KICAgICAKLSAgICBUKiBnZXQoKSBjb25zdAorICAgIENvcHlCYXJyaWVyKFZNJiB2bSwgY29u
c3QgSlNDZWxsKiBvd25lciwgVCYgdmFsdWUpCisgICAgICAgIDogQ29weUJhcnJpZXJCYXNlKHZt
LCBvd25lciwgJnZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgfQog
ICAgIAotICAgIFQqIG9wZXJhdG9yKigpIGNvbnN0CisgICAgQ29weUJhcnJpZXIoVk0mIHZtLCBj
b25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKKyAgICAgICAgOiBDb3B5QmFycmllckJhc2Uo
dm0sIG93bmVyLCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBnZXQoKTsKKyAgICB9CisK
KyAgICBUKiBnZXRXaXRob3V0QmFycmllcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PFQqPihDb3B5QmFycmllckJhc2U6OmdldFdpdGhvdXRCYXJyaWVyKCkpOwog
ICAgIH0KICAgICAKLSAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QKKyAgICBUKiBnZXQoY29uc3Qg
SlNDZWxsKiBvd25lcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBnZXQoKTsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4oQ29weUJhcnJpZXJCYXNlOjpnZXQob3duZXIpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXQoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBU
KiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKLSAgICAgICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOworICAgICAgICBDb3B5QmFycmllckJhc2U6OnNl
dCh2bSwgb3duZXIsIHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKFQqIHZhbHVlKQorICAgIHZvaWQgc2V0V2l0aG91dEJhcnJpZXIoVCogdmFsdWUp
CiAgICAgewotICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIENvcHlCYXJy
aWVyQmFzZTo6c2V0V2l0aG91dEJhcnJpZXIodmFsdWUpOwogICAgIH0KLSAgICAKLSAgICB2b2lk
IGNsZWFyKCkgeyBtX3ZhbHVlID0gMDsgfQogCi1wcml2YXRlOgotICAgIFQqIG1fdmFsdWU7Cisg
ICAgYm9vbCB3ZWFrQ0FTV2l0aG91dEJhcnJpZXIoVCogb2xkUG9pbnRlciwgQ29weVN0YXRlIG9s
ZENvcHlTdGF0ZSwgVCogbmV3UG9pbnRlciwgQ29weVN0YXRlIG5ld0NvcHlTdGF0ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBDb3B5QmFycmllckJhc2U6OndlYWtDQVNXaXRob3V0QmFycmllcihv
bGRQb2ludGVyLCBvbGRDb3B5U3RhdGUsIG5ld1BvaW50ZXIsIG5ld0NvcHlTdGF0ZSk7CisgICAg
fQogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZiAvLyBDb3B5V3JpdGVCYXJyaWVy
X2gKKyNlbmRpZiAvLyBDb3B5QmFycmllcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3B5VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTkwNjgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDYgKzM2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBib29sIENvcHlW
aXNpdG9yOjpjaGVja0lmU2hvdWxkQ29weSh2b2lkKiBvbGRQdHIpCiB7CisgICAgaWYgKCFvbGRQ
dHIpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3Bp
ZWRTcGFjZTo6YmxvY2tGb3Iob2xkUHRyKTsKICAgICBpZiAoYmxvY2stPmlzT3ZlcnNpemUoKSB8
fCBibG9jay0+aXNQaW5uZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVdyaXRlQmFycmllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlXcml0ZUJhcnJpZXIuaAkocmV2aXNpb24gMTkw
NjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVdyaXRlQmFycmllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvcHlX
cml0ZUJhcnJpZXJfaAotI2RlZmluZSBDb3B5V3JpdGVCYXJyaWVyX2gKLQotI2luY2x1ZGUgIkhl
YXAuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3Mg
Q29weVdyaXRlQmFycmllciB7Ci1wdWJsaWM6Ci0gICAgQ29weVdyaXRlQmFycmllcigpCi0gICAg
ICAgIDogbV92YWx1ZSgwKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ29weVdyaXRlQmFycmll
cihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
dGhpcy0+c2V0KHZtLCBvd25lciwgJnZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgQ29weVdyaXRl
QmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwgdmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBib29s
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9Ci0gICAgCi0gICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICAKLSAgICBU
KiBnZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgfQotICAg
IAotICAgIFQqIG9wZXJhdG9yKigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0KCk7
Ci0gICAgfQotICAgIAotICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGdldCgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpT
Q2VsbCogb3duZXIsIFQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZh
bHVlOwotICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgc2V0V2l0aG91dFdyaXRlQmFycmllcihUKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHRoaXMtPm1fdmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhcigpIHsg
bV92YWx1ZSA9IDA7IH0KLQotcHJpdmF0ZToKLSAgICBUKiBtX3ZhbHVlOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBDb3B5V3JpdGVCYXJyaWVyX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMCw2ICsxMDEw
LDEyIEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKICAgICBtX3Ns
b3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwog
fQogCit2b2lkKiBIZWFwOjpjb3B5QmFycmllcihjb25zdCBKU0NlbGwqLCB2b2lkKiYgcG9pbnRl
cikKK3sKKyAgICAvLyBEbyBub3RoaW5nIGZvciBub3cuCisgICAgcmV0dXJuIHBvaW50ZXI7Cit9
CisKIHZvaWQgSGVhcDo6Y29sbGVjdEFuZFN3ZWVwKEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5
cGUpCiB7CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKICAgICB2b2lkIHdy
aXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0NlbGwqKTsKIAorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkKiBjb3B5QmFycmllcihjb25zdCBKU0NlbGwqIG93bmVyLCB2b2lkKiYg
Y29waWVkU3BhY2VQb2ludGVyKTsKKwogICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJy
aWVyQnVmZmVyKCkgeyByZXR1cm4gbV93cml0ZUJhcnJpZXJCdWZmZXI7IH0KICAgICB2b2lkIGZs
dXNoV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpZm5kZWYgSGVhcElubGluZXNfaAogI2RlZmluZSBIZWFwSW5saW5lc19oCiAKKyNp
bmNsdWRlICJDb3B5QmFycmllci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKU0Nl
bGwuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJDb3B5QmFycmllci5oIgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJH
UFJJbmZvLmgiCiAjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgiCkBAIC03NTQsNiArNzU1LDE2
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kaXRpb24sIGxlZnRIYW5k
U2lkZSwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKICNlbmRpZgogICAgIH0KKworICAgIEp1
bXAgYnJhbmNoSWZOb3RUb1NwYWNlKEdQUlJlZyBzdG9yYWdlR1BSKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaFRlc3QzMihOb25aZXJvLCBzdG9yYWdlR1BSLCBUcnVzdGVkSW1tMzIoQ29w
eUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZVNwYWNl
Qml0cyhHUFJSZWcgc3RvcmFnZUdQUikKKyAgICB7CisgICAgICAgIGFuZFB0cihUcnVzdGVkSW1t
UHRyKH5zdGF0aWNfY2FzdDx1aW50cHRyX3Q+KENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRzKSks
IHN0b3JhZ2VHUFIpOworICAgIH0KICAgICAKICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9y
Qnl0ZU9mZnNldChwdHJkaWZmX3QgYnl0ZU9mZnNldCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsOCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIAogICAgICAgICBpZiAoT3B0aW9u
czo6ZWFnZXJseVVwZGF0ZVRvcENhbGxGcmFtZSgpKQogICAgICAgICAgICAgdXBkYXRlVG9wQ2Fs
bEZyYW1lKCk7CisKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
T2Zmc2V0OwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgICAgICBE
RUZJTkVfU0xPV19PUChkZWxfYnlfdmFsKQpAQCAtMzE0LDYgKzMxNiw5IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoZmFs
c2UpCisgICAgICAgICAgICBkYXRhTG9nKCJBdCAiLCBieXRlY29kZU9mZnNldCwgIjogIiwgbV9z
bG93Q2FzZXMuc2l6ZSgpLCAiXG4iKTsKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVChtX2Nh
bGxMaW5rSW5mb0luZGV4ID09IG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkpOwpAQCAtNDMz
LDYgKzQzOCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAKKyAgICAgICAg
aWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZygiQXQgIiwgZmlyc3RUbywgIiBzbG93OiAi
LCBpdGVyIC0gbV9zbG93Q2FzZXMuYmVnaW4oKSwgIlxuIik7CisKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfV0lUSF9NRVNTQUdFKGl0ZXIgPT0gbV9zbG93Q2FzZXMuZW5kKCkgfHwgZmlyc3RUbyAh
PSBpdGVyLT50bywgIk5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2Vu
LiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZmlyc3RUbyA9PSAoaXRl
ciAtIDEpLT50bywgIlRvbyBtYW55IGp1bXBzIGxpbmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4i
KTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNzQsNiArMTE3NCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoSW5zdHIKICAgICAvLyBPdGhl
cndpc2UgaXQncyBvdXQgb2YgbGluZQogICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VG9TcGFjZShyZWdUMCkpOwogICAg
IHN1YjMyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBuZWczMihyZWdUMik7CiAgICAgaW50
MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJ
bkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsKQEAgLTExOTAsNiArMTE5MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZGlyZWN0
X3BuYW1lKEkKICAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7CiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X2Rp
cmVjdF9wbmFtZSk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1
Myw2ICsxMTUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Blcgog
ICAgIAogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNl
bGwgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKKyAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHJlYWQgYmFycmllcgogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gdmVjdG9yIGxlbmd0aCBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
ZW1wdHkgdmFsdWUKICAgICAKQEAgLTExOTYsNiArMTE5Nyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9kaXJlY3RfcG5hbWUoSW5zdHIKICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGlu
ZQogICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90VG9TcGFjZShyZWdUMCkpOwogICAgIHN1YjMyKEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSks
IHJlZ1QxKTsKICAgICBuZWczMihyZWdUMSk7CiAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKQEAgLTEyMTIsNiArMTIxNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
ZGlyZWN0X3BuYW1lKEkKICAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7CiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
Z2V0X2RpcmVjdF9wbmFtZSk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lv
biAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDYgKzE2NSw3IEBAIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0RG91YmxlTG9hZChJbnN0cnUKICAgICAKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoRG91YmxlU2hhcGUpKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qy
KTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90VG9TcGFjZShyZWdUMikpOwogICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwogICAgIGxvYWREb3Vi
bGUoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCksIGZwUmVnVDApOwogICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoRG91YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZw
UmVnVDAsIGZwUmVnVDApKTsKQEAgLTE3OCw2ICsxNzksNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdENvbnRpZ3VvdXNMb2FkKEluCiAgICAgCiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGV4cGVjdGVkU2hhcGUpKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qy
KTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90VG9TcGFjZShyZWdUMikpOwogICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwogICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwogICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1QwKSk7CkBAIC0xOTMsNiArMTk1LDcgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VMb2FkKAogICAgIGJhZFR5cGUgPSBw
YXRjaGFibGVCcmFuY2gzMihBYm92ZSwgcmVnVDMsIFRydXN0ZWRJbW0zMihTbG93UHV0QXJyYXlT
dG9yYWdlU2hhcGUgLSBBcnJheVN0b3JhZ2VTaGFwZSkpOwogCiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2UocmVnVDIpKTsKICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJl
Z1QwKTsKQEAgLTI1MSw2ICsyNTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChJbnN0cnVjCiAgICAgbm90U3RyaW5nLmxpbmsodGhpcyk7CiAgICAgbm9uQ2VsbC5saW5rKHRo
aXMpOwogICAgIAorICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcmVhZCBiYXJyaWVyCiAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQogICAgIApAQCAtMzIzLDYgKzMyNyw3IEBAIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXMKICAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXhpbmdTaGFwZSkp
OwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNl
KHJlZ1QyKSk7CiAgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOwpAQCAtMzc4LDYgKzM4Myw3IEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnkKICAgICAKICAgICBiYWRU
eXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJy
YXlTdG9yYWdlU2hhcGUpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElm
Tm90VG9TcGFjZShyZWdUMikpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKIAogICAgIEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0NjQoWmVybywgQmFzZUlu
ZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pKSk7CkBAIC00NDgsOCArNDU0LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcHJvcGVy
dHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2Ugbm90IGFycmF5
IGNoZWNrCiAgICAgCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyByZWFkIGJhcnJpZXIKICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIG91dCBvZiBib3VuZHMKLQorICAgIAogICAgIEpJVEFy
cmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwogICAgIHN3aXRjaCAobW9k
ZSkgewogICAgIGNhc2UgSklUSW50MzI6CkBAIC03ODAsNiArNzg3LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zdHJ1YwogICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5l
LmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
YmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaCkpOwogICAgICAgICAgICAg
bmVnMzIob2Zmc2V0KTsKICAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zm
c2V0KTsKICAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCByZXN1bHQpOwpAQCAtODU5LDggKzg2NywxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoSW5zCiAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHkgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Cisg
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIGJhZCBzdHJ1Y3R1cmUKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyByZWFkIGJhcnJpZXIKKyAgICB9CiAKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFZhciBpbmplY3Rpb25zIGNoZWNrLgog
ICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CkBAIC04NjksNiArODc5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKElucwogICAgICAgICAvLyBHbG9iYWxQcm9wZXJ0
eS9HbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjawogICAgICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrCisgICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gcmVhZCBiYXJyaWVyCiAgICAgICAgIC8vIEdsb2JhbExleGljYWxW
YXIKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBURFogY2hlY2suCiAgICAgICAgIC8v
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLgpAQCAtOTIyLDYgKzkzMyw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFRvU3BhY2Uo
cmVnVDApKTsKICAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKICAgICAg
ICAgICAgIG5lZ1B0cihyZWdUMSk7CiAgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CkBAIC0xMDE1LDE0ICsxMDI3LDE3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoSW5zdHIKICAgICAgICAgIHx8IHJlc29sdmVU
eXBlID09IExvY2FsQ2xvc3VyZVZhcikKICAgICAgICAgJiYgY3VycmVudEluc3RydWN0aW9uWzVd
LnUud2F0Y2hwb2ludFNldC0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKQogICAgICAgICBsaW5r
Q291bnQrKzsKLSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHkgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBs
aW5rQ291bnQrKzsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHkgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAg
ICAgIGxpbmtDb3VudCsrOyAvLyBiYWQgc3RydWN0dXJlCisgICAgICAgIGxpbmtDb3VudCsrOyAv
LyByZWFkIGJhcnJpZXIKKyAgICB9CiAgICAgaWYgKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25N
b2RlKCkgIT0gSW5pdGlhbGl6YXRpb24gJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKSAvLyBURFogY2hlY2suCiAgICAgICAgIGxpbmtDb3VudCsrOwogICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBVbnJlc29sdmVkUHJvcGVydHkgfHwgcmVzb2x2ZVR5cGUgPT0gVW5yZXNvbHZlZFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICAvLyBHbG9iYWxQcm9wZXJ0
eS9HbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zQ2hlY2sKICAgICAgICAgbGlua0NvdW50
Kys7IC8vIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrCiAgICAgICAgIGxpbmtDb3VudCsrOyAv
LyBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjaworICAgICAgICBsaW5rQ291bnQrKzsgLy8gcmVh
ZCBiYXJyaWVyCiAKICAgICAgICAgLy8gR2xvYmFsTGV4aWNhbFZhcgogICAgICAgICBib29sIG5l
ZWRzVERaQ2hlY2sgPSBnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpICE9IEluaXRpYWxp
emF0aW9uOwpAQCAtMTQ0MCwyMyArMTQ1NSwyNCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlHZXRCCiAgICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMy
KE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5
cGUpKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZW
ZWN0b3IoKSksIGJhc2UpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVy
Vmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2gpKTsKICAgICAKICAgICBzd2l0Y2ggKGVsZW1lbnRT
aXplKHR5cGUpKSB7CiAgICAgY2FzZSAxOgogICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCi0g
ICAgICAgICAgICBsb2FkOFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5
LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQpOworICAgICAgICAgICAgbG9hZDhTaWduZWRFeHRl
bmRUbzMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1bHRQYXls
b2FkKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGJhc2UsIHBy
b3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQpOworICAgICAgICAgICAgbG9hZDgoQmFz
ZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIDI6CiAgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKLSAg
ICAgICAgICAgIGxvYWQxNlNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5
LCBUaW1lc1R3byksIHJlc3VsdFBheWxvYWQpOworICAgICAgICAgICAgbG9hZDE2U2lnbmVkRXh0
ZW5kVG8zMihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5
bG9hZCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoYmFzZSwg
cHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAgICAgICBsb2FkMTYo
QmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxvYWQpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIDQ6Ci0gICAgICAgIGxvYWQzMihCYXNlSW5kZXgoYmFz
ZSwgcHJvcGVydHksIFRpbWVzRm91ciksIHJlc3VsdFBheWxvYWQpOworICAgICAgICBsb2FkMzIo
QmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCByZXN1bHRQYXlsb2FkKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKQEAgLTE1MTEs
MTUgKzE1MjcsMTYgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZQog
ICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNj
cmF0Y2gpOwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRj
aCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwogICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNl
LCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBiYXNlKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVj
dG9yKCkpLCBzY3JhdGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90VG9TcGFj
ZShzY3JhdGNoKSk7CiAgICAgCiAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAg
IGNhc2UgNDoKLSAgICAgICAgbG9hZEZsb2F0KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGlt
ZXNGb3VyKSwgZnBSZWdUMCk7CisgICAgICAgIGxvYWRGbG9hdChCYXNlSW5kZXgoc2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzRm91ciksIGZwUmVnVDApOwogICAgICAgICBjb252ZXJ0RmxvYXRUb0Rv
dWJsZShmcFJlZ1QwLCBmcFJlZ1QwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA4OiB7Ci0g
ICAgICAgIGxvYWREb3VibGUoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc0VpZ2h0KSwg
ZnBSZWdUMCk7CisgICAgICAgIGxvYWREb3VibGUoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5
LCBUaW1lc0VpZ2h0KSwgZnBSZWdUMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZh
dWx0OgpAQCAtMTU3OSw2ICsxNTk2LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBl
ZEFycmF5UHV0QgogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMg
aW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMg
dGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKGxhdGVTY3JhdGNoKSk7CiAgICAgCiAg
ICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgewogICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlw
ZSkgPT0gMSk7CkBAIC0xNjY0LDYgKzE2ODIsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZs
b2F0VHlwZWRBcnJheVB1CiAgICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFz
ZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwogICAgIC8vIHBhdGggZXhw
ZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2UobGF0ZVNjcmF0Y2gpKTsKICAg
ICAKICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20JKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg4LDkgKzEx
ODgsMTAgQEAgX2xsaW50X29wX2lzX29iamVjdDoKICAgICBkaXNwYXRjaCgzKQogCiAKLW1hY3Jv
IGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0
QW5kU3RvcmFnZSwgdmFsdWUpCittYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHBy
b3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlLCBzbG93KQogICAgIGJp
bHQgcHJvcGVydHlPZmZzZXRBc0ludCwgZmlyc3RPdXRPZkxpbmVPZmZzZXQsIC5pc0lubGluZQog
ICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0
QW5kU3RvcmFnZQorICAgIGNvcHlCYXJyaWVyKG9iamVjdEFuZFN0b3JhZ2UsIHNsb3cpCiAgICAg
bmVnaSBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgc3hpMnEgcHJvcGVydHlPZmZzZXRBc0ludCwg
cHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVhZHkKQEAgLTEyMDEsOSArMTIwMiwxMCBA
QCBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlCiBlbmQKIAogCi1tYWNy
byBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldEFzSW50LCBvYmpl
Y3RBbmRTdG9yYWdlLCB2YWx1ZSkKK21hY3JvIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0
KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlLCBzbG93KQogICAg
IGJpbHQgcHJvcGVydHlPZmZzZXRBc0ludCwgZmlyc3RPdXRPZkxpbmVPZmZzZXQsIC5pc0lubGlu
ZQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2Jq
ZWN0QW5kU3RvcmFnZQorICAgIGNvcHlCYXJyaWVyKG9iamVjdEFuZFN0b3JhZ2UsIHNsb3cpCiAg
ICAgbmVnaSBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgc3hpMnEgcHJvcGVydHlPZmZzZXRBc0lu
dCwgcHJvcGVydHlPZmZzZXRBc0ludAogICAgIGptcCAucmVhZHkKQEAgLTEyMjIsNyArMTIyNCw3
IEBAIF9sbGludF9vcF9nZXRfYnlfaWQ6CiAgICAgYmluZXEgdDIsIHQxLCAub3BHZXRCeUlkU2xv
dwogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig1LCB0MSkKICAgICBsb2FkaXNGcm9tSW5zdHJ1
Y3Rpb24oMSwgdDIpCi0gICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQw
KQorICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQzLCB0MCwgLm9wR2V0QnlJ
ZFNsb3cpCiAgICAgc3RvcmVxIHQwLCBbY2ZyLCB0MiwgOF0KICAgICB2YWx1ZVByb2ZpbGUodDAs
IDgsIHQxKQogICAgIGRpc3BhdGNoKDkpCkBAIC0xMjQzLDYgKzEyNDUsNyBAQCBfbGxpbnRfb3Bf
Z2V0X2FycmF5X2xlbmd0aDoKICAgICBidGl6IHQyLCBJbmRleGluZ1NoYXBlTWFzaywgLm9wR2V0
QXJyYXlMZW5ndGhTbG93CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQogICAgIGxv
YWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQwCisgICAgY29weUJhcnJpZXIodDAsIC5v
cEdldEFycmF5TGVuZ3RoU2xvdykKICAgICBsb2FkaSAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDBdLCB0MAogICAgIGJpbHQg
dDAsIDAsIC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIG9ycSB0YWdUeXBlTnVtYmVyLCB0MApA
QCAtMTM4Miw3ICsxMzg1LDcgQEAgX2xsaW50X29wX3B1dF9ieV9pZDoKICAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oMywgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIpCiAg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDUsIHQxKQotICAgIHN0b3JlUHJvcGVydHlBdFZhcmlh
YmxlT2Zmc2V0KHQxLCB0MCwgdDIpCisgICAgc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQo
dDEsIHQwLCB0MiwgLm9wUHV0QnlJZFNsb3cpCiAgICAgZGlzcGF0Y2goOSkKIAogLm9wUHV0QnlJ
ZFNsb3c6CkBAIC0xNDAxLDYgKzE0MDQsNyBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIodDMsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAgICAg
c3hpMnEgdDEsIHQxCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QwXSwgdDMKKyAg
ICBjb3B5QmFycmllcih0MywgLm9wR2V0QnlWYWxTbG93KQogICAgIGFuZGkgSW5kZXhpbmdTaGFw
ZU1hc2ssIHQyCiAgICAgYmllcSB0MiwgSW50MzJTaGFwZSwgLm9wR2V0QnlWYWxJc0NvbnRpZ3Vv
dXMKICAgICBiaW5lcSB0MiwgQ29udGlndW91c1NoYXBlLCAub3BHZXRCeVZhbE5vdENvbnRpZ3Vv
dXMKQEAgLTE0NzEsNiArMTQ3NSw3IEBAIG1hY3JvIHB1dEJ5VmFsKHNsb3dQYXRoKQogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGVJbnQzMih0MCwgdDMsIC5vcFB1dEJ5VmFsU2xvdykKICAgICBz
eGkycSB0MywgdDMKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDFdLCB0MAorICAg
IGNvcHlCYXJyaWVyKHQwLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgYW5kaSBJbmRleGluZ1NoYXBl
TWFzaywgdDIKICAgICBiaW5lcSB0MiwgSW50MzJTaGFwZSwgLm9wUHV0QnlWYWxOb3RJbnQzMgog
ICAgIGNvbnRpZ3VvdXNQdXRCeVZhbCgKQEAgLTE5OTEsOSArMTk5Niw5IEBAIG1hY3JvIGxvYWRX
aXRoU3RydWN0dXJlQ2hlY2sob3BlcmFuZCwgc2wKICAgICBicG5lcSB0MiwgdDEsIHNsb3dQYXRo
CiBlbmQKIAotbWFjcm8gZ2V0UHJvcGVydHkoKQorbWFjcm8gZ2V0UHJvcGVydHkoc2xvdykKICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCi0gICAgbG9hZFByb3BlcnR5QXRWYXJpYWJs
ZU9mZnNldCh0MSwgdDAsIHQyKQorICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEs
IHQwLCB0Miwgc2xvdykKICAgICB2YWx1ZVByb2ZpbGUodDIsIDcsIHQwKQogICAgIGxvYWRpc0Zy
b21JbnN0cnVjdGlvbigxLCB0MCkKICAgICBzdG9yZXEgdDIsIFtjZnIsIHQwLCA4XQpAQCAtMjAy
NCw3ICsyMDI5LDcgQEAgX2xsaW50X29wX2dldF9mcm9tX3Njb3BlOgogI2dHbG9iYWxQcm9wZXJ0
eToKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHksIC5nR2xvYmFsVmFyCiAgICAgbG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjaygyLCAuZ0R5bmFtaWMpCi0gICAgZ2V0UHJvcGVydHkoKQorICAgIGdl
dFByb3BlcnR5KC5nRHluYW1pYykKICAgICBkaXNwYXRjaCg4KQogCiAuZ0dsb2JhbFZhcjoKQEAg
LTIwNDksNyArMjA1NCw3IEBAIF9sbGludF9vcF9nZXRfZnJvbV9zY29wZToKIC5nR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5nR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cwogICAgIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2soMiwgLmdEeW5hbWljKQotICAgIGdldFByb3Bl
cnR5KCkKKyAgICBnZXRQcm9wZXJ0eSguZ0R5bmFtaWMpCiAgICAgZGlzcGF0Y2goOCkKIAogLmdH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgpAQCAtMjA3OSwxMSArMjA4NCwxMSBAQCBf
bGxpbnRfb3BfZ2V0X2Zyb21fc2NvcGU6CiAgICAgZGlzcGF0Y2goOCkKIAogCi1tYWNybyBwdXRQ
cm9wZXJ0eSgpCittYWNybyBwdXRQcm9wZXJ0eShzbG93KQogICAgIGxvYWRpc0Zyb21JbnN0cnVj
dGlvbigzLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikKICAgICBsb2Fk
aXNGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCi0gICAgc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZz
ZXQodDEsIHQwLCB0MikKKyAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAs
IHQyLCBzbG93KQogZW5kCiAKIG1hY3JvIHB1dEdsb2JhbFZhcmlhYmxlKCkKQEAgLTIxNDEsNyAr
MjE0Niw3IEBAIF9sbGludF9vcF9wdXRfdG9fc2NvcGU6CiAgICAgYmluZXEgdDAsIEdsb2JhbFBy
b3BlcnR5LCAucEdsb2JhbFZhcgogICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoMSwgMykKICAg
ICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKDEsIC5wRHluYW1pYykKLSAgICBwdXRQcm9wZXJ0eSgp
CisgICAgcHV0UHJvcGVydHkoLnBEeW5hbWljKQogICAgIGRpc3BhdGNoKDcpCiAKIC5wR2xvYmFs
VmFyOgpAQCAtMjE2OCw3ICsyMTczLDcgQEAgX2xsaW50X29wX3B1dF90b19zY29wZToKICAgICBi
aW5lcSB0MCwgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAucEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKDEsIDMp
CiAgICAgbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjaygxLCAucER5bmFtaWMpCi0gICAgcHV0UHJvcGVy
dHkoKQorICAgIHB1dFByb3BlcnR5KC5wRHluYW1pYykKICAgICBkaXNwYXRjaCg3KQogCiAucEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxOTA2
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTIyMCw2ICsyMjAsOCBAQCBjb25zdCBQdXRCeUlkU2Vjb25k
YXJ5VHlwZU9iamVjdCA9IDB4MzAKIGNvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0T3JP
dGhlciA9IDB4MzgKIGNvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlVG9wID0gMHg0MAogCitjb25z
dCBDb3B5QmFycmllclNwYWNlQml0cyA9IDMKKwogY29uc3QgQ2FsbE9wQ29kZVNpemUgPSA5CiAK
IGlmIFg4Nl82NCBvciBBUk02NCBvciBDX0xPT1AKQEAgLTY2NCw2ICs2NjYsMTAgQEAgbWFjcm8g
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKGRlcwogICAgIGVuZAogZW5kCiAKK21hY3Jv
IGNvcHlCYXJyaWVyKHZhbHVlLCBzbG93KQorICAgIGJ0cG56IHZhbHVlLCBDb3B5QmFycmllclNw
YWNlQml0cywgc2xvdworZW5kCisKIG1hY3JvIGZ1bmN0aW9uUHJvbG9ndWUoKQogICAgIGlmIFg4
NiBvciBYODZfV0lOIG9yIFg4Nl82NCBvciBYODZfNjRfV0lOCiAgICAgICAgIHB1c2ggY2ZyCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RpcmVjdEFyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgdm9p
ZCBEaXJlY3RBcmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4oSlNDZQogICAgIGlmICh0aGlzT2JqZWN0
LT5tX292ZXJyaWRlcykgewogICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcigKICAgICAgICAgICAg
IHRoaXNPYmplY3QsIERpcmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbiwKLSAgICAgICAg
ICAgIHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzLmdldCgpLCB0aGlzT2JqZWN0LT5vdmVycmlkZXNT
aXplKCkpOworICAgICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0V2l0aG91dEJh
cnJpZXIoKSwgdGhpc09iamVjdC0+b3ZlcnJpZGVzU2l6ZSgpKTsKICAgICB9CiB9CiAKQEAgLTEw
OCwxNCArMTA4LDExIEBAIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKEoK
ICAgICAKICAgICBSRUxFQVNFX0FTU0VSVCh0b2tlbiA9PSBEaXJlY3RBcmd1bWVudHNPdmVycmlk
ZXNDb3B5VG9rZW4pOwogICAgIAotICAgIGJvb2wqIG9sZE92ZXJyaWRlcyA9IHRoaXNPYmplY3Qt
Pm1fb3ZlcnJpZGVzLmdldCgpOwotICAgIGlmICghb2xkT3ZlcnJpZGVzKQotICAgICAgICByZXR1
cm47Ci0gICAgCisgICAgdm9pZCogb2xkT3ZlcnJpZGVzID0gdGhpc09iamVjdC0+bV9vdmVycmlk
ZXMuZ2V0V2l0aG91dEJhcnJpZXIoKTsKICAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29w
eShvbGRPdmVycmlkZXMpKSB7CiAgICAgICAgIGJvb2wqIG5ld092ZXJyaWRlcyA9IHN0YXRpY19j
YXN0PGJvb2wqPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodGhpc09iamVjdC0+b3ZlcnJpZGVz
U2l6ZSgpKSk7CiAgICAgICAgIG1lbWNweShuZXdPdmVycmlkZXMsIG9sZE92ZXJyaWRlcywgdGhp
c09iamVjdC0+bV9sZW5ndGgpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKG5ld092ZXJyaWRlcyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1f
b3ZlcnJpZGVzLnNldFdpdGhvdXRCYXJyaWVyKG5ld092ZXJyaWRlcyk7CiAgICAgICAgIHZpc2l0
b3IuZGlkQ29weShvbGRPdmVycmlkZXMsIHRoaXNPYmplY3QtPm92ZXJyaWRlc1NpemUoKSk7CiAg
ICAgfQogfQpAQCAtMTM1LDkgKzEzMiwxMCBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJp
ZGVUaGluZ3MoVk0mCiAgICAgCiAgICAgdm9pZCogYmFja2luZ1N0b3JlOwogICAgIFJFTEVBU0Vf
QVNTRVJUKHZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIG92ZXJyaWRlc1NpemUoKSwg
JmJhY2tpbmdTdG9yZSkpOwotICAgIG1fb3ZlcnJpZGVzLnNldCh2bSwgdGhpcywgc3RhdGljX2Nh
c3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSkpOworICAgIGJvb2wqIG92ZXJyaWRlcyA9IHN0YXRpY19j
YXN0PGJvb2wqPihiYWNraW5nU3RvcmUpOworICAgIG1fb3ZlcnJpZGVzLnNldCh2bSwgdGhpcywg
b3ZlcnJpZGVzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xlbmd0aDsgaS0tOykKLSAgICAg
ICAgbV9vdmVycmlkZXMuZ2V0KClbaV0gPSBmYWxzZTsKKyAgICAgICAgb3ZlcnJpZGVzW2ldID0g
ZmFsc2U7CiB9CiAKIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5nc0lmTmVjZXNz
YXJ5KFZNJiB2bSkKQEAgLTE0OSw3ICsxNDcsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3Zl
cnJpZGVUaGluZ3NJZk5lCiB2b2lkIERpcmVjdEFyZ3VtZW50czo6b3ZlcnJpZGVBcmd1bWVudChW
TSYgdm0sIHVuc2lnbmVkIGluZGV4KQogewogICAgIG92ZXJyaWRlVGhpbmdzSWZOZWNlc3Nhcnko
dm0pOwotICAgIG1fb3ZlcnJpZGVzLmdldCgpW2luZGV4XSA9IHRydWU7CisgICAgbV9vdmVycmlk
ZXMuZ2V0KHRoaXMpW2luZGV4XSA9IHRydWU7CiB9CiAKIHZvaWQgRGlyZWN0QXJndW1lbnRzOjpj
b3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkocmV2aXNpb24g
MTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgY2FuQWNjZXNzSW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gaSA8IG1fbGVuZ3RoICYmICghbV9vdmVycmlkZXMgfHwgIW1fb3ZlcnJpZGVzLmdl
dCgpW2ldKTsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aCAmJiAoIW1fb3ZlcnJpZGVzIHx8
ICFtX292ZXJyaWRlcy5nZXQodGhpcylbaV0pOwogICAgIH0KIAogICAgIGJvb2wgY2FuQWNjZXNz
QXJndW1lbnRJbmRleFF1aWNrbHlJbkRGRyh1aW50MzJfdCBpKSBjb25zdApAQCAtMTQ4LDcgKzE0
OCw3IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fY2FsbGVlOwog
ICAgIHVpbnQzMl90IG1fbGVuZ3RoOyAvLyBBbHdheXMgdGhlIGFjdHVhbCBsZW5ndGggb2YgY2Fw
dHVyZWQgYXJndW1lbnRzIGFuZCBuZXZlciB3aGF0IHdhcyBzdG9yZWQgaW50byB0aGUgbGVuZ3Ro
IHByb3BlcnR5LgogICAgIHVpbnQzMl90IG1fbWluQ2FwYWNpdHk7IC8vIFRoZSBtYXggb2YgdGhp
cyBhbmQgbGVuZ3RoIGRldGVybWluZXMgdGhlIGNhcGFjaXR5IG9mIHRoaXMgb2JqZWN0LiBJdCBt
YXkgYmUgdGhlIGFjdHVhbCBjYXBhY2l0eSwgb3IgbWF5YmUgc29tZXRoaW5nIHNtYWxsZXIuIFdl
IGFycmFuZ2UgaXQgdGhpcyB3YXkgdG8gYmUga2luZCB0byB0aGUgSklUcy4KLSAgICBDb3B5V3Jp
dGVCYXJyaWVyPGJvb2w+IG1fb3ZlcnJpZGVzOyAvLyBJZiBub24tbnVsbCwgaXQgbWVhbnMgdGhh
dCBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIHByb3Bl
cnRpZXMuCisgICAgQ29weUJhcnJpZXI8Ym9vbD4gbV9vdmVycmlkZXM7IC8vIElmIG5vbi1udWxs
LCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRl
cmlhbGl6ZWQgcHJvcGVydGllcy4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDE5MDY4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTIsNiArMzkyLDcgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKAogCiBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIG5ld0xlbmd0aCwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNzOgogICAgICAgICBpZiAoIW5ld0xlbmd0aCkKQEAg
LTQwOCw3ICs0MDksNyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMs
CiAgICAgY2FzZSBBcnJheVdpdGhJbnQzMjoKICAgICBjYXNlIEFycmF5V2l0aERvdWJsZToKICAg
ICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKLSAgICAgICAgaWYgKG5ld0xlbmd0aCA9PSBt
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgIGlmIChuZXdMZW5ndGggPT0gYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICBpZiAobmV3TGVuZ3RoID49IE1BWF9BUlJBWV9JTkRFWCAvLyBUaGlzIGNhc2UgZW5zdXJlcyB0
aGF0IHdlIGNhbiBkbyBmYXN0IHB1c2guCiAgICAgICAgICAgICB8fCAobmV3TGVuZ3RoID49IE1J
Tl9TUEFSU0VfQVJSQVlfSU5ERVgKQEAgLTQxNywxMiArNDE4LDEyIEBAIGJvb2wgSlNBcnJheTo6
c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICBleGVjLCBuZXdMZW5n
dGgsIHRocm93RXhjZXB0aW9uLAogICAgICAgICAgICAgICAgIGVuc3VyZUFycmF5U3RvcmFnZShl
eGVjLT52bSgpKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5ld0xlbmd0aCA+IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKSkgeworICAgICAgICBpZiAobmV3TGVuZ3RoID4gYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKSkgewogICAgICAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCks
IG5ld0xlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAg
ICAgIHVuc2lnbmVkIGxlbmd0aFRvQ2xlYXIgPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkg
LSBuZXdMZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aFRvQ2xlYXIgPSBidXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpIC0gbmV3TGVuZ3RoOwogICAgICAgICB1bnNpZ25lZCBjb3N0VG9BbGxv
Y2F0ZU5ld0J1dHRlcmZseSA9IDY0OyAvLyBhIGhldXJpc3RpYy4KICAgICAgICAgaWYgKGxlbmd0
aFRvQ2xlYXIgPiBuZXdMZW5ndGggJiYgbGVuZ3RoVG9DbGVhciA+IGNvc3RUb0FsbG9jYXRlTmV3
QnV0dGVyZmx5KSB7CiAgICAgICAgICAgICByZWFsbG9jYXRlQW5kU2hyaW5rQnV0dGVyZmx5KGV4
ZWMtPnZtKCksIG5ld0xlbmd0aCk7CkBAIC00MzAsMTMgKzQzMSwxMyBAQCBib29sIEpTQXJyYXk6
OnNldExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaW5k
ZXhpbmdUeXBlKCkgPT0gQXJyYXlXaXRoRG91YmxlKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGktLSA+IG5ld0xlbmd0aDspCi0g
ICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OyBpLS0gPiBuZXdMZW5ndGg7KQorICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldID0gUE5hTjsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaS0tID4gbmV3TGVuZ3Ro
OykKLSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OyBpLS0gPiBuZXdMZW5ndGg7KQorICAgICAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLmNsZWFyKCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1Ymxp
Y0xlbmd0aChuZXdMZW5ndGgpOworICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChu
ZXdMZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIApAQCAtNDUy
LDUxICs0NTMsNTMgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAog
CiBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgCiAgICAgc3dpdGNoIChp
bmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQXJyYXlDbGFzczoKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoVW5kZWNpZGVkOgotICAg
ICAgICBpZiAoIW1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgaWYgKCFidXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgIC8vIFdlIGhhdmUgbm90aGluZyBidXQgaG9sZXMuIFNvLCBkcm9wIGRvd24gdG8g
dGhlIHNsb3cgdmVyc2lvbi4KICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQXJy
YXlXaXRoSW50MzI6CiAgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgCiAgICAg
ICAgIGlmICghbGVuZ3RoLS0pCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2J1dHRlcmZseS0+Y29udGln
dW91cygpW2xlbmd0aF0uZ2V0KCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA8IGJ1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5nZXQoKTsKICAgICAgICAgaWYgKHZhbHVlKSB7Ci0g
ICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uY2xlYXIoKTsKLSAg
ICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAg
ICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uY2xlYXIoKTsKKyAgICAgICAgICAg
IGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm4g
dmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIEFycmF5V2l0aERvdWJsZTogewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWxlbmd0aC0tKQogICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAotICAgICAgICBSRUxFQVNF
X0FTU0VSVChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBk
b3VibGUgdmFsdWUgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2xlbmd0aF07Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkp
OworICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVts
ZW5ndGhdOwogICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsKLSAgICAgICAgICAgIG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbbGVuZ3RoXSA9IFBOYU47Ci0gICAgICAgICAgICBt
X2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgICAgICAgICBidXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKVtsZW5ndGhdID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRl
cmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgIAogICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICAgICAgaWYgKCFsZW5ndGgpIHsKQEAgLTU0Nyw2ICs1
NTAsOCBAQCBKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiAvLyAgLSBwdXNo
aW5nIHRvIGFuIGFycmF5IG9mIGxlbmd0aCAyXjMyLTEgc3RvcmVzIHRoZSBwcm9wZXJ0eSwgYnV0
IHRocm93cyBhIHJhbmdlIGVycm9yLgogdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCh0aGlzKTsKKyAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAg
Y2FzZSBBcnJheUNsYXNzOiB7CiAgICAgICAgIGNyZWF0ZUluaXRpYWxVbmRlY2lkZWQoZXhlYy0+
dm0oKSwgMCk7CkBAIC01NjYsMTEgKzU3MSwxMSBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0
YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7Ci0gICAgICAg
IEFTU0VSVChsZW5ndGggPD0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAg
aWYgKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgewotICAgICAgICAgICAg
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2xlbmd0aF0uc2V0V2l0aG91dFdyaXRlQmFy
cmllcih2YWx1ZSk7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxl
bmd0aCArIDEpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOworICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgICAgICBpZiAobGVuZ3RoIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgewor
ICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtsZW5ndGhdLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIodmFsdWUpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNM
ZW5ndGgobGVuZ3RoICsgMSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC01ODYsMTEgKzU5MSwxMSBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhCiAgICAgfQogCiAgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Ci0gICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKLSAgICAg
ICAgQVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAg
ICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0aF0uc2V0KGV4ZWMtPnZtKCksIHRoaXMs
IHZhbHVlKTsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3Ro
ICsgMSk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7
CisgICAgICAgIGlmIChsZW5ndGggPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7CisgICAg
ICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLnNldChleGVjLT52bSgpLCB0
aGlzLCB2YWx1ZSk7CisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5n
dGggKyAxKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTYx
OCwxMSArNjIzLDExIEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKLSAgICAgICAgQVNTRVJUKGxlbmd0aCA8
PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBpZiAobGVuZ3RoIDwgbV9i
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29u
dGlndW91c0RvdWJsZSgpW2xlbmd0aF0gPSB2YWx1ZUFzRG91YmxlOwotICAgICAgICAgICAgbV9i
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUKGxlbmd0
aCA8PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IGJ1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGln
dW91c0RvdWJsZSgpW2xlbmd0aF0gPSB2YWx1ZUFzRG91YmxlOworICAgICAgICAgICAgYnV0dGVy
Zmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC02NDgsNyArNjUzLDcgQEAgdm9pZCBKU0FycmF5OjpwdXNo
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogCiAgICAgICAgIC8vIEZhc3QgY2FzZSAtIHB1c2gg
d2l0aGluIHZlY3RvciwgYWx3YXlzIHVwZGF0ZSBtX2xlbmd0aCAmIG1fbnVtVmFsdWVzSW5WZWN0
b3IuCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwpAQCAtNjk2
LDkgKzcwMSw5IEBAIEpTQXJyYXkqIEpTQXJyYXk6OmZhc3RTbGljZShFeGVjU3RhdGUmIGUKIAog
ICAgICAgICBhdXRvJiByZXN1bHRCdXR0ZXJmbHkgPSAqcmVzdWx0QXJyYXktPmJ1dHRlcmZseSgp
OwogICAgICAgICBpZiAoYXJyYXlUeXBlID09IEFycmF5V2l0aERvdWJsZSkKLSAgICAgICAgICAg
IG1lbWNweShyZXN1bHRCdXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2YoSlNW
YWx1ZSkgKiBjb3VudCk7CisgICAgICAgICAgICBtZW1jcHkocmVzdWx0QnV0dGVyZmx5LmNvbnRp
Z3VvdXNEb3VibGUoKS5kYXRhKCksIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91c0Rv
dWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3Vz
KCkuZGF0YSgpLCBtX2J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXgs
IHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAgIG1lbWNweShyZXN1bHRCdXR0
ZXJmbHkuY29udGlndW91cygpLmRhdGEoKSwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1
b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOwogICAg
ICAgICByZXN1bHRCdXR0ZXJmbHkuc2V0UHVibGljTGVuZ3RoKGNvdW50KTsKIAogICAgICAgICBy
ZXR1cm4gcmVzdWx0QXJyYXk7CkBAIC03MTUsOCArNzIwLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNB
cnJheTo6ZmFzdENvbmNhdFdpdGgoRQogICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKICAgICBBU1NF
UlQobmV3QXJyYXlUeXBlID09IGZhc3RDb25jYXRUeXBlKHZtLCAqdGhpcywgb3RoZXJBcnJheSkp
OwogCi0gICAgdW5zaWduZWQgdGhpc0FycmF5U2l6ZSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsKLSAgICB1bnNpZ25lZCBvdGhlckFycmF5U2l6ZSA9IG90aGVyQXJyYXkubV9idXR0ZXJm
bHktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVkIHRoaXNBcnJheVNpemUgPSBtX2J1dHRl
cmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVkIG90aGVyQXJyYXlT
aXplID0gb3RoZXJBcnJheS5tX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpOwog
ICAgIEFTU0VSVCh0aGlzQXJyYXlTaXplICsgb3RoZXJBcnJheVNpemUgPCBNSU5fU1BBUlNFX0FS
UkFZX0lOREVYKTsKIAogICAgIFN0cnVjdHVyZSogcmVzdWx0U3RydWN0dXJlID0gZXhlYy5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxs
b2NhdGlvbihuZXdBcnJheVR5cGUpOwpAQCAtNzI4LDExICs3MzMsMTEgQEAgRW5jb2RlZEpTVmFs
dWUgSlNBcnJheTo6ZmFzdENvbmNhdFdpdGgoRQogICAgIGF1dG8mIG90aGVyQnV0dGVyZmx5ID0g
Km90aGVyQXJyYXkuYnV0dGVyZmx5KCk7CiAgICAgaWYgKG5ld0FycmF5VHlwZSA9PSBBcnJheVdp
dGhEb3VibGUpIHsKICAgICAgICAgYXV0byBidWZmZXIgPSByZXN1bHRCdXR0ZXJmbHkuY29udGln
dW91c0RvdWJsZSgpLmRhdGEoKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNBcnJheVNp
emUpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRp
Z3VvdXNEb3VibGUoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNBcnJheVNpemUpOwog
ICAgICAgICBtZW1jcHkoYnVmZmVyICsgdGhpc0FycmF5U2l6ZSwgb3RoZXJCdXR0ZXJmbHkuY29u
dGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogb3RoZXJBcnJheVNpemUp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gYnVmZmVyID0gcmVzdWx0QnV0dGVyZmx5LmNv
bnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiB0aGlzQXJyYXlTaXplKTsKKyAg
ICAgICAgbWVtY3B5KGJ1ZmZlciwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzKCku
ZGF0YSgpLCBzaXplb2YoSlNWYWx1ZSkgKiB0aGlzQXJyYXlTaXplKTsKICAgICAgICAgbWVtY3B5
KGJ1ZmZlciArIHRoaXNBcnJheVNpemUsIG90aGVyQnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRh
KCksIHNpemVvZihKU1ZhbHVlKSAqIG90aGVyQXJyYXlTaXplKTsKICAgICB9CiAKQEAgLTgwNSw4
ICs4MTAsOSBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlCiAgICAg
ICAgIC8vIEFkanVzdCB0aGUgQnV0dGVyZmx5IGFuZCB0aGUgaW5kZXggYmlhcy4gV2Ugb25seSBu
ZWVkIHRvIGRvIHRoaXMgaGVyZSBiZWNhdXNlIHdlJ3JlIGNoYW5naW5nCiAgICAgICAgIC8vIHRo
ZSBzdGFydCBvZiB0aGUgQnV0dGVyZmx5LCB3aGljaCBuZWVkcyB0byBwb2ludCBhdCB0aGUgZmly
c3QgaW5kZXhlZCBwcm9wZXJ0eSBpbiB0aGUgdXNlZAogICAgICAgICAvLyBwb3J0aW9uIG9mIHRo
ZSB2ZWN0b3IuCi0gICAgICAgIG1fYnV0dGVyZmx5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobV9i
dXR0ZXJmbHktPnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCkpOwotICAgICAgICBzdG9yYWdlID0g
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKKyAg
ICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIoYnV0dGVyZmx5KTsKKyAgICAgICAg
c3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1f
aW5kZXhCaWFzICs9IGNvdW50OwogCiAgICAgICAgIC8vIFNpbmNlIHdlJ3JlIGNvbnN1bWluZyBw
YXJ0IG9mIHRoZSB2ZWN0b3IgYnkgbW92aW5nIGl0cyBiZWdpbm5pbmcgdG8gdGhlIGxlZnQsCkBA
IC04NDgsNiArODU0LDggQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5n
VAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQg
PiAwKTsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMp
OwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xh
c3M6CkBAIC04NTksNyArODY3LDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUlu
ZGV4aW5nVAogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aEludDMyOgogICAgIGNhc2UgQXJy
YXlXaXRoQ29udGlndW91czogewotICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2J1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGJ1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50IDw9IG9s
ZExlbmd0aCk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBl
bnRpcmUgYXJyYXkgdG8gZG8gdGhlIHNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvCkBAIC04NzQs
MjggKzg4MiwyOCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAg
ICAgICAgIHVuc2lnbmVkIGVuZCA9IG9sZExlbmd0aCAtIGNvdW50OwogICAgICAgICBpZiAodGhp
cy0+c3RydWN0dXJlKHZtKS0+aG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtKSkgewogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpICsg
Y291bnRdLmdldCgpOworICAgICAgICAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZseS0+Y29u
dGlndW91cygpW2kgKyBjb3VudF0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KCF2KSkgewogICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gaTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHZtLCBzdGFydEluZGV4
LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKHZtKSk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRl
QmFycmllcih2KTsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbWVtbW92ZShtX2J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSAr
IHN0YXJ0SW5kZXgsIAotICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCku
ZGF0YSgpICsgc3RhcnRJbmRleCArIGNvdW50LCAKKyAgICAgICAgICAgIG1lbW1vdmUoYnV0dGVy
Zmx5LT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgCisgICAgICAgICAgICAgICAg
YnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCArIGNvdW50LCAKICAg
ICAgICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiAoZW5kIC0gc3RhcnRJbmRleCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kOyBpIDwgb2xkTGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7Cisg
ICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgICAgICAK
LSAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChvbGRMZW5ndGggLSBjb3VudCk7
CisgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKG9sZExlbmd0aCAtIGNvdW50KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0
aERvdWJsZTogewotICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCk7CisgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7
CiAgICAgICAgIAogICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJy
YXkgdG8gZG8gdGhlIHNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvCkBAIC05MTAsMjIgKzkxOCwy
MiBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgIHVu
c2lnbmVkIGVuZCA9IG9sZExlbmd0aCAtIGNvdW50OwogICAgICAgICBpZiAodGhpcy0+c3RydWN0
dXJlKHZtKS0+aG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtKSkgewogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgZG91YmxlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2kgKyBjb3Vu
dF07CisgICAgICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpICsgY291bnRdOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2ICE9IHYpKSB7
CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uodm0sIHN0YXJ0SW5kZXgsIGNvdW50
LCBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHY7CisgICAgICAgICAg
ICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2OwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVtbW92ZShtX2J1dHRlcmZseS0+Y29u
dGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgsCi0gICAgICAgICAgICAgICAgbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291bnQs
CisgICAgICAgICAgICBtZW1tb3ZlKGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEo
KSArIHN0YXJ0SW5kZXgsCisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91
YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCArIGNvdW50LAogICAgICAgICAgICAgICAgIHNpemVv
ZihKU1ZhbHVlKSAqIChlbmQgLSBzdGFydEluZGV4KSk7CiAgICAgICAgIH0KICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZW5kOyBpIDwgb2xkTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBtX2J1
dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKICAgICAgICAgCi0gICAgICAgIG1f
YnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgob2xkTGVuZ3RoIC0gY291bnQpOworICAgICAgICBi
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChvbGRMZW5ndGggLSBjb3VudCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCkBAIC05ODYsNiArOTk0LDggQEAgYm9vbCBKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYQogCiBib29sIEpTQXJyYXk6OnVuc2hpZnRD
b3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydElu
ZGV4LCB1bnNpZ25lZCBjb3VudCkKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCh0aGlzKTsKKyAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgY2FzZSBBcnJheUNsYXNzOgogICAgIGNhc2UgQXJyYXlXaXRoVW5kZWNpZGVkOgpAQCAtOTk0
LDcgKzEwMDQsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAK
ICAgICBjYXNlIEFycmF5V2l0aEludDMyOgogICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czog
ewotICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7CisgICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUg
YXJyYXkgdG8gZG8gdGhlIHVuc2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8gZG8gc28KICAgICAgICAg
Ly8gb25seSBpZiBpdCdzIG5vdCBob3JyaWJseSBzbG93LgpAQCAtMTAwMiwxOSArMTAxMiwyMCBA
QCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAgICAgICAgICAgICBy
ZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3Vu
dCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgCiAgICAgICAgIGVu
c3VyZUxlbmd0aChleGVjLT52bSgpLCBvbGRMZW5ndGggKyBjb3VudCk7CisgICAgICAgIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKIAogICAgICAgICAvLyBXZSBoYXZlIHRvIGNo
ZWNrIGZvciBob2xlcyBiZWZvcmUgd2Ugc3RhcnQgbW92aW5nIHRoaW5ncyBhcm91bmQgc28gdGhh
dCB3ZSBkb24ndCBnZXQgaGFsZndheSAKICAgICAgICAgLy8gdGhyb3VnaCBzaGlmdGluZyBhbmQg
dGhlbiByZWFsaXplIHdlIHNob3VsZCBoYXZlIGJlZW4gaW4gQXJyYXlTdG9yYWdlIG1vZGUuCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZExlbmd0aDsgaS0tID4gc3RhcnRJbmRleDspIHsK
LSAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0
KCk7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5n
ZXQoKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgc3RhcnRJbmRleCwgY291bnQs
IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGktLSA+IHN0YXJ0SW5kZXg7KSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAg
ICAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAg
ICAgICAgICAgICBBU1NFUlQodik7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2kgKyBjb3VudF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgICAgIGJ1
dHRlcmZseS0+Y29udGlndW91cygpW2kgKyBjb3VudF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gTk9URTogd2UncmUgbGVhdmluZyBi
ZWluZyBnYXJiYWdlIGluIHRoZSBwYXJ0IG9mIHRoZSBhcnJheSB0aGF0IHdlIHNoaWZ0ZWQgb3V0
CkBAIC0xMDI2LDcgKzEwMzcsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJ
bmRleGluCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aERvdWJsZTogewotICAg
ICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7Cisg
ICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAg
ICAgICAgIAogICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkg
dG8gZG8gdGhlIHVuc2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8gZG8gc28KICAgICAgICAgLy8gb25s
eSBpZiBpdCdzIG5vdCBob3JyaWJseSBzbG93LgpAQCAtMTAzNCwxOSArMTA0NSwyMCBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluCiAgICAgICAgICAgICByZXR1cm4g
dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLCBzdGFydEluZGV4LCBjb3VudCwgZW5z
dXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxl
bmd0aChleGVjLT52bSgpLCBvbGRMZW5ndGggKyBjb3VudCk7CisgICAgICAgIGJ1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIGhhdmUgdG8g
Y2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3ZSBzdGFydCBtb3ZpbmcgdGhpbmdzIGFyb3VuZCBzbyB0
aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5IAogICAgICAgICAvLyB0aHJvdWdoIHNoaWZ0aW5nIGFu
ZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxkIGhhdmUgYmVlbiBpbiBBcnJheVN0b3JhZ2UgbW9kZS4K
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkTGVuZ3RoOyBpLS0gPiBzdGFydEluZGV4Oykg
ewotICAgICAgICAgICAgZG91YmxlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldOworICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KVtpXTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2ICE9IHYpKQogICAgICAgICAgICAgICAg
IHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0YXJ0SW5kZXgsIGNv
dW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAgICB9CiAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gb2xkTGVuZ3RoOyBpLS0gPiBzdGFydEluZGV4OykgewotICAg
ICAgICAgICAgZG91YmxlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwor
ICAgICAgICAgICAgZG91YmxlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsK
ICAgICAgICAgICAgIEFTU0VSVCh2ID09IHYpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpICsgY291bnRdID0gdjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2kgKyBjb3VudF0gPSB2OwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICAvLyBOT1RFOiB3ZSdyZSBsZWF2aW5nIGJlaW5nIGdhcmJhZ2UgaW4gdGhlIHBhcnQg
b2YgdGhlIGFycmF5IHRoYXQgd2Ugc2hpZnRlZCBvdXQKQEAgLTEwNzIsNiArMTA4NCw4IEBAIHZv
aWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICB1bnNpZ25lZCBpID0g
MDsKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2
ZWN0b3I7CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlz
KTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNs
YXNzOgpAQCAtMTA4NSwxNiArMTA5OSwxNiBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4
ZWNTdGF0ZSogZXhlCiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6CiAgICAgY2Fz
ZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIHZlY3RvckVuZCA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKLSAgICAgICAgdmVjdG9yID0gbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKS5kYXRhKCk7CisgICAgICAgIHZlY3RvckVuZCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7CisgICAgICAgIHZlY3RvciA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aERvdWJsZTog
ewogICAgICAgICB2ZWN0b3IgPSAwOwogICAgICAgICB2ZWN0b3JFbmQgPSAwOwotICAgICAgICBm
b3IgKDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBkb3VibGUgdiA9IGJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAg
IGZvciAoOyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAg
ICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICAg
ICAgaWYgKHYgIT0gdikKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGFyZ3Mu
YXBwZW5kKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHYpKTsKQEAgLTExMDMsNyAr
MTExNyw3IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICB9
CiAgICAgCiAgICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6
IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpOwogICAgICAgICAKICAgICAgICAgdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7
CiAgICAgICAgIHZlY3RvckVuZCA9IG1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVj
dG9yTGVuZ3RoKCkpOwpAQCAtMTE0MSw2ICsxMTU1LDggQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9B
cmd1bWVudHMoRXhlY1N0YXRlKgogICAgIC8vIEZJWE1FOiBXaGF0IHByZXZlbnRzIHRoaXMgZnJv
bSBiZWluZyBjYWxsZWQgd2l0aCBhIFJ1bnRpbWVBcnJheT8gVGhlIGxlbmd0aCBmdW5jdGlvbiB3
aWxsIGFsd2F5cyByZXR1cm4gMCBpbiB0aGF0IGNhc2UuCiAgICAgQVNTRVJUKGxlbmd0aCA9PSB0
aGlzLT5sZW5ndGgoKSk7CiAKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCh0aGlzKTsKKyAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2Fz
ZSBBcnJheUNsYXNzOgogICAgICAgICByZXR1cm47CkBAIC0xMTUzLDE3ICsxMTY5LDE3IEBAIHZv
aWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSoKICAgICAgICAgCiAgICAgY2Fz
ZSBBcnJheVdpdGhJbnQzMjoKICAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKLSAgICAg
ICAgdmVjdG9yID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgIHZl
Y3RvckVuZCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yID0g
YnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOworICAgICAgICB2ZWN0b3JFbmQgPSBidXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOiB7CiAgICAgICAgIHZlY3RvciA9IDA7CiAgICAgICAg
IHZlY3RvckVuZCA9IDA7Ci0gICAgICAgIGZvciAoOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5KCktPnZlY3Rv
ckxlbmd0aCgpKTsKLSAgICAgICAgICAgIGRvdWJsZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXNEb3VibGUoKVtpXTsKKyAgICAgICAgZm9yICg7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5n
dGgoKSk7CisgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpW2ldOwogICAgICAgICAgICAgaWYgKHYgIT0gdikKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gSlNW
YWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdik7CkBAIC0xMTcyLDcgKzExODgsNyBAQCB2
b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAg
ICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCk7CiAgICAgICAgIHZlY3RvciA9IHN0b3JhZ2UtPm1fdmVjdG9yOwogICAgICAgICB2ZWN0b3JF
bmQgPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMCAr
ODgsMTAgQEAgSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OgogICAgIFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5
QnVmZmVyLAogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICA6
IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKLSAgICAsIG1fdmVjdG9yKHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQpCiAgICAgLCBtX2xlbmd0aChs
ZW5ndGgpCiAgICAgLCBtX21vZGUoV2FzdGVmdWxUeXBlZEFycmF5KQogeworICAgIG1fdmVjdG9y
ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9mZnNl
dDsKICAgICBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlcjsKICAgICBpbmRleGluZ0hlYWRl
ci5zZXRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlci5nZXQoKSk7CiAgICAgbV9idXR0ZXJmbHkgPSBC
dXR0ZXJmbHk6OmNyZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5kZXhpbmdIZWFkZXIsIDApOwpA
QCAtMTAxLDE5ICsxMDEsMTkgQEAgSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRl
eHQ6OgogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBh
cnJheUJ1ZmZlciwKICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERh
dGFWaWV3VGFnKQogICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgICwgbV92ZWN0b3Io
c3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9mZnNldCkK
ICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAsIG1fbW9kZShEYXRhVmlld01vZGUpCiAgICAg
LCBtX2J1dHRlcmZseSgwKQogeworICAgIG1fdmVjdG9yID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+
KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9mZnNldDsKIH0KIAogSlNBcnJheUJ1ZmZlclZp
ZXc6OkpTQXJyYXlCdWZmZXJWaWV3KFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4
dCkKICAgICA6IEJhc2Uodm0sIGNvbnRleHQuc3RydWN0dXJlKCksIGNvbnRleHQuYnV0dGVyZmx5
KCkpCi0gICAgLCBtX3ZlY3Rvcihjb250ZXh0LnZlY3RvcigpKQogICAgICwgbV9sZW5ndGgoY29u
dGV4dC5sZW5ndGgoKSkKICAgICAsIG1fbW9kZShjb250ZXh0Lm1vZGUoKSkKIHsKKyAgICBtX3Zl
Y3Rvci5zZXRXaXRob3V0QmFycmllcihzdGF0aWNfY2FzdDxjaGFyKj4oY29udGV4dC52ZWN0b3Io
KSkpOwogfQogCiB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluYWxpemUoSlND
ZWxsKgogICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNB
cnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+bV9tb2RlID09
IE92ZXJzaXplVHlwZWRBcnJheSB8fCB0aGlzT2JqZWN0LT5tX21vZGUgPT0gV2FzdGVmdWxUeXBl
ZEFycmF5KTsKICAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJh
eSkKLSAgICAgICAgZmFzdEZyZWUodGhpc09iamVjdC0+bV92ZWN0b3IpOworICAgICAgICBmYXN0
RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXRXaXRob3V0QmFycmllcigpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2MSw3ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+
IGltcGwoKTsKICAgICB2b2lkIG5ldXRlcigpOwogICAgIAotICAgIHZvaWQqIHZlY3RvcigpIHsg
cmV0dXJuIG1fdmVjdG9yOyB9CisgICAgdm9pZCogdmVjdG9yKCkgeyByZXR1cm4gbV92ZWN0b3Iu
Z2V0KHRoaXMpOyB9CiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpOwogICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCBw
cml2YXRlOgogcHJvdGVjdGVkOgogICAgIEFycmF5QnVmZmVyKiBleGlzdGluZ0J1ZmZlckluQnV0
dGVyZmx5KCk7CiAKLSAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICBDb3B5QmFycmllcjxjaGFyPiBt
X3ZlY3RvcjsgLy8gdGhpcyBpcyByZWFsbHkgYSB2b2lkKiwgYnV0IHZvaWQgd291bGQgbm90IHdv
cmsgaGVyZS4KICAgICB1aW50MzJfdCBtX2xlbmd0aDsKICAgICBUeXBlZEFycmF5TW9kZSBtX21v
ZGU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIGlubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3
OjpuZXV0ZXIoKQogewogICAgIEFTU0VSVChoYXNBcnJheUJ1ZmZlcigpKTsKICAgICBtX2xlbmd0
aCA9IDA7Ci0gICAgbV92ZWN0b3IgPSAwOworICAgIG1fdmVjdG9yLmNsZWFyKCk7CiB9CiAKIGlu
bGluZSB1bnNpZ25lZCBKU0FycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCgpCkBAIC02OCw3ICs2
OCw3IEBAIGlubGluZSB1bnNpZ25lZCBKU0FycmF5QnVmZmVyVmlldzo6Ynl0ZU8KICAgICAgICAg
cmV0dXJuIDA7CiAgICAgCiAgICAgcHRyZGlmZl90IGRlbHRhID0KLSAgICAgICAgc3RhdGljX2Nh
c3Q8dWludDhfdCo+KG1fdmVjdG9yKSAtIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIoKS0+
ZGF0YSgpKTsKKyAgICAgICAgYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihtX3ZlY3Rvci5nZXQodGhp
cykpIC0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlcigpLT5kYXRhKCkpOwogICAgIAogICAg
IHVuc2lnbmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWx0YSk7CiAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ocmVzdWx0KSA9PSBkZWx0YSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMSAr
MTA4LDExIEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
KiB0eXBlZFZlY3RvcigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IuZ2V0
KHRoaXMpKTsKICAgICB9CiAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3Io
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5
cGUqPihtX3ZlY3Rvcik7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgQWRh
cHRvcjo6VHlwZSo+KG1fdmVjdG9yLmdldCh0aGlzKSk7CiAgICAgfQogCiAgICAgLy8gVGhlc2Ug
bWV0aG9kcyBhcmUgbWVhbnQgdG8gbWF0Y2ggaW5kZXhlZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpT
T2JqZWN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMTkwNjgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0MSw3ICs0NDEsNyBAQCB2b2lkIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2CiAgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5t
X21vZGUpIHsKICAgICBjYXNlIEZhc3RUeXBlZEFycmF5OiB7CiAgICAgICAgIGlmICh0aGlzT2Jq
ZWN0LT5tX3ZlY3RvcikKLSAgICAgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3Qs
IFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sIHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2Jq
ZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmpl
Y3QsIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sIHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldFdp
dGhvdXRCYXJyaWVyKCksIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIApAQCAtNDY4LDEyICs0NjgsMTIgQEAgdm9pZCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6YwogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CiAgICAgCiAg
ICAgaWYgKHRva2VuID09IFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4KLSAgICAgICAgJiYgdmlz
aXRvci5jaGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX3ZlY3RvcikpIHsKKyAgICAgICAg
JiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXRXaXRo
b3V0QmFycmllcigpKSkgewogICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3IpOwot
ICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3RvcjsKKyAgICAgICAg
dm9pZCogb2xkVmVjdG9yID0gdGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3QpOwog
ICAgICAgICB2b2lkKiBuZXdWZWN0b3IgPSB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodGhpc09i
amVjdC0+Ynl0ZVNpemUoKSk7CiAgICAgICAgIG1lbWNweShuZXdWZWN0b3IsIG9sZFZlY3Rvciwg
dGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fdmVjdG9yID0g
bmV3VmVjdG9yOworICAgICAgICB0aGlzT2JqZWN0LT5tX3ZlY3Rvci5zZXRXaXRob3V0QmFycmll
cihzdGF0aWNfY2FzdDxjaGFyKj4obmV3VmVjdG9yKSk7CiAgICAgICAgIHZpc2l0b3IuZGlkQ29w
eShvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwogICAgIH0KICAgICAKQEAgLTUw
OCw4ICs1MDgsOCBAQCBBcnJheUJ1ZmZlciogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhCiAg
ICAgICAgICYmICF0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKSAmJiBzaXplID49IHNpemVvZihJbmRl
eGluZ0hlYWRlcikpIHsKICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsKICAg
ICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJs
ZS4KLSAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuc2V0V2l0aG91dFdyaXRlQmFycmll
cigKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEluZGV4aW5nSGVhZGVyKj4odGhpc09iamVjdC0+
bV92ZWN0b3IpLT5idXR0ZXJmbHkoKSk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5
LnNldFdpdGhvdXRCYXJyaWVyKAorICAgICAgICAgICAgYml0d2lzZV9jYXN0PEluZGV4aW5nSGVh
ZGVyKj4odGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3QpKS0+YnV0dGVyZmx5KCkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIFZNJiB2bSA9ICpoZWFwLT52bSgpOwogICAgICAgICB0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXQodm0sIHRoaXNPYmplY3QsIEJ1dHRlcmZseTo6Y3Jl
YXRlT3JHcm93QXJyYXlSaWdodCgKQEAgLTUyMSwxNCArNTIxLDE0IEBAIEFycmF5QnVmZmVyKiBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGEKICAgICAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3Qt
Pm1fbW9kZSkgewogICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6Ci0gICAgICAgIGJ1ZmZlciA9IEFy
cmF5QnVmZmVyOjpjcmVhdGUodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVM
ZW5ndGgoKSk7CisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUodGhpc09iamVj
dC0+bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3QpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CiAg
ICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJhY3Rp
bmciIGZyb20gZXh0cmEgbWVtb3J5CiAgICAgICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5vdyB0
aGlzIGNhc2Ugd2lsbCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRlZAog
ICAgICAgICAvLyB0aGUgd2hvbGUgYnVmZmVyLgotICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZl
cjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxl
bmd0aCgpKTsKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQodGhp
c09iamVjdC0+bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3QpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3Ro
KCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTUzNyw3ICs1
MzcsNyBAQCBBcnJheUJ1ZmZlciogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhCiAgICAgfQog
CiAgICAgdGhpc09iamVjdC0+YnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPnNldEFycmF5
QnVmZmVyKGJ1ZmZlci5nZXQoKSk7Ci0gICAgdGhpc09iamVjdC0+bV92ZWN0b3IgPSBidWZmZXIt
PmRhdGEoKTsKKyAgICB0aGlzT2JqZWN0LT5tX3ZlY3Rvci5zZXRXaXRob3V0QmFycmllcihzdGF0
aWNfY2FzdDxjaGFyKj4oYnVmZmVyLT5kYXRhKCkpKTsKICAgICB0aGlzT2JqZWN0LT5tX21vZGUg
PSBXYXN0ZWZ1bFR5cGVkQXJyYXk7CiAgICAgaGVhcC0+YWRkUmVmZXJlbmNlKHRoaXNPYmplY3Qs
IGJ1ZmZlci5nZXQoKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwLmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIEpTTWFwKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1fbWFwRGF0YSh2bSkKKyAgICAgICAgLCBt
X21hcERhdGEodm0sIHRoaXMpCiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTAsNyArMTUwLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpjb3B5QnV0dGVyZgog
ICAgICAgICAgICAgbWVtY3B5KGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRTb3VyY2UsIGNvdW50ICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1f
YnV0dGVyZmx5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobmV3QnV0dGVyZmx5KTsKKyAgICAgICAg
bV9idXR0ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIobmV3QnV0dGVyZmx5KTsKICAgICAgICAgdmlz
aXRvci5kaWRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0
eSksIGNhcGFjaXR5SW5CeXRlcyk7CiAgICAgfSAKIH0KQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lk
IEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldFdpdGhvdXRCYXJyaWVyKCk7CiAgICAgaWYg
KGJ1dHRlcmZseSkKICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwg
YnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKS0+b3V0T2ZMaW5l
U2l6ZSgpKTsKIApAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5n
U3RvcmUoSlNDZWxsKiAKICAgICBpZiAodG9rZW4gIT0gQnV0dGVyZmx5Q29weVRva2VuKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0
LT5idXR0ZXJmbHkoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1f
YnV0dGVyZmx5LmdldFdpdGhvdXRCYXJyaWVyKCk7CiAgICAgaWYgKGJ1dHRlcmZseSkKICAgICAg
ICAgdGhpc09iamVjdC0+Y29weUJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCkpOwogfQpAQCAtMzQxLDcgKzM0MSw3IEBA
IGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseS5nZXQodGhpc09iamVjdCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBpZiAoaSA+
PSBzdG9yYWdlLT5sZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
CkBAIC01MTQsNyArNTE0LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNl
bGwsIAogICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBj
YXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFy
cmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCh0aGlzT2Jq
ZWN0KS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJvcGVydHlOYW1l
ID49IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC01MzYs
NyArNTM2LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIAogICAg
ICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgY2Fz
ZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAg
ICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KHRo
aXNPYmplY3QpLT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcm9wZXJ0
eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICBicmVhazsKQEAg
LTYxMyw3ICs2MTMsNyBAQCB2b2lkIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
CiAgICAgICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJl
YWR5RXhpc3RzKHZtLCBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGVu
dGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZt
LCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOworICAgICAgICBlbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHku
Z2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBkZWZhdWx0OgpAQCAtNjQzLDcgKzY0Myw3IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0
ZUluaXRpYWxJbmRleGUKICAgICBBU1NFUlQoIWluZGV4aW5nU2hvdWxkQmVTcGFyc2UoKSk7CiAg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgobGVuZ3RoLCBCQVNFX1ZFQ1RPUl9M
RU4pOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdy
b3dBcnJheVJpZ2h0KAotICAgICAgICBtX2J1dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVj
dHVyZSgpLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCisgICAg
ICAgIG1fYnV0dGVyZmx5LmdldCh0aGlzKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSgpLCBzdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCiAgICAgICAgIGVsZW1lbnRTaXpl
ICogdmVjdG9yTGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5n
dGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCk7CkBA
IC02OTUsNyArNjk1LDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9y
YQogICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gaW5kZXhpbmdUeXBlKCk7CiAgICAgQVNTRVJU
X1VOVVNFRChvbGRUeXBlLCAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2xkVHlwZSkpOwogICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0
KAotICAgICAgICBtX2J1dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSwgc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwKKyAgICAgICAgbV9idXR0ZXJmbHku
Z2V0KHRoaXMpLCB2bSwgdGhpcywgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIGZhbHNlLCAwLAogICAgICAgICBBcnJheVN0b3JhZ2U6OnNpemVGb3IodmVjdG9yTGVu
Z3RoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3QnV0dGVyZmx5KTsKIApAQCAtNzE5LDMxICs3
MTksMzIgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZQogewogICAg
IEFTU0VSVChoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKICAgICBzZXRTdHJ1Y3R1cmUo
dm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBB
bGxvY2F0ZUludDMyKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIo
KTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3VzSW50MzIoKTsK
IH0KIAogQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0RvdWJs
ZShWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwot
ICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsg
aS0tOykKLSAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47
CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQorICAg
ICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CiAgICAgCiAgICAg
c2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlKHZtKSwgQWxsb2NhdGVEb3VibGUpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250
aWd1b3VzRG91YmxlKCk7CiB9CiAKIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVy
dFVuZGVjaWRlZFRvQ29udGlndW91cyhWTSYgdm0pCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRl
ZChpbmRleGluZ1R5cGUoKSkpOwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlQ29udGlndW91cykp
OwotICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgIHJldHVybiBtX2J1
dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXMoKTsKIH0KIAogQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50
cyhWTSYgdm0sIHVuc2lnbmVkIG5lZWRlZExlbmd0aCkKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7Ci0gICAgdW5zaWduZWQgcHVibGljTGVuZ3RoID0g
bV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgIHVuc2lnbmVkIHB1YmxpY0xlbmd0aCA9
IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcHJv
cGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICB1bnNp
Z25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKTsKICAgICAKQEAg
LTc1Miw3ICs3NTMsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0
CiAgICAgCiAgICAgbWVtY3B5KAogICAgICAgICBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFn
ZSgpIC0gcHJvcGVydHlTaXplLAotICAgICAgICBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdl
KCkgLSBwcm9wZXJ0eVNpemUsCisgICAgICAgIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHJvcGVy
dHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCiAgICAgICAgIHByb3BlcnR5U2l6ZSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIAogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CkBAIC03NzAsNyArNzcxLDcgQEAgQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAg
ICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7Cisg
ICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JM
ZW5ndGgoKTsKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRB
cnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwogICAg
IC8vIE5vIG5lZWQgdG8gY29weSBlbGVtZW50cy4KICAgICAKQEAgLTc4Nyw5ICs3ODgsMTAgQEAg
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogQ29udGlndW91c0RvdWJs
ZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvRG91YmxlKFZNJiB2bSkKIHsKICAgICBBU1NFUlQo
aGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspIHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBjdXJyZW50ID0gJm1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsK
KworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAg
IGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspIHsKKyAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50ID0gJmJ1dHRlcmZseS0+Y29udGln
dW91c0ludDMyKClbaV07CiAgICAgICAgIGRvdWJsZSogY3VycmVudEFzRG91YmxlID0gYml0d2lz
ZV9jYXN0PGRvdWJsZSo+KGN1cnJlbnQpOwogICAgICAgICBKU1ZhbHVlIHYgPSBjdXJyZW50LT5n
ZXQoKTsKICAgICAgICAgaWYgKCF2KSB7CkBAIC04MDEsNyArODAzLDcgQEAgQ29udGlndW91c0Rv
dWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogICAgIH0KICAgICAKICAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCBBbGxvY2F0ZURvdWJsZSkpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNEb3Vi
bGUoKTsKIH0KIAogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0Nv
bnRpZ3VvdXMoVk0mIHZtKQpAQCAtODA5LDcgKzgxMSw3IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBK
U09iamVjdDo6Y29udmVydEludDMKICAgICBBU1NFUlQoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkp
KTsKICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKLSAgICByZXR1
cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKKyAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5jb250aWd1b3VzKCk7CiB9CiAKIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5z
aXRpb24pCkBAIC04MTcsMTAgKzgxOSwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252
ZXJ0SW50MzJUb0FyCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVCho
YXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwogCi0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0g
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9
IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdl
KiBuZXdTdG9yYWdlID0gY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlp
bmdFbGVtZW50cyh2bSwgdmVjdG9yTGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgSlNWYWx1ZSB2
ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUg
diA9IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICBpZiAodikgewog
ICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmll
cih2KTsKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKQEAg
LTg0MSw5ICs4NDQsMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMyVG9B
cgogQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3Vz
KFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAg
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07
KSB7Ci0gICAgICAgIGRvdWJsZSogY3VycmVudCA9ICZtX2J1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
dGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsg
aS0tOykgeworICAgICAgICBkb3VibGUqIGN1cnJlbnQgPSAmYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbaV07CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudEFzVmFs
dWUgPSBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oY3VycmVudCk7CiAgICAg
ICAgIGRvdWJsZSB2YWx1ZSA9ICpjdXJyZW50OwogICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUp
IHsKQEAgLTg1NSw3ICs4NTksNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZl
cnREb3ViCiAgICAgfQogICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlQ29udGlndW91cykp
OwotICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgIHJldHVybiBtX2J1
dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXMoKTsKIH0KIAogQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uIHRyYW5zaXRpb24pCkBAIC04NjMsMTAgKzg2NywxMSBAQCBBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwog
ICAgIEFTU0VSVChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZl
Y3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2
ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpOwogICAg
IEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFn
ZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsgaSsrKSB7Ci0gICAg
ICAgIGRvdWJsZSB2YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07Cisg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgewor
ICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsK
ICAgICAgICAgaWYgKHZhbHVlID09IHZhbHVlKSB7CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2Rl
QXNEb3VibGUsIHZhbHVlKSk7CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yKys7CkBAIC04ODksMTAgKzg5NCwxMSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
b252ZXJ0Q29udGlndW91CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VS
VChoYXNDb250aWd1b3VzKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNpZ25lZCB2ZWN0b3JM
ZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKICAgICBBcnJh
eVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRo
b3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykgewotICAgICAgICBK
U1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKyspIHsKKyAgICAgICAg
SlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIGlm
ICh2KSB7CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKHYpOwogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3Rv
cisrOwpAQCAtOTU3LDggKzk2Myw4IEBAIHZvaWQgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMkZvclZh
bHVlKFZNJiAKIAogdm9pZCBKU09iamVjdDo6c2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQoVk0m
IHZtLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBBU1NFUlQoaW5kZXgg
PCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwotICAgIEFTU0VSVChpbmRleCA8IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHku
Z2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKSk7CisgICAgQVNTRVJUKGluZGV4IDwgbV9idXR0ZXJm
bHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgY29udmVydFVuZGVjaWRlZEZvclZh
bHVlKHZtLCB2YWx1ZSk7CiAgICAgc2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOwog
fQpAQCAtMTExNCw3ICsxMTIwLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW5zdXJlQXJy
YXlTdG9yYQogICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFy
cmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3Jh
Z2Uodm0pKTsKICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzoKLSAgICAgICAgcmV0dXJuIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJh
eVN0b3JhZ2VBbHJlYWR5RXhpc3RzKHZtLCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwor
ICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFn
ZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCkp
OwogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMTM1Niw3ICsx
MzYyLDcgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQwogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewot
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5LmdldCh0aGlzT2JqZWN0KS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAg
IAogICAgICAgICBpZiAoaSA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKSB7CiAgICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlU2xvdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ld
OwpAQCAtMTU0Niw3ICsxNTUyLDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iagogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBTExfQVJSQVlf
U1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9y
YWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LmdldChvYmplY3QpLT5h
cnJheVN0b3JhZ2UoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgdW5zaWduZWQgdXNlZFZl
Y3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JM
ZW5ndGgoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rv
ckxlbmd0aDsgKytpKSB7CkBAIC0xNjk5LDcgKzE3MDUsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBK
U09iamVjdDo6ZmlsbEdldHRlclByCiB2b2lkIEpTT2JqZWN0OjpwdXRJbmRleGVkRGVzY3JpcHRv
cihFeGVjU3RhdGUqIGV4ZWMsIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIGNvbnN0IFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNj
cmlwdG9yKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBtYXAgPSBtX2J1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOworICAgIGF1dG8gbWFw
ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0
KCk7CiAKICAgICBpZiAoZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAg
aWYgKGRlc2NyaXB0b3IudmFsdWUoKSkKQEAgLTE3NTgsNyArMTc2NCw3IEBAIGJvb2wgSlNPYmpl
Y3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICBpZiAoZGVzY3JpcHRvci5hdHRyaWJ1
dGVzKCkgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCiAgICAgICAgIG5vdGlmeVByZXNlbmNlT2ZJ
bmRleGVkQWNjZXNzb3JzKGV4ZWMtPnZtKCkpOwogCi0gICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCog
bWFwID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKKyAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5
U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXApOwog
CiAgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dl
dE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAu
CkBAIC0xNzkwLDggKzE3OTYsOSBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJv
cGVydHkoCiAgICAgICAgIGVudHJ5SW5NYXAtPmdldChkZWZhdWx0cyk7CiAKICAgICAgICAgcHV0
SW5kZXhlZERlc2NyaXB0b3IoZXhlYywgZW50cnlJbk1hcCwgZGVzY3JpcHRvciwgZGVmYXVsdHMp
OwotICAgICAgICBpZiAoaW5kZXggPj0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5n
dGgoKSkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0TGVuZ3Ro
KGluZGV4ICsgMSk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0KHRoaXMpOworICAgICAgICBpZiAoaW5kZXggPj0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bGVuZ3RoKCkpCisgICAgICAgICAgICBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRM
ZW5ndGgoaW5kZXggKyAxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xOTEx
LDE3ICsxOTE4LDE5IEBAIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW4K
IHsKICAgICBBU1NFUlQoKGluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spID09IGlu
ZGV4aW5nU2hhcGUpOwogICAgIEFTU0VSVCghaW5kZXhpbmdTaG91bGRCZVNwYXJzZSgpKTsKKwor
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgIAog
ICAgIC8vIEZvciB1cyB0byBnZXQgaGVyZSwgdGhlIGluZGV4IGlzIGVpdGhlciBncmVhdGVyIHRo
YW4gdGhlIHB1YmxpYyBsZW5ndGgsIG9yIGdyZWF0ZXIgdGhhbgogICAgIC8vIG9yIGVxdWFsIHRv
IHRoZSB2ZWN0b3IgbGVuZ3RoLgotICAgIEFTU0VSVChpID49IG1fYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgQVNTRVJUKGkgPj0gYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAg
ICAgCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAKICAgICBpZiAoaSA+PSBNQVhfQVJS
QVlfSU5ERVggLSAxCiAgICAgICAgIHx8IChpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgKLSAg
ICAgICAgICAgICYmICFpc0RlbnNlRW5vdWdoRm9yVmVjdG9yKGksIGNvdW50RWxlbWVudHM8aW5k
ZXhpbmdTaGFwZT4oYnV0dGVyZmx5KCkpKSkKLSAgICAgICAgfHwgaW5kZXhJc1N1ZmZpY2llbnRs
eUJleW9uZExlbmd0aEZvclNwYXJzZU1hcChpLCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkp
KSB7CisgICAgICAgICAgICAmJiAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBjb3VudEVsZW1l
bnRzPGluZGV4aW5nU2hhcGU+KGJ1dHRlcmZseSkpKQorICAgICAgICB8fCBpbmRleElzU3VmZmlj
aWVudGx5QmV5b25kTGVuZ3RoRm9yU3BhcnNlTWFwKGksIGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpKSB7CiAgICAgICAgIEFTU0VSVChpIDw9IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgICAgIGVu
c3VyZUFycmF5U3RvcmFnZVNsb3codm0pOwogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSBhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKHZtKTsKQEAgLTE5MzIsMjQgKzE5NDEsMjUgQEAg
dm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3RvckxlbgogICAgIH0KIAogICAgIGVu
c3VyZUxlbmd0aCh2bSwgaSArIDEpOworICAgIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0
aGlzKTsKIAotICAgIFJFTEVBU0VfQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsK
ICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKICAgICBjYXNlIEludDMyU2hhcGU6CiAgICAg
ICAgIEFTU0VSVCh2YWx1ZS5pc0ludDMyKCkpOwotICAgICAgICBtX2J1dHRlcmZseS0+Y29udGln
dW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgIGJ1
dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIERvdWJsZVNoYXBlOiB7CiAg
ICAgICAgIEFTU0VSVCh2YWx1ZS5pc051bWJlcigpKTsKICAgICAgICAgZG91YmxlIHZhbHVlQXNE
b3VibGUgPSB2YWx1ZS5hc051bWJlcigpOwogICAgICAgICBBU1NFUlQodmFsdWVBc0RvdWJsZSA9
PSB2YWx1ZUFzRG91YmxlKTsKLSAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUo
KVtpXSA9IHZhbHVlQXNEb3VibGU7CisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpW2ldID0gdmFsdWVBc0RvdWJsZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaV0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBkZWZhdWx0OgpAQCAtMjIyMyw3ICsyMjMzLDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0bwogICAgICAgICAKICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElO
R19UWVBFUzogewogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAgaWYgKGkg
PCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8IG1fYnV0
dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBp
LCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgICAgICByZXR1cm4gcHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVl
LCBhdHRyaWJ1dGVzLCBtb2RlLCBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZSh2bSkpOwogICAg
ICAgICB9CkBAIC0yMjM3LDcgKzIyNDcsNyBAQCBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3RvCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBF
UzogewogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAgICAgaWYgKGkgPCBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShleGVjLCBpLCB2YWx1
ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhpc3RzQW5kRW50ZXJEaWN0
aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRy
aWJ1dGVzLCBtb2RlLCBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAgICAg
fQpAQCAtMjI1Niw3ICsyMjY2LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0bwogICAgICAgICAKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHku
Z2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcHV0RGly
ZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVl
LCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rp
b25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJp
YnV0ZXMsIG1vZGUsIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0pKTsKICAgICAg
ICAgfQpAQCAtMjI2Niw3ICsyMjc2LDcgQEAgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0bwogCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0
dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFnZUV4aXN0c0FuZEVudGVyRGljdGlvbmFy
eUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwdXREaXJlY3RJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0
dHJpYnV0ZXMsIG1vZGUsIGFycmF5U3RvcmFnZSgpKTsKQEAgLTIzNDcsOCArMjM1Nyw4IEBAIEFM
V0FZU19JTkxJTkUgdW5zaWduZWQgSlNPYmplY3Q6OmdldE5ld1YKICAgICB1bnNpZ25lZCBsZW5n
dGg7CiAgICAgCiAgICAgaWYgKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkg
ewotICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7Ci0g
ICAgICAgIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdmVj
dG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKKyAgICAg
ICAgbGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKTsKICAgICB9
IGVsc2UgewogICAgICAgICB2ZWN0b3JMZW5ndGggPSAwOwogICAgICAgICBsZW5ndGggPSAwOwpA
QCAtMjQ1NCwyNSArMjQ2NCwyOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0
aChWTSYgCiAKIHZvaWQgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCB1bnNpZ25l
ZCBsZW5ndGgpCiB7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQo
dGhpcyk7CisgICAgCiAgICAgQVNTRVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAg
QVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0ludDMyKGluZGV4aW5n
VHlwZSgpKSB8fCBoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc1VuZGVjaWRlZChpbmRl
eGluZ1R5cGUoKSkpOwotICAgIEFTU0VSVChsZW5ndGggPiBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOworICAgIEFTU0VSVChsZW5ndGggPiBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsK
ICAgICAKICAgICB1bnNpZ25lZCBuZXdWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbigKICAgICAgICAg
bGVuZ3RoIDw8IDEsCiAgICAgICAgIE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpOwotICAgIHVu
c2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAg
ICB1bnNpZ25lZCBvbGRWZWN0b3JMZW5ndGggPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOwog
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRo
aXMsIG1fYnV0dGVyZmx5LT5ncm93QXJyYXlSaWdodCgKKyAgICBidXR0ZXJmbHkgPSBidXR0ZXJm
bHktPmdyb3dBcnJheVJpZ2h0KAogICAgICAgICB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLAogICAgICAgICBvbGRWZWN0b3JMZW5n
dGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpLAotICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpOworICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVy
Zmx5KTsKIAotICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3Ro
KTsKKyAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogCiAg
ICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKVtpXSA9IFBOYU47Cisg
ICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKClbaV0gPSBQTmFO
OwogICAgIH0KIH0KIApAQCAtMjQ4NSwxMCArMjQ5OCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpyZWFs
bG9jYXRlQW5kU2hyaW5rQnV0dGVyCiAgICAgQVNTRVJUKCFtX2J1dHRlcmZseS0+aW5kZXhpbmdI
ZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKCkpKTsKIAogICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LT5y
ZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZv
cihsZW5ndGgpKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCh0aGlzKS0+cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3Jh
Z2U6OnNpemVGb3IobGVuZ3RoKSk7CiAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdC
dXR0ZXJmbHkpOwotICAgIG1fYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsKLSAg
ICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgbmV3QnV0dGVyZmx5
LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsKKyAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xl
bmd0aChsZW5ndGgpOwogfQogCiBCdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3Rv
cmFnZShWTSYgdm0sIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKQEAgLTI0OTgsNyAr
MjUxMSw3IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWcKICAgICAv
LyBJdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24gbm90IHJlbHkgb24gc3RydWN0dXJl
KCksIGZvciB0aGUgcHJvcGVydHkKICAgICAvLyBjYXBhY2l0eSwgc2luY2Ugd2UgbWlnaHQgaGF2
ZSBhbHJlYWR5IG11dGF0ZWQgdGhlIHN0cnVjdHVyZSBpbi1wbGFjZS4KICAgICAKLSAgICByZXR1
cm4gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dQcm9wZXJ0eVN0b3JhZ2UobV9idXR0ZXJmbHkuZ2V0
KCksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUodm0pLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICByZXR1
cm4gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dQcm9wZXJ0eVN0b3JhZ2UobV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLCB2bSwgdGhpcywgc3RydWN0dXJlKHZtKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7CiB9CiAK
IGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKQEAgLTI3ODUsNyArMjc5OCw3IEBAIHVpbnQzMl90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxl
TGVuZ3RoKEUKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IG9iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KG9iamVjdCktPmFycmF5U3RvcmFnZSgpOwogICAg
ICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJDYWxs
RnJhbWUuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIKICNpbmNsdWRlICJDb21tb25JZGVudGlm
aWVycy5oIgotI2luY2x1ZGUgIkNvcHlXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlICJDb3B5QmFy
cmllci5oIgogI2luY2x1ZGUgIkN1c3RvbUdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRlZmVy
R0MuaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0xMzEsMTQgKzEzMSwxNCBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBpZiAoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkK
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNM
ZW5ndGgoKTsKICAgICB9CiAgICAgICAgIAogICAgIHVuc2lnbmVkIGdldFZlY3Rvckxlbmd0aCgp
CiAgICAgewogICAgICAgICBpZiAoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgp
KSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0
b3JMZW5ndGgoKTsKICAgICB9CiAgICAgICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpOwpAQCAtMTgxLDIzICsxODEsMjQgQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgY2FuR2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAgICAgeworICAgICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNo
IChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBF
UzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoK
ICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAg
IHJldHVybiBpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICYmIG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV07CisgICAgICAgICAgICByZXR1cm4gaSA8IGJ1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkgJiYgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV07CiAgICAgICAgIGNhc2UgQUxM
X0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgaWYgKGkgPj0gbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgaWYgKGkgPj0gYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBk
b3VibGUgdmFsdWUgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAg
ICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAg
ICAgICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBpIDwg
bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgcmV0dXJuIGkgPCBi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSAmJiBidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yMDYsMTUgKzIwNywxNiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIEpTVmFsdWUgZ2V0
SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCiAgICAgeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5
cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAg
ICAgIHJldHVybiBqc051bWJlcihtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpLmFz
SW50MzIoKSk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaV0uZ2V0KCkuYXNJbnQzMigpKTsKICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIGJ1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLmdldCgpOwogICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZShK
U1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0p
OwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAg
ICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0
KCk7CisgICAgICAgICAgICByZXR1cm4gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0
b3JbaV0uZ2V0KCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTIyMywz
MiArMjI1LDMzIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgSlNWYWx1ZSB0cnlHZXRJbmRleFF1
aWNrbHkodW5zaWduZWQgaSkgY29uc3QKICAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlw
ZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBj
YXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBpZiAoaSA8
IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAg
IGlmIChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0ludDMyKCkgfHwgIXJlc3VsdCk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAg
aWYgKGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
aSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgaWYgKGkg
Pj0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgaWYgKGkgPj0gYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGRvdWJsZSByZXN1bHQgPSBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwor
ICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldOwogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHQpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJs
ZSwgcmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgotICAgICAgICAgICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKGkg
PCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNzYsNiArMjc5LDcgQEAgcHVibGljOgogICAg
ICAgICAKICAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKKyAg
ICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAg
ICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5E
RVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoK
QEAgLTI4NSwxMSArMjg5LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6
CiAgICAgICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgICAgICAgICAgcmV0dXJu
IGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgICAgICByZXR1cm4gaSA8
IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xv
d1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlOgotICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnZlY3Rvckxlbmd0aCgpCi0gICAgICAgICAgICAgICAgJiYgISFtX2J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yW2ldOworICAgICAgICAgICAgcmV0dXJuIGkgPCBidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKQorICAgICAgICAgICAgICAgICYmICEhYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMzA2LDcgKzMxMCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBBTExf
RE9VQkxFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7Cisg
ICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3Ro
KCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE1LDkgKzMxOSwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KFZNJiB2bSwgdW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2KQogICAgIHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsK
ICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFT
U0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VS
VChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoIXYuaXNJ
bnQzMigpKSB7CiAgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGVPckNvbnRpZ3Vv
dXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMzI1LDE0ICszMzAsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgRkFMTFRIUk9V
R0g7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzogewotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkp
OwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQodm0sIHRoaXMs
IHYpOwotICAgICAgICAgICAgaWYgKGkgPj0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQot
ICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOworICAg
ICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAg
ICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldCh2bSwgdGhpcywgdik7CisgICAgICAg
ICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAgICAg
IGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAg
ICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAg
ICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAg
IGlmICghdi5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29u
dGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CkBAIC0zNDIsMTMgKzM0NywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
Y29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBt
X2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gdmFsdWU7Ci0gICAgICAgICAgICBp
ZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgbV9i
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICBidXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZhbHVlOworICAgICAgICAgICAgaWYgKGkgPj0gYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1
YmxpY0xlbmd0aChpICsgMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBB
cnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OwogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB4ID0gc3RvcmFnZS0+bV92ZWN0
b3JbaV07CiAgICAgICAgICAgICBKU1ZhbHVlIG9sZCA9IHguZ2V0KCk7CiAgICAgICAgICAgICB4
LnNldCh2bSwgdGhpcywgdik7CkBAIC0zNzEsMTQgKzM3NiwxNSBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGluaXRpYWxpemVJbmRleChWTSYgdm0sIHVuc2lnbmVkIGksIEpTVmFsdWUgdiwgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSkg
ewogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAg
ICAgIHNldEluZGV4UXVpY2tseVRvVW5kZWNpZGVkKHZtLCBpLCB2KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7
Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAg
ICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAg
ICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlm
ICghdi5pc0ludDMyKCkpIHsKICAgICAgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZU9y
Q29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTM4NiwxNCArMzkyLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEZB
TExUSFJPVUdIOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpKTsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KHZtLCB0
aGlzLCB2KTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KHZtLCB0aGlzLCB2KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9J
TkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7
CiAgICAgICAgICAgICBpZiAoIXYuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgICAgIGNvbnZl
cnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJbmRleCh2bSwgaSwgdik7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDAzLDExICs0MDksMTEgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXNXaGlsZVBlcmZvcm1pbmdTZXRJ
bmRleCh2bSwgaSwgdik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHZhbHVlOwor
ICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSog
c3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICBBU1NFUlQo
aSA8IHN0b3JhZ2UtPmxlbmd0aCgpKTsKICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+
bV9udW1WYWx1ZXNJblZlY3Rvcik7CiAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXQodm0sIHRoaXMsIHYpOwpAQCAtNDI4LDcgKzQzNCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgICAgIHJldHVybiAhIW1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXA7
CisgICAgICAgICAgICByZXR1cm4gISFtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFn
ZSgpLT5tX3NwYXJzZU1hcDsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NDUs
NyArNDUxLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CisgICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2UoKS0+aW5TcGFyc2VNb2RlKCk7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTUwLDExICs1NTYsMTEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZVVuc2FmZSgpOwogICAgIH0KICAgICAgICAgCi0g
ICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZs
eS5nZXQoKTsgfQotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJm
bHkuZ2V0KCk7IH0KKyAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKTsgfQorICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkg
eyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOyB9CiAgICAgICAgIAotICAgIENvbnN0UHJv
cGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZs
eS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KLSAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3Rv
cmFnZSgpIHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQorICAgIENv
bnN0UHJvcGVydHlTdG9yYWdlIG91dE9mTGluZVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1
dHRlcmZseS5nZXQodGhpcyktPnByb3BlcnR5U3RvcmFnZSgpOyB9CisgICAgUHJvcGVydHlTdG9y
YWdlIG91dE9mTGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPnBy
b3BlcnR5U3RvcmFnZSgpOyB9CiAKICAgICBjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KiBsb2NhdGlvbkZvck9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0CiAgICAgewpA
QCAtNjU2LDcgKzY2Miw3IEBAIHB1YmxpYzoKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJl
SW50MzIoVk0mIHZtKQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShoYXNJbnQzMihpbmRleGlu
Z1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50
MzIoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3Vv
dXNJbnQzMigpOwogICAgICAgICAgICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVJbnQzMlNsb3co
dm0pOwogICAgIH0KQEAgLTY2OCw3ICs2NzQsNyBAQCBwdWJsaWM6CiAgICAgQ29udGlndW91c0Rv
dWJsZXMgZW5zdXJlRG91YmxlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFz
RG91YmxlKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKTsKICAgICAgICAgICAgIAogICAgICAgICByZXR1cm4g
ZW5zdXJlRG91YmxlU2xvdyh2bSk7CiAgICAgfQpAQCAtNjc4LDcgKzY4NCw3IEBAIHB1YmxpYzoK
ICAgICBDb250aWd1b3VzSlNWYWx1ZXMgZW5zdXJlQ29udGlndW91cyhWTSYgdm0pCiAgICAgewog
ICAgICAgICBpZiAoTElLRUxZKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpKSkKLSAgICAg
ICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91cygpOwogICAgICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBlbnN1cmVDb250aWd1b3VzU2xvdyh2bSk7CiAgICAgfQpAQCAtNjkwLDcg
KzY5Niw3IEBAIHB1YmxpYzoKICAgICBBcnJheVN0b3JhZ2UqIGVuc3VyZUFycmF5U3RvcmFnZShW
TSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0FueUFycmF5U3RvcmFnZShpbmRl
eGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3Rv
cmFnZSgpOwogCiAgICAgICAgIHJldHVybiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KHZtKTsKICAg
ICB9CkBAIC03MzYsNyArNzQyLDcgQEAgcHJvdGVjdGVkOgogICAgIEFycmF5U3RvcmFnZSogYXJy
YXlTdG9yYWdlKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNBbnlBcnJheVN0b3JhZ2UoaW5k
ZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KTsKKyAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7
CiAgICAgfQogICAgICAgICAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gcHJlZGlj
YXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKQEAgLTc0NSw3ICs3NTEsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgewogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTgwOSwxMiArODE1
LDEyIEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJS
QVlfSU5ERVgpOwogICAgICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkg
fHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkg
fHwgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
aWYgKG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkKKworICAgICAgICBpZiAo
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSA8IGxlbmd0aCkKICAgICAgICAg
ICAgIGVuc3VyZUxlbmd0aFNsb3codm0sIGxlbmd0aCk7CiAgICAgICAgICAgICAKLSAgICAgICAg
aWYgKG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSA8IGxlbmd0aCkKLSAgICAgICAgICAgIG1f
YnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICAgICAgaWYgKG1fYnV0dGVy
Zmx5LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCkgPCBsZW5ndGgpCisgICAgICAgICAgICBtX2J1
dHRlcmZseS5nZXQodGhpcyktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwogICAgIH0KICAgICAg
ICAgCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3YW50IHRvIHNocmluayB0aGUgYnV0dGVyZmx5
IGJhY2tpbmcgc3RvcmUsIGFuZCB5b3UncmUKQEAgLTg3NCw3ICs4ODAsNyBAQCBwcml2YXRlOgog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEFycmF5U3RvcmFnZSogZW5zdXJlQXJyYXlTdG9yYWdlU2xv
dyhWTSYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ29weVdyaXRlQmFycmllcjxCdXR0ZXJmbHk+IG1f
YnV0dGVyZmx5OworICAgIENvcHlCYXJyaWVyPEJ1dHRlcmZseT4gbV9idXR0ZXJmbHk7CiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9wYWRkaW5nOwpAQCAt
MTM0OCw3ICsxMzU0LDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRU
cgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0
dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBBU1NFUlQoIXZh
bHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQodGhpcyk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9m
TGluZVN0b3JhZ2UoKSkKICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3Jh
Z2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3Vn
Z2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0LmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEpTU2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1fc2V0RGF0YSh2bSkKKyAgICAg
ICAgLCBtX3NldERhdGEodm0sIHRoaXMpCiAgICAgewogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuaAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsy
Niw3IEBACiAjaWZuZGVmIE1hcERhdGFfaAogI2RlZmluZSBNYXBEYXRhX2gKIAorI2luY2x1ZGUg
IkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFw
SW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CkBAIC05NCw3ICs5NSw3
IEBAIHB1YmxpYzoKICAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICB9OwogCi0gICAgTWFwRGF0
YUltcGwoVk0mKTsKKyAgICBNYXBEYXRhSW1wbChWTSYsIEpTQ2VsbCogb3duZXIpOwogCiAgICAg
dm9pZCBzZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25lciwgS2V5VHlwZSwgSlNWYWx1ZSk7CiAg
ICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgS2V5VHlwZSk7CkBAIC0xMzYsMTYgKzEzNywxNyBA
QCBwcml2YXRlOgogICAgIGludDMyX3QgbV9jYXBhY2l0eTsKICAgICBpbnQzMl90IG1fc2l6ZTsK
ICAgICBpbnQzMl90IG1fZGVsZXRlZENvdW50OwotICAgIEVudHJ5KiBtX2VudHJpZXM7CisgICAg
SlNDZWxsKiBtX293bmVyOworICAgIENvcHlCYXJyaWVyPEVudHJ5PiBtX2VudHJpZXM7CiAgICAg
V2Vha0dDTWFwPEpTSXRlcmF0b3IqLCBKU0l0ZXJhdG9yPiBtX2l0ZXJhdG9yczsKIH07CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgotQUxXQVlTX0lOTElO
RSBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvcj46Ok1hcERhdGFJbXBsKFZNJiB2bSkKK0FM
V0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+OjpNYXBEYXRhSW1wbChW
TSYgdm0sIEpTQ2VsbCogb3duZXIpCiAgICAgOiBtX2NhcGFjaXR5KDApCiAgICAgLCBtX3NpemUo
MCkKICAgICAsIG1fZGVsZXRlZENvdW50KDApCi0gICAgLCBtX2VudHJpZXMobnVsbHB0cikKKyAg
ICAsIG1fb3duZXIob3duZXIpCiAgICAgLCBtX2l0ZXJhdG9ycyh2bSkKIHsKIH0KQEAgLTE4Miw3
ICsxODQsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YUltcGw8RW50cnksIEpTCiB7CiAg
ICAgaWYgKCFlbnN1cmVTbG90KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBFbnRyeSog
ZW50cnkgPSAmbV9tYXBEYXRhLT5tX2VudHJpZXNbbV9pbmRleF07CisgICAgRW50cnkqIGVudHJ5
ID0gJm1fbWFwRGF0YS0+bV9lbnRyaWVzLmdldChtX21hcERhdGEtPm1fb3duZXIpW21faW5kZXhd
OwogICAgIHBhaXIgPSBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPihlbnRyeS0+
a2V5KCkuZ2V0KCksIGVudHJ5LT52YWx1ZSgpLmdldCgpKTsKICAgICBtX2luZGV4ICs9IDE7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yMDQsNyArMjA2LDcgQEAgQUxXQVlTX0lOTElORSBpbnQzMl90
IE1hcERhdGFJbXBsPEVudHJ5LAogICAgIGlmIChpc0ZpbmlzaGVkKCkpCiAgICAgICAgIHJldHVy
biBtX2luZGV4OwogCi0gICAgRW50cnkqIGVudHJpZXMgPSBtX21hcERhdGEtPm1fZW50cmllczsK
KyAgICBFbnRyeSogZW50cmllcyA9IG1fbWFwRGF0YS0+bV9lbnRyaWVzLmdldChtX21hcERhdGEt
Pm1fb3duZXIpOwogICAgIHNpemVfdCBlbmQgPSBtX21hcERhdGEtPm1fc2l6ZTsKICAgICB3aGls
ZSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZGV4KSA8IGVuZCAmJiAhZW50cmllc1ttX2luZGV4
XS5rZXkoKSkKICAgICAgICAgbV9pbmRleCsrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw3IEBAIGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJh
dG8KICAgICBtX2NhcGFjaXR5ID0gMDsKICAgICBtX3NpemUgPSAwOwogICAgIG1fZGVsZXRlZENv
dW50ID0gMDsKLSAgICBtX2VudHJpZXMgPSBudWxscHRyOworICAgIG1fZW50cmllcy5jbGVhcigp
OwogICAgIG1faXRlcmF0b3JzLmZvckVhY2goW10oSlNJdGVyYXRvciogaXRlcmF0b3IsIEpTSXRl
cmF0b3IqKSB7CiAgICAgICAgIGl0ZXJhdG9yLT5pdGVyYXRvckRhdGEoKS0+ZGlkUmVtb3ZlQWxs
RW50cmllcygpOwogICAgIH0pOwpAQCAtNjAsMjUgKzYwLDI1IEBAIGlubGluZSBFbnRyeSogTWFw
RGF0YUltcGw8RW50cnksIEpTSXRlcmEKICAgICAgICAgYXV0byBpdGVyID0gbV9zdHJpbmdLZXll
ZFRhYmxlLmZpbmQoYXNTdHJpbmcoa2V5LnZhbHVlKS0+dmFsdWUoZXhlYykuaW1wbCgpKTsKICAg
ICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpKQogICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKKyAgICAg
ICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2l0ZXItPnZhbHVlXTsKICAgICB9CiAg
ICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKSB7CiAgICAgICAgIGF1dG8gaXRlciA9IG1fc3lt
Ym9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlk
KCkpOwogICAgICAgICBpZiAoaXRlciA9PSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVd
OworICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRlci0+dmFsdWVdOwog
ICAgIH0KICAgICBpZiAoa2V5LnZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgIGF1dG8gaXRlciA9
IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXkudmFsdWUuYXNDZWxsKCkpOwogICAgICAgICBpZiAo
aXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKKyAgICAgICAgcmV0dXJuICZt
X2VudHJpZXMuZ2V0KG1fb3duZXIpW2l0ZXItPnZhbHVlXTsKICAgICB9CiAKICAgICBhdXRvIGl0
ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsK
ICAgICBpZiAoaXRlciA9PSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOworICAgIHJldHVybiAmbV9l
bnRyaWVzLmdldChtX293bmVyKVtpdGVyLT52YWx1ZV07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgpAQCAtOTMsMTQgKzkzLDE0IEBAIGlubGluZSBF
bnRyeSogTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmEKIHsKICAgICB0eXBlbmFtZSBNYXA6Oml0
ZXJhdG9yIGxvY2F0aW9uID0gbWFwLmZpbmQoa2V5KTsKICAgICBpZiAobG9jYXRpb24gIT0gbWFw
LmVuZCgpKQotICAgICAgICByZXR1cm4gJm1fZW50cmllc1tsb2NhdGlvbi0+dmFsdWVdOworICAg
ICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbbG9jYXRpb24tPnZhbHVlXTsKIAog
ICAgIGlmICghZW5zdXJlU3BhY2VGb3JBcHBlbmQoZXhlYywgb3duZXIpKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIGF1dG8gcmVzdWx0ID0gbWFwLmFkZChrZXksIG1fc2l6ZSk7CiAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmlzTmV3RW50cnkpOwotICAgIEVudHJ5KiBlbnRyeSA9ICZtX2Vu
dHJpZXNbbV9zaXplKytdOworICAgIEVudHJ5KiBlbnRyeSA9ICZtX2VudHJpZXMuZ2V0KG1fb3du
ZXIpW21fc2l6ZSsrXTsKICAgICBuZXcgKGVudHJ5KSBFbnRyeSgpOwogICAgIGVudHJ5LT5zZXRL
ZXkoZXhlYy0+dm0oKSwgb3duZXIsIGtleVZhbHVlLnZhbHVlKTsKICAgICByZXR1cm4gZW50cnk7
CkBAIC0xNjQsNyArMTY0LDcgQEAgaW5saW5lIGJvb2wgTWFwRGF0YUltcGw8RW50cnksIEpTSXRl
cmF0bwogICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwogICAgICAgICBtX3ZhbHVlS2V5
ZWRUYWJsZS5yZW1vdmUoaXRlcik7CiAgICAgfQotICAgIG1fZW50cmllc1tsb2NhdGlvbl0uY2xl
YXIoKTsKKyAgICBtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2xvY2F0aW9uXS5jbGVhcigpOwogICAg
IG1fZGVsZXRlZENvdW50Kys7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNzYsNyArMTc2LDcg
QEAgaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAgIGludDMyX3Qg
bmV3RW5kID0gMDsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBhY2l0eSA+IDApOwogICAgIGZv
ciAoaW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7Ci0gICAgICAgIEVudHJ5JiBlbnRy
eSA9IG1fZW50cmllc1tpXTsKKyAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzLmdldFdp
dGhvdXRCYXJyaWVyKClbaV07CiAgICAgICAgIGlmICghZW50cnkua2V5KCkpIHsKICAgICAgICAg
ICAgIG1faXRlcmF0b3JzLmZvckVhY2goW25ld0VuZF0oSlNJdGVyYXRvciogaXRlcmF0b3IsIEpT
SXRlcmF0b3IqKSB7CiAgICAgICAgICAgICAgICAgaXRlcmF0b3ItPml0ZXJhdG9yRGF0YSgpLT5k
aWRSZW1vdmVFbnRyeShuZXdFbmQpOwpAQCAtMTk1LDIwICsxOTUsMjAgQEAgaW5saW5lIHZvaWQg
TWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0bwogCiAgICAgLy8gRml4dXAgZm9yIHRoZSBoYXNo
bWFwcwogICAgIGZvciAoYXV0byBwdHIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIg
IT0gbV92YWx1ZUtleWVkVGFibGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHItPnZhbHVlID0g
bV9lbnRyaWVzW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICAgICAgcHRy
LT52YWx1ZSA9IG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpW3B0ci0+dmFsdWVdLmtleSgp
LmdldCgpLmFzSW50MzIoKTsKICAgICBmb3IgKGF1dG8gcHRyID0gbV9jZWxsS2V5ZWRUYWJsZS5i
ZWdpbigpOyBwdHIgIT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCi0gICAgICAgIHB0
ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwor
ICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKClbcHRyLT52
YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwogICAgIGZvciAoYXV0byBwdHIgPSBtX3N0cmlu
Z0tleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKTsgKytw
dHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0
KCkuYXNJbnQzMigpOworICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldFdpdGhvdXRC
YXJyaWVyKClbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwogICAgIGZvciAoYXV0
byBwdHIgPSBtX3N5bWJvbEtleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fc3ltYm9sS2V5ZWRU
YWJsZS5lbmQoKTsgKytwdHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52
YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOworICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRy
aWVzLmdldFdpdGhvdXRCYXJyaWVyKClbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigp
OwogCiAgICAgQVNTRVJUKChtX3NpemUgLSBuZXdFbmQpID09IG1fZGVsZXRlZENvdW50KTsKICAg
ICBtX2RlbGV0ZWRDb3VudCA9IDA7CiAKICAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CiAg
ICAgbV9zaXplID0gbmV3RW5kOwotICAgIG1fZW50cmllcyA9IGRlc3RpbmF0aW9uOworICAgIG1f
ZW50cmllcy5zZXRXaXRob3V0QmFycmllcihkZXN0aW5hdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgpAQCAtMjE3LDkgKzIxNyw5IEBAIGlu
bGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG8KICAgICBBU1NFUlQoIXNob3Vs
ZFBhY2soKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobmV3Q2FwYWNpdHkgPiAwKTsKICAgICBBU1NF
UlQobmV3Q2FwYWNpdHkgPj0gbV9jYXBhY2l0eSk7Ci0gICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBt
X2VudHJpZXMsIHNpemVvZihFbnRyeSkgKiBtX3NpemUpOworICAgIG1lbWNweShkZXN0aW5hdGlv
biwgbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKCksIHNpemVvZihFbnRyeSkgKiBtX3NpemUp
OwogICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKLSAgICBtX2VudHJpZXMgPSBkZXN0aW5h
dGlvbjsKKyAgICBtX2VudHJpZXMuc2V0V2l0aG91dEJhcnJpZXIoZGVzdGluYXRpb24pOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KQEAgLTIzNiw2
ICsyMzYsOCBAQCBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gTWFwRGF0YUltcGw8RW50cnksCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNf
Y2FzdDxFbnRyeSo+KG5ld1N0b3JhZ2UpOworICAgIC8vIERvIGEgcmVhZCBiYXJyaWVyIHRvIGVu
c3VyZSB0aGF0IG1fZW50cmllcyBwb2ludHMgdG8gdG8tc3BhY2UgZm9yIHRoZSByZW1haW5kZXIg
b2YgdGhpcyBHQyBlcG9jaC4KKyAgICBtX2VudHJpZXMuZ2V0KG1fb3duZXIpOyAKICAgICBpZiAo
c2hvdWxkUGFjaygpKQogICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRy
aWVzLCByZXF1aXJlZFNpemUpOwogICAgIGVsc2UKQEAgLTI0Nyw3ICsyNDksNyBAQCBpbmxpbmUg
Q2hlY2tlZEJvb2xlYW4gTWFwRGF0YUltcGw8RW50cnksCiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRy
eSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KIGlubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBK
U0l0ZXJhdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKLSAgICBFbnRyeSogZW50cmllcyA9IG1fZW50cmllczsKKyAgICBFbnRyeSogZW50
cmllcyA9IG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpOwogICAgIGlmICghZW50cmllcykK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2RlbGV0ZWRDb3VudCkgewpAQCAtMjYxLDE0ICsy
NjMsMTQgQEAgaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAgICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtu
b3duPio+KCZlbnRyaWVzWzBdKSwgbV9zaXplICogKHNpemVvZihFbnRyeSkgLyBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkpOwogICAgIH0KIAotICAgIHZpc2l0b3IuY29weUxhdGVyKG93
bmVyLCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIGVudHJpZXMsIGNhcGFjaXR5SW5CeXRlcygp
KTsKKyAgICB2aXNpdG9yLmNvcHlMYXRlcihvd25lciwgTWFwQmFja2luZ1N0b3JlQ29weVRva2Vu
LCBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKSwgY2FwYWNpdHlJbkJ5dGVzKCkpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgSlNJdGVyYXRvcj4KIGlubGluZSB2
b2lkIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6Y29weUJhY2tpbmdTdG9yZShDb3B5
VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQogewotICAgIGlmICh0b2tlbiA9PSBN
YXBCYWNraW5nU3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShtX2Vu
dHJpZXMpKSB7Ci0gICAgICAgIEVudHJ5KiBvbGRFbnRyaWVzID0gbV9lbnRyaWVzOworICAgIGlm
ICh0b2tlbiA9PSBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hv
dWxkQ29weShtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKSkpIHsKKyAgICAgICAgRW50cnkq
IG9sZEVudHJpZXMgPSBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKTsKICAgICAgICAgRW50
cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdT
cGFjZShjYXBhY2l0eUluQnl0ZXMoKSkpOwogICAgICAgICBpZiAoc2hvdWxkUGFjaygpKQogICAg
ICAgICAgICAgcmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUobmV3RW50cmllcywgbV9jYXBhY2l0
eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lv
biAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwMyw2ICsyMDMsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlv
blN0cmluZzsKICAgICB2KGJvb2wsIGNyZWF0ZVByZUhlYWRlcnMsIHRydWUsIG51bGxwdHIpIFwK
ICAgICB2KGJvb2wsIGVuYWJsZU1vdkhpbnRSZW1vdmFsLCB0cnVlLCBudWxscHRyKSBcCiAgICAg
dihib29sLCBlbmFibGVPYmplY3RBbGxvY2F0aW9uU2lua2luZywgdHJ1ZSwgbnVsbHB0cikgXAor
ICAgIHYoYm9vbCwgZW5hYmxlQ29weUJhcnJpZXJPcHRpbWl6YXRpb24sIHRydWUsIG51bGxwdHIp
IFwKICAgICBcCiAgICAgdihib29sLCBlbmFibGVDb25jdXJyZW50SklULCB0cnVlLCAiYWxsb3dz
IHRoZSBERkcgLyBGVEwgY29tcGlsYXRpb24gaW4gdGhyZWFkcyBvdGhlciB0aGFuIHRoZSBleGVj
dXRpbmcgSlMgdGhyZWFkIikgXAogICAgIHYodW5zaWduZWQsIG51bWJlck9mREZHQ29tcGlsZXJU
aHJlYWRzLCBjb21wdXRlTnVtYmVyT2ZXb3JrZXJUaHJlYWRzKDIsIDIpIC0gMSwgbnVsbHB0cikg
XAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262709</attachid>
            <date>2015-10-08 14:23:31 -0700</date>
            <delta_ts>2015-10-12 13:00:06 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>186184</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwNzQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5OSBA
QAorMjAxNS0xMC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdDIHNob3VsZCBoYXZlIGEgQmFrZXIgYmFycmllciBmb3IgY29uY3VycmVudCBjb3B5aW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk4NTIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMg
YSBCYWtlci1zdHlsZSByZWFkIGJhcnJpZXIgdG8gY29waWVkIHNwYWNlIGFjY2Vzc2VzLiBUaGlz
IGJhcnJpZXIgaW5jdXJzIHNvbWUgb3ZlcmhlYWQKKyAgICAgICAgKDAlLTIlIGRlcGVuZGluZyBv
biBiZW5jaG1hcmsgc3VpdGUpLCBidXQgd2hhdCBpdCBidXlzIGlzIHRoZSBhYmlsaXR5IHRvIG1h
a2UgdGhlIEdDIGNvcHkgcGhhc2UKKyAgICAgICAgY29uY3VycmVudC4KKworICAgICAgICBUaGUg
YmFycmllciByZWxpZXMgb24gY29waWVkIHNwYWNlIHBvaW50ZXJzIGhhdmluZyB0d28gInNwYWNl
IGJpdHMiIGluIHRoZSBsb3cgcG9pbnRlciBiaXRzLiBUaGUKKyAgICAgICAgc3BhY2UgYml0cyBp
bmRpY2F0ZSB3aGV0aGVyIHRoZSBiYWNraW5nIHN0b3JlIGlzIGJlaW5nIGNvcGllZCByaWdodCBu
b3cgb3Igbm90LCBhbmQgaWYgaXQgaXMgYmVpbmcKKyAgICAgICAgY29waWVkLCB3aGF0IHN0YWdl
IG9mIGNvcHlpbmcgaXRzIGluLiBUd28gYmFycmllciB2YXJpYW50cyBhcmUgc3VwcG9ydGVkOgor
CisgICAgICAgIFJlYWQgb25seSBiYXJyaWVyOiBpZiB5b3UgbG9hZCBhIGJhY2tpbmcgc3RvcmUg
YW5kIGltbWVkaWF0ZWx5IGxvYWQgZnJvbSBpdCB3aXRob3V0IGRvaW5nIGFueXRoaW5nCisgICAg
ICAgIGVsc2UsIHlvdSBjYW4ganVzdCBtYXNrIG9mZiB0aGUgYml0cy4gSW4gdGhlIHdvcnN0IGNh
c2UsIHlvdSdsbCBnZXQgdGhlIG9sZCBiYWNraW5nIHN0b3JlIHdoaWxlCisgICAgICAgIHNvbWUg
Y29weWluZyB0aHJlYWQgaXMgYWxyZWFkeSBhbGxvY2F0aW5nIGFuZCBwb3B1bGF0aW5nIHRoZSBu
ZXcgdmVyc2lvbiBvZiB0aGUgYmFja2luZyBzdG9yZS4gQnV0CisgICAgICAgIGluIHRoYXQgY2Fz
ZSwgZm9yd2FyZGluZyB0byB0aGUgbmV3IGJhY2tpbmcgc3RvcmUgd2lsbCBub3QgZW5hYmxlIHlv
dSB0byBsb2FkIGEgbW9yZSB1cC10by1kYXRlCisgICAgICAgIHZhbHVlIGZyb20gdGhlIGJhY2tp
bmcgc3RvcmUuIFNvLCBqdXN0IG1hc2tpbmcgdGhlIGJpdHMgaXMgZW5vdWdoLgorCisgICAgICAg
IE5vcm1hbCBiYXJyaWVyOiBpZiB0aGUgc3BhY2UgYml0cyBhcmUgbm9uLXplcm8sIGNhbGwgYSBz
bG93IHBhdGguIFRoZSBzbG93IHBhdGggd2lsbCBlaXRoZXIgZG8KKyAgICAgICAgbm90aGluZyAo
aWYgdGhlIGNvcHkgcGhhc2UgaGFzbid0IHN0YXJ0ZWQgeWV0KSwgb3IgaXQgd2lsbCBjb3B5IHRo
ZSBiYWNraW5nIHN0b3JlIGFuZCB1cGRhdGUgdGhlCisgICAgICAgIHBvaW50ZXIgKGlmIHRoZSBj
b3B5IHBoYXNlIGhhc24ndCBnb3R0ZW4gYXJvdW5kIHRvIGNvcHlpbmcgdGhpcyBwYXJ0aWN1bGFy
IGJhY2tpbmcgc3RvcmUpLCBvciBpdAorICAgICAgICB3aWxsIHdhaXQgZm9yIHRoZSBjb3B5aW5n
IHRocmVhZCB0byBmaW5pc2ggKGlmIHNvbWUgdGhyZWFkIGlzIGNvcHlpbmcgdGhpcyBiYWNraW5n
IHN0b3JlIHJpZ2h0CisgICAgICAgIG5vdyksIG9yIGl0IHdpbGwgZG8gbm90aGluZyAoaWYgYnkg
dGhlIHRpbWUgd2UgY2FsbGVkIGludG8gdGhlIHNsb3cgcGF0aCB0aGUgYmFja2luZyBzdG9yZSB3
YXMKKyAgICAgICAgYWxyZWFkeSBjb3BpZWQpLgorCisgICAgICAgIFRoaXMgaXMgYSAxJSBzbG93
LWRvd24gb24gU3VuU3BpZGVyLCBhIDEuNSUgc2xvdy1kb3duIG9uIE9jdGFuZSwgYSAxLjUlIHNs
b3ctZG93biBvbiBLcmFrZW4sIGFuZCBhCisgICAgICAgIDAlIHNsb3ctZG93biBvbiBBc21CZW5j
aC4gTm90ZSB0aGF0IHRoZSBPY3RhbmUgc2xvdy1kb3duIGlzIGV4Y2x1ZGluZyB0aGUgU3BsYXlM
YXRlbmN5IGJlbmNobWFyay4KKyAgICAgICAgVGhhdCBiZW5jaG1hcmsgd2lsbCBldmVudHVhbGx5
IHNwZWVkIHVwIGEgbG90IG9uY2Ugd2UgZmluaXNoIGRvaW5nIGFsbCBvZiB0aGlzIHN0dWZmLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZSk6CisgICAgICAg
ICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3Rz
KToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXpl
KToKKyAgICAgICAgKiBkZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1Db3B5QmFycmllck9wdGltaXphdGlvbik6
CisgICAgICAgICogZGZnL0RGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuaDogQWRkZWQu
CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dD
KToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9uLmNw
cDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0hlYXBM
b2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdMSUNNUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkxJQ01QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnV0dGVyZmx5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQ
dXRCeVZhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudFN0cnVjdHVyZUNoZWNr
cyk6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlS
ZWR1bmRhbnRBcnJheUNoZWNrcyk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZUdldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUdldEJ1dHRlcmZseVJlYWRPbmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ29uc3RhbnRTdG9yYWdlUG9pbnRlcik6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBp
bGVDaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldERpcmVjdFBuYW1l
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpzdG9yYWdlRm9yVHJh
bnNpdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Z2V0QnlJ
ZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6bG9hZEJ1dHRlcmZs
eVdpdGhCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjps
b2FkVmVjdG9yV2l0aEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0xMVk06OmNvcHlCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpsb2FkQnV0dGVyZmx5UmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmxvYWRWZWN0b3JSZWFkT25seSk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvTExWTTo6cmVtb3ZlU3BhY2VCaXRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9MTFZNOjpiYXNlSW5kZXgpOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVy
Zmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdEluT1NSKToK
KyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojp0
ZXN0Tm9uWmVybzMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnRlc3RJc1plcm82NCk6
CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojp0ZXN0Tm9uWmVybzY0KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpPdXRwdXQ6OnRlc3RJc1plcm9QdHIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1
dDo6dGVzdE5vblplcm9QdHIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2VsZWN0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmV4dHJhY3RWYWx1ZSk6CisgICAgICAgICogaGVh
cC9Db3B5QmFycmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3B5V3JpdGVCYXJyaWVyLmguCisgICAgICAgIChKU0M6OkNvcHlCYXJyaWVyQmFzZTo6Q29weUJh
cnJpZXJCYXNlKToKKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXJCYXNlOjpvcGVyYXRvciEpOgor
ICAgICAgICAoSlNDOjpDb3B5QmFycmllckJhc2U6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAo
SlNDOjpDb3B5QmFycmllckJhc2U6OmdldFdpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6
Q29weUJhcnJpZXJCYXNlOjpnZXQpOgorICAgICAgICAoSlNDOjpDb3B5QmFycmllckJhc2U6OmNv
cHlTdGF0ZSk6CisgICAgICAgIChKU0M6OkNvcHlCYXJyaWVyQmFzZTo6c2V0Q29weVN0YXRlKToK
KyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXJCYXNlOjpjbGVhcik6CisgICAgICAgIChKU0M6OkNv
cHlCYXJyaWVyQmFzZTo6c2V0KToKKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXJCYXNlOjpzZXRX
aXRob3V0QmFycmllcik6CisgICAgICAgIChKU0M6OkNvcHlCYXJyaWVyQmFzZTo6d2Vha0NBU1dp
dGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXI6OkNvcHlCYXJyaWVyKToK
KyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXI6OmdldFdpdGhvdXRCYXJyaWVyKToKKyAgICAgICAg
KEpTQzo6Q29weUJhcnJpZXI6OmdldCk6CisgICAgICAgIChKU0M6OkNvcHlCYXJyaWVyOjpzZXQp
OgorICAgICAgICAoSlNDOjpDb3B5QmFycmllcjo6c2V0V2l0aG91dEJhcnJpZXIpOgorICAgICAg
ICAoSlNDOjpDb3B5QmFycmllcjo6d2Vha0NBU1dpdGhvdXRCYXJyaWVyKToKKyAgICAgICAgKEpT
Qzo6Q29weVdyaXRlQmFycmllcjo6Q29weVdyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkNvcHlXcml0ZUJhcnJpZXI6Om9wZXJhdG9yISk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkNvcHlXcml0ZUJhcnJpZXI6Om9wZXJhdG9yIGJvb2wpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb3B5V3JpdGVCYXJyaWVyOjpnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb3B5
V3JpdGVCYXJyaWVyOjpvcGVyYXRvciopOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb3B5V3Jp
dGVCYXJyaWVyOjpvcGVyYXRvci0+KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29weVdyaXRl
QmFycmllcjo6c2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29weVdyaXRlQmFycmllcjo6
c2V0V2l0aG91dFdyaXRlQmFycmllcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvcHlXcml0
ZUJhcnJpZXI6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9ySW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRvcjo6Y2hlY2tJZlNob3VsZENvcHkpOgor
ICAgICAgICAqIGhlYXAvQ29weVdyaXRlQmFycmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29s
bGVjdEFuZFN3ZWVwKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVh
cDo6d3JpdGVCYXJyaWVyQnVmZmVyKToKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmJyYW5jaFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
YnJhbmNoSWZOb3RUb1NwYWNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpyZW1v
dmVTcGFjZUJpdHMpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JC
eXRlT2Zmc2V0KToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2RpcmVjdF9wbmFtZSk6CisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RG91Ymxl
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNMb2FkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlTG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250
aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfdG9f
c2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtOgorICAgICAgICAqIHJ1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RGlyZWN0QXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6RGlyZWN0
QXJndW1lbnRzOjpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6RGlyZWN0QXJndW1l
bnRzOjpvdmVycmlkZVRoaW5ncyk6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6b3Zl
cnJpZGVUaGluZ3NJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6
b3ZlcnJpZGVBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y29weVRv
QXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAgICAg
ICAoSlNDOjpEaXJlY3RBcmd1bWVudHM6OmNhbkFjY2Vzc0luZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkRpcmVjdEFyZ3VtZW50czo6Y2FuQWNjZXNzQXJndW1lbnRJbmRleFF1aWNrbHlJbkRG
Ryk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJh
eTo6c2V0TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9wKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6cHVzaCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmZhc3RTbGljZSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OmZhc3RDb25jYXRXaXRoKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5
OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6
OnVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5
OjpmaWxsQXJnTGlzdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyk6
CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250
ZXh0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkpTQXJyYXlCdWZmZXJWaWV3
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
Ojp2ZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6bGVuZ3RoKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXc6OmJ5dGVPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcuaDoKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5cGVkVmVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
Ojpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNNYXAuaDoKKyAgICAgICAgKEpTQzo6SlNNYXA6OkpTTWFwKToKKyAgICAgICAgKiBydW50aW1l
L0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvcHlCdXR0ZXJmbHkpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRl
eCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9JbnQzMik6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y29udmVydFVuZGVjaWRlZFRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojpjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0RvdWJsZSk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0NvbnRpZ3VvdXMpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Y29udmVydERvdWJsZVRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpzZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjplbnN1cmVBcnJheVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6cHV0SW5kZXhlZERlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlcyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpnZXROZXdWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpyZWFsbG9jYXRl
QW5kU2hyaW5rQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxp
bmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAg
ICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRB
cnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRWZWN0b3JMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuR2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0
cnlHZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y2FuU2V0SW5kZXhR
dWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNhblNldEluZGV4UXVpY2tseUZvclB1
dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRJbmRleFF1aWNrbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6aW5pdGlhbGl6ZUluZGV4KToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6Omhhc1NwYXJzZU1hcCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppblNwYXJzZUlu
ZGV4aW5nTW9kZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpvdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmxvY2F0aW9uRm9y
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUludDMyKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmVuc3VyZURvdWJsZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpl
bnN1cmVDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUFycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6YXJyYXlTdG9yYWdlT3JOdWxsKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmVuc3VyZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbik6CisgICAgICAgICogcnVudGltZS9KU1NldC5oOgorICAgICAgICAoSlND
OjpKU1NldDo6SlNTZXQpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwRGF0YS5oOgorICAgICAgICAo
SlNDOjpKU0l0ZXJhdG9yPjo6TWFwRGF0YUltcGwpOgorICAgICAgICAoSlNDOjpKU0l0ZXJhdG9y
Pjo6SXRlcmF0b3JEYXRhOjpuZXh0KToKKyAgICAgICAgKEpTQzo6SlNJdGVyYXRvcj46Okl0ZXJh
dG9yRGF0YTo6cmVmcmVzaEN1cnNvcik6CisgICAgICAgICogcnVudGltZS9NYXBEYXRhSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpKU0l0ZXJhdG9yPjo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpK
U0l0ZXJhdG9yPjo6ZmluZCk6CisgICAgICAgIChKU0M6OkpTSXRlcmF0b3I+OjphZGQpOgorICAg
ICAgICAoSlNDOjpKU0l0ZXJhdG9yPjo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6SlNJdGVyYXRv
cj46OnJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6SlNJdGVyYXRv
cj46OnJlcGxhY2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoSlNDOjpKU0l0ZXJhdG9yPjo6ZW5z
dXJlU3BhY2VGb3JBcHBlbmQpOgorICAgICAgICAoSlNDOjpKU0l0ZXJhdG9yPjo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OkpTSXRlcmF0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKToKKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNS0xMC0wOCAgSm9zZXBoIFBlY29yYXJv
ICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LiBN
aXNzaW5nIGZvcndhcmQgZGVjbGFyYXRpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw2ICsxNjgsNyBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwCiAgICAgZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdDb25zdGFudEhvaXN0aW5n
UGhhc2UuY3BwCisgICAgZGZnL0RGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR0RDRVBo
YXNlLmNwcAogICAgIGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw2ICs0MDIsNyBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR0NvbXBpbGF0aW9uTW9kZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29weUJhcnJpZXJPcHRpbWl6YXRp
b25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHQ1NFUGhhc2UuY3BwIiAvPgpAQCAtMTEzNyw2ICsxMTM4LDcgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDb21waWxhdGlvbk1vZGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NvcHlCYXJyaWVyT3B0aW1p
emF0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR0NTRVBoYXNlLmgiIC8+CkBAIC0xMzM0LDExICsxMzM2LDExIEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcGllZEJsb2NrSW5saW5lcy5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxDb3BpZWRTcGFjZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caGVhcFxDb3BpZWRTcGFjZUlubGluZXMuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29weUJhcnJpZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcQ29weVRva2VuLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxoZWFwXENvcHlWaXNpdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFw
XENvcHlWaXNpdG9ySW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVh
cFxDb3B5V29ya0xpc3QuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29w
eVdyaXRlQmFycmllci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxEZWZl
ckdDLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEVkZW5HQ0FjdGl2aXR5
Q2FsbGJhY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcRnVsbEdDQWN0
aXZpdHlDYWxsYmFjay5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw4IEBA
CiAJCTBGMDQzOTZFMUIwM0RDMEIwMDk1OThCNyAvKiBERkdDb21iaW5lZExpdmVuZXNzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA0Mzk2QzFCMDNE
QzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovOyB9OwogCQkwRjA1QzNCNDE2
ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwNUMzQjIxNjgzQ0Y4RjAw
QkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgfTsKIAkJMEYwNzc2
QkYxNEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA3NzZCRDE0RkYwMDI4MDAxMDIz
MzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjA5ODFGNzFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29w
eUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA5ODFGNTFCQzVFNTY1MDA0ODE0RjggLyogREZHQ29weUJh
cnJpZXJPcHRpbWl6YXRpb25QaGFzZS5jcHAgKi87IH07CisJCTBGMDk4MUY4MUJDNUU1NjUwMDQ4
MTRGOCAvKiBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA5ODFGNjFCQzVFNTY1MDA0ODE0Rjgg
LyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oICovOyB9OwogCQkwRjBBNzUyMjFC
OTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZl
cnJlZFR5cGUuY3BwICovOyB9OwogCQkwRjBBNzUyMzFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJy
ZWRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjBBNzUyMTFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1
QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMEI4Mzk3MTRCQ0Y0NUEwMDg4NUI0RiAvKiBMTEludFRodW5rcy5jcHAg
Ki87IH07CkBAIC00MDgsNiArNDEwLDcgQEAKIAkJMEY3OTA4NTYxOUEyOTBCMjAwRjYzMTBDIC8q
IERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc5MDg1NDE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3Ry
dWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCAqLzsgfTsKIAkJMEY3QjI5NEIxNEMzQ0QyRjAwN0Mz
REIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGll
cy5oICovOyB9OwogCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3RTE0NjlF
QkM0MDBDRjI0NDIgLyogREZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJy
aWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdD
MTFBQzFCQzM4NjJDMDBDNzRDREIgLyogQ29weUJhcnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUg
LyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MzM1QjcxNjM5QzFFNjAw
MTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFy
cmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICovOyB9OwogCQkwRjgzMzVCODE2MzlDMUVBMDAxNDQz
QjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxs
b2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtOTMxLDcgKzkzNCw2IEBACiAJCTJBNEJCN0YzMThBNDExNzkwMDhBMEZDRCAv
KiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFs
dWVJbnRlcm5hbC5oICovOyB9OwogCQkyQTRFQzkwQjE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVC
YXJyaWVyQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJBNEVDOTA5MTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3Bw
ICovOyB9OwogCQkyQTRFQzkwQzE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRFQzkw
QTE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMkE2ODI5NUIxODc1RjgwNTAwQjZD
M0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJBNjgyOTVBMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJy
aWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MkE2RjQ2MjYxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNkY0NjI1MTdFOTU5Q0UwMEM0NUM5
OCAvKiBIZWFwT3BlcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMkE3QTU4RUYxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE3QTU4RUUxODA4
QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovOyB9OwogCQkyQTgzNjM4NTE4RDdEMEVFMDAw
MEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0MgLyogRWRl
bkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi87IH07CkBAIC0xOTM2LDYgKzE5MzgsOCBAQAogCQkw
RjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21iaW5lZExpdmVuZXNzLmg7IHBhdGggPSBk
ZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjA1QzNCMjE2ODNDRjhGMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheWlmeVNsb3dQYXRoR2Vu
ZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklU
Q29tcGlsYXRpb25FZmZvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
Q29tcGlsYXRpb25FZmZvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwOTgx
RjUxQkM1RTU2NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29weUJhcnJpZXJPcHRp
bWl6YXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25Q
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMDk4MUY2MUJDNUU1NjUw
MDQ4MTRGOCAvKiBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuaDsg
cGF0aCA9IGRmZy9ERkdDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMEE3NTIwMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5mZXJyZWRUeXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQTc1MjExQjk0QkZBOTAwMTEw
NjYwIC8qIEluZmVycmVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmZlcnJlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQjgzOTcxNEJD
RjQ1QTAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IExMSW50VGh1bmtzLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50VGh1bmtzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNTYsNiArMjI2MCw3IEBACiAJCTBG
NzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3OTA4NTMxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVj
dHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdT
dHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNzkwODU0MTlBMjkwQjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25Q
aGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVSZWdp
c3RyYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0MxMUFDMUJDMzg2MkMwMEM3NENE
QiAvKiBDb3B5QmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3B5
QmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgwMjNFOTE2MTM4MzIz
MDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJ5VmFsSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNDE2MzlD
MUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5
QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjc0
OSw3ICsyNzU0LDYgQEAKIAkJMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZh
bHVlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNYW5hZ2Vk
VmFsdWVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTRFQzkwOTE4
NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmllckJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJBNEVDOTBBMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJp
ZXJCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV3JpdGVCYXJyaWVy
QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJBNjgyOTVBMTg3NUY4MDUw
MEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvcHlXcml0ZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkE2RjQ2MjUxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcE9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWZlckdDLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkE4MzYzODMxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2
aXR5Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWRl
bkdDQWN0aXZpdHlDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
MjQxLDEyICs0MjQ1LDEyIEBACiAJCQkJQzI0MDMwNTMxNEI0MDRDOTAwNzlFQjY0IC8qIENvcGll
ZFNwYWNlLmNwcCAqLywKIAkJCQlDMkVBQTNGODE0OUE4MzA4MDBGQ0UxMTIgLyogQ29waWVkU3Bh
Y2UuaCAqLywKIAkJCQlDMkM4RDAyQjE0QTNDNkIyMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxp
bmVzLmggKi8sCisJCQkJMEY3QzExQUMxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmgg
Ki8sCiAJCQkJMEY1QTUyQ0YxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oICovLAogCQkJ
CUMyMjM5RDEyMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgKi8sCiAJCQkJQzIy
MzlEMTMxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggKi8sCiAJCQkJQzIyMzlEMTQx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCUMyMThEMTNG
MTY1NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCAqLywKLQkJCQkyQTY4Mjk1QTE4NzVG
ODA1MDBCNkMzRTIgLyogQ29weVdyaXRlQmFycmllci5oICovLAogCQkJCTJBN0E1OEVFMTgwOEE0
QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFENjlCMDA3NUIz
NTQgLyogRGVmZXJHQy5oICovLAogCQkJCTJBODM2MzgzMThEN0QwRUUwMDAwRUJDQyAvKiBFZGVu
R0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKQEAgLTUyMzgsNiArNTI0Miw4IEBACiAJCQkJMEYz
QjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi8sCiAJ
CQkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5j
cHAgKi8sCiAJCQkJMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5oICovLAorCQkJCTBGMDk4MUY1MUJDNUU1NjUwMDQ4MTRGOCAvKiBERkdDb3B5QmFy
cmllck9wdGltaXphdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjA5ODFGNjFCQzVFNTY1MDA0ODE0
RjggLyogREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oICovLAogCQkJCTBGQkUwRjZC
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCAqLywKIAkJCQkw
RkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oICovLAog
CQkJCUE3RDg5Q0U2MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVkZ2VCcmVha2luZ1Bo
YXNlLmNwcCAqLywKQEAgLTYwNzksNyArNjA4NSw2IEBACiAJCQkJQzIyMzlEMTgxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxOTE2MjYy
QkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MjE4RDE0MDE2NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0LmggaW4gSGVhZGVycyAqLywK
LQkJCQkyQTY4Mjk1QjE4NzVGODA1MDBCNkMzRTIgLyogQ29weVdyaXRlQmFycmllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzRGNEI2RjQxQTA1Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3Iu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGMzFBMDVDOTQ0MDA1Q0FCNzYgLyogY3BwX2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVD
MDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVhZGVycyAqLywKQEAgLTY1MTcsNiAr
NjUyMiw3IEBACiAJCQkJQTdBNEFFMTAxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzWDg2Q29t
bW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklU
VGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyog
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMDk4MUY4MUJDNUU1NjUwMDQ4MTRGOCAvKiBERkdDb3B5QmFycmllck9wdGltaXphdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklU
V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdG
MDEgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQ0YzOUMyMTZF
MTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAt
Njc2Miw2ICs2NzY4LDcgQEAKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0
ZU5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQ
cm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyog
UHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3QzExQUQxQkMzODYyQzAw
Qzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZG
NUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1
MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFk
ZXJzICovLApAQCAtODExMiw2ICs4MTE5LDcgQEAKIAkJCQk3MDlGQjg2QjFBRTMzNUM2MDAzOUQw
NjkgLyogV2Vha1NldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTRFQzkwQjE4
NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGMDk4MUY3MUJDNUU1NjUwMDQ4MTRGOCAvKiBERkdDb3B5QmFy
cmllck9wdGltaXphdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBQjNBMTc5
OUU0QjIwMEQyODMzRCAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODYzQzZEOUMxNTIxMTExQTAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxpemVVQ1MyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2NzA0Qjg0MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3OSw2ICs0NzksNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRl
KEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoCiAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlRm9yQWNjZXNzR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQ
Uik7CisgICAgICAgICAgICAgICAgaml0LnJlbW92ZVNwYWNlQml0cyhsb2FkZWRWYWx1ZUdQUik7
CiAgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IGxvYWRlZFZhbHVlR1BSOwogICAgICAgICAg
ICAgfQogCkBAIC03MjMsNiArNzI0LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nl
c3NHZW5lcmF0aQogICAgICAgICAgICAgICAgICAgICBvZmZzZXRJbklubGluZVN0b3JhZ2UobV9v
ZmZzZXQpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzdGF0ZS5mYWlsQW5k
SWdub3JlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2hHUFIpKTsKICAgICAg
ICAgICAgIGppdC5zdG9yZVZhbHVlKAogICAgICAgICAgICAgICAgIHZhbHVlUmVncywKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCkBAIC03ODYsNiArNzg4LDcgQEAgdm9p
ZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgICAgIEFT
U0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChqaXQuYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2hHUFIzKSk7CiAgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoCiAgICAgICAgICAgICAg
ICAgICAgIGppdC5icmFuY2hTdWJQdHIoCkBAIC04MjksOCArODMyLDEwIEBAIHZvaWQgQWNjZXNz
Q2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAgICAgICAgICAgICAgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsKICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
SW5JbmxpbmVTdG9yYWdlKG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKCFzY3JhdGNoR1BSSGFzU3RvcmFnZSkKKyAgICAgICAg
ICAgIGlmICghc2NyYXRjaEdQUkhhc1N0b3JhZ2UpIHsKICAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3RhdGUuZmFpbEFuZElnbm9y
ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90VG9TcGFjZShzY3JhdGNoR1BSKSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBqaXQuc3RvcmVWYWx1ZSgKICAgICAgICAgICAgICAgICB2YWx1ZVJl
Z3MsCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9m
ZnNldEluQnV0dGVyZmx5KG1fb2Zmc2V0KSAqIHNpemVvZihKU1ZhbHVlKSkpOwpAQCAtOTE3LDYg
KzkyMiw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKIAogICAg
IGNhc2UgQXJyYXlMZW5ndGg6IHsKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBqaXQucmVtb3ZlU3BhY2VCaXRzKHNjcmF0Y2hHUFIpOwogICAgICAgICBqaXQu
bG9hZDMyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIHN0YXRlLmZhaWxBbmRJZ25vcmUu
YXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaDMyKENDYWxsSGVscGVyczo6TGVzc1RoYW4s
IHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5
NjgsNiArMTk2OCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICBj
YXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBmb3JOb2Rl
KG5vZGUpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxp
bWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5Miw2ICsxOTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6
CisgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25seToKICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBiYXJlbHkgd29ya3MuIFRoZSBkYW5nZXIgaXMgdGhhdCB0aGUgR2V0
QnV0dGVyZmx5IGlzIHVzZWQgYnkgc29tZXRoaW5nIHRoYXQKICAgICAgICAgICAgICAgICAgICAg
Ly8gZG9lcyBzb21ldGhpbmcgZXNjYXBpbmcgdG8gYSBjYW5kaWRhdGUuIEZvcnR1bmF0ZWx5LCB0
aGUgb25seSBidXR0ZXJmbHktdXNpbmcgb3BzCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQg
d2UgZXhlbXB0IGhlcmUgYWxzbyB1c2UgdGhlIGNhbmRpZGF0ZSBkaXJlY3RseS4gSWYgdGhlcmUg
ZXZlciB3YXMgYQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MzEsNiArNzMxLDEzIEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0
ZXJmbHkpOwogICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseUxvYywgSlNPYmplY3Rf
YnV0dGVyZmx5LCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0
dXJuOworCisgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25seToKKyAgICAgICAgLy8gVGhpcyBy
dWxlIGlzIHNlcGFyYXRlIHRvIHByZXZlbnQgQ1NFIG9mIEdldEJ1dHRlcmZseSB3aXRoIEdldEJ1
dHRlcmZseVJlYWRPbmx5LiBCdXQgaW4gcmVhbGl0eSwKKyAgICAgICAgLy8gdGhpcyB3b3JrcyBi
ZWNhdXNlIHdlIGRvbid0IGludHJvZHVjZSBHZXRCdXR0ZXJmbHlSZWFkT25seSB1bnRpbCB0aGUg
Yml0dGVyIGVuZCBvZiBjb21waWxhdGlvbi4KKyAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJm
bHkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEJ1dHRlcmZseVJlYWRPbmx5TG9jLCBKU09i
amVjdF9idXR0ZXJmbHksIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlpZnk6CiAgICAgY2FzZSBBcnJheWlm
eVRvU3RydWN0dXJlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb3B5QmFy
cmllck9wdGltaXphdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb3B5QmFycmllck9wdGltaXphdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDb3B5QmFycmllck9wdGltaXphdGlv
blBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Nsb2JiZXJp
emUuaCIKKyNpbmNsdWRlICJERkdEb2VzR0MuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2lu
Y2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9IGZh
bHNlOworCitjbGFzcyBDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlIDogcHVibGljIFBoYXNl
IHsKK3B1YmxpYzoKKyAgICBDb3B5QmFycmllck9wdGltaXphdGlvblBoYXNlKEdyYXBoJiBncmFw
aCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImNvcHkgYmFycmllciBvcHRpbWl6YXRpb24iKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIlN0YXJ0aW5nIGNvcHkgYmFycmllciBvcHRp
bWl6YXRpb246XG4iKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRmlyc3QgY29udmVydCBhbGwgR2V0QnV0dGVyZmx5IG5vZGVzIGludG8gR2V0
QnV0dGVyZmx5UmVhZE9ubHkuCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9k
ZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldEJ1dHRl
cmZseSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoR2V0QnV0dGVyZmx5UmVhZE9u
bHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQW55dGltZSB3ZSB1
c2UgYSBHZXRCdXR0ZXJmbHlSZWFkT25seSBpbiBhIHNldHRpbmcgdGhhdCBtYXkgd3JpdGUgdG8g
dGhlIGhlYXAsIG9yIGlmIHdlJ3JlIGluIGEKKyAgICAgICAgLy8gbmV3IGVwb2NoLCBjb252ZXJ0
IGl0IHRvIGEgR2V0QnV0dGVyZmx5LiBUaGUgZXBvY2ggZ2V0cyBpbmNyZW1lbnRlZCBhdCBiYXNp
YyBibG9jayBib3VuZGFyaWVzLAorICAgICAgICAvLyBhbnl0aW1lIHdlIEdDLCBhbmQgYW55dGlt
ZSBhIGJhcnJpZXIgb24gdGhlIGJ1dHRlcmZseSBtYXkgYmUgZXhlY3V0ZWQuIFdlIHRyYXZlcnNl
IHRoZSBwcm9ncmFtCisgICAgICAgIC8vIGluIHByZS1vcmRlciBzbyB0aGF0IHdlIGFsd2F5cyBz
ZWUgdXNlcyBhZnRlciBkZWZzLiBOb3RlIHRoYXQgdGhpcyBpcyBhIGZpeHBvaW50IGJlY2F1c2Ug
aWYgd2UKKyAgICAgICAgLy8gdHVybiBhIEdldEJ1dHRlcmZseVJlYWRPbmx5IGludG8gYSBHZXRC
dXR0ZXJmbHksIHRoZW4gd2UndmUgaW50cm9kdWNlZCBhIGJ1dHRlcmZseSByZWFsbG9jYXRpb24u
CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIEVwb2NoIGN1cnJlbnRFcG9j
aCA9IEVwb2NoOjpmaXJzdCgpOworICAgICAgICBtX2dyYXBoLmNsZWFyRXBvY2hzKCk7CisgICAg
ICAgIHdoaWxlIChjaGFuZ2VkKSB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAg
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJblByZU9yZGVy
KCkpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50RXBvY2guYnVtcCgpOworICAgICAgICAgICAg
ICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBib29s
IHdyaXRlc1RvSGVhcCA9IHdyaXRlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgSGVhcCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgYm9vbCByZWFsbG9jYXRlc0J1dHRlcmZseSA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZG9lc0dDKG1fZ3JhcGgsIG5vZGUpIHx8IHdyaXRlc092ZXJs
YXAobV9ncmFwaCwgbm9kZSwgSlNPYmplY3RfYnV0dGVyZmx5KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlYWxsb2NhdGVzQnV0dGVyZmx5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhbiBleGhhdXN0
aXZlIGxpc3Qgb2YgdGhpbmdzIHRoYXQgd2lsbCBleGVjdXRlIGNvcHkgYmFycmllcnMuIE1vc3QK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaW5ncyB0aGF0IGV4ZWN1dGUgY29weSBiYXJy
aWVycyBhbHNvIGRvIEdDIG9yIGhhdmUgd3JpdGVzIHRoYXQgb3ZlcmxhcCB0aGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGJ1dHRlcmZseSBoZWFwLCBhbmQgd2UgY2F0Y2ggdGhhdCBhYm92
ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVhbGxvY2F0ZXNCdXR0ZXJmbHkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChlZGdlLT5vcCgpICE9IEdldEJ1dHRlcmZseVJlYWRPbmx5KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVzVG9IZWFwIHx8IGN1cnJlbnRF
cG9jaCAhPSBlZGdlLT5lcG9jaCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5z
ZXRPcChHZXRCdXR0ZXJmbHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIGlmIChyZWFsbG9j
YXRlc0J1dHRlcmZseSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFcG9jaC5idW1w
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0RXBvY2goY3VycmVudEVwb2NoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIFRoaXMgcGhhc2UgYWx3YXlzIHRoaW5rcyB0aGF0IGl0IGNoYW5nZXMgdGhlIGdy
YXBoLiBUaGF0J3MgT0ssIGJlY2F1c2UgaXQncyBhIGxhdGUgcGhhc2UuCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIHBl
cmZvcm1Db3B5QmFycmllck9wdGltaXphdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxp
bmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDb3B5IEJhcnJpZXIgT3B0aW1pemF0aW9uIFBo
YXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPENvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2U+
KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29weUJh
cnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb3B5QmFycmllck9wdGltaXphdGlvblBo
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgREZHQ29weUJhcnJpZXJPcHRpbWl6YXRpb25QaGFzZV9oCisjZGVmaW5lIERGR0NvcHlCYXJy
aWVyT3B0aW1pemF0aW9uUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENvbnZlcnRzIEdl
dEJ1dHRlcmZseSBub2RlcyBpbnRvIEdldEJ1dHRlcmZseVJlYWRPbmx5IG5vZGVzIHdoZW5ldmVy
IHRoZSBidXR0ZXJmbHkgaXMgb25seSB1c2VkIGZvcgorLy8gcmVhZC1vbmx5IG9wZXJhdGlvbnMu
Citib29sIHBlcmZvcm1Db3B5QmFycmllck9wdGltaXphdGlvbihHcmFwaCYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYg
Kzk4LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6CiAgICAgY2FzZSBHZXRFeGVjdXRhYmxlOgogICAgIGNhc2UgR2V0QnV0
dGVyZmx5OgorICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CiAgICAgY2FzZSBDaGVja0Fy
cmF5OgogICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgY2FzZSBMb2FkQXJyb3dGdW5jdGlvblRoaXM6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjUsNyArMTA2NSw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQ2hlY2tDZWxsOgogICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAg
ICAgIGNhc2UgQ3JlYXRlVGhpczoKLSAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IHsKKyAgICAg
ICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6
IHsKICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIs
NiArOTIsMTAgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIExvYwogICAg
ICAgICBvdXQucHJpbnQoIkJ1dHRlcmZseUxvYyIpOwogICAgICAgICByZXR1cm47CiAgICAgICAg
IAorICAgIGNhc2UgQnV0dGVyZmx5UmVhZE9ubHlMb2M6CisgICAgICAgIG91dC5wcmludCgiQnV0
dGVyZmx5UmVhZE9ubHlMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNl
IENoZWNrSGFzSW5zdGFuY2VMb2M6CiAgICAgICAgIG91dC5wcmludCgiQ2hlY2tIYXNJbnN0YW5j
ZUxvYyIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDcgQEAgZW51bSBMb2NhdGlvbktpbmQgewogICAgIAogICAgIEFycmF5TGVuZ3RoTG9jLAogICAg
IEJ1dHRlcmZseUxvYywKKyAgICBCdXR0ZXJmbHlSZWFkT25seUxvYywKICAgICBDaGVja0hhc0lu
c3RhbmNlTG9jLAogICAgIENsb3N1cmVWYXJpYWJsZUxvYywKICAgICBEaXJlY3RBcmd1bWVudHNM
b2MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCShy
ZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDExIEBAIHB1YmxpYzoKICAgICAgICAg
CiAgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBo
KTsKICAgICAgICAgbV9ncmFwaC5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkobV9n
cmFwaCk7CisKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkdy
YXBoIGJlZm9yZSBMSUNNOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgbV9kYXRhLnJlc2l6ZShtX2dyYXBoLm1fbmF0dXJhbExv
b3BzLm51bUxvb3BzKCkpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4Nyw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFj
cm8oUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1
bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0QnV0dGVyZmx5LCBOb2RlUmVzdWx0U3RvcmFnZSkg
XAorICAgIG1hY3JvKEdldEJ1dHRlcmZseVJlYWRPbmx5LCBOb2RlUmVzdWx0U3RvcmFnZSkgLyog
QSBub2RlIHVzZWQgdG8gcmVwbGFjZSBHZXRCdXR0ZXJmbHkgYXQgdGhlIGJpdHRlciBlbmQgb2Yg
Y29tcGlsYXRpb24uICovXAogICAgIG1hY3JvKENoZWNrQXJyYXksIE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhBcnJheWlmeSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEFy
cmF5aWZ5VG9TdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjQzLDcgKzY0Myw5IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJy
YXlXaXQKICAgICBpZiAoVU5MSUtFTFkoc2l6ZSA8IDApKQogICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PGNoYXIqPihleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJBcnJheSBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3Vn
aCBwb3NpdGl2ZSBpbnRlZ2VyLiIpKSkpOwogCi0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFy
Kj4oSlNBcnJheTo6Y3JlYXRlKCp2bSwgYXJyYXlTdHJ1Y3R1cmUsIHNpemUpKTsKKyAgICBKU0Fy
cmF5KiByZXN1bHQgPSBKU0FycmF5OjpjcmVhdGUoKnZtLCBhcnJheVN0cnVjdHVyZSwgc2l6ZSk7
CisgICAgcmVzdWx0LT5idXR0ZXJmbHkoKTsgLy8gRW5zdXJlIHRoYXQgdGhlIGJhY2tpbmcgc3Rv
cmUgaXMgaW4gdG8tc3BhY2UuCisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVzdWx0
KTsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcihFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUsIHNpemVfdCBzdGFydCwgc2l6
ZV90IHNpemUpCkBAIC0xMTc2LDYgKzExNzgsMjQgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblN3aXRjaFN0cgogICAgIHJldHVybiBleGVjLT5jb2RlQmxvY2soKS0+c3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLm9mZnNldEZvclZhbHVlKHN0cmluZy0+dmFsdWUoZXhl
YykuaW1wbCgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7CiB9CiAKK2No
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnV0dGVyZmx5KEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBjZWxsKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgZGF0YUxvZygiUmFuIHRoZSBi
YXJyaWVyLlxuIik7CisKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihqc0Nhc3Q8SlNP
YmplY3QqPihjZWxsKS0+YnV0dGVyZmx5KCkpOworfQorCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEFycmF5QnVmZmVyVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxs
KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oanND
YXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCktPnZlY3RvcigpKTsKK30KKwogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgV2F0Y2hwb2lu
dFNldCogc2V0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTkwNjgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzMCw2ICsxMzAsOCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MyhF
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3Vi
bGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0
YWJsZUluZGV4LCBKU1N0cmluZyopOwogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3
aXRjaFN0cmluZ0FuZEdldEJyYW5jaE9mZnNldChFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJbmRl
eCwgSlNTdHJpbmcqKTsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnV0dGVyZmx5
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRB
cnJheUJ1ZmZlclZlY3RvcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqLCBXYXRjaHBvaW50U2V0Kik7CiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyhFeGVj
U3RhdGUqKSBXVEZfSU5URVJOQUw7CiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6
ZU9mVmFyYXJncyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3Qg
Zmlyc3RWYXJBcmdPZmZzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiREZHQ2xl
YW5VcFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCIKICNpbmNs
dWRlICJERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCIKKyNpbmNsdWRlICJERkdDb3B5QmFycmll
ck9wdGltaXphdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQ
aGFzZS5oIgogI2luY2x1ZGUgIkRGR0RDRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHRmFpbGVkRmlu
YWxpemVyLmgiCkBAIC0zNTgsNiArMzU5LDggQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46
OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtQ2xlYW5VcChkZmcpOwogICAgICAgICBwZXJm
b3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShkZmcpOworICAgICAg
ICBpZiAoT3B0aW9uczo6ZW5hYmxlQ29weUJhcnJpZXJPcHRpbWl6YXRpb24oKSkKKyAgICAgICAg
ICAgIHBlcmZvcm1Db3B5QmFycmllck9wdGltaXphdGlvbihkZmcpOwogICAgICAgICBwZXJmb3Jt
UGhhbnRvbUluc2VydGlvbihkZmcpOwogICAgICAgICBwZXJmb3JtU3RhY2tMYXlvdXQoZGZnKTsK
ICAgICAgICAgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKQEAgLTQzNyw2
ICs0NDAsOCBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAg
ICAgICAgICBwZXJmb3JtTW92SGludFJlbW92YWwoZGZnKTsKICAgICAgICAgcGVyZm9ybUNsZWFu
VXAoZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShkZmcpOyAvLyBXZSByZWx5IG9uIHRoaXMgdG8g
a2lsbCBkZWFkIGNvZGUgdGhhdCB3b24ndCBiZSByZWNvZ25pemVkIGFzIGRlYWQgYnkgTExWTS4K
KyAgICAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZUNvcHlCYXJyaWVyT3B0aW1pemF0aW9uKCkpCisg
ICAgICAgICAgICBwZXJmb3JtQ29weUJhcnJpZXJPcHRpbWl6YXRpb24oZGZnKTsKICAgICAgICAg
cGVyZm9ybVN0YWNrTGF5b3V0KGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lz
KGRmZyk7CiAgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhkZmcpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NDIsNyArNDQyLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IAorICAg
ICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25s
eToKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNl
IEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSw3IEBAIGJv
b2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOgogICAgIGNhc2UgR2V0RXhlY3V0YWJsZToKICAgICBjYXNlIEdldEJ1dHRlcmZseToK
KyAgICBjYXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OgogICAgIGNhc2UgQ2hlY2tBcnJheToKICAg
ICBjYXNlIEFycmF5aWZ5OgogICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxMCwxOCArNDAxMCwx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNv
bXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCi0gICAgY2FzZSBHZXRCdXR0ZXJmbHk6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgUmV1c2UsIGJhc2UpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwotICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotICAgICAg
ICAKLSAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgIGNhc2UgR2V0
QnV0dGVyZmx5OgorICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CisgICAgICAgIGNvbXBp
bGVHZXRCdXR0ZXJmbHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwotICAgIH0KIAogICAgIGNhc2Ug
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewogICAgICAgICBjb21waWxlR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZShub2RlKTsKQEAgLTQ2MTAsMTAgKzQ2MDIsMTYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBp
bmRleC5ncHIoKTsKICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdw
cigpOwogCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKwogICAg
ICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3R1cmUg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAg
IHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCisgICAgICAgICAgICAgICAgc2NyYXRj
aEdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAg
ICAgICAgICAgICAgZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwogICAgICAgICAKICAgICAgICAgLy8gQ29tcHV0ZSB0
aGUgb2Zmc2V0CiAgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRv
cidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKQEAg
LTQ2MzUsMTQgKzQ2MzMsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgLy8gV2UgdXNlIHJlc3VsdFBheWxvYWRHUFIgYXMgYSB0ZW1wb3Jhcnkg
aGVyZS4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgY2xvYmJlciBpdCBhZnRlciBnZXR0aW5nIHRoZSAK
ICAgICAgICAgLy8gdmFsdWUgb3V0IG9mIGluZGV4R1BSIGFuZCBlbnVtZXJhdG9yR1BSIGJlY2F1
c2UgcmVzdWx0UGF5bG9hZEdQUiBjb3VsZCByZXVzZSBlaXRoZXIgb2YgdGhvc2UgcmVnaXN0ZXJz
LgotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdFBheWxvYWRHUFIpOyAKKyAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKG1faml0LmJyYW5jaElmTm90VG9TcGFjZShyZXN1bHRQYXlsb2FkR1BSKSk7CiAg
ICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJf
dD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSk7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHJlc3VsdFBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKIAogICAg
ICAgICBkb25lLmxpbmsoJm1faml0KTsKIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwg
cmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikpOwor
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMs
IG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUikpOwogI2VuZGlmCiAKICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAx
OTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDI2LDE4ICs0MDI2LDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29tcGlsZVJlYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2Uobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICBjYXNlIEdl
dEJ1dHRlcmZseTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwg
YmFzZSk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0g
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAotICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBzdG9yYWdl
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgY2Fz
ZSBHZXRCdXR0ZXJmbHlSZWFkT25seToKKyAgICAgICAgY29tcGlsZUdldEJ1dHRlcmZseShub2Rl
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogCiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlOiB7CiAgICAgICAgIGNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKG5vZGUp
OwpAQCAtNDYzMywxMCArNDYyNSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOwog
ICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKIAorICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisKICAgICAgICAgLy8gQ2hlY2sgdGhl
IHN0cnVjdHVyZQogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDFHUFIpOwotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdHVyZSA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBzY3JhdGNoMUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZCgKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgCisgICAgICAgICAgICAgICAgc2NyYXRjaDFHUFIsCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgIGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAogICAg
ICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5s
aW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCkBAIC00NjUwLDYgKzQ2NDgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIC8v
IE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5r
KCZtX2ppdCk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaDJHUFIpOworICAg
ICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2gyR1BS
KSk7CiAgICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2gxR1BSKTsKICAgICAgICAg
bV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRj
aDFHUFIpOwogICAgICAgICBtX2ppdC5uZWczMihzY3JhdGNoMUdQUik7CkBAIC00NjU5LDcgKzQ2
NTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CiAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbCwgcmVzdWx0
R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHRH
UFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKSk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDM4OSw2ICs0Mzg5LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRJbmRleGVkUHIKICAgICAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rv
cigpKSwKICAgICAgICAgICAgIHN0b3JhZ2VSZWcpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaElmTm90VG9TcGFjZShzdG9yYWdlUmVnKSwKKyAgICAgICAgICAgICAgICB0aGlzLCBv
cGVyYXRpb25HZXRBcnJheUJ1ZmZlclZlY3Rvciwgc3RvcmFnZVJlZywgYmFzZVJlZykpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC00NDA5LDkgKzQ0MTQsMTEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUoKSksCiAgICAgICAgIFRydXN0ZWRJbW0zMihXYXN0
ZWZ1bFR5cGVkQXJyYXkpKTsKLSAgICAKKwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgZGF0YUdQ
Uik7CisgICAgbV9qaXQucmVtb3ZlU3BhY2VCaXRzKGRhdGFHUFIpOwogICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9m
ZnNldE9mVmVjdG9yKCkpLCB2ZWN0b3JHUFIpOworICAgIG1faml0LnJlbW92ZVNwYWNlQml0cyh2
ZWN0b3JHUFIpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGF0
YUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZkFycmF5QnVmZmVyKCkpLCBkYXRhR1BSKTsKICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRhdGFHUFIsIEFycmF5QnVmZmVy
OjpvZmZzZXRPZkRhdGEoKSksIGRhdGFHUFIpOwogICAgIG1faml0LnN1YlB0cihkYXRhR1BSLCB2
ZWN0b3JHUFIpOwpAQCAtNDQyMiw3ICs0NDI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldFR5cGVkQXJyYQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cigwKSwgdmVjdG9y
R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAKKwogICAgIGludDMyUmVz
dWx0KHZlY3RvckdQUiwgbm9kZSk7CiB9CiAKQEAgLTU0OTAsNiArNTQ5NywzNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc3RvcmFnZVJlc3VsdChzY3Jh
dGNoR1BSMSwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCdXR0
ZXJmbHkoTm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBi
YXNlKTsKKyAgICAKKyAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
c3VsdEdQUik7CisKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIEdldEJ1dHRl
cmZseToKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0
aENhbGwoCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZOb3RUb1NwYWNlKHJlc3VsdEdQ
UiksCisgICAgICAgICAgICAgICAgdGhpcywgb3BlcmF0aW9uR2V0QnV0dGVyZmx5LCByZXN1bHRH
UFIsIGJhc2VHUFIpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdldEJ1dHRlcmZseVJl
YWRPbmx5OgorICAgICAgICBtX2ppdC5yZW1vdmVTcGFjZUJpdHMocmVzdWx0R1BSKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgIkJhZCBub2RlIHR5cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAor
ICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwogR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9y
YXJ5LCBBcnJheU1vZGUgYXJyYXlNb2RlKQogewogICAgIGlmICghcHV0QnlWYWxXaWxsTmVlZEV4
dHJhUmVnaXN0ZXIoYXJyYXlNb2RlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjE0
Nyw2ICsyMTQ3LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoTm9kZSopOwogICAg
IAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzZU9wZXJh
bmRUeXBlLCB0eXBlbmFtZSBQcm9wZXJ0eU9wZXJhbmRUeXBlLCB0eXBlbmFtZSBWYWx1ZU9wZXJh
bmRUeXBlLCB0eXBlbmFtZSBUYWdUeXBlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAx
OTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5n
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNiArMjQ3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAg
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNl
IEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5
OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbERpcmVjdDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpAQCAtMzI1LDYg
KzMyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAg
ICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVy
Zmx5UmVhZE9ubHk6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAgaW5saW5lIENhcGFi
aWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVy
ZToKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICBj
YXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5OgogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgIGNhc2Ug
TmV3QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTA2ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTY0LDYgKzU2NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0
QnV0dGVyZmx5OgogICAgICAgICAgICAgY29tcGlsZUdldEJ1dHRlcmZseSgpOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6CisgICAgICAgICAg
ICBjb21waWxlR2V0QnV0dGVyZmx5UmVhZE9ubHkoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CiAgICAgICAgICAgICBjb21waWxlQ29u
c3RhbnRTdG9yYWdlUG9pbnRlcigpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMjgwLDcgKzIy
ODMsMTIgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKQog
ICAgIHsKLSAgICAgICAgc2V0U3RvcmFnZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSksIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7CisgICAgICAgIHNldFN0b3Jh
Z2UobG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsK
KyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHlSZWFkT25seSgpCisgICAgewor
ICAgICAgICBzZXRTdG9yYWdlKGxvYWRCdXR0ZXJmbHlSZWFkT25seShsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNvbnN0YW50U3RvcmFn
ZVBvaW50ZXIoKQpAQCAtMjMxNSw3ICsyMzIzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc2V0U3RvcmFnZShtX291dC5sb2Fk
UHRyKGNlbGwsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yKSk7CisgICAgICAgIHNl
dFN0b3JhZ2UobG9hZFZlY3RvcldpdGhCYXJyaWVyKGNlbGwpKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlQ2hlY2tBcnJheSgpCkBAIC0yMzM1LDI3ICsyMzQzLDI1IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBMVmFsdWUgYmFzZVB0ciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSk7ICAgIAogCi0gICAgICAgIExCYXNpY0Jsb2NrIHNpbXBsZUNhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIndhc3RlbGVzcyB0eXBlZCBhcnJheSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
d2FzdGVmdWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJ3YXN0ZWZ1bCB0eXBlZCBhcnJh
eSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJjb250aW51YXRpb24gYnJhbmNoIikpOworICAgICAgICBMQmFzaWNCbG9jayBzaW1w
bGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCB3
YXN0ZWxlc3MgdHlwZWQgYXJyYXkiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHdhc3RlZnVsQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQgd2FzdGVm
dWwgdHlwZWQgYXJyYXkiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQgY29udGludWF0aW9u
IikpOwogICAgICAgICAKICAgICAgICAgTFZhbHVlIG1vZGUgPSBtX291dC5sb2FkMzIoYmFzZVB0
ciwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19tb2RlKTsKICAgICAgICAgbV9vdXQuYnJhbmNo
KAogICAgICAgICAgICAgbV9vdXQubm90RXF1YWwobW9kZSwgbV9vdXQuY29uc3RJbnQzMihXYXN0
ZWZ1bFR5cGVkQXJyYXkpKSwKICAgICAgICAgICAgIHVuc3VyZShzaW1wbGVDYXNlKSwgdW5zdXJl
KHdhc3RlZnVsQ2FzZSkpOwogCi0gICAgICAgIC8vIGJlZ2luIHNpbXBsZSBjYXNlICAgICAgICAK
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzaW1wbGVDYXNl
LCB3YXN0ZWZ1bENhc2UpOwogCiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNpbXBsZU91dCA9IG1f
b3V0LmFuY2hvcihtX291dC5jb25zdEludFB0cigwKSk7CiAKICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwogCi0gICAgICAgIC8vIGJlZ2luIHdhc3RlZnVsIGNhc2UKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8od2FzdGVmdWxDYXNlLCBjb250aW51YXRpb24pOwogCi0gICAgICAgIExW
YWx1ZSB2ZWN0b3JQdHIgPSBtX291dC5sb2FkUHRyKGJhc2VQdHIsIG1faGVhcHMuSlNBcnJheUJ1
ZmZlclZpZXdfdmVjdG9yKTsKLSAgICAgICAgTFZhbHVlIGJ1dHRlcmZseVB0ciA9IG1fb3V0Lmxv
YWRQdHIoYmFzZVB0ciwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBMVmFs
dWUgdmVjdG9yUHRyID0gbG9hZFZlY3RvclJlYWRPbmx5KGJhc2VQdHIpOworICAgICAgICBMVmFs
dWUgYnV0dGVyZmx5UHRyID0gbG9hZEJ1dHRlcmZseVJlYWRPbmx5KGJhc2VQdHIpOwogICAgICAg
ICBMVmFsdWUgYXJyYXlCdWZmZXJQdHIgPSBtX291dC5sb2FkUHRyKGJ1dHRlcmZseVB0ciwgbV9o
ZWFwcy5CdXR0ZXJmbHlfYXJyYXlCdWZmZXIpOwogICAgICAgICBMVmFsdWUgZGF0YVB0ciA9IG1f
b3V0LmxvYWRQdHIoYXJyYXlCdWZmZXJQdHIsIG1faGVhcHMuQXJyYXlCdWZmZXJfZGF0YSk7CiAK
QEAgLTIzNjQsNyArMjM3MCw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CiAKLSAgICAgICAgLy8gb3V0cHV0CiAgICAgICAgIHNldEludDMyKG1fb3V0LmNhc3RUb0ludDMy
KG1fb3V0LnBoaShtX291dC5pbnRQdHIsIHNpbXBsZU91dCwgd2FzdGVmdWxPdXQpKSk7CiAgICAg
fQogICAgIApAQCAtNDAxMCw3ICs0MDE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IHdlYWtQb2ludGVyKG1ldGhv
ZC5wcm90b3R5cGUoKS0+dmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFp
c0lubGluZU9mZnNldChtZXRob2Qub2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eUJhc2UgPSBtX291dC5sb2FkUHRyKHByb3BlcnR5QmFzZSwgbV9oZWFwcy5KU09iamVjdF9i
dXR0ZXJmbHkpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBsb2FkQnV0dGVy
Zmx5UmVhZE9ubHkocHJvcGVydHlCYXNlKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2Fk
UHJvcGVydHkoCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlm
aWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NDA3OCw3ICs0MDgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBi
YXNlOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9
IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlID0gbG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKGJhc2UpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFu
c2l0aW9ucy5hZGRMYXppbHkoCiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwKQEAgLTUzMDIsNyArNTMwNyw3
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAg
ICBtX291dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkLCBzbG93Q2FzZSk7Ci0gICAgICAgIExWYWx1
ZSBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZs
eSk7CisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG9hZEJ1dHRlcmZseVJlYWRPbmx5KGJhc2Up
OwogICAgICAgICBMVmFsdWUgcmVhbEluZGV4ID0gbV9vdXQuc2lnbkV4dCgKICAgICAgICAgICAg
IG1fb3V0Lm5lZyhtX291dC5zdWIoaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hl
YXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0eSkpKSwgCiAg
ICAgICAgICAgICBtX291dC5pbnQ2NCk7CkBAIC01OTM3LDE0ICs1OTQyLDE0IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICAKICAgICAgICAgaWYgKHByZXZp
b3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5leHRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihvYmplY3Qs
IG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgICAgIHJldHVybiBsb2FkQnV0
dGVyZmx5V2l0aEJhcnJpZXIob2JqZWN0KTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1
bHQ7CiAgICAgICAgIGlmICghcHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
CiAgICAgICAgICAgICByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3QsIHBy
ZXZpb3VzU3RydWN0dXJlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBy
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKAotICAgICAgICAgICAgICAgIG9iamVjdCwgbV9vdXQu
bG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSwKKyAgICAgICAgICAg
ICAgICBvYmplY3QsIGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihvYmplY3QpLAogICAgICAgICAg
ICAgICAgIHByZXZpb3VzU3RydWN0dXJlLCBuZXh0U3RydWN0dXJlKTsKICAgICAgICAgfQogICAg
ICAgICAKQEAgLTYwNTIsNiArNjA1Nyw2NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAg
cmV0dXJuIGNhbGw7CiAgICAgfQorCisgICAgTFZhbHVlIGxvYWRCdXR0ZXJmbHlXaXRoQmFycmll
cihMVmFsdWUgb2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAorICAg
ICAgICAgICAgb2JqZWN0LCBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9i
dXR0ZXJmbHkpLCBvcGVyYXRpb25HZXRCdXR0ZXJmbHkpOworICAgIH0KKyAgICAKKyAgICBMVmFs
dWUgbG9hZFZlY3RvcldpdGhCYXJyaWVyKExWYWx1ZSBvYmplY3QpCisgICAgeworICAgICAgICBy
ZXR1cm4gY29weUJhcnJpZXIoCisgICAgICAgICAgICBvYmplY3QsIG1fb3V0LmxvYWRQdHIob2Jq
ZWN0LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3RvciksCisgICAgICAgICAgICBvcGVy
YXRpb25HZXRBcnJheUJ1ZmZlclZlY3Rvcik7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBjb3B5
QmFycmllcihMVmFsdWUgb2JqZWN0LCBMVmFsdWUgcG9pbnRlciwgUF9KSVRPcGVyYXRpb25fRUMg
c2xvd1BhdGhGdW5jdGlvbikKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIgc2xvdyBwYXRo
IikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImxvYWRCdXR0ZXJmbHlXaXRoQmFycmllciBjb250aW51YXRpb24iKSk7CisKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihwb2ludGVyKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQudGVzdElzWmVyb1B0cihwb2lu
dGVyLCBtX291dC5jb25zdEludFB0cihDb3B5QmFycmllckJhc2U6OnNwYWNlQml0cykpLAorICAg
ICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgpKTsKKworICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250
aW51YXRpb24pOworCisgICAgICAgIC8vIFdlIGhhdmVuJ3QgZ2x1ZWQgdGhpcyBzbG93IHBhdGgg
dG8gYWN0dWFsbHkgZG8gYW55dGhpbmcgeWV0LiBXZSB3aWxsIGxhemlseSBnZW5lcmF0ZSBjb2Rl
IHRvCisgICAgICAgIC8vIGNhbGwgdGhlIGZ1bmN0aW9uLgorICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMuCisgICAgICAgIFVOVVNFRF9QQVJBTShzbG93UGF0aEZ1bmN0aW9uKTsKKyAg
ICAgICAgCisgICAgICAgIFZlY3RvcjxMVmFsdWU+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KG1fc3RhY2ttYXBJRHMrKykpOworICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBS
ZXBsYWNlbWVudFNpemUoKSkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0TnVsbCht
X291dC5yZWY4KSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMigx
KSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQob2JqZWN0KTsKKyAgICAgICAgTFZhbHVlIGNh
bGwgPSBtX291dC5jYWxsKG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLCBhcmd1bWVu
dHMpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1B
bnlSZWdDYWxsQ29udik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291
dC5hbmNob3IoY2FsbCk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgcmV0
dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAg
IH0KKworICAgIExWYWx1ZSBsb2FkQnV0dGVyZmx5UmVhZE9ubHkoTFZhbHVlIG9iamVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiByZW1vdmVTcGFjZUJpdHMobV9vdXQubG9hZFB0cihvYmplY3Qs
IG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7CisgICAgfQorCisgICAgTFZhbHVlIGxvYWRW
ZWN0b3JSZWFkT25seShMVmFsdWUgb2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlbW92
ZVNwYWNlQml0cyhtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmll
d192ZWN0b3IpKTsKKyAgICB9CisKKyAgICBMVmFsdWUgcmVtb3ZlU3BhY2VCaXRzKExWYWx1ZSBz
dG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmJpdEFuZCgKKyAgICAgICAgICAg
IHN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKH5zdGF0aWNfY2FzdDxpbnRwdHJfdD4oQ29weUJh
cnJpZXJCYXNlOjpzcGFjZUJpdHMpKSk7CisgICAgfQogICAgIAogICAgIFR5cGVkUG9pbnRlciBi
YXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1
ZSBpbmRleCwgRWRnZSBlZGdlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5
MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDkgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aQogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVh
dGUoCiAgICAgICAgIHZtLCBudWxscHRyLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCksIGZhbHNlLCBJbmRleGluZ0hlYWRlcigpLCAwKTsKICAgICAKLSAgICByZXR1cm4gSlNGaW5h
bE9iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKKyAgICBKU09iamVj
dCogcmVzdWx0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnV0dGVy
Zmx5KTsKKyAgICByZXN1bHQtPmJ1dHRlcmZseSgpOyAvLyBFbnN1cmUgdGhhdCB0aGUgYnV0dGVy
Zmx5IGlzIGluIHRvLXNwYWNlLgorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGV4dGVybiAiQyIg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcHVsYXRlT2JqZWN0SW5PU1IoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
Miw2ICszNjIsOCBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIHRlc3ROb25aZXJvMzIoTFZhbHVlIHZh
bHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gbm90WmVybzMyKGJpdEFuZCh2YWx1ZSwgbWFzaykp
OyB9CiAgICAgTFZhbHVlIHRlc3RJc1plcm82NChMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7
IHJldHVybiBpc1plcm82NChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogICAgIExWYWx1ZSB0ZXN0
Tm9uWmVybzY0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIG5vdFplcm82NChi
aXRBbmQodmFsdWUsIG1hc2spKTsgfQorICAgIExWYWx1ZSB0ZXN0SXNaZXJvUHRyKExWYWx1ZSB2
YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIGlzTnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsg
fQorICAgIExWYWx1ZSB0ZXN0Tm9uWmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7
IHJldHVybiBub3ROdWxsKGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9CiAgICAgCiAgICAgTFZhbHVl
IHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJl
dHVybiBidWlsZFNlbGVjdChtX2J1aWxkZXIsIHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOyB9CiAg
ICAgTFZhbHVlIGV4dHJhY3RWYWx1ZShMVmFsdWUgYWdnVmFsLCB1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gYnVpbGRFeHRyYWN0VmFsdWUobV9idWlsZGVyLCBhZ2dWYWwsIGluZGV4KTsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weUJhcnJpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5QmFycmllci5oCShyZXZpc2lvbiAxOTA2
MDMpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlXcml0ZUJhcnJpZXIuaDox
OTA2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5QmFycmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvcHlXcml0
ZUJhcnJpZXJfaAorI2RlZmluZSBDb3B5V3JpdGVCYXJyaWVyX2gKKworI2luY2x1ZGUgIkhlYXAu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgQ29w
eVdyaXRlQmFycmllciB7CitwdWJsaWM6CisgICAgQ29weVdyaXRlQmFycmllcigpCisgICAgICAg
IDogbV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ29weVdyaXRlQmFycmllcihW
TSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhp
cy0+c2V0KHZtLCBvd25lciwgJnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgQ29weVdyaXRlQmFy
cmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgdGhpcy0+c2V0KHZtLCBvd25lciwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgCisgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBUKiBn
ZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorICAgIAor
ICAgIFQqIG9wZXJhdG9yKigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2V0KCk7Cisg
ICAgfQorICAgIAorICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdldCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2Vs
bCogb3duZXIsIFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVl
OworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0V2l0aG91dFdyaXRlQmFycmllcihUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRo
aXMtPm1fdmFsdWUgPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpIHsgbV92
YWx1ZSA9IDA7IH0KKworcHJpdmF0ZToKKyAgICBUKiBtX3ZhbHVlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDb3B5V3JpdGVCYXJyaWVyX2gKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29weUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NjcgKzIzLDE1OSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpZm5kZWYgQ29weVdyaXRlQmFycmllcl9oCi0jZGVmaW5lIENvcHlXcml0ZUJhcnJpZXJfaAor
I2lmbmRlZiBDb3B5QmFycmllcl9oCisjZGVmaW5lIENvcHlCYXJyaWVyX2gKIAogI2luY2x1ZGUg
IkhlYXAuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xh
c3MgQ29weVdyaXRlQmFycmllciB7CitlbnVtIGNsYXNzIENvcHlTdGF0ZSB7CisgICAgLy8gVGhl
IGJhY2tpbmcgc3RvcmUgaXMgbm90IHBsYW5uZWQgdG8gZ2V0IGNvcGllZCBpbiB0aGlzIGVwb2No
LiBJZiB5b3Uga2VlcCBhIHBvaW50ZXIgdG8gdGhlIGJhY2tpbmcKKyAgICAvLyBzdG9yZSBvbiB0
aGUgc3RhY2ssIGl0IHdpbGwgbm90IGdldCBjb3BpZWQuIElmIHlvdSBkb24ndCBrZWVwIGl0IG9u
IHRoZSBzdGFjaywgaXQgbWF5IGdldCBjb3BpZWQKKyAgICAvLyBzdGFydGluZyBhdCB0aGUgbmV4
dCBoYW5kc2hha2UgKHRoYXQgaXMsIGl0IG1heSB0cmFuc2l0aW9uIGZyb20gVG9TcGFjZSB0byBD
b3B5UGxhbm5lZCwgYnV0CisgICAgLy8gQ29weVBsYW5uZWQgbWVhbnMgVG9TcGFjZSBwcmlvciB0
byB0aGUgaGFuZHNoYWtlIHRoYXQgc3RhcnRzIHRoZSBjb3B5IHBoYXNlKS4KKyAgICBUb1NwYWNl
LAorCisgICAgLy8gVGhlIG1hcmtpbmcgcGhhc2UgaGFzIHNlbGVjdGVkIHRoaXMgYmFja2luZyBz
dG9yZSB0byBiZSBjb3BpZWQuIElmIHdlIGFyZSBub3QgeWV0IGluIHRoZSBjb3B5aW5nCisgICAg
Ly8gcGhhc2UsIHRoaXMgYmFja2luZyBzdG9yZSBpcyBzdGlsbCBpbiB0by1zcGFjZS4gQWxsIHRo
YXQgaXMgbmVlZGVkIGluIHN1Y2ggYSBjYXNlIGlzIHRvIG1hc2sgb2ZmIHRoZQorICAgIC8vIGxv
dyBiaXRzLiBJZiB3ZSBhcmUgaW4gdGhlIGNvcHlpbmcgcGhhc2UsIHRoaXMgbWVhbnMgdGhhdCB0
aGUgb2JqZWN0IHBvaW50cyB0byBmcm9tLXNwYWNlLiBUaGUKKyAgICAvLyBiYXJyaWVyIHNob3Vs
ZCBmaXJzdCBjb3B5IHRoZSBvYmplY3QgLSBvciB3YWl0IGZvciBjb3B5aW5nIHRvIGZpbmlzaCAt
IGJlZm9yZSB1c2luZyB0aGUgb2JqZWN0LgorICAgIENvcHlQbGFubmVkLAorCisgICAgLy8gVGhl
IG9iamVjdCBpcyBiZWluZyBjb3BpZWQgcmlnaHQgbm93LiBBbnlvbmUgd2FudGluZyB0byB1c2Ug
dGhlIG9iamVjdCBtdXN0IHdhaXQgZm9yIHRoZSBvYmplY3QgdG8KKyAgICAvLyBmaW5pc2ggYmVp
bmcgY29waWVkLiBOb3RpZmljYXRpb25zIGFib3V0IGNvcHlpbmcgdXNlIHRoZSBQYXJraW5nTG90
IGNvbWJpbmVkIHdpdGggdGhlc2UgYml0cy4gSWYgdGhlCisgICAgLy8gc3RhdGUgaXMgQ29weWlu
Z0FuZFdhaXRpbmcsIHRoZW4gd2hlbiB0aGUgY29weWluZyBmaW5pc2hlcywgd2hhdGV2ZXIgdGhy
ZWFkIHdhcyBkb2luZyBpdCB3aWxsCisgICAgLy8gdW5wYXJrQWxsKCkgb24gdGhlIGFkZHJlc3Mg
b2YgdGhlIENvcHlCYXJyaWVyQmFzZS4gU28sIHRvIHdhaXQgZm9yIGNvcHlpbmcgdG8gZmluaXNo
LCBDQVMgdGhpcyB0bworICAgIC8vIENvcHlpbmdBbmRXYWl0aW5nIGFuZCB0aGVuIHBhcmtDb25k
aXRpb25hbGx5IG9uIHRoZSBiYXJyaWVyIGFkZHJlc3MuCisgICAgQ29weWluZywKKworICAgIC8v
IFRoZSBvYmplY3QgaXMgYmVpbmcgY29waWVkIHJpZ2h0IG5vdywgYW5kIHRoZXJlIGFyZSBvbmUg
b3IgbW9yZSB0aHJlYWRzIHBhcmtlZC4gVGhvc2UgdGhyZWFkcyB3YW50CisgICAgLy8gdG8gYmUg
dW5wYXJrZWQgd2hlbiBjb3B5aW5nIGlzIGRvbmUuIFNvLCB3aGljaGV2ZXIgdGhyZWFkIGRvZXMg
dGhlIGNvcHlpbmcgbmVlZHMgdG8gY2FsbCB1bnBhcmtBbGwoKQorICAgIC8vIG9uIHRoZSBiYXJy
aWVyIGFkZHJlc3MgYWZ0ZXIgY29weWluZyBpcyBkb25lLgorICAgIENvcHlpbmdBbmRXYWl0aW5n
Cit9OworCitjbGFzcyBDb3B5QmFycmllckJhc2UgewogcHVibGljOgotICAgIENvcHlXcml0ZUJh
cnJpZXIoKQotICAgICAgICA6IG1fdmFsdWUoMCkKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
c3BhY2VCaXRzID0gMzsKKworICAgIENvcHlCYXJyaWVyQmFzZSgpCisgICAgICAgIDogbV92YWx1
ZShudWxscHRyKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgQ29weVdyaXRlQmFycmllcihWTSYg
dm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQmIHZhbHVlKQorICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgdm9pZCogZ2V0V2l0aG91dEJh
cnJpZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgdGhpcy0+c2V0KHZtLCBvd25lciwgJnZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgfQotICAgIAotICAgIENvcHlXcml0ZUJh
cnJpZXIoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUKiB2YWx1ZSkKKworICAgIC8vIFdo
ZW4gd2UgYXJlIGluIHRoZSBjb25jdXJyZW50IGNvcHlpbmcgcGhhc2UsIHRoaXMgbWV0aG9kIG1h
eSBsb2NrIHRoZSBiYXJyaWVyIG9iamVjdCAoaS5lLiB0aGUgZmllbGQKKyAgICAvLyBwb2ludGlu
ZyB0byBjb3BpZWQgc3BhY2UpIGFuZCBjYWxsIGRpcmVjdGx5IGludG8gdGhlIG93bmluZyBvYmpl
Y3QncyBjb3B5QmFja2luZ1N0b3JlKCkgbWV0aG9kLgorICAgIHZvaWQqIGdldChjb25zdCBKU0Nl
bGwqIG93bmVyKSBjb25zdAorICAgIHsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gbV92YWx1ZTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHJlc3VsdCkgJiBz
cGFjZUJpdHMpKQorICAgICAgICAgICAgcmV0dXJuIEhlYXA6OmNvcHlCYXJyaWVyKG93bmVyLCBt
X3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBDb3B5U3RhdGUg
Y29weVN0YXRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb3B5
U3RhdGU+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fdmFsdWUpICYgc3BhY2VCaXRzKTsKKyAg
ICB9CisKKyAgICAvLyBUaGlzIG9ubHkgd29ya3Mgd2hlbiB5b3Uga25vdyB0aGF0IHRoZXJlIGlz
IG5vYm9keSBlbHNlIGNvbmN1cnJlbnRseSBtZXNzaW5nIHdpdGggdGhpcyBDb3B5QmFycmllci4K
KyAgICAvLyBUaGF0J3MgaGFyZCB0byBndWFyYW50ZWUsIHRob3VnaCB0aGVyZSBhcmUgYSBmZXcg
dW51c3VhbCBwbGFjZXMgd2hlcmUgdGhpcyBlbmRzIHVwIGJlaW5nIHNhZmUuCisgICAgLy8gVXN1
YWxseSB5b3Ugd2FudCB0byB1c2UgQ29weUJhcnJpZXI6OndlYWtDQVMoKS4KKyAgICB2b2lkIHNl
dENvcHlTdGF0ZShDb3B5U3RhdGUgY29weVN0YXRlKQorICAgIHsKKyAgICAgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgdWludHB0cl90IHZhbHVlID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4obV92YWx1ZSk7CisgICAgICAgIHZhbHVlICY9IH5zdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KHNwYWNlQml0cyk7CisgICAgICAgIHZhbHVlIHw9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
Y29weVN0YXRlKTsKKyAgICAgICAgbV92YWx1ZSA9IGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWUp
OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFsdWUgPSBudWxscHRyOyB9CisKK3By
b3RlY3RlZDoKKyAgICBDb3B5QmFycmllckJhc2UoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVy
LCB2b2lkKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMtPnNldCh2bSwgb3duZXIsIHZhbHVl
KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV92
YWx1ZTsgfQorICAgIHZvaWQgc2V0KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgdm9pZCog
dmFsdWUpCisgICAgeworICAgICAgICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICB9CiAgICAgCi0gICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICB2b2lkIHNldFdpdGhv
dXRCYXJyaWVyKHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZh
bHVlOworICAgIH0KKworICAgIGJvb2wgd2Vha0NBU1dpdGhvdXRCYXJyaWVyKAorICAgICAgICB2
b2lkKiBvbGRQb2ludGVyLCBDb3B5U3RhdGUgb2xkQ29weVN0YXRlLCB2b2lkKiBuZXdQb2ludGVy
LCBDb3B5U3RhdGUgbmV3Q29weVN0YXRlKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IG9sZFZh
bHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ob2xkUG9pbnRlcikgfCBzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KG9sZENvcHlTdGF0ZSk7CisgICAgICAgIHVpbnRwdHJfdCBuZXdWYWx1ZSA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld1BvaW50ZXIpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90
PihuZXdDb3B5U3RhdGUpOworICAgICAgICByZXR1cm4gV1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXAo
CisgICAgICAgICAgICAmbV92YWx1ZSwgYml0d2lzZV9jYXN0PHZvaWQqPihvbGRWYWx1ZSksIGJp
dHdpc2VfY2FzdDx2b2lkKj4obmV3VmFsdWUpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgbXV0
YWJsZSB2b2lkKiBtX3ZhbHVlOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBD
b3B5QmFycmllciA6IHB1YmxpYyBDb3B5QmFycmllckJhc2UgeworcHVibGljOgorICAgIENvcHlC
YXJyaWVyKCkKKyAgICB7CisgICAgfQogICAgIAotICAgIFQqIGdldCgpIGNvbnN0CisgICAgQ29w
eUJhcnJpZXIoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBUJiB2YWx1ZSkKKyAgICAgICAg
OiBDb3B5QmFycmllckJhc2Uodm0sIG93bmVyLCAmdmFsdWUpCiAgICAgewotICAgICAgICByZXR1
cm4gbV92YWx1ZTsKICAgICB9CiAgICAgCi0gICAgVCogb3BlcmF0b3IqKCkgY29uc3QKKyAgICBD
b3B5QmFycmllcihWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQorICAgICAg
ICA6IENvcHlCYXJyaWVyQmFzZSh2bSwgb3duZXIsIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGdldCgpOworICAgIH0KKworICAgIFQqIGdldFdpdGhvdXRCYXJyaWVyKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KENvcHlCYXJyaWVyQmFzZTo6Z2V0
V2l0aG91dEJhcnJpZXIoKSk7CiAgICAgfQogICAgIAotICAgIFQqIG9wZXJhdG9yLT4oKSBjb25z
dAorICAgIFQqIGdldChjb25zdCBKU0NlbGwqIG93bmVyKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIGdldCgpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQqPihDb3B5QmFycmll
ckJhc2U6OmdldChvd25lcikpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldChWTSYgdm0sIGNv
bnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAgIHsKLSAgICAgICAgdGhpcy0+bV92YWx1
ZSA9IHZhbHVlOwotICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CisgICAgICAg
IENvcHlCYXJyaWVyQmFzZTo6c2V0KHZtLCBvd25lciwgdmFsdWUpOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIHNldFdpdGhvdXRXcml0ZUJhcnJpZXIoVCogdmFsdWUpCisgICAgdm9pZCBzZXRXaXRo
b3V0QmFycmllcihUKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHRoaXMtPm1fdmFsdWUgPSB2YWx1
ZTsKKyAgICAgICAgQ29weUJhcnJpZXJCYXNlOjpzZXRXaXRob3V0QmFycmllcih2YWx1ZSk7CiAg
ICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFsdWUgPSAwOyB9CiAKLXByaXZhdGU6
Ci0gICAgVCogbV92YWx1ZTsKKyAgICBib29sIHdlYWtDQVNXaXRob3V0QmFycmllcihUKiBvbGRQ
b2ludGVyLCBDb3B5U3RhdGUgb2xkQ29weVN0YXRlLCBUKiBuZXdQb2ludGVyLCBDb3B5U3RhdGUg
bmV3Q29weVN0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvcHlCYXJyaWVyQmFzZTo6d2Vh
a0NBU1dpdGhvdXRCYXJyaWVyKG9sZFBvaW50ZXIsIG9sZENvcHlTdGF0ZSwgbmV3UG9pbnRlciwg
bmV3Q29weVN0YXRlKTsKKyAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotI2VuZGlm
IC8vIENvcHlXcml0ZUJhcnJpZXJfaAorI2VuZGlmIC8vIENvcHlCYXJyaWVyX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lcy5oCShyZXZp
c2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogaW5saW5lIGJvb2wgQ29weVZpc2l0b3I6OmNoZWNrSWZTaG91bGRDb3B5KHZvaWQqIG9sZFB0
cikKIHsKKyAgICBpZiAoIW9sZFB0cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIENvcGll
ZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihvbGRQdHIpOwogICAgIGlmIChi
bG9jay0+aXNPdmVyc2l6ZSgpIHx8IGJsb2NrLT5pc1Bpbm5lZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5V3JpdGVCYXJyaWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVdyaXRlQmFy
cmllci5oCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3B5V3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgQ29weVdyaXRlQmFycmllcl9oCi0jZGVmaW5lIENvcHlXcml0ZUJhcnJp
ZXJfaAotCi0jaW5jbHVkZSAiSGVhcC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci1jbGFzcyBDb3B5V3JpdGVCYXJyaWVyIHsKLXB1YmxpYzoKLSAgICBDb3B5
V3JpdGVCYXJyaWVyKCkKLSAgICAgICAgOiBtX3ZhbHVlKDApCi0gICAgewotICAgIH0KLSAgICAK
LSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCYgdmFs
dWUpCi0gICAgewotICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCAmdmFsdWUpOwotICAgIH0K
LSAgICAKLSAgICBDb3B5V3JpdGVCYXJyaWVyKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwg
VCogdmFsdWUpCi0gICAgewotICAgICAgICB0aGlzLT5zZXQodm0sIG93bmVyLCB2YWx1ZSk7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdmFsdWU7
IH0KLSAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQotICAgIAotICAgIFQqIGdldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV92YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgVCogb3BlcmF0b3IqKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBnZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgVCogb3BlcmF0b3ItPigpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
c2V0KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgVCogdmFsdWUpCi0gICAgewotICAgICAg
ICB0aGlzLT5tX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93
bmVyKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRXaXRob3V0V3JpdGVCYXJyaWVyKFQqIHZh
bHVlKQotICAgIHsKLSAgICAgICAgdGhpcy0+bV92YWx1ZSA9IHZhbHVlOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGNsZWFyKCkgeyBtX3ZhbHVlID0gMDsgfQotCi1wcml2YXRlOgotICAgIFQqIG1f
dmFsdWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIENvcHlXcml0ZUJh
cnJpZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE5
MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEwLDYgKzEwMTAsMTIgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQo
Y29uc3QgSlNDZQogICAgIG1fc2xvdFZpc2l0b3IuYXBwZW5kVG9NYXJrU3RhY2soY29uc3RfY2Fz
dDxKU0NlbGwqPihjZWxsKSk7CiB9CiAKK3ZvaWQqIEhlYXA6OmNvcHlCYXJyaWVyKGNvbnN0IEpT
Q2VsbCosIHZvaWQqJiBwb2ludGVyKQoreworICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vdy4KKyAg
ICByZXR1cm4gcG9pbnRlcjsKK30KKwogdm9pZCBIZWFwOjpjb2xsZWN0QW5kU3dlZXAoSGVhcE9w
ZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSkKIHsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTkwNjgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiAr
MTA2LDggQEAgcHVibGljOgogICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpT
VmFsdWUpOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOwog
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQqIGNvcHlCYXJyaWVyKGNvbnN0IEpT
Q2VsbCogb3duZXIsIHZvaWQqJiBjb3BpZWRTcGFjZVBvaW50ZXIpOworCiAgICAgV3JpdGVCYXJy
aWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIoKSB7IHJldHVybiBtX3dyaXRlQmFycmllckJ1
ZmZlcjsgfQogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoSlNDZWxsKik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMTkw
NjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBIZWFwSW5saW5lc19oCiAjZGVmaW5l
IEhlYXBJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiSGVh
cC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAx
OTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiRlBS
SW5mby5oIgogI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUu
aCIKQEAgLTc1NCw2ICs3NTUsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoUHRy
KGNvbmRpdGlvbiwgbGVmdEhhbmRTaWRlLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwogI2Vu
ZGlmCiAgICAgfQorCisgICAgSnVtcCBicmFuY2hJZk5vdFRvU3BhY2UoR1BSUmVnIHN0b3JhZ2VH
UFIpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDMyKE5vblplcm8sIHN0b3JhZ2VH
UFIsIFRydXN0ZWRJbW0zMihDb3B5QmFycmllckJhc2U6OnNwYWNlQml0cykpOworICAgIH0KKwor
ICAgIHZvaWQgcmVtb3ZlU3BhY2VCaXRzKEdQUlJlZyBzdG9yYWdlR1BSKQorICAgIHsKKyAgICAg
ICAgYW5kUHRyKFRydXN0ZWRJbW1QdHIofnN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQ29weUJhcnJp
ZXJCYXNlOjpzcGFjZUJpdHMpKSwgc3RvcmFnZUdQUik7CisgICAgfQogICAgIAogICAgIHN0YXRp
YyBBZGRyZXNzIGFkZHJlc3NGb3JCeXRlT2Zmc2V0KHB0cmRpZmZfdCBieXRlT2Zmc2V0KQogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgw
LDYgKzE4MCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
CiAgICAgICAgIGlmIChPcHRpb25zOjplYWdlcmx5VXBkYXRlVG9wQ2FsbEZyYW1lKCkpCiAgICAg
ICAgICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKworICAgICAgICB1bnNpZ25lZCBieXRlY29k
ZU9mZnNldCA9IG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9w
Y29kZUlEKSB7CiAgICAgICAgIERFRklORV9TTE9XX09QKGRlbF9ieV92YWwpCkBAIC0zMTQsNiAr
MzE2LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
fQorCisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkF0ICIsIGJ5dGVj
b2RlT2Zmc2V0LCAiOiAiLCBtX3Nsb3dDYXNlcy5zaXplKCksICJcbiIpOwogICAgIH0KIAogICAg
IFJFTEVBU0VfQVNTRVJUKG1fY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jYWxsQ29tcGlsYXRpb25J
bmZvLnNpemUoKSk7CkBAIC00MzMsNiArNDM4LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIH0KIAorICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJBdCAi
LCBmaXJzdFRvLCAiIHNsb3c6ICIsIGl0ZXIgLSBtX3Nsb3dDYXNlcy5iZWdpbigpLCAiXG4iKTsK
KwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlciA9PSBtX3Nsb3dDYXNl
cy5lbmQoKSB8fCBmaXJzdFRvICE9IGl0ZXItPnRvLCAiTm90IGVub3VnaCBqdW1wcyBsaW5rZWQg
aW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVT
U0FHRShmaXJzdFRvID09IChpdGVyIC0gMSktPnRvLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGlu
IHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE3NCw2ICsxMTc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFt
ZShJbnN0cgogICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5l
QWNjZXNzLmxpbmsodGhpcyk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RU
b1NwYWNlKHJlZ1QwKSk7CiAgICAgc3ViMzIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDIpOwogICAgIG5l
ZzMyKHJlZ1QyKTsKICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOwpAQCAtMTE5MCw2ICsxMTkxLDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9kaXJlY3RfcG5hbWUoSQogICAgIGludCBiYXNlID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBi
YXNlKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwog
CiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lv
biAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTUzLDYgKzExNTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVyCiAgICAgCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRl
ciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
YmFzZSBhcnJheSBjaGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcmVhZCBiYXJyaWVy
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQogICAgIApAQCAtMTE5Niw2ICsxMTk3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cgogICAgIC8vIE90aGVy
d2lzZSBpdCdzIG91dCBvZiBsaW5lCiAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QwKSk7CiAgICAg
c3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwogICAgIG5lZzMyKHJlZ1QxKTsKICAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwpAQCAtMTIxMiw2ICsxMjE0LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9kaXJlY3RfcG5hbWUoSQogICAgIGludCBiYXNlID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChp
dGVyLCBiYXNlKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwogCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKICAgICBzbG93UGF0aENhbGwu
Y2FsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1LDcg
QEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVMb2FkKEluc3RydQogICAgIAogICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihE
b3VibGVTaGFwZSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RU
b1NwYWNlKHJlZ1QyKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CiAgICAgbG9hZERvdWJsZShCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0
KSwgZnBSZWdUMCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hEb3VibGUoRG91YmxlTm90
RXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMCkpOwpAQCAtMTc4LDYgKzE3OSw3IEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0xvYWQoSW4KICAgICAKICAgICBiYWRU
eXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoZXhw
ZWN0ZWRTaGFwZSkpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RU
b1NwYWNlKHJlZ1QyKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CiAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpLCBy
ZWdUMCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0NjQoWmVybywgcmVnVDApKTsK
QEAgLTE5Myw2ICsxOTUsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUxv
YWQoCiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKEFib3ZlLCByZWdUMywgVHJ1c3Rl
ZEltbTMyKFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAtIEFycmF5U3RvcmFnZVNoYXBlKSk7CiAK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QyKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90VG9TcGFjZShyZWdUMikp
OwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6
OnZlY3Rvck9mZnNldCgpKSwgcmVnVDApOwpAQCAtMjUxLDYgKzI1NCw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBub3RTdHJpbmcubGluayh0aGlzKTsK
ICAgICBub25DZWxsLmxpbmsodGhpcyk7CiAgICAgCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyByZWFkIGJhcnJpZXIKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGgg
Y2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCiAgICAgCkBAIC0z
MjMsNiArMzI3LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91cwog
ICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJ
bW0zMihpbmRleGluZ1NoYXBlKSk7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hJZk5vdFRvU3BhY2UocmVnVDIpKTsKICAgICBKdW1wIG91dE9mQm91bmRzID0gYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7
CkBAIC0zNzgsNiArMzgzLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQ
dXRCeQogICAgIAogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVn
VDIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKHJlZ1QyKSk7CiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgSnVtcCBlbXB0eSA9IGJyYW5j
aFRlc3Q2NChaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKQEAgLTQ0OCw4ICs0NTQsOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gYmFzZSBub3QgYXJyYXkgY2hlY2sKICAgICAKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIHJlYWQgYmFycmllcgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gb3V0IG9mIGJvdW5k
cwotCisgICAgCiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmls
ZSk7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBKSVRJbnQzMjoKQEAgLTc4MCw2ICs3
ODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjCiAgICAgICAg
ICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBz
Y3JhdGNoKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VG9TcGFjZShzY3Jh
dGNoKSk7CiAgICAgICAgICAgICBuZWczMihvZmZzZXQpOwogICAgICAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwogICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChz
Y3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CkBAIC04NTksOCArODY3LDEwIEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShJbnMKICAgICBpZiAocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHkg
fHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7
CisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFkIHN0cnVjdHVyZQorICAgICAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIHJlYWQgYmFycmllcgorICAgIH0KIAogICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVmFy
IGluamVjdGlvbnMgY2hlY2suCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKQEAgLTg2OSw2
ICs4NzksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zCiAgICAg
ICAgIC8vIEdsb2JhbFByb3BlcnR5L0dsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
cwogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrCiAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1pdExvYWRXaXRoU3RydWN0dXJl
Q2hlY2sKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyByZWFkIGJhcnJpZXIKICAgICAg
ICAgLy8gR2xvYmFsTGV4aWNhbFZhcgogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIFRE
WiBjaGVjay4KICAgICAgICAgLy8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MuCkBAIC05MjIsNiArOTMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKElu
c3RydWN0aQogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90VG9TcGFjZShyZWdUMCkpOwogICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5k
U2xvdCwgcmVnVDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKICAgICAgICAgICAgIHN0
b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKQEAgLTEwMTUs
MTQgKzEwMjcsMTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShJbnN0cgog
ICAgICAgICAgfHwgcmVzb2x2ZVR5cGUgPT0gTG9jYWxDbG9zdXJlVmFyKQogICAgICAgICAmJiBj
dXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0LT5zdGF0ZSgpICE9IElzSW52YWxp
ZGF0ZWQpCiAgICAgICAgIGxpbmtDb3VudCsrOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxQcm9wZXJ0eSB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpCi0gICAgICAgIGxpbmtDb3VudCsrOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxQcm9wZXJ0eSB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpIHsKKyAgICAgICAgbGlua0NvdW50Kys7IC8vIGJhZCBzdHJ1Y3R1cmUKKyAg
ICAgICAgbGlua0NvdW50Kys7IC8vIHJlYWQgYmFycmllcgorICAgIH0KICAgICBpZiAoZ2V0UHV0
SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSAhPSBJbml0aWFsaXphdGlvbiAmJiAocmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykpIC8vIFREWiBjaGVjay4KICAgICAgICAgbGlua0NvdW50
Kys7CiAgICAgaWYgKHJlc29sdmVUeXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0eSB8fCByZXNvbHZl
VHlwZSA9PSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAg
ICAgIC8vIEdsb2JhbFByb3BlcnR5L0dsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnNDaGVj
awogICAgICAgICBsaW5rQ291bnQrKzsgLy8gZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sKICAg
ICAgICAgbGlua0NvdW50Kys7IC8vIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrCisgICAgICAg
IGxpbmtDb3VudCsrOyAvLyByZWFkIGJhcnJpZXIKIAogICAgICAgICAvLyBHbG9iYWxMZXhpY2Fs
VmFyCiAgICAgICAgIGJvb2wgbmVlZHNURFpDaGVjayA9IGdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkgIT0gSW5pdGlhbGl6YXRpb247CkBAIC0xNDQwLDIzICsxNDU1LDI0IEBAIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICBsb2FkOChBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBl
Rm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6
Om9mZnNldE9mTGVuZ3RoKCkpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlC
dWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgYmFzZSk7CisgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaCk7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaCkpOwogICAgIAog
ICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIGlm
IChpc1NpZ25lZCh0eXBlKSkKLSAgICAgICAgICAgIGxvYWQ4U2lnbmVkRXh0ZW5kVG8zMihCYXNl
SW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAg
ICAgICBsb2FkOFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBU
aW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2Fk
OChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7Cisg
ICAgICAgICAgICBsb2FkOChCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSwg
cmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgICAgaWYg
KGlzU2lnbmVkKHR5cGUpKQotICAgICAgICAgICAgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihCYXNl
SW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAg
ICAgICBsb2FkMTZTaWduZWRFeHRlbmRUbzMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwg
VGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9h
ZDE2KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsK
KyAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzVHdv
KSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoKLSAgICAgICAg
bG9hZDMyKEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSwgcmVzdWx0UGF5bG9h
ZCk7CisgICAgICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91
ciksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICBDUkFTSCgpOwpAQCAtMTUxMSwxNSArMTUyNywxNiBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEZsb2F0VHlwZWRBcnJheUdlCiAgICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBl
KHR5cGUpKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgp
KSkpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZWZWN0b3IoKSksIGJhc2UpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOworICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2gpKTsKICAgICAKICAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgotICAgICAgICBsb2FkRmxvYXQoQmFzZUluZGV4
KGJhc2UsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCBmcFJlZ1QwKTsKKyAgICAgICAgbG9hZEZsb2F0
KEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSwgZnBSZWdUMCk7CiAgICAg
ICAgIGNvbnZlcnRGbG9hdFRvRG91YmxlKGZwUmVnVDAsIGZwUmVnVDApOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIDg6IHsKLSAgICAgICAgbG9hZERvdWJsZShCYXNlSW5kZXgoYmFzZSwgcHJv
cGVydHksIFRpbWVzRWlnaHQpLCBmcFJlZ1QwKTsKKyAgICAgICAgbG9hZERvdWJsZShCYXNlSW5k
ZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRWlnaHQpLCBmcFJlZ1QwKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0xNTc5LDYgKzE1OTYsNyBAQCBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgLy8gV2Ugd291bGQgYmUgbG9hZGlu
ZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwog
ICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KICAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBs
YXRlU2NyYXRjaCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2UobGF0
ZVNjcmF0Y2gpKTsKICAgICAKICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CiAgICAgICAgIEFT
U0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKQEAgLTE2NjQsNiArMTY4Miw3IEBAIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAgICAvLyBXZSB3b3VsZCBiZSBs
b2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBz
bG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgogICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3Io
KSksIGxhdGVTY3JhdGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90VG9TcGFj
ZShsYXRlU2NyYXRjaCkpOwogICAgIAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsK
ICAgICBjYXNlIDQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTExODgsOSArMTE4OCwxMCBAQCBfbGxpbnRfb3BfaXNfb2JqZWN0OgogICAgIGRp
c3BhdGNoKDMpCiAKIAotbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0
eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKK21hY3JvIGxvYWRQcm9wZXJ0
eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwg
dmFsdWUsIHNsb3cpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGlu
ZU9mZnNldCwgLmlzSW5saW5lCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVj
dEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgY29weUJhcnJpZXIob2JqZWN0QW5k
U3RvcmFnZSwgc2xvdykKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGkycSBw
cm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFkeQpA
QCAtMTIwMSw5ICsxMjAyLDEwIEBAIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQo
cHJvcGUKIGVuZAogCiAKLW1hY3JvIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3Bl
cnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQorbWFjcm8gc3RvcmVQcm9w
ZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFn
ZSwgdmFsdWUsIHNsb3cpCiAgICAgYmlsdCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9m
TGluZU9mZnNldCwgLmlzSW5saW5lCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29i
amVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCisgICAgY29weUJhcnJpZXIob2JqZWN0
QW5kU3RvcmFnZSwgc2xvdykKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBzeGky
cSBwcm9wZXJ0eU9mZnNldEFzSW50LCBwcm9wZXJ0eU9mZnNldEFzSW50CiAgICAgam1wIC5yZWFk
eQpAQCAtMTIyMiw3ICsxMjI0LDcgQEAgX2xsaW50X29wX2dldF9ieV9pZDoKICAgICBiaW5lcSB0
MiwgdDEsIC5vcEdldEJ5SWRTbG93CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDUsIHQxKQog
ICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MikKLSAgICBsb2FkUHJvcGVydHlBdFZhcmlh
YmxlT2Zmc2V0KHQxLCB0MywgdDApCisgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0
MSwgdDMsIHQwLCAub3BHZXRCeUlkU2xvdykKICAgICBzdG9yZXEgdDAsIFtjZnIsIHQyLCA4XQog
ICAgIHZhbHVlUHJvZmlsZSh0MCwgOCwgdDEpCiAgICAgZGlzcGF0Y2goOSkKQEAgLTEyNDMsNiAr
MTI0NSw3IEBAIF9sbGludF9vcF9nZXRfYXJyYXlfbGVuZ3RoOgogICAgIGJ0aXogdDIsIEluZGV4
aW5nU2hhcGVNYXNrLCAub3BHZXRBcnJheUxlbmd0aFNsb3cKICAgICBsb2FkaXNGcm9tSW5zdHJ1
Y3Rpb24oMSwgdDEpCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAKKyAg
ICBjb3B5QmFycmllcih0MCwgLm9wR2V0QXJyYXlMZW5ndGhTbG93KQogICAgIGxvYWRpIC1zaXpl
b2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0
aFt0MF0sIHQwCiAgICAgYmlsdCB0MCwgMCwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CiAgICAgb3Jx
IHRhZ1R5cGVOdW1iZXIsIHQwCkBAIC0xMzgyLDcgKzEzODUsNyBAQCBfbGxpbnRfb3BfcHV0X2J5
X2lkOgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MSkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHQxLCB0MikKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNSwgdDEpCi0gICAg
c3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQwLCB0MikKKyAgICBzdG9yZVByb3Bl
cnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyLCAub3BQdXRCeUlkU2xvdykKICAgICBkaXNw
YXRjaCg5KQogCiAub3BQdXRCeUlkU2xvdzoKQEAgLTE0MDEsNiArMTQwNCw3IEBAIF9sbGludF9v
cF9nZXRfYnlfdmFsOgogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVJbnQzMih0MywgdDEsIC5v
cEdldEJ5VmFsU2xvdykKICAgICBzeGkycSB0MSwgdDEKICAgICBsb2FkcCBKU09iamVjdDo6bV9i
dXR0ZXJmbHlbdDBdLCB0MworICAgIGNvcHlCYXJyaWVyKHQzLCAub3BHZXRCeVZhbFNsb3cpCiAg
ICAgYW5kaSBJbmRleGluZ1NoYXBlTWFzaywgdDIKICAgICBiaWVxIHQyLCBJbnQzMlNoYXBlLCAu
b3BHZXRCeVZhbElzQ29udGlndW91cwogICAgIGJpbmVxIHQyLCBDb250aWd1b3VzU2hhcGUsIC5v
cEdldEJ5VmFsTm90Q29udGlndW91cwpAQCAtMTQ3MSw2ICsxNDc1LDcgQEAgbWFjcm8gcHV0QnlW
YWwoc2xvd1BhdGgpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHQwLCB0MywgLm9w
UHV0QnlWYWxTbG93KQogICAgIHN4aTJxIHQzLCB0MwogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1
dHRlcmZseVt0MV0sIHQwCisgICAgY29weUJhcnJpZXIodDAsIC5vcFB1dEJ5VmFsU2xvdykKICAg
ICBhbmRpIEluZGV4aW5nU2hhcGVNYXNrLCB0MgogICAgIGJpbmVxIHQyLCBJbnQzMlNoYXBlLCAu
b3BQdXRCeVZhbE5vdEludDMyCiAgICAgY29udGlndW91c1B1dEJ5VmFsKApAQCAtMTk5MSw5ICsx
OTk2LDkgQEAgbWFjcm8gbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhvcGVyYW5kLCBzbAogICAgIGJw
bmVxIHQyLCB0MSwgc2xvd1BhdGgKIGVuZAogCi1tYWNybyBnZXRQcm9wZXJ0eSgpCittYWNybyBn
ZXRQcm9wZXJ0eShzbG93KQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKLSAgICBs
b2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIpCisgICAgbG9hZFByb3BlcnR5
QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyLCBzbG93KQogICAgIHZhbHVlUHJvZmlsZSh0Miwg
NywgdDApCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQwKQogICAgIHN0b3JlcSB0Miwg
W2NmciwgdDAsIDhdCkBAIC0yMDI0LDcgKzIwMjksNyBAQCBfbGxpbnRfb3BfZ2V0X2Zyb21fc2Nv
cGU6CiAjZ0dsb2JhbFByb3BlcnR5OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLmdH
bG9iYWxWYXIKICAgICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKDIsIC5nRHluYW1pYykKLSAgICBn
ZXRQcm9wZXJ0eSgpCisgICAgZ2V0UHJvcGVydHkoLmdEeW5hbWljKQogICAgIGRpc3BhdGNoKDgp
CiAKIC5nR2xvYmFsVmFyOgpAQCAtMjA0OSw3ICsyMDU0LDcgQEAgX2xsaW50X29wX2dldF9mcm9t
X3Njb3BlOgogLmdHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmlu
ZXEgdDAsIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcywgLmdHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjaygyLCAuZ0R5
bmFtaWMpCi0gICAgZ2V0UHJvcGVydHkoKQorICAgIGdldFByb3BlcnR5KC5nRHluYW1pYykKICAg
ICBkaXNwYXRjaCg4KQogCiAuZ0dsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CkBAIC0y
MDc5LDExICsyMDg0LDExIEBAIF9sbGludF9vcF9nZXRfZnJvbV9zY29wZToKICAgICBkaXNwYXRj
aCg4KQogCiAKLW1hY3JvIHB1dFByb3BlcnR5KCkKK21hY3JvIHB1dFByb3BlcnR5KHNsb3cpCiAg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUodDEsIHQyKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKLSAgICBzdG9yZVBy
b3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyKQorICAgIHN0b3JlUHJvcGVydHlBdFZh
cmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIsIHNsb3cpCiBlbmQKIAogbWFjcm8gcHV0R2xvYmFsVmFy
aWFibGUoKQpAQCAtMjE0MSw3ICsyMTQ2LDcgQEAgX2xsaW50X29wX3B1dF90b19zY29wZToKICAg
ICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHksIC5wR2xvYmFsVmFyCiAgICAgd3JpdGVCYXJyaWVy
T25PcGVyYW5kcygxLCAzKQogICAgIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2soMSwgLnBEeW5hbWlj
KQotICAgIHB1dFByb3BlcnR5KCkKKyAgICBwdXRQcm9wZXJ0eSgucER5bmFtaWMpCiAgICAgZGlz
cGF0Y2goNykKIAogLnBHbG9iYWxWYXI6CkBAIC0yMTY4LDcgKzIxNzMsNyBAQCBfbGxpbnRfb3Bf
cHV0X3RvX3Njb3BlOgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MsIC5wR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHdyaXRlQmFy
cmllck9uT3BlcmFuZHMoMSwgMykKICAgICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKDEsIC5wRHlu
YW1pYykKLSAgICBwdXRQcm9wZXJ0eSgpCisgICAgcHV0UHJvcGVydHkoLnBEeW5hbWljKQogICAg
IGRpc3BhdGNoKDcpCiAKIC5wR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20JKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjIwLDYgKzIyMCw4IEBA
IGNvbnN0IFB1dEJ5SWRTZWNvbmRhcnlUeXBlT2JqZWN0ID0gMHgzMAogY29uc3QgUHV0QnlJZFNl
Y29uZGFyeVR5cGVPYmplY3RPck90aGVyID0gMHgzOAogY29uc3QgUHV0QnlJZFNlY29uZGFyeVR5
cGVUb3AgPSAweDQwCiAKK2NvbnN0IENvcHlCYXJyaWVyU3BhY2VCaXRzID0gMworCiBjb25zdCBD
YWxsT3BDb2RlU2l6ZSA9IDkKIAogaWYgWDg2XzY0IG9yIEFSTTY0IG9yIENfTE9PUApAQCAtNjY0
LDYgKzY2NiwxMCBAQCBtYWNybyBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoZGVzCiAg
ICAgZW5kCiBlbmQKIAorbWFjcm8gY29weUJhcnJpZXIodmFsdWUsIHNsb3cpCisgICAgYnRwbnog
dmFsdWUsIENvcHlCYXJyaWVyU3BhY2VCaXRzLCBzbG93CitlbmQKKwogbWFjcm8gZnVuY3Rpb25Q
cm9sb2d1ZSgpCiAgICAgaWYgWDg2IG9yIFg4Nl9XSU4gb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4K
ICAgICAgICAgcHVzaCBjZnIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTcsNyArOTcsNyBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0Nl
CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fb3ZlcnJpZGVzKSB7CiAgICAgICAgIHZpc2l0b3IuY29w
eUxhdGVyKAogICAgICAgICAgICAgdGhpc09iamVjdCwgRGlyZWN0QXJndW1lbnRzT3ZlcnJpZGVz
Q29weVRva2VuLAotICAgICAgICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0KCksIHRo
aXNPYmplY3QtPm92ZXJyaWRlc1NpemUoKSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5tX292
ZXJyaWRlcy5nZXRXaXRob3V0QmFycmllcigpLCB0aGlzT2JqZWN0LT5vdmVycmlkZXNTaXplKCkp
OwogICAgIH0KIH0KIApAQCAtMTA4LDE0ICsxMDgsMTEgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6
OmNvcHlCYWNraW5nU3RvcmUoSgogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKHRva2VuID09IERp
cmVjdEFyZ3VtZW50c092ZXJyaWRlc0NvcHlUb2tlbik7CiAgICAgCi0gICAgYm9vbCogb2xkT3Zl
cnJpZGVzID0gdGhpc09iamVjdC0+bV9vdmVycmlkZXMuZ2V0KCk7Ci0gICAgaWYgKCFvbGRPdmVy
cmlkZXMpCi0gICAgICAgIHJldHVybjsKLSAgICAKKyAgICB2b2lkKiBvbGRPdmVycmlkZXMgPSB0
aGlzT2JqZWN0LT5tX292ZXJyaWRlcy5nZXRXaXRob3V0QmFycmllcigpOwogICAgIGlmICh2aXNp
dG9yLmNoZWNrSWZTaG91bGRDb3B5KG9sZE92ZXJyaWRlcykpIHsKICAgICAgICAgYm9vbCogbmV3
T3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0
aGlzT2JqZWN0LT5vdmVycmlkZXNTaXplKCkpKTsKICAgICAgICAgbWVtY3B5KG5ld092ZXJyaWRl
cywgb2xkT3ZlcnJpZGVzLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7Ci0gICAgICAgIHRoaXNPYmpl
Y3QtPm1fb3ZlcnJpZGVzLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobmV3T3ZlcnJpZGVzKTsKKyAg
ICAgICAgdGhpc09iamVjdC0+bV9vdmVycmlkZXMuc2V0V2l0aG91dEJhcnJpZXIobmV3T3ZlcnJp
ZGVzKTsKICAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZE92ZXJyaWRlcywgdGhpc09iamVjdC0+
b3ZlcnJpZGVzU2l6ZSgpKTsKICAgICB9CiB9CkBAIC0xMzUsOSArMTMyLDEwIEBAIHZvaWQgRGly
ZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5ncyhWTSYKICAgICAKICAgICB2b2lkKiBiYWNraW5n
U3RvcmU7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UodGhp
cywgb3ZlcnJpZGVzU2l6ZSgpLCAmYmFja2luZ1N0b3JlKSk7Ci0gICAgbV9vdmVycmlkZXMuc2V0
KHZtLCB0aGlzLCBzdGF0aWNfY2FzdDxib29sKj4oYmFja2luZ1N0b3JlKSk7CisgICAgYm9vbCog
b3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CisgICAgbV9vdmVy
cmlkZXMuc2V0KHZtLCB0aGlzLCBvdmVycmlkZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG1f
bGVuZ3RoOyBpLS07KQotICAgICAgICBtX292ZXJyaWRlcy5nZXQoKVtpXSA9IGZhbHNlOworICAg
ICAgICBvdmVycmlkZXNbaV0gPSBmYWxzZTsKIH0KIAogdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92
ZXJyaWRlVGhpbmdzSWZOZWNlc3NhcnkoVk0mIHZtKQpAQCAtMTQ5LDcgKzE0Nyw3IEBAIHZvaWQg
RGlyZWN0QXJndW1lbnRzOjpvdmVycmlkZVRoaW5nc0lmTmUKIHZvaWQgRGlyZWN0QXJndW1lbnRz
OjpvdmVycmlkZUFyZ3VtZW50KFZNJiB2bSwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgb3ZlcnJp
ZGVUaGluZ3NJZk5lY2Vzc2FyeSh2bSk7Ci0gICAgbV9vdmVycmlkZXMuZ2V0KClbaW5kZXhdID0g
dHJ1ZTsKKyAgICBtX292ZXJyaWRlcy5nZXQodGhpcylbaW5kZXhdID0gdHJ1ZTsKIH0KIAogdm9p
ZCBEaXJlY3RBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1
YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5oCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgYm9vbCBjYW5BY2Nlc3NJbmRleFF1aWNrbHkodWludDMyX3QgaSkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGggJiYgKCFtX292ZXJyaWRl
cyB8fCAhbV9vdmVycmlkZXMuZ2V0KClbaV0pOworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3Ro
ICYmICghbV9vdmVycmlkZXMgfHwgIW1fb3ZlcnJpZGVzLmdldCh0aGlzKVtpXSk7CiAgICAgfQog
CiAgICAgYm9vbCBjYW5BY2Nlc3NBcmd1bWVudEluZGV4UXVpY2tseUluREZHKHVpbnQzMl90IGkp
IGNvbnN0CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNG
dW5jdGlvbj4gbV9jYWxsZWU7CiAgICAgdWludDMyX3QgbV9sZW5ndGg7IC8vIEFsd2F5cyB0aGUg
YWN0dWFsIGxlbmd0aCBvZiBjYXB0dXJlZCBhcmd1bWVudHMgYW5kIG5ldmVyIHdoYXQgd2FzIHN0
b3JlZCBpbnRvIHRoZSBsZW5ndGggcHJvcGVydHkuCiAgICAgdWludDMyX3QgbV9taW5DYXBhY2l0
eTsgLy8gVGhlIG1heCBvZiB0aGlzIGFuZCBsZW5ndGggZGV0ZXJtaW5lcyB0aGUgY2FwYWNpdHkg
b2YgdGhpcyBvYmplY3QuIEl0IG1heSBiZSB0aGUgYWN0dWFsIGNhcGFjaXR5LCBvciBtYXliZSBz
b21ldGhpbmcgc21hbGxlci4gV2UgYXJyYW5nZSBpdCB0aGlzIHdheSB0byBiZSBraW5kIHRvIHRo
ZSBKSVRzLgotICAgIENvcHlXcml0ZUJhcnJpZXI8Ym9vbD4gbV9vdmVycmlkZXM7IC8vIElmIG5v
bi1udWxsLCBpdCBtZWFucyB0aGF0IGxlbmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxs
eSBtYXRlcmlhbGl6ZWQgcHJvcGVydGllcy4KKyAgICBDb3B5QmFycmllcjxib29sPiBtX292ZXJy
aWRlczsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBj
YWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Miw2ICszOTIsNyBAQCBib29sIEpTQXJyYXk6
OnNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCiAKIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQog
eworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAg
IHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAg
IGlmICghbmV3TGVuZ3RoKQpAQCAtNDA4LDcgKzQwOSw3IEBAIGJvb2wgSlNBcnJheTo6c2V0TGVu
Z3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICBjYXNlIEFycmF5V2l0aEludDMyOgogICAgIGNhc2Ug
QXJyYXlXaXRoRG91YmxlOgogICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czogewotICAgICAg
ICBpZiAobmV3TGVuZ3RoID09IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAg
aWYgKG5ld0xlbmd0aCA9PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChuZXdMZW5ndGggPj0gTUFYX0FSUkFZX0lOREVYIC8v
IFRoaXMgY2FzZSBlbnN1cmVzIHRoYXQgd2UgY2FuIGRvIGZhc3QgcHVzaC4KICAgICAgICAgICAg
IHx8IChuZXdMZW5ndGggPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWApAQCAtNDE3LDEyICs0MTgs
MTIgQEAgYm9vbCBKU0FycmF5OjpzZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICAg
ICAgICAgIGV4ZWMsIG5ld0xlbmd0aCwgdGhyb3dFeGNlcHRpb24sCiAgICAgICAgICAgICAgICAg
ZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
bmV3TGVuZ3RoID4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7CisgICAgICAgIGlmIChu
ZXdMZW5ndGggPiBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7CiAgICAgICAgICAgICBlbnN1
cmVMZW5ndGgoZXhlYy0+dm0oKSwgbmV3TGVuZ3RoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoVG9DbGVhciA9IG1fYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKSAtIG5ld0xlbmd0aDsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
VG9DbGVhciA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkgLSBuZXdMZW5ndGg7CiAgICAgICAg
IHVuc2lnbmVkIGNvc3RUb0FsbG9jYXRlTmV3QnV0dGVyZmx5ID0gNjQ7IC8vIGEgaGV1cmlzdGlj
LgogICAgICAgICBpZiAobGVuZ3RoVG9DbGVhciA+IG5ld0xlbmd0aCAmJiBsZW5ndGhUb0NsZWFy
ID4gY29zdFRvQWxsb2NhdGVOZXdCdXR0ZXJmbHkpIHsKICAgICAgICAgICAgIHJlYWxsb2NhdGVB
bmRTaHJpbmtCdXR0ZXJmbHkoZXhlYy0+dm0oKSwgbmV3TGVuZ3RoKTsKQEAgLTQzMCwxMyArNDMx
LDEzIEBAIGJvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChpbmRleGluZ1R5cGUoKSA9PSBBcnJheVdpdGhEb3VibGUpIHsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsg
aS0tID4gbmV3TGVuZ3RoOykKLSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7IGktLSA+IG5ld0xlbmd0aDspCisgICAgICAgICAgICAgICAg
YnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOyBpLS0gPiBuZXdMZW5ndGg7KQotICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7IGktLSA+IG5ld0xlbmd0aDspCisgICAgICAgICAgICAgICAg
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgfQotICAgICAgICBt
X2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKG5ld0xlbmd0aCk7CisgICAgICAgIGJ1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKG5ld0xlbmd0aCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAgICAgCkBAIC00NTIsNTEgKzQ1Myw1MyBAQCBib29sIEpTQXJyYXk6OnNldExlbmd0
aChFeGVjU3RhdGUqIGV4ZWMsCiAKIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsK
KyAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheUNsYXNz
OgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJh
eVdpdGhVbmRlY2lkZWQ6Ci0gICAgICAgIGlmICghbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
KQorICAgICAgICBpZiAoIWJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgLy8gV2UgaGF2ZSBub3RoaW5nIGJ1dCBob2xl
cy4gU28sIGRyb3AgZG93biB0byB0aGUgc2xvdyB2ZXJzaW9uLgogICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhJbnQzMjoKICAgICBjYXNlIEFycmF5V2l0aENvbnRp
Z3VvdXM6IHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpOwogICAgICAgICAKICAgICAgICAgaWYgKCFsZW5ndGgtLSkKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3Ro
IDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobGVuZ3RoIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtsZW5ndGhdLmdldCgpOwogICAg
ICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
bGVuZ3RoXS5jbGVhcigpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0
aChsZW5ndGgpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5j
bGVhcigpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsK
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOiB7Ci0gICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAg
IGlmICghbGVuZ3RoLS0pCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAg
ICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA8IG1fYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKSk7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbbGVuZ3RoXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoIDwgYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2xlbmd0aF07CiAgICAgICAgIGlmICh2YWx1ZSA9PSB2YWx1ZSkg
ewotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtsZW5ndGhdID0g
UE5hTjsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsK
KyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2xlbmd0aF0gPSBQTmFO
OworICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFSUkFZ
X1dJVEhfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgCiAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwogICAgICAgICBpZiAoIWxl
bmd0aCkgewpAQCAtNTQ3LDYgKzU1MCw4IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0
ZSogZXhlYykKIC8vICAtIHB1c2hpbmcgdG8gYW4gYXJyYXkgb2YgbGVuZ3RoIDJeMzItMSBzdG9y
ZXMgdGhlIHByb3BlcnR5LCBidXQgdGhyb3dzIGEgcmFuZ2UgZXJyb3IuCiB2b2lkIEpTQXJyYXk6
OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIAogICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6IHsKICAgICAgICAgY3JlYXRlSW5p
dGlhbFVuZGVjaWRlZChleGVjLT52bSgpLCAwKTsKQEAgLTU2NiwxMSArNTcxLDExIEBAIHZvaWQg
SlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsKLSAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBtX2J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpOwotICAgICAgICBpZiAobGVuZ3RoIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpKSB7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbbGVuZ3Ro
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoICsgMSk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVChsZW5ndGggPD0gYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlmIChsZW5ndGggPCBidXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKSB7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQz
MigpW2xlbmd0aF0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CisgICAgICAgICAgICBi
dXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTU4NiwxMSArNTkxLDExIEBAIHZvaWQgSlNBcnJh
eTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICB9CiAKICAgICBjYXNlIEFycmF5V2l0
aENvbnRpZ3VvdXM6IHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpOwotICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7Ci0gICAgICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpIHsKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbbGVuZ3RoXS5z
ZXQoZXhlYy0+dm0oKSwgdGhpcywgdmFsdWUpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNl
dFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IGJ1dHRlcmZseS0+dmVj
dG9yTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2xlbmd0
aF0uc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+
c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtNjE4LDExICs2MjMsMTEgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwotICAg
ICAgICBBU1NFUlQobGVuZ3RoIDw9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAg
ICAgIGlmIChsZW5ndGggPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpIHsKLSAgICAgICAg
ICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbbGVuZ3RoXSA9IHZhbHVlQXNEb3Vi
bGU7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCArIDEp
OworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwor
ICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOworICAg
ICAgICBpZiAobGVuZ3RoIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkgeworICAgICAgICAg
ICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbbGVuZ3RoXSA9IHZhbHVlQXNEb3VibGU7
CisgICAgICAgICAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGggKyAxKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTY0OCw3ICs2NTMsNyBA
QCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICBBcnJheVN0b3Jh
Z2UqIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5
U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAKICAgICAgICAg
Ly8gRmFzdCBjYXNlIC0gcHVzaCB3aXRoaW4gdmVjdG9yLCBhbHdheXMgdXBkYXRlIG1fbGVuZ3Ro
ICYgbV9udW1WYWx1ZXNJblZlY3Rvci4KICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RvcmFn
ZS0+bGVuZ3RoKCk7CkBAIC02OTYsOSArNzAxLDkgQEAgSlNBcnJheSogSlNBcnJheTo6ZmFzdFNs
aWNlKEV4ZWNTdGF0ZSYgZQogCiAgICAgICAgIGF1dG8mIHJlc3VsdEJ1dHRlcmZseSA9ICpyZXN1
bHRBcnJheS0+YnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChhcnJheVR5cGUgPT0gQXJyYXlXaXRo
RG91YmxlKQotICAgICAgICAgICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzRG91
YmxlKCkuZGF0YSgpLCBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0
YXJ0SW5kZXgsIHNpemVvZihKU1ZhbHVlKSAqIGNvdW50KTsKKyAgICAgICAgICAgIG1lbWNweShy
ZXN1bHRCdXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpT
VmFsdWUpICogY291bnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZW1jcHkocmVzdWx0
QnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCksIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCku
ZGF0YSgpICsgc3RhcnRJbmRleCwgc2l6ZW9mKEpTVmFsdWUpICogY291bnQpOworICAgICAgICAg
ICAgbWVtY3B5KHJlc3VsdEJ1dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgpLCBtX2J1dHRlcmZs
eS5nZXQodGhpcyktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4LCBzaXplb2YoSlNW
YWx1ZSkgKiBjb3VudCk7CiAgICAgICAgIHJlc3VsdEJ1dHRlcmZseS5zZXRQdWJsaWNMZW5ndGgo
Y291bnQpOwogCiAgICAgICAgIHJldHVybiByZXN1bHRBcnJheTsKQEAgLTcxNSw4ICs3MjAsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0FycmF5OjpmYXN0Q29uY2F0V2l0aChFCiAgICAgVk0mIHZtID0g
ZXhlYy52bSgpOwogICAgIEFTU0VSVChuZXdBcnJheVR5cGUgPT0gZmFzdENvbmNhdFR5cGUodm0s
ICp0aGlzLCBvdGhlckFycmF5KSk7CiAKLSAgICB1bnNpZ25lZCB0aGlzQXJyYXlTaXplID0gbV9i
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwotICAgIHVuc2lnbmVkIG90aGVyQXJyYXlTaXplID0g
b3RoZXJBcnJheS5tX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgdW5zaWduZWQgdGhp
c0FycmF5U2l6ZSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHVibGljTGVuZ3RoKCk7CisgICAg
dW5zaWduZWQgb3RoZXJBcnJheVNpemUgPSBvdGhlckFycmF5Lm1fYnV0dGVyZmx5LmdldCh0aGlz
KS0+cHVibGljTGVuZ3RoKCk7CiAgICAgQVNTRVJUKHRoaXNBcnJheVNpemUgKyBvdGhlckFycmF5
U2l6ZSA8IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpOwogCiAgICAgU3RydWN0dXJlKiByZXN1bHRT
dHJ1Y3R1cmUgPSBleGVjLmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5ld0FycmF5VHlwZSk7CkBAIC03MjgsMTEgKzcz
MywxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0FycmF5OjpmYXN0Q29uY2F0V2l0aChFCiAgICAgYXV0
byYgb3RoZXJCdXR0ZXJmbHkgPSAqb3RoZXJBcnJheS5idXR0ZXJmbHkoKTsKICAgICBpZiAobmV3
QXJyYXlUeXBlID09IEFycmF5V2l0aERvdWJsZSkgewogICAgICAgICBhdXRvIGJ1ZmZlciA9IHJl
c3VsdEJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpOwotICAgICAgICBtZW1jcHko
YnVmZmVyLCBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9mKEpT
VmFsdWUpICogdGhpc0FycmF5U2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIG1fYnV0dGVy
Zmx5LmdldCh0aGlzKS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUp
ICogdGhpc0FycmF5U2l6ZSk7CiAgICAgICAgIG1lbWNweShidWZmZXIgKyB0aGlzQXJyYXlTaXpl
LCBvdGhlckJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpLCBzaXplb2YoSlNWYWx1
ZSkgKiBvdGhlckFycmF5U2l6ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBidWZmZXIg
PSByZXN1bHRCdXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgbWVtY3B5KGJ1
ZmZlciwgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAq
IHRoaXNBcnJheVNpemUpOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBtX2J1dHRlcmZseS5nZXQo
dGhpcyktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIHNpemVvZihKU1ZhbHVlKSAqIHRoaXNBcnJheVNp
emUpOwogICAgICAgICBtZW1jcHkoYnVmZmVyICsgdGhpc0FycmF5U2l6ZSwgb3RoZXJCdXR0ZXJm
bHkuY29udGlndW91cygpLmRhdGEoKSwgc2l6ZW9mKEpTVmFsdWUpICogb3RoZXJBcnJheVNpemUp
OwogICAgIH0KIApAQCAtODA1LDggKzgxMCw5IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdp
dGhBcnJheVN0b3JhZ2UKICAgICAgICAgLy8gQWRqdXN0IHRoZSBCdXR0ZXJmbHkgYW5kIHRoZSBp
bmRleCBiaWFzLiBXZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBoZXJlIGJlY2F1c2Ugd2UncmUgY2hh
bmdpbmcKICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBCdXR0ZXJmbHksIHdoaWNoIG5lZWRz
IHRvIHBvaW50IGF0IHRoZSBmaXJzdCBpbmRleGVkIHByb3BlcnR5IGluIHRoZSB1c2VkCiAgICAg
ICAgIC8vIHBvcnRpb24gb2YgdGhlIHZlY3Rvci4KLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0
aG91dFdyaXRlQmFycmllcihtX2J1dHRlcmZseS0+c2hpZnQoc3RydWN0dXJlKCksIGNvdW50KSk7
Ci0gICAgICAgIHN0b3JhZ2UgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5zaGlmdChzdHJ1
Y3R1cmUoKSwgY291bnQpOworICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcihi
dXR0ZXJmbHkpOworICAgICAgICBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
ICAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgKz0gY291bnQ7CiAKICAgICAgICAgLy8gU2lu
Y2Ugd2UncmUgY29uc3VtaW5nIHBhcnQgb2YgdGhlIHZlY3RvciBieSBtb3ZpbmcgaXRzIGJlZ2lu
bmluZyB0byB0aGUgbGVmdCwKQEAgLTg0OCw2ICs4NTQsOCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0
Q291bnRXaXRoQW55SW5kZXhpbmdUCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBS
RUxFQVNFX0FTU0VSVChjb3VudCA+IDApOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgCiAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkg
ewogICAgIGNhc2UgQXJyYXlDbGFzczoKQEAgLTg1OSw3ICs4NjcsNyBAQCBib29sIEpTQXJyYXk6
OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlXaXRo
SW50MzI6CiAgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIHVuc2lnbmVk
IG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWdu
ZWQgb2xkTGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY291bnQgPD0gb2xkTGVuZ3RoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG1h
eSBoYXZlIHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgc2hpZnQuIFdlJ3JlIHdp
bGxpbmcgdG8gZG8KQEAgLTg3NCwyOCArODgyLDI4IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3Vu
dFdpdGhBbnlJbmRleGluZ1QKICAgICAgICAgdW5zaWduZWQgZW5kID0gb2xkTGVuZ3RoIC0gY291
bnQ7CiAgICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUodm0pLT5ob2xlc011c3RGb3J3YXJkVG9Q
cm90b3R5cGUodm0pKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4
OyBpIDwgZW5kOyArK2kpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpW2kgKyBjb3VudF0uZ2V0KCk7CisgICAgICAgICAgICAgICAgSlNWYWx1
ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5nZXQoKTsKICAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5k
ZXggPSBpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0
b3JhZ2Uodm0sIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtZW1tb3ZlKG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgCi0gICAgICAgICAgICAgICAgbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291bnQsIAorICAgICAg
ICAgICAgbWVtbW92ZShidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4
LCAKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFy
dEluZGV4ICsgY291bnQsIAogICAgICAgICAgICAgICAgIHNpemVvZihKU1ZhbHVlKSAqIChlbmQg
LSBzdGFydEluZGV4KSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBl
bmQ7IGkgPCBvbGRMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmNsZWFyKCk7CiAgICAgICAgIAotICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3Ro
KG9sZExlbmd0aCAtIGNvdW50KTsKKyAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgo
b2xkTGVuZ3RoIC0gY291bnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgQXJyYXlXaXRoRG91YmxlOiB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExlbmd0
aCA9IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgb2xkTGVu
Z3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y291bnQgPD0gb2xkTGVuZ3RoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRv
IHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgc2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8g
ZG8KQEAgLTkxMCwyMiArOTE4LDIyIEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJ
bmRleGluZ1QKICAgICAgICAgdW5zaWduZWQgZW5kID0gb2xkTGVuZ3RoIC0gY291bnQ7CiAgICAg
ICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUodm0pLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUo
dm0pKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5k
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKClbaSArIGNvdW50XTsKKyAgICAgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpW2kgKyBjb3VudF07CiAgICAgICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHYgIT0gdikpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh2
bSwgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldID0gdjsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XSA9IHY7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtZW1t
b3ZlKG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwK
LSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSAr
IHN0YXJ0SW5kZXggKyBjb3VudCwKKyAgICAgICAgICAgIG1lbW1vdmUoYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKCkuZGF0YSgpICsgc3RhcnRJbmRleCwKKyAgICAgICAgICAgICAgICBidXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291bnQsCiAg
ICAgICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogKGVuZCAtIHN0YXJ0SW5kZXgpKTsKICAg
ICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQ7IGkgPCBvbGRMZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFO
OworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwog
ICAgICAgICAKLSAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChvbGRMZW5ndGgg
LSBjb3VudCk7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKG9sZExlbmd0aCAt
IGNvdW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKQEAgLTk4Niw2
ICs5OTQsOCBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAKIGJv
b2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogeworICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIAogICAgIHN3aXRjaCAo
aW5kZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgY2FzZSBBcnJheVdp
dGhVbmRlY2lkZWQ6CkBAIC05OTQsNyArMTAwNCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENv
dW50V2l0aEFueUluZGV4aW4KIAogICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6CiAgICAgY2FzZSBB
cnJheVdpdGhDb250aWd1b3VzOiB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG1heSBoYXZl
IHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgdW5zaGlmdC4gV2UncmUgd2lsbGlu
ZyB0byBkbyBzbwogICAgICAgICAvLyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCkBA
IC0xMDAyLDE5ICsxMDEyLDIwIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUlu
ZGV4aW4KICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4
ZWMsIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwog
ICAgICAgICAKICAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG9sZExlbmd0aCArIGNv
dW50KTsKKyAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogCiAgICAg
ICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3ZSBzdGFydCBtb3Zpbmcg
dGhpbmdzIGFyb3VuZCBzbyB0aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5IAogICAgICAgICAvLyB0
aHJvdWdoIHNoaWZ0aW5nIGFuZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxkIGhhdmUgYmVlbiBpbiBB
cnJheVN0b3JhZ2UgbW9kZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkTGVuZ3RoOyBp
LS0gPiBzdGFydEluZGV4OykgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IGJ1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLmdldCgpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVj
LCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZExlbmd0aDsgaS0tID4gc3Rh
cnRJbmRleDspIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2KTsKLSAgICAgICAgICAgIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KHYpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKHYpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBO
T1RFOiB3ZSdyZSBsZWF2aW5nIGJlaW5nIGdhcmJhZ2UgaW4gdGhlIHBhcnQgb2YgdGhlIGFycmF5
IHRoYXQgd2Ugc2hpZnRlZCBvdXQKQEAgLTEwMjYsNyArMTAzNyw3IEBAIGJvb2wgSlNBcnJheTo6
dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4KICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJy
YXlXaXRoRG91YmxlOiB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG1fYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIHdh
bGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgdW5zaGlmdC4gV2UncmUgd2lsbGluZyB0byBk
byBzbwogICAgICAgICAvLyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCkBAIC0xMDM0
LDE5ICsxMDQ1LDIwIEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFueUluZGV4aW4K
ICAgICAgICAgICAgIHJldHVybiB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMsIHN0
YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgICAg
ICAKICAgICAgICAgZW5zdXJlTGVuZ3RoKGV4ZWMtPnZtKCksIG9sZExlbmd0aCArIGNvdW50KTsK
KyAgICAgICAgYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgICAgICAKICAg
ICAgICAgLy8gV2UgaGF2ZSB0byBjaGVjayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1vdmlu
ZyB0aGluZ3MgYXJvdW5kIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAgIC8v
IHRocm91Z2ggc2hpZnRpbmcgYW5kIHRoZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGlu
IEFycmF5U3RvcmFnZSBtb2RlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7
IGktLSA+IHN0YXJ0SW5kZXg7KSB7Ci0gICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZs
eS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHYgIT0g
dikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7
CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRMZW5ndGg7IGktLSA+
IHN0YXJ0SW5kZXg7KSB7Ci0gICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+Y29u
dGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICAgICAgQVNTRVJUKHYgPT0gdik7Ci0gICAgICAg
ICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2kgKyBjb3VudF0gPSB2OworICAg
ICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaSArIGNvdW50XSA9IHY7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE5PVEU6IHdlJ3JlIGxlYXZpbmcgYmVpbmcg
Z2FyYmFnZSBpbiB0aGUgcGFydCBvZiB0aGUgYXJyYXkgdGhhdCB3ZSBzaGlmdGVkIG91dApAQCAt
MTA3Miw2ICsxMDg0LDggQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGV4
ZQogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIHVuc2lnbmVkIHZlY3RvckVuZDsKICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
bV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkp
IHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CkBAIC0xMDg1LDE2ICsxMDk5LDE2IEBAIHZvaWQgSlNB
cnJheTo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBleGUKICAgICAgICAgCiAgICAgY2FzZSBBcnJh
eVdpdGhJbnQzMjoKICAgICBjYXNlIEFycmF5V2l0aENvbnRpZ3VvdXM6IHsKLSAgICAgICAgdmVj
dG9yRW5kID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwotICAgICAgICB2ZWN0b3IgPSBt
X2J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKTsKKyAgICAgICAgdmVjdG9yRW5kID0gYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgdmVjdG9yID0gYnV0dGVyZmx5LT5jb250
aWd1b3VzKCkuZGF0YSgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgQXJyYXlXaXRoRG91YmxlOiB7CiAgICAgICAgIHZlY3RvciA9IDA7CiAgICAgICAgIHZlY3Rv
ckVuZCA9IDA7Ci0gICAgICAgIGZvciAoOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OyArK2kpIHsKLSAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXTsKKyAgICAgICAgZm9yICg7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91
YmxlKClbaV07CiAgICAgICAgICAgICBpZiAodiAhPSB2KQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgYXJncy5hcHBlbmQoSlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJs
ZSwgdikpOwpAQCAtMTEwMyw3ICsxMTE3LDcgQEAgdm9pZCBKU0FycmF5OjpmaWxsQXJnTGlzdChF
eGVjU3RhdGUqIGV4ZQogICAgIH0KICAgICAKICAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBt
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIAogICAgICAgICB2ZWN0b3Ig
PSBzdG9yYWdlLT5tX3ZlY3RvcjsKICAgICAgICAgdmVjdG9yRW5kID0gbWluKHN0b3JhZ2UtPmxl
bmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CkBAIC0xMTQxLDYgKzExNTUsOCBAQCB2
b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgLy8gRklYTUU6IFdo
YXQgcHJldmVudHMgdGhpcyBmcm9tIGJlaW5nIGNhbGxlZCB3aXRoIGEgUnVudGltZUFycmF5PyBU
aGUgbGVuZ3RoIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiAwIGluIHRoYXQgY2FzZS4KICAg
ICBBU1NFUlQobGVuZ3RoID09IHRoaXMtPmxlbmd0aCgpKTsKIAorICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAgIAogICAgIHN3aXRjaCAoaW5kZXhp
bmdUeXBlKCkpIHsKICAgICBjYXNlIEFycmF5Q2xhc3M6CiAgICAgICAgIHJldHVybjsKQEAgLTEx
NTMsMTcgKzExNjksMTcgQEAgdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRl
KgogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aEludDMyOgogICAgIGNhc2UgQXJyYXlXaXRo
Q29udGlndW91czogewotICAgICAgICB2ZWN0b3IgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygp
LmRhdGEoKTsKLSAgICAgICAgdmVjdG9yRW5kID0gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OworICAgICAgICB2ZWN0b3IgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7CisgICAg
ICAgIHZlY3RvckVuZCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhEb3VibGU6IHsKICAgICAgICAg
dmVjdG9yID0gMDsKICAgICAgICAgdmVjdG9yRW5kID0gMDsKLSAgICAgICAgZm9yICg7IGkgPCBt
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgQVNTRVJUKGkg
PCBidXR0ZXJmbHkoKS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgZG91YmxlIHYgPSBt
X2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICBmb3IgKDsgaSA8IGJ1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgQVNTRVJUKGkgPCBi
dXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGRvdWJsZSB2ID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgICAgICBpZiAodiAhPSB2KQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnREZXN0
ICsgaSAtIG9mZnNldCkgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2KTsKQEAg
LTExNzIsNyArMTE4OCw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0
ZSoKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0
b3I7CiAgICAgICAgIHZlY3RvckVuZCA9IG1pbihsZW5ndGgsIHN0b3JhZ2UtPnZlY3Rvckxlbmd0
aCgpKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAxOTA2ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg4LDEwICs4OCwxMCBAQCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0
aW9uQ29udGV4dDo6CiAgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIsCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQogICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgICwgbV92ZWN0
b3Ioc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9mZnNl
dCkKICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAsIG1fbW9kZShXYXN0ZWZ1bFR5cGVkQXJy
YXkpCiB7CisgICAgbV92ZWN0b3IgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXIt
PmRhdGEoKSkgKyBieXRlT2Zmc2V0OwogICAgIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVy
OwogICAgIGluZGV4aW5nSGVhZGVyLnNldEFycmF5QnVmZmVyKGFycmF5QnVmZmVyLmdldCgpKTsK
ICAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAwLCAwLCAwLCB0cnVlLCBp
bmRleGluZ0hlYWRlciwgMCk7CkBAIC0xMDEsMTkgKzEwMSwxOSBAQCBKU0FycmF5QnVmZmVyVmll
dzo6Q29uc3RydWN0aW9uQ29udGV4dDo6CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyLAogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgRGF0YVZpZXdUYWcpCiAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1
cmUpCi0gICAgLCBtX3ZlY3RvcihzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRh
dGEoKSkgKyBieXRlT2Zmc2V0KQogICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICwgbV9tb2Rl
KERhdGFWaWV3TW9kZSkKICAgICAsIG1fYnV0dGVyZmx5KDApCiB7CisgICAgbV92ZWN0b3IgPSBz
dGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0Owog
fQogCiBKU0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1
Y3Rpb25Db250ZXh0JiBjb250ZXh0KQogICAgIDogQmFzZSh2bSwgY29udGV4dC5zdHJ1Y3R1cmUo
KSwgY29udGV4dC5idXR0ZXJmbHkoKSkKLSAgICAsIG1fdmVjdG9yKGNvbnRleHQudmVjdG9yKCkp
CiAgICAgLCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQogICAgICwgbV9tb2RlKGNvbnRleHQu
bW9kZSgpKQogeworICAgIG1fdmVjdG9yLnNldFdpdGhvdXRCYXJyaWVyKHN0YXRpY19jYXN0PGNo
YXIqPihjb250ZXh0LnZlY3RvcigpKSk7CiB9CiAKIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIEpTQXJyYXlCdWZm
ZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqCiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwogICAgIEFTU0VSVCh0
aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1f
bW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUg
PT0gT3ZlcnNpemVUeXBlZEFycmF5KQotICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3Zl
Y3Rvcik7CisgICAgICAgIGZhc3RGcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldFdpdGhvdXRC
YXJyaWVyKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMTkw
NjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyVmlldz4gaW1wbCgpOwogICAgIHZvaWQgbmV1dGVyKCk7CiAgICAgCi0g
ICAgdm9pZCogdmVjdG9yKCkgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICB2b2lkKiB2ZWN0b3Io
KSB7IHJldHVybiBtX3ZlY3Rvci5nZXQodGhpcyk7IH0KICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0
KCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KIApA
QCAtMTc3LDcgKzE3Nyw3IEBAIHByaXZhdGU6CiBwcm90ZWN0ZWQ6CiAgICAgQXJyYXlCdWZmZXIq
IGV4aXN0aW5nQnVmZmVySW5CdXR0ZXJmbHkoKTsKIAotICAgIHZvaWQqIG1fdmVjdG9yOworICAg
IENvcHlCYXJyaWVyPGNoYXI+IG1fdmVjdG9yOyAvLyB0aGlzIGlzIHJlYWxseSBhIHZvaWQqLCBi
dXQgdm9pZCB3b3VsZCBub3Qgd29yayBoZXJlLgogICAgIHVpbnQzMl90IG1fbGVuZ3RoOwogICAg
IFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkocmV2aXNp
b24gMTkwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIHZv
aWQgSlNBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpCiB7CiAgICAgQVNTRVJUKGhhc0FycmF5QnVm
ZmVyKCkpOwogICAgIG1fbGVuZ3RoID0gMDsKLSAgICBtX3ZlY3RvciA9IDA7CisgICAgbV92ZWN0
b3IuY2xlYXIoKTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRl
T2Zmc2V0KCkKQEAgLTY4LDcgKzY4LDcgQEAgaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJW
aWV3OjpieXRlTwogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBwdHJkaWZmX3QgZGVsdGEg
PQotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV92ZWN0b3IpIC0gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KGJ1ZmZlcigpLT5kYXRhKCkpOworICAgICAgICBiaXR3aXNlX2Nhc3Q8dWludDhf
dCo+KG1fdmVjdG9yLmdldCh0aGlzKSkgLSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyKCkt
PmRhdGEoKSk7CiAgICAgCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGRlbHRhKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihyZXN1bHQpID09
IGRlbHRhKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4LDExICsxMDgsMTEgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IHR5
cGVuYW1lIEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0
b3IpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGUqPihtX3ZlY3Rvci5nZXQodGhpcykpOwogICAgIH0KICAgICB0eXBlbmFtZSBBZGFwdG9y
OjpUeXBlKiB0eXBlZFZlY3RvcigpCiAgICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IuZ2V0KHRoaXMpKTsKICAg
ICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBpbmRleGVkIGFj
Y2VzcyBtZXRob2RzIHRoYXQgSlNPYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oCShyZXZpc2lvbiAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQxLDcg
KzQ0MSw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnYKICAgICBz
d2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgewogICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6IHsK
ICAgICAgICAgaWYgKHRoaXNPYmplY3QtPm1fdmVjdG9yKQotICAgICAgICAgICAgdmlzaXRvci5j
b3B5TGF0ZXIodGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09iamVj
dC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICAgICAgdmlzaXRv
ci5jb3B5TGF0ZXIodGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09i
amVjdC0+bV92ZWN0b3IuZ2V0V2l0aG91dEJhcnJpZXIoKSwgdGhpc09iamVjdC0+Ynl0ZVNpemUo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00NjgsMTIgKzQ2OCwxMiBA
QCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjCiAgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqPihjZWxsKTsKICAgICAKICAgICBpZiAodG9rZW4gPT0gVHlwZWRBcnJheVZlY3RvckNvcHlU
b2tlbgotICAgICAgICAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1f
dmVjdG9yKSkgeworICAgICAgICAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmpl
Y3QtPm1fdmVjdG9yLmdldFdpdGhvdXRCYXJyaWVyKCkpKSB7CiAgICAgICAgIEFTU0VSVCh0aGlz
T2JqZWN0LT5tX3ZlY3Rvcik7Ci0gICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRoaXNPYmplY3Qt
Pm1fdmVjdG9yOworICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3Rv
ci5nZXQodGhpc09iamVjdCk7CiAgICAgICAgIHZvaWQqIG5ld1ZlY3RvciA9IHZpc2l0b3IuYWxs
b2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKICAgICAgICAgbWVtY3B5KG5l
d1ZlY3Rvciwgb2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKLSAgICAgICAgdGhp
c09iamVjdC0+bV92ZWN0b3IgPSBuZXdWZWN0b3I7CisgICAgICAgIHRoaXNPYmplY3QtPm1fdmVj
dG9yLnNldFdpdGhvdXRCYXJyaWVyKHN0YXRpY19jYXN0PGNoYXIqPihuZXdWZWN0b3IpKTsKICAg
ICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7
CiAgICAgfQogICAgIApAQCAtNTA4LDggKzUwOCw4IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGEKICAgICAgICAgJiYgIXRoaXNPYmplY3QtPmJ1dHRlcmZseSgpICYm
IHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgewogICAgICAgICBBU1NFUlQodGhpc09i
amVjdC0+bV92ZWN0b3IpOwogICAgICAgICAvLyBSZXVzZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1v
cnkgaWYgYXQgYWxsIHBvc3NpYmxlLgotICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5kZXhpbmdI
ZWFkZXIqPih0aGlzT2JqZWN0LT5tX3ZlY3RvciktPmJ1dHRlcmZseSgpKTsKKyAgICAgICAgdGhp
c09iamVjdC0+bV9idXR0ZXJmbHkuc2V0V2l0aG91dEJhcnJpZXIoCisgICAgICAgICAgICBiaXR3
aXNlX2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPih0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQodGhpc09i
amVjdCkpLT5idXR0ZXJmbHkoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVk0mIHZtID0gKmhl
YXAtPnZtKCk7CiAgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LnNldCh2bSwgdGhpc09i
amVjdCwgQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KApAQCAtNTIxLDE0ICs1MjEs
MTQgQEAgQXJyYXlCdWZmZXIqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYQogICAgIAogICAg
IHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CiAgICAgY2FzZSBGYXN0VHlwZWRBcnJheToK
LSAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSh0aGlzT2JqZWN0LT5tX3ZlY3Rv
ciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZm
ZXI6OmNyZWF0ZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQodGhpc09iamVjdCksIHRoaXNPYmpl
Y3QtPmJ5dGVMZW5ndGgoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIE92
ZXJzaXplVHlwZWRBcnJheToKICAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRvaW5nIHNvbWV0
aGluZyBsaWtlICJzdWJ0cmFjdGluZyIgZnJvbSBleHRyYSBtZW1vcnkKICAgICAgICAgLy8gY29z
dCwgc2luY2UgcmlnaHQgbm93IHRoaXMgY2FzZSB3aWxsIGNhdXNlIHRoZSBHQyB0byB0aGluayB0
aGF0IHdlIHJlYWxsb2NhdGVkCiAgICAgICAgIC8vIHRoZSB3aG9sZSBidWZmZXIuCi0gICAgICAg
IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVjdG9y
LCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZl
cjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQodGhpc09iamVjdCksIHRo
aXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBk
ZWZhdWx0OgpAQCAtNTM3LDcgKzUzNyw3IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGEKICAgICB9CiAKICAgICB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKS0+aW5kZXhp
bmdIZWFkZXIoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKLSAgICB0aGlzT2JqZWN0
LT5tX3ZlY3RvciA9IGJ1ZmZlci0+ZGF0YSgpOworICAgIHRoaXNPYmplY3QtPm1fdmVjdG9yLnNl
dFdpdGhvdXRCYXJyaWVyKHN0YXRpY19jYXN0PGNoYXIqPihidWZmZXItPmRhdGEoKSkpOwogICAg
IHRoaXNPYmplY3QtPm1fbW9kZSA9IFdhc3RlZnVsVHlwZWRBcnJheTsKICAgICBoZWFwLT5hZGRS
ZWZlcmVuY2UodGhpc09iamVjdCwgYnVmZmVyLmdldCgpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzEx
Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNNYXAoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9tYXBE
YXRhKHZtKQorICAgICAgICAsIG1fbWFwRGF0YSh2bSwgdGhpcykKICAgICB7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lv
biAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OmNvcHlCdXR0ZXJmCiAgICAgICAgICAgICBtZW1jcHkoY3VycmVudFRhcmdldCwgY3Vy
cmVudFNvdXJjZSwgY291bnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0V2l0aG91dFdyaXRlQmFycmllcihuZXdC
dXR0ZXJmbHkpOworICAgICAgICBtX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcihuZXdCdXR0
ZXJmbHkpOwogICAgICAgICB2aXNpdG9yLmRpZENvcHkoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKICAgICB9IAogfQpAQCAt
MjA2LDcgKzIwNiw3IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwK
ICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAK
LSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAg
IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0V2l0aG91
dEJhcnJpZXIoKTsKICAgICBpZiAoYnV0dGVyZmx5KQogICAgICAgICB0aGlzT2JqZWN0LT52aXNp
dEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2aXNp
dG9yLnZtKCkpLT5vdXRPZkxpbmVTaXplKCkpOwogCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBK
U09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIAogICAgIGlmICh0b2tlbiAhPSBCdXR0
ZXJmbHlDb3B5VG9rZW4pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0V2l0aG91dEJhcnJpZXIoKTsKICAgICBp
ZiAoYnV0dGVyZmx5KQogICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0b3Is
IGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7CiB9
CkBAIC0zNDEsNyArMzQxLDcgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleAogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFn
ZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCh0aGlzT2JqZWN0KS0+YXJyYXlTdG9yYWdl
KCk7CiAgICAgICAgIGlmIChpID49IHN0b3JhZ2UtPmxlbmd0aCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKQEAgLTUxNCw3ICs1MTQsNyBAQCB2b2lkIEpTT2JqZWN0Ojpw
dXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXlXaXRoQXJyYXlTdG9yYWdlOiB7Ci0gICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9i
dXR0ZXJmbHkuZ2V0KHRoaXNPYmplY3QpLT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPj0gc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAg
ICAgICBicmVhazsKQEAgLTUzNiw3ICs1MzYsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4
KEpTQ2VsbCogY2VsbCwgCiAgICAgICAgIAogICAgIGNhc2UgTm9uQXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSB0aGlzT2JqZWN0
LT5tX2J1dHRlcmZseS5nZXQodGhpc09iamVjdCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAK
ICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA+PSBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSkKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNjEzLDcgKzYxMyw3IEBAIHZvaWQgSlNPYmplY3Q6OmVudGVy
RGljdGlvbmFyeUluZGV4aW5nTW8KICAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2Rl
V2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIGVuc3VyZUFycmF5U3RvcmFnZVNsb3co
dm0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzoKLSAgICAgICAgZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3Rv
cmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CisgICAg
ICAgIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhp
c3RzKHZtLCBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC02NDMsNyArNjQzLDcgQEAgQnV0dGVy
Zmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEluZGV4ZQogICAgIEFTU0VSVCghaW5kZXhpbmdT
aG91bGRCZVNwYXJzZSgpKTsKICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChs
ZW5ndGgsIEJBU0VfVkVDVE9SX0xFTik7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBC
dXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIG1fYnV0dGVyZmx5Lmdl
dCgpLCB2bSwgdGhpcywgc3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBmYWxzZSwgMCwKKyAgICAgICAgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLCB2bSwgdGhpcywg
c3RydWN0dXJlKCksIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwK
ICAgICAgICAgZWxlbWVudFNpemUgKiB2ZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+
c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5n
dGgodmVjdG9yTGVuZ3RoKTsKQEAgLTY5NSw3ICs2OTUsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBpbmRleGlu
Z1R5cGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKG9sZFR5cGUsICFoYXNJbmRleGVkUHJvcGVydGll
cyhvbGRUeXBlKSk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNy
ZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCi0gICAgICAgIG1fYnV0dGVyZmx5LmdldCgpLCB2bSwgdGhp
cywgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLAor
ICAgICAgICBtX2J1dHRlcmZseS5nZXQodGhpcyksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsCiAgICAgICAgIEFycmF5U3RvcmFn
ZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdCdXR0ZXJm
bHkpOwogCkBAIC03MTksMzEgKzcxOSwzMiBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6
OmNvbnZlcnRVbmRlCiB7CiAgICAgQVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkp
OwogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlSW50MzIpKTsKLSAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXNJbnQzMigpOworICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcykt
PmNvbnRpZ3VvdXNJbnQzMigpOwogfQogCiBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29u
dmVydFVuZGVjaWRlZFRvRG91YmxlKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVk
KGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9idXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQotICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpW2ldID0gUE5hTjsKKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IGJ1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCk7IGktLTspCisgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ld
ID0gUE5hTjsKICAgICAKICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBBbGxvY2F0ZURvdWJsZSkpOwotICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOworICAgIHJldHVybiBtX2J1dHRl
cmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIAogQ29udGlndW91c0pTVmFs
dWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9Db250aWd1b3VzKFZNJiB2bSkKIHsKICAg
ICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CiAgICAgc2V0U3RydWN0dXJl
KHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
QWxsb2NhdGVDb250aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91cygpOwogfQog
CiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJheVN0b3JhZ2VX
aXRob3V0Q29weWluZ0VsZW1lbnRzKFZNJiB2bSwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKQogewog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKLSAgICB1bnNp
Z25lZCBwdWJsaWNMZW5ndGggPSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgdW5z
aWduZWQgcHVibGljTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgo
KTsKICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpOwogICAgIHVuc2lnbmVkIHByb3BlcnR5U2l6ZSA9IHN0cnVjdHVyZS0+b3V0T2ZM
aW5lU2l6ZSgpOwogICAgIApAQCAtNzUyLDcgKzc1Myw3IEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmNvbnN0cnVjdENvbnZlcnQKICAgICAKICAgICBtZW1jcHkoCiAgICAgICAgIG5ld0J1dHRl
cmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eVNpemUsCi0gICAgICAgIG1fYnV0dGVy
Zmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKKyAgICAgICAgbV9idXR0ZXJm
bHkuZ2V0KHRoaXMpLT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwKICAgICAgICAg
cHJvcGVydHlTaXplICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgCiAgICAgQXJyYXlT
dG9yYWdlKiBuZXdTdG9yYWdlID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKQEAgLTc3
MCw3ICs3NzEsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNVbmRlY2lkZWQoaW5k
ZXhpbmdUeXBlKCkpKTsKIAotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZs
eS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IGNvbnN0cnVjdENvbnZlcnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0s
IHZlY3Rvckxlbmd0aCk7CiAgICAgLy8gTm8gbmVlZCB0byBjb3B5IGVsZW1lbnRzLgogICAgIApA
QCAtNzg3LDkgKzc4OCwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNp
ZGVkCiBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyVG9Eb3VibGUoVk0m
IHZtKQogewogICAgIEFTU0VSVChoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwotICAgIAotICAg
IGZvciAodW5zaWduZWQgaSA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykgewot
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnQgPSAmbV9idXR0ZXJmbHktPmNv
bnRpZ3VvdXNJbnQzMigpW2ldOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQodGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKTsgaS0tOykgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnQg
PSAmYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXTsKICAgICAgICAgZG91YmxlKiBjdXJy
ZW50QXNEb3VibGUgPSBiaXR3aXNlX2Nhc3Q8ZG91YmxlKj4oY3VycmVudCk7CiAgICAgICAgIEpT
VmFsdWUgdiA9IGN1cnJlbnQtPmdldCgpOwogICAgICAgICBpZiAoIXYpIHsKQEAgLTgwMSw3ICs4
MDMsNyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyCiAgICAgfQog
ICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlRG91YmxlKSk7Ci0gICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmpl
Y3Q6OmNvbnZlcnRJbnQzMlRvQ29udGlndW91cyhWTSYgdm0pCkBAIC04MDksNyArODExLDcgQEAg
Q29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0SW50MwogICAgIEFTU0VSVChoYXNJ
bnQzMihpbmRleGluZ1R5cGUoKSkpOwogICAgIAogICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIEFsbG9jYXRlQ29u
dGlndW91cykpOwotICAgIHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOworICAgIHJl
dHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmNvbnRpZ3VvdXMoKTsKIH0KIAogQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKQEAgLTgxNywxMCArODE5LDExIEBAIEFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CiAgICAgQVNTRVJUKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSk7CiAKLSAgICB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgdW5z
aWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgo
KTsKICAgICBBcnJheVN0b3JhZ2UqIG5ld1N0b3JhZ2UgPSBjb25zdHJ1Y3RDb252ZXJ0ZWRBcnJh
eVN0b3JhZ2VXaXRob3V0Q29weWluZ0VsZW1lbnRzKHZtLCB2ZWN0b3JMZW5ndGgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7IGkrKykg
ewotICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmdldCgp
OworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOyBpKysp
IHsKKyAgICAgICAgSlNWYWx1ZSB2ID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
CiAgICAgICAgIGlmICh2KSB7CiAgICAgICAgICAgICBuZXdTdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOwogICAgICAgICAgICAgbmV3U3RvcmFnZS0+bV9udW1W
YWx1ZXNJblZlY3RvcisrOwpAQCAtODQxLDkgKzg0NCwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZl
cnREb3VibGVUb0NvbnRpZ3VvdXMoVk0mIHZtKQogewogICAgIEFTU0VSVChoYXNEb3VibGUoaW5k
ZXhpbmdUeXBlKCkpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspIHsKLSAgICAgICAgZG91YmxlKiBjdXJyZW50ID0gJm1fYnV0
dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KSB7CisgICAgICAgIGRvdWJsZSogY3VycmVudCA9ICZi
dXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBjdXJyZW50QXNWYWx1ZSA9IGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93
bj4qPihjdXJyZW50KTsKICAgICAgICAgZG91YmxlIHZhbHVlID0gKmN1cnJlbnQ7CiAgICAgICAg
IGlmICh2YWx1ZSAhPSB2YWx1ZSkgewpAQCAtODU1LDcgKzg1OSw3IEBAIENvbnRpZ3VvdXNKU1Zh
bHVlcyBKU09iamVjdDo6Y29udmVydERvdWIKICAgICB9CiAgICAgCiAgICAgc2V0U3RydWN0dXJl
KHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
QWxsb2NhdGVDb250aWd1b3VzKSk7Ci0gICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KCk7CisgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91cygpOwogfQog
CiBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoVk0m
IHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbikKQEAgLTg2MywxMCArODY3LDEx
IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkp
OwogCi0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0
aCgpOworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+
dmVjdG9yTGVuZ3RoKCk7CiAgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gY29uc3RydWN0
Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91dENvcHlpbmdFbGVtZW50cyh2bSwgdmVjdG9yTGVu
Z3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOyBpKyspIHsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXNEb3VibGUoKVtpXTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5
LmdldCh0aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29u
dGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICBpZiAodmFsdWUgPT0gdmFsdWUpIHsKICAgICAg
ICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNW
YWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpKTsKICAgICAgICAgICAgIG5ld1N0
b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IrKzsKQEAgLTg4OSwxMCArODk0LDExIEBAIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3UKICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpKTsKIAot
ICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rv
ckxlbmd0aCgpOwogICAgIEFycmF5U3RvcmFnZSogbmV3U3RvcmFnZSA9IGNvbnN0cnVjdENvbnZl
cnRlZEFycmF5U3RvcmFnZVdpdGhvdXRDb3B5aW5nRWxlbWVudHModm0sIHZlY3Rvckxlbmd0aCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KTsgaSsrKSB7Ci0gICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uZ2V0KCk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhp
cyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCk7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHYgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5nZXQoKTsKICAgICAgICAgaWYgKHYpIHsKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7CiAgICAgICAgICAgICBuZXdTdG9yYWdl
LT5tX251bVZhbHVlc0luVmVjdG9yKys7CkBAIC05NTcsOCArOTYzLDggQEAgdm9pZCBKU09iamVj
dDo6Y29udmVydEludDMyRm9yVmFsdWUoVk0mIAogCiB2b2lkIEpTT2JqZWN0OjpzZXRJbmRleFF1
aWNrbHlUb1VuZGVjaWRlZChWTSYgdm0sIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIEFTU0VSVChpbmRleCA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAg
QVNTRVJUKGluZGV4IDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBBU1NFUlQo
aW5kZXggPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICBBU1NF
UlQoaW5kZXggPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKTsKICAgICBj
b252ZXJ0VW5kZWNpZGVkRm9yVmFsdWUodm0sIHZhbHVlKTsKICAgICBzZXRJbmRleFF1aWNrbHko
dm0sIGluZGV4LCB2YWx1ZSk7CiB9CkBAIC0xMTE0LDcgKzExMjAsNyBAQCBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0OjplbnN1cmVBcnJheVN0b3JhCiAgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25h
cnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgY29udmVydENv
bnRpZ3VvdXNUb0FycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1cm4gZW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHModm0sIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKSk7CisgICAgICAgIHJldHVybiBlbnRlckRpY3Rpb25hcnlJbmRleGlu
Z01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyh2bSwgbV9idXR0ZXJmbHkuZ2V0KHRo
aXMpLT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIENS
QVNIKCk7CkBAIC0xMzU2LDcgKzEzNjIsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgoSlNDCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgQXJyYXlTdG9yYWdl
KiBzdG9yYWdlID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KHRoaXNPYmplY3QpLT5hcnJh
eVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpIDwgc3RvcmFnZS0+dmVjdG9yTGVu
Z3RoKCkpIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0g
c3RvcmFnZS0+bV92ZWN0b3JbaV07CkBAIC0xNTQ2LDcgKzE1NTIsNyBAQCB2b2lkIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAg
ICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0
ZXJmbHkuZ2V0KG9iamVjdCktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3Ro
KCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKQEAgLTE2OTksNyArMTcwNSw3IEBA
IE5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHIKIHZvaWQgSlNPYmplY3Q6
OnB1dEluZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSog
ZW50cnlJbk1hcCwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIG9sZERlc2NyaXB0b3IpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBhdXRvIG1hcCA9IG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAu
Z2V0KCk7CisgICAgYXV0byBtYXAgPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFn
ZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKIAogICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2Ny
aXB0b3IoKSkgewogICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpKQpAQCAtMTc1OCw3ICsx
NzY0LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogICAgIGlm
IChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKICAgICAg
ICAgbm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRBY2Nlc3NvcnMoZXhlYy0+dm0oKSk7CiAKLSAgICBT
cGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
c3BhcnNlTWFwLmdldCgpOworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVy
Zmx5LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgpOwogICAgIFJF
TEVBU0VfQVNTRVJUKG1hcCk7CiAKICAgICAvLyAxLiBMZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0
IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3
aXRoIHByb3BlcnR5IG5hbWUgUC4KQEAgLTE3OTAsOCArMTc5Niw5IEBAIGJvb2wgSlNPYmplY3Q6
OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKICAgICAgICAgZW50cnlJbk1hcC0+Z2V0KGRlZmF1
bHRzKTsKIAogICAgICAgICBwdXRJbmRleGVkRGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBk
ZXNjcmlwdG9yLCBkZWZhdWx0cyk7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX2J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPmxlbmd0aCgpKQotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5zZXRMZW5ndGgoaW5kZXggKyAxKTsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CisgICAgICAgIGlmIChpbmRleCA+PSBidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnNldExlbmd0aChpbmRleCArIDEpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKQEAgLTE5MTEsMTcgKzE5MTgsMTkgQEAgdm9pZCBKU09iamVjdDo6cHV0QnlJ
bmRleEJleW9uZFZlY3RvckxlbgogewogICAgIEFTU0VSVCgoaW5kZXhpbmdUeXBlKCkgJiBJbmRl
eGluZ1NoYXBlTWFzaykgPT0gaW5kZXhpbmdTaGFwZSk7CiAgICAgQVNTRVJUKCFpbmRleGluZ1No
b3VsZEJlU3BhcnNlKCkpOworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZs
eS5nZXQodGhpcyk7CiAgICAgCiAgICAgLy8gRm9yIHVzIHRvIGdldCBoZXJlLCB0aGUgaW5kZXgg
aXMgZWl0aGVyIGdyZWF0ZXIgdGhhbiB0aGUgcHVibGljIGxlbmd0aCwgb3IgZ3JlYXRlciB0aGFu
CiAgICAgLy8gb3IgZXF1YWwgdG8gdGhlIHZlY3RvciBsZW5ndGguCi0gICAgQVNTRVJUKGkgPj0g
bV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICBBU1NFUlQoaSA+PSBidXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpKTsKICAgICAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIAog
ICAgIGlmIChpID49IE1BWF9BUlJBWV9JTkRFWCAtIDEKICAgICAgICAgfHwgKGkgPj0gTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWAotICAgICAgICAgICAgJiYgIWlzRGVuc2VFbm91Z2hGb3JWZWN0b3Io
aSwgY291bnRFbGVtZW50czxpbmRleGluZ1NoYXBlPihidXR0ZXJmbHkoKSkpKQotICAgICAgICB8
fCBpbmRleElzU3VmZmljaWVudGx5QmV5b25kTGVuZ3RoRm9yU3BhcnNlTWFwKGksIG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSkpIHsKKyAgICAgICAgICAgICYmICFpc0RlbnNlRW5vdWdoRm9y
VmVjdG9yKGksIGNvdW50RWxlbWVudHM8aW5kZXhpbmdTaGFwZT4oYnV0dGVyZmx5KSkpCisgICAg
ICAgIHx8IGluZGV4SXNTdWZmaWNpZW50bHlCZXlvbmRMZW5ndGhGb3JTcGFyc2VNYXAoaSwgYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkpIHsKICAgICAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZ
X0lOREVYKTsKICAgICAgICAgZW5zdXJlQXJyYXlTdG9yYWdlU2xvdyh2bSk7CiAgICAgICAgIFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAodm0pOwpAQCAt
MTkzMiwyNCArMTk0MSwyNSBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9y
TGVuCiAgICAgfQogCiAgICAgZW5zdXJlTGVuZ3RoKHZtLCBpICsgMSk7CisgICAgYnV0dGVyZmx5
ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogCi0gICAgUkVMRUFTRV9BU1NFUlQoaSA8IG1fYnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaSA8IGJ1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewogICAgIGNh
c2UgSW50MzJTaGFwZToKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAg
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KHZhbHVlKTsKKyAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgRG91YmxlU2hhcGU6IHsKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzTnVtYmVyKCkpOwogICAg
ICAgICBkb3VibGUgdmFsdWVBc0RvdWJsZSA9IHZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAgIEFT
U0VSVCh2YWx1ZUFzRG91YmxlID09IHZhbHVlQXNEb3VibGUpOwotICAgICAgICBtX2J1dHRlcmZs
eS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gdmFsdWVBc0RvdWJsZTsKKyAgICAgICAgYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2YWx1ZUFzRG91YmxlOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBt
X2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAg
ICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC0yMjIzLDcgKzIyMzMsNyBAQCBi
b29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIAogICAgIGNh
c2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7
Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAg
ICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJh
eVN0b3JhZ2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnRJbnQzMlRvQXJy
YXlTdG9yYWdlKHZtKSk7CiAgICAgICAgIH0KQEAgLTIyMzcsNyArMjI0Nyw3IEBAIGJvb2wgSlNP
YmplY3Q6OnB1dERpcmVjdEluZGV4QmV5b25kVmVjdG8KICAgICAgICAgCiAgICAgY2FzZSBBTExf
RE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7Ci0gICAg
ICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAg
IGlmIChpIDwgbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlT
dG9yYWdlKGV4ZWMsIGksIHZhbHVlLCBhdHRyaWJ1dGVzLCBtb2RlLCBlbnN1cmVBcnJheVN0b3Jh
Z2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUodm0pKTsKICAgICAgICAgICAg
IHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2Uo
ZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGNvbnZlcnREb3VibGVUb0FycmF5U3Rv
cmFnZSh2bSkpOwogICAgICAgICB9CkBAIC0yMjU2LDcgKzIyNjYsNyBAQCBib29sIEpTT2JqZWN0
OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAgICAgICAgIAogICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHsKLSAgICAg
ICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAg
aWYgKGkgPCBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0
b3JhZ2UoZXhlYywgaSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUsIGVuc3VyZUFycmF5U3RvcmFn
ZUV4aXN0c0FuZEVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZSh2bSkpOwogICAgICAgICAgICAg
cmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShl
eGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgY29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZSh2bSkpOwogICAgICAgICB9CkBAIC0yMjY2LDcgKzIyNzYsNyBAQCBib29sIEpTT2Jq
ZWN0OjpwdXREaXJlY3RJbmRleEJleW9uZFZlY3RvCiAKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBpZiAoYXR0cmlidXRlcykgewotICAgICAgICAg
ICAgaWYgKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAo
aSA8IG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3RoKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgZW5zdXJlQXJyYXlTdG9yYWdlRXhp
c3RzQW5kRW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlKHZtKSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFn
ZShleGVjLCBpLCB2YWx1ZSwgYXR0cmlidXRlcywgbW9kZSwgYXJyYXlTdG9yYWdlKCkpOwpAQCAt
MjM0Nyw4ICsyMzU3LDggQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKU09iamVjdDo6Z2V0TmV3
VgogICAgIHVuc2lnbmVkIGxlbmd0aDsKICAgICAKICAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRp
ZXMoaW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgIHZlY3Rvckxlbmd0aCA9IG1fYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgbGVuZ3RoID0gbV9idXR0ZXJmbHktPnB1YmxpY0xl
bmd0aCgpOworICAgICAgICB2ZWN0b3JMZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZl
Y3Rvckxlbmd0aCgpOworICAgICAgICBsZW5ndGggPSBtX2J1dHRlcmZseS5nZXQodGhpcyktPnB1
YmxpY0xlbmd0aCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZlY3Rvckxlbmd0aCA9IDA7CiAg
ICAgICAgIGxlbmd0aCA9IDA7CkBAIC0yNDU0LDI1ICsyNDY0LDI4IEBAIGJvb2wgSlNPYmplY3Q6
OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKIAogdm9pZCBKU09iamVjdDo6ZW5zdXJlTGVuZ3Ro
U2xvdyhWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKKyAgICAKICAgICBBU1NFUlQobGVuZ3RoIDwgTUFY
X0FSUkFZX0lOREVYKTsKICAgICBBU1NFUlQoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkg
fHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpIHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkg
fHwgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7Ci0gICAgQVNTRVJUKGxlbmd0aCA+IG1f
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgQVNTRVJUKGxlbmd0aCA+IGJ1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgIAogICAgIHVuc2lnbmVkIG5ld1ZlY3Rvckxlbmd0aCA9
IHN0ZDo6bWluKAogICAgICAgICBsZW5ndGggPDwgMSwKICAgICAgICAgTUFYX1NUT1JBR0VfVkVD
VE9SX0xFTkdUSCk7Ci0gICAgdW5zaWduZWQgb2xkVmVjdG9yTGVuZ3RoID0gbV9idXR0ZXJmbHkt
PnZlY3Rvckxlbmd0aCgpOworICAgIHVuc2lnbmVkIG9sZFZlY3Rvckxlbmd0aCA9IGJ1dHRlcmZs
eS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1f
YnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbV9idXR0ZXJmbHktPmdyb3dBcnJheVJpZ2h0KAorICAg
IGJ1dHRlcmZseSA9IGJ1dHRlcmZseS0+Z3Jvd0FycmF5UmlnaHQoCiAgICAgICAgIHZtLCB0aGlz
LCBzdHJ1Y3R1cmUoKSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRydWUsCiAg
ICAgICAgIG9sZFZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSksCi0gICAgICAg
IG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgbmV3
VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisgICAgbV9idXR0ZXJmbHku
c2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwogCi0gICAgbV9idXR0ZXJmbHktPnNldFZlY3Rvckxl
bmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5l
d1ZlY3Rvckxlbmd0aCk7CiAKICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JM
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCku
ZGF0YSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpLmRhdGEoKVtpXSA9IFBOYU47CiAgICAgfQogfQogCkBAIC0yNDg1LDEwICsyNDk4LDEwIEBA
IHZvaWQgSlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXIKICAgICBBU1NFUlQoIW1f
YnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUoKSkpOwog
CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwg
QXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0
dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKTsKICAgICBtX2J1dHRlcmZs
eS5zZXQodm0sIHRoaXMsIG5ld0J1dHRlcmZseSk7Ci0gICAgbV9idXR0ZXJmbHktPnNldFZlY3Rv
ckxlbmd0aChsZW5ndGgpOwotICAgIG1fYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3Ro
KTsKKyAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOworICAgIG5ld0J1
dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CiB9CiAKIEJ1dHRlcmZseSogSlNPYmpl
Y3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBu
ZXdTaXplKQpAQCAtMjQ5OCw3ICsyNTExLDcgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091
dE9mTGluZVN0b3JhZwogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBmdW5jdGlvbiBu
b3QgcmVseSBvbiBzdHJ1Y3R1cmUoKSwgZm9yIHRoZSBwcm9wZXJ0eQogICAgIC8vIGNhcGFjaXR5
LCBzaW5jZSB3ZSBtaWdodCBoYXZlIGFscmVhZHkgbXV0YXRlZCB0aGUgc3RydWN0dXJlIGluLXBs
YWNlLgogICAgIAotICAgIHJldHVybiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3Rv
cmFnZShtX2J1dHRlcmZseS5nZXQoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSh2bSksIG9sZFNpemUs
IG5ld1NpemUpOworICAgIHJldHVybiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3Rv
cmFnZShtX2J1dHRlcmZseS5nZXQodGhpcyksIHZtLCB0aGlzLCBzdHJ1Y3R1cmUodm0pLCBvbGRT
aXplLCBuZXdTaXplKTsKIH0KIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQpAQCAtMjc4NSw3ICsyNzk4LDcgQEAgdWludDMyX3QgSlNP
YmplY3Q6OmdldEVudW1lcmFibGVMZW5ndGgoRQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBBcnJheVN0b3JhZ2Uq
IHN0b3JhZ2UgPSBvYmplY3QtPm1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAg
QXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZseS5nZXQob2JqZWN0KS0+
YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIGlmIChzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTkwNjgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNsYXNzSW5mby5oIgogI2lu
Y2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiQ29weVdyaXRlQmFycmllci5o
IgorI2luY2x1ZGUgIkNvcHlCYXJyaWVyLmgiCiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVy
LmgiCiAjaW5jbHVkZSAiRGVmZXJHQy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTEzMSwxNCAr
MTMxLDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghaGFzSW5kZXhlZFByb3BlcnRp
ZXMoaW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBtX2J1dHRlcmZs
eS5nZXQodGhpcyktPnB1YmxpY0xlbmd0aCgpOwogICAgIH0KICAgICAgICAgCiAgICAgdW5zaWdu
ZWQgZ2V0VmVjdG9yTGVuZ3RoKCkKICAgICB7CiAgICAgICAgIGlmICghaGFzSW5kZXhlZFByb3Bl
cnRpZXMoaW5kZXhpbmdUeXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJl
dHVybiBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBtX2J1dHRl
cmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpOwogICAgIH0KICAgICAgICAgCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xODEsMjMgKzE4MSwyNCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkK
ICAgICB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRo
aXMpOwogICAgICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxM
X0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgQUxMX0lO
VDMyX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5H
X1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkgJiYgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXTsKKyAgICAgICAgICAgIHJldHVybiBp
IDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSAmJiBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XTsKICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAg
ICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAo
aSA+PSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbaV07CisgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRp
Z3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAg
ICAgICAgICAgcmV0dXJuIGkgPCBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpICYmIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAg
ICAgICAgICByZXR1cm4gaSA8IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpICYmIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIwNiwxNSArMjA3LDE2IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICB7CisgICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOwogICAgICAg
ICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaV0uZ2V0KCkuYXNJbnQzMigpKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJl
cihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKS5hc0ludDMyKCkpOwogICAgICAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gYnV0
dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6OkVuY29k
ZUFzRG91YmxlLCBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldKTsKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBidXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXSk7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5nZXQoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOwpAQCAtMjIzLDMyICsyMjUsMzMgQEAgcHVibGljOgogICAgICAgICAKICAgICBK
U1ZhbHVlIHRyeUdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKKyAgICAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgICAg
IHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJ
TkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoK
LSAgICAgICAgICAgIGlmIChpIDwgbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ld
LmdldCgpOworICAgICAgICAgICAgaWYgKGkgPCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKSB7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMo
KVtpXS5nZXQoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmlzSW50MzIoKSB8fCAh
cmVzdWx0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6Ci0gICAgICAgICAgICBpZiAoaSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5nZXQo
KTsKKyAgICAgICAgICAgIGlmIChpIDwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7
Ci0gICAgICAgICAgICBpZiAoaSA+PSBtX2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpCisgICAg
ICAgICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gYnV0dGVyZmx5
LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3Vs
dCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKEpT
VmFsdWU6OkVuY29kZUFzRG91YmxlLCByZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICBpZiAoaSA8IG1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uZ2V0KCk7
CisgICAgICAgICAgICBpZiAoaSA8IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX3ZlY3RvcltpXS5nZXQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI3Niw2ICsy
NzksNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVu
c2lnbmVkIGkpCiAgICAgeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVy
Zmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAg
ICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKICAgICAgICAgY2FzZSBBTExfVU5ERUNJ
REVEX0lOREVYSU5HX1RZUEVTOgpAQCAtMjg1LDExICsyODksMTEgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZToKICAgICAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6
Ci0gICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKKyAg
ICAgICAgICAgIHJldHVybiBpIDwgYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAg
Y2FzZSBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBjYXNlIEFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkKLSAgICAgICAgICAgICAgICAmJiAh
IW1fYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV07CisgICAgICAgICAgICBy
ZXR1cm4gaSA8IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpCisgICAg
ICAgICAgICAgICAgJiYgISFidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXTsK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMDYsNyArMzEwLDcgQEAgcHVibGlj
OgogICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICByZXR1cm4gaSA8IG1fYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsKKyAgICAgICAgICAgIHJldHVybiBpIDwgbV9idXR0ZXJmbHkuZ2V0
KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zMTUsOSArMzE5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgdm9pZCBzZXRJbmRleFF1
aWNrbHkoVk0mIHZtLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHYpCiAgICAgeworICAgICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICAgICAgc3dpdGNo
IChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBF
UzogewotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkp
OworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpKTsKICAg
ICAgICAgICAgIGlmICghdi5pc0ludDMyKCkpIHsKICAgICAgICAgICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZU9yQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zMjUsMTQgKzMzMCwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFMTF9DT05U
SUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91
cygpW2ldLnNldCh2bSwgdGhpcywgdik7Ci0gICAgICAgICAgICBpZiAoaSA+PSBtX2J1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1Ymxp
Y0xlbmd0aChpICsgMSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCkpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0KHZt
LCB0aGlzLCB2KTsKKyAgICAgICAgICAgIGlmIChpID49IGJ1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkpCisgICAgICAgICAgICAgICAgYnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgoaSArIDEpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lO
REVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8IG1fYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCkpOwogICAgICAgICAgICAgaWYgKCF2LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAg
ICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgodm0sIGks
IHYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTM0MiwxMyArMzQ3LDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3Jt
aW5nU2V0SW5kZXgodm0sIGksIHYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2
YWx1ZTsKLSAgICAgICAgICAgIGlmIChpID49IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSkK
LSAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKKyAg
ICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gdmFsdWU7CisgICAg
ICAgICAgICBpZiAoaSA+PSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKQorICAgICAgICAgICAg
ICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGkgKyAxKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6IHsKLSAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHggPSBzdG9yYWdlLT5tX3ZlY3RvcltpXTsKICAgICAgICAgICAgIEpTVmFsdWUgb2xkID0geC5n
ZXQoKTsKICAgICAgICAgICAgIHguc2V0KHZtLCB0aGlzLCB2KTsKQEAgLTM3MSwxNCArMzc2LDE1
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUluZGV4KFZNJiB2bSwgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKKyAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQodGhpcyk7CiAgICAgICAgIHN3
aXRjaCAoaW5kZXhpbmdUeXBlKSB7CiAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElO
R19UWVBFUzogewogICAgICAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9VbmRlY2lkZWQodm0sIGks
IHYpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBTExfSU5U
MzJfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChpIDwgbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1dHRlcmZseS0+dmVjdG9yTGVuZ3Ro
KCkpOwogICAgICAgICAgICAgaWYgKCF2LmlzSW50MzIoKSkgewogICAgICAgICAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgodm0s
IGksIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzg2LDE0ICszOTIsMTQgQEAgcHVi
bGljOgogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgQVNTRVJUKGkgPCBt
X2J1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGkgPCBtX2J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5zZXQodm0sIHRoaXMsIHYpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0
ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpIDwgYnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
XS5zZXQodm0sIHRoaXMsIHYpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgICAgICBBU1NFUlQo
aSA8IG1fYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaSA8
IG1fYnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoaSA8IGJ1
dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKGkgPCBidXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmICghdi5pc051bWJlcigpKSB7CiAg
ICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91c1doaWxlUGVyZm9ybWluZ1Nl
dEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00MDMsMTEgKzQw
OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udmVydERvdWJsZVRvQ29udGlndW91
c1doaWxlUGVyZm9ybWluZ1NldEluZGV4KHZtLCBpLCB2KTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldID0gdmFsdWU7CisgICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpXSA9IHZhbHVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICAgICAgQXJy
YXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsK
ICAgICAgICAgICAgIEFTU0VSVChpIDwgc3RvcmFnZS0+bGVuZ3RoKCkpOwogICAgICAgICAgICAg
QVNTRVJUKGkgPCBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKTsKICAgICAgICAgICAgIHN0
b3JhZ2UtPm1fdmVjdG9yW2ldLnNldCh2bSwgdGhpcywgdik7CkBAIC00MjgsNyArNDM0LDcgQEAg
cHVibGljOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuICEhbV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3NwYXJzZU1hcDsKKyAgICAgICAgICAgIHJldHVybiAhIW1fYnV0dGVyZmx5Lmdl
dCh0aGlzKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTQ0NSw3ICs0NTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAg
ICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5pblNwYXJzZU1vZGUoKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPmFycmF5U3RvcmFnZSgpLT5p
blNwYXJzZU1vZGUoKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NTAsMTEg
KzU1NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlVW5zYWZlKCk7
CiAgICAgfQogICAgICAgICAKLSAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0
IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCgpOyB9Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHko
KSB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKTsgfQorICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0
dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpOyB9CisgICAgQnV0
dGVyZmx5KiBidXR0ZXJmbHkoKSB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyk7IH0KICAg
ICAgICAgCi0gICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQotICAgIFByb3BlcnR5
U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgeyByZXR1cm4gbV9idXR0ZXJmbHktPnByb3BlcnR5
U3RvcmFnZSgpOyB9CisgICAgQ29uc3RQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+cHJvcGVydHlTdG9yYWdlKCk7
IH0KKyAgICBQcm9wZXJ0eVN0b3JhZ2Ugb3V0T2ZMaW5lU3RvcmFnZSgpIHsgcmV0dXJuIG1fYnV0
dGVyZmx5LmdldCh0aGlzKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KIAogICAgIGNvbnN0IFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIGxvY2F0aW9uRm9yT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkgY29uc3QKICAgICB7CkBAIC02NTYsNyArNjYyLDcgQEAgcHVibGljOgogICAgIENvbnRp
Z3VvdXNKU1ZhbHVlcyBlbnN1cmVJbnQzMihWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoTElL
RUxZKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+Y29udGlndW91c0ludDMyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgcmV0
dXJuIGVuc3VyZUludDMyU2xvdyh2bSk7CiAgICAgfQpAQCAtNjY4LDcgKzY3NCw3IEBAIHB1Ymxp
YzoKICAgICBDb250aWd1b3VzRG91YmxlcyBlbnN1cmVEb3VibGUoVk0mIHZtKQogICAgIHsKICAg
ICAgICAgaWYgKExJS0VMWShoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSkKLSAgICAgICAgICAg
IHJldHVybiBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOworICAgICAgICAgICAgcmV0
dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+Y29udGlndW91c0RvdWJsZSgpOwogICAgICAgICAg
ICAgCiAgICAgICAgIHJldHVybiBlbnN1cmVEb3VibGVTbG93KHZtKTsKICAgICB9CkBAIC02Nzgs
NyArNjg0LDcgQEAgcHVibGljOgogICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVDb250aWd1
b3VzKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFzQ29udGlndW91cyhpbmRl
eGluZ1R5cGUoKSkpKQotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KCk7CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5jb250aWd1b3Vz
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgcmV0dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93KHZt
KTsKICAgICB9CkBAIC02OTAsNyArNjk2LDcgQEAgcHVibGljOgogICAgIEFycmF5U3RvcmFnZSog
ZW5zdXJlQXJyYXlTdG9yYWdlKFZNJiB2bSkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFkoaGFz
QW55QXJyYXlTdG9yYWdlKGluZGV4aW5nVHlwZSgpKSkpCi0gICAgICAgICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LmdldCh0aGlzKS0+YXJyYXlTdG9yYWdlKCk7CiAKICAgICAgICAgcmV0dXJuIGVuc3VyZUFycmF5
U3RvcmFnZVNsb3codm0pOwogICAgIH0KQEAgLTczNiw3ICs3NDIsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgQXJyYXlTdG9yYWdlKiBhcnJheVN0b3JhZ2UoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhh
c0FueUFycmF5U3RvcmFnZShpbmRleGluZ1R5cGUoKSkpOwotICAgICAgICByZXR1cm4gbV9idXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRo
aXMpLT5hcnJheVN0b3JhZ2UoKTsKICAgICB9CiAgICAgICAgIAogICAgIC8vIENhbGwgdGhpcyBp
ZiB5b3Ugd2FudCB0byBwcmVkaWNhdGUgc29tZSBhY3Rpb25zIG9uIHdoZXRoZXIgb3Igbm90IHRo
ZQpAQCAtNzQ1LDcgKzc1MSw3IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzoKLSAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CisgICAgICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5hcnJheVN0b3JhZ2Uo
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVy
biAwOwpAQCAtODA5LDEyICs4MTUsMTIgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAgQVNT
RVJUKGxlbmd0aCA8IE1BWF9BUlJBWV9JTkRFWCk7CiAgICAgICAgIEFTU0VSVChoYXNDb250aWd1
b3VzKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkgfHwgaGFzRG91
YmxlKGluZGV4aW5nVHlwZSgpKSB8fCBoYXNVbmRlY2lkZWQoaW5kZXhpbmdUeXBlKCkpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICBpZiAobV9idXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpIDwgbGVu
Z3RoKQorCisgICAgICAgIGlmIChtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgp
IDwgbGVuZ3RoKQogICAgICAgICAgICAgZW5zdXJlTGVuZ3RoU2xvdyh2bSwgbGVuZ3RoKTsKICAg
ICAgICAgICAgIAotICAgICAgICBpZiAobV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpIDwgbGVu
Z3RoKQotICAgICAgICAgICAgbV9idXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOwor
ICAgICAgICBpZiAobV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT5wdWJsaWNMZW5ndGgoKSA8IGxlbmd0
aCkKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+c2V0UHVibGljTGVuZ3RoKGxl
bmd0aCk7CiAgICAgfQogICAgICAgICAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8g
c2hyaW5rIHRoZSBidXR0ZXJmbHkgYmFja2luZyBzdG9yZSwgYW5kIHlvdSdyZQpAQCAtODc0LDcg
Kzg4MCw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQXJyYXlTdG9yYWdlKiBl
bnN1cmVBcnJheVN0b3JhZ2VTbG93KFZNJik7CiAKIHByb3RlY3RlZDoKLSAgICBDb3B5V3JpdGVC
YXJyaWVyPEJ1dHRlcmZseT4gbV9idXR0ZXJmbHk7CisgICAgQ29weUJhcnJpZXI8QnV0dGVyZmx5
PiBtX2J1dHRlcmZseTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogcHJpdmF0ZToKICAgICB1aW50
MzJfdCBtX3BhZGRpbmc7CkBAIC0xMzQ4LDcgKzEzNTQsNyBAQCBpbmxpbmUgdm9pZCBKU09iamVj
dDo6cHV0RGlyZWN0V2l0aG91dFRyCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAg
IEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3Nv
cikpOwogICAgIEFTU0VSVCghdmFsdWUuaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCh0aGlzKTsKICAgICBpZiAoc3RydWN0dXJl
KCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAgICAgICBuZXdCdXR0ZXJmbHkg
PSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAkocmV2aXNpb24gMTkwNjgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTEy
LDcgKzExMiw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSlNTZXQoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICwg
bV9zZXREYXRhKHZtKQorICAgICAgICAsIG1fc2V0RGF0YSh2bSwgdGhpcykKICAgICB7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCShyZXZpc2lv
biAxOTA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgTWFwRGF0YV9oCiAjZGVmaW5lIE1h
cERhdGFfaAogCisjaW5jbHVkZSAiQ29weUJhcnJpZXIuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIK
ICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlv
bnMuaD4KQEAgLTk0LDcgKzk1LDcgQEAgcHVibGljOgogICAgICAgICBKU1ZhbHVlIHZhbHVlOwog
ICAgIH07CiAKLSAgICBNYXBEYXRhSW1wbChWTSYpOworICAgIE1hcERhdGFJbXBsKFZNJiwgSlND
ZWxsKiBvd25lcik7CiAKICAgICB2b2lkIHNldChFeGVjU3RhdGUqLCBKU0NlbGwqIG93bmVyLCBL
ZXlUeXBlLCBKU1ZhbHVlKTsKICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBLZXlUeXBlKTsK
QEAgLTEzNiwxNiArMTM3LDE3IEBAIHByaXZhdGU6CiAgICAgaW50MzJfdCBtX2NhcGFjaXR5Owog
ICAgIGludDMyX3QgbV9zaXplOwogICAgIGludDMyX3QgbV9kZWxldGVkQ291bnQ7Ci0gICAgRW50
cnkqIG1fZW50cmllczsKKyAgICBKU0NlbGwqIG1fb3duZXI7CisgICAgQ29weUJhcnJpZXI8RW50
cnk+IG1fZW50cmllczsKICAgICBXZWFrR0NNYXA8SlNJdGVyYXRvciosIEpTSXRlcmF0b3I+IG1f
aXRlcmF0b3JzOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRl
cmF0b3I+Ci1BTFdBWVNfSU5MSU5FIE1hcERhdGFJbXBsPEVudHJ5LCBKU0l0ZXJhdG9yPjo6TWFw
RGF0YUltcGwoVk0mIHZtKQorQUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVy
YXRvcj46Ok1hcERhdGFJbXBsKFZNJiB2bSwgSlNDZWxsKiBvd25lcikKICAgICA6IG1fY2FwYWNp
dHkoMCkKICAgICAsIG1fc2l6ZSgwKQogICAgICwgbV9kZWxldGVkQ291bnQoMCkKLSAgICAsIG1f
ZW50cmllcyhudWxscHRyKQorICAgICwgbV9vd25lcihvd25lcikKICAgICAsIG1faXRlcmF0b3Jz
KHZtKQogewogfQpAQCAtMTgyLDcgKzE4NCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRh
SW1wbDxFbnRyeSwgSlMKIHsKICAgICBpZiAoIWVuc3VyZVNsb3QoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIEVudHJ5KiBlbnRyeSA9ICZtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4
XTsKKyAgICBFbnRyeSogZW50cnkgPSAmbV9tYXBEYXRhLT5tX2VudHJpZXMuZ2V0KG1fbWFwRGF0
YS0+bV9vd25lcilbbV9pbmRleF07CiAgICAgcGFpciA9IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFs
dWUsIEpTVmFsdWU+KGVudHJ5LT5rZXkoKS5nZXQoKSwgZW50cnktPnZhbHVlKCkuZ2V0KCkpOwog
ICAgIG1faW5kZXggKz0gMTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIwNCw3ICsyMDYsNyBAQCBB
TFdBWVNfSU5MSU5FIGludDMyX3QgTWFwRGF0YUltcGw8RW50cnksCiAgICAgaWYgKGlzRmluaXNo
ZWQoKSkKICAgICAgICAgcmV0dXJuIG1faW5kZXg7CiAKLSAgICBFbnRyeSogZW50cmllcyA9IG1f
bWFwRGF0YS0+bV9lbnRyaWVzOworICAgIEVudHJ5KiBlbnRyaWVzID0gbV9tYXBEYXRhLT5tX2Vu
dHJpZXMuZ2V0KG1fbWFwRGF0YS0+bV9vd25lcik7CiAgICAgc2l6ZV90IGVuZCA9IG1fbWFwRGF0
YS0+bV9zaXplOwogICAgIHdoaWxlIChzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5kZXgpIDwgZW5k
ICYmICFlbnRyaWVzW21faW5kZXhdLmtleSgpKQogICAgICAgICBtX2luZGV4Kys7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGFJbmxpbmVzLmgJKHJldmlz
aW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGFJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgaW5saW5lIHZvaWQgTWFwRGF0
YUltcGw8RW50cnksIEpTSXRlcmF0bwogICAgIG1fY2FwYWNpdHkgPSAwOwogICAgIG1fc2l6ZSA9
IDA7CiAgICAgbV9kZWxldGVkQ291bnQgPSAwOwotICAgIG1fZW50cmllcyA9IG51bGxwdHI7Cisg
ICAgbV9lbnRyaWVzLmNsZWFyKCk7CiAgICAgbV9pdGVyYXRvcnMuZm9yRWFjaChbXShKU0l0ZXJh
dG9yKiBpdGVyYXRvciwgSlNJdGVyYXRvciopIHsKICAgICAgICAgaXRlcmF0b3ItPml0ZXJhdG9y
RGF0YSgpLT5kaWRSZW1vdmVBbGxFbnRyaWVzKCk7CiAgICAgfSk7CkBAIC02MCwyNSArNjAsMjUg
QEAgaW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYQogICAgICAgICBhdXRv
IGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFibGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1
ZShleGVjKS5pbXBsKCkpOwogICAgICAgICBpZiAoaXRlciA9PSBtX3N0cmluZ0tleWVkVGFibGUu
ZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNb
aXRlci0+dmFsdWVdOworICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRl
ci0+dmFsdWVdOwogICAgIH0KICAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpIHsKICAgICAg
ICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQoYXNTeW1ib2woa2V5LnZhbHVl
KS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fc3ltYm9sS2V5
ZWRUYWJsZS5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gJm1f
ZW50cmllc1tpdGVyLT52YWx1ZV07CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzLmdldChtX293
bmVyKVtpdGVyLT52YWx1ZV07CiAgICAgfQogICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpIHsK
ICAgICAgICAgYXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5hc0Nl
bGwoKSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVd
OworICAgICAgICByZXR1cm4gJm1fZW50cmllcy5nZXQobV9vd25lcilbaXRlci0+dmFsdWVdOwog
ICAgIH0KIAogICAgIGF1dG8gaXRlciA9IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQoSlNWYWx1ZTo6
ZW5jb2RlKGtleS52YWx1ZSkpOwogICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRhYmxlLmVu
ZCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gJm1fZW50cmllc1tpdGVyLT52YWx1
ZV07CisgICAgcmV0dXJuICZtX2VudHJpZXMuZ2V0KG1fb3duZXIpW2l0ZXItPnZhbHVlXTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+CkBAIC05Mywx
NCArOTMsMTQgQEAgaW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYQogewog
ICAgIHR5cGVuYW1lIE1hcDo6aXRlcmF0b3IgbG9jYXRpb24gPSBtYXAuZmluZChrZXkpOwogICAg
IGlmIChsb2NhdGlvbiAhPSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2xv
Y2F0aW9uLT52YWx1ZV07CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzLmdldChtX293bmVyKVts
b2NhdGlvbi0+dmFsdWVdOwogCiAgICAgaWYgKCFlbnN1cmVTcGFjZUZvckFwcGVuZChleGVjLCBv
d25lcikpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKGtl
eSwgbV9zaXplKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAg
RW50cnkqIGVudHJ5ID0gJm1fZW50cmllc1ttX3NpemUrK107CisgICAgRW50cnkqIGVudHJ5ID0g
Jm1fZW50cmllcy5nZXQobV9vd25lcilbbV9zaXplKytdOwogICAgIG5ldyAoZW50cnkpIEVudHJ5
KCk7CiAgICAgZW50cnktPnNldEtleShleGVjLT52bSgpLCBvd25lciwga2V5VmFsdWUudmFsdWUp
OwogICAgIHJldHVybiBlbnRyeTsKQEAgLTE2NCw3ICsxNjQsNyBAQCBpbmxpbmUgYm9vbCBNYXBE
YXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvCiAgICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7
CiAgICAgICAgIG1fdmFsdWVLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKICAgICB9Ci0gICAgbV9l
bnRyaWVzW2xvY2F0aW9uXS5jbGVhcigpOworICAgIG1fZW50cmllcy5nZXQobV9vd25lcilbbG9j
YXRpb25dLmNsZWFyKCk7CiAgICAgbV9kZWxldGVkQ291bnQrKzsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTE3Niw3ICsxNzYsNyBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJ
dGVyYXRvCiAgICAgaW50MzJfdCBuZXdFbmQgPSAwOwogICAgIFJFTEVBU0VfQVNTRVJUKG5ld0Nh
cGFjaXR5ID4gMCk7CiAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsK
LSAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW2ldOworICAgICAgICBFbnRyeSYgZW50
cnkgPSBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKVtpXTsKICAgICAgICAgaWYgKCFlbnRy
eS5rZXkoKSkgewogICAgICAgICAgICAgbV9pdGVyYXRvcnMuZm9yRWFjaChbbmV3RW5kXShKU0l0
ZXJhdG9yKiBpdGVyYXRvciwgSlNJdGVyYXRvciopIHsKICAgICAgICAgICAgICAgICBpdGVyYXRv
ci0+aXRlcmF0b3JEYXRhKCktPmRpZFJlbW92ZUVudHJ5KG5ld0VuZCk7CkBAIC0xOTUsMjAgKzE5
NSwyMCBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeSwgSlNJdGVyYXRvCiAKICAgICAv
LyBGaXh1cCBmb3IgdGhlIGhhc2htYXBzCiAgICAgZm9yIChhdXRvIHB0ciA9IG1fdmFsdWVLZXll
ZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCi0g
ICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJ
bnQzMigpOworICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVy
KClbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwogICAgIGZvciAoYXV0byBwdHIg
PSBtX2NlbGxLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX2NlbGxLZXllZFRhYmxlLmVuZCgp
OyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXko
KS5nZXQoKS5hc0ludDMyKCk7CisgICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXMuZ2V0V2l0
aG91dEJhcnJpZXIoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CiAgICAgZm9y
IChhdXRvIHB0ciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zdHJpbmdL
ZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1tw
dHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgICAgIHB0ci0+dmFsdWUgPSBt
X2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKVtwdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0lu
dDMyKCk7CiAgICAgZm9yIChhdXRvIHB0ciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5iZWdpbigpOyBw
dHIgIT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1
ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgICAg
IHB0ci0+dmFsdWUgPSBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKVtwdHItPnZhbHVlXS5r
ZXkoKS5nZXQoKS5hc0ludDMyKCk7CiAKICAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkgPT0g
bV9kZWxldGVkQ291bnQpOwogICAgIG1fZGVsZXRlZENvdW50ID0gMDsKIAogICAgIG1fY2FwYWNp
dHkgPSBuZXdDYXBhY2l0eTsKICAgICBtX3NpemUgPSBuZXdFbmQ7Ci0gICAgbV9lbnRyaWVzID0g
ZGVzdGluYXRpb247CisgICAgbV9lbnRyaWVzLnNldFdpdGhvdXRCYXJyaWVyKGRlc3RpbmF0aW9u
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRW50cnksIHR5cGVuYW1lIEpTSXRlcmF0b3I+CkBA
IC0yMTcsOSArMjE3LDkgQEAgaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0
bwogICAgIEFTU0VSVCghc2hvdWxkUGFjaygpKTsKICAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBh
Y2l0eSA+IDApOwogICAgIEFTU0VSVChuZXdDYXBhY2l0eSA+PSBtX2NhcGFjaXR5KTsKLSAgICBt
ZW1jcHkoZGVzdGluYXRpb24sIG1fZW50cmllcywgc2l6ZW9mKEVudHJ5KSAqIG1fc2l6ZSk7Cisg
ICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2VudHJpZXMuZ2V0V2l0aG91dEJhcnJpZXIoKSwgc2l6
ZW9mKEVudHJ5KSAqIG1fc2l6ZSk7CiAgICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwotICAg
IG1fZW50cmllcyA9IGRlc3RpbmF0aW9uOworICAgIG1fZW50cmllcy5zZXRXaXRob3V0QmFycmll
cihkZXN0aW5hdGlvbik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBK
U0l0ZXJhdG9yPgpAQCAtMjM2LDYgKzIzNiw4IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBNYXBE
YXRhSW1wbDxFbnRyeSwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBFbnRyeSog
bmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4obmV3U3RvcmFnZSk7CisgICAgLy8gRG8g
YSByZWFkIGJhcnJpZXIgdG8gZW5zdXJlIHRoYXQgbV9lbnRyaWVzIHBvaW50cyB0byB0by1zcGFj
ZSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGlzIEdDIGVwb2NoLgorICAgIG1fZW50cmllcy5nZXQo
bV9vd25lcik7IAogICAgIGlmIChzaG91bGRQYWNrKCkpCiAgICAgICAgIHJlcGxhY2VBbmRQYWNr
QmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7CiAgICAgZWxzZQpAQCAtMjQ3
LDcgKzI0OSw3IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBNYXBEYXRhSW1wbDxFbnRyeSwKIHRl
bXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBKU0l0ZXJhdG9yPgogaW5saW5lIHZvaWQg
TWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogb3du
ZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIEVudHJ5KiBlbnRyaWVzID0gbV9lbnRy
aWVzOworICAgIEVudHJ5KiBlbnRyaWVzID0gbV9lbnRyaWVzLmdldFdpdGhvdXRCYXJyaWVyKCk7
CiAgICAgaWYgKCFlbnRyaWVzKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fZGVsZXRlZENv
dW50KSB7CkBAIC0yNjEsMTQgKzI2MywxNCBAQCBpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRy
eSwgSlNJdGVyYXRvCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHJlaW50ZXJwcmV0X2Nh
c3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oJmVudHJpZXNbMF0pLCBtX3NpemUgKiAoc2l6ZW9m
KEVudHJ5KSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAgICAgfQogCi0gICAg
dmlzaXRvci5jb3B5TGF0ZXIob3duZXIsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwgZW50cmll
cywgY2FwYWNpdHlJbkJ5dGVzKCkpOworICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBNYXBC
YWNraW5nU3RvcmVDb3B5VG9rZW4sIG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigpLCBjYXBh
Y2l0eUluQnl0ZXMoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCB0eXBlbmFtZSBK
U0l0ZXJhdG9yPgogaW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnksIEpTSXRlcmF0b3I+Ojpj
b3B5QmFja2luZ1N0b3JlKENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCiB7
Ci0gICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiAmJiB2aXNpdG9yLmNo
ZWNrSWZTaG91bGRDb3B5KG1fZW50cmllcykpIHsKLSAgICAgICAgRW50cnkqIG9sZEVudHJpZXMg
PSBtX2VudHJpZXM7CisgICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiAm
JiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KG1fZW50cmllcy5nZXRXaXRob3V0QmFycmllcigp
KSkgeworICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IG1fZW50cmllcy5nZXRXaXRob3V0QmFy
cmllcigpOwogICAgICAgICBFbnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4o
dmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcygpKSk7CiAgICAgICAgIGlm
IChzaG91bGRQYWNrKCkpCiAgICAgICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShu
ZXdFbnRyaWVzLCBtX2NhcGFjaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgJKHJldmlzaW9uIDE5MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDYgKzIwMyw3IEBAIHR5cGVk
ZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgY3JlYXRlUHJlSGVhZGVy
cywgdHJ1ZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZW5hYmxlTW92SGludFJlbW92YWwsIHRy
dWUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGVuYWJsZU9iamVjdEFsbG9jYXRpb25TaW5raW5n
LCB0cnVlLCBudWxscHRyKSBcCisgICAgdihib29sLCBlbmFibGVDb3B5QmFycmllck9wdGltaXph
dGlvbiwgdHJ1ZSwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZUNvbmN1cnJl
bnRKSVQsIHRydWUsICJhbGxvd3MgdGhlIERGRyAvIEZUTCBjb21waWxhdGlvbiBpbiB0aHJlYWRz
IG90aGVyIHRoYW4gdGhlIGV4ZWN1dGluZyBKUyB0aHJlYWQiKSBcCiAgICAgdih1bnNpZ25lZCwg
bnVtYmVyT2ZERkdDb21waWxlclRocmVhZHMsIGNvbXB1dGVOdW1iZXJPZldvcmtlclRocmVhZHMo
MiwgMikgLSAxLCBudWxscHRyKSBcCg==
</data>
<flag name="review"
          id="287904"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>