<?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>108414</bug_id>
          
          <creation_ts>2013-01-30 18:18:20 -0800</creation_ts>
          <short_desc>DFG should allow phases to break Phi&apos;s and then have one phase to rebuild them</short_desc>
          <delta_ts>2013-02-09 11:35:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>108417</dependson>
    
    <dependson>108868</dependson>
    
    <dependson>109000</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>820923</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-30 18:18:20 -0800</bug_when>
    <thetext>This will be painful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820926</commentid>
    <comment_count>1</comment_count>
      <attachid>185646</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-30 18:19:10 -0800</bug_when>
    <thetext>Created attachment 185646
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821924</commentid>
    <comment_count>2</comment_count>
      <attachid>185856</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-31 13:59:51 -0800</bug_when>
    <thetext>Created attachment 185856
work in progress

I believe that I&apos;ve written a completely sensible and easy-to-understand Phi simplifier.  Now I need to carefully glue it in and hopefully not get a massive performance regression in the process...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822080</commentid>
    <comment_count>3</comment_count>
      <attachid>185888</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-31 16:10:50 -0800</bug_when>
    <thetext>Created attachment 185888
work in progress

Slowly weaning other phases off of their Phi maintenance addiction.  Also starting to work on the unification phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822484</commentid>
    <comment_count>4</comment_count>
      <attachid>185975</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-01 01:35:02 -0800</bug_when>
    <thetext>Created attachment 185975
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823396</commentid>
    <comment_count>5</comment_count>
      <attachid>186179</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-01 16:02:55 -0800</bug_when>
    <thetext>Created attachment 186179
it might be done

Now I just have to compile it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823454</commentid>
    <comment_count>6</comment_count>
      <attachid>186192</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-01 17:25:41 -0800</bug_when>
    <thetext>Created attachment 186192
it builds!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823708</commentid>
    <comment_count>7</comment_count>
      <attachid>186237</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-02 14:13:54 -0800</bug_when>
    <thetext>Created attachment 186237
it runs 3d-cube!

It can run some things now, like the 3d-cube benchmark, which is the most important benchmark, ever.

Soon, it will run other things, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823908</commentid>
    <comment_count>8</comment_count>
      <attachid>186271</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-03 16:22:06 -0800</bug_when>
    <thetext>Created attachment 186271
passes all of the simple tests

Still need more debugging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824001</commentid>
    <comment_count>9</comment_count>
      <attachid>186292</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-03 20:31:56 -0800</bug_when>
    <thetext>Created attachment 186292
It runs all of the things

I&apos;m still working on performance issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824089</commentid>
    <comment_count>10</comment_count>
      <attachid>186313</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-03 23:15:38 -0800</bug_when>
    <thetext>Created attachment 186313
improved performance

Reintroduced some of the optimizations that the bytecode parser&apos;s phi management had: in particular we template-specialize so that we don&apos;t have to branch on operand kind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827854</commentid>
    <comment_count>11</comment_count>
      <attachid>187166</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-07 13:26:46 -0800</bug_when>
    <thetext>Created attachment 187166
it might be done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827910</commentid>
    <comment_count>12</comment_count>
      <attachid>187181</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-07 14:53:03 -0800</bug_when>
    <thetext>Created attachment 187181
almost there

Still need to do build system hackage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828838</commentid>
    <comment_count>13</comment_count>
      <attachid>187387</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-08 16:55:33 -0800</bug_when>
    <thetext>Created attachment 187387
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828841</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-08 16:58:41 -0800</bug_when>
    <thetext>Attachment 187387 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/Operands.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAllocator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlockInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCSEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionInjectionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionInjectionPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGStructureCheckHoistingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGUnificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGUnificationPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValidate.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGVirtualRegisterAllocationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSCJSValue.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSString.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp:242:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp:242:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp:158:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp:432:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:333:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 5 in 39 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>828867</commentid>
    <comment_count>15</comment_count>
      <attachid>187387</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-02-08 18:19:54 -0800</bug_when>
    <thetext>Comment on attachment 187387
the patch

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

r=me. Just for due diligence, what&apos;s the performance numbers for this currently?

&gt; Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp:342
&gt; +            // following from from predecessor blocks: SetLocal, Phi, or SetArgument.

from from

&gt; Source/JavaScriptCore/dfg/DFGGraph.h:-83
&gt; -    

Stray whitespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828929</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-08 21:32:57 -0800</bug_when>
    <thetext>Performance:


Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on wartooth (MacBookPro8,2).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r142321)
&quot;CPSRethreading&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r142321)

Collected 12 samples per benchmark/VM, with 4 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               CPSRethreading                                  
SunSpider:
   3d-cube                                         7.3513+-0.0962     !      7.5958+-0.0772        ! definitely 1.0333x slower
   3d-morph                                        7.2424+-0.0946            7.2288+-0.0586        
   3d-raytrace                                     8.1068+-0.1291     ?      8.3262+-0.0990        ? might be 1.0271x slower
   access-binary-trees                             1.4855+-0.0513     ?      1.5246+-0.0969        ? might be 1.0263x slower
   access-fannkuch                                 5.7826+-0.0783     ?      5.9039+-0.1111        ? might be 1.0210x slower
   access-nbody                                    3.2072+-0.0785     ?      3.2796+-0.0757        ? might be 1.0226x slower
   access-nsieve                                   3.5960+-0.0697     ?      3.6101+-0.0991        ?
   bitops-3bit-bits-in-byte                        1.7174+-0.0334     ?      1.7606+-0.0776        ? might be 1.0251x slower
   bitops-bits-in-byte                             2.2026+-0.0260            2.1293+-0.0556          might be 1.0344x faster
   bitops-bitwise-and                              2.0469+-0.0497     ?      2.1184+-0.1290        ? might be 1.0349x slower
   bitops-nsieve-bits                              3.3347+-0.0828     ?      3.3657+-0.0514        ?
   controlflow-recursive                           2.0731+-0.0206            2.0585+-0.0218        
   crypto-aes                                      6.1142+-0.0730     !      6.4354+-0.0943        ! definitely 1.0525x slower
   crypto-md5                                      2.9443+-0.0919     ?      3.0622+-0.1059        ? might be 1.0400x slower
   crypto-sha1                                     2.5351+-0.0664     !      2.6746+-0.0719        ! definitely 1.0551x slower
   date-format-tofte                              11.8771+-0.2156     ?     11.9804+-0.2246        ?
   date-format-xparb                              12.1287+-0.2728           11.9756+-0.1811          might be 1.0128x faster
   math-cordic                                     3.2758+-0.0850            3.2494+-0.0845        
   math-partial-sums                               7.6486+-0.1564            7.6229+-0.1564        
   math-spectral-norm                              2.5782+-0.0682            2.4860+-0.0514          might be 1.0371x faster
   regexp-dna                                      7.3667+-0.0854     ?      7.4244+-0.0844        ?
   string-base64                                   4.1721+-0.0956            4.0864+-0.0669          might be 1.0210x faster
   string-fasta                                    7.5388+-0.1207            7.4819+-0.1130        
   string-tagcloud                                10.9886+-0.2348     ?     11.0610+-0.1851        ?
   string-unpack-code                             19.0560+-0.2886           19.0204+-0.2474        
   string-validate-input                           5.9433+-0.1340     ?      6.0162+-0.1287        ? might be 1.0123x slower

   &lt;arithmetic&gt; *                                  5.8582+-0.0486     ?      5.9030+-0.0384        ? might be 1.0076x slower
   &lt;geometric&gt;                                     4.6869+-0.0408     ?      4.7303+-0.0409        ? might be 1.0093x slower
   &lt;harmonic&gt;                                      3.7928+-0.0357     ?      3.8295+-0.0462        ? might be 1.0097x slower

                                                     TipOfTree               CPSRethreading                                  
V8Spider:
   crypto                                         60.0306+-0.5406     !     61.5250+-0.6450        ! definitely 1.0249x slower
   deltablue                                      93.6007+-1.3571     !     95.7814+-0.4248        ! definitely 1.0233x slower
   earley-boyer                                   56.4647+-1.3491     ?     57.1343+-0.2794        ? might be 1.0119x slower
   raytrace                                       48.3663+-0.5129     ?     48.7322+-0.3738        ?
   regexp                                         70.1942+-0.4902     ?     70.5960+-0.9391        ?
   richards                                       82.9286+-0.3618     ?     83.2773+-0.6056        ?
   splay                                          40.8410+-0.2034           40.6449+-0.2960        

   &lt;arithmetic&gt;                                   64.6323+-0.2715     !     65.3844+-0.2346        ! definitely 1.0116x slower
   &lt;geometric&gt; *                                  62.3043+-0.2590     !     62.9541+-0.2444        ! definitely 1.0104x slower
   &lt;harmonic&gt;                                     60.0599+-0.2682     !     60.6024+-0.2542        ! definitely 1.0090x slower

                                                     TipOfTree               CPSRethreading                                  
Octane and V8v7:
   encrypt                                        0.32440+-0.00131    ?     0.32445+-0.00324       ?
   decrypt                                        5.67955+-0.01808          5.67041+-0.04890       
   deltablue                             x2       0.41085+-0.00128    ?     0.41176+-0.00142       ?
   earley                                         0.61496+-0.00440    ^     0.60046+-0.00208       ^ definitely 1.0242x faster
   boyer                                          7.99015+-0.01987    ^     7.95597+-0.01227       ^ definitely 1.0043x faster
   raytrace                              x2       3.35482+-0.00664          3.34612+-0.01250       
   regexp                                x2      22.59610+-0.10528         22.37049+-0.17507         might be 1.0101x faster
   richards                              x2       0.20972+-0.00124    ^     0.20724+-0.00054       ^ definitely 1.0120x faster
   splay                                 x2       0.56772+-0.02342    ?     0.59818+-0.02702       ? might be 1.0536x slower
   navier-stokes                         x2       8.40020+-0.02680    ?     8.60942+-0.22640       ? might be 1.0249x slower
   closure                                        0.39911+-0.00308    ?     0.40018+-0.00352       ?
   jquery                                         5.59731+-0.07091          5.49686+-0.09469         might be 1.0183x faster
   gbemu                                 x2     175.50045+-11.90205   ?   175.73621+-11.01902      ?
   box2d                                 x2      25.70952+-0.44401    ?    26.08464+-0.27045       ? might be 1.0146x slower

V8v7:
   &lt;arithmetic&gt;                                   5.35549+-0.01409          5.35236+-0.04041         might be 1.0006x faster
   &lt;geometric&gt; *                                  1.76354+-0.00948    ?     1.77209+-0.01286       ? might be 1.0049x slower
   &lt;harmonic&gt;                                     0.67025+-0.00475    ?     0.67129+-0.00453       ? might be 1.0016x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                  22.45928+-1.08070    ?    22.50802+-1.00030       ? might be 1.0022x slower
   &lt;geometric&gt; *                                  3.36544+-0.02018    ?     3.38004+-0.02112       ? might be 1.0043x slower
   &lt;harmonic&gt;                                     0.82564+-0.00537    ?     0.82693+-0.00514       ? might be 1.0016x slower

                                                     TipOfTree               CPSRethreading                                  
Kraken:
   ai-astar                                       279.159+-1.644            277.098+-1.723         
   audio-beat-detection                           177.951+-1.766      ^     174.559+-1.516         ^ definitely 1.0194x faster
   audio-dft                                      246.525+-2.334      ?     247.634+-3.464         ?
   audio-fft                                      101.516+-0.934      ?     101.654+-0.668         ?
   audio-oscillator                               179.380+-2.052      ?     182.280+-2.190         ? might be 1.0162x slower
   imaging-darkroom                               207.871+-0.942      ?     211.039+-2.750         ? might be 1.0152x slower
   imaging-desaturate                             104.979+-0.669      ^     103.324+-0.229         ^ definitely 1.0160x faster
   imaging-gaussian-blur                          289.391+-2.327            288.607+-1.083         
   json-parse-financial                            54.813+-0.395             54.742+-0.748         
   json-stringify-tinderbox                        69.497+-1.918      ?      69.525+-0.395         ?
   stanford-crypto-aes                             69.130+-0.620      ?      69.707+-0.813         ?
   stanford-crypto-ccm                             75.030+-3.241      ?      75.516+-3.416         ?
   stanford-crypto-pbkdf2                         191.796+-2.000      ^     187.433+-0.847         ^ definitely 1.0233x faster
   stanford-crypto-sha256-iterative                82.991+-1.399             81.974+-0.482           might be 1.0124x faster

   &lt;arithmetic&gt; *                                 152.145+-0.465            151.792+-0.639           might be 1.0023x faster
   &lt;geometric&gt;                                    131.061+-0.584            130.790+-0.713           might be 1.0021x faster
   &lt;harmonic&gt;                                     112.669+-0.645            112.518+-0.809           might be 1.0013x faster

                                                     TipOfTree               CPSRethreading                                  
JSRegress:
   adapt-to-double-divide                         75.3465+-0.4350           75.2567+-0.2146        
   aliased-arguments-getbyval                      0.7673+-0.0058     !      0.7949+-0.0084        ! definitely 1.0360x slower
   allocate-big-object                             1.8407+-0.0228     ?      1.8958+-0.0434        ? might be 1.0300x slower
   arity-mismatch-inlining                         0.6015+-0.0110     ?      0.6078+-0.0065        ? might be 1.0106x slower
   array-access-polymorphic-structure             43.8935+-0.3524           43.6009+-0.2770        
   array-with-double-add                           4.1707+-0.0995            4.1263+-0.1007          might be 1.0108x faster
   array-with-double-increment                     3.5498+-0.1178     ?      3.6295+-0.0799        ? might be 1.0225x slower
   array-with-double-mul-add                       4.7339+-0.1115     ?      4.8435+-0.0807        ? might be 1.0231x slower
   array-with-double-sum                           4.5948+-0.0981     ?      4.6396+-0.0927        ?
   array-with-int32-add-sub                        7.4036+-0.1119     ?      7.4149+-0.1027        ?
   array-with-int32-or-double-sum                  4.6357+-0.0733     ?      4.7393+-0.0743        ? might be 1.0224x slower
   big-int-mul                                     3.7645+-0.0943     ?      3.8126+-0.0784        ? might be 1.0128x slower
   boolean-test                                    3.2422+-0.0849            3.2396+-0.0997        
   cast-int-to-double                             11.4394+-0.1556     ?     11.6818+-0.4150        ? might be 1.0212x slower
   cell-argument                                  12.8855+-0.1206           12.8213+-0.1928        
   cfg-simplify                                    3.0132+-0.0751            2.9762+-0.0638          might be 1.0124x faster
   cmpeq-obj-to-obj-other                          9.0928+-0.1743            8.8768+-0.1384          might be 1.0243x faster
   constant-test                                   4.8821+-0.0918     ?      4.9113+-0.0754        ?
   direct-arguments-getbyval                       0.6972+-0.0059     !      0.7237+-0.0075        ! definitely 1.0380x slower
   double-pollution-getbyval                       9.2472+-0.0666     ?      9.3956+-0.1112        ? might be 1.0160x slower
   double-pollution-putbyoffset                    3.9324+-0.0683     ?      3.9327+-0.1081        ?
   external-arguments-getbyval                     1.6322+-0.0266            1.6288+-0.0292        
   external-arguments-putbyval                     2.4096+-0.0617     ?      2.4294+-0.0451        ?
   Float32Array-matrix-mult                        9.4745+-0.0996            9.3447+-0.1307          might be 1.0139x faster
   fold-double-to-int                             17.1006+-0.4984           16.6145+-0.1413          might be 1.0293x faster
   function-dot-apply                              2.1912+-0.0274            2.1897+-0.0425        
   function-test                                   3.2597+-0.0610            3.2355+-0.0537        
   get-by-id-chain-from-try-block                  5.2250+-0.1271            5.1440+-0.1210          might be 1.0158x faster
   indexed-properties-in-objects                   3.2903+-0.0792     ?      3.3470+-0.0729        ? might be 1.0173x slower
   inline-arguments-access                         1.0281+-0.0104     !      1.0463+-0.0072        ! definitely 1.0176x slower
   inline-arguments-local-escape                  15.6365+-0.2735           15.2822+-0.2337          might be 1.0232x faster
   inline-get-scoped-var                           5.3761+-0.0750            5.3507+-0.0734        
   inlined-put-by-id-transition                    9.9811+-0.1655     ?     10.0022+-0.0992        ?
   int-or-other-abs-then-get-by-val                6.8123+-0.1196            6.7650+-0.1050        
   int-or-other-abs-zero-then-get-by-val          26.6592+-0.2342     !     27.5452+-0.2677        ! definitely 1.0332x slower
   int-or-other-add-then-get-by-val                8.2947+-0.1519     ?      8.2955+-0.1063        ?
   int-or-other-add                                7.5124+-0.1262     ?      7.5786+-0.1138        ?
   int-or-other-div-then-get-by-val                6.3039+-0.4014     ?      6.4763+-0.4647        ? might be 1.0273x slower
   int-or-other-max-then-get-by-val                7.0281+-0.0847            6.9958+-0.1307        
   int-or-other-min-then-get-by-val                6.8951+-0.1001     ?      6.9659+-0.1008        ? might be 1.0103x slower
   int-or-other-mod-then-get-by-val                5.8966+-0.0766     ?      5.9336+-0.0612        ?
   int-or-other-mul-then-get-by-val                5.8023+-0.0775     ?      5.8165+-0.1070        ?
   int-or-other-neg-then-get-by-val                5.9645+-0.0816     ?      6.0107+-0.0797        ?
   int-or-other-neg-zero-then-get-by-val          25.9048+-0.3786     ?     26.4683+-0.5408        ? might be 1.0218x slower
   int-or-other-sub-then-get-by-val                7.9825+-0.1494     ?      7.9956+-0.1221        ?
   int-or-other-sub                                7.1840+-0.1035            7.1656+-0.1249        
   int-overflow-local                            197.5204+-0.8437          196.9987+-1.0043        
   Int16Array-bubble-sort                         24.5623+-0.5116     ?     24.6167+-0.4209        ?
   Int16Array-load-int-mul                         1.4892+-0.0161     ?      1.5082+-0.0093        ? might be 1.0128x slower
   Int8Array-load                                  3.6639+-0.0890     ?      3.7345+-0.0597        ? might be 1.0193x slower
   integer-divide                                 13.0407+-0.4650           12.9980+-0.4247        
   integer-modulo                                  1.5775+-0.0201     ?      1.5900+-0.0139        ?
   make-indexed-storage                            2.8866+-0.0609     ?      2.9906+-0.0973        ? might be 1.0360x slower
   method-on-number                              187.3597+-2.5455          185.6352+-1.9131        
   new-array-buffer-dead                           2.8265+-0.0582            2.8215+-0.1022        
   new-array-buffer-push                           7.2039+-0.0722            7.2025+-0.0520        
   new-array-dead                                 22.2644+-0.1936     ?     22.6008+-0.2406        ? might be 1.0151x slower
   new-array-push                                  4.9765+-0.0697            4.9400+-0.0368        
   number-test                                     3.1589+-0.0858     ?      3.2116+-0.0615        ? might be 1.0167x slower
   object-closure-call                             6.7482+-0.0781            6.5998+-0.0932          might be 1.0225x faster
   object-test                                     3.4391+-0.0843     ?      3.5332+-0.0652        ? might be 1.0274x slower
   poly-stricteq                                  73.5902+-0.5459           73.2536+-0.3875        
   polymorphic-structure                          14.8530+-0.1938           14.8409+-0.1913        
   polyvariant-monomorphic-get-by-id              10.4995+-0.5741     ?     10.6131+-0.5376        ? might be 1.0108x slower
   rare-osr-exit-on-local                        152.3211+-0.7098     ?    153.1462+-0.7105        ?
   register-pressure-from-osr                     24.6226+-0.2096           24.4576+-0.2020        
   simple-activation-demo                         27.4539+-0.2322           27.2610+-0.2945        
   slow-array-profile-convergence                  3.3130+-0.0759     ?      3.3945+-0.0818        ? might be 1.0246x slower
   slow-convergence                               58.8908+-0.5100           58.3886+-0.3044        
   sparse-conditional                              0.9993+-0.0045     ?      1.0072+-0.0135        ?
   splice-to-remove                               39.1461+-0.2717     ?     39.2787+-0.3761        ?
   string-hash                                     2.1361+-0.0370            2.1073+-0.0492          might be 1.0137x faster
   string-repeat-arith                            32.4702+-0.4610     ?     32.6677+-0.3229        ?
   string-sub                                     64.9460+-0.4867     ?     65.8427+-0.5323        ? might be 1.0138x slower
   string-test                                     3.0620+-0.0771     ?      3.0846+-0.0809        ?
   structure-hoist-over-transitions                2.5320+-0.0470            2.5118+-0.0489        
   tear-off-arguments-simple                       1.4474+-0.0174     ?      1.4628+-0.0173        ? might be 1.0107x slower
   tear-off-arguments                              2.6686+-0.0568     ?      2.7120+-0.0536        ? might be 1.0163x slower
   temporal-structure                             15.3105+-0.1692     !     15.6571+-0.0916        ! definitely 1.0226x slower
   to-int32-boolean                               19.9505+-0.1784     ?     19.9568+-0.1780        ?
   undefined-test                                  3.2583+-0.0948            3.1846+-0.0662          might be 1.0231x faster

   &lt;arithmetic&gt;                                   17.9601+-0.0570     ?     17.9674+-0.0520        ? might be 1.0004x slower
   &lt;geometric&gt; *                                   7.0863+-0.0397     ?      7.1200+-0.0395        ? might be 1.0048x slower
   &lt;harmonic&gt;                                      3.7870+-0.0191     !      3.8273+-0.0206        ! definitely 1.0106x slower

                                                     TipOfTree               CPSRethreading                                  
All benchmarks:
   &lt;arithmetic&gt;                                   31.2243+-0.2229     ?     31.2453+-0.2274        ? might be 1.0007x slower
   &lt;geometric&gt;                                     8.5938+-0.0467     ?      8.6376+-0.0458        ? might be 1.0051x slower
   &lt;harmonic&gt;                                      2.7206+-0.0097     ?      2.7372+-0.0107        ? might be 1.0061x slower

                                                     TipOfTree               CPSRethreading                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                                16.7647+-0.0757     ?     16.8478+-0.0688        ? might be 1.0050x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829093</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-09 11:35:08 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/142377</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185646</attachid>
            <date>2013-01-30 18:19:10 -0800</date>
            <delta_ts>2013-01-31 13:59:51 -0800</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>21464</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lv
biAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRz
IHsKICAgICBzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IFQmIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0
KSB7IHZhbHVlLmR1bXAob3V0KTsgfQogfTsKIAorZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50
T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxUPiA+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJs
aWM6CkBAIC02Niw2ICs2OCwyOCBAQCBwdWJsaWM6CiAgICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkg
eyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQogICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KICAgICAKKyAgICB0ZW1wbGF0ZTxPcGVy
YW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkxvY2Fs
cygpOworICAgIH0KKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBU
JiBhdEZvcihzaXplX3QgaWR4KQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFy
Z3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOworICAgICAg
ICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICB9CisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+CisgICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnQoaWR4KTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgfQor
ICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAg
aWYgKHNpemUgPD0gbV9sb2NhbHMuc2l6ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NQ
U1JldGhyZWFkaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBDUFNSZXRocmVhZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBDUFNS
ZXRocmVhZGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIkNQ
UyByZXRocmVhZGluZyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAg
eworICAgICAgICAvLyBDdXJyZW50bHkgd2UgZG9uJ3QgZG8gcmV0aHJlYWRpbmcgaWYgd2UncmUg
YWxyZWFkeSBpbiBUaHJlYWRlZENQUyBmb3JtLiBJbiBmdXR1cmUsCisgICAgICAgIC8vIHdlIG1h
eSB3YW50IHRvIHJlcGxhY2UgdGhpcyBhc3NlcnRpb24gd2l0aCBhbiBlYXJseSByZXR1cm4gaWYg
cGhhc2VzIHdlcmUgbW9yZQorICAgICAgICAvLyBwcmVjaXNlIGFib3V0IHdoZXRoZXIgb3Igbm90
IHRoZXkgYnJva2UgdGhyZWFkaW5nLgorICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0g
TG9hZFN0b3JlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWVVbm5lY2Vzc2FyeU5vZGVzKCk7Cisg
ICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzKCk7CisgICAgICAgIHByb3BhZ2F0ZVBo
aXMoKTsKKyAgICAgICAgbV9ncmFwaC5jb2xsZWN0R2FyYmFnZSgpOworICAgICAgICAKKyAgICAg
ICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgCisgICAgdm9pZCBmcmVlVW5uZWNlc3NhcnlOb2Rl
cygpCisgICAgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNT
RVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHVuc2ln
bmVkIGZyb21JbmRleCA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCB0b0luZGV4ID0gMDsKKyAg
ICAgICAgICAgIHdoaWxlIChmcm9tSW5kZXggPCBibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChmcm9tSW5kZXgrKyk7CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAg
ICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09
IFBoaSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21Mb2Nh
bCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE5v
cDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gMDsgLy8gUmVzZXQgdGhlIHJlcGxhY2VtZW50
IHNpbmNlIHRoZSBuZXh0IHBoYXNlIHdpbGwgdXNlIGl0LgorICAgICAgICAgICAgICAgIGJsb2Nr
LT5hdCh0b0luZGV4KyspID0gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJsb2Nr
LT5yZXNpemUodG9JbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOwor
ICAgICAgICAgICAgYmxvY2stPnBoaXMucmVzaXplKDApOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIHZvaWQgY2xlYXJW
YXJpYWJsZXNBdEhlYWRBbmRUYWlsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgKKyAgICAgICAg
ICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplRm9yPG9wZXJhbmRLaW5kPigpCisgICAg
ICAgICAgICA9PSBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2l6ZUZvcjxvcGVyYW5kS2luZD4o
KSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2Jsb2NrLT52YXJpYWJs
ZXNBdEhlYWQuc2l6ZUZvcjxvcGVyYW5kS2luZD4oKTsgaS0tOykgeworICAgICAgICAgICAgbV9i
bG9jay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9wZXJhbmRLaW5kPihpKSA9IDA7CisgICAgICAg
ICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGkpID0gMDsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxv
Y2soKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Jsb2NrKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBBU1NFUlQobV9ibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAKKyAgICAgICAg
Y2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWlsPEFyZ3VtZW50T3BlcmFuZD4oKTsKKyAgICAgICAg
Y2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWlsPExvY2FsT3BlcmFuZD4oKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEFzc3VtZXMgdGhhdCBhbGwgcGhpIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIHJlbW92
ZWQuIEFzc3VtZXMgdGhhdCB0aGluZ3MgdGhhdAorICAgICAgICAvLyBzaG91bGQgYmUgbGl2ZSBo
YXZlIGEgbm9uLXplcm8gcmVmIGNvdW50LCBidXQgZG9lc24ndCBhc3N1bWUgdGhhdCB0aGUgcmVm
CisgICAgICAgIC8vIGNvdW50cyBhcmUgY29ycmVjdCBiZXlvbmQgdGhhdCAobW9yZSBmb3JtYWxs
eSAhIWxvZ2ljYWxSZWZDb3VudCA9PSAhIWFjdHVhbFJlZkNvdW50CisgICAgICAgIC8vIGJ1dCBu
b3QgbG9naWNhbFJlZkNvdW50ID09IGFjdHVhbFJlZkNvdW50KS4gQXNzdW1lcyB0aGF0IGl0IGNh
biBicmVhayByZWYKKyAgICAgICAgLy8gY291bnRzLgorICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2Jsb2NrLT5zaXplKCk7ICsrbm9k
ZUluZGV4KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9u
KG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBj
YW5vbmljYWxpemVMb2NhbHNJbkJsb2NrcygpCisgICAgeworICAgICAgICBmb3IgKG1fYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBtX2Jsb2NrSW5kZXgtLTspIHsKKyAgICAg
ICAgICAgIG1fYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW21fYmxvY2tJbmRleF0uZ2V0KCk7Cisg
ICAgICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKKyAgICB7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICBCbG9ja0luZGV4IG1fYmxvY2tJbmRleDsKKyAgICBCYXNpY0Jsb2NrKiBtX2Js
b2NrOworfTsKKwordm9pZCBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmIGdyYXBoKQorewor
ICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ1BTIFJldGhyZWFkaW5nIFBo
YXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPENQU1JldGhyZWFkaW5nUGhhc2U+KGdyYXBoKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlX2gKKyNkZWZpbmUgREZHQ1BTUmV0aHJlYWRpbmdQaGFzZV9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDUFMg
UmV0aHJlYWRpbmc6CisvLworLy8gVGFrZXMgYSBncmFwaCBpbiB3aGljaCB0aGVyZSBhcmUgYXJi
aXRyYXJ5IEdldExvY2Fscy9TZXRMb2NhbHMgd2l0aCBubyBjb25uZWN0aW9ucworLy8gYmV0d2Vl
biB0aGVtLiBSZW1vdmVzIHJlZHVuZGFudCBvbmVzIGluIHRoZSBjYXNlIG9mIHVuY2FwdHVyZWQg
dmFyaWFibGVzLiBDb25uZWN0cworLy8gYWxsIG9mIHRoZW0gd2l0aCBQaGkgZnVuY3Rpb25zIHRv
IHJlcHJlc2VudCBsaXZlIHJhbmdlcy4KKworYm9vbCBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoR3Jh
cGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdDUFNSZXRocmVhZGluZ1BoYXNlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MTMwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NzQsMjcgKzk3NCw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgIAotICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihFZGdlJiBjaGlsZCwg
Ym9vbCBhZGRSZWYgPSB0cnVlKQotICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVy
YW5kIGlzIGFjdHVhbGx5IHVudXNlZC4KLSAgICAgICAgaWYgKCFjaGlsZCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBs
YWNlbWVudC4KLSAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFjZW1lbnQ7
Ci0gICAgICAgIGlmICghcmVwbGFjZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IAotICAgICAgICBjaGlsZC5zZXROb2RlKHJlcGxhY2VtZW50KTsKLSAgICAgICAgCi0gICAgICAg
IC8vIFRoZXJlIGlzIGRlZmluaXRlbHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQgdGhlIHJl
cGxhY2VtZW50IGRvZXMgbm90Ci0gICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4KLSAgICAg
ICAgQVNTRVJUKCFjaGlsZC0+cmVwbGFjZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGFk
ZFJlZikKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmKGNoaWxkKTsKLSAgICB9Ci0gICAgCiAgICAg
dm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKE5vZGUqIG5vZGUpCiAgICAg
ewogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGFudG9tKTsKQEAgLTEwNzIsMjEgKzEw
NTEsMTIgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKTsKLQotICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNo
aWxkSWR4KyspCi0gICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxk
MSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJm
b3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7
Ci0gICAgICAgIH0KKyAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOwog
ICAgICAgICAKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCiAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAg
IAotICAgICAgICBpZiAoIXNob3VsZEdlbmVyYXRlKQorICAgICAgICBpZiAoIW5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBHcmFw
aDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDCiAgICAgLCBtX29zckVudHJ5Qnl0
ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBtX211c3RIYW5kbGVWYWx1
ZXMobXVzdEhhbmRsZVZhbHVlcykKICAgICAsIG1fZml4cG9pbnRTdGF0ZShCZWZvcmVGaXhwb2lu
dCkKKyAgICAsIG1fZm9ybShMb2FkU3RvcmUpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9j
ayk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
NDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDYgKzgwLDQ1IEBAIGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKICAgICBT
cGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxvdywKICAgICBTcGVjdWxhdGVJbnRl
Z2VyCiB9OworCisvLyBEZXNjcmliZXMgdGhlIGZvcm0geW91IGNhbiBleHBlY3QgdGhlIGVudGly
ZSBncmFwaCB0byBiZSBpbi4KK2VudW0gR3JhcGhGb3JtIHsKKyAgICAvLyBMb2FkU3RvcmUgZm9y
bSBtZWFucyB0aGF0IGJhc2ljIGJsb2NrcyBtYXkgZnJlZWx5IHVzZSBHZXRMb2NhbCwgU2V0TG9j
YWwsCisgICAgLy8gR2V0TG9jYWxVbmxpbmtlZCwgYW5kIEZsdXNoIGZvciBhY2Nlc3NpbmcgbG9j
YWwgdmFyaWFibGVzIGFuZCBpbmRpY2F0aW5nCisgICAgLy8gd2hlcmUgdGhlaXIgbGl2ZSByYW5n
ZXMgb3VnaHQgdG8gYmUuIExpdmVuZXNzIGlzIGltcGxpY2l0LCBhcyBpcyB0aGUgZGF0YQorICAg
IC8vIGZsb3cgYmV0d2VlbiBsb2NhbCBhY2Nlc3Nlcy4gRm9yIGV4YW1wbGUsIExvYWRTdG9yZSBm
b3JtIGdpdmVzIG5vIGVhc3kgd2F5CisgICAgLy8gdG8gZGV0ZXJtaW5lIHdoaWNoIFNldExvY2Fs
J3MgZmxvdyBpbnQgbyBhIEdldExvY2FsLiBBcyB3ZWxsLCBMb2FkU3RvcmUKKyAgICAvLyBmb3Jt
IGltcGxpZXMgbm8gcmVzdHJpY3Rpb25zIG9uIHJlZHVuZGFuY3k6IHlvdSBjYW4gZnJlZWx5IGVt
aXQgbXVsdGlwbGUKKyAgICAvLyBHZXRMb2NhbHMsIG9yIG11bHRpcGxlIFNldExvY2FscyAob3Ig
YW55IGNvbWJpbmF0aW9uIHRoZXJlb2YpIHRvIHRoZSBzYW1lCisgICAgLy8gbG9jYWwgaW4gdGhl
IHNhbWUgYmxvY2suIExvYWRTdG9yZSBmb3JtIGRvZXMgbm90IHJlcXVpcmUgYmFzaWMgYmxvY2tz
IHRvCisgICAgLy8gZGVjbGFyZSBob3cgdGhleSBhZmZlY3Qgb3IgdXNlIGxvY2Fscywgb3RoZXIg
dGhhbiBpbXBsaWNpdGx5IGJ5IHVzaW5nCisgICAgLy8gdGhlIGxvY2FsIG9wcy4gRmluYWxseSwg
TG9hZFN0b3JlIGFsbG93cyBmbGV4aWJpbGl0eSBpbiBob3cgbGl2ZW5lc3Mgb2YKKyAgICAvLyBs
b2NhbHMgaXMgZXh0ZW5kZWQ7IGZvciBleGFtcGxlIHlvdSBjYW4gcmVwbGFjZSBhIEdldExvY2Fs
IHdpdGggYSBQaGFudG9tCisgICAgLy8gYW5kIHNvIGxvbmcgYXMgdGhlIFBoYW50b20gcmV0YWlu
cyB0aGUgR2V0TG9jYWwncyBjaGlsZHJlbiAoaS5lLiB0aGUgUGhpCisgICAgLy8gbW9zdCBsaWtl
bHkpIHRoZW4gaXQgaW1wbGllcyB0aGF0IHRoZSBsb2NhbCBpcyBzdGlsbCBsaXZlIGJ1dCB0aGF0
IGl0IG5lZWQKKyAgICAvLyBub3QgYmUgc3RvcmVkIHRvIHRoZSBzdGFjayBuZWNlc3NhcmlseS4K
KyAgICAvLworICAgIC8vIExvYWRTdG9yZSBmb3JtIGlzIHN1aXRhYmxlIGZvciBDRkcgdHJhbnNm
b3JtYXRpb25zLCBhcyB3ZWxsIGFzIHN0cmVuZ3RoCisgICAgLy8gcmVkdWN0aW9uLCBmb2xkaW5n
LCBhbmQgQ1NFLgorICAgIExvYWRTdG9yZSwKKyAgICAKKyAgICAvLyBUaHJlYWRlZENQUyBmb3Jt
IG1lYW5zIHRoYXQgYmFzaWMgYmxvY2tzIGxpc3QgdXAtZnJvbnQgd2hpY2ggbG9jYWxzIHRoZXkK
KyAgICAvLyBleHBlY3QgdG8gYmUgbGl2ZSBhdCB0aGUgaGVhZCwgYW5kIHdoaWNoIGxvY2FscyB0
aGV5IG1ha2UgYXZhaWxhYmxlIGF0IHRoZQorICAgIC8vIHRhaWwuIFRocmVhZGVkQ1BTIGZvcm0g
YWxzbyBpbXBsaWVzIHRoYXQ6CisgICAgLy8KKyAgICAvLyAtIEdldExvY2FscyBhbmQgU2V0TG9j
YWxzIHRvIHVuY2FwdHVyZWQgdmFyaWFibGVzIGFyZSBub3QgcmVkdW5kYW50IHdpdGhpbgorICAg
IC8vICAgYSBiYXNpYyBibG9jay4KKyAgICAvLworICAgIC8vIC0gQWxsIEdldExvY2FscyBhbmQg
Rmx1c2hlcyBhcmUgbGlua2VkIGRpcmVjdGx5IHRvIHRoZSBsYXN0IGFjY2VzcyBwb2ludAorICAg
IC8vICAgb2YgdGhlIHZhcmlhYmxlLCB3aGljaCBtdXN0IG5vdCBiZSBhbm90aGVyIEdldExvY2Fs
IGlmIHRoZSB2YXJpYWJsZSBpcworICAgIC8vICAgdW5jYXB0dXJlZC4KKyAgICAvLworICAgIC8v
IC0gUGhhbnRvbShQaGkpIGlzIG5vdCBsZWdhbCwgYnV0IFBoYW50b21Mb2NhbCBpcy4KKyAgICAv
LworICAgIC8vIFRocmVhZGVkQ1BTIGZvcm0gaXMgc3VpdGFibGUgZm9yIGRhdGEgZmxvdyBhbmFs
eXNpcyAoQ0ZBLCBwcmVkaWN0aW9uCisgICAgLy8gcHJvcGFnYXRpb24pLCByZWdpc3RlciBhbGxv
Y2F0aW9uLCBhbmQgY29kZSBnZW5lcmF0aW9uLgorICAgIFRocmVhZGVkQ1BTCit9OwogICAgIAog
CiAvLwpAQCAtMTY3LDYgKzIwNiw0MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckFuZERlcmVm
Q2hpbGQyKE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDEpOyB9CiAgICAg
dm9pZCBjbGVhckFuZERlcmVmQ2hpbGQzKE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxk
KG5vZGUsIDIpOyB9CiAgICAgCisgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKE5vZGUqIG5v
ZGUpCisgICAgeworICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKTsKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsg
Y2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGls
ZElkeCsrKQorICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5j
aGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlv
bkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAg
ICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygp
LCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwZXJm
b3JtU3Vic3RpdHV0aW9uRm9yRWRnZShFZGdlJiBjaGlsZCkKKyAgICB7CisgICAgICAgIC8vIENo
ZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCisgICAgICAgIGlmICghY2hp
bGQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayBpZiB0
aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCisgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50ID0gY2hp
bGQtPnJlcGxhY2VtZW50OworICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgY2hpbGQuc2V0Tm9kZShyZXBsYWNlbWVudCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBUaGVyZSBpcyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQuIEFz
c2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBkb2VzIG5vdAorICAgICAgICAvLyBoYXZlIGEgcmVw
bGFjZW1lbnQuCisgICAgICAgIEFTU0VSVCghY2hpbGQtPnJlcGxhY2VtZW50KTsKKyAgICAgICAg
CisgICAgICAgIGlmIChhZGRSZWYpCisgICAgICAgICAgICBtX2dyYXBoLnJlZihjaGlsZCk7Cisg
ICAgfQorICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1w
bGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1
ZUFyZ3MpIFwKICAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBh
ZGROb2RlKFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5v
ZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMp
IFwKICAgICB7IFwKQEAgLTcxOCw2ICs3OTEsNyBAQCBwdWJsaWM6CiAgICAgT3BlcmFuZHM8SlNW
YWx1ZT4gbV9tdXN0SGFuZGxlVmFsdWVzOwogICAgIAogICAgIE9wdGltaXphdGlvbkZpeHBvaW50
U3RhdGUgbV9maXhwb2ludFN0YXRlOworICAgIEdyYXBoRm9ybSBtX2Zvcm07CiBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdv
cmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE0MTMwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDQsNiArMzA0LDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9k
ZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29udmVydFRvUGhhbnRvbUxv
Y2FsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IFBoYW50b20gJiYgY2hpbGQxKCkt
Pm9wKCkgPT0gUGhpKTsKKyAgICAgICAgbV9vcCA9IFBoYW50b21Mb2NhbDsKKyAgICAgICAgbV9v
cEluZm8gPSBjaGlsZDEoKS0+bV9vcEluZm87IC8vIENvcHkgdGhlIHZhcmlhYmxlQWNjZXNzRGF0
YS4KKyAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgfQorICAgIAogICAg
IEpTQ2VsbCogd2Vha0NvbnN0YW50KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcCgpID09IFdl
YWtKU0NvbnN0YW50KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHJldmlzaW9uIDE0MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBt
YWNybyhQaGksIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCiAgICAgbWFj
cm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBtYWNy
byhQaGFudG9tTG9jYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAg
ICBcCiAgICAgLyogR2V0IHRoZSB2YWx1ZSBvZiBhIGxvY2FsIHZhcmlhYmxlLCB3aXRob3V0IGxp
bmtpbmcgaW50byB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhICovXAogICAgIC8qIG5ldHdvcmsuIFRo
aXMgaXMgb25seSB2YWxpZCBmb3IgdmFyaWFibGUgYWNjZXNzZXMgd2hvc2UgcHJlZGljdGlvbnMg
b3JpZ2luYXRlZCAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEwICsxMDksMTMgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAvLyBVbmxlc3MgSSdtIGEgRmx1c2gsIFBoYW50b20sIEdl
dExvY2FsLCBvciBQaGksIG15IGNoaWxkcmVuIHNob3VsZCBoYXNSZXN1bHQoKS4KICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgRmx1c2g6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGk6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgIWopCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVk
Z2UtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg5
LDExICsxOTIsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRB
cmd1bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9w
KCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2Rl
LT5vcCgpID09IFBoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwg
cHJldk5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09
IFNldExvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkg
PT0gU2V0QXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+
b3AoKSA9PSBGbHVzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5v
cCgpID09IFBoaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgp
ID09IFBoYW50b21Mb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUg
PT0gZWRnZS5ub2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzEsNiArMjM2LDE4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBlZGdlKSwgbm9kZXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpOworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiAhaikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgIXBoaXNJblRo
aXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQpA
QCAtMjU2LDYgKzI3Myw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2Fk
U3RvcmUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjaGVja09wZXJhbmQoCiAgICAg
ICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIGdldExvY2FsUG9zaXRpb25zLCBzZXRMb2NhbFBv
c2l0aW9ucywgYXJndW1lbnRUb09wZXJhbmQoaSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185856</attachid>
            <date>2013-01-31 13:59:51 -0800</date>
            <delta_ts>2013-01-31 16:10:50 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32745</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lv
biAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRz
IHsKICAgICBzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IFQmIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0
KSB7IHZhbHVlLmR1bXAob3V0KTsgfQogfTsKIAorZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50
T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxUPiA+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJs
aWM6CkBAIC02Niw2ICs2OCwyOCBAQCBwdWJsaWM6CiAgICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkg
eyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQogICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KICAgICAKKyAgICB0ZW1wbGF0ZTxPcGVy
YW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkxvY2Fs
cygpOworICAgIH0KKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBU
JiBhdEZvcihzaXplX3QgaWR4KQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFy
Z3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOworICAgICAg
ICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICB9CisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+CisgICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnQoaWR4KTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgfQor
ICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAg
aWYgKHNpemUgPD0gbV9sb2NhbHMuc2l6ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NQ
U1JldGhyZWFkaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBDUFNSZXRocmVhZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBDUFNS
ZXRocmVhZGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIkNQ
UyByZXRocmVhZGluZyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAg
eworICAgICAgICAvLyBDdXJyZW50bHkgd2UgZG9uJ3QgZG8gcmV0aHJlYWRpbmcgaWYgd2UncmUg
YWxyZWFkeSBpbiBUaHJlYWRlZENQUyBmb3JtLiBJbiBmdXR1cmUsCisgICAgICAgIC8vIHdlIG1h
eSB3YW50IHRvIHJlcGxhY2UgdGhpcyBhc3NlcnRpb24gd2l0aCBhbiBlYXJseSByZXR1cm4gaWYg
cGhhc2VzIHdlcmUgbW9yZQorICAgICAgICAvLyBwcmVjaXNlIGFib3V0IHdoZXRoZXIgb3Igbm90
IHRoZXkgYnJva2UgdGhyZWFkaW5nLgorICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0g
TG9hZFN0b3JlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWVVbm5lY2Vzc2FyeU5vZGVzKCk7Cisg
ICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzKCk7CisgICAgICAgIHByb3BhZ2F0ZVBo
aXM8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPExvY2FsT3BlcmFu
ZD4oKTsKKyAgICAgICAgbV9ncmFwaC5jb2xsZWN0R2FyYmFnZSgpOworICAgICAgICAKKyAgICAg
ICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgCisgICAgdm9pZCBmcmVlVW5uZWNlc3NhcnlOb2Rl
cygpCisgICAgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNT
RVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHVuc2ln
bmVkIGZyb21JbmRleCA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCB0b0luZGV4ID0gMDsKKyAg
ICAgICAgICAgIHdoaWxlIChmcm9tSW5kZXggPCBibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChmcm9tSW5kZXgrKyk7CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAg
ICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09
IFBoaSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21Mb2Nh
bCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE5v
cDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gMDsgLy8gUmVzZXQgdGhlIHJlcGxhY2VtZW50
IHNpbmNlIHRoZSBuZXh0IHBoYXNlIHdpbGwgdXNlIGl0LgorICAgICAgICAgICAgICAgIGJsb2Nr
LT5hdCh0b0luZGV4KyspID0gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJsb2Nr
LT5yZXNpemUodG9JbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOwor
ICAgICAgICAgICAgYmxvY2stPnBoaXMucmVzaXplKDApOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIHZvaWQgY2xlYXJW
YXJpYWJsZXNBdEhlYWRBbmRUYWlsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgKKyAgICAgICAg
ICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplRm9yPG9wZXJhbmRLaW5kPigpCisgICAg
ICAgICAgICA9PSBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2l6ZUZvcjxvcGVyYW5kS2luZD4o
KSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2Jsb2NrLT52YXJpYWJs
ZXNBdEhlYWQuc2l6ZUZvcjxvcGVyYW5kS2luZD4oKTsgaS0tOykgeworICAgICAgICAgICAgbV9i
bG9jay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9wZXJhbmRLaW5kPihpKSA9IDA7CisgICAgICAg
ICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGkpID0gMDsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBhZGRQaGlTaWxlbnRseShCYXNpY0Js
b2NrKiBibG9jaywgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSkKKyAgICB7CisgICAgICAgIFBoaSogcmVzdWx0ID0gbV9ncmFwaC5hZGRO
b2RlKERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGksIGNvZGVPcmln
aW4sIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICBibG9jay0+cGhpcy5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTm9kZSogYWRkUGhp
KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAgUGhpKiByZXN1bHQgPSBhZGRQ
aGlTaWxlbnRseShibG9jaywgY29kZU9yaWdpbiwgdmFyaWFibGUpOworICAgICAgICBtX3BoaVN0
YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KGJsb2NrLCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTm9kZSogYWRkUGhpKGNvbnN0IENvZGVPcmlnaW4m
IGNvZGVPcmlnaW4sIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRkUGhpKG1fYmxvY2ssIGNvZGVPcmlnaW4sIHZhcmlhYmxlKTsKKyAgICB9Cisg
ICAgCisgICAgTm9kZSogYWRkUGhpKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
YWRkUGhpKG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2NhbChOb2RlKiBub2RlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChOb2RlKiBvdGhlck5vZGUgPSBtX2Jsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChvdGhlck5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChvdGhlck5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAg
ICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IFBoaSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgYSBHZXRMb2NhbCwgc28gdGhpcyBtaWdodCBhcyB3
ZWxsIGJlIHRoZSBvbmUuCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENo
aWxkMShFZGdlKG90aGVyTm9kZSkpOworICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBub2RlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5v
cCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnQgfHwgb3RoZXJOb2RlLT5vcCgpID09IEdldExvY2FsKTsKKyAgICAg
ICAgICAgIEFTU0VSVChvdGhlck5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxl
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRB
cmd1bWVudCkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdl
KG90aGVyTm9kZSkpOworICAgICAgICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFibGUt
PmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0g
R2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9IG90aGVyTm9kZS0+Y2hp
bGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0g
U2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VSVChv
dGhlck5vZGUtPm9wKCkgPT0gUGhpIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBv
dGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIEtlZXAgdGhpcyBHZXRMb2NhbCBidXQgbGluayBpdCB0byB0aGUgcHJpb3Ig
b25lcy4KKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhl
ck5vZGUpKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBub2RlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3Ao
KSA9PSBHZXRMb2NhbCkgeworICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgYWxsIHJlZmVyZW5j
ZXMgdG8gdGhpcyBHZXRMb2NhbCB3aXRoIG90aGVyTm9kZS4KKyAgICAgICAgICAgICAgICBub2Rl
LT5yZXBsYWNlbWVudCA9IG90aGVyTm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9w
KCkgPT0gU2V0TG9jYWwpOworICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBvdGhlck5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoYWRkUGhpKG5vZGUp
KSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRPcGVyYW5kRmlyc3RUaW1l
KHZhcmlhYmxlLT5sb2NhbCgpLCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRU
YWlsLnNldE9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCksIG5vZGUpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNhbm9uaWNhbGl6ZVNldExvY2FsKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBt
X2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2RlKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZT4KKyAgICB2b2lkIGNhbm9u
aWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAKKyAg
ICAgICAgaWYgKE5vZGUqIG90aGVyTm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkgeworICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGUpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBzd2l0Y2ggKG90aGVyTm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBGbHVzaDoK
KyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKKyAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IFBoaSB8fCBub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5v
ZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
bm9kZVR5cGUgPT0gUGhhbnRvbUxvY2FsICYmIG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkg
eworICAgICAgICAgICAgICAgIC8vIFBoYW50b21Mb2NhbChTZXRMb2NhbCkgZG9lc24ndCBtYWtl
IHNlbnNlLiBQaGFudG9tTG9jYWwgbWVhbnM6IGF0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyBw
b2ludCBJIGtub3cgSSB3b3VsZCBoYXZlIGJlZW4gaW50ZXJlc3RlZCBpbiB0aGUgdmFsdWUgb2Yg
dGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiBPU1Iu
IFBoYW50b21Mb2NhbChTZXRMb2NhbCkgbWVhbnM6IGF0IHRoaXMgcG9pbnQgSQorICAgICAgICAg
ICAgICAgIC8vIGtub3cgdGhhdCBJIHdvdWxkIGhhdmUgcmVhZCB0aGUgdmFsdWUgd3JpdHRlbiBi
eSB0aGF0IFNldExvY2FsLiBUaGlzIGlzCisgICAgICAgICAgICAgICAgLy8gcmVkdW5kYW50IGFu
ZCBpbmVmZmljaWVudCwgc2luY2UgcmVhbGx5IGl0IGp1c3QgbWVhbnMgdGhhdCB3ZSB3YW50IHRv
CisgICAgICAgICAgICAgICAgLy8gYmUga2VlcGluZyB0aGUgb3BlcmFuZCB0byB0aGUgU2V0TG9j
YWwgYWxpdmUuIFRoZSBTZXRMb2NhbCBtYXkgZGllLCBhbmQKKyAgICAgICAgICAgICAgICAvLyB3
ZSdsbCBiZSBmaW5lIGJlY2F1c2UgT1NSIHRyYWNrcyBkZWFkIFNldExvY2Fscy4KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBTbyB3ZSB0dXJuIHRoaXMgaW50byBhIFBoYW50
b20gb24gdGhlIGNoaWxkIG9mIHRoZSBTZXRMb2NhbC4KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEob3RoZXJOb2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBUaGVyZSBpcyBub3RoaW5nIHdyb25nIHdpdGggaGF2aW5nIHJlZHVuZGFudCBG
bHVzaCdzLiBJdCBqdXN0IG5lZWRzIHRvCisgICAgICAgICAgICAvLyBiZSBsaW5rZWQgYXBwcm9w
cmlhdGVseS4KKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVy
Tm9kZSkpOworICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCksIG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShhZGRQaGko
bm9kZSkpKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNldE9wZXJhbmRGaXJz
dFRpbWUodmFyaWFibGUtPmxvY2FsKCksIG5vZGUpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgbm9kZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9jaygpCisgICAgeworICAgICAgICBp
ZiAoIW1fYmxvY2spCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChtX2Jsb2Nr
LT5pc1JlYWNoYWJsZSk7CisgICAgICAgIAorICAgICAgICBjbGVhclZhcmlhYmxlc0F0SGVhZEFu
ZFRhaWw8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBjbGVhclZhcmlhYmxlc0F0SGVhZEFu
ZFRhaWw8TG9jYWxPcGVyYW5kPigpOworICAgICAgICAKKyAgICAgICAgLy8gQXNzdW1lcyB0aGF0
IGFsbCBwaGkgcmVmZXJlbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZC4gQXNzdW1lcyB0aGF0IHRoaW5n
cyB0aGF0CisgICAgICAgIC8vIHNob3VsZCBiZSBsaXZlIGhhdmUgYSBub24temVybyByZWYgY291
bnQsIGJ1dCBkb2Vzbid0IGFzc3VtZSB0aGF0IHRoZSByZWYKKyAgICAgICAgLy8gY291bnRzIGFy
ZSBjb3JyZWN0IGJleW9uZCB0aGF0IChtb3JlIGZvcm1hbGx5ICEhbG9naWNhbFJlZkNvdW50ID09
ICEhYWN0dWFsUmVmQ291bnQKKyAgICAgICAgLy8gYnV0IG5vdCBsb2dpY2FsUmVmQ291bnQgPT0g
YWN0dWFsUmVmQ291bnQpLiBBc3N1bWVzIHRoYXQgaXQgY2FuIGJyZWFrIHJlZgorICAgICAgICAv
LyBjb3VudHMuCisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIFRoZSBydWxlcyBmb3IgdGhyZWFkZWQgQ1BTIGZvcm06CisgICAgICAg
ICAgICAvLyAKKyAgICAgICAgICAgIC8vIEhlYWQgdmFyaWFibGU6IHRoZSBmaXJzdCB0aGluZyB0
aGF0IGhhcHBlbmVkIHRvIHRoZSB2YXJpYWJsZSBpbiB0aGUgYmxvY2suCisgICAgICAgICAgICAv
LyBJdCBtYXkgYmUgYSBGbHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwgU2V0TG9jYWwsIG9y
IFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQgbWF5IG9ubHkgYXBwZWFy
IGluIHRoZSByb290IGJsb2NrLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRhaWwg
dmFyaWFibGU6IHRoZSBsYXN0IHRoaW5nIHRoYXQgaGFwcGVuZWQgdG8gdGhlIHZhcmlhYmxlIGlu
IHRoZSBibG9jay4KKyAgICAgICAgICAgIC8vIEl0IG1heSBiZSBhIEZsdXNoLCBQaGFudG9tTG9j
YWwsIEdldExvY2FsLCBTZXRMb2NhbCwgb3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLyBT
ZXRBcmd1bWVudCBtYXkgb25seSBhcHBlYXIgaW4gdGhlIHJvb3QgYmxvY2suCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gQ2hpbGQgb2YgR2V0TG9jYWw6IHRoZSBvcGVyYXRpb24gdGhh
dCB0aGUgR2V0TG9jYWwga2VlcHMgYWxpdmUuIEZvcgorICAgICAgICAgICAgLy8gdW5jYXB0dXJl
ZCBsb2NhbHMsIGl0IG1heSBiZSBhIFBoaSBmcm9tIHRoZSBjdXJyZW50IGJsb2NrLiBGb3IgYXJn
dW1lbnRzLAorICAgICAgICAgICAgLy8gaXQgbWF5IGJlIGEgU2V0QXJndW1lbnQuIEZvciBjYXB0
dXJlZCBsb2NhbHMgYW5kIGFyZ3VtZW50cyBpdCBtYXkgYWxzbyBiZQorICAgICAgICAgICAgLy8g
YSBTZXRMb2NhbC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBDaGlsZCBvZiBTZXRM
b2NhbDogbXVzdCBiZSBhIHZhbHVlIHByb2R1Y2luZyBub2RlLgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIENoaWxkIG9mIEZsdXNoOiBpdCBtYXkgYmUgYSBQaGkgZnJvbSB0aGUgY3Vy
cmVudCBibG9jayBvciBhIFNldExvY2FsLiBGb3IKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBp
dCBtYXkgYWxzbyBiZSBhIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIENoaWxkIG9mIFBoYW50b21Mb2NhbDogaXQgbWF5IGJlIGEgUGhpIGZyb20gdGhlIGN1cnJl
bnQgYmxvY2suIEZvcgorICAgICAgICAgICAgLy8gYXJndW1lbnRzIGl0IG1heSBhbHNvIGJlIGEg
U2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2hpbGRyZW4gb2Yg
UGhpOiBvdGhlciBQaGlzIGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrLCBvciBhbnkgb2YgdGhlCisg
ICAgICAgICAgICAvLyBmb2xsb3dpbmcgZnJvbSBmcm9tIHByZWRlY2Vzc29yIGJsb2NrczogU2V0
TG9jYWwsIFBoaSwgb3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLyBUaGVzZSBhcmUgY29t
cHV0ZWQgYnkgbG9va2luZyBhdCB0aGUgdGFpbCB2YXJpYWJsZXMgb2YgdGhlIHByZWRlY2Vzc29y
CisgICAgICAgICAgICAvLyBibG9ja3MgYW5kIGVpdGhlciB1c2luZyBpdCBkaXJlY3RseSAoaWYg
aXQncyBhIFNldExvY2FsLCBQaGksIG9yCisgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCkgb3Ig
bG9hZGluZyB0aGF0IG5vZGVzIGNoaWxkIChpZiBpdCdzIGEgR2V0TG9jYWwsIFBoYW5vbUxvY2Fs
LAorICAgICAgICAgICAgLy8gb3IgRmx1c2ggLSBhbGwgb2YgdGhlc2Ugd2lsbCBoYXZlIGNoaWxk
cmVuIHRoYXQgYXJlIFNldExvY2FsLCBQaGksIG9yCisgICAgICAgICAgICAvLyBTZXRBcmd1bWVu
dCkuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRM
b2NhbChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXplU2V0
TG9jYWwobm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNo
T3JQaGFudG9tTG9jYWw8Rmx1c2g+KG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAg
ICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbDxQaGFudG9tPihub2RlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrcygpCisgICAgewor
ICAgICAgICBmb3IgKG1fYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBtX2Js
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW21f
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2Nr
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKKyAg
ICB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIGZhaWwgaW5z
dGFudGx5LgorICAgICAgICBtX2Jsb2NrID0gMDsKKyAgICAgICAgbV9ibG9ja0luZGV4ID0gTm9C
bG9jazsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICghbV9waGlTdGFjay5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIFBoaVN0YWNrRW50cnkgZW50cnkgPSBtX3BoaVN0YWNrLmxhc3QoKTsKKyAg
ICAgICAgICAgIG1fcGhpU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGVudHJ5Lm1fYmxvY2s7CisgICAgICAgICAgICBQcmVk
ZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5tX3ByZWRlY2Vzc29yczsKKyAgICAg
ICAgICAgIE5vZGUqIGN1cnJlbnRQaGkgPSBlbnRyeS5waGk7CisgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY3VycmVudFBoaS0+bG9jYWwoKTsKKyAgICAgICAgICAg
IGludCBvcGVyYW5kID0gdmFyaWFibGUtPmxvY2FsKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBwcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogcHJlZWNlc3NvckJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tw
cmVkZWNlc3NvcnNbaV1dLmdldCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IE5vZGUqJiB2YXJpYWJsZUluUHJldmlvdXMgPSBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlSW5Q
cmV2aW91cykgeworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluUHJldmlvdXMgPSBhZGRQ
aGkocHJlZGVjZXNzb3JCbG9jaywgY3VycmVudFBoaS0+Y29kZU9yaWdpbiwgdmFyaWFibGUpOwor
ICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0
T3BlcmFuZEZpcnN0VGltZShvcGVyYW5kLCB2YXJpYWJsZUluUHJldmlvdXMpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGVJblBy
ZXZpb3VzLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICBj
YXNlIEZsdXNoOgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlSW5QcmVk
ZWNlc3Nvci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGVJblByZWRlY2Vzc29yLT5j
aGlsZDEoKS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGVJblByZXZpb3VzID0gdmFyaWFibGVJblByZXZpb3VzLT5jaGlsZDEoKS5ub2RlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IEFTU0VSVCgKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJblByZXZpb3VzLT5vcCgpID09
IFNldExvY2FsCisgICAgICAgICAgICAgICAgICAgIHx8IHZhcmlhYmxlSW5QcmV2aW91cy0+b3Ao
KSA9PSBQaGkKKyAgICAgICAgICAgICAgICAgICAgfHwgdmFyaWFibGVJblByZXZpb3VzLT5vcCgp
ID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGRpZFNl
dENoaWxkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IDA7IGNoaWxkSWR4IDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytjaGlsZElkeCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudFBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJZHgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRQaGktPmNoaWxkcmVuLnNldENoaWxkKGNoaWxkSWR4LCBFZGdlKHZhcmlhYmxlSW5QcmVk
ZWNlc3NvcikpOworICAgICAgICAgICAgICAgICAgICBkaWRTZXRDaGlsZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoZGlkU2V0Q2hpbGQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIG5ld1BoaSA9IGFkZFBoaVNpbGVudGx5
KGJsb2NrLCBjdXJyZW50UGhpLT5jb2RlT3JpZ2luLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAg
ICAgbmV3UGhpLT5jaGlsZHJlbiA9IGN1cnJlbnRQaGktPmNoaWxkcmVuOworICAgICAgICAgICAg
ICAgIGN1cnJlbnRQaGktPmNoaWxkcmVuLmluaXRpYWxpemUobmV3UGhpLCB2YXJpYWJsZUluUHJl
ZGVjZXNzb3IsIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIFZlY3RvcjxQaGlTdGFja0Vu
dHJ5LCA2ND4mIHBoaVN0YWNrRm9yKCkKKyAgICB7CisgICAgICAgIGlmIChvcGVybmFuZEtpbmQg
PT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFj
azsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICB9CisgICAgCisgICAgc3Ry
dWN0IFBoaVN0YWNrRW50cnkgeworICAgICAgICBQaGlTdGFja0VudHJ5KEJhc2ljQmxvY2sqIGJs
b2NrLCBOb2RlKiBwaGkpCisgICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgICAg
ICAsIG1fcGhpKHBoaSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgICAgICBOb2RlKiBtX3BoaTsKKyAgICB9OworICAgIAor
ICAgIEJsb2NrSW5kZXggbV9ibG9ja0luZGV4OworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cisg
ICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDY0PiBtX3BoaVN0YWNrOworfTsKKwordm9pZCBwZXJm
b3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgQ1BTIFJldGhyZWFkaW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1
blBoYXNlPENQU1JldGhyZWFkaW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDUFNSZXRocmVhZGluZ1BoYXNl
X2gKKyNkZWZpbmUgREZHQ1BTUmV0aHJlYWRpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDUFMgUmV0aHJlYWRpbmc6CisvLworLy8g
VGFrZXMgYSBncmFwaCBpbiB3aGljaCB0aGVyZSBhcmUgYXJiaXRyYXJ5IEdldExvY2Fscy9TZXRM
b2NhbHMgd2l0aCBubyBjb25uZWN0aW9ucworLy8gYmV0d2VlbiB0aGVtLiBSZW1vdmVzIHJlZHVu
ZGFudCBvbmVzIGluIHRoZSBjYXNlIG9mIHVuY2FwdHVyZWQgdmFyaWFibGVzLiBDb25uZWN0cwor
Ly8gYWxsIG9mIHRoZW0gd2l0aCBQaGkgZnVuY3Rpb25zIHRvIHJlcHJlc2VudCBsaXZlIHJhbmdl
cy4KKworYm9vbCBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzQsMjcgKzk3NCw2
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIHZv
aWQgcGVyZm9ybVN1YnN0aXR1dGlvbihFZGdlJiBjaGlsZCwgYm9vbCBhZGRSZWYgPSB0cnVlKQot
ICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVudXNl
ZC4KLSAgICAgICAgaWYgKCFjaGlsZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBsYWNlbWVudC4KLSAgICAgICAgTm9k
ZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFjZW1lbnQ7Ci0gICAgICAgIGlmICghcmVwbGFj
ZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBjaGlsZC5zZXRO
b2RlKHJlcGxhY2VtZW50KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZXJlIGlzIGRlZmluaXRl
bHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQgdGhlIHJlcGxhY2VtZW50IGRvZXMgbm90Ci0g
ICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4KLSAgICAgICAgQVNTRVJUKCFjaGlsZC0+cmVw
bGFjZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGFkZFJlZikKLSAgICAgICAgICAgIG1f
Z3JhcGgucmVmKGNoaWxkKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2
YW50UGhhbnRvbUNoaWxkcmVuKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSA9PSBQaGFudG9tKTsKQEAgLTEwNzIsMjEgKzEwNTEsMTIgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBi
b29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKLQotICAgICAgICBp
ZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZp
cnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAgICAg
ICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwZXJm
b3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7
Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigp
LCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUt
PmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgIH0KKyAgICAgICAg
bV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOwogICAgICAgICAKICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCiAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVy
Z2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAgIAotICAgICAgICBpZiAoIXNob3Vs
ZEdlbmVyYXRlKQorICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZp
c2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBDCiAgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5
dGVjb2RlSW5kZXgpCiAgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykK
ICAgICAsIG1fZml4cG9pbnRTdGF0ZShCZWZvcmVGaXhwb2ludCkKKyAgICAsIG1fZm9ybShMb2Fk
U3RvcmUpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDQ1
IEBAIGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKICAgICBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3
YXlzV2F0Y2hPdmVyZmxvdywKICAgICBTcGVjdWxhdGVJbnRlZ2VyCiB9OworCisvLyBEZXNjcmli
ZXMgdGhlIGZvcm0geW91IGNhbiBleHBlY3QgdGhlIGVudGlyZSBncmFwaCB0byBiZSBpbi4KK2Vu
dW0gR3JhcGhGb3JtIHsKKyAgICAvLyBMb2FkU3RvcmUgZm9ybSBtZWFucyB0aGF0IGJhc2ljIGJs
b2NrcyBtYXkgZnJlZWx5IHVzZSBHZXRMb2NhbCwgU2V0TG9jYWwsCisgICAgLy8gR2V0TG9jYWxV
bmxpbmtlZCwgYW5kIEZsdXNoIGZvciBhY2Nlc3NpbmcgbG9jYWwgdmFyaWFibGVzIGFuZCBpbmRp
Y2F0aW5nCisgICAgLy8gd2hlcmUgdGhlaXIgbGl2ZSByYW5nZXMgb3VnaHQgdG8gYmUuIExpdmVu
ZXNzIGlzIGltcGxpY2l0LCBhcyBpcyB0aGUgZGF0YQorICAgIC8vIGZsb3cgYmV0d2VlbiBsb2Nh
bCBhY2Nlc3Nlcy4gRm9yIGV4YW1wbGUsIExvYWRTdG9yZSBmb3JtIGdpdmVzIG5vIGVhc3kgd2F5
CisgICAgLy8gdG8gZGV0ZXJtaW5lIHdoaWNoIFNldExvY2FsJ3MgZmxvdyBpbnQgbyBhIEdldExv
Y2FsLiBBcyB3ZWxsLCBMb2FkU3RvcmUKKyAgICAvLyBmb3JtIGltcGxpZXMgbm8gcmVzdHJpY3Rp
b25zIG9uIHJlZHVuZGFuY3k6IHlvdSBjYW4gZnJlZWx5IGVtaXQgbXVsdGlwbGUKKyAgICAvLyBH
ZXRMb2NhbHMsIG9yIG11bHRpcGxlIFNldExvY2FscyAob3IgYW55IGNvbWJpbmF0aW9uIHRoZXJl
b2YpIHRvIHRoZSBzYW1lCisgICAgLy8gbG9jYWwgaW4gdGhlIHNhbWUgYmxvY2suIExvYWRTdG9y
ZSBmb3JtIGRvZXMgbm90IHJlcXVpcmUgYmFzaWMgYmxvY2tzIHRvCisgICAgLy8gZGVjbGFyZSBo
b3cgdGhleSBhZmZlY3Qgb3IgdXNlIGxvY2Fscywgb3RoZXIgdGhhbiBpbXBsaWNpdGx5IGJ5IHVz
aW5nCisgICAgLy8gdGhlIGxvY2FsIG9wcy4gRmluYWxseSwgTG9hZFN0b3JlIGFsbG93cyBmbGV4
aWJpbGl0eSBpbiBob3cgbGl2ZW5lc3Mgb2YKKyAgICAvLyBsb2NhbHMgaXMgZXh0ZW5kZWQ7IGZv
ciBleGFtcGxlIHlvdSBjYW4gcmVwbGFjZSBhIEdldExvY2FsIHdpdGggYSBQaGFudG9tCisgICAg
Ly8gYW5kIHNvIGxvbmcgYXMgdGhlIFBoYW50b20gcmV0YWlucyB0aGUgR2V0TG9jYWwncyBjaGls
ZHJlbiAoaS5lLiB0aGUgUGhpCisgICAgLy8gbW9zdCBsaWtlbHkpIHRoZW4gaXQgaW1wbGllcyB0
aGF0IHRoZSBsb2NhbCBpcyBzdGlsbCBsaXZlIGJ1dCB0aGF0IGl0IG5lZWQKKyAgICAvLyBub3Qg
YmUgc3RvcmVkIHRvIHRoZSBzdGFjayBuZWNlc3NhcmlseS4KKyAgICAvLworICAgIC8vIExvYWRT
dG9yZSBmb3JtIGlzIHN1aXRhYmxlIGZvciBDRkcgdHJhbnNmb3JtYXRpb25zLCBhcyB3ZWxsIGFz
IHN0cmVuZ3RoCisgICAgLy8gcmVkdWN0aW9uLCBmb2xkaW5nLCBhbmQgQ1NFLgorICAgIExvYWRT
dG9yZSwKKyAgICAKKyAgICAvLyBUaHJlYWRlZENQUyBmb3JtIG1lYW5zIHRoYXQgYmFzaWMgYmxv
Y2tzIGxpc3QgdXAtZnJvbnQgd2hpY2ggbG9jYWxzIHRoZXkKKyAgICAvLyBleHBlY3QgdG8gYmUg
bGl2ZSBhdCB0aGUgaGVhZCwgYW5kIHdoaWNoIGxvY2FscyB0aGV5IG1ha2UgYXZhaWxhYmxlIGF0
IHRoZQorICAgIC8vIHRhaWwuIFRocmVhZGVkQ1BTIGZvcm0gYWxzbyBpbXBsaWVzIHRoYXQ6Cisg
ICAgLy8KKyAgICAvLyAtIEdldExvY2FscyBhbmQgU2V0TG9jYWxzIHRvIHVuY2FwdHVyZWQgdmFy
aWFibGVzIGFyZSBub3QgcmVkdW5kYW50IHdpdGhpbgorICAgIC8vICAgYSBiYXNpYyBibG9jay4K
KyAgICAvLworICAgIC8vIC0gQWxsIEdldExvY2FscyBhbmQgRmx1c2hlcyBhcmUgbGlua2VkIGRp
cmVjdGx5IHRvIHRoZSBsYXN0IGFjY2VzcyBwb2ludAorICAgIC8vICAgb2YgdGhlIHZhcmlhYmxl
LCB3aGljaCBtdXN0IG5vdCBiZSBhbm90aGVyIEdldExvY2FsIGlmIHRoZSB2YXJpYWJsZSBpcwor
ICAgIC8vICAgdW5jYXB0dXJlZC4KKyAgICAvLworICAgIC8vIC0gUGhhbnRvbShQaGkpIGlzIG5v
dCBsZWdhbCwgYnV0IFBoYW50b21Mb2NhbCBpcy4KKyAgICAvLworICAgIC8vIFRocmVhZGVkQ1BT
IGZvcm0gaXMgc3VpdGFibGUgZm9yIGRhdGEgZmxvdyBhbmFseXNpcyAoQ0ZBLCBwcmVkaWN0aW9u
CisgICAgLy8gcHJvcGFnYXRpb24pLCByZWdpc3RlciBhbGxvY2F0aW9uLCBhbmQgY29kZSBnZW5l
cmF0aW9uLgorICAgIFRocmVhZGVkQ1BTCit9OwogICAgIAogCiAvLwpAQCAtMTY3LDYgKzIwNiw0
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQyKE5vZGUqIG5vZGUpIHsg
Y2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDEpOyB9CiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hp
bGQzKE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDIpOyB9CiAgICAgCisg
ICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBi
b29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKKyAgICAgICAgaWYg
KG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJz
dENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhd
LCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwZXJmb3Jt
U3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJh
dGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRy
ZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0
dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRn
ZShFZGdlJiBjaGlsZCkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBp
cyBhY3R1YWxseSB1bnVzZWQuCisgICAgICAgIGlmICghY2hpbGQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1l
bnQuCisgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50ID0gY2hpbGQtPnJlcGxhY2VtZW50OworICAg
ICAgICBpZiAoIXJlcGxhY2VtZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgY2hpbGQuc2V0Tm9kZShyZXBsYWNlbWVudCk7CisgICAgICAgIAorICAgICAgICAvLyBU
aGVyZSBpcyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNl
bWVudCBkb2VzIG5vdAorICAgICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCisgICAgICAgIEFT
U0VSVCghY2hpbGQtPnJlcGxhY2VtZW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChhZGRSZWYp
CisgICAgICAgICAgICBtX2dyYXBoLnJlZihjaGlsZCk7CisgICAgfQorICAgIAogI2RlZmluZSBE
RkdfREVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMs
IHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKICAgICB0ZW1wbGF0
ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhZGROb2RlKFJlZkNoaWxkcmVuTW9k
ZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlw
ZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKQEAgLTcxOCw2
ICs3OTEsNyBAQCBwdWJsaWM6CiAgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbV9tdXN0SGFuZGxlVmFs
dWVzOwogICAgIAogICAgIE9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUgbV9maXhwb2ludFN0YXRl
OworICAgIEdyYXBoRm9ybSBtX2Zvcm07CiBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxl
U3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJs
b2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE0MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNiArMzA0LDE0IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAg
fQogICAgIAorICAgIHZvaWQgY29udmVydFRvUGhhbnRvbUxvY2FsKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX29wID09IFBoYW50b20gJiYgY2hpbGQxKCktPm9wKCkgPT0gUGhpKTsKKyAgICAg
ICAgbV9vcCA9IFBoYW50b21Mb2NhbDsKKyAgICAgICAgbV9vcEluZm8gPSBjaGlsZDEoKS0+bV9v
cEluZm87IC8vIENvcHkgdGhlIHZhcmlhYmxlQWNjZXNzRGF0YS4KKyAgICAgICAgY2hpbGRyZW4u
c2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgfQorICAgIAogICAgIEpTQ2VsbCogd2Vha0NvbnN0YW50
KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcCgpID09IFdlYWtKU0NvbnN0YW50KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0MTMwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNiArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGksIE5vZGVEb2VzTm90
RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCiAgICAgbWFjcm8oRmx1c2gsIE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBtYWNybyhQaGFudG9tTG9jYWwsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBcCiAgICAgLyogR2V0IHRoZSB2
YWx1ZSBvZiBhIGxvY2FsIHZhcmlhYmxlLCB3aXRob3V0IGxpbmtpbmcgaW50byB0aGUgVmFyaWFi
bGVBY2Nlc3NEYXRhICovXAogICAgIC8qIG5ldHdvcmsuIFRoaXMgaXMgb25seSB2YWxpZCBmb3Ig
dmFyaWFibGUgYWNjZXNzZXMgd2hvc2UgcHJlZGljdGlvbnMgb3JpZ2luYXRlZCAqL1wKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDEz
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA5LDEwICsxMDksMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAvLyBVbmxlc3MgSSdtIGEgRmx1c2gsIFBoYW50b20sIEdldExvY2FsLCBvciBQaGksIG15IGNo
aWxkcmVuIHNob3VsZCBoYXNSZXN1bHQoKS4KICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgUGhhbnRvbToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUs
IGVkZ2UpLCBlZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
ID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmICFqKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5o
YXNSZXN1bHQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE4OSwxMSAr
MTk0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1l
bnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09
IEZsdXNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3Ao
KSA9PSBQaGkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZO
b2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRM
b2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNl
dEFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkg
PT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9
PSBQaGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQ
aGFudG9tTG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlID09IGVk
Z2Uubm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjMxLDYgKzIzOCwxOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRn
ZSksIG5vZGVzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
UGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgIWopCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksICFwaGlzSW5UaGlzQmxv
Y2suY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKQEAgLTI1
Niw2ICsyNzUsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3Jl
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1
bWVudHMoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgY2hlY2tPcGVyYW5kKAogICAgICAgICAg
ICAgICAgICAgICBibG9ja0luZGV4LCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9jYWxQb3NpdGlv
bnMsIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185888</attachid>
            <date>2013-01-31 16:10:50 -0800</date>
            <delta_ts>2013-02-01 01:35:02 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58830</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lv
biAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRz
IHsKICAgICBzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IFQmIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0
KSB7IHZhbHVlLmR1bXAob3V0KTsgfQogfTsKIAorZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50
T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxUPiA+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJs
aWM6CkBAIC02Niw2ICs2OCwyOCBAQCBwdWJsaWM6CiAgICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkg
eyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQogICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KICAgICAKKyAgICB0ZW1wbGF0ZTxPcGVy
YW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkxvY2Fs
cygpOworICAgIH0KKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBU
JiBhdEZvcihzaXplX3QgaWR4KQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFy
Z3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOworICAgICAg
ICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICB9CisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+CisgICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnQoaWR4KTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgfQor
ICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAg
aWYgKHNpemUgPD0gbV9sb2NhbHMuc2l6ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzUsOCAr
NjM1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2Nr
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGNoYW5nZWQpCisgICAgICAgIGlm
IChjaGFuZ2VkKSB7CiAgICAgICAgICAgICBtX2dyYXBoLmNvbGxlY3RHYXJiYWdlKCk7CisgICAg
ICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IExvYWRTdG9yZTsKKyAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0MTM3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yODcsNjQgKzI4NywzMyBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKTsKICAgICAg
ICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgbV9p
bmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAKKyAgICAgICAgLy8g
VGhpcyBoYXMgdHdvIGdvYWxzOiAxKSBsaW5rIHRvZ2V0aGVyIHZhcmlhYmxlIGFjY2VzcyBkYXRh
cywgYW5kIDIpCisgICAgICAgIC8vIHRyeSB0byBhdm9pZCBjcmVhdGluZyByZWR1bmRhbnQgR2V0
TG9jYWxzLiAoMSkgaXMgcmVxdWlyZWQgZm9yCisgICAgICAgIC8vIGNvcnJlY3RuZXNzIC0gbm8g
b3RoZXIgcGhhc2Ugd2lsbCBlbnN1cmUgdGhhdCBibG9jay1sb2NhbCB2YXJpYWJsZQorICAgICAg
ICAvLyBhY2Nlc3MgZGF0YSB1bmlmaWNhdGlvbiBpcyBkb25lIGNvcnJlY3RseS4gKDIpIGlzIHB1
cmVseSBvcHBvcnR1bmlzdGljCisgICAgICAgIC8vIGFuZCBpcyBtZWFudCBhcyBhbiBjb21waWxl
LXRpbWUgb3B0aW1pemF0aW9uIG9ubHkuCisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlOworICAgICAgICAKICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IEZsdXNoKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHdvIHBv
c3NpYmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sgd2FudHMgdGhlIGxvY2FsIHRvIGJlIGxpdmUK
LSAgICAgICAgICAgICAgICAvLyBidXQgaGFzIG5vdCBsb2FkZWQgaXRzIHZhbHVlLCBvciBpdCBo
YXMgbG9hZGVkIGl0cyB2YWx1ZSwgaW4KLSAgICAgICAgICAgICAgICAvLyB3aGljaCBjYXNlIHdl
J3JlIGRvbmUuCi0gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRh
LT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUg
PSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5m
byh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBub2RlOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
KyAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpICE9IEZsdXNoKTsKLQotICAg
ICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm1lcmdlSXNDYXB0dXJlZChpc0Nh
cHR1cmVkKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc0NhcHR1cmVkKSB7
Ci0gICAgICAgICAgICAgICAgLy8gV2Ugd2lzaCB0byB1c2UgdGhlIHNhbWUgdmFyaWFibGUgYWNj
ZXNzIGRhdGEgYXMgdGhlIHByZXZpb3VzIGFjY2VzcywKLSAgICAgICAgICAgICAgICAvLyBidXQg
Zm9yIGFsbCBvdGhlciBwdXJwb3NlcyB3ZSB3YW50IHRvIGlzc3VlIGEgbG9hZCBzaW5jZSBmb3Ig
YWxsIHdlCi0gICAgICAgICAgICAgICAgLy8ga25vdywgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxh
dGlvbiwgdGhlIGxvY2FsIGhhcyBiZWVuIGNsb2JiZXJlZC4KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgbGluayB0byB0aGUgUGhpIG5vZGUsIG5vdCB0
byB0aGUgR2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9j
YWwpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9kZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIG5ld0dldExvY2FsID0gaW5qZWN0TGF6eU9w
ZXJhbmRTcGVjdWxhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRMb2Nh
bCwgT3BJbmZvKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZSkpOwotICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBu
ZXdHZXRMb2NhbDsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3R2V0TG9jYWw7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExv
Y2FsKQorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNl
IEdldExvY2FsOgogICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOworICAgICAgICAgICAgdmFy
aWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBvcmFyaWVzIGZyb20g
cHJpb3IgYmxvY2tzLAotICAgICAgICAvLyBleHBhbmQgbV9wcmVzZXJ2ZWRWYXJzIHRvIGNvdmVy
IHRoZXNlLgotICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOwotICAgICAgICAK
LSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAgIAotICAgICAgICBO
b2RlKiBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwot
ICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50Qmxv
Y2ssIHBoaSwgb3BlcmFuZCkpOwotICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVj
dWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwg
cGhpKSk7CisgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRv
R3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGU7Ci0gICAgICAgIAotICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKG9w
ZXJhbmQsIG5vZGUpOwotICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAg
IHZvaWQgc2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0
TW9kZSA9IE5vcm1hbFNldCkKQEAgLTM3Myw2MiArMzQyLDI1IEBAIHByaXZhdGU6CiAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFy
Z3VtZW50KTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVy
ZWQob3BlcmFuZCk7CiAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKKyAg
ICAgICAgCiAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBGbHVzaCkgewotICAgICAgICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIg
dGhlIGJsb2NrIHdhbnRzIHRoZSBsb2NhbCB0byBiZSBsaXZlCi0gICAgICAgICAgICAgICAgLy8g
YnV0IGhhcyBub3QgbG9hZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUs
IGluCi0gICAgICAgICAgICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgotICAgICAgICAg
ICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0NhcHR1cmVkKGlz
Q2FwdHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRT
cGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRh
KSwgbm9kZSkpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgIT0gRmx1c2gpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCkgewotICAgICAgICAg
ICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1lbnQgaW4gdGhlIGZpcnN0IGJhc2ljIGJs
b2NrOyBsaW5rCi0gICAgICAgICAgICAgICAgLy8gdGhlIEdldExvY2FsIHRvIHRoZSBTZXRBcmd1
bWVudC4KLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+bG9jYWwoKSA9PSBzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChH
ZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZSkpOwotICAgICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFT
U0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQp
OwotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUt
Pm9wKCkgPT0gU2V0QXJndW1lbnQgfHwgbm9kZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9j
YWwsIE9wSW5mbyhub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGUpKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShv
cGVyYW5kLCBpc0NhcHR1cmVkKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlz
Q2FwdHVyZWQpOwotCi0gICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8o
dmFyaWFibGVBY2Nlc3NEYXRhKSk7Ci0gICAgICAgIG1fYXJndW1lbnRQaGlTdGFjay5hcHBlbmQo
UGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBhcmd1bWVudCkpOwotICAgICAgICBu
b2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7CisgICAgICAgIG5vZGUgPSBpbmplY3RM
YXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJs
ZSkpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChh
cmd1bWVudCkgPSBub2RlOwotICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgbm9kZSk7Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgdm9pZCBzZXRBcmd1bWVudChpbnQg
b3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7
CkBAIC00OTMsNjEgKzQyNSwyMiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgZmx1c2hEaXJl
Y3QoaW50IG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9zaXRpb24pCiAgICAg
ewotICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgY2hlY2sgaWYgdGhlIHNhbWUgb3BlcmFu
ZCBoYWQgYWxyZWFkeSBiZWVuIGZsdXNoZWQgdG8KLSAgICAgICAgLy8gc29tZSBvdGhlciBsb2Nh
bCB2YXJpYWJsZS4KLSAgICAgICAgCiAgICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJs
b2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQsIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZy
YW1lKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChvcGVyYW5kIDwgRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXgpOwogICAgICAgICAKLSAgICAgICAgTm9kZSogbm9kZTsKLSAgICAgICAgaW50
IGluZGV4OwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKLSAgICAg
ICAgICAgIGluZGV4ID0gb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCk7Ci0gICAgICAgICAgICBu
b2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbmRleCA9IG9wZXJhbmQ7Ci0gICAgICAgICAg
ICBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpbmRleCk7Ci0g
ICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOwotICAgICAgICB9CisgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
OwogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAgICBub2Rl
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2ggJiYgbm9kZS0+b3AoKSAhPSBHZXRM
b2NhbCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEVtaXQgYSBGbHVzaCByZWdhcmRs
ZXNzIG9mIHdoZXRoZXIgd2UgYWxyZWFkeSBmbHVzaGVkIGl0LgotICAgICAgICAgICAgLy8gVGhp
cyBnaXZlcyB1cyBndWlkYW5jZSB0byBzZWUgdGhhdCB0aGUgdmFyaWFibGUgYWxzbyBuZWVkcyB0
byBiZSBmbHVzaGVkCi0gICAgICAgICAgICAvLyBmb3IgYXJndW1lbnRzLCBldmVuIGlmIGl0IGFs
cmVhZHkgaGFkIHRvIGJlIGZsdXNoZWQgZm9yIG90aGVyIHJlYXNvbnMuCi0gICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwotICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQ2FwdHVy
ZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFy
aWFibGVBY2Nlc3NEYXRhKSwgbm9kZSk7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlv
bikKLSAgICAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJpYWJsZSh2YXJpYWJs
ZUFjY2Vzc0RhdGEpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgICAg
ICB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgdmFy
aWFibGUtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1
cmVkKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwotICAg
ICAgICBOb2RlKiBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0
YSkpOwogICAgICAgICBub2RlID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSksIHBoaSk7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkg
ewotICAgICAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1f
Y3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KSA9IG5vZGU7Ci0gICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGluZGV4LCBu
b2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBl
bmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOwotICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpbmRleCkgPSBub2RlOwot
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0
VGltZShpbmRleCwgbm9kZSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgaWYgKGFyZ3Vt
ZW50UG9zaXRpb24pCiAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJpYWJsZSh2
YXJpYWJsZUFjY2Vzc0RhdGEpOwogICAgIH0KQEAgLTIwMjQsNyArMTkxNyw2IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRD
YWNoZSkpOwogICAgICAgICAgICAgTm9kZSogc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFy
Z3VtZW50LCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVu
dHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVu
dCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3Vt
ZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0zMjEzLDE1MSArMzEwNSw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICB9CiB9CiAKLXRlbXBsYXRlPEJ5dGVDb2RlUGFyc2VyOjpQaGlTdGFja1R5cGUg
c3RhY2tUeXBlPgotdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKLXsKLSAg
ICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTY+JiBwaGlTdGFjayA9IChzdGFja1R5cGUgPT0gQXJn
dW1lbnRQaGlTdGFjaykgPyBtX2FyZ3VtZW50UGhpU3RhY2sgOiBtX2xvY2FsUGhpU3RhY2s7Ci0g
ICAgCi0gICAgd2hpbGUgKCFwaGlTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgUGhpU3RhY2tF
bnRyeSBlbnRyeSA9IHBoaVN0YWNrLmxhc3QoKTsKLSAgICAgICAgcGhpU3RhY2sucmVtb3ZlTGFz
dCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFlbnRyeS5tX2Jsb2NrLT5pc1JlYWNoYWJsZSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgUHJlZGVjZXNzb3JMaXN0
JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS5tX2Jsb2NrLT5tX3ByZWRlY2Vzc29yczsKLSAgICAgICAg
dW5zaWduZWQgdmFyTm8gPSBlbnRyeS5tX3Zhck5vOwotICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIGRhdGFGb3JQaGkgPSBlbnRyeS5tX3BoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0KLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dG
KCIgICBIYW5kbGluZyBwaGkgZW50cnkgZm9yIHZhciAldSwgcGhpIEAldS5cbiIsIGVudHJ5Lm1f
dmFyTm8sIGVudHJ5Lm1fcGhpKTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKLSNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICBE
ZWFsaW5nIHdpdGggcHJlZGVjZXNzb3IgYmxvY2sgJXUuXG4iLCBwcmVkZWNlc3NvcnNbaV0pOwot
I2VuZGlmCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7Ci0KLSAgICAg
ICAgICAgIE5vZGUqJiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8gcHJl
ZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KHZhck5vKSA6IHByZWRlY2Vz
c29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbCh2YXJObyk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIE5vZGUqIHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhcjsKLSAgICAgICAgICAgIGlm
ICghdmFsdWVJblByZWRlY2Vzc29yKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBEaWQgbm90IGZpbmQg
bm9kZSwgYWRkaW5nIHBoaS5cbiIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICB2YWx1ZUlu
UHJlZGVjZXNzb3IgPSBpbnNlcnRQaGlOb2RlKE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
c3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2sgPyBhcmd1bWVudFRvT3BlcmFuZCh2YXJObykg
OiBzdGF0aWNfY2FzdDxpbnQ+KHZhck5vKSwgZmFsc2UpKSwgcHJlZGVjZXNzb3JCbG9jayk7Ci0g
ICAgICAgICAgICAgICAgdmFyID0gdmFsdWVJblByZWRlY2Vzc29yOwotICAgICAgICAgICAgICAg
IGlmIChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykKLSAgICAgICAgICAgICAgICAgICAg
cHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKHZh
ck5vLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmly
c3RUaW1lKHZhck5vLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotICAgICAgICAgICAgICAgIHBoaVN0
YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KHByZWRlY2Vzc29yQmxvY2ssIHZhbHVlSW5QcmVkZWNl
c3NvciwgdmFyTm8pKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVJblByZWRlY2Vzc29y
LT5vcCgpID09IEdldExvY2FsKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3VuZCBHZXRMb2NhbCBA
JXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNzb3ItPmluZGV4KCkpOwotI2VuZGlmCi0KLSAgICAgICAg
ICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGFz
IGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBHZXRMb2NhbCBh
bmQgaXRzIGJsb2NrLWxvY2FsIFBoaS4gU3RyaWN0bHkgc3BlYWtpbmcgd2Ugb25seSBuZWVkIHRo
ZSB0d28KLSAgICAgICAgICAgICAgICAvLyB0byBiZSB1bmlmaWVkLiBCdXQgZm9yIGVmZmljaWVu
Y3ksIHdlIHdhbnQgdGhlIGNvZGUgdGhhdCBjcmVhdGVzIEdldExvY2FscwotICAgICAgICAgICAg
ICAgIC8vIGFuZCBQaGlzIHRvIHRyeSB0byByZXVzZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFzIG11
Y2ggYXMgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlSW5QcmVkZWNlc3Nv
ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFsdWVJblByZWRlY2Vzc29yLT5jaGlsZDEoKS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhbHVlSW5QcmVkZWNlc3Nvci0+Y2hpbGQxKCkubm9kZSgp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIEZvdW5kIEAldS5cbiIs
IHZhbHVlSW5QcmVkZWNlc3Nvci0+aW5kZXgoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3ItPm9w
KCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICB8fCB2YWx1ZUluUHJlZGVjZXNzb3ItPm9w
KCkgPT0gUGhpCi0gICAgICAgICAgICAgICAgfHwgdmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09
IEZsdXNoCi0gICAgICAgICAgICAgICAgfHwgKHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBT
ZXRBcmd1bWVudCAmJiBzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQcmVkZWNlc3NvciA9
IHZhbHVlSW5QcmVkZWNlc3Nvci0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGRhdGFGb3JQcmVkZWNlc3Nvci0+dW5pZnkoZGF0YUZvclBoaSk7Ci0KLSAg
ICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBlbnRyeS5tX3BoaTsKLSNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgUmVm
IGNvdW50IG9mIEAldSA9ICV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgcGhpTm9kZS0+cmVmQ291
bnQoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKSB7Ci0j
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCIgICAgICBSZWZmaW5nIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0j
ZW5kaWYKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZih2YWx1ZUluUHJlZGVjZXNzb3IpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMSgpKSB7Ci0j
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQxID0gQCV1LlxuIiwgcGhpTm9kZS0+
aW5kZXgoKSwgdmFsdWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHBo
aU5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwotI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsKLSAg
ICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQy
KCkpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDIgPSBAJXUuXG4iLCBw
aGlOb2RlLT5pbmRleCgpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotI2VuZGlmCi0gICAgICAgICAg
ICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQyKEVkZ2UodmFsdWVJblByZWRlY2Vzc29y
KSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAg
ICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4
KCkpOwotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxl
KCkpOwotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFwaGlOb2Rl
LT5jaGlsZDMoKSkgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
LSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMyA9IEAl
dS5cbiIsIHBoaU5vZGUtPmluZGV4KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDMoRWRnZSh2YWx1ZUluUHJl
ZGVjZXNzb3IpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9k
ZS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6
ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIE5vZGUqIG5ld1BoaSA9IGluc2VydFBoaU5vZGUoT3BJbmZvKGRhdGFGb3JQaGkp
LCBlbnRyeS5tX2Jsb2NrKTsKLSAgICAgICAgICAgIAotI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBTcGxpdHRpbmcg
QCV1LCBjcmVhdGVkIEAldS5cbiIsIHBoaU5vZGUtPmluZGV4KCksIG5ld1BoaS0+aW5kZXgoKSk7
Ci0jZW5kaWYKLQotICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpCi0gICAgICAg
ICAgICAgICAgbV9ncmFwaC5yZWYobmV3UGhpKTsKLQotICAgICAgICAgICAgbmV3UGhpLT5jaGls
ZHJlbiA9IHBoaU5vZGUtPmNoaWxkcmVuOwotCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAl
dTogIiwgbmV3UGhpLT5pbmRleCgpKTsKLSAgICAgICAgICAgIG5ld1BoaS0+ZHVtcENoaWxkcmVu
KFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYK
LQotICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShuZXdQaGksIHZhbHVl
SW5QcmVkZWNlc3NvciwgMCk7Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBw
aGlOb2RlLT5pbmRleCgpKTsKLSAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6
OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmZpeFZhcmlhYmxlQWNjZXNz
UHJlZGljdGlvbnMoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1f
dmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE0MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw2ICsyMzksOSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgdmFsaWRhdGUobV9ncmFwaCk7CiAgICAgICAgIH0gd2hpbGUg
KGlubmVyQ2hhbmdlZCk7CiAgICAgICAgIAorICAgICAgICBpZiAob3V0ZXJDaGFuZ2VkKQorICAg
ICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBMb2FkU3RvcmU7CisgICAgICAgIAogICAgICAgICBy
ZXR1cm4gb3V0ZXJDaGFuZ2VkOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NQ
U1JldGhyZWFkaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBDUFNSZXRocmVhZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBDUFNS
ZXRocmVhZGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIkNQ
UyByZXRocmVhZGluZyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAg
eworICAgICAgICAvLyBDdXJyZW50bHkgd2UgZG9uJ3QgZG8gcmV0aHJlYWRpbmcgaWYgd2UncmUg
YWxyZWFkeSBpbiBUaHJlYWRlZENQUyBmb3JtLiBJbiBmdXR1cmUsCisgICAgICAgIC8vIHdlIG1h
eSB3YW50IHRvIHJlcGxhY2UgdGhpcyBhc3NlcnRpb24gd2l0aCBhbiBlYXJseSByZXR1cm4gaWYg
cGhhc2VzIHdlcmUgbW9yZQorICAgICAgICAvLyBwcmVjaXNlIGFib3V0IHdoZXRoZXIgb3Igbm90
IHRoZXkgYnJva2UgdGhyZWFkaW5nLgorICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0g
TG9hZFN0b3JlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWVVbm5lY2Vzc2FyeU5vZGVzKCk7Cisg
ICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzKCk7CisgICAgICAgIHByb3BhZ2F0ZVBo
aXM8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPExvY2FsT3BlcmFu
ZD4oKTsKKyAgICAgICAgbV9ncmFwaC5jb2xsZWN0R2FyYmFnZSgpOworICAgICAgICAKKyAgICAg
ICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKKyAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgCisgICAgdm9pZCBmcmVlVW5uZWNlc3NhcnlOb2Rl
cygpCisgICAgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNT
RVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHVuc2ln
bmVkIGZyb21JbmRleCA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCB0b0luZGV4ID0gMDsKKyAg
ICAgICAgICAgIHdoaWxlIChmcm9tSW5kZXggPCBibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChmcm9tSW5kZXgrKyk7CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAg
ICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09
IFBoaSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21Mb2Nh
bCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE5v
cDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gMDsgLy8gUmVzZXQgdGhlIHJlcGxhY2VtZW50
IHNpbmNlIHRoZSBuZXh0IHBoYXNlIHdpbGwgdXNlIGl0LgorICAgICAgICAgICAgICAgIGJsb2Nr
LT5hdCh0b0luZGV4KyspID0gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJsb2Nr
LT5yZXNpemUodG9JbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOwor
ICAgICAgICAgICAgYmxvY2stPnBoaXMucmVzaXplKDApOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIHZvaWQgY2xlYXJW
YXJpYWJsZXNBdEhlYWRBbmRUYWlsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgKKyAgICAgICAg
ICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplRm9yPG9wZXJhbmRLaW5kPigpCisgICAg
ICAgICAgICA9PSBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2l6ZUZvcjxvcGVyYW5kS2luZD4o
KSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2Jsb2NrLT52YXJpYWJs
ZXNBdEhlYWQuc2l6ZUZvcjxvcGVyYW5kS2luZD4oKTsgaS0tOykgeworICAgICAgICAgICAgbV9i
bG9jay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9wZXJhbmRLaW5kPihpKSA9IDA7CisgICAgICAg
ICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGkpID0gMDsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBhZGRQaGlTaWxlbnRseShCYXNpY0Js
b2NrKiBibG9jaywgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSkKKyAgICB7CisgICAgICAgIFBoaSogcmVzdWx0ID0gbV9ncmFwaC5hZGRO
b2RlKERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGksIGNvZGVPcmln
aW4sIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICBibG9jay0+cGhpcy5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTm9kZSogYWRkUGhp
KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAgUGhpKiByZXN1bHQgPSBhZGRQ
aGlTaWxlbnRseShibG9jaywgY29kZU9yaWdpbiwgdmFyaWFibGUpOworICAgICAgICBtX3BoaVN0
YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KGJsb2NrLCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTm9kZSogYWRkUGhpKGNvbnN0IENvZGVPcmlnaW4m
IGNvZGVPcmlnaW4sIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRkUGhpKG1fYmxvY2ssIGNvZGVPcmlnaW4sIHZhcmlhYmxlKTsKKyAgICB9Cisg
ICAgCisgICAgTm9kZSogYWRkUGhpKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
YWRkUGhpKG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2NhbChOb2RlKiBub2RlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChOb2RlKiBvdGhlck5vZGUgPSBtX2Jsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChvdGhlck5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChvdGhlck5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAg
ICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IFBoaSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgYSBHZXRMb2NhbCwgc28gdGhpcyBtaWdodCBhcyB3
ZWxsIGJlIHRoZSBvbmUuCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENo
aWxkMShFZGdlKG90aGVyTm9kZSkpOworICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBub2RlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5v
cCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnQgfHwgb3RoZXJOb2RlLT5vcCgpID09IEdldExvY2FsKTsKKyAgICAg
ICAgICAgIEFTU0VSVChvdGhlck5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxl
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRB
cmd1bWVudCkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdl
KG90aGVyTm9kZSkpOworICAgICAgICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFibGUt
PmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0g
R2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9IG90aGVyTm9kZS0+Y2hp
bGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0g
U2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VSVChv
dGhlck5vZGUtPm9wKCkgPT0gUGhpIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBv
dGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIEtlZXAgdGhpcyBHZXRMb2NhbCBidXQgbGluayBpdCB0byB0aGUgcHJpb3Ig
b25lcy4KKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhl
ck5vZGUpKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBub2RlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3Ao
KSA9PSBHZXRMb2NhbCkgeworICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgYWxsIHJlZmVyZW5j
ZXMgdG8gdGhpcyBHZXRMb2NhbCB3aXRoIG90aGVyTm9kZS4KKyAgICAgICAgICAgICAgICBub2Rl
LT5yZXBsYWNlbWVudCA9IG90aGVyTm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9w
KCkgPT0gU2V0TG9jYWwpOworICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBvdGhlck5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoYWRkUGhpKG5vZGUp
KSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRPcGVyYW5kRmlyc3RUaW1l
KHZhcmlhYmxlLT5sb2NhbCgpLCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRU
YWlsLnNldE9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCksIG5vZGUpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNhbm9uaWNhbGl6ZVNldExvY2FsKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBt
X2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2RlKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZT4KKyAgICB2b2lkIGNhbm9u
aWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAKKyAg
ICAgICAgaWYgKE5vZGUqIG90aGVyTm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkgeworICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGUpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBzd2l0Y2ggKG90aGVyTm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBGbHVzaDoK
KyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKKyAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IFBoaSB8fCBub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5v
ZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
bm9kZVR5cGUgPT0gUGhhbnRvbUxvY2FsICYmIG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkg
eworICAgICAgICAgICAgICAgIC8vIFBoYW50b21Mb2NhbChTZXRMb2NhbCkgZG9lc24ndCBtYWtl
IHNlbnNlLiBQaGFudG9tTG9jYWwgbWVhbnM6IGF0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyBw
b2ludCBJIGtub3cgSSB3b3VsZCBoYXZlIGJlZW4gaW50ZXJlc3RlZCBpbiB0aGUgdmFsdWUgb2Yg
dGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiBPU1Iu
IFBoYW50b21Mb2NhbChTZXRMb2NhbCkgbWVhbnM6IGF0IHRoaXMgcG9pbnQgSQorICAgICAgICAg
ICAgICAgIC8vIGtub3cgdGhhdCBJIHdvdWxkIGhhdmUgcmVhZCB0aGUgdmFsdWUgd3JpdHRlbiBi
eSB0aGF0IFNldExvY2FsLiBUaGlzIGlzCisgICAgICAgICAgICAgICAgLy8gcmVkdW5kYW50IGFu
ZCBpbmVmZmljaWVudCwgc2luY2UgcmVhbGx5IGl0IGp1c3QgbWVhbnMgdGhhdCB3ZSB3YW50IHRv
CisgICAgICAgICAgICAgICAgLy8gYmUga2VlcGluZyB0aGUgb3BlcmFuZCB0byB0aGUgU2V0TG9j
YWwgYWxpdmUuIFRoZSBTZXRMb2NhbCBtYXkgZGllLCBhbmQKKyAgICAgICAgICAgICAgICAvLyB3
ZSdsbCBiZSBmaW5lIGJlY2F1c2UgT1NSIHRyYWNrcyBkZWFkIFNldExvY2Fscy4KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBTbyB3ZSB0dXJuIHRoaXMgaW50byBhIFBoYW50
b20gb24gdGhlIGNoaWxkIG9mIHRoZSBTZXRMb2NhbC4KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEob3RoZXJOb2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBUaGVyZSBpcyBub3RoaW5nIHdyb25nIHdpdGggaGF2aW5nIHJlZHVuZGFudCBG
bHVzaCdzLiBJdCBqdXN0IG5lZWRzIHRvCisgICAgICAgICAgICAvLyBiZSBsaW5rZWQgYXBwcm9w
cmlhdGVseS4KKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVy
Tm9kZSkpOworICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCksIG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShhZGRQaGko
bm9kZSkpKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNldE9wZXJhbmRGaXJz
dFRpbWUodmFyaWFibGUtPmxvY2FsKCksIG5vZGUpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgbm9kZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9jaygpCisgICAgeworICAgICAgICBp
ZiAoIW1fYmxvY2spCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChtX2Jsb2Nr
LT5pc1JlYWNoYWJsZSk7CisgICAgICAgIAorICAgICAgICBjbGVhclZhcmlhYmxlc0F0SGVhZEFu
ZFRhaWw8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBjbGVhclZhcmlhYmxlc0F0SGVhZEFu
ZFRhaWw8TG9jYWxPcGVyYW5kPigpOworICAgICAgICAKKyAgICAgICAgLy8gQXNzdW1lcyB0aGF0
IGFsbCBwaGkgcmVmZXJlbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZC4gQXNzdW1lcyB0aGF0IHRoaW5n
cyB0aGF0CisgICAgICAgIC8vIHNob3VsZCBiZSBsaXZlIGhhdmUgYSBub24temVybyByZWYgY291
bnQsIGJ1dCBkb2Vzbid0IGFzc3VtZSB0aGF0IHRoZSByZWYKKyAgICAgICAgLy8gY291bnRzIGFy
ZSBjb3JyZWN0IGJleW9uZCB0aGF0IChtb3JlIGZvcm1hbGx5ICEhbG9naWNhbFJlZkNvdW50ID09
ICEhYWN0dWFsUmVmQ291bnQKKyAgICAgICAgLy8gYnV0IG5vdCBsb2dpY2FsUmVmQ291bnQgPT0g
YWN0dWFsUmVmQ291bnQpLiBBc3N1bWVzIHRoYXQgaXQgY2FuIGJyZWFrIHJlZgorICAgICAgICAv
LyBjb3VudHMuCisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIFRoZSBydWxlcyBmb3IgdGhyZWFkZWQgQ1BTIGZvcm06CisgICAgICAg
ICAgICAvLyAKKyAgICAgICAgICAgIC8vIEhlYWQgdmFyaWFibGU6IHRoZSBmaXJzdCB0aGluZyB0
aGF0IGhhcHBlbmVkIHRvIHRoZSB2YXJpYWJsZSBpbiB0aGUgYmxvY2suCisgICAgICAgICAgICAv
LyBJdCBtYXkgYmUgYSBGbHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwgU2V0TG9jYWwsIG9y
IFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQgbWF5IG9ubHkgYXBwZWFy
IGluIHRoZSByb290IGJsb2NrLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRhaWwg
dmFyaWFibGU6IHRoZSBsYXN0IHRoaW5nIHRoYXQgaGFwcGVuZWQgdG8gdGhlIHZhcmlhYmxlIGlu
IHRoZSBibG9jay4KKyAgICAgICAgICAgIC8vIEl0IG1heSBiZSBhIEZsdXNoLCBQaGFudG9tTG9j
YWwsIEdldExvY2FsLCBTZXRMb2NhbCwgb3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLyBT
ZXRBcmd1bWVudCBtYXkgb25seSBhcHBlYXIgaW4gdGhlIHJvb3QgYmxvY2suCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gQ2hpbGQgb2YgR2V0TG9jYWw6IHRoZSBvcGVyYXRpb24gdGhh
dCB0aGUgR2V0TG9jYWwga2VlcHMgYWxpdmUuIEZvcgorICAgICAgICAgICAgLy8gdW5jYXB0dXJl
ZCBsb2NhbHMsIGl0IG1heSBiZSBhIFBoaSBmcm9tIHRoZSBjdXJyZW50IGJsb2NrLiBGb3IgYXJn
dW1lbnRzLAorICAgICAgICAgICAgLy8gaXQgbWF5IGJlIGEgU2V0QXJndW1lbnQuIEZvciBjYXB0
dXJlZCBsb2NhbHMgYW5kIGFyZ3VtZW50cyBpdCBtYXkgYWxzbyBiZQorICAgICAgICAgICAgLy8g
YSBTZXRMb2NhbC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBDaGlsZCBvZiBTZXRM
b2NhbDogbXVzdCBiZSBhIHZhbHVlIHByb2R1Y2luZyBub2RlLgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIENoaWxkIG9mIEZsdXNoOiBpdCBtYXkgYmUgYSBQaGkgZnJvbSB0aGUgY3Vy
cmVudCBibG9jayBvciBhIFNldExvY2FsLiBGb3IKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBp
dCBtYXkgYWxzbyBiZSBhIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIENoaWxkIG9mIFBoYW50b21Mb2NhbDogaXQgbWF5IGJlIGEgUGhpIGZyb20gdGhlIGN1cnJl
bnQgYmxvY2suIEZvcgorICAgICAgICAgICAgLy8gYXJndW1lbnRzIGl0IG1heSBhbHNvIGJlIGEg
U2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2hpbGRyZW4gb2Yg
UGhpOiBvdGhlciBQaGlzIGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrLCBvciBhbnkgb2YgdGhlCisg
ICAgICAgICAgICAvLyBmb2xsb3dpbmcgZnJvbSBmcm9tIHByZWRlY2Vzc29yIGJsb2NrczogU2V0
TG9jYWwsIFBoaSwgb3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLyBUaGVzZSBhcmUgY29t
cHV0ZWQgYnkgbG9va2luZyBhdCB0aGUgdGFpbCB2YXJpYWJsZXMgb2YgdGhlIHByZWRlY2Vzc29y
CisgICAgICAgICAgICAvLyBibG9ja3MgYW5kIGVpdGhlciB1c2luZyBpdCBkaXJlY3RseSAoaWYg
aXQncyBhIFNldExvY2FsLCBQaGksIG9yCisgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCkgb3Ig
bG9hZGluZyB0aGF0IG5vZGVzIGNoaWxkIChpZiBpdCdzIGEgR2V0TG9jYWwsIFBoYW5vbUxvY2Fs
LAorICAgICAgICAgICAgLy8gb3IgRmx1c2ggLSBhbGwgb2YgdGhlc2Ugd2lsbCBoYXZlIGNoaWxk
cmVuIHRoYXQgYXJlIFNldExvY2FsLCBQaGksIG9yCisgICAgICAgICAgICAvLyBTZXRBcmd1bWVu
dCkuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRM
b2NhbChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXplU2V0
TG9jYWwobm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNo
T3JQaGFudG9tTG9jYWw8Rmx1c2g+KG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAg
ICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbDxQaGFudG9tPihub2RlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrcygpCisgICAgewor
ICAgICAgICBmb3IgKG1fYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBtX2Js
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW21f
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2Nr
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKKyAg
ICB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIGZhaWwgaW5z
dGFudGx5LgorICAgICAgICBtX2Jsb2NrID0gMDsKKyAgICAgICAgbV9ibG9ja0luZGV4ID0gTm9C
bG9jazsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICghbV9waGlTdGFjay5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIFBoaVN0YWNrRW50cnkgZW50cnkgPSBtX3BoaVN0YWNrLmxhc3QoKTsKKyAg
ICAgICAgICAgIG1fcGhpU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGVudHJ5Lm1fYmxvY2s7CisgICAgICAgICAgICBQcmVk
ZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5tX3ByZWRlY2Vzc29yczsKKyAgICAg
ICAgICAgIE5vZGUqIGN1cnJlbnRQaGkgPSBlbnRyeS5waGk7CisgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY3VycmVudFBoaS0+bG9jYWwoKTsKKyAgICAgICAgICAg
IGludCBvcGVyYW5kID0gdmFyaWFibGUtPmxvY2FsKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBwcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogcHJlZWNlc3NvckJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tw
cmVkZWNlc3NvcnNbaV1dLmdldCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IE5vZGUqJiB2YXJpYWJsZUluUHJldmlvdXMgPSBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlSW5Q
cmV2aW91cykgeworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluUHJldmlvdXMgPSBhZGRQ
aGkocHJlZGVjZXNzb3JCbG9jaywgY3VycmVudFBoaS0+Y29kZU9yaWdpbiwgdmFyaWFibGUpOwor
ICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0
T3BlcmFuZEZpcnN0VGltZShvcGVyYW5kLCB2YXJpYWJsZUluUHJldmlvdXMpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGVJblBy
ZXZpb3VzLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICBj
YXNlIEZsdXNoOgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlSW5QcmVk
ZWNlc3Nvci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGVJblByZWRlY2Vzc29yLT5j
aGlsZDEoKS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGVJblByZXZpb3VzID0gdmFyaWFibGVJblByZXZpb3VzLT5jaGlsZDEoKS5ub2RlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IEFTU0VSVCgKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJblByZXZpb3VzLT5vcCgpID09
IFNldExvY2FsCisgICAgICAgICAgICAgICAgICAgIHx8IHZhcmlhYmxlSW5QcmV2aW91cy0+b3Ao
KSA9PSBQaGkKKyAgICAgICAgICAgICAgICAgICAgfHwgdmFyaWFibGVJblByZXZpb3VzLT5vcCgp
ID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGRpZFNl
dENoaWxkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IDA7IGNoaWxkSWR4IDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytjaGlsZElkeCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudFBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJZHgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRQaGktPmNoaWxkcmVuLnNldENoaWxkKGNoaWxkSWR4LCBFZGdlKHZhcmlhYmxlSW5QcmVk
ZWNlc3NvcikpOworICAgICAgICAgICAgICAgICAgICBkaWRTZXRDaGlsZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoZGlkU2V0Q2hpbGQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIG5ld1BoaSA9IGFkZFBoaVNpbGVudGx5
KGJsb2NrLCBjdXJyZW50UGhpLT5jb2RlT3JpZ2luLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAg
ICAgbmV3UGhpLT5jaGlsZHJlbiA9IGN1cnJlbnRQaGktPmNoaWxkcmVuOworICAgICAgICAgICAg
ICAgIGN1cnJlbnRQaGktPmNoaWxkcmVuLmluaXRpYWxpemUobmV3UGhpLCB2YXJpYWJsZUluUHJl
ZGVjZXNzb3IsIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIFZlY3RvcjxQaGlTdGFja0Vu
dHJ5LCA2ND4mIHBoaVN0YWNrRm9yKCkKKyAgICB7CisgICAgICAgIGlmIChvcGVybmFuZEtpbmQg
PT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRQaGlTdGFj
azsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICB9CisgICAgCisgICAgc3Ry
dWN0IFBoaVN0YWNrRW50cnkgeworICAgICAgICBQaGlTdGFja0VudHJ5KEJhc2ljQmxvY2sqIGJs
b2NrLCBOb2RlKiBwaGkpCisgICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgICAg
ICAsIG1fcGhpKHBoaSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgICAgICBOb2RlKiBtX3BoaTsKKyAgICB9OworICAgIAor
ICAgIEJsb2NrSW5kZXggbV9ibG9ja0luZGV4OworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cisg
ICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDY0PiBtX3BoaVN0YWNrOworfTsKKwordm9pZCBwZXJm
b3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgQ1BTIFJldGhyZWFkaW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1
blBoYXNlPENQU1JldGhyZWFkaW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDUFNSZXRocmVhZGluZ1BoYXNl
X2gKKyNkZWZpbmUgREZHQ1BTUmV0aHJlYWRpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDUFMgUmV0aHJlYWRpbmc6CisvLworLy8g
VGFrZXMgYSBncmFwaCBpbiB3aGljaCB0aGVyZSBhcmUgYXJiaXRyYXJ5IEdldExvY2Fscy9TZXRM
b2NhbHMgd2l0aCBubyBjb25uZWN0aW9ucworLy8gYmV0d2VlbiB0aGVtLiBSZW1vdmVzIHJlZHVu
ZGFudCBvbmVzIGluIHRoZSBjYXNlIG9mIHVuY2FwdHVyZWQgdmFyaWFibGVzLiBDb25uZWN0cwor
Ly8gYWxsIG9mIHRoZW0gd2l0aCBQaGkgZnVuY3Rpb25zIHRvIHJlcHJlc2VudCBsaXZlIHJhbmdl
cy4KKworYm9vbCBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw5IEBA
IHB1YmxpYzoKICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9jayA9IDA7IGJsb2NrIDwgbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2spCiAgICAgICAgICAgICBwZXJmb3JtQmxvY2tDU0Uo
bV9ncmFwaC5tX2Jsb2Nrc1tibG9ja10uZ2V0KCkpOwogICAgICAgICAKKyAgICAgICAgaWYgKG1f
Y2hhbmdlZCkKKyAgICAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gTG9hZFN0b3JlOworICAgICAg
ICAKICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CiAgICAgCkBAIC05NzQsMjcgKzk3
Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAg
IHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihFZGdlJiBjaGlsZCwgYm9vbCBhZGRSZWYgPSB0cnVl
KQotICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVu
dXNlZC4KLSAgICAgICAgaWYgKCFjaGlsZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBsYWNlbWVudC4KLSAgICAgICAg
Tm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFjZW1lbnQ7Ci0gICAgICAgIGlmICghcmVw
bGFjZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBjaGlsZC5z
ZXROb2RlKHJlcGxhY2VtZW50KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZXJlIGlzIGRlZmlu
aXRlbHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQgdGhlIHJlcGxhY2VtZW50IGRvZXMgbm90
Ci0gICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4KLSAgICAgICAgQVNTRVJUKCFjaGlsZC0+
cmVwbGFjZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGFkZFJlZikKLSAgICAgICAgICAg
IG1fZ3JhcGgucmVmKGNoaWxkKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBlbGltaW5hdGVJcnJl
bGV2YW50UGhhbnRvbUNoaWxkcmVuKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBBU1NFUlQo
bm9kZS0+b3AoKSA9PSBQaGFudG9tKTsKQEAgLTEwNzIsMjEgKzEwNTQsMTIgQEAgcHJpdmF0ZToK
ICAgICAKICAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICBib29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKLQotICAgICAg
ICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUt
PmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAg
ICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBw
ZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0
ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxk
MigpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOwogICAgICAgICAKICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCiAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAgIAotICAgICAgICBpZiAoIXNo
b3VsZEdlbmVyYXRlKQorICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzg0LDYgKzM4NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNo
aWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxk
cmVuKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBMb2FkU3Rv
cmU7CiAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBtX3N0
YXRlLnJlc2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAgR3JhcGg6OkdyYXBoKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgICwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50
cnlCeXRlY29kZUluZGV4KQogICAgICwgbV9tdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1
ZXMpCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCisgICAgLCBtX2Zvcm0o
TG9hZFN0b3JlKQorICAgICwgbV91bmlmaWNhdGlvblN0YXRlKExvY2FsbHlVbmlmaWVkKQogewog
ICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2spOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw1NCBAQCBlbnVtIEFk
ZFNwZWN1bGF0aW9uTW9kZSB7CiAgICAgU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3Zl
cmZsb3csCiAgICAgU3BlY3VsYXRlSW50ZWdlcgogfTsKKworLy8gRGVzY3JpYmVzIHRoZSBmb3Jt
IHlvdSBjYW4gZXhwZWN0IHRoZSBlbnRpcmUgZ3JhcGggdG8gYmUgaW4uCitlbnVtIEdyYXBoRm9y
bSB7CisgICAgLy8gTG9hZFN0b3JlIGZvcm0gbWVhbnMgdGhhdCBiYXNpYyBibG9ja3MgbWF5IGZy
ZWVseSB1c2UgR2V0TG9jYWwsIFNldExvY2FsLAorICAgIC8vIEdldExvY2FsVW5saW5rZWQsIGFu
ZCBGbHVzaCBmb3IgYWNjZXNzaW5nIGxvY2FsIHZhcmlhYmxlcyBhbmQgaW5kaWNhdGluZworICAg
IC8vIHdoZXJlIHRoZWlyIGxpdmUgcmFuZ2VzIG91Z2h0IHRvIGJlLiBMaXZlbmVzcyBpcyBpbXBs
aWNpdCwgYXMgaXMgdGhlIGRhdGEKKyAgICAvLyBmbG93IGJldHdlZW4gbG9jYWwgYWNjZXNzZXMu
IEZvciBleGFtcGxlLCBMb2FkU3RvcmUgZm9ybSBnaXZlcyBubyBlYXN5IHdheQorICAgIC8vIHRv
IGRldGVybWluZSB3aGljaCBTZXRMb2NhbCdzIGZsb3cgaW50IG8gYSBHZXRMb2NhbC4gQXMgd2Vs
bCwgTG9hZFN0b3JlCisgICAgLy8gZm9ybSBpbXBsaWVzIG5vIHJlc3RyaWN0aW9ucyBvbiByZWR1
bmRhbmN5OiB5b3UgY2FuIGZyZWVseSBlbWl0IG11bHRpcGxlCisgICAgLy8gR2V0TG9jYWxzLCBv
ciBtdWx0aXBsZSBTZXRMb2NhbHMgKG9yIGFueSBjb21iaW5hdGlvbiB0aGVyZW9mKSB0byB0aGUg
c2FtZQorICAgIC8vIGxvY2FsIGluIHRoZSBzYW1lIGJsb2NrLiBMb2FkU3RvcmUgZm9ybSBkb2Vz
IG5vdCByZXF1aXJlIGJhc2ljIGJsb2NrcyB0bworICAgIC8vIGRlY2xhcmUgaG93IHRoZXkgYWZm
ZWN0IG9yIHVzZSBsb2NhbHMsIG90aGVyIHRoYW4gaW1wbGljaXRseSBieSB1c2luZworICAgIC8v
IHRoZSBsb2NhbCBvcHMuIEZpbmFsbHksIExvYWRTdG9yZSBhbGxvd3MgZmxleGliaWxpdHkgaW4g
aG93IGxpdmVuZXNzIG9mCisgICAgLy8gbG9jYWxzIGlzIGV4dGVuZGVkOyBmb3IgZXhhbXBsZSB5
b3UgY2FuIHJlcGxhY2UgYSBHZXRMb2NhbCB3aXRoIGEgUGhhbnRvbQorICAgIC8vIGFuZCBzbyBs
b25nIGFzIHRoZSBQaGFudG9tIHJldGFpbnMgdGhlIEdldExvY2FsJ3MgY2hpbGRyZW4gKGkuZS4g
dGhlIFBoaQorICAgIC8vIG1vc3QgbGlrZWx5KSB0aGVuIGl0IGltcGxpZXMgdGhhdCB0aGUgbG9j
YWwgaXMgc3RpbGwgbGl2ZSBidXQgdGhhdCBpdCBuZWVkCisgICAgLy8gbm90IGJlIHN0b3JlZCB0
byB0aGUgc3RhY2sgbmVjZXNzYXJpbHkuCisgICAgLy8KKyAgICAvLyBMb2FkU3RvcmUgZm9ybSBp
cyBzdWl0YWJsZSBmb3IgQ0ZHIHRyYW5zZm9ybWF0aW9ucywgYXMgd2VsbCBhcyBzdHJlbmd0aAor
ICAgIC8vIHJlZHVjdGlvbiwgZm9sZGluZywgYW5kIENTRS4KKyAgICBMb2FkU3RvcmUsCisgICAg
CisgICAgLy8gVGhyZWFkZWRDUFMgZm9ybSBtZWFucyB0aGF0IGJhc2ljIGJsb2NrcyBsaXN0IHVw
LWZyb250IHdoaWNoIGxvY2FscyB0aGV5CisgICAgLy8gZXhwZWN0IHRvIGJlIGxpdmUgYXQgdGhl
IGhlYWQsIGFuZCB3aGljaCBsb2NhbHMgdGhleSBtYWtlIGF2YWlsYWJsZSBhdCB0aGUKKyAgICAv
LyB0YWlsLiBUaHJlYWRlZENQUyBmb3JtIGFsc28gaW1wbGllcyB0aGF0OgorICAgIC8vCisgICAg
Ly8gLSBHZXRMb2NhbHMgYW5kIFNldExvY2FscyB0byB1bmNhcHR1cmVkIHZhcmlhYmxlcyBhcmUg
bm90IHJlZHVuZGFudCB3aXRoaW4KKyAgICAvLyAgIGEgYmFzaWMgYmxvY2suCisgICAgLy8KKyAg
ICAvLyAtIEFsbCBHZXRMb2NhbHMgYW5kIEZsdXNoZXMgYXJlIGxpbmtlZCBkaXJlY3RseSB0byB0
aGUgbGFzdCBhY2Nlc3MgcG9pbnQKKyAgICAvLyAgIG9mIHRoZSB2YXJpYWJsZSwgd2hpY2ggbXVz
dCBub3QgYmUgYW5vdGhlciBHZXRMb2NhbCBpZiB0aGUgdmFyaWFibGUgaXMKKyAgICAvLyAgIHVu
Y2FwdHVyZWQuCisgICAgLy8KKyAgICAvLyAtIFBoYW50b20oUGhpKSBpcyBub3QgbGVnYWwsIGJ1
dCBQaGFudG9tTG9jYWwgaXMuCisgICAgLy8KKyAgICAvLyBUaHJlYWRlZENQUyBmb3JtIGlzIHN1
aXRhYmxlIGZvciBkYXRhIGZsb3cgYW5hbHlzaXMgKENGQSwgcHJlZGljdGlvbgorICAgIC8vIHBy
b3BhZ2F0aW9uKSwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgYW5kIGNvZGUgZ2VuZXJhdGlvbi4KKyAg
ICBUaHJlYWRlZENQUworfTsKKworLy8gRGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiB0aGUgVW5pb25G
aW5kIHN0cnVjdHVyZSBvZiBWYXJpYWJsZUFjY2Vzc0RhdGEncy4KK2VudW0gVW5pZmljYXRpb25T
dGF0ZSB7CisgICAgLy8gQmFzaWNCbG9jay1sb2NhbCBhY2Nlc3NlcyB0byB2YXJpYWJsZXMgYXJl
IGFwcHJvcHJpYXRlbHkgdW5pZmllZCB3aXRoIGVhY2ggb3RoZXIuCisgICAgTG9jYWxseVVuaWZp
ZWQsCiAgICAgCisgICAgLy8gVW5pZmljYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkIGdsb2JhbGx5
LgorICAgIEdsb2JhbGx5VW5pZmllZAorfTsKIAogLy8KIC8vID09PSBHcmFwaCA9PT0KQEAgLTE2
Nyw2ICsyMTQsNDAgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2Rl
KiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAxKTsgfQogICAgIHZvaWQgY2xlYXJB
bmREZXJlZkNoaWxkMyhOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAyKTsg
fQogICAgIAorICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihOb2RlKiBub2RlKQorICAgIHsK
KyAgICAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Cisg
ICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwg
bm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAg
ICAgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShtX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHNo
b3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJm
b3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2Vu
ZXJhdGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1
dGlvbkZvckVkZ2UoRWRnZSYgY2hpbGQpCisgICAgeworICAgICAgICAvLyBDaGVjayBpZiB0aGlz
IG9wZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgorICAgICAgICBpZiAoIWNoaWxkKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55
IHJlcGxhY2VtZW50LgorICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IGNoaWxkLT5yZXBsYWNl
bWVudDsKKyAgICAgICAgaWYgKCFyZXBsYWNlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIGNoaWxkLnNldE5vZGUocmVwbGFjZW1lbnQpOworICAgICAgICAKKyAg
ICAgICAgLy8gVGhlcmUgaXMgZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0
aGUgcmVwbGFjZW1lbnQgZG9lcyBub3QKKyAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50Lgor
ICAgICAgICBBU1NFUlQoIWNoaWxkLT5yZXBsYWNlbWVudCk7CisgICAgICAgIAorICAgICAgICBp
ZiAoYWRkUmVmKQorICAgICAgICAgICAgbV9ncmFwaC5yZWYoY2hpbGQpOworICAgIH0KKyAgICAK
ICNkZWZpbmUgREZHX0RFRklORV9BRERfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0
eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCiAg
ICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZD
aGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBc
CkBAIC03MTgsNiArNzk5LDggQEAgcHVibGljOgogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG1fbXVz
dEhhbmRsZVZhbHVlczsKICAgICAKICAgICBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1fZml4
cG9pbnRTdGF0ZTsKKyAgICBHcmFwaEZvcm0gbV9mb3JtOworICAgIFVuaWZpY2F0aW9uU3RhdGUg
bV91bmlmaWNhdGlvblN0YXRlOwogcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nl
c3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0lu
ZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCwxNCBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCisgICAgeworICAgICAgICBBU1NF
UlQobV9vcCA9PSBQaGFudG9tICYmIGNoaWxkMSgpLT5vcCgpID09IFBoaSk7CisgICAgICAgIG1f
b3AgPSBQaGFudG9tTG9jYWw7CisgICAgICAgIG1fb3BJbmZvID0gY2hpbGQxKCktPm1fb3BJbmZv
OyAvLyBDb3B5IHRoZSB2YXJpYWJsZUFjY2Vzc0RhdGEuCisgICAgICAgIGNoaWxkcmVuLnNldENo
aWxkMShFZGdlKCkpOworICAgIH0KKyAgICAKICAgICBKU0NlbGwqIHdlYWtDb25zdGFudCgpCiAg
ICAgewogICAgICAgICBBU1NFUlQob3AoKSA9PSBXZWFrSlNDb25zdGFudCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNDEzMDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDYgKzYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KE5vcCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhpLCBOb2RlRG9lc05vdEV4aXQg
fCBOb2RlUmVsZXZhbnRUb09TUikgXAogICAgIG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oUGhhbnRvbUxvY2FsLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgXAogICAgIC8qIEdldCB0aGUgdmFsdWUg
b2YgYSBsb2NhbCB2YXJpYWJsZSwgd2l0aG91dCBsaW5raW5nIGludG8gdGhlIFZhcmlhYmxlQWNj
ZXNzRGF0YSAqL1wKICAgICAvKiBuZXR3b3JrLiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIHZhcmlh
YmxlIGFjY2Vzc2VzIHdob3NlIHByZWRpY3Rpb25zIG9yaWdpbmF0ZWQgKi9cCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDYgKzQzLDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgbV9jb3Vu
dCA9IDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0
dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0
MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lz
dGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOCBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3Jt
ID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
Z3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0Rh
dGFbaV07CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLT5pc1Jvb3QoKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR1VuaWZpY2F0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1
ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitj
bGFzcyBVbmlmaWNhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBVbmlm
aWNhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInVuaWZp
Y2F0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAg
ICAgIC8vIEVuc3VyZSB0aGF0IGFsbCBQaGkgZnVuY3Rpb25zIGFyZSB1bmlmaWVkLgorICAgICAg
ICAKKyAgICB9Cit9OworCit2b2lkIHBlcmZvcm1VbmlmaWNhdGlvbihHcmFwaCYgZ3JhcGgpCit7
CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBVbmlmaWNhdGlvbiBQaGFz
ZSIpOworICAgIHJldHVybiBydW5QaGFzZTxVbmlmaWNhdGlvblBoYXNlPihncmFwaCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhh
c2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmlj
YXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVW5pZmljYXRpb25Q
aGFzZV9oCisjZGVmaW5lIERGR1VuaWZpY2F0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gVW5pZmljYXRpb246CisvLworLy8gRXhh
bWluZXMgYWxsIFBoaSBmdW5jdGlvbnMgYW5kIGVuc3VyZXMgdGhhdCB0aGUgdmFyaWFibGUgYWNj
ZXNzIGRhdGFzIGFyZQorLy8gdW5pZmllZC4gVGhpcyBjcmVhdGVzIG91ciAibGl2ZS1yYW5nZSBz
cGxpdCIgdmlldyBvZiB2YXJpYWJsZXMuCisKK2Jvb2wgcGVyZm9ybVVuaWZpY2F0aW9uKEdyYXBo
Jik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHVW5pZmljYXRpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA5LDEwICsxMDksMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBVbmxl
c3MgSSdtIGEgRmx1c2gsIFBoYW50b20sIEdldExvY2FsLCBvciBQaGksIG15IGNoaWxkcmVuIHNo
b3VsZCBoYXNSZXN1bHQoKS4KICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgUGhhbnRvbToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNW
YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gTG9jYWxseVVuaWZpZWQpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSwgZWRnZSksIGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmICFqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE4OSwxMSArMTk5LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRl
Y2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJl
ZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IEZsdXNoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv
Y2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGFudG9tTG9jYWwpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlID09IGVkZ2Uubm9kZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjMxLDYgKzI0MywxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIG5vZGVzSW5UaGlzQmxvY2su
Y29udGFpbnMoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEZs
dXNoOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9y
bSA9PSBMb2FkU3RvcmUgJiYgIWopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSwgZWRnZSksICFwaGlzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2Rl
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKQEAgLTI1Niw2ICsyODAsOSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgY2hlY2tPcGVyYW5kKAogICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4
LCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9jYWxQb3NpdGlvbnMsIGFyZ3VtZW50VG9PcGVyYW5k
KGkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185975</attachid>
            <date>2013-02-01 01:35:02 -0800</date>
            <delta_ts>2013-02-01 16:02:55 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>84724</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lv
biAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRz
IHsKICAgICBzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IFQmIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0
KSB7IHZhbHVlLmR1bXAob3V0KTsgfQogfTsKIAorZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50
T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxUPiA+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJs
aWM6CkBAIC02Niw2ICs2OCwyOCBAQCBwdWJsaWM6CiAgICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkg
eyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQogICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KICAgICAKKyAgICB0ZW1wbGF0ZTxPcGVy
YW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkxvY2Fs
cygpOworICAgIH0KKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBU
JiBhdEZvcihzaXplX3QgaWR4KQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFy
Z3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOworICAgICAg
ICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICB9CisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+CisgICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnQoaWR4KTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgfQor
ICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAg
aWYgKHNpemUgPD0gbV9sb2NhbHMuc2l6ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzg3LDYgKzE3ODcsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToKICAgICBjYXNlIEZsdXNoOgorICAg
IGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE5MTMsNiArMTkxNCw3IEBAIGlubGluZSBi
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAg
ICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAg
IC8vIFRoZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgogICAg
ICAgICAgICAgc291cmNlID0gaW5WYXJpYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcg
KzIzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgY2FzZSBQ
aGk6IHsKKyAgICAgICAgICAgICAgICBjYXNlIFBoaTogLyogRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg1NTUgKi8gewogICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRh
LT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTYzNSw4
ICs2MzUsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxv
Y2spOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoY2hhbmdlZCkKKyAgICAgICAg
aWYgKGNoYW5nZWQpIHsKICAgICAgICAgICAgIG1fZ3JhcGguY29sbGVjdEdhcmJhZ2UoKTsKKyAg
ICAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gTG9hZFN0b3JlOworICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQxMzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4Nyw2NCArMjg3LDMzIEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwogICAg
ICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBt
X2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIAorICAgICAgICAv
LyBUaGlzIGhhcyB0d28gZ29hbHM6IDEpIGxpbmsgdG9nZXRoZXIgdmFyaWFibGUgYWNjZXNzIGRh
dGFzLCBhbmQgMikKKyAgICAgICAgLy8gdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHJlZHVuZGFudCBH
ZXRMb2NhbHMuICgxKSBpcyByZXF1aXJlZCBmb3IKKyAgICAgICAgLy8gY29ycmVjdG5lc3MgLSBu
byBvdGhlciBwaGFzZSB3aWxsIGVuc3VyZSB0aGF0IGJsb2NrLWxvY2FsIHZhcmlhYmxlCisgICAg
ICAgIC8vIGFjY2VzcyBkYXRhIHVuaWZpY2F0aW9uIGlzIGRvbmUgY29ycmVjdGx5LiAoMikgaXMg
cHVyZWx5IG9wcG9ydHVuaXN0aWMKKyAgICAgICAgLy8gYW5kIGlzIG1lYW50IGFzIGFuIGNvbXBp
bGUtdGltZSBvcHRpbWl6YXRpb24gb25seS4KKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGU7CisgICAgICAgIAogICAgICAgICBpZiAobm9kZSkgewotICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKLSAgICAgICAgICAgICAgICAvLyBUd28g
cG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2
ZQotICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0
IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgotICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ug
d2UncmUgZG9uZS4KLSAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFBoaSkgewotICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0Rh
dGEtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJ
bmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGU7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2gpOwotCi0g
ICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlz
Q2FwdHVyZWQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQp
IHsKLSAgICAgICAgICAgICAgICAvLyBXZSB3aXNoIHRvIHVzZSB0aGUgc2FtZSB2YXJpYWJsZSBh
Y2Nlc3MgZGF0YSBhcyB0aGUgcHJldmlvdXMgYWNjZXNzLAotICAgICAgICAgICAgICAgIC8vIGJ1
dCBmb3IgYWxsIG90aGVyIHB1cnBvc2VzIHdlIHdhbnQgdG8gaXNzdWUgYSBsb2FkIHNpbmNlIGZv
ciBhbGwgd2UKLSAgICAgICAgICAgICAgICAvLyBrbm93LCBhdCB0aGlzIHN0YWdlIG9mIGNvbXBp
bGF0aW9uLCB0aGUgbG9jYWwgaGFzIGJlZW4gY2xvYmJlcmVkLgotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBsaW5rIHRvIHRoZSBQaGkgbm9kZSwgbm90
IHRvIHRoZSBHZXRMb2NhbC4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRM
b2NhbCkKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IFNldExvY2FsKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSogbmV3R2V0TG9jYWwgPSBpbmplY3RMYXp5
T3BlcmFuZFNwZWN1bGF0aW9uKAotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldExv
Y2FsLCBPcEluZm8obm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlKSk7Ci0gICAgICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9
IG5ld0dldExvY2FsOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXdHZXRMb2NhbDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0
TG9jYWwpCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1fcHJlc2VydmVkVmFycy5zZXQob3BlcmFuZCk7CisgICAgICAgICAgICB2
YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZWVzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAg
ICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayBmb3IgcmVhZHMgb2YgdGVtcG9yYXJpZXMgZnJv
bSBwcmlvciBibG9ja3MsCi0gICAgICAgIC8vIGV4cGFuZCBtX3ByZXNlcnZlZFZhcnMgdG8gY292
ZXIgdGhlc2UuCi0gICAgICAgIG1fcHJlc2VydmVkVmFycy5zZXQob3BlcmFuZCk7Ci0gICAgICAg
IAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKICAgICAgICAgCi0gICAgICAg
IE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7
Ci0gICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRC
bG9jaywgcGhpLCBvcGVyYW5kKSk7Ci0gICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNw
ZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEp
LCBwaGkpKTsKKyAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRk
VG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkpOwogICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZTsKLSAgICAgICAgCi0g
ICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUo
b3BlcmFuZCwgbm9kZSk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAg
ICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBz
ZXRNb2RlID0gTm9ybWFsU2V0KQpAQCAtMzczLDYyICszNDIsMjUgQEAgcHJpdmF0ZToKICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
YXJndW1lbnQpOwogICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0
dXJlZChvcGVyYW5kKTsKIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOwor
ICAgICAgICAKICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IEZsdXNoKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHdvIHBvc3NpYmlsaXRpZXM6IGVpdGhl
ciB0aGUgYmxvY2sgd2FudHMgdGhlIGxvY2FsIHRvIGJlIGxpdmUKLSAgICAgICAgICAgICAgICAv
LyBidXQgaGFzIG5vdCBsb2FkZWQgaXRzIHZhbHVlLCBvciBpdCBoYXMgbG9hZGVkIGl0cyB2YWx1
ZSwgaW4KLSAgICAgICAgICAgICAgICAvLyB3aGljaCBjYXNlIHdlJ3JlIGRvbmUuCi0gICAgICAg
ICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
LSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQ2FwdHVyZWQo
aXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFu
ZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0Rh
dGEpLCBub2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1l
bnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSAhPSBGbHVzaCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KSB7Ci0gICAgICAg
ICAgICAgICAgLy8gV2UncmUgZ2V0dGluZyBhbiBhcmd1bWVudCBpbiB0aGUgZmlyc3QgYmFzaWMg
YmxvY2s7IGxpbmsKLSAgICAgICAgICAgICAgICAvLyB0aGUgR2V0TG9jYWwgdG8gdGhlIFNldEFy
Z3VtZW50LgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5sb2NhbCgpID09IHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOwotICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAg
ICAgICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBo
KEdldExvY2FsLCBPcEluZm8odmFyaWFibGUpLCBub2RlKSk7Ci0gICAgICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwot
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoaXNDYXB0dXJlZCkgewotICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVu
dCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9k
ZS0+b3AoKSA9PSBTZXRBcmd1bWVudCB8fCBub2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRM
b2NhbCwgT3BJbmZvKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZSkpOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldExvY2Fs
OgogICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFNldExvY2Fs
OgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRh
KG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwg
aXNDYXB0dXJlZCk7Ci0KLSAgICAgICAgTm9kZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5m
byh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKLSAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVu
ZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGFyZ3VtZW50KSk7Ci0gICAgICAg
IG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWws
IE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAgICAgbm9kZSA9IGluamVj
dExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlh
YmxlKSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50
KGFyZ3VtZW50KSA9IG5vZGU7Ci0gICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlKTsKLSAgICAg
ICAgCi0gICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICB2b2lkIHNldEFyZ3VtZW50KGlu
dCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAg
IHsKQEAgLTQ5Myw2MSArNDI1LDIyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBmbHVzaERp
cmVjdChpbnQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAg
ICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjaGVjayBpZiB0aGUgc2FtZSBvcGVy
YW5kIGhhZCBhbHJlYWR5IGJlZW4gZmx1c2hlZCB0bwotICAgICAgICAvLyBzb21lIG90aGVyIGxv
Y2FsIHZhcmlhYmxlLgotICAgICAgICAKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2Rl
QmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxs
RnJhbWUpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9wZXJhbmQgPCBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBub2RlOwotICAgICAgICBp
bnQgaW5kZXg7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAg
ICAgICAgICAgaW5kZXggPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKLSAgICAgICAgICAg
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGluZGV4ID0gb3BlcmFuZDsKLSAgICAgICAg
ICAgIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KTsK
LSAgICAgICAgICAgIG1fcHJlc2VydmVkVmFycy5zZXQob3BlcmFuZCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKTsKKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGU7CiAgICAgICAgIAogICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICAgICAgICAgIG5v
ZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCAmJiBub2RlLT5vcCgpICE9IEdl
dExvY2FsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRW1pdCBhIEZsdXNoIHJlZ2Fy
ZGxlc3Mgb2Ygd2hldGhlciB3ZSBhbHJlYWR5IGZsdXNoZWQgaXQuCi0gICAgICAgICAgICAvLyBU
aGlzIGdpdmVzIHVzIGd1aWRhbmNlIHRvIHNlZSB0aGF0IHRoZSB2YXJpYWJsZSBhbHNvIG5lZWRz
IHRvIGJlIGZsdXNoZWQKLSAgICAgICAgICAgIC8vIGZvciBhcmd1bWVudHMsIGV2ZW4gaWYgaXQg
YWxyZWFkeSBoYWQgdG8gYmUgZmx1c2hlZCBmb3Igb3RoZXIgcmVhc29ucy4KLSAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlSXNDYXB0
dXJlZChpc0NhcHR1cmVkKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2
YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKTsKLSAgICAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0
aW9uKQotICAgICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlh
YmxlQWNjZXNzRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAg
ICAgIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB2
YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2Fw
dHVyZWQpOwogICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7Ci0g
ICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NE
YXRhKSk7CiAgICAgICAgIG5vZGUgPSBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGVB
Y2Nlc3NEYXRhKSwgcGhpKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQp
KSB7Ci0gICAgICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnko
bV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpID0gbm9kZTsKLSAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgs
IG5vZGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFw
cGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7Ci0gICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGU7
Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmly
c3RUaW1lKGluZGV4LCBub2RlKTsKLSAgICAgICAgfQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAgICBpZiAoYXJn
dW1lbnRQb3NpdGlvbikKICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxl
KHZhcmlhYmxlQWNjZXNzRGF0YSk7CiAgICAgfQpAQCAtMjAyNCw3ICsxOTE3LDYgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZENhY2hlKSk7CiAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0
QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3Vt
ZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3Vt
ZW50KTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJn
dW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAgfQogICAgIH0K
QEAgLTMyMTMsMTUxICszMTA1LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgIH0KIH0KIAotdGVtcGxhdGU8Qnl0ZUNvZGVQYXJzZXI6OlBoaVN0YWNrVHlw
ZSBzdGFja1R5cGU+Ci12b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQotewot
ICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4mIHBoaVN0YWNrID0gKHN0YWNrVHlwZSA9PSBB
cmd1bWVudFBoaVN0YWNrKSA/IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsK
LSAgICAKLSAgICB3aGlsZSAoIXBoaVN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBQaGlTdGFj
a0VudHJ5IGVudHJ5ID0gcGhpU3RhY2subGFzdCgpOwotICAgICAgICBwaGlTdGFjay5yZW1vdmVM
YXN0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxl
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBQcmVkZWNlc3Nvckxp
c3QmIHByZWRlY2Vzc29ycyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNzb3JzOwotICAgICAg
ICB1bnNpZ25lZCB2YXJObyA9IGVudHJ5Lm1fdmFyTm87Ci0gICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogZGF0YUZvclBoaSA9IGVudHJ5Lm1fcGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLQot
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxv
Z0YoIiAgIEhhbmRsaW5nIHBoaSBlbnRyeSBmb3IgdmFyICV1LCBwaGkgQCV1LlxuIiwgZW50cnku
bV92YXJObywgZW50cnkubV9waGkpOwotI2VuZGlmCi0gICAgICAgIAotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewotI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
IERlYWxpbmcgd2l0aCBwcmVkZWNlc3NvciBibG9jayAldS5cbiIsIHByZWRlY2Vzc29yc1tpXSk7
Ci0jZW5kaWYKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNz
b3JCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKLQotICAg
ICAgICAgICAgTm9kZSomIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBw
cmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQodmFyTm8pIDogcHJlZGVj
ZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKHZhck5vKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTm9kZSogdmFsdWVJblByZWRlY2Vzc29yID0gdmFyOwotICAgICAgICAgICAg
aWYgKCF2YWx1ZUluUHJlZGVjZXNzb3IpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIERpZCBub3QgZmlu
ZCBub2RlLCBhZGRpbmcgcGhpLlxuIik7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIHZhbHVl
SW5QcmVkZWNlc3NvciA9IGluc2VydFBoaU5vZGUoT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0
YShzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjayA/IGFyZ3VtZW50VG9PcGVyYW5kKHZhck5v
KSA6IHN0YXRpY19jYXN0PGludD4odmFyTm8pLCBmYWxzZSkpLCBwcmVkZWNlc3NvckJsb2NrKTsK
LSAgICAgICAgICAgICAgICB2YXIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7Ci0gICAgICAgICAgICAg
ICAgaWYgKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKQotICAgICAgICAgICAgICAgICAg
ICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUo
dmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxG
aXJzdFRpbWUodmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0gICAgICAgICAgICAgICAgcGhp
U3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9jaywgdmFsdWVJblByZWRl
Y2Vzc29yLCB2YXJObykpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUluUHJlZGVjZXNz
b3ItPm9wKCkgPT0gR2V0TG9jYWwpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIEZvdW5kIEdldExvY2Fs
IEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvci0+aW5kZXgoKSk7Ci0jZW5kaWYKLQotICAgICAg
ICAgICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIFZhcmlhYmxlQWNjZXNzRGF0
YXMgYXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZQotICAgICAgICAgICAgICAgIC8vIEdldExvY2Fs
IGFuZCBpdHMgYmxvY2stbG9jYWwgUGhpLiBTdHJpY3RseSBzcGVha2luZyB3ZSBvbmx5IG5lZWQg
dGhlIHR3bwotICAgICAgICAgICAgICAgIC8vIHRvIGJlIHVuaWZpZWQuIEJ1dCBmb3IgZWZmaWNp
ZW5jeSwgd2Ugd2FudCB0aGUgY29kZSB0aGF0IGNyZWF0ZXMgR2V0TG9jYWxzCi0gICAgICAgICAg
ICAgICAgLy8gYW5kIFBoaXMgdG8gdHJ5IHRvIHJldXNlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXMg
bXVjaCBhcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVJblByZWRlY2Vz
c29yLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YWx1ZUluUHJlZGVjZXNzb3ItPmNoaWxkMSgp
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgdmFsdWVJblByZWRlY2Vzc29yID0gdmFsdWVJblByZWRlY2Vzc29yLT5jaGlsZDEoKS5ub2Rl
KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgRm91bmQgQCV1Llxu
IiwgdmFsdWVJblByZWRlY2Vzc29yLT5pbmRleCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3Nvci0+
b3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgIHx8IHZhbHVlSW5QcmVkZWNlc3Nvci0+
b3AoKSA9PSBQaGkKLSAgICAgICAgICAgICAgICB8fCB2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkg
PT0gRmx1c2gKLSAgICAgICAgICAgICAgICB8fCAodmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09
IFNldEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclByZWRlY2Vzc29y
ID0gdmFsdWVJblByZWRlY2Vzc29yLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgZGF0YUZvclByZWRlY2Vzc29yLT51bmlmeShkYXRhRm9yUGhpKTsKLQot
ICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGVudHJ5Lm1fcGhpOwotI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBS
ZWYgY291bnQgb2YgQCV1ID0gJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCBwaGlOb2RlLT5yZWZD
b3VudCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpIHsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgIFJlZmZpbmcgQCV1LlxuIiwgdmFsdWVJblByZWRlY2Vzc29yKTsK
LSNlbmRpZgotICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQxKCkpIHsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDEgPSBAJXUuXG4iLCBwaGlOb2Rl
LT5pbmRleCgpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAg
cGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UodmFsdWVJblByZWRlY2Vzc29yKSk7Ci0j
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4KCkpOwot
ICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwot
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGls
ZDIoKSkgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMiA9IEAldS5cbiIs
IHBoaU5vZGUtPmluZGV4KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0jZW5kaWYKLSAgICAgICAg
ICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIoRWRnZSh2YWx1ZUluUHJlZGVjZXNz
b3IpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5k
ZXgoKSk7Ci0gICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZp
bGUoKSk7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXBoaU5v
ZGUtPmNoaWxkMygpKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQzID0g
QCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgdmFsdWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgot
ICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLnNldENoaWxkMyhFZGdlKHZhbHVlSW5Q
cmVkZWNlc3NvcikpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
LSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlO
b2RlLT5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RG
OjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTm9kZSogbmV3UGhpID0gaW5zZXJ0UGhpTm9kZShPcEluZm8oZGF0YUZvclBo
aSksIGVudHJ5Lm1fYmxvY2spOwotICAgICAgICAgICAgCi0jaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNwbGl0dGlu
ZyBAJXUsIGNyZWF0ZWQgQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgbmV3UGhpLT5pbmRleCgp
KTsKLSNlbmRpZgotCi0gICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdQaGkpOwotCi0gICAgICAgICAgICBuZXdQaGktPmNo
aWxkcmVuID0gcGhpTm9kZS0+Y2hpbGRyZW47Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2Yg
QCV1OiAiLCBuZXdQaGktPmluZGV4KCkpOwotICAgICAgICAgICAgbmV3UGhpLT5kdW1wQ2hpbGRy
ZW4oV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRp
ZgotCi0gICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKG5ld1BoaSwgdmFs
dWVJblByZWRlY2Vzc29yLCAwKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIs
IHBoaU5vZGUtPmluZGV4KCkpOwotICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdU
Rjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAg
ICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBCeXRlQ29kZVBhcnNlcjo6Zml4VmFyaWFibGVBY2Nl
c3NQcmVkaWN0aW9ucygpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgu
bV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDYgKzIzOSw5IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICB2YWxpZGF0ZShtX2dyYXBoKTsKICAgICAgICAgfSB3aGls
ZSAoaW5uZXJDaGFuZ2VkKTsKICAgICAgICAgCisgICAgICAgIGlmIChvdXRlckNoYW5nZWQpCisg
ICAgICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IExvYWRTdG9yZTsKKyAgICAgICAgCiAgICAgICAg
IHJldHVybiBvdXRlckNoYW5nZWQ7CiAgICAgfQogCkBAIC0yNTAsMTAyICsyNTMsMjQgQEAgcHJp
dmF0ZToKICAgICAgICAgQVNTRVJUKGJsb2NrKTsKICAgICAgICAgQVNTRVJUKCFibG9jay0+aXNS
ZWFjaGFibGUpOwogICAgICAgICAKLSAgICAgICAgLy8gMSkgUmVtb3ZlIHJlZmVyZW5jZXMgZnJv
bSBvdGhlciBibG9ja3MgdG8gdGhpcyBibG9jay4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9ncmFwaC5udW1TdWNjZXNzb3JzKGJsb2NrKTsgaS0tOykKLSAgICAgICAgICAgIGZpeFBoaXMo
YmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIGkpKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAg
ICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5k
ZXgtLTspCisgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5v
ZGVJbmRleCkpOwogICAgICAgICAKLSAgICAgICAgLy8gMikgS2lsbCB0aGUgYmxvY2sKICAgICAg
ICAgbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5jbGVhcigpOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgaW50IG9wZXJhbmQpCisgICAgdm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxv
Y2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2ssIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICBOb2RlKiBub2RlID0gamV0
dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAg
aWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAobm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChub2RlLT5vcCgpICE9IFNldExvY2Fs
KTsKICAgICAgICAgYmxvY2stPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICBtX2dyYXBoLCBSZWZD
aGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBub2Rl
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaXhQb3NzaWJsZUdldExvY2FsKEJhc2ljQmxvY2sq
IGJsb2NrLCBFZGdlJiBlZGdlLCBib29sIGNoYW5nZVJlZikKLSAgICB7Ci0gICAgICAgIE5vZGUq
IGNoaWxkID0gZWRnZS5ub2RlKCk7Ci0gICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2Nh
bCkKLSAgICAgICAgICAgIHJldHVybjsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgQ29uc2lkZXJpbmcgR2V0TG9jYWwgYXQg
QCV1LCBsb2NhbCByJWQuXG4iLCBub2RlLT5pbmRleCgpLCBjaGlsZC0+bG9jYWwoKSk7Ci0jZW5k
aWYKLSAgICAgICAgaWYgKGNoaWxkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgp
KSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBjYXB0dXJlZC5cbiIpOwotI2VuZGlmCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLT5sb2NhbCgpKTsKLSNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAg
IERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4iLCBvcmlnaW5hbE5vZGUtPmluZGV4KCkpOwot
I2VuZGlmCi0gICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGUpOwotI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgT3JpZ2lu
YWwgaGFzIGxvY2FsIHIlZC5cbiIsIG9yaWdpbmFsTm9kZS0+bG9jYWwoKSk7Ci0jZW5kaWYKLSAg
ICAgICAgQVNTRVJUKGNoaWxkLT5sb2NhbCgpID09IG9yaWdpbmFsTm9kZS0+bG9jYWwoKSk7Ci0g
ICAgICAgIC8vIFBvc3NpYmlsaXRpZXM6Ci0gICAgICAgIC8vIFNldExvY2FsIC0+IHRoZSBzZWNv
bmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhpbmcgdGhhdCBpcyBpbW1lZGlh
dGVseQotICAgICAgICAvLyAgICAgYXZhaWxhYmxlIGluIHRoZSBmaXJzdCBibG9jayB3aXRoIGEg
a25vd24gTm9kZUluZGV4LgotICAgICAgICAvLyBHZXRMb2NhbCAtPiB0aGUgc2Vjb25kQmxvY2sg
aXMgZ2V0dGluZyB0aGUgdmFsdWUgb2Ygc29tZXRoaW5nIHRoYXQgdGhlIGZpcnN0Ci0gICAgICAg
IC8vICAgICBibG9jayBhbHNvIGdldHMuCi0gICAgICAgIC8vIFBoaSAtPiB0aGUgc2Vjb25kQmxv
Y2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9wZXJhbmQgdGhhdCB0aGUgZmlyc3Qg
YmxvY2sKLSAgICAgICAgLy8gICAgIHdhcyBhbHNvIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbi4K
LSAgICAgICAgLy8gU2V0QXJndW1lbnQgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Ig
a2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlCi0gICAgICAgIC8vICAgICBmaXJzdCBi
bG9jayB3YXMga2VlcGluZyBhbGl2ZSBieSB2aXJ0dWUgb2YgdGhlIGZpcnN0QmxvY2sgYmVpbmcg
dGhlIHJvb3QgYW5kCi0gICAgICAgIC8vICAgICB0aGUgb3BlcmFuZCBiZWluZyBhbiBhcmd1bWVu
dC4KLSAgICAgICAgLy8gRmx1c2ggLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2Vl
cC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlIGZpcnN0Ci0gICAgICAgIC8vICAgICBibG9j
ayB3YXMgZm9yY2luZyB0byBiZSBhbGl2ZSwgc28gdGhlIHNlY29uZCBibG9jayBzaG91bGQgcmVm
ZXIgY2hpbGQgb2YKLSAgICAgICAgLy8gICAgIHRoZSBmbHVzaC4KLSAgICAgICAgaWYgKG9yaWdp
bmFsTm9kZS0+b3AoKSA9PSBGbHVzaCkKLSAgICAgICAgICAgIG9yaWdpbmFsTm9kZSA9IG9yaWdp
bmFsTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBzd2l0Y2ggKG9yaWdpbmFsTm9kZS0+
b3AoKSkgewotICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBpZiAoY2hhbmdl
UmVmKQotICAgICAgICAgICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBTZXRMb2NhbC5cbiIpOwotI2VuZGlmCi0gICAg
ICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKGVkZ2UsIG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBHZXRMb2NhbDogewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBHZXRMb2NhbC5cbiIp
OwotI2VuZGlmCi0gICAgICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5lcmF0ZSgp
KQotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQoZWRnZSwgb3JpZ2luYWxOb2Rl
LCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIEdldExvY2FsIHRoYXQg
cG9pbnRzIHRvIGEgY2hpbGQgR2V0TG9jYWwgdGhhdCBpcyBkZWFkLCB0aGVuCi0gICAgICAgICAg
ICAvLyB3ZSBoYXZlIG5vIG5lZWQgdG8gZG8gYW55dGhpbmc6IHRoaXMgb3JpZ2luYWwgR2V0TG9j
YWwgaXMgc3RpbGwgdmFsaWQuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIFBoaToKLSAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewotICAgICAgICBpZiAoY2hh
bmdlUmVmKQotICAgICAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBQaGkvU2V0QXJndW1lbnQuXG4iKTsKLSNlbmRpZgot
ICAgICAgICAgICAgLy8gS2VlcCB0aGUgR2V0TG9jYWwhCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgICAgICBt
X2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbUxv
Y2FsLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgamV0dGlzb25CbG9jayhCbG9ja0luZGV4
IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0dGlzb25lZEJsb2NrSW5kZXgsIENvZGVPcmlnaW4g
Ym91bmRhcnlDb2RlT3JpZ2luKQpAQCAtMzYxLDM4ICsyODYsNiBAQCBwcml2YXRlOgogICAgICAg
ICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGJsb2NrSW5kZXgsIGpldHRpc29uZWRCbG9ja0lu
ZGV4KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmaXhQaGlzKEJsb2NrSW5kZXggc291cmNlQmxv
Y2tJbmRleCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbkJsb2NrSW5kZXgpCi0gICAgewotICAgICAg
ICBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nbc291cmNlQmxvY2tJ
bmRleF0uZ2V0KCk7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW2Rlc3RpbmF0aW9uQmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlmICgh
ZGVzdGluYXRpb25CbG9jaykgewotICAgICAgICAgICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRvIGtp
bGwgb2ZmIHRoZSBzb3VyY2UgYmxvY2sgYW5kIHRoZSBkZXN0aW5hdGlvbiBibG9jayBpcyBhbHJl
YWR5Ci0gICAgICAgICAgICAvLyBkZWFkLCB0aGVuIHdlJ3JlIGRvbmUhCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXN0aW5h
dGlvbkJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBOb2RlKiBwaGlOb2Rl
ID0gZGVzdGluYXRpb25CbG9jay0+cGhpc1tpXTsKLSAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9
IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwaGlOb2RlLT5sb2NhbCgpKTsK
LSAgICAgICAgICAgIGlmICghbXlOb2RlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxs
IGhhcHBlbiBpZiB0aGVyZSBpcyBhIHBoaSBpbiB0aGUgZGVzdGluYXRpb24gdGhhdCByZWZlcnMg
aW50bwotICAgICAgICAgICAgICAgIC8vIHRoZSBkZXN0aW5hdGlvbiBpdHNlbGYuCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0jaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoCi0gICAgICAgICAgICAg
ICAgIkNvbnNpZGVyaW5nIHJlbW92aW5nIHJlZmVyZW5jZSBmcm9tIHBoaSBAJXUgdG8gQCV1IG9u
IGxvY2FsIHIlZDoiLAotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmluZGV4KCksIG15Tm9kZS0+
aW5kZXgoKSwgcGhpTm9kZS0+bG9jYWwoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChteU5v
ZGUtPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgbXlOb2RlID0gbXlOb2RlLT5j
aGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgQWRq
YWNlbmN5TGlzdDo6U2l6ZTsgKytqKQotICAgICAgICAgICAgICAgIHJlbW92ZVBvdGVudGlhbGx5
RGVhZFBoaVJlZmVyZW5jZShteU5vZGUsIHBoaU5vZGUsIGosIHNvdXJjZUJsb2NrLT5pc1JlYWNo
YWJsZSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICAgICAgZGF0YUxvZ0YoIlxuIik7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAg
ICB2b2lkIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoQmxvY2tJbmRleCBibG9ja0luZGV4LCBC
bG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4KQogICAgIHsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC01ODEsODggKzQ3NCw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnBoaXMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgICAgICBmaXJzdEJsb2NrLT5waGlzLmFwcGVuZChzZWNvbmRCbG9jay0+cGhp
c1tpXSk7CiAKLSAgICAgICAgLy8gQmVmb3JlIHdlIHN0YXJ0IGNoYW5naW5nIHRoZSBzZWNvbmQg
YmxvY2sncyBncmFwaCwgcmVjb3JkIHdoYXQgbm9kZXMgd291bGQKLSAgICAgICAgLy8gYmUgcmVm
ZXJlbmNlZCBieSBzdWNjZXNzb3JzIG9mIHRoZSBzZWNvbmQgYmxvY2suCi0gICAgICAgIE9wZXJh
bmRzPE9wZXJhbmRTdWJzdGl0dXRpb24+IHN1YnN0aXR1dGlvbnMoCi0gICAgICAgICAgICBzZWNv
bmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAg
ICBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVt
YmVyT2ZBcmd1bWVudHMoKTsgKytpKQotICAgICAgICAgICAgcmVjb3JkUG9zc2libGVJbmNvbWlu
Z1JlZmVyZW5jZShzZWNvbmRCbG9jaywgc3Vic3RpdHV0aW9ucywgYXJndW1lbnRUb09wZXJhbmQo
aSkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAgICAgICAgcmVjb3JkUG9zc2li
bGVJbmNvbWluZ1JlZmVyZW5jZShzZWNvbmRCbG9jaywgc3Vic3RpdHV0aW9ucywgaSk7Ci0KLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+c2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBzZWNvbmRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGJvb2wgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBj
YXNlIFBoYW50b206IHsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICAgICAgTm9kZSog
cG9zc2libGVMb2NhbE9wID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAg
IGlmIChwb3NzaWJsZUxvY2FsT3AtPm9wKCkgIT0gR2V0TG9jYWwKLSAgICAgICAgICAgICAgICAg
ICAgJiYgcG9zc2libGVMb2NhbE9wLT5oYXNMb2NhbCgpCi0gICAgICAgICAgICAgICAgICAgICYm
ICFwb3NzaWJsZUxvY2FsT3AtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBmaXJzdEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZChwb3NzaWJsZUxvY2FsT3AtPmxvY2FsKCkpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoc2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2V0
TG9jYWwtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+
Y2hpbGQyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDMo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YXNlIEZsdXNoOgotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgICAg
IC8vIEEgRmx1c2ggY291bGQgdXNlIGEgR2V0TG9jYWwsIFNldExvY2FsLCBTZXRBcmd1bWVudCwg
b3IgYSBQaGkuCi0gICAgICAgICAgICAgICAgLy8gSWYgaXQgdXNlcyBhIEdldExvY2FsLCBpdCds
bCBiZSB0YWtlbiBjYXJlIG9mIGJlbG93LiBJZiBpdCB1c2VzIGEKLSAgICAgICAgICAgICAgICAv
LyBTZXRMb2NhbCBvciBTZXRBcmd1bWVudCwgdGhlbiBpdCBtdXN0IGJlIHVzaW5nIGEgbm9kZSBm
cm9tIHRoZQotICAgICAgICAgICAgICAgIC8vIHNhbWUgYmxvY2suIEJ1dCBpZiBpdCB1c2VzIGEg
UGhpLCB0aGVuIHdlIHNob3VsZCByZWRpcmVjdCBpdCB0bwotICAgICAgICAgICAgICAgIC8vIHVz
ZSB3aGF0ZXZlciB0aGUgZmlyc3QgYmxvY2sgYWR2ZXJ0aXNlZCBhcyBhIHRhaWwgb3BlcmFuZC4K
LSAgICAgICAgICAgICAgICAvLyBTaW1pbGFybHkgZm9yIEdldExvY2FsOyBpdCBjb3VsZCB1c2Ug
YW55IG9mIHRob3NlIGV4Y2VwdCBmb3IKLSAgICAgICAgICAgICAgICAvLyBHZXRMb2NhbC4gSWYg
aXQgdXNlcyBhIFBoaSB0aGVuIGl0IHNob3VsZCBiZSByZWRpcmVjdGVkIHRvIHVzZSBhCi0gICAg
ICAgICAgICAgICAgLy8gUGhpIGZyb20gdGhlIHRhaWwgb3BlcmFuZC4KLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgIT0gUGhpKQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBhdEZpcnN0ID0g
Zmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7Ci0gICAg
ICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBF
ZGdlKHNraXBHZXRMb2NhbChhdEZpcnN0KSksIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAg
ICAgICAgICAgICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghY2hpbGRyZW5BbHJlYWR5Rml4ZWQpIHsKLSAgICAgICAgICAg
ICAgICBib29sIGNoYW5nZVJlZiA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBHZXRMb2NhbCwgdGhlbiB3
ZSBtaWdodCBsaWtlIHRvIGZpeCBpdC4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoISFub2RlLT5jaGlsZDEoKSkgewotICAg
ICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUtPmNo
aWxkcmVuLmNoaWxkMSgpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgICAgICBpZiAoISFu
b2RlLT5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRM
b2NhbChmaXJzdEJsb2NrLCBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgY2hhbmdlUmVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghIW5vZGUtPmNoaWxkMygpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS0+Y2hp
bGRyZW4uY2hpbGQzKCksIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpcnN0QmxvY2stPmFw
cGVuZChub2RlKTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNl
Y29uZEJsb2NrLT5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGZpcnN0QmxvY2stPmFwcGVuZChz
ZWNvbmRCbG9jay0+YXQoaSkpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2st
Pmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAgCkBAIC02ODQsMzcgKzQ5Nyw2IEBAIHBy
aXZhdGU6CiAgICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2tJbmRleCAhPSBOb0Jsb2NrKQogICAg
ICAgICAgICAgZml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhmaXJzdEJsb2NrSW5kZXgsIGpldHRp
c29uZWRCbG9ja0luZGV4KTsKICAgICAgICAgCi0gICAgICAgIC8vIEZpeCB1cCB0aGUgdmFyaWFi
bGVzIGF0IHRhaWwuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCi0gICAgICAgICAgICBm
aXhUYWlsT3BlcmFuZChmaXJzdEJsb2NrLCBzZWNvbmRCbG9jaywgYXJndW1lbnRUb09wZXJhbmQo
aSksIHN1YnN0aXR1dGlvbnMpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29u
ZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAgICAg
ICAgZml4VGFpbE9wZXJhbmQoZmlyc3RCbG9jaywgc2Vjb25kQmxvY2ssIGksIHN1YnN0aXR1dGlv
bnMpOwotICAgICAgICAKLSAgICAgICAgLy8gRml4IHVwIHRoZSByZWZlcmVuY2VzIGZyb20gb3Vy
IG5ldyBzdWNjZXNzb3JzLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1
Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGktLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoZmlyc3RCbG9jaywg
aSldLmdldCgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nv
ci0+cGhpcy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBz
dWNjZXNzb3ItPnBoaXNbal07Ci0gICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2VSZWYgPSBwaGlO
b2RlLT5zaG91bGRHZW5lcmF0ZSgpOwotICAgICAgICAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRp
b24gc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5vcGVyYW5kKHBoaU5vZGUtPmxvY2FsKCkp
OwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgUGVyZm9ybWluZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiAiLCBzdWJz
dGl0dXRpb24sICIuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+
Y2hpbGQxKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IGlmIChwaGlOb2RlLT5jaGlsZDEoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQx
KCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkgPT0gc3Vic3RpdHV0aW9uLm9sZENo
aWxkKQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKHBoaU5vZGUtPmNo
aWxkcmVuLmNoaWxkMigpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpID09IHN1YnN0
aXR1dGlvbi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VDaGls
ZChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFu
Z2VSZWYpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBmaXJz
dEJsb2NrLT52YWx1ZXNBdFRhaWwgPSBzZWNvbmRCbG9jay0+dmFsdWVzQXRUYWlsOwogICAgICAg
ICBmaXJzdEJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gPSBzZWNvbmRCbG9jay0+Y2ZhQnJhbmNo
RGlyZWN0aW9uOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2lj
QmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ1BTUmV0
aHJlYWRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ1BTUmV0aHJlYWRp
bmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJDUFMgcmV0aHJl
YWRpbmciKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAg
ICAgLy8gQ3VycmVudGx5IHdlIGRvbid0IGRvIHJldGhyZWFkaW5nIGlmIHdlJ3JlIGFscmVhZHkg
aW4gVGhyZWFkZWRDUFMgZm9ybS4gSW4gZnV0dXJlLAorICAgICAgICAvLyB3ZSBtYXkgd2FudCB0
byByZXBsYWNlIHRoaXMgYXNzZXJ0aW9uIHdpdGggYW4gZWFybHkgcmV0dXJuIGlmIHBoYXNlcyB3
ZXJlIG1vcmUKKyAgICAgICAgLy8gcHJlY2lzZSBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGV5IGJy
b2tlIHRocmVhZGluZy4KKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9y
ZSk7CisgICAgICAgIAorICAgICAgICBmcmVlVW5uZWNlc3NhcnlOb2RlcygpOworICAgICAgICBj
YW5vbmljYWxpemVMb2NhbHNJbkJsb2NrcygpOworICAgICAgICBwcm9wYWdhdGVQaGlzPEFyZ3Vt
ZW50T3BlcmFuZD4oKTsKKyAgICAgICAgcHJvcGFnYXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7Cisg
ICAgICAgIG1fZ3JhcGguY29sbGVjdEdhcmJhZ2UoKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3Jh
cGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICAKKyAgICB2b2lkIGZyZWVVbm5lY2Vzc2FyeU5vZGVzKCkKKyAgICB7Cisg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlz
UmVhY2hhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdW5zaWduZWQgZnJvbUluZGV4
ID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRvSW5kZXggPSAwOworICAgICAgICAgICAgd2hp
bGUgKGZyb21JbmRleCA8IGJsb2NrLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KGZyb21JbmRleCsrKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgR2V0
TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICBjYXNl
IFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDEoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLT5vcCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3Vt
ZW50OgorICAgICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbUxvY2FsKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE5vcDoKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2Vt
ZW50ID0gMDsgLy8gUmVzZXQgdGhlIHJlcGxhY2VtZW50IHNpbmNlIHRoZSBuZXh0IHBoYXNlIHdp
bGwgdXNlIGl0LgorICAgICAgICAgICAgICAgIGJsb2NrLT5hdCh0b0luZGV4KyspID0gbm9kZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJsb2NrLT5yZXNpemUodG9JbmRleCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhp
cy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9hbGxvY2F0
b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOworICAgICAgICAgICAgYmxvY2stPnBoaXMu
cmVzaXplKDApOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPE9wZXJhbmRL
aW5kIG9wZXJhbmRLaW5kPgorICAgIHZvaWQgY2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWlsKCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgKKyAgICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5zaXplRm9yPG9wZXJhbmRLaW5kPigpCisgICAgICAgICAgICA9PSBtX2Jsb2NrLT52YXJp
YWJsZXNBdFRhaWwuc2l6ZUZvcjxvcGVyYW5kS2luZD4oKSk7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZUZvcjxvcGVyYW5k
S2luZD4oKTsgaS0tOykgeworICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLmF0
Rm9yPG9wZXJhbmRLaW5kPihpKSA9IDA7CisgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNB
dFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGkpID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBOb2RlKiBhZGRQaGlTaWxlbnRseShCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgQ29kZU9y
aWdpbiYgY29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKKyAgICB7Cisg
ICAgICAgIFBoaSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKERvbnRSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLCBQaGksIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSkpOwor
ICAgICAgICBibG9jay0+cGhpcy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgTm9kZSogYWRkUGhpKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25z
dCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQor
ICAgIHsKKyAgICAgICAgUGhpKiByZXN1bHQgPSBhZGRQaGlTaWxlbnRseShibG9jaywgY29kZU9y
aWdpbiwgdmFyaWFibGUpOworICAgICAgICBtX3BoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5
KGJsb2NrLCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgTm9kZSogYWRkUGhpKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRkUGhpKG1fYmxvY2ss
IGNvZGVPcmlnaW4sIHZhcmlhYmxlKTsKKyAgICB9CisgICAgCisgICAgTm9kZSogYWRkUGhpKE5v
ZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRkUGhpKG5vZGUtPmNvZGVPcmlnaW4s
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjYW5v
bmljYWxpemVHZXRMb2NhbChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgIGlmIChOb2RlKiBvdGhlck5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgc3dpdGNoIChvdGhlck5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6Cisg
ICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICBvdGhlck5vZGUg
PSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJO
b2RlLT5vcCgpID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGhh
dmUgYSBHZXRMb2NhbCwgc28gdGhpcyBtaWdodCBhcyB3ZWxsIGJlIHRoZSBvbmUuCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9kZSkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUt
Pm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+
b3AoKSA9PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgfHwgb3Ro
ZXJOb2RlLT5vcCgpID09IEdldExvY2FsKTsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9kZSkpOworICAgICAgICAg
ICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSA9IG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICAg
ICAgICAgIG90aGVyTm9kZSA9IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9
PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gUGhpIHx8
IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJn
dW1lbnQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhpcyBH
ZXRMb2NhbCBidXQgbGluayBpdCB0byB0aGUgcHJpb3Igb25lcy4KKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhlck5vZGUpKTsKKyAgICAgICAgICAgICAg
ICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBu
b2RlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAg
ICAgICAgICAgIC8vIFJlcGxhY2UgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBHZXRMb2NhbCB3aXRo
IG90aGVyTm9kZS4KKyAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IG90aGVyTm9k
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOworICAgICAg
ICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbm9kZS0+Y2hp
bGRyZW4uc2V0Q2hpbGQxKEVkZ2UoYWRkUGhpKG5vZGUpKSk7CisgICAgICAgIG1fYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5zZXRPcGVyYW5kRmlyc3RUaW1lKHZhcmlhYmxlLT5sb2NhbCgpLCBub2Rl
KTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCksIG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbm9uaWNhbGl6ZVNldExv
Y2FsKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwu
c2V0T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2RlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxO
b2RlVHlwZSBub2RlVHlwZT4KKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9j
YWwoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAKKyAgICAgICAgaWYgKE5vZGUqIG90aGVyTm9k
ZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkg
eworICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0g
dmFyaWFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG90aGVyTm9kZS0+
b3AoKSkgeworICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRv
bUxvY2FsOgorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBvdGhl
ck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFBo
aSB8fCBub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT0gUGhhbnRvbUxvY2Fs
ICYmIG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgeworICAgICAgICAgICAgICAgIC8vIFBo
YW50b21Mb2NhbChTZXRMb2NhbCkgZG9lc24ndCBtYWtlIHNlbnNlLiBQaGFudG9tTG9jYWwgbWVh
bnM6IGF0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyBwb2ludCBJIGtub3cgSSB3b3VsZCBoYXZl
IGJlZW4gaW50ZXJlc3RlZCBpbiB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZQorICAgICAgICAg
ICAgICAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiBPU1IuIFBoYW50b21Mb2NhbChTZXRMb2NhbCkg
bWVhbnM6IGF0IHRoaXMgcG9pbnQgSQorICAgICAgICAgICAgICAgIC8vIGtub3cgdGhhdCBJIHdv
dWxkIGhhdmUgcmVhZCB0aGUgdmFsdWUgd3JpdHRlbiBieSB0aGF0IFNldExvY2FsLiBUaGlzIGlz
CisgICAgICAgICAgICAgICAgLy8gcmVkdW5kYW50IGFuZCBpbmVmZmljaWVudCwgc2luY2UgcmVh
bGx5IGl0IGp1c3QgbWVhbnMgdGhhdCB3ZSB3YW50IHRvCisgICAgICAgICAgICAgICAgLy8gYmUg
a2VlcGluZyB0aGUgb3BlcmFuZCB0byB0aGUgU2V0TG9jYWwgYWxpdmUuIFRoZSBTZXRMb2NhbCBt
YXkgZGllLCBhbmQKKyAgICAgICAgICAgICAgICAvLyB3ZSdsbCBiZSBmaW5lIGJlY2F1c2UgT1NS
IHRyYWNrcyBkZWFkIFNldExvY2Fscy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBTbyB3ZSB0dXJuIHRoaXMgaW50byBhIFBoYW50b20gb24gdGhlIGNoaWxkIG9mIHRoZSBT
ZXRMb2NhbC4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5z
ZXRDaGlsZDEob3RoZXJOb2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBub3Ro
aW5nIHdyb25nIHdpdGggaGF2aW5nIHJlZHVuZGFudCBGbHVzaCdzLiBJdCBqdXN0IG5lZWRzIHRv
CisgICAgICAgICAgICAvLyBiZSBsaW5rZWQgYXBwcm9wcmlhdGVseS4gTm90ZSB0aGF0IGlmIHRo
ZXJlIGhhZCBhbHJlYWR5IGJlZW4gYSBwcmV2aW91cworICAgICAgICAgICAgLy8gdXNlIGF0IHRh
aWwgdGhlbiB3ZSBkb24ndCBvdmVycmlkZSBpdC4gSXQncyBmaW5lIGZvciB2YXJpYWJsZXNBdFRh
aWwgdG8KKyAgICAgICAgICAgIC8vIG9taXQgRmx1c2hlcyBhbmQgUGhhbnRvbUxvY2Fscy4gT24g
dGhlIG90aGVyIGhhbmQsIGhhdmluZyBpdCByZWZlciB0byBhCisgICAgICAgICAgICAvLyBGbHVz
aCBvciBhIFBoYW50b21Mb2NhbCBpZiBqdXN0IGJlZm9yZSBpdCB0aGUgbGFzdCB1c2Ugd2FzIGEg
R2V0TG9jYWwgd291bGQKKyAgICAgICAgICAgIC8vIHNlcmlvdXNseSBjb25mdXNlIHRoZSBDRkEu
CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhlck5vZGUpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbm9kZS0+
Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoYWRkUGhpKG5vZGUpKSk7CisgICAgICAgIG1fYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5zZXRPcGVyYW5kRmlyc3RUaW1lKHZhcmlhYmxlLT5sb2NhbCgpLCBu
b2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCksIG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUxv
Y2Fsc0luQmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Jsb2NrKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBBU1NFUlQobV9ibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAK
KyAgICAgICAgY2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWlsPEFyZ3VtZW50T3BlcmFuZD4oKTsK
KyAgICAgICAgY2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWlsPExvY2FsT3BlcmFuZD4oKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEFzc3VtZXMgdGhhdCBhbGwgcGhpIHJlZmVyZW5jZXMgaGF2ZSBi
ZWVuIHJlbW92ZWQuIEFzc3VtZXMgdGhhdCB0aGluZ3MgdGhhdAorICAgICAgICAvLyBzaG91bGQg
YmUgbGl2ZSBoYXZlIGEgbm9uLXplcm8gcmVmIGNvdW50LCBidXQgZG9lc24ndCBhc3N1bWUgdGhh
dCB0aGUgcmVmCisgICAgICAgIC8vIGNvdW50cyBhcmUgY29ycmVjdCBiZXlvbmQgdGhhdCAobW9y
ZSBmb3JtYWxseSAhIWxvZ2ljYWxSZWZDb3VudCA9PSAhIWFjdHVhbFJlZkNvdW50CisgICAgICAg
IC8vIGJ1dCBub3QgbG9naWNhbFJlZkNvdW50ID09IGFjdHVhbFJlZkNvdW50KS4gQXNzdW1lcyB0
aGF0IGl0IGNhbiBicmVhayByZWYKKyAgICAgICAgLy8gY291bnRzLgorICAgICAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2Jsb2NrLT5zaXpl
KCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQo
bm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vi
c3RpdHV0aW9uKG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGUgcnVsZXMg
Zm9yIHRocmVhZGVkIENQUyBmb3JtOgorICAgICAgICAgICAgLy8gCisgICAgICAgICAgICAvLyBI
ZWFkIHZhcmlhYmxlOiB0aGUgZmlyc3QgdGhpbmcgdGhhdCBoYXBwZW5lZCB0byB0aGUgdmFyaWFi
bGUgaW4gdGhlIGJsb2NrLgorICAgICAgICAgICAgLy8gSXQgbWF5IGJlIGEgRmx1c2gsIFBoYW50
b21Mb2NhbCwgR2V0TG9jYWwsIFNldExvY2FsLCBvciBTZXRBcmd1bWVudC4KKyAgICAgICAgICAg
IC8vIFNldEFyZ3VtZW50IG1heSBvbmx5IGFwcGVhciBpbiB0aGUgcm9vdCBibG9jay4KKyAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAvLyBUYWlsIHZhcmlhYmxlOiB0aGUgbGFzdCB0aGluZyB0
aGF0IGhhcHBlbmVkIHRvIHRoZSB2YXJpYWJsZSBpbiB0aGUgYmxvY2suCisgICAgICAgICAgICAv
LyBJdCBtYXkgYmUgYSBGbHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwgU2V0TG9jYWwsIG9y
IFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQgbWF5IG9ubHkgYXBwZWFy
IGluIHRoZSByb290IGJsb2NrLiBOb3RlIHRoYXQgaWYgdGhlcmUgZXZlcgorICAgICAgICAgICAg
Ly8gd2FzIGEgR2V0TG9jYWwgdG8gdGhlIHZhcmlhYmxlLCBhbmQgaXQgd2FzIGZvbGxvd2VkIGJ5
IFBoYW50b21Mb2NhbHMgYW5kCisgICAgICAgICAgICAvLyBGbHVzaGVzIGJ1dCBub3QgU2V0TG9j
YWxzLCB0aGVuIHRoZSB0YWlsIHZhcmlhYmxlIHdpbGwgYmUgdGhlIEdldExvY2FsLgorICAgICAg
ICAgICAgLy8gVGhpcyByZWZsZWN0cyB0aGUgZmFjdCB0aGF0IHlvdSBvbmx5IGNhcmUgdGhhdCB0
aGUgdGFpbCB2YXJpYWJsZSBpcyBhCisgICAgICAgICAgICAvLyBGbHVzaCBvciBQaGFudG9tTG9j
YWwgaWYgbm90aGluZyBlbHNlIGludGVyZXN0aW5nIGhhcHBlbmVkLgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIENoaWxkIG9mIEdldExvY2FsOiB0aGUgb3BlcmF0aW9uIHRoYXQgdGhl
IEdldExvY2FsIGtlZXBzIGFsaXZlLiBGb3IKKyAgICAgICAgICAgIC8vIHVuY2FwdHVyZWQgbG9j
YWxzLCBpdCBtYXkgYmUgYSBQaGkgZnJvbSB0aGUgY3VycmVudCBibG9jay4gRm9yIGFyZ3VtZW50
cywKKyAgICAgICAgICAgIC8vIGl0IG1heSBiZSBhIFNldEFyZ3VtZW50LiBGb3IgY2FwdHVyZWQg
bG9jYWxzIGFuZCBhcmd1bWVudHMgaXQgbWF5IGFsc28gYmUKKyAgICAgICAgICAgIC8vIGEgU2V0
TG9jYWwuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2hpbGQgb2YgU2V0TG9jYWw6
IG11c3QgYmUgYSB2YWx1ZSBwcm9kdWNpbmcgbm9kZS4KKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyBDaGlsZCBvZiBGbHVzaDogaXQgbWF5IGJlIGEgUGhpIGZyb20gdGhlIGN1cnJlbnQg
YmxvY2sgb3IgYSBTZXRMb2NhbC4gRm9yCisgICAgICAgICAgICAvLyBhcmd1bWVudHMgaXQgbWF5
IGFsc28gYmUgYSBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBD
aGlsZCBvZiBQaGFudG9tTG9jYWw6IGl0IG1heSBiZSBhIFBoaSBmcm9tIHRoZSBjdXJyZW50IGJs
b2NrLiBGb3IKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBpdCBtYXkgYWxzbyBiZSBhIFNldEFy
Z3VtZW50LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENoaWxkcmVuIG9mIFBoaTog
b3RoZXIgUGhpcyBpbiB0aGUgc2FtZSBiYXNpYyBibG9jaywgb3IgYW55IG9mIHRoZQorICAgICAg
ICAgICAgLy8gZm9sbG93aW5nIGZyb20gZnJvbSBwcmVkZWNlc3NvciBibG9ja3M6IFNldExvY2Fs
LCBQaGksIG9yIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8gVGhlc2UgYXJlIGNvbXB1dGVk
IGJ5IGxvb2tpbmcgYXQgdGhlIHRhaWwgdmFyaWFibGVzIG9mIHRoZSBwcmVkZWNlc3NvcgorICAg
ICAgICAgICAgLy8gYmxvY2tzIGFuZCBlaXRoZXIgdXNpbmcgaXQgZGlyZWN0bHkgKGlmIGl0J3Mg
YSBTZXRMb2NhbCwgUGhpLCBvcgorICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQpIG9yIGxvYWRp
bmcgdGhhdCBub2RlcyBjaGlsZCAoaWYgaXQncyBhIEdldExvY2FsLCBQaGFub21Mb2NhbCwKKyAg
ICAgICAgICAgIC8vIG9yIEZsdXNoIC0gYWxsIG9mIHRoZXNlIHdpbGwgaGF2ZSBjaGlsZHJlbiB0
aGF0IGFyZSBTZXRMb2NhbCwgUGhpLCBvcgorICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQpLgor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWwo
bm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZVNldExvY2Fs
KG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhh
bnRvbUxvY2FsPEZsdXNoPihub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAg
IGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWw8UGhhbnRvbT4obm9kZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHZvaWQgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MoKQorICAgIHsKKyAgICAg
ICAgZm9yIChtX2Jsb2NrSW5kZXggPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgbV9ibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2Jsb2Nr
SW5kZXhdLmdldCgpOworICAgICAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9jaygpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFnYXRlUGhpcygpCisgICAgewor
ICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRs
eS4KKyAgICAgICAgbV9ibG9jayA9IDA7CisgICAgICAgIG1fYmxvY2tJbmRleCA9IE5vQmxvY2s7
CisgICAgICAgIAorICAgICAgICB3aGlsZSAoIW1fcGhpU3RhY2suaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBQaGlTdGFja0VudHJ5IGVudHJ5ID0gbV9waGlTdGFjay5sYXN0KCk7CisgICAgICAg
ICAgICBtX3BoaVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBlbnRyeS5tX2Jsb2NrOworICAgICAgICAgICAgUHJlZGVjZXNz
b3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBibG9jay0+bV9wcmVkZWNlc3NvcnM7CisgICAgICAgICAg
ICBOb2RlKiBjdXJyZW50UGhpID0gZW50cnkucGhpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IGN1cnJlbnRQaGktPmxvY2FsKCk7CisgICAgICAgICAgICBpbnQg
b3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gcHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIHByZWVjZXNzb3JCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVj
ZXNzb3JzW2ldXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2Rl
KiYgdmFyaWFibGVJblByZXZpb3VzID0gcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZUluUHJldmlv
dXMpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJblByZXZpb3VzID0gYWRkUGhpKHBy
ZWRlY2Vzc29yQmxvY2ssIGN1cnJlbnRQaGktPmNvZGVPcmlnaW4sIHZhcmlhYmxlKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldE9wZXJh
bmRGaXJzdFRpbWUob3BlcmFuZCwgdmFyaWFibGVJblByZXZpb3VzKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlSW5QcmV2aW91
cy0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBG
bHVzaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZUluUHJlZGVjZXNz
b3ItPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlSW5QcmVkZWNlc3Nvci0+Y2hpbGQx
KCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlSW5QcmV2aW91cyA9IHZhcmlhYmxlSW5QcmV2aW91cy0+Y2hpbGQxKCkubm9kZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NF
UlQoCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5QcmV2aW91cy0+b3AoKSA9PSBTZXRM
b2NhbAorICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUluUHJldmlvdXMtPm9wKCkgPT0g
UGhpCisgICAgICAgICAgICAgICAgICAgIHx8IHZhcmlhYmxlSW5QcmV2aW91cy0+b3AoKSA9PSBT
ZXRBcmd1bWVudCk7CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBkaWRTZXRDaGls
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSAwOyBj
aGlsZElkeCA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGN1cnJlbnRQaGktPmNoaWxkcmVuLmNoaWxkKGNoaWxkSWR4KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50
UGhpLT5jaGlsZHJlbi5zZXRDaGlsZChjaGlsZElkeCwgRWRnZSh2YXJpYWJsZUluUHJlZGVjZXNz
b3IpKTsKKyAgICAgICAgICAgICAgICAgICAgZGlkU2V0Q2hpbGQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KGRpZFNldENoaWxkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXdQaGkgPSBhZGRQaGlTaWxlbnRseShibG9j
aywgY3VycmVudFBoaS0+Y29kZU9yaWdpbiwgdmFyaWFibGUpOworICAgICAgICAgICAgICAgIG5l
d1BoaS0+Y2hpbGRyZW4gPSBjdXJyZW50UGhpLT5jaGlsZHJlbjsKKyAgICAgICAgICAgICAgICBj
dXJyZW50UGhpLT5jaGlsZHJlbi5pbml0aWFsaXplKG5ld1BoaSwgdmFyaWFibGVJblByZWRlY2Vz
c29yLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0ZW1w
bGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwg
NjQ+JiBwaGlTdGFja0ZvcigpCisgICAgeworICAgICAgICBpZiAob3Blcm5hbmRLaW5kID09IEFy
Z3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7Cisg
ICAgICAgIHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CisgICAgfQorICAgIAorICAgIHN0cnVjdCBQ
aGlTdGFja0VudHJ5IHsKKyAgICAgICAgUGhpU3RhY2tFbnRyeShCYXNpY0Jsb2NrKiBibG9jaywg
Tm9kZSogcGhpKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAgICAgLCBt
X3BoaShwaGkpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQmFzaWNC
bG9jayogbV9ibG9jazsKKyAgICAgICAgTm9kZSogbV9waGk7CisgICAgfTsKKyAgICAKKyAgICBC
bG9ja0luZGV4IG1fYmxvY2tJbmRleDsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIFZl
Y3RvcjxQaGlTdGFja0VudHJ5LCA2ND4gbV9waGlTdGFjazsKK307CisKK3ZvaWQgcGVyZm9ybUNQ
U1JldGhyZWFkaW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIENQUyBSZXRocmVhZGluZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFz
ZTxDUFNSZXRocmVhZGluZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ1BTUmV0aHJlYWRpbmdQaGFzZV9oCisj
ZGVmaW5lIERGR0NQU1JldGhyZWFkaW5nUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ1BTIFJldGhyZWFkaW5nOgorLy8KKy8vIFRha2Vz
IGEgZ3JhcGggaW4gd2hpY2ggdGhlcmUgYXJlIGFyYml0cmFyeSBHZXRMb2NhbHMvU2V0TG9jYWxz
IHdpdGggbm8gY29ubmVjdGlvbnMKKy8vIGJldHdlZW4gdGhlbS4gUmVtb3ZlcyByZWR1bmRhbnQg
b25lcyBpbiB0aGUgY2FzZSBvZiB1bmNhcHR1cmVkIHZhcmlhYmxlcy4gQ29ubmVjdHMKKy8vIGFs
bCBvZiB0aGVtIHdpdGggUGhpIGZ1bmN0aW9ucyB0byByZXByZXNlbnQgbGl2ZSByYW5nZXMuCisK
K2Jvb2wgcGVyZm9ybUNQU1JldGhyZWFkaW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOSBAQCBwdWJs
aWM6CiAgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpOyArK2Jsb2NrKQogICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2tdLmdldCgpKTsKICAgICAgICAgCisgICAgICAgIGlmIChtX2NoYW5n
ZWQpCisgICAgICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IExvYWRTdG9yZTsKKyAgICAgICAgCiAg
ICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAgICAgfQogICAgIApAQCAtOTc0LDI3ICs5NzcsNiBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lk
IHBlcmZvcm1TdWJzdGl0dXRpb24oRWRnZSYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKLSAg
ICB7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQu
Ci0gICAgICAgIGlmICghY2hpbGQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
ICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCi0gICAgICAgIE5vZGUq
IHJlcGxhY2VtZW50ID0gY2hpbGQtPnJlcGxhY2VtZW50OwotICAgICAgICBpZiAoIXJlcGxhY2Vt
ZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgY2hpbGQuc2V0Tm9k
ZShyZXBsYWNlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGVyZSBpcyBkZWZpbml0ZWx5
IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBkb2VzIG5vdAotICAg
ICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCi0gICAgICAgIEFTU0VSVCghY2hpbGQtPnJlcGxh
Y2VtZW50KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChhZGRSZWYpCi0gICAgICAgICAgICBtX2dy
YXBoLnJlZihjaGlsZCk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgZWxpbWluYXRlSXJyZWxldmFu
dFBoYW50b21DaGlsZHJlbihOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gUGhhbnRvbSk7CkBAIC0xMDcyLDIxICsxMDU0LDEyIEBAIHByaXZhdGU6CiAgICAg
CiAgICAgdm9pZCBwZXJmb3JtTm9kZUNTRShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgYm9v
bCBzaG91bGRHZW5lcmF0ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Ci0KLSAgICAgICAgaWYg
KG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJz
dENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbihub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOwot
ICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwg
c2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLT5j
aGlsZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICB9CisgICAgICAgIG1f
Z3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihub2RlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFNldExvY2FsKQogICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFzaG91bGRH
ZW5lcmF0ZSkKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCkBAIC0xMTYyLDI2ICsxMTM1LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2Rl
KiBwaGkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBpZiAoIXNldFJlcGxh
Y2VtZW50KHBvc3NpYmxlUmVwbGFjZW1lbnQpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgLy8gSWYgdGhlIEdldExvY2FsIHdlIHJlcGxhY2VkIHVzZWQgdG8gcmVmZXIgdG8g
YSBTZXRMb2NhbCwgdGhlbiBpdCBub3cKLSAgICAgICAgICAgIC8vIHNob3VsZCByZWZlciB0byB0
aGUgY2hpbGQgb2YgdGhlIFNldExvY2FsIGluc3RlYWQuCi0gICAgICAgICAgICBpZiAocGhpLT5v
cCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgp
ID09IHBoaSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxk
cmVuLmNoaWxkMSgpLCBwaGktPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IE5vZGUqIG9sZFRhaWwgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
Ci0gICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKLSAgICAgICAg
ICAgIGlmIChvbGRUYWlsID09IG5vZGUpIHsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9
Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcDsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBNYWludGFpbiBncmFwaCBpbnRlZ3JpdHk6IHNpbmNlIHdlJ3Jl
IHJlcGxhY2luZyBhIEdldExvY2FsIHdpdGggYSBHZXRMb2NhbFVubGlua2VkLAotICAgICAgICAg
ICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBHZXRMb2NhbFVubGlua2VkIGlzIG5vdyBsaW5r
ZWQuCi0gICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRMb2Nh
bFVubGlua2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+c2V0T3Ao
R2V0TG9jYWwpOwotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNoaWxkcmVu
LmNoaWxkMSgpID0gRWRnZShwaGkpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihw
aGkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYg
d2UgcmVwbGFjZSBhIEdldExvY2FsIHdpdGggYSBHZXRMb2NhbFVubGlua2VkLCB0aGVuIHR1cm4g
dGhlIEdldExvY2FsVW5saW5rZWQKKyAgICAgICAgICAgIC8vIGludG8gYSBHZXRMb2NhbC4KKyAg
ICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtlZCkg
eworICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+Y29udmVydFRvR2V0TG9jYWwodmFy
aWFibGVBY2Nlc3NEYXRhLCBwaGkpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHBoaSk7
CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTIzNSw5ICsxMTk2LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShkYXRhTm9kZSk7CiAgICAgICAgICAgICBt
X2dyYXBoLnJlZihkYXRhTm9kZSk7Ci0gICAgICAgICAgICBOb2RlKiBvbGRUYWlsID0gbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAgIGlm
IChvbGRUYWlsID09IG5vZGUpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKSA9IHJlcGxhY2VtZW50OwogICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw2MCArMzIzLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBH
ZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIE5vZGUqIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSAw
OwotICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgPT0gbm9kZQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDEo
KS0+b3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMg
dG8gYmUgdGhlIGNvbW1vbiBjYXNlLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2st
PmlzSW5QaGlzKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwotICAgICAgICAgICAgICAgICAgICBw
cmV2aW91c0xvY2FsQWNjZXNzID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAg
ICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBw
cmV2aW91c0xvY2FsQWNjZXNzOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChpbmRleEluQmxvY2sgPiAwKTsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gTXVzdCBzZWFyY2ggZm9yIHRoZSBwcmV2aW91cyBhY2Nlc3MgdG8gdGhpcyBsb2NhbC4KLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHN1YkluZGV4SW5CbG9jayA9IGluZGV4
SW5CbG9jazsgc3ViSW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBO
b2RlKiBzdWJOb2RlID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXN1Yk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1
Yk5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmxvY2Fs
KCkgIT0gbm9kZS0+bG9jYWwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0d28gbXVzdCBoYXZlIGJlZW4gdW5p
ZmllZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdWJOb2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gc3ViTm9kZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghcHJldmlvdXNMb2NhbEFjY2VzcykgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlIHByZXZpb3VzIGFjY2VzcyBtdXN0IGhhdmUgYmVlbiBhIFBoaS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBwaGlJbmRleEluQmxvY2sgPSBibG9jay0+cGhp
cy5zaXplKCk7IHBoaUluZGV4SW5CbG9jay0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhpc1twaGlJbmRleEluQmxvY2tdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmxvY2FsKCkgIT0gbm9kZS0+bG9jYWwoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhlIHR3byBtdXN0IGhhdmUgYmVlbiB1bmlmaWVkLgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChwaGlOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNMb2NhbEFjY2VzcyA9IHBoaU5vZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQocHJldmlvdXNMb2NhbEFjY2Vzcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBOb2RlKiB0YWlsTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChu
b2RlLT5sb2NhbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAodGFpbE5vZGUgPT0gbm9kZSkKLSAg
ICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpID0gcHJldmlvdXNMb2NhbEFjY2VzczsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgICAgICAgICAgICAgdGFpbE5v
ZGUtPm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRhaWxOb2RlLT5v
cCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0NhcHR1cmVkQXRP
ckFmdGVyKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAgICAgICBBZGphY2VuY3lM
aXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRyZW47CiAgICAgICAgICAgICAgICAgCkBAIC0zODQs
NiArMzMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRyZW4pOwogICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IExvYWRTdG9yZTsKICAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE0
MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDI1ICsxMTMsMzggQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxl
TW9kZSBjb21waWxlTQogCiAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgIHZh
bGlkYXRlKGRmZyk7CisgICAgCisgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKCk7CisgICAgcGVy
Zm9ybVVuaWZpY2F0aW9uKCk7CisgICAgCisgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCisg
ICAgICAgIHZhbGlkYXRlKGRmZyk7CisgICAgCiAgICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdh
dGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOwogICAgIHBlcmZvcm1TdHJ1Y3R1cmVD
aGVja0hvaXN0aW5nKGRmZyk7CisgICAgCiAgICAgdW5zaWduZWQgY250ID0gMTsKICAgICBkZmcu
bV9maXhwb2ludFN0YXRlID0gRml4cG9pbnROb3RDb252ZXJnZWQ7CiAgICAgZm9yICg7OyArK2Nu
dCkgewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAg
ICAgZGF0YUxvZ0YoIkRGRyBiZWdpbm5pbmcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGl0ZXJhdGlv
biAjJXUuXG4iLCBjbnQpOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAg
CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ29u
c3RhbnRGb2xkaW5nKGRmZyk7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUFyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uKGRmZyk7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1NpbXBsaWZp
Y2F0aW9uKGRmZyk7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNTRShkZmcpOworICAgICAg
ICAKICAgICAgICAgaWYgKCFjaGFuZ2VkKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAog
ICAgICAgICBkZmcucmVzZXRFeGl0U3RhdGVzKCk7CiAgICAgICAgIHBlcmZvcm1GaXh1cChkZmcp
OworICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICB9CisgICAgCiAgICAg
ZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50Q29udmVyZ2VkOwogICAgIHBlcmZvcm1DU0Uo
ZGZnKTsKICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE0MTMwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2
ICs1Myw4IEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEMKICAgICAs
IG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAsIG1f
bXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQogICAgICwgbV9maXhwb2ludFN0YXRl
KEJlZm9yZUZpeHBvaW50KQorICAgICwgbV9mb3JtKExvYWRTdG9yZSkKKyAgICAsIG1fdW5pZmlj
YXRpb25TdGF0ZShMb2NhbGx5VW5pZmllZCkKIHsKICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2Nr
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0
MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtODAsNyArODAsNjAgQEAgZW51bSBBZGRTcGVjdWxhdGlvbk1vZGUgewogICAgIFNw
ZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92ZXJmbG93LAogICAgIFNwZWN1bGF0ZUludGVn
ZXIKIH07CisKKy8vIERlc2NyaWJlcyB0aGUgZm9ybSB5b3UgY2FuIGV4cGVjdCB0aGUgZW50aXJl
IGdyYXBoIHRvIGJlIGluLgorZW51bSBHcmFwaEZvcm0geworICAgIC8vIExvYWRTdG9yZSBmb3Jt
IG1lYW5zIHRoYXQgYmFzaWMgYmxvY2tzIG1heSBmcmVlbHkgdXNlIEdldExvY2FsLCBTZXRMb2Nh
bCwKKyAgICAvLyBHZXRMb2NhbFVubGlua2VkLCBhbmQgRmx1c2ggZm9yIGFjY2Vzc2luZyBsb2Nh
bCB2YXJpYWJsZXMgYW5kIGluZGljYXRpbmcKKyAgICAvLyB3aGVyZSB0aGVpciBsaXZlIHJhbmdl
cyBvdWdodCB0byBiZS4gTGl2ZW5lc3MgaXMgaW1wbGljaXQsIGFzIGlzIHRoZSBkYXRhCisgICAg
Ly8gZmxvdyBiZXR3ZWVuIGxvY2FsIGFjY2Vzc2VzLiBGb3IgZXhhbXBsZSwgTG9hZFN0b3JlIGZv
cm0gZ2l2ZXMgbm8gZWFzeSB3YXkKKyAgICAvLyB0byBkZXRlcm1pbmUgd2hpY2ggU2V0TG9jYWwn
cyBmbG93IGludCBvIGEgR2V0TG9jYWwuIEFzIHdlbGwsIExvYWRTdG9yZQorICAgIC8vIGZvcm0g
aW1wbGllcyBubyByZXN0cmljdGlvbnMgb24gcmVkdW5kYW5jeTogeW91IGNhbiBmcmVlbHkgZW1p
dCBtdWx0aXBsZQorICAgIC8vIEdldExvY2Fscywgb3IgbXVsdGlwbGUgU2V0TG9jYWxzIChvciBh
bnkgY29tYmluYXRpb24gdGhlcmVvZikgdG8gdGhlIHNhbWUKKyAgICAvLyBsb2NhbCBpbiB0aGUg
c2FtZSBibG9jay4gTG9hZFN0b3JlIGZvcm0gZG9lcyBub3QgcmVxdWlyZSBiYXNpYyBibG9ja3Mg
dG8KKyAgICAvLyBkZWNsYXJlIGhvdyB0aGV5IGFmZmVjdCBvciB1c2UgbG9jYWxzLCBvdGhlciB0
aGFuIGltcGxpY2l0bHkgYnkgdXNpbmcKKyAgICAvLyB0aGUgbG9jYWwgb3BzLiBGaW5hbGx5LCBM
b2FkU3RvcmUgYWxsb3dzIGZsZXhpYmlsaXR5IGluIGhvdyBsaXZlbmVzcyBvZgorICAgIC8vIGxv
Y2FscyBpcyBleHRlbmRlZDsgZm9yIGV4YW1wbGUgeW91IGNhbiByZXBsYWNlIGEgR2V0TG9jYWwg
d2l0aCBhIFBoYW50b20KKyAgICAvLyBhbmQgc28gbG9uZyBhcyB0aGUgUGhhbnRvbSByZXRhaW5z
IHRoZSBHZXRMb2NhbCdzIGNoaWxkcmVuIChpLmUuIHRoZSBQaGkKKyAgICAvLyBtb3N0IGxpa2Vs
eSkgdGhlbiBpdCBpbXBsaWVzIHRoYXQgdGhlIGxvY2FsIGlzIHN0aWxsIGxpdmUgYnV0IHRoYXQg
aXQgbmVlZAorICAgIC8vIG5vdCBiZSBzdG9yZWQgdG8gdGhlIHN0YWNrIG5lY2Vzc2FyaWx5LiBU
aGlzIGltcGxpZXMgdGhhdCBQaGFudG9tIGNhbgorICAgIC8vIHJlZmVyZW5jZSBub2RlcyB0aGF0
IGhhdmUgbm8gcmVzdWx0LCBhcyBsb25nIGFzIHRob3NlIG5vZGVzIGFyZSB2YWxpZAorICAgIC8v
IEdldExvY2FsIGNoaWxkcmVuIChpLmUuIFBoaSwgU2V0TG9jYWwsIFNldEFyZ3VtZW50KS4KKyAg
ICAvLworICAgIC8vIExvYWRTdG9yZSBmb3JtIGFsc28gaW1wbGllcyB0aGF0IFBoaXMgdGhlbXNl
bHZlcyBjYW4gaGF2ZSBhcmJpdHJhcnkKKyAgICAvLyBjaGlsZHJlbi4gUGhpIGNoaWxkcmVuIGNv
dWxkIGV2ZW4gYmUgZGFuZ2xpbmcsIGFuZCBzaG91bGQgbm90IGJlIHJlbGllZAorICAgIC8vIHVw
b24uCisgICAgLy8KKyAgICAvLyBMb2FkU3RvcmUgZm9ybSBpcyBzdWl0YWJsZSBmb3IgQ0ZHIHRy
YW5zZm9ybWF0aW9ucywgYXMgd2VsbCBhcyBzdHJlbmd0aAorICAgIC8vIHJlZHVjdGlvbiwgZm9s
ZGluZywgYW5kIENTRS4KKyAgICBMb2FkU3RvcmUsCisgICAgCisgICAgLy8gVGhyZWFkZWRDUFMg
Zm9ybSBtZWFucyB0aGF0IGJhc2ljIGJsb2NrcyBsaXN0IHVwLWZyb250IHdoaWNoIGxvY2FscyB0
aGV5CisgICAgLy8gZXhwZWN0IHRvIGJlIGxpdmUgYXQgdGhlIGhlYWQsIGFuZCB3aGljaCBsb2Nh
bHMgdGhleSBtYWtlIGF2YWlsYWJsZSBhdCB0aGUKKyAgICAvLyB0YWlsLiBUaHJlYWRlZENQUyBm
b3JtIGFsc28gaW1wbGllcyB0aGF0OgorICAgIC8vCisgICAgLy8gLSBHZXRMb2NhbHMgYW5kIFNl
dExvY2FscyB0byB1bmNhcHR1cmVkIHZhcmlhYmxlcyBhcmUgbm90IHJlZHVuZGFudCB3aXRoaW4K
KyAgICAvLyAgIGEgYmFzaWMgYmxvY2suCisgICAgLy8KKyAgICAvLyAtIEFsbCBHZXRMb2NhbHMg
YW5kIEZsdXNoZXMgYXJlIGxpbmtlZCBkaXJlY3RseSB0byB0aGUgbGFzdCBhY2Nlc3MgcG9pbnQK
KyAgICAvLyAgIG9mIHRoZSB2YXJpYWJsZSwgd2hpY2ggbXVzdCBub3QgYmUgYW5vdGhlciBHZXRM
b2NhbCBpZiB0aGUgdmFyaWFibGUgaXMKKyAgICAvLyAgIHVuY2FwdHVyZWQuCisgICAgLy8KKyAg
ICAvLyAtIFBoYW50b20oUGhpKSBpcyBub3QgbGVnYWwsIGJ1dCBQaGFudG9tTG9jYWwgaXMuCisg
ICAgLy8KKyAgICAvLyBUaHJlYWRlZENQUyBmb3JtIGlzIHN1aXRhYmxlIGZvciBkYXRhIGZsb3cg
YW5hbHlzaXMgKENGQSwgcHJlZGljdGlvbgorICAgIC8vIHByb3BhZ2F0aW9uKSwgcmVnaXN0ZXIg
YWxsb2NhdGlvbiwgYW5kIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICBUaHJlYWRlZENQUworfTsKKwor
Ly8gRGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiB0aGUgVW5pb25GaW5kIHN0cnVjdHVyZSBvZiBWYXJp
YWJsZUFjY2Vzc0RhdGEncy4KK2VudW0gVW5pZmljYXRpb25TdGF0ZSB7CisgICAgLy8gQmFzaWNC
bG9jay1sb2NhbCBhY2Nlc3NlcyB0byB2YXJpYWJsZXMgYXJlIGFwcHJvcHJpYXRlbHkgdW5pZmll
ZCB3aXRoIGVhY2ggb3RoZXIuCisgICAgTG9jYWxseVVuaWZpZWQsCiAgICAgCisgICAgLy8gVW5p
ZmljYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkIGdsb2JhbGx5LgorICAgIEdsb2JhbGx5VW5pZmll
ZAorfTsKIAogLy8KIC8vID09PSBHcmFwaCA9PT0KQEAgLTE2Nyw2ICsyMjAsNDAgQEAgcHVibGlj
OgogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVy
ZWZDaGlsZChub2RlLCAxKTsgfQogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMyhOb2RlKiBu
b2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAyKTsgfQogICAgIAorICAgIHZvaWQgcGVy
Zm9ybVN1YnN0aXR1dGlvbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgYm9vbCBzaG91bGRH
ZW5lcmF0ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7CisgICAgICAgIGlmIChub2RlLT5mbGFn
cygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJ
ZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsg
bm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgICAgICBwZXJmb3Jt
U3Vic3RpdHV0aW9uRm9yRWRnZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2Vu
ZXJhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlv
bkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAg
ICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigp
LCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRn
ZShub2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UoRWRnZSYgY2hp
bGQpCisgICAgeworICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG9wZXJhbmQgaXMgYWN0dWFsbHkg
dW51c2VkLgorICAgICAgICBpZiAoIWNoaWxkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IHJlcGxhY2VtZW50LgorICAgICAg
ICBOb2RlKiByZXBsYWNlbWVudCA9IGNoaWxkLT5yZXBsYWNlbWVudDsKKyAgICAgICAgaWYgKCFy
ZXBsYWNlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGNoaWxk
LnNldE5vZGUocmVwbGFjZW1lbnQpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlcmUgaXMgZGVm
aW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQgZG9lcyBu
b3QKKyAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgorICAgICAgICBBU1NFUlQoIWNoaWxk
LT5yZXBsYWNlbWVudCk7CisgICAgICAgIAorICAgICAgICBpZiAoYWRkUmVmKQorICAgICAgICAg
ICAgbV9ncmFwaC5yZWYoY2hpbGQpOworICAgIH0KKyAgICAKICNkZWZpbmUgREZHX0RFRklORV9B
RERfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFt
c0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCiAgICAgdGVtcGxhdGVQcmUgdHlwZVBh
cmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRy
ZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1
ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCkBAIC03MTgsNiArODA1LDggQEAg
cHVibGljOgogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG1fbXVzdEhhbmRsZVZhbHVlczsKICAgICAK
ICAgICBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1fZml4cG9pbnRTdGF0ZTsKKyAgICBHcmFw
aEZvcm0gbV9mb3JtOworICAgIFVuaWZpY2F0aW9uU3RhdGUgbV91bmlmaWNhdGlvblN0YXRlOwog
cHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRl
eCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nl
c3NvckluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCwyMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxh
Z3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbnZlcnRU
b1BoYW50b21Mb2NhbCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBQaGFudG9tICYm
IChjaGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0TG9jYWwgfHwg
Y2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnQpKTsKKyAgICAgICAgbV9vcCA9IFBoYW50b21M
b2NhbDsKKyAgICAgICAgbV9vcEluZm8gPSBjaGlsZDEoKS0+bV9vcEluZm87IC8vIENvcHkgdGhl
IHZhcmlhYmxlQWNjZXNzRGF0YS4KKyAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY29udmVydFRvR2V0TG9jYWwoVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSwgTm9kZSogcGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0g
R2V0TG9jYWxVbmxpbmtlZCk7CisgICAgICAgIG1fb3AgPSBHZXRMb2NhbDsKKyAgICAgICAgbV9v
cEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YXJpYWJsZSk7CisgICAgICAgIGNoaWxk
cmVuLnNldENoaWxkKEVkZ2UocGhpKSk7CisgICAgfQorICAgIAogICAgIEpTQ2VsbCogd2Vha0Nv
bnN0YW50KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcCgpID09IFdlYWtKU0NvbnN0YW50KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0
MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGksIE5vZGVE
b2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCiAgICAgbWFjcm8oRmx1c2gsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBtYWNybyhQaGFudG9tTG9jYWws
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBcCiAgICAgLyogR2V0
IHRoZSB2YWx1ZSBvZiBhIGxvY2FsIHZhcmlhYmxlLCB3aXRob3V0IGxpbmtpbmcgaW50byB0aGUg
VmFyaWFibGVBY2Nlc3NEYXRhICovXAogICAgIC8qIG5ldHdvcmsuIFRoaXMgaXMgb25seSB2YWxp
ZCBmb3IgdmFyaWFibGUgYWNjZXNzZXMgd2hvc2UgcHJlZGljdGlvbnMgb3JpZ2luYXRlZCAqL1wK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4o
KQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsK
KyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV91bmlmaWNhdGlvblN0YXRlID09IEdsb2JhbGx5VW5p
ZmllZCk7CisgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKICAgICAgICAgbV9jb3VudCA9IDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAJKHJldmlzaW9uIDE0MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiAr
NDksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyBpLS07
KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gJm1fZ3JhcGgu
bV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLT5pc1Jv
b3QoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVW5pZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJE
RkdHcmFwaC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBVbmlmaWNhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsK
K3B1YmxpYzoKKyAgICBVbmlmaWNhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQ
aGFzZShncmFwaCwgInVuaWZpY2F0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
cnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQ
Uyk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBMb2NhbGx5
VW5pZmllZCk7CisgICAgICAgIAorICAgICAgICAvLyBFbnN1cmUgdGhhdCBhbGwgUGhpIGZ1bmN0
aW9ucyBhcmUgdW5pZmllZC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0t
OykgeworICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJsb2NrLT5waGlzW3BoaUluZGV4XTsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gMDsgY2hpbGRJZHggPCBB
ZGphY2VuY3lMaXN0OjpTaXplOyArK2NoaWxkSWR4KSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghcGhpLT5jaGlsZHJlbi5jaGlsZChjaGlsZElkeCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHBoaS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnVuaWZ5KAorICAgICAgICAgICAgICAgICAgICAgICAgcGhp
LT5jaGlsZHJlbi5jaGlsZChjaGlsZElkeCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIEVuc3VyZSB0aGF0IGFsbCBwcmVkaWN0aW9ucyBhcmUgZml4ZWQgdXAgYmFzZWQgb24gdGhl
IHVuaWZpY2F0aW9uLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBkYXRhID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CisgICAg
ICAgICAgICBkYXRhLT5maW5kKCktPnByZWRpY3QoZGF0YS0+bm9uVW5pZmllZFByZWRpY3Rpb24o
KSk7CisgICAgICAgICAgICBkYXRhLT5maW5kKCktPm1lcmdlSXNDYXB0dXJlZChkYXRhLT5pc0Nh
cHR1cmVkKCkpOworICAgICAgICAgICAgZGF0YS0+ZmluZCgpLT5tZXJnZVN0cnVjdHVyZUNoZWNr
SG9pc3RpbmdGYWlsZWQoZGF0YS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPSBH
bG9iYWxseVVuaWZpZWQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3ZvaWQg
cGVyZm9ybVVuaWZpY2F0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIFVuaWZpY2F0aW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBo
YXNlPFVuaWZpY2F0aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdVbmlmaWNhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHVW5p
ZmljYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdy
YXBoOworCisvLyBVbmlmaWNhdGlvbjoKKy8vCisvLyBFeGFtaW5lcyBhbGwgUGhpIGZ1bmN0aW9u
cyBhbmQgZW5zdXJlcyB0aGF0IHRoZSB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMgYXJlCisvLyB1bmlm
aWVkLiBUaGlzIGNyZWF0ZXMgb3VyICJsaXZlLXJhbmdlIHNwbGl0IiB2aWV3IG9mIHZhcmlhYmxl
cy4KKworYm9vbCBwZXJmb3JtVW5pZmljYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdV
bmlmaWNhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE0MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gUGhpIGNoaWxkcmVuIGluIExvYWRTdG9yZSBmb3JtIGFyZSBpbnZhbGlkLgor
ICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJs
b2NrLT5pc1BoaUluZGV4KGkpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dy
YXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEwOSwxMCArMTEzLDIwIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFudG9tLCBH
ZXRMb2NhbCwgb3IgUGhpLCBteSBjaGlsZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCiAgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICBj
YXNlIEZsdXNoOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRv
bUxvY2FsOgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBl
ZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV91bmlmaWNhdGlvblN0YXRlID09IExv
Y2FsbHlVbmlmaWVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tOgorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiAh
aikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdl
KSwgZWRnZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xNDgsNiArMTYyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSksIG5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bG9jYWwgPSBub2RlLT5sb2NhbCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gUGhpIGNoaWxkcmVuIGluIExvYWRTdG9yZSBmb3JtIGFyZSBpbnZhbGlkLgorICAg
ICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJsb2Nr
LT5pc1BoaUluZGV4KGkpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBo
LmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE4OSwxMSArMjA3LDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3By
ZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1f
cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IEZsdXNoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gRmx1c2gKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGFudG9tTG9jYWwpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlID09IGVkZ2Uubm9kZSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMjMxLDYgKzI1MSwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIG5vZGVzSW5UaGlzQmxv
Y2suY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgICAgICBjYXNl
IEZsdXNoOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
Zm9ybSA9PSBMb2FkU3RvcmUgJiYgIWopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSwgZWRnZSksICFwaGlzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5u
b2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKQEAgLTI1Niw2ICsyODgsOSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgY2hlY2tPcGVyYW5kKAogICAgICAgICAgICAgICAgICAgICBibG9ja0lu
ZGV4LCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9jYWxQb3NpdGlvbnMsIGFyZ3VtZW50VG9PcGVy
YW5kKGkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lz
dGVyQWxsb2NhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0
MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDIwIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBuZWVkc05ld0xpbmUgPSB0cnVlOwogI2VuZGlmCiAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSB8fCBub2RlLT5v
cCgpID09IFBoaSB8fCBub2RlLT5vcCgpID09IEZsdXNoKQorICAgICAgICAgICAgICAgIGlmICgh
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9j
YWwpCisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAg
ICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFu
b2RlLT5jaGlsZDEoKS0+aGFzUmVzdWx0KCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRmly
c3QsIGNhbGwgdXNlIG9uIGFsbCBvZiB0aGUgY3VycmVudCBub2RlJ3MgY2hpbGRyZW4sIHRoZW4K
ICAgICAgICAgICAgICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBu
b2RlLiBXZSBkbyBzbyBpbiB0aGlzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186179</attachid>
            <date>2013-02-01 16:02:55 -0800</date>
            <delta_ts>2013-02-01 17:25:41 -0800</delta_ts>
            <desc>it might be done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>97302</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lv
biAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRz
IHsKICAgICBzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IFQmIHZhbHVlLCBQcmludFN0cmVhbSYgb3V0
KSB7IHZhbHVlLmR1bXAob3V0KTsgfQogfTsKIAorZW51bSBPcGVyYW5kS2luZCB7IEFyZ3VtZW50
T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxUPiA+CiBjbGFzcyBPcGVyYW5kcyB7CiBwdWJs
aWM6CkBAIC02Niw2ICs2OCwyOCBAQCBwdWJsaWM6CiAgICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkg
eyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQogICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KICAgICAKKyAgICB0ZW1wbGF0ZTxPcGVy
YW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBzaXplX3Qgc2l6ZUZvcigpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAg
cmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCk7CisgICAgICAgIHJldHVybiBudW1iZXJPZkxvY2Fs
cygpOworICAgIH0KKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBU
JiBhdEZvcihzaXplX3QgaWR4KQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFy
Z3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOworICAgICAg
ICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICB9CisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3Bl
cmFuZEtpbmQ+CisgICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICAgICBy
ZXR1cm4gYXJndW1lbnQoaWR4KTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7CisgICAgfQor
ICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAg
aWYgKHNpemUgPD0gbV9sb2NhbHMuc2l6ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzg3LDYgKzE3ODcsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToKICAgICBjYXNlIEZsdXNoOgorICAg
IGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE5MTMsNiArMTkxNCw3IEBAIGlubGluZSBi
b29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAg
ICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAg
IC8vIFRoZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgogICAg
ICAgICAgICAgc291cmNlID0gaW5WYXJpYWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcg
KzIzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgY2FzZSBQ
aGk6IHsKKyAgICAgICAgICAgICAgICBjYXNlIFBoaTogLyogRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg1NTUgKi8gewogICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRh
LT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTYzNSw4
ICs2MzUsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxv
Y2spOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoY2hhbmdlZCkKLSAgICAgICAg
ICAgIG1fZ3JhcGguY29sbGVjdEdhcmJhZ2UoKTsKKyAgICAgICAgaWYgKGNoYW5nZWQpIHsKKyAg
ICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9mb3Jt
ID0gTG9hZFN0b3JlOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gY2hhbmdl
ZDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQxMzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Nyw2NCArMjg3
LDMzIEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwogICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBt
X2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBtX2lubGluZVN0YWNrVG9wLT5tX2lubGlu
ZUNhbGxGcmFtZSk7CiAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGhhcyB0d28gZ29hbHM6IDEp
IGxpbmsgdG9nZXRoZXIgdmFyaWFibGUgYWNjZXNzIGRhdGFzLCBhbmQgMikKKyAgICAgICAgLy8g
dHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHJlZHVuZGFudCBHZXRMb2NhbHMuICgxKSBpcyByZXF1aXJl
ZCBmb3IKKyAgICAgICAgLy8gY29ycmVjdG5lc3MgLSBubyBvdGhlciBwaGFzZSB3aWxsIGVuc3Vy
ZSB0aGF0IGJsb2NrLWxvY2FsIHZhcmlhYmxlCisgICAgICAgIC8vIGFjY2VzcyBkYXRhIHVuaWZp
Y2F0aW9uIGlzIGRvbmUgY29ycmVjdGx5LiAoMikgaXMgcHVyZWx5IG9wcG9ydHVuaXN0aWMKKyAg
ICAgICAgLy8gYW5kIGlzIG1lYW50IGFzIGFuIGNvbXBpbGUtdGltZSBvcHRpbWl6YXRpb24gb25s
eS4KKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CisgICAg
ICAgIAogICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
Rmx1c2gpIHsKLSAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRo
ZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQotICAgICAgICAgICAgICAgIC8vIGJ1
dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBp
bgotICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KLSAgICAgICAgICAg
ICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFBoaSkgewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlSXNDYXB0dXJlZChpc0Nh
cHR1cmVkKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3Bl
Y3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSks
IG5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB2YXJp
YWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgdmFyaWFibGUt
Pm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
QVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2gpOwotCi0gICAgICAgICAgICBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBX
ZSB3aXNoIHRvIHVzZSB0aGUgc2FtZSB2YXJpYWJsZSBhY2Nlc3MgZGF0YSBhcyB0aGUgcHJldmlv
dXMgYWNjZXNzLAotICAgICAgICAgICAgICAgIC8vIGJ1dCBmb3IgYWxsIG90aGVyIHB1cnBvc2Vz
IHdlIHdhbnQgdG8gaXNzdWUgYSBsb2FkIHNpbmNlIGZvciBhbGwgd2UKLSAgICAgICAgICAgICAg
ICAvLyBrbm93LCBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLCB0aGUgbG9jYWwgaGFzIGJl
ZW4gY2xvYmJlcmVkLgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB3ZSBsaW5rIHRvIHRoZSBQaGkgbm9kZSwgbm90IHRvIHRoZSBHZXRMb2NhbC4KLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2Nh
bCB8fCBub2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgTm9kZSogbmV3R2V0TG9jYWwgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKAotICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkpLCBub2RlKSk7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5ld0dldExvY2FsOwotICAgICAgICAg
ICAgICAgIHJldHVybiBuZXdHZXRMb2NhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRM
b2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcHJlc2VydmVk
VmFycy5zZXQob3BlcmFuZCk7CisgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNj
ZWVzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBD
aGVjayBmb3IgcmVhZHMgb2YgdGVtcG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3MsCi0gICAgICAg
IC8vIGV4cGFuZCBtX3ByZXNlcnZlZFZhcnMgdG8gY292ZXIgdGhlc2UuCi0gICAgICAgIG1fcHJl
c2VydmVkVmFycy5zZXQob3BlcmFuZCk7Ci0gICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5k
LCBpc0NhcHR1cmVkKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgo
UGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7Ci0gICAgICAgIG1fbG9jYWxQaGlTdGFj
ay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBvcGVyYW5kKSk7Ci0g
ICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0
TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAgICAgbm9kZSA9
IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZv
KHZhcmlhYmxlKSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxv
Y2FsKG9wZXJhbmQpID0gbm9kZTsKLSAgICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUob3BlcmFuZCwgbm9kZSk7Ci0gICAgICAg
IAogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25l
ZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQpAQCAt
MzczLDYyICszNDIsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBib29s
IGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kKTsKIAorICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOworICAgICAgICAKICAgICAgICAgaWYgKG5v
ZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEZsdXNoKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVHdvIHBvc3NpYmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sgd2FudHMgdGhlIGxv
Y2FsIHRvIGJlIGxpdmUKLSAgICAgICAgICAgICAgICAvLyBidXQgaGFzIG5vdCBsb2FkZWQgaXRz
IHZhbHVlLCBvciBpdCBoYXMgbG9hZGVkIGl0cyB2YWx1ZSwgaW4KLSAgICAgICAgICAgICAgICAv
LyB3aGljaCBjYXNlIHdlJ3JlIGRvbmUuCi0gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsK
LSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgo
R2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1l
bnQpID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNl
dExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlz
Q2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFNldEFyZ3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgZ2V0dGlu
ZyBhbiBhcmd1bWVudCBpbiB0aGUgZmlyc3QgYmFzaWMgYmxvY2s7IGxpbmsKLSAgICAgICAgICAg
ICAgICAvLyB0aGUgR2V0TG9jYWwgdG8gdGhlIFNldEFyZ3VtZW50LgotICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLT5sb2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3Bl
cmFuZCkpOwotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICBub2RlID0gaW5qZWN0
TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFi
bGUpLCBub2RlKSk7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwotICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNDYXB0
dXJlZCkgewotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQotICAg
ICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0
TG9jYWwgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCB8
fCBub2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluamVjdExhenlP
cGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpKSwgbm9kZSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFy
aWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIHZhcmlhYmxl
LT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgIHJldHVy
biBub2RlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBT
ZXRMb2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIHJldHVy
biBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwog
ICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7Ci0KLSAgICAgICAg
Tm9kZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsK
LSAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVu
dEJsb2NrLCBwaGksIGFyZ3VtZW50KSk7Ci0gICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFu
ZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0Rh
dGEpLCBwaGkpKTsKKyAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24o
YWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkpOwogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7Ci0gICAg
ICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50
Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBub2Rl
OwogICAgIH0KICAgICB2b2lkIHNldEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwg
U2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKQEAgLTQ5Myw2MSArNDI1LDIyIEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBmbHVzaERpcmVjdChpbnQgb3BlcmFuZCwgQXJndW1l
bnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBjaGVjayBpZiB0aGUgc2FtZSBvcGVyYW5kIGhhZCBhbHJlYWR5IGJlZW4gZmx1
c2hlZCB0bwotICAgICAgICAvLyBzb21lIG90aGVyIGxvY2FsIHZhcmlhYmxlLgotICAgICAgICAK
ICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFu
ZCwgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAKICAgICAg
ICAgQVNTRVJUKG9wZXJhbmQgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgICAg
IAotICAgICAgICBOb2RlKiBub2RlOwotICAgICAgICBpbnQgaW5kZXg7Ci0gICAgICAgIGlmIChv
cGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewotICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5k
VG9Bcmd1bWVudChvcGVyYW5kKTsKLSAgICAgICAgICAgIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGluZGV4ID0gb3BlcmFuZDsKLSAgICAgICAgICAgIG5vZGUgPSBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KTsKLSAgICAgICAgICAgIG1fcHJlc2VydmVk
VmFycy5zZXQob3BlcmFuZCk7Ci0gICAgICAgIH0KKyAgICAgICAgTm9kZSogbm9kZSA9IG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgCisg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CiAgICAgICAgIAogICAgICAgICBp
ZiAobm9kZSkgewotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAg
ICBjYXNlIEZsdXNoOgotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdldExvY2FsOgot
ICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+
b3AoKSAhPSBGbHVzaCAmJiBub2RlLT5vcCgpICE9IEdldExvY2FsKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gRW1pdCBhIEZsdXNoIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBhbHJl
YWR5IGZsdXNoZWQgaXQuCi0gICAgICAgICAgICAvLyBUaGlzIGdpdmVzIHVzIGd1aWRhbmNlIHRv
IHNlZSB0aGF0IHRoZSB2YXJpYWJsZSBhbHNvIG5lZWRzIHRvIGJlIGZsdXNoZWQKLSAgICAgICAg
ICAgIC8vIGZvciBhcmd1bWVudHMsIGV2ZW4gaWYgaXQgYWxyZWFkeSBoYWQgdG8gYmUgZmx1c2hl
ZCBmb3Igb3RoZXIgcmVhc29ucy4KLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAg
ICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKLSAgICAg
ICAgICAgIGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2Rl
KTsKLSAgICAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQotICAgICAgICAgICAgICAgIGFy
Z3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlQWNjZXNzRGF0YSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVk
KGlzQ2FwdHVyZWQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3
VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICAKLSAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7Ci0gICAgICAgIE5vZGUqIHBoaSA9IGFkZFRv
R3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CiAgICAgICAgIG5vZGUgPSBh
ZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKLSAgICAg
ICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICBtX2FyZ3Vt
ZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5k
ZXgpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1l
bnQoaW5kZXgpID0gbm9kZTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5vZGUpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3Vy
cmVudEJsb2NrLCBwaGksIGluZGV4KSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGU7Ci0gICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKGluZGV4LCBub2RlKTsKLSAg
ICAgICAgfQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCkgPSBub2RlOwogICAgICAgICBpZiAoYXJndW1lbnRQb3NpdGlvbikKICAgICAgICAg
ICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlQWNjZXNzRGF0YSk7CiAg
ICAgfQpAQCAtMjAyNCw3ICsxOTE3LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7CiAgICAgICAgICAgICBO
b2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyh2YXJpYWJs
ZSkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmd1bWVudF0gPSBzZXRBcmd1
bWVudDsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJn
dW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQs
IHNldEFyZ3VtZW50KTsKICAgICAgICAgfQogICAgIH0KQEAgLTMyMTMsMTUxICszMTA1LDYgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIH0KIH0KIAotdGVt
cGxhdGU8Qnl0ZUNvZGVQYXJzZXI6OlBoaVN0YWNrVHlwZSBzdGFja1R5cGU+Ci12b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQotewotICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5
LCAxNj4mIHBoaVN0YWNrID0gKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IG1fYXJn
dW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsKLSAgICAKLSAgICB3aGlsZSAoIXBoaVN0
YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBQaGlTdGFja0VudHJ5IGVudHJ5ID0gcGhpU3RhY2su
bGFzdCgpOwotICAgICAgICBwaGlTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIAotICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyA9IGVudHJ5
Lm1fYmxvY2stPm1fcHJlZGVjZXNzb3JzOwotICAgICAgICB1bnNpZ25lZCB2YXJObyA9IGVudHJ5
Lm1fdmFyTm87Ci0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclBoaSA9IGVudHJ5
Lm1fcGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgIEhhbmRsaW5nIHBoaSBlbnRy
eSBmb3IgdmFyICV1LCBwaGkgQCV1LlxuIiwgZW50cnkubV92YXJObywgZW50cnkubV9waGkpOwot
I2VuZGlmCi0gICAgICAgIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWRlY2Vz
c29ycy5zaXplKCk7ICsraSkgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgIERlYWxpbmcgd2l0aCBwcmVkZWNlc3Nv
ciBibG9jayAldS5cbiIsIHByZWRlY2Vzc29yc1tpXSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JCbG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKLQotICAgICAgICAgICAgTm9kZSomIHZhciA9IChz
dGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQodmFyTm8pIDogcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRU
YWlsLmxvY2FsKHZhck5vKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogdmFsdWVJ
blByZWRlY2Vzc29yID0gdmFyOwotICAgICAgICAgICAgaWYgKCF2YWx1ZUluUHJlZGVjZXNzb3Ip
IHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIiAgICAgIERpZCBub3QgZmluZCBub2RlLCBhZGRpbmcgcGhpLlxuIik7
Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IGluc2VydFBo
aU5vZGUoT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShzdGFja1R5cGUgPT0gQXJndW1lbnRQ
aGlTdGFjayA/IGFyZ3VtZW50VG9PcGVyYW5kKHZhck5vKSA6IHN0YXRpY19jYXN0PGludD4odmFy
Tm8pLCBmYWxzZSkpLCBwcmVkZWNlc3NvckJsb2NrKTsKLSAgICAgICAgICAgICAgICB2YXIgPSB2
YWx1ZUluUHJlZGVjZXNzb3I7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrVHlwZSA9PSBBcmd1
bWVudFBoaVN0YWNrKQotICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJp
YWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUodmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nv
cik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3Nv
ckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUodmFyTm8sIHZhbHVlSW5Q
cmVkZWNlc3Nvcik7Ci0gICAgICAgICAgICAgICAgcGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50
cnkocHJlZGVjZXNzb3JCbG9jaywgdmFsdWVJblByZWRlY2Vzc29yLCB2YXJObykpOwotICAgICAg
ICAgICAgfSBlbHNlIGlmICh2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gR2V0TG9jYWwpIHsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgIEZvdW5kIEdldExvY2FsIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNl
c3Nvci0+aW5kZXgoKSk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8g
ZW5zdXJlIHRoYXQgdGhlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXJlIGlkZW50aWNhbCBiZXR3ZWVu
IHRoZQotICAgICAgICAgICAgICAgIC8vIEdldExvY2FsIGFuZCBpdHMgYmxvY2stbG9jYWwgUGhp
LiBTdHJpY3RseSBzcGVha2luZyB3ZSBvbmx5IG5lZWQgdGhlIHR3bwotICAgICAgICAgICAgICAg
IC8vIHRvIGJlIHVuaWZpZWQuIEJ1dCBmb3IgZWZmaWNpZW5jeSwgd2Ugd2FudCB0aGUgY29kZSB0
aGF0IGNyZWF0ZXMgR2V0TG9jYWxzCi0gICAgICAgICAgICAgICAgLy8gYW5kIFBoaXMgdG8gdHJ5
IHRvIHJldXNlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KLSAgICAg
ICAgICAgICAgICBBU1NFUlQodmFsdWVJblByZWRlY2Vzc29yLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KSA9PSB2YWx1ZUluUHJlZGVjZXNzb3ItPmNoaWxkMSgpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0g
dmFsdWVJblByZWRlY2Vzc29yLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAg
ICAgICBkYXRhTG9nRigiICAgICAgRm91bmQgQCV1LlxuIiwgdmFsdWVJblByZWRlY2Vzc29yLT5p
bmRleCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKAotICAg
ICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBTZXRMb2NhbAotICAgICAg
ICAgICAgICAgIHx8IHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBQaGkKLSAgICAgICAgICAg
ICAgICB8fCB2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAg
ICB8fCAodmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IFNldEFyZ3VtZW50ICYmIHN0YWNrVHlw
ZSA9PSBBcmd1bWVudFBoaVN0YWNrKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogZGF0YUZvclByZWRlY2Vzc29yID0gdmFsdWVJblByZWRlY2Vzc29yLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZGF0YUZvclBy
ZWRlY2Vzc29yLT51bmlmeShkYXRhRm9yUGhpKTsKLQotICAgICAgICAgICAgTm9kZSogcGhpTm9k
ZSA9IGVudHJ5Lm1fcGhpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBSZWYgY291bnQgb2YgQCV1ID0gJXUuXG4i
LCBwaGlOb2RlLT5pbmRleCgpLCBwaGlOb2RlLT5yZWZDb3VudCgpKTsKLSNlbmRpZgotICAgICAg
ICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFJlZmZp
bmcgQCV1LlxuIiwgdmFsdWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQxKCkpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRp
bmcgQCV1LT5jaGlsZDEgPSBAJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCB2YWx1ZUluUHJlZGVj
ZXNzb3IpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hp
bGQxKEVkZ2UodmFsdWVJblByZWRlY2Vzc29yKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJl
biBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4KCkpOwotICAgICAgICAgICAgICAgIHBoaU5vZGUt
PmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDIoKSkgewotI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAg
ICAgU2V0dGluZyBAJXUtPmNoaWxkMiA9IEAldS5cbiIsIHBoaU5vZGUtPmluZGV4KCksIHZhbHVl
SW5QcmVkZWNlc3Nvcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJl
bi5zZXRDaGlsZDIoRWRnZSh2YWx1ZUluUHJlZGVjZXNzb3IpKTsKLSNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAg
IENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAg
cGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMygpKSB7Ci0jaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQzID0gQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgo
KSwgdmFsdWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHBoaU5vZGUt
PmNoaWxkcmVuLnNldENoaWxkMyhFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwotI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
RigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsKLSAgICAgICAg
ICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbmV3UGhp
ID0gaW5zZXJ0UGhpTm9kZShPcEluZm8oZGF0YUZvclBoaSksIGVudHJ5Lm1fYmxvY2spOwotICAg
ICAgICAgICAgCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAg
ICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNwbGl0dGluZyBAJXUsIGNyZWF0ZWQgQCV1LlxuIiwg
cGhpTm9kZS0+aW5kZXgoKSwgbmV3UGhpLT5pbmRleCgpKTsKLSNlbmRpZgotCi0gICAgICAgICAg
ICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihu
ZXdQaGkpOwotCi0gICAgICAgICAgICBuZXdQaGktPmNoaWxkcmVuID0gcGhpTm9kZS0+Y2hpbGRy
ZW47Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAg
ICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBuZXdQaGktPmluZGV4KCkp
OwotICAgICAgICAgICAgbmV3UGhpLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKLSAg
ICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBwaGlOb2Rl
LT5jaGlsZHJlbi5pbml0aWFsaXplKG5ld1BoaSwgdmFsdWVJblByZWRlY2Vzc29yLCAwKTsKLQot
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4KCkpOwotICAg
ICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAg
ICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6Zml4VmFyaWFibGVBY2Nlc3NQcmVkaWN0aW9ucygpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6
ZSgpOyArK2kpIHsKQEAgLTM3MzAsMTQgKzM0NzcsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSgpCiAgICAgZGF0YUxvZ0YoIlByb2Nlc3NpbmcgbG9jYWwgdmFyaWFibGUgcGhpcy5cbiIp
OwogI2VuZGlmCiAgICAgCi0gICAgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXggPSBtX2N1cnJlbnRJ
bmRleDsKLSAgICAKLSAgICBwcm9jZXNzUGhpU3RhY2s8TG9jYWxQaGlTdGFjaz4oKTsKLSNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgZGF0YUxvZ0YoIlByb2Nl
c3NpbmcgYXJndW1lbnQgcGhpcy5cbiIpOwotI2VuZGlmCi0gICAgcHJvY2Vzc1BoaVN0YWNrPEFy
Z3VtZW50UGhpU3RhY2s+KCk7Ci0KICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKICAgICAgICAgQVNTRVJUKGJsb2NrKTsKQEAgLTM3NDUsMjcgKzM0ODQsNiBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Js
b2NrSW5kZXhdLmNsZWFyKCk7CiAgICAgfQogICAgIAotICAgIGZpeFZhcmlhYmxlQWNjZXNzUHJl
ZGljdGlvbnMoKTsKLSAgICAKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKLSAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
ZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX29zckVudHJ5Qnl0ZWNvZGVJbmRl
eCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKAotICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKSk7Ci0gICAg
ICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBBU1NFUlQobm9kZS0+aGFzTG9jYWwoKSk7Ci0gICAgICAgICAgICBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdCgKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkZyb21WYWx1
ZShtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlc1tpXSkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IAogICAgIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJzID0gbV9wcmVzZXJ2ZWRWYXJzOwogICAgIG1f
Z3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsKICAgICBtX2dyYXBoLm1fcGFyYW1ldGVy
U2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9j
a3MoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApLCBOb0Jsb2NrKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExMyw2ICsxMTQsNyBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmVtZUxvZ2dp
bmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcygKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmxvY2tJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCkBAIC0xMjYsNiArMTI4
LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4
dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1
bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbkJsb2NrSW5kZXggPSBt
X2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJbmRleCA9IG1fZ3Jh
cGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIApAQCAtMTU0LDYgKzE1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiQ0ZHU2ltcGxpZnk6IEJyYW5jaCB0byBzYW1lIHN1Y2Nl
c3NvciBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIHRhcmdldEJsb2NrSW5kZXgpOwogI2Vu
ZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrSW5kZXgsIHRhcmdldEJs
b2NrSW5kZXgsIE5vQmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0yNTAsMTAyICsyNTQs
MjQgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKGJsb2NrKTsKICAgICAgICAgQVNTRVJUKCFi
bG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAKLSAgICAgICAgLy8gMSkgUmVtb3ZlIHJlZmVy
ZW5jZXMgZnJvbSBvdGhlciBibG9ja3MgdG8gdGhpcyBibG9jay4KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9ncmFwaC5udW1TdWNjZXNzb3JzKGJsb2NrKTsgaS0tOykKLSAgICAgICAgICAg
IGZpeFBoaXMoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIGkpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgt
LTspCisgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhp
SW5kZXhdKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgp
OyBub2RlSW5kZXgtLTspCisgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxv
Y2stPmF0KG5vZGVJbmRleCkpOwogICAgICAgICAKLSAgICAgICAgLy8gMikgS2lsbCB0aGUgYmxv
Y2sKICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5jbGVhcigpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgaW50IG9wZXJhbmQpCisgICAgdm9pZCBrZWVwT3BlcmFuZEFsaXZl
KEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2ssIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICBOb2RlKiBu
b2RlID0gamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsK
ICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAobm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCi0gICAgICAgICAgICBub2Rl
ID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChub2RlLT5vcCgpICE9
IFNldExvY2FsKTsKICAgICAgICAgYmxvY2stPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICBtX2dy
YXBoLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3Jp
Z2luLCBub2RlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaXhQb3NzaWJsZUdldExvY2FsKEJh
c2ljQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdlLCBib29sIGNoYW5nZVJlZikKLSAgICB7Ci0gICAg
ICAgIE5vZGUqIGNoaWxkID0gZWRnZS5ub2RlKCk7Ci0gICAgICAgIGlmIChjaGlsZC0+b3AoKSAh
PSBHZXRMb2NhbCkKLSAgICAgICAgICAgIHJldHVybjsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgQ29uc2lkZXJpbmcgR2V0
TG9jYWwgYXQgQCV1LCBsb2NhbCByJWQuXG4iLCBub2RlLT5pbmRleCgpLCBjaGlsZC0+bG9jYWwo
KSk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGNoaWxkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXND
YXB0dXJlZCgpKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBjYXB0dXJlZC5cbiIpOwotI2VuZGlm
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTm9kZSogb3JpZ2luYWxO
b2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLT5sb2NhbCgpKTsKLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dG
KCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4iLCBvcmlnaW5hbE5vZGUtPmlu
ZGV4KCkpOwotI2VuZGlmCi0gICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGUpOwotI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICAg
ICAgT3JpZ2luYWwgaGFzIGxvY2FsIHIlZC5cbiIsIG9yaWdpbmFsTm9kZS0+bG9jYWwoKSk7Ci0j
ZW5kaWYKLSAgICAgICAgQVNTRVJUKGNoaWxkLT5sb2NhbCgpID09IG9yaWdpbmFsTm9kZS0+bG9j
YWwoKSk7Ci0gICAgICAgIC8vIFBvc3NpYmlsaXRpZXM6Ci0gICAgICAgIC8vIFNldExvY2FsIC0+
IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhpbmcgdGhhdCBp
cyBpbW1lZGlhdGVseQotICAgICAgICAvLyAgICAgYXZhaWxhYmxlIGluIHRoZSBmaXJzdCBibG9j
ayB3aXRoIGEga25vd24gTm9kZUluZGV4LgotICAgICAgICAvLyBHZXRMb2NhbCAtPiB0aGUgc2Vj
b25kQmxvY2sgaXMgZ2V0dGluZyB0aGUgdmFsdWUgb2Ygc29tZXRoaW5nIHRoYXQgdGhlIGZpcnN0
Ci0gICAgICAgIC8vICAgICBibG9jayBhbHNvIGdldHMuCi0gICAgICAgIC8vIFBoaSAtPiB0aGUg
c2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9wZXJhbmQgdGhhdCB0
aGUgZmlyc3QgYmxvY2sKLSAgICAgICAgLy8gICAgIHdhcyBhbHNvIGFza2luZyBmb3Iga2VlcC1h
bGl2ZSBvbi4KLSAgICAgICAgLy8gU2V0QXJndW1lbnQgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFz
a2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlCi0gICAgICAgIC8vICAg
ICBmaXJzdCBibG9jayB3YXMga2VlcGluZyBhbGl2ZSBieSB2aXJ0dWUgb2YgdGhlIGZpcnN0Qmxv
Y2sgYmVpbmcgdGhlIHJvb3QgYW5kCi0gICAgICAgIC8vICAgICB0aGUgb3BlcmFuZCBiZWluZyBh
biBhcmd1bWVudC4KLSAgICAgICAgLy8gRmx1c2ggLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2lu
ZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlIGZpcnN0Ci0gICAgICAgIC8v
ICAgICBibG9jayB3YXMgZm9yY2luZyB0byBiZSBhbGl2ZSwgc28gdGhlIHNlY29uZCBibG9jayBz
aG91bGQgcmVmZXIgY2hpbGQgb2YKLSAgICAgICAgLy8gICAgIHRoZSBmbHVzaC4KLSAgICAgICAg
aWYgKG9yaWdpbmFsTm9kZS0+b3AoKSA9PSBGbHVzaCkKLSAgICAgICAgICAgIG9yaWdpbmFsTm9k
ZSA9IG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBzd2l0Y2ggKG9yaWdp
bmFsTm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBp
ZiAoY2hhbmdlUmVmKQotICAgICAgICAgICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
LSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBTZXRMb2NhbC5cbiIpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKGVkZ2UsIG9yaWdpbmFsTm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBHZXRMb2NhbDogewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBHZXRM
b2NhbC5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQoZWRnZSwgb3Jp
Z2luYWxOb2RlLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIEdldExv
Y2FsIHRoYXQgcG9pbnRzIHRvIGEgY2hpbGQgR2V0TG9jYWwgdGhhdCBpcyBkZWFkLCB0aGVuCi0g
ICAgICAgICAgICAvLyB3ZSBoYXZlIG5vIG5lZWQgdG8gZG8gYW55dGhpbmc6IHRoaXMgb3JpZ2lu
YWwgR2V0TG9jYWwgaXMgc3RpbGwgdmFsaWQuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIFBoaToKLSAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewotICAgICAg
ICBpZiAoY2hhbmdlUmVmKQotICAgICAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBQaGkvU2V0QXJndW1lbnQuXG4iKTsK
LSNlbmRpZgotICAgICAgICAgICAgLy8gS2VlcCB0aGUgR2V0TG9jYWwhCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAg
ICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwg
UGhhbnRvbUxvY2FsLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgamV0dGlzb25CbG9jayhC
bG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0dGlzb25lZEJsb2NrSW5kZXgsIENv
ZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luKQpAQCAtMzYxLDM4ICsyODcsNiBAQCBwcml2YXRl
OgogICAgICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGJsb2NrSW5kZXgsIGpldHRpc29u
ZWRCbG9ja0luZGV4KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmaXhQaGlzKEJsb2NrSW5kZXgg
c291cmNlQmxvY2tJbmRleCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbkJsb2NrSW5kZXgpCi0gICAg
ewotICAgICAgICBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nbc291
cmNlQmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Rlc3RpbmF0aW9uQmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIGlmICghZGVzdGluYXRpb25CbG9jaykgewotICAgICAgICAgICAgLy8gSWYgd2UncmUgdHJ5
aW5nIHRvIGtpbGwgb2ZmIHRoZSBzb3VyY2UgYmxvY2sgYW5kIHRoZSBkZXN0aW5hdGlvbiBibG9j
ayBpcyBhbHJlYWR5Ci0gICAgICAgICAgICAvLyBkZWFkLCB0aGVuIHdlJ3JlIGRvbmUhCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBkZXN0aW5hdGlvbkJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBOb2Rl
KiBwaGlOb2RlID0gZGVzdGluYXRpb25CbG9jay0+cGhpc1tpXTsKLSAgICAgICAgICAgIE5vZGUq
IG15Tm9kZSA9IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwaGlOb2RlLT5s
b2NhbCgpKTsKLSAgICAgICAgICAgIGlmICghbXlOb2RlKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VGhpcyB3aWxsIGhhcHBlbiBpZiB0aGVyZSBpcyBhIHBoaSBpbiB0aGUgZGVzdGluYXRpb24gdGhh
dCByZWZlcnMgaW50bwotICAgICAgICAgICAgICAgIC8vIHRoZSBkZXN0aW5hdGlvbiBpdHNlbGYu
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0jaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoCi0gICAg
ICAgICAgICAgICAgIkNvbnNpZGVyaW5nIHJlbW92aW5nIHJlZmVyZW5jZSBmcm9tIHBoaSBAJXUg
dG8gQCV1IG9uIGxvY2FsIHIlZDoiLAotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmluZGV4KCks
IG15Tm9kZS0+aW5kZXgoKSwgcGhpTm9kZS0+bG9jYWwoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAg
IGlmIChteU5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgbXlOb2RlID0g
bXlOb2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytqKQotICAgICAgICAgICAgICAgIHJlbW92ZVBv
dGVudGlhbGx5RGVhZFBoaVJlZmVyZW5jZShteU5vZGUsIHBoaU5vZGUsIGosIHNvdXJjZUJsb2Nr
LT5pc1JlYWNoYWJsZSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0K
LSAgICAKICAgICB2b2lkIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoQmxvY2tJbmRleCBibG9j
a0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4KQogICAgIHsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC01ODEsODggKzQ3NSw4IEBAIHBy
aXZhdGU6CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnBoaXMu
c2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBmaXJzdEJsb2NrLT5waGlzLmFwcGVuZChzZWNvbmRC
bG9jay0+cGhpc1tpXSk7CiAKLSAgICAgICAgLy8gQmVmb3JlIHdlIHN0YXJ0IGNoYW5naW5nIHRo
ZSBzZWNvbmQgYmxvY2sncyBncmFwaCwgcmVjb3JkIHdoYXQgbm9kZXMgd291bGQKLSAgICAgICAg
Ly8gYmUgcmVmZXJlbmNlZCBieSBzdWNjZXNzb3JzIG9mIHRoZSBzZWNvbmQgYmxvY2suCi0gICAg
ICAgIE9wZXJhbmRzPE9wZXJhbmRTdWJzdGl0dXRpb24+IHN1YnN0aXR1dGlvbnMoCi0gICAgICAg
ICAgICBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCksCi0g
ICAgICAgICAgICBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkp
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQotICAgICAgICAgICAgcmVjb3JkUG9zc2li
bGVJbmNvbWluZ1JlZmVyZW5jZShzZWNvbmRCbG9jaywgc3Vic3RpdHV0aW9ucywgYXJndW1lbnRU
b09wZXJhbmQoaSkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAgICAgICAgcmVj
b3JkUG9zc2libGVJbmNvbWluZ1JlZmVyZW5jZShzZWNvbmRCbG9jaywgc3Vic3RpdHV0aW9ucywg
aSk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+c2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBzZWNvbmRCbG9jay0+YXQoaSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGJvb2wgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAg
ICAgICAgICBjYXNlIFBoYW50b206IHsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
MSgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICAg
ICAgTm9kZSogcG9zc2libGVMb2NhbE9wID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAg
ICAgICAgICAgIGlmIChwb3NzaWJsZUxvY2FsT3AtPm9wKCkgIT0gR2V0TG9jYWwKLSAgICAgICAg
ICAgICAgICAgICAgJiYgcG9zc2libGVMb2NhbE9wLT5oYXNMb2NhbCgpCi0gICAgICAgICAgICAg
ICAgICAgICYmICFwb3NzaWJsZUxvY2FsT3AtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBmaXJzdEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChwb3NzaWJsZUxvY2FsT3AtPmxvY2FsKCkpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSwgc2V0TG9jYWwtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VCghbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2Rl
LT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAg
ICAgICAgICAgIC8vIEEgRmx1c2ggY291bGQgdXNlIGEgR2V0TG9jYWwsIFNldExvY2FsLCBTZXRB
cmd1bWVudCwgb3IgYSBQaGkuCi0gICAgICAgICAgICAgICAgLy8gSWYgaXQgdXNlcyBhIEdldExv
Y2FsLCBpdCdsbCBiZSB0YWtlbiBjYXJlIG9mIGJlbG93LiBJZiBpdCB1c2VzIGEKLSAgICAgICAg
ICAgICAgICAvLyBTZXRMb2NhbCBvciBTZXRBcmd1bWVudCwgdGhlbiBpdCBtdXN0IGJlIHVzaW5n
IGEgbm9kZSBmcm9tIHRoZQotICAgICAgICAgICAgICAgIC8vIHNhbWUgYmxvY2suIEJ1dCBpZiBp
dCB1c2VzIGEgUGhpLCB0aGVuIHdlIHNob3VsZCByZWRpcmVjdCBpdCB0bwotICAgICAgICAgICAg
ICAgIC8vIHVzZSB3aGF0ZXZlciB0aGUgZmlyc3QgYmxvY2sgYWR2ZXJ0aXNlZCBhcyBhIHRhaWwg
b3BlcmFuZC4KLSAgICAgICAgICAgICAgICAvLyBTaW1pbGFybHkgZm9yIEdldExvY2FsOyBpdCBj
b3VsZCB1c2UgYW55IG9mIHRob3NlIGV4Y2VwdCBmb3IKLSAgICAgICAgICAgICAgICAvLyBHZXRM
b2NhbC4gSWYgaXQgdXNlcyBhIFBoaSB0aGVuIGl0IHNob3VsZCBiZSByZWRpcmVjdGVkIHRvIHVz
ZSBhCi0gICAgICAgICAgICAgICAgLy8gUGhpIGZyb20gdGhlIHRhaWwgb3BlcmFuZC4KLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgIT0gUGhpKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBh
dEZpcnN0ID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNo
aWxkMSgpLCBFZGdlKHNraXBHZXRMb2NhbChhdEZpcnN0KSksIG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOwotICAgICAgICAgICAgICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghY2hpbGRyZW5BbHJlYWR5Rml4ZWQpIHsKLSAg
ICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBHZXRMb2Nh
bCwgdGhlbiB3ZSBtaWdodCBsaWtlIHRvIGZpeCBpdC4KLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVu
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywg
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgY2hhbmdlUmVmKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoISFub2RlLT5jaGlsZDEo
KSkgewotICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ss
IG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoISFub2RlLT5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9z
c2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgY2hhbmdl
UmVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW5vZGUtPmNoaWxkMygpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywg
bm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpcnN0
QmxvY2stPmFwcGVuZChub2RlKTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNlY29uZEJsb2NrLT5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGZpcnN0QmxvY2st
PmFwcGVuZChzZWNvbmRCbG9jay0+YXQoaSkpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKGZp
cnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAgCkBAIC02ODQsMzcgKzQ5
OCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2tJbmRleCAhPSBOb0Js
b2NrKQogICAgICAgICAgICAgZml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhmaXJzdEJsb2NrSW5k
ZXgsIGpldHRpc29uZWRCbG9ja0luZGV4KTsKICAgICAgICAgCi0gICAgICAgIC8vIEZpeCB1cCB0
aGUgdmFyaWFibGVzIGF0IHRhaWwuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vj
b25kQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCi0gICAg
ICAgICAgICBmaXhUYWlsT3BlcmFuZChmaXJzdEJsb2NrLCBzZWNvbmRCbG9jaywgYXJndW1lbnRU
b09wZXJhbmQoaSksIHN1YnN0aXR1dGlvbnMpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQot
ICAgICAgICAgICAgZml4VGFpbE9wZXJhbmQoZmlyc3RCbG9jaywgc2Vjb25kQmxvY2ssIGksIHN1
YnN0aXR1dGlvbnMpOwotICAgICAgICAKLSAgICAgICAgLy8gRml4IHVwIHRoZSByZWZlcmVuY2Vz
IGZyb20gb3VyIG5ldyBzdWNjZXNzb3JzLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dy
YXBoLm51bVN1Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGktLTspIHsKLSAgICAgICAgICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoZmly
c3RCbG9jaywgaSldLmdldCgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IHN1Y2Nlc3Nvci0+cGhpcy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIE5vZGUqIHBo
aU5vZGUgPSBzdWNjZXNzb3ItPnBoaXNbal07Ci0gICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2VS
ZWYgPSBwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpOwotICAgICAgICAgICAgICAgIE9wZXJhbmRT
dWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5vcGVyYW5kKHBoaU5vZGUt
PmxvY2FsKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgUGVyZm9ybWluZyBvcGVyYW5kIHN1YnN0aXR1dGlv
biAiLCBzdWJzdGl0dXRpb24sICIuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGlmICgh
cGhpTm9kZS0+Y2hpbGQxKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQp
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQocGhpTm9kZS0+Y2hpbGRy
ZW4uY2hpbGQxKCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkgPT0gc3Vic3RpdHV0
aW9uLm9sZENoaWxkKQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKHBo
aU5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJl
Zik7Ci0gICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygp
ID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5j
aGFuZ2VDaGlsZChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgc3Vic3RpdHV0aW9uLm5ld0No
aWxkLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAogICAg
ICAgICBmaXJzdEJsb2NrLT52YWx1ZXNBdFRhaWwgPSBzZWNvbmRCbG9jay0+dmFsdWVzQXRUYWls
OwogICAgICAgICBmaXJzdEJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gPSBzZWNvbmRCbG9jay0+
Y2ZhQnJhbmNoRGlyZWN0aW9uOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgQ1BTUmV0aHJlYWRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ1BT
UmV0aHJlYWRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJD
UFMgcmV0aHJlYWRpbmciKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAg
IHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgZnJlZVVubmVjZXNzYXJ5Tm9kZXMo
KTsKKyAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MoKTsKKyAgICAgICAgcHJvcGFn
YXRlUGhpczxBcmd1bWVudE9wZXJhbmQ+KCk7CisgICAgICAgIHByb3BhZ2F0ZVBoaXM8TG9jYWxP
cGVyYW5kPigpOworICAgICAgICBtX2dyYXBoLmNvbGxlY3RHYXJiYWdlKCk7CisgICAgICAgIAor
ICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVhZGVkQ1BTOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgCisgICAgdm9pZCBmcmVlVW5uZWNlc3NhcnlOb2Rl
cygpCisgICAgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNT
RVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHVuc2ln
bmVkIGZyb21JbmRleCA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCB0b0luZGV4ID0gMDsKKyAg
ICAgICAgICAgIHdoaWxlIChmcm9tSW5kZXggPCBibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChmcm9tSW5kZXgrKyk7CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAg
ICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS0+b3Ao
KSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21Mb2NhbCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBOb3A6CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBu
b2RlLT5yZXBsYWNlbWVudCA9IDA7IC8vIFJlc2V0IHRoZSByZXBsYWNlbWVudCBzaW5jZSB0aGUg
bmV4dCBwaGFzZSB3aWxsIHVzZSBpdC4KKyAgICAgICAgICAgICAgICBibG9jay0+YXQodG9JbmRl
eCsrKSA9IG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBibG9jay0+cmVzaXplKHRv
SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4
ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgICAg
IGJsb2NrLT5waGlzLnJlc2l6ZSgwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0ZW1w
bGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICB2b2lkIGNsZWFyVmFyaWFibGVzQXRI
ZWFkQW5kVGFpbCgpCisgICAgeworICAgICAgICBBU1NFUlQoCisgICAgICAgICAgICBtX2Jsb2Nr
LT52YXJpYWJsZXNBdEhlYWQuc2l6ZUZvcjxvcGVyYW5kS2luZD4oKQorICAgICAgICAgICAgPT0g
bV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNpemVGb3I8b3BlcmFuZEtpbmQ+KCkpOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNp
emVGb3I8b3BlcmFuZEtpbmQ+KCk7IGktLTspIHsKKyAgICAgICAgICAgIG1fYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5hdEZvcjxvcGVyYW5kS2luZD4oaSkgPSAwOworICAgICAgICAgICAgbV9ibG9j
ay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRLaW5kPihpKSA9IDA7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgTm9kZSogYWRkUGhpU2lsZW50bHkoQmFzaWNCbG9jayogYmxvY2ss
IGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUpCisgICAgeworICAgICAgICBQaGkqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZShEb250UmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhpLCBjb2RlT3JpZ2luLCBPcEluZm8o
dmFyaWFibGUpKTsKKyAgICAgICAgYmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIE5vZGUqIGFkZFBoaShCYXNpY0Jsb2Nr
KiBibG9jaywgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSkKKyAgICB7CisgICAgICAgIFBoaSogcmVzdWx0ID0gYWRkUGhpU2lsZW50bHko
YmxvY2ssIGNvZGVPcmlnaW4sIHZhcmlhYmxlKTsKKyAgICAgICAgbV9waGlTdGFjay5hcHBlbmQo
UGhpU3RhY2tFbnRyeShibG9jaywgcmVzdWx0KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIE5vZGUqIGFkZFBoaShjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2lu
LCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
ZFBoaShtX2Jsb2NrLCBjb2RlT3JpZ2luLCB2YXJpYWJsZSk7CisgICAgfQorICAgIAorICAgIE5v
ZGUqIGFkZFBoaShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkZFBoaShub2Rl
LT5jb2RlT3JpZ2luLCBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY2Fub25pY2FsaXplR2V0TG9jYWwoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICBpZiAoTm9kZSogb3RoZXJOb2RlID0gbV9ibG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSB7CisgICAgICAgICAgICBBU1NFUlQo
b3RoZXJOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHN3aXRjaCAob3RoZXJOb2RlLT5vcCgpKSB7CisgICAgICAgICAgICBj
YXNlIEZsdXNoOgorICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAg
ICAgb3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAg
ICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byBoYXZlIGEgR2V0TG9jYWwsIHNvIHRoaXMgbWlnaHQgYXMgd2VsbCBiZSB0aGUg
b25lLgorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShv
dGhlck5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NF
UlQob3RoZXJOb2RlLT5vcCgpID09IFNldExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRB
cmd1bWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VS
VChvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFy
Z3VtZW50IHx8IG90aGVyTm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CisgICAgICAgICAgICBBU1NF
UlQob3RoZXJOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpIHsK
KyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhlck5vZGUp
KTsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkgPSBub2RlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVk
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IEdldExvY2FsKQor
ICAgICAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvdGhl
ck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5v
cCgpID09IFBoaSB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5v
cCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
LyBLZWVwIHRoaXMgR2V0TG9jYWwgYnV0IGxpbmsgaXQgdG8gdGhlIHByaW9yIG9uZXMuCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2RlKSk7Cisg
ICAgICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID0gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0gR2V0TG9j
YWwpIHsKKyAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMg
R2V0TG9jYWwgd2l0aCBvdGhlck5vZGUuCisgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1l
bnQgPSBvdGhlck5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgpID09IFNldExv
Y2FsKTsKKyAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gb3RoZXJOb2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKGFkZFBoaShub2RlKSkpOworICAgICAg
ICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0T3BlcmFuZEZpcnN0VGltZSh2YXJpYWJsZS0+
bG9jYWwoKSwgbm9kZSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBub2RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjYW5v
bmljYWxpemVTZXRMb2NhbChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgbV9ibG9jay0+dmFy
aWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+bG9jYWwoKSwgbm9kZSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8Tm9kZVR5cGUgbm9kZVR5cGU+CisgICAgdm9pZCBjYW5vbmljYWxpemVGbHVz
aE9yUGhhbnRvbUxvY2FsKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQoIW5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChO
b2RlKiBvdGhlck5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpID09IHZhcmlhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNo
IChvdGhlck5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAg
ICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAg
ICAgICAgICAgb3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSA9PSBQaGkgfHwgbm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5vcCgpID09
IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09
IFBoYW50b21Mb2NhbCAmJiBvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpIHsKKyAgICAgICAg
ICAgICAgICAvLyBQaGFudG9tTG9jYWwoU2V0TG9jYWwpIGRvZXNuJ3QgbWFrZSBzZW5zZS4gUGhh
bnRvbUxvY2FsIG1lYW5zOiBhdCB0aGlzCisgICAgICAgICAgICAgICAgLy8gcG9pbnQgSSBrbm93
IEkgd291bGQgaGF2ZSBiZWVuIGludGVyZXN0ZWQgaW4gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFi
bGUKKyAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIHB1cnBvc2Ugb2YgT1NSLiBQaGFudG9tTG9j
YWwoU2V0TG9jYWwpIG1lYW5zOiBhdCB0aGlzIHBvaW50IEkKKyAgICAgICAgICAgICAgICAvLyBr
bm93IHRoYXQgSSB3b3VsZCBoYXZlIHJlYWQgdGhlIHZhbHVlIHdyaXR0ZW4gYnkgdGhhdCBTZXRM
b2NhbC4gVGhpcyBpcworICAgICAgICAgICAgICAgIC8vIHJlZHVuZGFudCBhbmQgaW5lZmZpY2ll
bnQsIHNpbmNlIHJlYWxseSBpdCBqdXN0IG1lYW5zIHRoYXQgd2Ugd2FudCB0bworICAgICAgICAg
ICAgICAgIC8vIGJlIGtlZXBpbmcgdGhlIG9wZXJhbmQgdG8gdGhlIFNldExvY2FsIGFsaXZlLiBU
aGUgU2V0TG9jYWwgbWF5IGRpZSwgYW5kCisgICAgICAgICAgICAgICAgLy8gd2UnbGwgYmUgZmlu
ZSBiZWNhdXNlIE9TUiB0cmFja3MgZGVhZCBTZXRMb2NhbHMuCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gU28gd2UgdHVybiB0aGlzIGludG8gYSBQaGFudG9tIG9uIHRoZSBj
aGlsZCBvZiB0aGUgU2V0TG9jYWwuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKG90aGVyTm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
VGhlcmUgaXMgbm90aGluZyB3cm9uZyB3aXRoIGhhdmluZyByZWR1bmRhbnQgRmx1c2gncy4gSXQg
anVzdCBuZWVkcyB0bworICAgICAgICAgICAgLy8gYmUgbGlua2VkIGFwcHJvcHJpYXRlbHkuIE5v
dGUgdGhhdCBpZiB0aGVyZSBoYWQgYWxyZWFkeSBiZWVuIGEgcHJldmlvdXMKKyAgICAgICAgICAg
IC8vIHVzZSBhdCB0YWlsIHRoZW4gd2UgZG9uJ3Qgb3ZlcnJpZGUgaXQuIEl0J3MgZmluZSBmb3Ig
dmFyaWFibGVzQXRUYWlsIHRvCisgICAgICAgICAgICAvLyBvbWl0IEZsdXNoZXMgYW5kIFBoYW50
b21Mb2NhbHMuIE9uIHRoZSBvdGhlciBoYW5kLCBoYXZpbmcgaXQgcmVmZXIgdG8gYQorICAgICAg
ICAgICAgLy8gRmx1c2ggb3IgYSBQaGFudG9tTG9jYWwgaWYganVzdCBiZWZvcmUgaXQgdGhlIGxh
c3QgdXNlIHdhcyBhIEdldExvY2FsIHdvdWxkCisgICAgICAgICAgICAvLyBzZXJpb3VzbHkgY29u
ZnVzZSB0aGUgQ0ZBLgorICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uo
b3RoZXJOb2RlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKGFkZFBoaShub2RlKSkpOworICAg
ICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0T3BlcmFuZEZpcnN0VGltZSh2YXJpYWJs
ZS0+bG9jYWwoKSwgbm9kZSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRP
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBub2RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
YW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKCkKKyAgICB7CisgICAgICAgIGlmICghbV9ibG9jaykK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKG1fYmxvY2stPmlzUmVhY2hhYmxl
KTsKKyAgICAgICAgCisgICAgICAgIGNsZWFyVmFyaWFibGVzQXRIZWFkQW5kVGFpbDxBcmd1bWVu
dE9wZXJhbmQ+KCk7CisgICAgICAgIGNsZWFyVmFyaWFibGVzQXRIZWFkQW5kVGFpbDxMb2NhbE9w
ZXJhbmQ+KCk7CisgICAgICAgIAorICAgICAgICAvLyBBc3N1bWVzIHRoYXQgYWxsIHBoaSByZWZl
cmVuY2VzIGhhdmUgYmVlbiByZW1vdmVkLiBBc3N1bWVzIHRoYXQgdGhpbmdzIHRoYXQKKyAgICAg
ICAgLy8gc2hvdWxkIGJlIGxpdmUgaGF2ZSBhIG5vbi16ZXJvIHJlZiBjb3VudCwgYnV0IGRvZXNu
J3QgYXNzdW1lIHRoYXQgdGhlIHJlZgorICAgICAgICAvLyBjb3VudHMgYXJlIGNvcnJlY3QgYmV5
b25kIHRoYXQgKG1vcmUgZm9ybWFsbHkgISFsb2dpY2FsUmVmQ291bnQgPT0gISFhY3R1YWxSZWZD
b3VudAorICAgICAgICAvLyBidXQgbm90IGxvZ2ljYWxSZWZDb3VudCA9PSBhY3R1YWxSZWZDb3Vu
dCkuIEFzc3VtZXMgdGhhdCBpdCBjYW4gYnJlYWsgcmVmCisgICAgICAgIC8vIGNvdW50cy4KKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwg
bV9ibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1fYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZ3Jh
cGgucGVyZm9ybVN1YnN0aXR1dGlvbihub2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gVGhlIHJ1bGVzIGZvciB0aHJlYWRlZCBDUFMgZm9ybToKKyAgICAgICAgICAgIC8vIAorICAg
ICAgICAgICAgLy8gSGVhZCB2YXJpYWJsZTogdGhlIGZpcnN0IHRoaW5nIHRoYXQgaGFwcGVuZWQg
dG8gdGhlIHZhcmlhYmxlIGluIHRoZSBibG9jay4KKyAgICAgICAgICAgIC8vIEl0IG1heSBiZSBh
IEZsdXNoLCBQaGFudG9tTG9jYWwsIEdldExvY2FsLCBTZXRMb2NhbCwgb3IgU2V0QXJndW1lbnQu
CisgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCBtYXkgb25seSBhcHBlYXIgaW4gdGhlIHJvb3Qg
YmxvY2suCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGFpbCB2YXJpYWJsZTogdGhl
IGxhc3QgdGhpbmcgdGhhdCBoYXBwZW5lZCB0byB0aGUgdmFyaWFibGUgaW4gdGhlIGJsb2NrLgor
ICAgICAgICAgICAgLy8gSXQgbWF5IGJlIGEgRmx1c2gsIFBoYW50b21Mb2NhbCwgR2V0TG9jYWws
IFNldExvY2FsLCBvciBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgIC8vIFNldEFyZ3VtZW50IG1h
eSBvbmx5IGFwcGVhciBpbiB0aGUgcm9vdCBibG9jay4gTm90ZSB0aGF0IGlmIHRoZXJlIGV2ZXIK
KyAgICAgICAgICAgIC8vIHdhcyBhIEdldExvY2FsIHRvIHRoZSB2YXJpYWJsZSwgYW5kIGl0IHdh
cyBmb2xsb3dlZCBieSBQaGFudG9tTG9jYWxzIGFuZAorICAgICAgICAgICAgLy8gRmx1c2hlcyBi
dXQgbm90IFNldExvY2FscywgdGhlbiB0aGUgdGFpbCB2YXJpYWJsZSB3aWxsIGJlIHRoZSBHZXRM
b2NhbC4KKyAgICAgICAgICAgIC8vIFRoaXMgcmVmbGVjdHMgdGhlIGZhY3QgdGhhdCB5b3Ugb25s
eSBjYXJlIHRoYXQgdGhlIHRhaWwgdmFyaWFibGUgaXMgYQorICAgICAgICAgICAgLy8gRmx1c2gg
b3IgUGhhbnRvbUxvY2FsIGlmIG5vdGhpbmcgZWxzZSBpbnRlcmVzdGluZyBoYXBwZW5lZC4KKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBDaGlsZCBvZiBHZXRMb2NhbDogdGhlIG9wZXJh
dGlvbiB0aGF0IHRoZSBHZXRMb2NhbCBrZWVwcyBhbGl2ZS4gRm9yCisgICAgICAgICAgICAvLyB1
bmNhcHR1cmVkIGxvY2FscywgaXQgbWF5IGJlIGEgUGhpIGZyb20gdGhlIGN1cnJlbnQgYmxvY2su
IEZvciBhcmd1bWVudHMsCisgICAgICAgICAgICAvLyBpdCBtYXkgYmUgYSBTZXRBcmd1bWVudC4g
Rm9yIGNhcHR1cmVkIGxvY2FscyBhbmQgYXJndW1lbnRzIGl0IG1heSBhbHNvIGJlCisgICAgICAg
ICAgICAvLyBhIFNldExvY2FsLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENoaWxk
IG9mIFNldExvY2FsOiBtdXN0IGJlIGEgdmFsdWUgcHJvZHVjaW5nIG5vZGUuCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gQ2hpbGQgb2YgRmx1c2g6IGl0IG1heSBiZSBhIFBoaSBmcm9t
IHRoZSBjdXJyZW50IGJsb2NrIG9yIGEgU2V0TG9jYWwuIEZvcgorICAgICAgICAgICAgLy8gYXJn
dW1lbnRzIGl0IG1heSBhbHNvIGJlIGEgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgLy8gQ2hpbGQgb2YgUGhhbnRvbUxvY2FsOiBpdCBtYXkgYmUgYSBQaGkgZnJvbSB0
aGUgY3VycmVudCBibG9jay4gRm9yCisgICAgICAgICAgICAvLyBhcmd1bWVudHMgaXQgbWF5IGFs
c28gYmUgYSBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBDaGls
ZHJlbiBvZiBQaGk6IG90aGVyIFBoaXMgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2ssIG9yIGFueSBv
ZiB0aGUKKyAgICAgICAgICAgIC8vIGZvbGxvd2luZyBmcm9tIGZyb20gcHJlZGVjZXNzb3IgYmxv
Y2tzOiBTZXRMb2NhbCwgUGhpLCBvciBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgIC8vIFRoZXNl
IGFyZSBjb21wdXRlZCBieSBsb29raW5nIGF0IHRoZSB0YWlsIHZhcmlhYmxlcyBvZiB0aGUgcHJl
ZGVjZXNzb3IKKyAgICAgICAgICAgIC8vIGJsb2NrcyBhbmQgZWl0aGVyIHVzaW5nIGl0IGRpcmVj
dGx5IChpZiBpdCdzIGEgU2V0TG9jYWwsIFBoaSwgb3IKKyAgICAgICAgICAgIC8vIFNldEFyZ3Vt
ZW50KSBvciBsb2FkaW5nIHRoYXQgbm9kZXMgY2hpbGQgKGlmIGl0J3MgYSBHZXRMb2NhbCwgUGhh
bm9tTG9jYWwsCisgICAgICAgICAgICAvLyBvciBGbHVzaCAtIGFsbCBvZiB0aGVzZSB3aWxsIGhh
dmUgY2hpbGRyZW4gdGhhdCBhcmUgU2V0TG9jYWwsIFBoaSwgb3IKKyAgICAgICAgICAgIC8vIFNl
dEFyZ3VtZW50KS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIGNhbm9uaWNh
bGl6ZUdldExvY2FsKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYW5vbmlj
YWxpemVTZXRMb2NhbChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgY2Fub25pY2Fs
aXplRmx1c2hPclBoYW50b21Mb2NhbDxGbHVzaD4obm9kZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAg
ICAgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsPFBoYW50b20+KG5v
ZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzKCkK
KyAgICB7CisgICAgICAgIGZvciAobV9ibG9ja0luZGV4ID0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7IG1fYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgbV9ibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbbV9ibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fs
c0luQmxvY2soKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZVBo
aXMoKQorICAgIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHRoaXMg
ZmFpbCBpbnN0YW50bHkuCisgICAgICAgIG1fYmxvY2sgPSAwOworICAgICAgICBtX2Jsb2NrSW5k
ZXggPSBOb0Jsb2NrOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKCFtX3BoaVN0YWNrLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgUGhpU3RhY2tFbnRyeSBlbnRyeSA9IG1fcGhpU3RhY2subGFz
dCgpOworICAgICAgICAgICAgbV9waGlTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZW50cnkubV9ibG9jazsKKyAgICAgICAg
ICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPm1fcHJlZGVjZXNzb3Jz
OworICAgICAgICAgICAgTm9kZSogY3VycmVudFBoaSA9IGVudHJ5LnBoaTsKKyAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBjdXJyZW50UGhpLT5sb2NhbCgpOworICAg
ICAgICAgICAgaW50IG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHByZWRlY2Vzc29ycy5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1f
YmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgTm9kZSomIHZhcmlhYmxlSW5QcmV2aW91cyA9IHByZWRlY2Vzc29yQmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmICghdmFy
aWFibGVJblByZXZpb3VzKSB7CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5QcmV2aW91
cyA9IGFkZFBoaShwcmVkZWNlc3NvckJsb2NrLCBjdXJyZW50UGhpLT5jb2RlT3JpZ2luLCB2YXJp
YWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5zZXRPcGVyYW5kRmlyc3RUaW1lKG9wZXJhbmQsIHZhcmlhYmxlSW5QcmV2aW91cyk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YXJp
YWJsZUluUHJldmlvdXMtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFi
bGVJblByZWRlY2Vzc29yLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUluUHJlZGVj
ZXNzb3ItPmNoaWxkMSgpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YXJpYWJsZUluUHJldmlvdXMgPSB2YXJpYWJsZUluUHJldmlvdXMtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgQVNTRVJUKAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluUHJldmlvdXMt
Pm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgfHwgdmFyaWFibGVJblByZXZp
b3VzLT5vcCgpID09IFBoaQorICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUluUHJldmlv
dXMtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJv
b2wgZGlkU2V0Q2hpbGQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
aWxkSWR4ID0gMDsgY2hpbGRJZHggPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2NoaWxkSWR4KSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGhpLT5jaGlsZHJlbi5jaGlsZChjaGls
ZElkeCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFBoaS0+Y2hpbGRyZW4uc2V0Q2hpbGQoY2hpbGRJZHgsIEVkZ2UodmFyaWFi
bGVJblByZWRlY2Vzc29yKSk7CisgICAgICAgICAgICAgICAgICAgIGRpZFNldENoaWxkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChkaWRTZXRDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogbmV3UGhpID0gYWRkUGhp
U2lsZW50bHkoYmxvY2ssIGN1cnJlbnRQaGktPmNvZGVPcmlnaW4sIHZhcmlhYmxlKTsKKyAgICAg
ICAgICAgICAgICBuZXdQaGktPmNoaWxkcmVuID0gY3VycmVudFBoaS0+Y2hpbGRyZW47CisgICAg
ICAgICAgICAgICAgY3VycmVudFBoaS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShuZXdQaGksIHZhcmlh
YmxlSW5QcmVkZWNlc3NvciwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CisgICAgVmVjdG9yPFBo
aVN0YWNrRW50cnksIDY0PiYgcGhpU3RhY2tGb3IoKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJu
YW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dFBoaVN0YWNrOworICAgICAgICByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOworICAgIH0KKyAgICAK
KyAgICBzdHJ1Y3QgUGhpU3RhY2tFbnRyeSB7CisgICAgICAgIFBoaVN0YWNrRW50cnkoQmFzaWNC
bG9jayogYmxvY2ssIE5vZGUqIHBoaSkKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAg
ICAgICAgICAgICwgbV9waGkocGhpKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgICAgIE5vZGUqIG1fcGhpOworICAgIH07
CisgICAgCisgICAgQmxvY2tJbmRleCBtX2Jsb2NrSW5kZXg7CisgICAgQmFzaWNCbG9jayogbV9i
bG9jazsKKyAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgNjQ+IG1fcGhpU3RhY2s7Cit9OworCit2
b2lkIHBlcmZvcm1DUFNSZXRocmVhZGluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDUFMgUmV0aHJlYWRpbmcgUGhhc2UiKTsKKyAgICBy
ZXR1cm4gcnVuUGhhc2U8Q1BTUmV0aHJlYWRpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhy
ZWFkaW5nUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0NQU1JldGhyZWFk
aW5nUGhhc2VfaAorI2RlZmluZSBERkdDUFNSZXRocmVhZGluZ1BoYXNlX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIENQUyBSZXRocmVhZGluZzoK
Ky8vCisvLyBUYWtlcyBhIGdyYXBoIGluIHdoaWNoIHRoZXJlIGFyZSBhcmJpdHJhcnkgR2V0TG9j
YWxzL1NldExvY2FscyB3aXRoIG5vIGNvbm5lY3Rpb25zCisvLyBiZXR3ZWVuIHRoZW0uIFJlbW92
ZXMgcmVkdW5kYW50IG9uZXMgaW4gdGhlIGNhc2Ugb2YgdW5jYXB0dXJlZCB2YXJpYWJsZXMuIENv
bm5lY3RzCisvLyBhbGwgb2YgdGhlbSB3aXRoIFBoaSBmdW5jdGlvbnMgdG8gcmVwcmVzZW50IGxp
dmUgcmFuZ2VzLgorCitib29sIHBlcmZvcm1DUFNSZXRocmVhZGluZyhHcmFwaCYpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR0NQU1JldGhyZWFkaW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYg
KzQ5LDkgQEAgcHVibGljOgogICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrID0gMDsgYmxvY2sg
PCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9jaykKICAgICAgICAgICAgIHBlcmZvcm1C
bG9ja0NTRShtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrXS5nZXQoKSk7CiAgICAgICAgIAorICAgICAg
ICBpZiAobV9jaGFuZ2VkKQorICAgICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBMb2FkU3RvcmU7
CisgICAgICAgIAogICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0KICAgICAKQEAgLTk3
NCwyNyArOTc3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKEVkZ2UmIGNoaWxkLCBib29sIGFkZFJl
ZiA9IHRydWUpCi0gICAgewotICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG9wZXJhbmQgaXMgYWN0
dWFsbHkgdW51c2VkLgotICAgICAgICBpZiAoIWNoaWxkKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IHJlcGxhY2VtZW50Lgot
ICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IGNoaWxkLT5yZXBsYWNlbWVudDsKLSAgICAgICAg
aWYgKCFyZXBsYWNlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAg
IGNoaWxkLnNldE5vZGUocmVwbGFjZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlcmUg
aXMgZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQg
ZG9lcyBub3QKLSAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgotICAgICAgICBBU1NFUlQo
IWNoaWxkLT5yZXBsYWNlbWVudCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYWRkUmVmKQotICAg
ICAgICAgICAgbV9ncmFwaC5yZWYoY2hpbGQpOwotICAgIH0KLSAgICAKICAgICB2b2lkIGVsaW1p
bmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IFBoYW50b20pOwpAQCAtMTA3MiwyMSArMTA1NCwxMiBAQCBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSogbm9kZSkKICAgICB7
Ci0gICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2RlLT5zaG91bGRHZW5lcmF0ZSgpOwot
Ci0gICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4
IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykK
LSAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG1fZ3JhcGgubV92YXJBcmdDaGls
ZHJlbltjaGlsZElkeF0sIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHNob3Vs
ZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS0+Y2hpbGRy
ZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0
dXRpb24obm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAg
fQorICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CiAgICAgICAgIAog
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKICAgICAgICAgICAgIG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVSZWxldmFudFRvT1NSKTsKICAgICAgICAgCi0gICAgICAg
IGlmICghc2hvdWxkR2VuZXJhdGUpCisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtMTE2MiwyNiArMTEzNSwxNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAg
aWYgKCFzZXRSZXBsYWNlbWVudChwb3NzaWJsZVJlcGxhY2VtZW50KSkKICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIC8vIElmIHRoZSBHZXRMb2NhbCB3ZSByZXBsYWNlZCB1c2Vk
IHRvIHJlZmVyIHRvIGEgU2V0TG9jYWwsIHRoZW4gaXQgbm93Ci0gICAgICAgICAgICAvLyBzaG91
bGQgcmVmZXIgdG8gdGhlIGNoaWxkIG9mIHRoZSBTZXRMb2NhbCBpbnN0ZWFkLgotICAgICAgICAg
ICAgaWYgKHBoaS0+b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5jaGlsZDEoKSA9PSBwaGkpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRn
ZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgcGhpLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBOb2RlKiBvbGRUYWlsID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKAotICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwo
KSk7Ci0gICAgICAgICAgICBpZiAob2xkVGFpbCA9PSBub2RlKSB7Ci0gICAgICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0
YS0+bG9jYWwoKSkgPQotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3A7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gZ3JhcGggaW50ZWdyaXR5
OiBzaW5jZSB3ZSdyZSByZXBsYWNpbmcgYSBHZXRMb2NhbCB3aXRoIGEgR2V0TG9jYWxVbmxpbmtl
ZCwKLSAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgR2V0TG9jYWxVbmxpbmtl
ZCBpcyBub3cgbGlua2VkLgotICAgICAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9w
KCkgPT0gR2V0TG9jYWxVbmxpbmtlZCkgewotICAgICAgICAgICAgICAgICAgICByZWxldmFudExv
Y2FsT3AtPnNldE9wKEdldExvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2Nh
bE9wLT5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UocGhpKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5yZWYocGhpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
SWYgd2UgcmVwbGFjZSBhIEdldExvY2FsIHdpdGggYSBHZXRMb2NhbFVubGlua2VkLCB0aGVuIHR1
cm4gdGhlIEdldExvY2FsVW5saW5rZWQKKyAgICAgICAgICAgIC8vIGludG8gYSBHZXRMb2NhbC4K
KyAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtl
ZCkgeworICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+Y29udmVydFRvR2V0TG9jYWwo
dmFyaWFibGVBY2Nlc3NEYXRhLCBwaGkpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHBo
aSk7CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTIzNSw5ICsxMTk4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShkYXRhTm9kZSk7CiAgICAgICAgICAg
ICBtX2dyYXBoLnJlZihkYXRhTm9kZSk7Ci0gICAgICAgICAgICBOb2RlKiBvbGRUYWlsID0gbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAg
IGlmIChvbGRUYWlsID09IG5vZGUpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKSA9IHJlcGxhY2VtZW50OworICAgICAgICAgICAg
bV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQxMzAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMyw2MCArMzIzLDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAg
ICAgICAgIE5vZGUqIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSAwOwotICAgICAgICAgICAgICAgIGlm
IChibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm9kZQot
ICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgdG8gYmUgdGhlIGNvbW1vbiBjYXNl
LgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzSW5QaGlzKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpOwotICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmRl
eEluQmxvY2sgPiAwKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gTXVzdCBzZWFyY2ggZm9yIHRo
ZSBwcmV2aW91cyBhY2Nlc3MgdG8gdGhpcyBsb2NhbC4KLSAgICAgICAgICAgICAgICAgICAgZm9y
IChCbG9ja0luZGV4IHN1YkluZGV4SW5CbG9jayA9IGluZGV4SW5CbG9jazsgc3ViSW5kZXhJbkJs
b2NrLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzdWJOb2RlID0gYmxvY2st
PmF0KHN1YkluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUtPmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmxvY2FsKCkgIT0gbm9kZS0+bG9jYWwoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFRoZSB0d28gbXVzdCBoYXZlIGJlZW4gdW5pZmllZC4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChzdWJOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xv
Y2FsQWNjZXNzID0gc3ViTm9kZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNMb2Nh
bEFjY2VzcykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIGFjY2Vz
cyBtdXN0IGhhdmUgYmVlbiBhIFBoaS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBwaGlJbmRleEluQmxvY2sgPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4SW5C
bG9jay0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBi
bG9jay0+cGhpc1twaGlJbmRleEluQmxvY2tdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBoaU5v
ZGUtPmxvY2FsKCkgIT0gbm9kZS0+bG9jYWwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHR3byBt
dXN0IGhhdmUgYmVlbiB1bmlmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChwaGlOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9
IHBoaU5vZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJldmlvdXNM
b2NhbEFjY2Vzcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2Fs
QWNjZXNzKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiB0YWlsTm9k
ZSA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKLSAgICAg
ICAgICAgICAgICBpZiAodGFpbE5vZGUgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gcHJldmlvdXNMb2Nh
bEFjY2VzczsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKAotICAgICAgICAgICAgICAgICAgICAgICAgdGFpbE5vZGUtPm9wKCkgPT0gRmx1c2gKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IHRhaWxOb2RlLT5vcCgpID09IFNldExvY2FsCi0gICAg
ICAgICAgICAgICAgICAgICAgICB8fCBpc0NhcHR1cmVkQXRPckFmdGVyKGJsb2NrLCBpbmRleElu
QmxvY2ssIG5vZGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUt
PmNvZGVPcmlnaW47CiAgICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+
Y2hpbGRyZW47CiAgICAgICAgICAgICAgICAgCkBAIC0zODQsNiArMzMwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhh
bnRvbSwgY29kZU9yaWdpbiwgY2hpbGRyZW4pOwogICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICBtX3N0YXRlLnJlc2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw5ICsxMDIsNiBAQCBp
bmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgaWYgKCFwYXJzZShl
eGVjLCBkZmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKGNvbXBpbGVN
b2RlID09IENvbXBpbGVGdW5jdGlvbikKLSAgICAgICAgZGZnLnByZWRpY3RBcmd1bWVudFR5cGVz
KCk7Ci0gICAgCiAgICAgLy8gQnkgdGhpcyBwb2ludCB0aGUgREZHIGJ5dGVjb2RlIHBhcnNlciB3
aWxsIGhhdmUgcG90ZW50aWFsbHkgbXV0YXRlZCB2YXJpb3VzIHRhYmxlcwogICAgIC8vIGluIHRo
ZSBDb2RlQmxvY2suIFRoaXMgaXMgYSBnb29kIHRpbWUgdG8gcGVyZm9ybSBhbiBlYXJseSBzaHJp
bmssIHdoaWNoIGlzIG1vcmUKICAgICAvLyBwb3dlcmZ1bCB0aGFuIGEgbGF0ZSBvbmUuIEl0J3Mg
c2FmZSB0byBkbyBzbyBiZWNhdXNlIHdlIGhhdmVuJ3QgZ2VuZXJhdGVkIGFueSBjb2RlCkBAIC0x
MTMsMjcgKzExMCw0MiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVN
CiAKICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsK
KyAgICAKKyAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoKTsKKyAgICBwZXJmb3JtVW5pZmljYXRp
b24oKTsKKyAgICBwZXJmb3JtUHJlZGljdGlvbkluamVjdGlvbigpOworICAgIAorICAgIGlmICh2
YWxpZGF0aW9uRW5hYmxlZCgpKQorICAgICAgICB2YWxpZGF0ZShkZmcpOworICAgIAogICAgIHBl
cmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtRml4dXAoZGZnKTsK
ICAgICBwZXJmb3JtU3RydWN0dXJlQ2hlY2tIb2lzdGluZyhkZmcpOworICAgIAogICAgIHVuc2ln
bmVkIGNudCA9IDE7CiAgICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50Tm90Q29udmVy
Z2VkOwogICAgIGZvciAoOzsgKytjbnQpIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlv
bkVuYWJsZWQoKSkKICAgICAgICAgICAgIGRhdGFMb2dGKCJERkcgYmVnaW5uaW5nIG9wdGltaXph
dGlvbiBmaXhwb2ludCBpdGVyYXRpb24gIyV1LlxuIiwgY250KTsKICAgICAgICAgYm9vbCBjaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgIAogICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CiAgICAgICAg
IGNoYW5nZWQgfD0gcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwogICAgICAgICBjaGFuZ2Vk
IHw9IHBlcmZvcm1Bcmd1bWVudHNTaW1wbGlmaWNhdGlvbihkZmcpOwogICAgICAgICBjaGFuZ2Vk
IHw9IHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihkZmcpOwogICAgICAgICBjaGFuZ2VkIHw9IHBl
cmZvcm1DU0UoZGZnKTsKKyAgICAgICAgCiAgICAgICAgIGlmICghY2hhbmdlZCkKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAKICAgICAgICAgZGZnLnJlc2V0RXhpdFN0YXRlcygpOwogICAg
ICAgICBwZXJmb3JtRml4dXAoZGZnKTsKKyAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRm
Zyk7CiAgICAgfQorICAgIAogICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludENvbnZl
cmdlZDsKICAgICBwZXJmb3JtQ1NFKGRmZyk7CisgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRm
Zyk7IC8vIFRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYSBuby1vcCBzaW5jZSBDU0UgcmFyZWx5IGRl
dGhyZWFkcyB0aGUgZ3JhcGguCiAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkK
ICAgICAgICAgZGF0YUxvZ0YoIkRGRyBvcHRpbWl6YXRpb24gZml4cG9pbnQgY29udmVyZ2VkIGlu
ICV1IGl0ZXJhdGlvbnMuXG4iLCBjbnQpOwogICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxv
Y2F0aW9uKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAgR3JhcGg6OkdyYXBoKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgICwgbV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50
cnlCeXRlY29kZUluZGV4KQogICAgICwgbV9tdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1
ZXMpCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCisgICAgLCBtX2Zvcm0o
TG9hZFN0b3JlKQorICAgICwgbV91bmlmaWNhdGlvblN0YXRlKExvY2FsbHlVbmlmaWVkKQogewog
ICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2spOwogfQpAQCAtMzc3LDIyICszNzksMjIgQEAgdm9p
ZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihOb2RlKiBvcCkKICAgICBET19UT19DSElMRFJFTihvcCwg
ZGVyZWYpOwogfQogCi12b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcygpCit2b2lkIEdy
YXBoOjpkZXRocmVhZCgpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkgPj0gMSk7Ci0gICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKLSAgICAgICAgVmFs
dWVQcm9maWxlKiBwcm9maWxlID0gbV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1
bWVudChhcmcpOwotICAgICAgICBpZiAoIXByb2ZpbGUpCisgICAgaWYgKG1fZm9ybSA9PSBMb2Fk
U3RvcmUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJs
b2NrKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBtX2FyZ3VtZW50
c1thcmddLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oKSk7Ci0gICAgICAgIAotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKLSAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJBcmd1bWVudCBbIiwgYXJnLCAiXSBw
cmVkaWN0aW9uOiAiLAotICAgICAgICAgICAgU3BlY3VsYXRpb25EdW1wKG1fYXJndW1lbnRzW2Fy
Z10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKLSNlbmRpZgor
ICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJ
bmRleC0tOykgeworICAgICAgICAgICAgTm9kZSogcGhpID0gYmxvY2stPnBoaXNbcGhpSW5kZXhd
OworICAgICAgICAgICAgcGhpLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICB9CiAgICAgfQor
ICAgIAorICAgIG1fZm9ybSA9IExvYWRTdG9yZTsKIH0KIAogdm9pZCBHcmFwaDo6aGFuZGxlU3Vj
Y2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2Nr
SW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYwIEBAIGVudW0g
QWRkU3BlY3VsYXRpb25Nb2RlIHsKICAgICBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hP
dmVyZmxvdywKICAgICBTcGVjdWxhdGVJbnRlZ2VyCiB9OworCisvLyBEZXNjcmliZXMgdGhlIGZv
cm0geW91IGNhbiBleHBlY3QgdGhlIGVudGlyZSBncmFwaCB0byBiZSBpbi4KK2VudW0gR3JhcGhG
b3JtIHsKKyAgICAvLyBMb2FkU3RvcmUgZm9ybSBtZWFucyB0aGF0IGJhc2ljIGJsb2NrcyBtYXkg
ZnJlZWx5IHVzZSBHZXRMb2NhbCwgU2V0TG9jYWwsCisgICAgLy8gR2V0TG9jYWxVbmxpbmtlZCwg
YW5kIEZsdXNoIGZvciBhY2Nlc3NpbmcgbG9jYWwgdmFyaWFibGVzIGFuZCBpbmRpY2F0aW5nCisg
ICAgLy8gd2hlcmUgdGhlaXIgbGl2ZSByYW5nZXMgb3VnaHQgdG8gYmUuIExpdmVuZXNzIGlzIGlt
cGxpY2l0LCBhcyBpcyB0aGUgZGF0YQorICAgIC8vIGZsb3cgYmV0d2VlbiBsb2NhbCBhY2Nlc3Nl
cy4gRm9yIGV4YW1wbGUsIExvYWRTdG9yZSBmb3JtIGdpdmVzIG5vIGVhc3kgd2F5CisgICAgLy8g
dG8gZGV0ZXJtaW5lIHdoaWNoIFNldExvY2FsJ3MgZmxvdyBpbnQgbyBhIEdldExvY2FsLiBBcyB3
ZWxsLCBMb2FkU3RvcmUKKyAgICAvLyBmb3JtIGltcGxpZXMgbm8gcmVzdHJpY3Rpb25zIG9uIHJl
ZHVuZGFuY3k6IHlvdSBjYW4gZnJlZWx5IGVtaXQgbXVsdGlwbGUKKyAgICAvLyBHZXRMb2NhbHMs
IG9yIG11bHRpcGxlIFNldExvY2FscyAob3IgYW55IGNvbWJpbmF0aW9uIHRoZXJlb2YpIHRvIHRo
ZSBzYW1lCisgICAgLy8gbG9jYWwgaW4gdGhlIHNhbWUgYmxvY2suIExvYWRTdG9yZSBmb3JtIGRv
ZXMgbm90IHJlcXVpcmUgYmFzaWMgYmxvY2tzIHRvCisgICAgLy8gZGVjbGFyZSBob3cgdGhleSBh
ZmZlY3Qgb3IgdXNlIGxvY2Fscywgb3RoZXIgdGhhbiBpbXBsaWNpdGx5IGJ5IHVzaW5nCisgICAg
Ly8gdGhlIGxvY2FsIG9wcy4gRmluYWxseSwgTG9hZFN0b3JlIGFsbG93cyBmbGV4aWJpbGl0eSBp
biBob3cgbGl2ZW5lc3Mgb2YKKyAgICAvLyBsb2NhbHMgaXMgZXh0ZW5kZWQ7IGZvciBleGFtcGxl
IHlvdSBjYW4gcmVwbGFjZSBhIEdldExvY2FsIHdpdGggYSBQaGFudG9tCisgICAgLy8gYW5kIHNv
IGxvbmcgYXMgdGhlIFBoYW50b20gcmV0YWlucyB0aGUgR2V0TG9jYWwncyBjaGlsZHJlbiAoaS5l
LiB0aGUgUGhpCisgICAgLy8gbW9zdCBsaWtlbHkpIHRoZW4gaXQgaW1wbGllcyB0aGF0IHRoZSBs
b2NhbCBpcyBzdGlsbCBsaXZlIGJ1dCB0aGF0IGl0IG5lZWQKKyAgICAvLyBub3QgYmUgc3RvcmVk
IHRvIHRoZSBzdGFjayBuZWNlc3NhcmlseS4gVGhpcyBpbXBsaWVzIHRoYXQgUGhhbnRvbSBjYW4K
KyAgICAvLyByZWZlcmVuY2Ugbm9kZXMgdGhhdCBoYXZlIG5vIHJlc3VsdCwgYXMgbG9uZyBhcyB0
aG9zZSBub2RlcyBhcmUgdmFsaWQKKyAgICAvLyBHZXRMb2NhbCBjaGlsZHJlbiAoaS5lLiBQaGks
IFNldExvY2FsLCBTZXRBcmd1bWVudCkuCisgICAgLy8KKyAgICAvLyBMb2FkU3RvcmUgZm9ybSBh
bHNvIGltcGxpZXMgdGhhdCBQaGlzIHRoZW1zZWx2ZXMgY2FuIGhhdmUgYXJiaXRyYXJ5CisgICAg
Ly8gY2hpbGRyZW4uIFBoaSBjaGlsZHJlbiBjb3VsZCBldmVuIGJlIGRhbmdsaW5nLCBhbmQgc2hv
dWxkIG5vdCBiZSByZWxpZWQKKyAgICAvLyB1cG9uLgorICAgIC8vCisgICAgLy8gTG9hZFN0b3Jl
IGZvcm0gaXMgc3VpdGFibGUgZm9yIENGRyB0cmFuc2Zvcm1hdGlvbnMsIGFzIHdlbGwgYXMgc3Ry
ZW5ndGgKKyAgICAvLyByZWR1Y3Rpb24sIGZvbGRpbmcsIGFuZCBDU0UuCisgICAgTG9hZFN0b3Jl
LAorICAgIAorICAgIC8vIFRocmVhZGVkQ1BTIGZvcm0gbWVhbnMgdGhhdCBiYXNpYyBibG9ja3Mg
bGlzdCB1cC1mcm9udCB3aGljaCBsb2NhbHMgdGhleQorICAgIC8vIGV4cGVjdCB0byBiZSBsaXZl
IGF0IHRoZSBoZWFkLCBhbmQgd2hpY2ggbG9jYWxzIHRoZXkgbWFrZSBhdmFpbGFibGUgYXQgdGhl
CisgICAgLy8gdGFpbC4gVGhyZWFkZWRDUFMgZm9ybSBhbHNvIGltcGxpZXMgdGhhdDoKKyAgICAv
LworICAgIC8vIC0gR2V0TG9jYWxzIGFuZCBTZXRMb2NhbHMgdG8gdW5jYXB0dXJlZCB2YXJpYWJs
ZXMgYXJlIG5vdCByZWR1bmRhbnQgd2l0aGluCisgICAgLy8gICBhIGJhc2ljIGJsb2NrLgorICAg
IC8vCisgICAgLy8gLSBBbGwgR2V0TG9jYWxzIGFuZCBGbHVzaGVzIGFyZSBsaW5rZWQgZGlyZWN0
bHkgdG8gdGhlIGxhc3QgYWNjZXNzIHBvaW50CisgICAgLy8gICBvZiB0aGUgdmFyaWFibGUsIHdo
aWNoIG11c3Qgbm90IGJlIGFub3RoZXIgR2V0TG9jYWwgaWYgdGhlIHZhcmlhYmxlIGlzCisgICAg
Ly8gICB1bmNhcHR1cmVkLgorICAgIC8vCisgICAgLy8gLSBQaGFudG9tKFBoaSkgaXMgbm90IGxl
Z2FsLCBidXQgUGhhbnRvbUxvY2FsIGlzLgorICAgIC8vCisgICAgLy8gVGhyZWFkZWRDUFMgZm9y
bSBpcyBzdWl0YWJsZSBmb3IgZGF0YSBmbG93IGFuYWx5c2lzIChDRkEsIHByZWRpY3Rpb24KKyAg
ICAvLyBwcm9wYWdhdGlvbiksIHJlZ2lzdGVyIGFsbG9jYXRpb24sIGFuZCBjb2RlIGdlbmVyYXRp
b24uCisgICAgVGhyZWFkZWRDUFMKK307CisKKy8vIERlc2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhl
IFVuaW9uRmluZCBzdHJ1Y3R1cmUgb2YgVmFyaWFibGVBY2Nlc3NEYXRhJ3MuCitlbnVtIFVuaWZp
Y2F0aW9uU3RhdGUgeworICAgIC8vIEJhc2ljQmxvY2stbG9jYWwgYWNjZXNzZXMgdG8gdmFyaWFi
bGVzIGFyZSBhcHByb3ByaWF0ZWx5IHVuaWZpZWQgd2l0aCBlYWNoIG90aGVyLgorICAgIExvY2Fs
bHlVbmlmaWVkLAogICAgIAorICAgIC8vIFVuaWZpY2F0aW9uIGhhcyBiZWVuIHBlcmZvcm1lZCBn
bG9iYWxseS4KKyAgICBHbG9iYWxseVVuaWZpZWQKK307CiAKIC8vCiAvLyA9PT0gR3JhcGggPT09
CkBAIC0xNjcsNiArMjIwLDQwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGls
ZDIoTm9kZSogbm9kZSkgeyBjbGVhckFuZERlcmVmQ2hpbGQobm9kZSwgMSk7IH0KICAgICB2b2lk
IGNsZWFyQW5kRGVyZWZDaGlsZDMoTm9kZSogbm9kZSkgeyBjbGVhckFuZERlcmVmQ2hpbGQobm9k
ZSwgMik7IH0KICAgICAKKyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb24oTm9kZSogbm9kZSkK
KyAgICB7CisgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2RlLT5zaG91bGRHZW5lcmF0
ZSgpOworICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGls
ZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4
KyspCisgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UobV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF0sIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxk
MSgpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9y
RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAg
ICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHNo
b3VsZEdlbmVyYXRlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHBlcmZvcm1T
dWJzdGl0dXRpb25Gb3JFZGdlKEVkZ2UmIGNoaWxkKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sg
aWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVudXNlZC4KKyAgICAgICAgaWYgKCFjaGlsZCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIGlmIHRoZXJl
IGlzIGFueSByZXBsYWNlbWVudC4KKyAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+
cmVwbGFjZW1lbnQ7CisgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICBjaGlsZC5zZXROb2RlKHJlcGxhY2VtZW50KTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFRoZXJlIGlzIGRlZmluaXRlbHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0
IHRoYXQgdGhlIHJlcGxhY2VtZW50IGRvZXMgbm90CisgICAgICAgIC8vIGhhdmUgYSByZXBsYWNl
bWVudC4KKyAgICAgICAgQVNTRVJUKCFjaGlsZC0+cmVwbGFjZW1lbnQpOworICAgICAgICAKKyAg
ICAgICAgaWYgKGFkZFJlZikKKyAgICAgICAgICAgIG1fZ3JhcGgucmVmKGNoaWxkKTsKKyAgICB9
CisgICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQUREX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRl
UG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJn
cykgXAogICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFkZE5v
ZGUoUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1v
ZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAog
ICAgIHsgXApAQCAtMTgzLDYgKzI3MCw4IEBAIHB1YmxpYzoKICAgICBERkdfVkFSSUFESUNfVEVN
UExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BRERfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FE
RF9OT0RFCiAKKyAgICB2b2lkIGRldGhyZWFkKCk7CisgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGlm
IHlvdSd2ZSBtb2RpZmllZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBvZiBub2RlcyB0aGF0IGRlYWwg
d2l0aAogICAgIC8vIGxvY2FsIHZhcmlhYmxlcy4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBs
b2NhbCB2YXJpYWJsZSByZWZlcmVuY2VzIGNhbiBmb3JtCiAgICAgLy8gY3ljbGVzLCBhbmQgaGVu
Y2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzIG5vdCBlbm91Z2guIFRoaXMgd2lsbCByZXNldCB0aGUK
QEAgLTM1MSw4ICs0NDAsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BO
YW1lKE5vZGVUeXBlKTsKICAgICAKLSAgICB2b2lkIHByZWRpY3RBcmd1bWVudFR5cGVzKCk7Ci0g
ICAgCiAgICAgU3RydWN0dXJlU2V0KiBhZGRTdHJ1Y3R1cmVTZXQoY29uc3QgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQpCiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlU2V0LnNpemUo
KSk7CkBAIC03MTgsNiArODA1LDggQEAgcHVibGljOgogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG1f
bXVzdEhhbmRsZVZhbHVlczsKICAgICAKICAgICBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1f
Zml4cG9pbnRTdGF0ZTsKKyAgICBHcmFwaEZvcm0gbV9mb3JtOworICAgIFVuaWZpY2F0aW9uU3Rh
dGUgbV91bmlmaWNhdGlvblN0YXRlOwogcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1
Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9j
a0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCwyMiBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0K
ICAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCisgICAgeworICAgICAgICBB
U1NFUlQobV9vcCA9PSBQaGFudG9tICYmIChjaGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwgY2hpbGQx
KCktPm9wKCkgPT0gU2V0TG9jYWwgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnQpKTsK
KyAgICAgICAgbV9vcCA9IFBoYW50b21Mb2NhbDsKKyAgICAgICAgbV9vcEluZm8gPSBjaGlsZDEo
KS0+bV9vcEluZm87IC8vIENvcHkgdGhlIHZhcmlhYmxlQWNjZXNzRGF0YS4KKyAgICAgICAgY2hp
bGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29udmVydFRv
R2V0TG9jYWwoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgTm9kZSogcGhpKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0TG9jYWxVbmxpbmtlZCk7CisgICAgICAgIG1fb3Ag
PSBHZXRMb2NhbDsKKyAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2
YXJpYWJsZSk7CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkKEVkZ2UocGhpKSk7CisgICAgfQor
ICAgIAogICAgIEpTQ2VsbCogd2Vha0NvbnN0YW50KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChv
cCgpID09IFdlYWtKU0NvbnN0YW50KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHJldmlzaW9uIDE0MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQp
IFwKICAgICBtYWNybyhQaGksIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBc
CiAgICAgbWFjcm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwK
KyAgICBtYWNybyhQaGFudG9tTG9jYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4
aXQpIFwKICAgICBcCiAgICAgLyogR2V0IHRoZSB2YWx1ZSBvZiBhIGxvY2FsIHZhcmlhYmxlLCB3
aXRob3V0IGxpbmtpbmcgaW50byB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhICovXAogICAgIC8qIG5l
dHdvcmsuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IgdmFyaWFibGUgYWNjZXNzZXMgd2hvc2UgcHJl
ZGljdGlvbnMgb3JpZ2luYXRlZCAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIFByZWRpY3Rpb25JbmplY3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CitwdWJsaWM6CisgICAgUHJlZGljdGlvbkluamVjdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgOiBQaGFzZShncmFwaCwgInByZWRpY3Rpb24gaW5qZWN0aW9uIikKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1f
Zm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fdW5pZmljYXRp
b25TdGF0ZSA9PSBHbG9iYWxseVVuaWZpZWQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPj0gMSk7CisgICAgICAgIGZvciAoc2l6ZV90IGFy
ZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSk7ICsrYXJnKSB7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBwcm9m
aWxlZEJsb2NrKCktPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgICAgICBp
ZiAoIXByb2ZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkpOworICAgICAgICAg
ICAgCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICAgICAiQXJndW1lbnQgWyIsIGFyZywgIl0gcHJlZGljdGlvbjogIiwKKyAg
ICAgICAgICAgICAgICBTcGVjdWxhdGlvbkR1bXAobV9hcmd1bWVudHNbYXJnXS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSksICJcbiIpOworI2VuZGlmCisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fb3Ny
RW50cnlCeXRlY29kZUluZGV4KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVz
QXRIZWFkLm9wZXJhbmQoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9tdXN0SGFuZGxl
VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+aGFzTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPnByZWRpY3QoCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1f
Z3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3ZvaWQgcGVyZm9y
bVByZWRpY3Rpb25JbmplY3Rpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgUHJlZGljdGlvbiBJbmplY3Rpb24gUGhhc2UiKTsKKyAgICBy
ZXR1cm4gcnVuUGhhc2U8UHJlZGljdGlvbkluamVjdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
R3JhcGg7CisKKy8vIFByZWRpY3Rpb24gSW5qZWN0aW9uOgorLy8KKy8vIFRha2VzIG1pc2NlbGxh
bmVvdXMgZGF0YSBhYm91dCB2YXJpYWJsZSB0eXBlIHByZWRpY3Rpb25zIGFuZCBpbmplY3RzIHRo
ZW0uCisvLyBUaGlzIGluY2x1ZGVzIGFyZ3VtZW50IHByZWRpY3Rpb25zIGFuZCBPU1IgZW50cnkg
cHJlZGljdGlvbnMuCisKK2Jvb2wgcGVyZm9ybVVuaWZpY2F0aW9uKEdyYXBoJik7CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV91bmlmaWNhdGlvblN0YXRlID09IEdsb2JhbGx5VW5pZmllZCk7CisgICAgICAgIAogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgbV9jb3VudCA9
IDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAw
Nyw2ICs1MDA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgUGhhbnRvbToKKyAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAg
ICAgLy8gVGhpcyBpcyBhIG5vLW9wLgogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAg
YnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDggQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgcnVuKCkKICAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJl
YWRlZENQUyk7CisgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1f
dmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOwog
ICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS0+aXNSb290KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdVbmlm
aWNhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVW5p
ZmljYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgVW5pZmljYXRpb25Q
aGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ1bmlmaWNhdGlvbiIp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NF
UlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICBBU1NFUlQobV9ncmFw
aC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gTG9jYWxseVVuaWZpZWQpOworICAgICAgICAKKyAgICAg
ICAgLy8gRW5zdXJlIHRoYXQgYWxsIFBoaSBmdW5jdGlvbnMgYXJlIHVuaWZpZWQuCisgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hh
YmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9
IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IDA7IGNoaWxkSWR4IDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytjaGls
ZElkeCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hp
bGRJZHgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT51bmlm
eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJZHgp
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBFbnN1cmUgdGhhdCBhbGwgcHJlZGlj
dGlvbnMgYXJlIGZpeGVkIHVwIGJhc2VkIG9uIHRoZSB1bmlmaWNhdGlvbi4KKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YSA9ICZtX2dyYXBo
Lm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOworICAgICAgICAgICAgZGF0YS0+ZmluZCgpLT5wcmVk
aWN0KGRhdGEtPm5vblVuaWZpZWRQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgZGF0YS0+Zmlu
ZCgpLT5tZXJnZUlzQ2FwdHVyZWQoZGF0YS0+aXNDYXB0dXJlZCgpKTsKKyAgICAgICAgICAgIGRh
dGEtPmZpbmQoKS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGRhdGEtPnN0cnVj
dHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG1fZ3JhcGgubV91bmlmaWNhdGlvblN0YXRlID0gR2xvYmFsbHlVbmlmaWVkOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit2b2lkIHBlcmZvcm1VbmlmaWNhdGlvbihHcmFwaCYg
Z3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBVbmlmaWNh
dGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxVbmlmaWNhdGlvblBoYXNlPihncmFw
aCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9u
UGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZp
Y2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVW5pZmljYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVW5p
ZmljYXRpb25QaGFzZV9oCisjZGVmaW5lIERGR1VuaWZpY2F0aW9uUGhhc2VfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gVW5pZmljYXRpb246Cisv
LworLy8gRXhhbWluZXMgYWxsIFBoaSBmdW5jdGlvbnMgYW5kIGVuc3VyZXMgdGhhdCB0aGUgdmFy
aWFibGUgYWNjZXNzIGRhdGFzIGFyZQorLy8gdW5pZmllZC4gVGhpcyBjcmVhdGVzIG91ciAibGl2
ZS1yYW5nZSBzcGxpdCIgdmlldyBvZiB2YXJpYWJsZXMuCisKK2Jvb2wgcGVyZm9ybVVuaWZpY2F0
aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVW5pZmljYXRpb25QaGFzZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDEz
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGls
ZHJlbihub2RlKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBjaGlsZHJlbiBp
biBMb2FkU3RvcmUgZm9ybSBhcmUgaW52YWxpZC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiBibG9jay0+aXNQaGlJbmRleChpKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CkBAIC0xMDksMTAgKzExMywyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8v
IFVubGVzcyBJJ20gYSBGbHVzaCwgUGhhbnRvbSwgR2V0TG9jYWwsIG9yIFBoaSwgbXkgY2hpbGRy
ZW4gc2hvdWxkIGhhc1Jlc3VsdCgpLgogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBQaGFudG9tOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRh
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBQ
aGk6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2Ut
Pmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBMb2NhbGx5VW5pZmllZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlLCBlZGdlKSwgZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgIWopCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1Jlc3VsdCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMzLDcgKzE0Nyw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBub2Rlc0luVGhpc0Jsb2NrLmFkZChub2RlKTsKICAgICAgICAgICAg
ICAgICBpZiAoYmxvY2stPmlzUGhpSW5kZXgoaSkpCiAgICAgICAgICAgICAgICAgICAgIHBoaXNJ
blRoaXNCbG9jay5hZGQobm9kZSk7Ci0gICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG15
UmVmQ291bnRzLmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAobV9mb3JtID09IFRocmVhZGVkQ1BTIHx8ICFub2RlLT5oYXNWYXJpYWJsZUFj
Y2Vzc0RhdGEoKSkKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG15UmVmQ291
bnRzLmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytq
KSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwg
aik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKQEAgLTE0OCw2ICsxNjMsMTAgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSA9PSBQ
aGkpOwogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2Fs
KCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVt
Q2hpbGRyZW4obm9kZSk7ICsraikgeworICAgICAgICAgICAgICAgICAgICAvLyBQaGkgY2hpbGRy
ZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCisgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhpSW5kZXgoaSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMTg5LDExICsyMDgsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2
Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHBy
ZXZOb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgp
ID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9k
ZS0+b3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgcHJldk5vZGUtPm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFBoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9jYWwsIGJsb2NrLT5tX3By
ZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZXZOb2RlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
cHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBGbHVzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IHByZXZOb2RlLT5vcCgpID09IFBoaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IHByZXZOb2RlLT5vcCgpID09IFBoYW50b21Mb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocHJldk5vZGUgPT0gZWRnZS5ub2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0yMzEsNiArMjUyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdl
KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlLCBlZGdlKSwgbm9kZXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5v
ZGUoKSkpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tOgor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAm
JiAhaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBl
ZGdlKSwgIXBoaXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQpAQCAtMjU2LDYgKzI4OSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZm9ybSA9PSBMb2FkU3RvcmUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjaGVj
a09wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIGdldExvY2FsUG9zaXRp
b25zLCBzZXRMb2NhbFBvc2l0aW9ucywgYXJndW1lbnRUb09wZXJhbmQoaSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IG5lZWRzTmV3TGluZSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpIHx8IG5vZGUtPm9wKCkgPT0gUGhpIHx8IG5vZGUt
Pm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBoaToKKyAgICAg
ICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjYXNlIEdl
dExvY2FsOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMSgpLT5oYXNS
ZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ugb24gYWxs
IG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhlbgogICAgICAgICAgICAgICAgIC8v
IGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRo
aXMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186192</attachid>
            <date>2013-02-01 17:25:41 -0800</date>
            <delta_ts>2013-02-02 14:13:54 -0800</delta_ts>
            <desc>it builds!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>108549</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDEzMDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsMTIgQEAKIAkJMEYyMUMyN0QxNEJFNzI3
QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAvKiBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5dGVjb2RlQ29u
dmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNDJEQTcxM0Yz
QjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNTI2RTIxNkJDOTIwRjAwNzVENjNFIC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyNTI2REIxNkJDOTIwRDAwNzVENjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwICovOyB9OworCQkwRjI1MjZFMzE2QkM5MjExMDA3NUQ2M0UgLyogREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyNTI2REMxNkJDOTIwRDAwNzVENjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1MjZF
NDE2QkM5MjE1MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjUyNkREMTZCQzky
MEQwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9OworCQkw
RjI1MjZFNTE2QkM5MjE3MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1MjZERTE2
QkM5MjBEMDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNTI2RTYxNkJDOTIx
QTAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTI2REYxNkJDOTIwRDAwNzVENjNFIC8qIERG
R1VuaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjI1MjZFNzE2QkM5MjFEMDA3NUQ2M0Ug
LyogREZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyNTI2RTAxNkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9u
UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEyMTUx
QzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLzsgfTsKIAkJMEYyQkRDMTYxNTFD
NUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTk1OSw2ICs5NjUsMTIgQEAKIAkJMEYyMUMyN0ExNEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1
dGlvbkhhcm5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0aW9u
SGFybmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3RTE0QkVBQTgw
MDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCeXRlY29kZUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNTI2REIxNkJDOTIwRDAwNzVE
NjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
Q1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MjUyNkRDMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMjUyNkREMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlZGlj
dGlvbkluamVjdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1MjZERTE2QkM5MjBE
MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjI1MjZERjE2QkM5MjBEMDA3NUQ2M0UgLyogREZHVW5pZmljYXRpb25QaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVbmlmaWNhdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNTI2RTAxNkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0
aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVW5pZmljYXRp
b25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRml4dXBQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdGaXh1cFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTkyLDYg
KzI2MDQsOCBAQAogCQkJCTBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAq
LywKIAkJCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwICovLAogCQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5oICovLAorCQkJCTBGMjUyNkRCMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjI1MjZEQzE2QkM5MjBEMDA3NUQ2M0UgLyog
REZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8q
IERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEZGNDI3NjExNTkxQTFDOTAwNENCOUZGIC8qIERGR0Rp
c2Fzc2VtYmxlci5jcHAgKi8sCkBAIC0yNjQwLDYgKzI2NTQsOCBAQAogCQkJCTBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8sCiAJCQkJMEZG
RkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0
RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuaCAqLywKKwkJCQkwRjI1MjZERDE2QkM5MjBEMDA3
NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjI1MjZE
RTE2QkM5MjBEMDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJ
CQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyog
REZHUmVnaXN0ZXJCYW5rLmggKi8sCkBAIC0yNjU5LDYgKzI2NzUsOCBAQAogCQkJCTBGNjM5NDNE
MTVDNzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCAqLywK
IAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkw
RkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJMEYyNTI2REYx
NkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGMjUy
NkUwMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggKi8sCiAJCQkJMEYz
QjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCAqLywKIAkJCQkwRjNCM0Ey
QTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLywKIAkJCQkwRjJCREMzRjE1MjI4
MDE3MDBDRDg5MTAgLyogREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggKi8sCkBAIC0zMzE4LDYg
KzMzMzYsOSBAQAogCQkJCTE0Q0E5NThCMTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0
eUFuYWx5emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNENBOTU4RDE2QUI1MEZBMDA5MzhBMDYg
LyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYwNERB
MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjI1MjZFMzE2QkM5MjExMDA3NUQ2M0UgLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNTI2RTUxNkJDOTIxNzAwNzVENjNFIC8qIERGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNTI2RTcxNkJD
OTIxRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
Mzk1MSw2ICszOTcyLDkgQEAKIAkJCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29t
bW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBE
RkdFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAv
KiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjUyNkUy
MTZCQzkyMEYwMDc1RDYzRSAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMjUyNkU0MTZCQzkyMTUwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyNTI2RTYxNkJDOTIxQTAwNzVENjNF
IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMTQxMzAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDYgKzQ2LDggQEAgc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0cyB7CiAgICAgc3RhdGlj
IHZvaWQgZHVtcChjb25zdCBUJiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCkgeyB2YWx1ZS5kdW1w
KG91dCk7IH0KIH07CiAKK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQsIExvY2Fs
T3BlcmFuZCB9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHMgPSBPcGVy
YW5kVmFsdWVUcmFpdHM8VD4gPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgpAQCAtNjYsNiAr
NjgsMjggQEAgcHVibGljOgogICAgIFQmIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fbG9j
YWxzW2lkeF07IH0KICAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX2xvY2Fsc1tpZHhdOyB9CiAgICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFu
ZEtpbmQ+CisgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG9w
ZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJP
ZkFyZ3VtZW50cygpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICB9Cisg
ICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CisgICAgVCYgYXRGb3Ioc2l6ZV90
IGlkeCkKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQp
CisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4KTsKKyAgICAgICAgcmV0dXJuIGxvY2Fs
KGlkeCk7CisgICAgfQorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAg
IGNvbnN0IFQmIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAob3Bl
cmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50
KGlkeCk7CisgICAgICAgIHJldHVybiBsb2NhbChpZHgpOworICAgIH0KKyAgICAKICAgICB2b2lk
IGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChzaXplIDw9IG1f
bG9jYWxzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4Nyw2ICsx
Nzg3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBGbHVzaDoKKyAgICBjYXNlIFBoYW50b21M
b2NhbDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC0xOTEzLDYgKzE5MTQsNyBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0
YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgY2FzZSBQaGFu
dG9tTG9jYWw6CiAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICAvLyBUaGUgYmxvY2sg
dHJhbnNmZXJzIHRoZSB2YWx1ZSBmcm9tIGhlYWQgdG8gdGFpbC4KICAgICAgICAgICAgIHNvdXJj
ZSA9IGluVmFyaWFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDE0MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAg
ICAgICAgICAgY2FzZSBQaGk6IC8qIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA4NTU1ICovIHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02MzUsOCArNjM1LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgaWYgKGNoYW5nZWQpCi0gICAgICAgICAgICBtX2dyYXBoLmNv
bGxlY3RHYXJiYWdlKCk7CisgICAgICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICAgICAgICBtX2dy
YXBoLmRldGhyZWFkKCk7CisgICAgICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IExvYWRTdG9yZTsK
KyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMu
aAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9E
RSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1h
LCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0
ZW1wbGF0ZVBvc3QgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9kZShHcmFwaCYgZ3JhcGgsIFJl
ZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0
ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSogQmFzaWNCbG9j
azo6YXBwZW5kTm9kZShHcmFwaCYgZ3JhcGgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1v
ZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFy
YW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKICAgICAgICAgTm9kZSogcmVzdWx0ID0g
Z3JhcGguYWRkTm9kZShyZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFy
YW1zQ29tbWEgdmFsdWVBcmdzKTsgXAogICAgICAgICBhcHBlbmQocmVzdWx0KTsgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDE0MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsNjQgKzI4NywzMyBAQCBwcml2YXRlOgog
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2Nh
bChvcGVyYW5kKTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2Fw
dHVyZWQob3BlcmFuZCwgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpOwogICAg
ICAgICAKKyAgICAgICAgLy8gVGhpcyBoYXMgdHdvIGdvYWxzOiAxKSBsaW5rIHRvZ2V0aGVyIHZh
cmlhYmxlIGFjY2VzcyBkYXRhcywgYW5kIDIpCisgICAgICAgIC8vIHRyeSB0byBhdm9pZCBjcmVh
dGluZyByZWR1bmRhbnQgR2V0TG9jYWxzLiAoMSkgaXMgcmVxdWlyZWQgZm9yCisgICAgICAgIC8v
IGNvcnJlY3RuZXNzIC0gbm8gb3RoZXIgcGhhc2Ugd2lsbCBlbnN1cmUgdGhhdCBibG9jay1sb2Nh
bCB2YXJpYWJsZQorICAgICAgICAvLyBhY2Nlc3MgZGF0YSB1bmlmaWNhdGlvbiBpcyBkb25lIGNv
cnJlY3RseS4gKDIpIGlzIHB1cmVseSBvcHBvcnR1bmlzdGljCisgICAgICAgIC8vIGFuZCBpcyBt
ZWFudCBhcyBhbiBjb21waWxlLXRpbWUgb3B0aW1pemF0aW9uIG9ubHkuCisgICAgICAgIAorICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOworICAgICAgICAKICAgICAgICAgaWYg
KG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEZsdXNoKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVHdvIHBvc3NpYmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sgd2FudHMgdGhl
IGxvY2FsIHRvIGJlIGxpdmUKLSAgICAgICAgICAgICAgICAvLyBidXQgaGFzIG5vdCBsb2FkZWQg
aXRzIHZhbHVlLCBvciBpdCBoYXMgbG9hZGVkIGl0cyB2YWx1ZSwgaW4KLSAgICAgICAgICAgICAg
ICAvLyB3aGljaCBjYXNlIHdlJ3JlIGRvbmUuCi0gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkp
IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3Jh
cGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFu
ZCkgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0
TG9jYWwpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUlzQ2FwdHVyZWQo
aXNDYXB0dXJlZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ICE9IEZsdXNoKTsKLQotICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm1l
cmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChpc0NhcHR1cmVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugd2lzaCB0byB1c2UgdGhl
IHNhbWUgdmFyaWFibGUgYWNjZXNzIGRhdGEgYXMgdGhlIHByZXZpb3VzIGFjY2VzcywKLSAgICAg
ICAgICAgICAgICAvLyBidXQgZm9yIGFsbCBvdGhlciBwdXJwb3NlcyB3ZSB3YW50IHRvIGlzc3Vl
IGEgbG9hZCBzaW5jZSBmb3IgYWxsIHdlCi0gICAgICAgICAgICAgICAgLy8ga25vdywgYXQgdGhp
cyBzdGFnZSBvZiBjb21waWxhdGlvbiwgdGhlIGxvY2FsIGhhcyBiZWVuIGNsb2JiZXJlZC4KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgbGluayB0byB0
aGUgUGhpIG5vZGUsIG5vdCB0byB0aGUgR2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9kZS0+b3AoKSA9
PSBQaGkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIG5ld0dldExv
Y2FsID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbigKLSAgICAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwg
bm9kZSkpOwotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bG9jYWwob3BlcmFuZCkgPSBuZXdHZXRMb2NhbDsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3
R2V0TG9jYWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
OwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9j
YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQp
OworICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwg
aXNDYXB0dXJlZCk7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayBmb3IgcmVhZHMgb2Yg
dGVtcG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3MsCi0gICAgICAgIC8vIGV4cGFuZCBtX3ByZXNl
cnZlZFZhcnMgdG8gY292ZXIgdGhlc2UuCi0gICAgICAgIG1fcHJlc2VydmVkVmFycy5zZXQob3Bl
cmFuZCk7Ci0gICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKICAg
ICAgICAgCi0gICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFi
bGVBY2Nlc3NEYXRhKSk7Ci0gICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tF
bnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBvcGVyYW5kKSk7Ci0gICAgICAgIG5vZGUgPSBpbmpl
Y3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJp
YWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5k
U3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkpOwogICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9k
ZTsKLSAgICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0
TG9jYWxGaXJzdFRpbWUob3BlcmFuZCwgbm9kZSk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9CiAgICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBOb2RlKiB2
YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQpAQCAtMzczLDYxICszNDIsMjUgQEAg
cHJpdmF0ZToKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2Nv
ZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kKTsKIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlOworICAgICAgICAKICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IEZsdXNoKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHdvIHBvc3Np
YmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sgd2FudHMgdGhlIGxvY2FsIHRvIGJlIGxpdmUKLSAg
ICAgICAgICAgICAgICAvLyBidXQgaGFzIG5vdCBsb2FkZWQgaXRzIHZhbHVlLCBvciBpdCBoYXMg
bG9hZGVkIGl0cyB2YWx1ZSwgaW4KLSAgICAgICAgICAgICAgICAvLyB3aGljaCBjYXNlIHdlJ3Jl
IGRvbmUuCi0gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5t
ZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBp
bmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2
YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJl
ZCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldEFyZ3Vt
ZW50KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgZ2V0dGluZyBhbiBhcmd1bWVudCBpbiB0
aGUgZmlyc3QgYmFzaWMgYmxvY2s7IGxpbmsKLSAgICAgICAgICAgICAgICAvLyB0aGUgR2V0TG9j
YWwgdG8gdGhlIFNldEFyZ3VtZW50LgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5sb2Nh
bCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOwotICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKLSAgICAgICAgICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxh
dGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGUpLCBub2RlKSk7Ci0gICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1
bWVudCkgPSBub2RlOwotICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNDYXB0dXJlZCkgewotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAgICAgICBu
b2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9kZS0+b3Ao
KSA9PSBTZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCB8fCBub2RlLT5vcCgpID09IFBo
aSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24o
YWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwg
bm9kZSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUlzQ2FwdHVyZWQo
aXNDYXB0dXJlZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IEdldExvY2FsKQorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAg
ICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFy
aWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICAKLSAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7Ci0KLSAgICAgICAgTm9kZSogcGhpID0gYWRkVG9H
cmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKLSAgICAgICAgbV9hcmd1bWVu
dFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGFyZ3Vt
ZW50KSk7Ci0gICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRv
R3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAg
ICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2Nh
bCwgT3BJbmZvKHZhcmlhYmxlKSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7Ci0gICAgICAgIAotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50
LCBub2RlKTsKLSAgICAgICAgCiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICB2b2lk
IHNldEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0g
Tm9ybWFsU2V0KQpAQCAtNDkzLDYzICs0MjYsMjQgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IGZsdXNoRGlyZWN0KGludCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0
aW9uKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNoZWNrIGlmIHRoZSBz
YW1lIG9wZXJhbmQgaGFkIGFscmVhZHkgYmVlbiBmbHVzaGVkIHRvCi0gICAgICAgIC8vIHNvbWUg
b3RoZXIgbG9jYWwgdmFyaWFibGUuCi0gICAgICAgIAogICAgICAgICBib29sIGlzQ2FwdHVyZWQg
PSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBtX2lubGluZVN0YWNrVG9wLT5tX2lu
bGluZUNhbGxGcmFtZSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQob3BlcmFuZCA8IEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGU7Ci0g
ICAgICAgIGludCBpbmRleDsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQp
KSB7Ci0gICAgICAgICAgICBpbmRleCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOwotICAg
ICAgICAgICAgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
aW5kZXgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kOwot
ICAgICAgICAgICAgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
aW5kZXgpOwotICAgICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChvcGVyYW5kKTsKLSAgICAg
ICAgfQorICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgbm9kZSA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpICE9IEZsdXNoICYmIG5vZGUtPm9w
KCkgIT0gR2V0TG9jYWwpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBFbWl0IGEgRmx1
c2ggcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGFscmVhZHkgZmx1c2hlZCBpdC4KLSAgICAgICAg
ICAgIC8vIFRoaXMgZ2l2ZXMgdXMgZ3VpZGFuY2UgdG8gc2VlIHRoYXQgdGhlIHZhcmlhYmxlIGFs
c28gbmVlZHMgdG8gYmUgZmx1c2hlZAotICAgICAgICAgICAgLy8gZm9yIGFyZ3VtZW50cywgZXZl
biBpZiBpdCBhbHJlYWR5IGhhZCB0byBiZSBmbHVzaGVkIGZvciBvdGhlciByZWFzb25zLgotICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVy
Z2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChGbHVzaCwg
T3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGUpOwotICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFi
bGUodmFyaWFibGVBY2Nlc3NEYXRhKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQor
ICAgICAgICAgICAgdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAg
ICAgICAgIHZhcmlhYmxlLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFu
ZCwgaXNDYXB0dXJlZCk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1
cmVkKTsKLSAgICAgICAgTm9kZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpKTsKLSAgICAgICAgbm9kZSA9IGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2
YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQo
b3BlcmFuZCkpIHsKLSAgICAgICAgICAgIG1fYXJndW1lbnRQaGlTdGFjay5hcHBlbmQoUGhpU3Rh
Y2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOwotICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCkgPSBub2RlOwotICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGlt
ZShpbmRleCwgbm9kZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2xvY2FsUGhp
U3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsK
LSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgp
ID0gbm9kZTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0
TG9jYWxGaXJzdFRpbWUoaW5kZXgsIG5vZGUpOwotICAgICAgICB9CisgICAgICAgIG5vZGUgPSBh
ZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgaWYg
KGFyZ3VtZW50UG9zaXRpb24pCi0gICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJp
YWJsZSh2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+
YWRkVmFyaWFibGUodmFyaWFibGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGZsdXNoQXJndW1l
bnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXMoKQpAQCAtMjAyNCw3ICsxOTE4LDYgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENh
Y2hlKSk7CiAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJn
dW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50
c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50
KTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1l
bnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAgfQogICAgIH0KQEAg
LTMyMTMsMTUxICszMTA2LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgIH0KIH0KIAotdGVtcGxhdGU8Qnl0ZUNvZGVQYXJzZXI6OlBoaVN0YWNrVHlwZSBz
dGFja1R5cGU+Ci12b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQotewotICAg
IFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4mIHBoaVN0YWNrID0gKHN0YWNrVHlwZSA9PSBBcmd1
bWVudFBoaVN0YWNrKSA/IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsKLSAg
ICAKLSAgICB3aGlsZSAoIXBoaVN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBQaGlTdGFja0Vu
dHJ5IGVudHJ5ID0gcGhpU3RhY2subGFzdCgpOwotICAgICAgICBwaGlTdGFjay5yZW1vdmVMYXN0
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBQcmVkZWNlc3Nvckxpc3Qm
IHByZWRlY2Vzc29ycyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNzb3JzOwotICAgICAgICB1
bnNpZ25lZCB2YXJObyA9IGVudHJ5Lm1fdmFyTm87Ci0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogZGF0YUZvclBoaSA9IGVudHJ5Lm1fcGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLQotI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0Yo
IiAgIEhhbmRsaW5nIHBoaSBlbnRyeSBmb3IgdmFyICV1LCBwaGkgQCV1LlxuIiwgZW50cnkubV92
YXJObywgZW50cnkubV9waGkpOwotI2VuZGlmCi0gICAgICAgIAotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewotI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgIERl
YWxpbmcgd2l0aCBwcmVkZWNlc3NvciBibG9jayAldS5cbiIsIHByZWRlY2Vzc29yc1tpXSk7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JC
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKLQotICAgICAg
ICAgICAgTm9kZSomIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVk
ZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQodmFyTm8pIDogcHJlZGVjZXNz
b3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKHZhck5vKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTm9kZSogdmFsdWVJblByZWRlY2Vzc29yID0gdmFyOwotICAgICAgICAgICAgaWYg
KCF2YWx1ZUluUHJlZGVjZXNzb3IpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIERpZCBub3QgZmluZCBu
b2RlLCBhZGRpbmcgcGhpLlxuIik7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIHZhbHVlSW5Q
cmVkZWNlc3NvciA9IGluc2VydFBoaU5vZGUoT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShz
dGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjayA/IGFyZ3VtZW50VG9PcGVyYW5kKHZhck5vKSA6
IHN0YXRpY19jYXN0PGludD4odmFyTm8pLCBmYWxzZSkpLCBwcmVkZWNlc3NvckJsb2NrKTsKLSAg
ICAgICAgICAgICAgICB2YXIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7Ci0gICAgICAgICAgICAgICAg
aWYgKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKQotICAgICAgICAgICAgICAgICAgICBw
cmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUodmFy
Tm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJz
dFRpbWUodmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0gICAgICAgICAgICAgICAgcGhpU3Rh
Y2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9jaywgdmFsdWVJblByZWRlY2Vz
c29yLCB2YXJObykpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUluUHJlZGVjZXNzb3It
Pm9wKCkgPT0gR2V0TG9jYWwpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIEZvdW5kIEdldExvY2FsIEAl
dS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvci0+aW5kZXgoKSk7Ci0jZW5kaWYKLQotICAgICAgICAg
ICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIFZhcmlhYmxlQWNjZXNzRGF0YXMg
YXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZQotICAgICAgICAgICAgICAgIC8vIEdldExvY2FsIGFu
ZCBpdHMgYmxvY2stbG9jYWwgUGhpLiBTdHJpY3RseSBzcGVha2luZyB3ZSBvbmx5IG5lZWQgdGhl
IHR3bwotICAgICAgICAgICAgICAgIC8vIHRvIGJlIHVuaWZpZWQuIEJ1dCBmb3IgZWZmaWNpZW5j
eSwgd2Ugd2FudCB0aGUgY29kZSB0aGF0IGNyZWF0ZXMgR2V0TG9jYWxzCi0gICAgICAgICAgICAg
ICAgLy8gYW5kIFBoaXMgdG8gdHJ5IHRvIHJldXNlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXMgbXVj
aCBhcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVJblByZWRlY2Vzc29y
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YWx1ZUluUHJlZGVjZXNzb3ItPmNoaWxkMSgpLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
dmFsdWVJblByZWRlY2Vzc29yID0gdmFsdWVJblByZWRlY2Vzc29yLT5jaGlsZDEoKS5ub2RlKCk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgRm91bmQgQCV1LlxuIiwg
dmFsdWVJblByZWRlY2Vzc29yLT5pbmRleCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3Nvci0+b3Ao
KSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgIHx8IHZhbHVlSW5QcmVkZWNlc3Nvci0+b3Ao
KSA9PSBQaGkKLSAgICAgICAgICAgICAgICB8fCB2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0g
Rmx1c2gKLSAgICAgICAgICAgICAgICB8fCAodmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IFNl
dEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclByZWRlY2Vzc29yID0g
dmFsdWVJblByZWRlY2Vzc29yLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgZGF0YUZvclByZWRlY2Vzc29yLT51bmlmeShkYXRhRm9yUGhpKTsKLQotICAg
ICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGVudHJ5Lm1fcGhpOwotI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBSZWYg
Y291bnQgb2YgQCV1ID0gJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCBwaGlOb2RlLT5yZWZDb3Vu
dCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpIHsKLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgIFJlZmZpbmcgQCV1LlxuIiwgdmFsdWVJblByZWRlY2Vzc29yKTsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQxKCkpIHsKLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDEgPSBAJXUuXG4iLCBwaGlOb2RlLT5p
bmRleCgpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgcGhp
Tm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UodmFsdWVJblByZWRlY2Vzc29yKSk7Ci0jaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4KCkpOwotICAg
ICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwotICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDIo
KSkgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMiA9IEAldS5cbiIsIHBo
aU5vZGUtPmluZGV4KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0jZW5kaWYKLSAgICAgICAgICAg
ICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIoRWRnZSh2YWx1ZUluUHJlZGVjZXNzb3Ip
KTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgo
KSk7Ci0gICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUo
KSk7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXBoaU5vZGUt
PmNoaWxkMygpKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQzID0gQCV1
LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgdmFsdWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgotICAg
ICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLnNldENoaWxkMyhFZGdlKHZhbHVlSW5QcmVk
ZWNlc3NvcikpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2Rl
LT5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpk
YXRhRmlsZSgpKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTm9kZSogbmV3UGhpID0gaW5zZXJ0UGhpTm9kZShPcEluZm8oZGF0YUZvclBoaSks
IGVudHJ5Lm1fYmxvY2spOwotICAgICAgICAgICAgCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNwbGl0dGluZyBA
JXUsIGNyZWF0ZWQgQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgbmV3UGhpLT5pbmRleCgpKTsK
LSNlbmRpZgotCi0gICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoLnJlZihuZXdQaGkpOwotCi0gICAgICAgICAgICBuZXdQaGktPmNoaWxk
cmVuID0gcGhpTm9kZS0+Y2hpbGRyZW47Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1
OiAiLCBuZXdQaGktPmluZGV4KCkpOwotICAgICAgICAgICAgbmV3UGhpLT5kdW1wQ2hpbGRyZW4o
V1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgot
Ci0gICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKG5ld1BoaSwgdmFsdWVJ
blByZWRlY2Vzc29yLCAwKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBo
aU5vZGUtPmluZGV4KCkpOwotICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6
ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAgICAg
ICAgfQotICAgIH0KLX0KLQogdm9pZCBCeXRlQ29kZVBhcnNlcjo6Zml4VmFyaWFibGVBY2Nlc3NQ
cmVkaWN0aW9ucygpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92
YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKQEAgLTM3MzAsMTQgKzM0NzgsNiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgZGF0YUxvZ0YoIlByb2Nlc3NpbmcgbG9j
YWwgdmFyaWFibGUgcGhpcy5cbiIpOwogI2VuZGlmCiAgICAgCi0gICAgbV9jdXJyZW50UHJvZmls
aW5nSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKLSAgICAKLSAgICBwcm9jZXNzUGhpU3RhY2s8TG9j
YWxQaGlTdGFjaz4oKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
Ci0gICAgZGF0YUxvZ0YoIlByb2Nlc3NpbmcgYXJndW1lbnQgcGhpcy5cbiIpOwotI2VuZGlmCi0g
ICAgcHJvY2Vzc1BoaVN0YWNrPEFyZ3VtZW50UGhpU3RhY2s+KCk7Ci0KICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKGJsb2NrKTsKQEAgLTM3
NDUsMjcgKzM0ODUsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgICAg
ICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7CiAgICAgfQogICAgIAotICAg
IGZpeFZhcmlhYmxlQWNjZXNzUHJlZGljdGlvbnMoKTsKLSAgICAKLSAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5t
X29zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5v
cGVyYW5kKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJh
bmRGb3JJbmRleChpKSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+aGFzTG9jYWwoKSk7Ci0gICAgICAg
ICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdCgKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlc1tpXSkpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJzID0gbV9w
cmVzZXJ2ZWRWYXJzOwogICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsKICAg
ICBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3
Miw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJl
bWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxv
Y2ssIDApLCBOb0Jsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9
IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTExMyw2ICsxMTQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGV0
aHJlYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcygKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRp
dGlvbiksCkBAIC0xMjYsNiArMTI4LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRl
eCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywg
Y29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRh
a2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29u
ZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMTU0LDYgKzE1Nyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ0ZHU2ltcGxpZnk6
IEJyYW5jaCB0byBzYW1lIHN1Y2Nlc3NvciBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1
LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIHRh
cmdldEJsb2NrSW5kZXgpOwogI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxvY2tz
KGJsb2NrSW5kZXgsIHRhcmdldEJsb2NrSW5kZXgsIE5vQmxvY2spOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCkBAIC0yNTAsMTAyICsyNTQsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKGJsb2Nr
KTsKICAgICAgICAgQVNTRVJUKCFibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAKLSAgICAg
ICAgLy8gMSkgUmVtb3ZlIHJlZmVyZW5jZXMgZnJvbSBvdGhlciBibG9ja3MgdG8gdGhpcyBibG9j
ay4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1TdWNjZXNzb3JzKGJsb2Nr
KTsgaS0tOykKLSAgICAgICAgICAgIGZpeFBoaXMoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNz
b3IoYmxvY2ssIGkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5w
aGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9y
LmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgICAgICBtX2dyYXBo
Lm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwogICAgICAgICAKLSAgICAg
ICAgLy8gMikgS2lsbCB0aGUgYmxvY2sKICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5jbGVhcigpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFz
aWNCbG9jayogYmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgaW50IG9wZXJhbmQpCisgICAg
dm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBqZXR0
aXNvbmVkQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgaW50IG9wZXJhbmQpCiAgICAgewot
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICBOb2RlKiBub2RlID0gamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQo
KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9j
YWwpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBp
ZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IEFTU0VSVChub2RlLT5vcCgpICE9IFNldExvY2FsKTsKICAgICAgICAgYmxvY2stPmFwcGVuZE5v
ZGUoCi0gICAgICAgICAgICBtX2dyYXBoLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNO
b25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBub2RlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBm
aXhQb3NzaWJsZUdldExvY2FsKEJhc2ljQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdlLCBib29sIGNo
YW5nZVJlZikKLSAgICB7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gZWRnZS5ub2RlKCk7Ci0gICAg
ICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKLSAgICAgICAgICAgIHJldHVybjsKLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dG
KCIgICAgQ29uc2lkZXJpbmcgR2V0TG9jYWwgYXQgQCV1LCBsb2NhbCByJWQuXG4iLCBub2RlLT5p
bmRleCgpLCBjaGlsZC0+bG9jYWwoKSk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGNoaWxkLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBj
YXB0dXJlZC5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgTm9kZSogb3JpZ2luYWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KGNoaWxkLT5sb2NhbCgpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUu
XG4iLCBvcmlnaW5hbE5vZGUtPmluZGV4KCkpOwotI2VuZGlmCi0gICAgICAgIEFTU0VSVChvcmln
aW5hbE5vZGUpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgZGF0YUxvZ0YoIiAgICAgICAgT3JpZ2luYWwgaGFzIGxvY2FsIHIlZC5cbiIsIG9yaWdp
bmFsTm9kZS0+bG9jYWwoKSk7Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUKGNoaWxkLT5sb2NhbCgp
ID09IG9yaWdpbmFsTm9kZS0+bG9jYWwoKSk7Ci0gICAgICAgIC8vIFBvc3NpYmlsaXRpZXM6Ci0g
ICAgICAgIC8vIFNldExvY2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1
ZSBvZiBzb21ldGhpbmcgdGhhdCBpcyBpbW1lZGlhdGVseQotICAgICAgICAvLyAgICAgYXZhaWxh
YmxlIGluIHRoZSBmaXJzdCBibG9jayB3aXRoIGEga25vd24gTm9kZUluZGV4LgotICAgICAgICAv
LyBHZXRMb2NhbCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgZ2V0dGluZyB0aGUgdmFsdWUgb2Ygc29t
ZXRoaW5nIHRoYXQgdGhlIGZpcnN0Ci0gICAgICAgIC8vICAgICBibG9jayBhbHNvIGdldHMuCi0g
ICAgICAgIC8vIFBoaSAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZl
IG9uIGFuIG9wZXJhbmQgdGhhdCB0aGUgZmlyc3QgYmxvY2sKLSAgICAgICAgLy8gICAgIHdhcyBh
bHNvIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbi4KLSAgICAgICAgLy8gU2V0QXJndW1lbnQgLT4g
dGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRo
YXQgdGhlCi0gICAgICAgIC8vICAgICBmaXJzdCBibG9jayB3YXMga2VlcGluZyBhbGl2ZSBieSB2
aXJ0dWUgb2YgdGhlIGZpcnN0QmxvY2sgYmVpbmcgdGhlIHJvb3QgYW5kCi0gICAgICAgIC8vICAg
ICB0aGUgb3BlcmFuZCBiZWluZyBhbiBhcmd1bWVudC4KLSAgICAgICAgLy8gRmx1c2ggLT4gdGhl
IHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQg
dGhlIGZpcnN0Ci0gICAgICAgIC8vICAgICBibG9jayB3YXMgZm9yY2luZyB0byBiZSBhbGl2ZSwg
c28gdGhlIHNlY29uZCBibG9jayBzaG91bGQgcmVmZXIgY2hpbGQgb2YKLSAgICAgICAgLy8gICAg
IHRoZSBmbHVzaC4KLSAgICAgICAgaWYgKG9yaWdpbmFsTm9kZS0+b3AoKSA9PSBGbHVzaCkKLSAg
ICAgICAgICAgIG9yaWdpbmFsTm9kZSA9IG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwot
ICAgICAgICBzd2l0Y2ggKG9yaWdpbmFsTm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIFNldExv
Y2FsOiB7Ci0gICAgICAgICAgICBpZiAoY2hhbmdlUmVmKQotICAgICAgICAgICAgICAgIEFTU0VS
VChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3Mg
YSBTZXRMb2NhbC5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxk
KGVkZ2UsIG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBjaGFuZ2VSZWYpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRMb2NhbDogewotI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICAgIEl0J3MgYSBHZXRMb2NhbC5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAo
b3JpZ2luYWxOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGgu
Y2hhbmdlQ2hpbGQoZWRnZSwgb3JpZ2luYWxOb2RlLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBhIEdldExvY2FsIHRoYXQgcG9pbnRzIHRvIGEgY2hpbGQgR2V0TG9jYWwg
dGhhdCBpcyBkZWFkLCB0aGVuCi0gICAgICAgICAgICAvLyB3ZSBoYXZlIG5vIG5lZWQgdG8gZG8g
YW55dGhpbmc6IHRoaXMgb3JpZ2luYWwgR2V0TG9jYWwgaXMgc3RpbGwgdmFsaWQuCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFBoaToKLSAgICAgICAgY2FzZSBT
ZXRBcmd1bWVudDogewotICAgICAgICBpZiAoY2hhbmdlUmVmKQotICAgICAgICAgICAgQVNTRVJU
KG9yaWdpbmFsTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBQ
aGkvU2V0QXJndW1lbnQuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgLy8gS2VlcCB0aGUgR2V0
TG9jYWwhCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9CisgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERv
bnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCBjb2RlT3JpZ2luLAorICAgICAgICAg
ICAgT3BJbmZvKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgamV0dGlzb25CbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0
dGlzb25lZEJsb2NrSW5kZXgsIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luKQpAQCAtMzU0
LDQ1ICsyODAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJs
b2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0KCk7CiAgICAg
ICAgIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFy
aWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKLSAgICAgICAgICAgIGtlZXBP
cGVyYW5kQWxpdmUoYmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQo
aSkpOworICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShibG9jaywgamV0dGlzb25lZEJsb2Nr
LCBib3VuZGFyeUNvZGVPcmlnaW4sIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkxvY2FscygpOyArK2kpCi0gICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBi
b3VuZGFyeUNvZGVPcmlnaW4sIGkpOworICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShibG9j
aywgamV0dGlzb25lZEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGkpOwogICAgICAgICAKICAg
ICAgICAgZml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxv
Y2tJbmRleCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZml4UGhpcyhCbG9ja0luZGV4IHNvdXJj
ZUJsb2NrSW5kZXgsIEJsb2NrSW5kZXggZGVzdGluYXRpb25CbG9ja0luZGV4KQotICAgIHsKLSAg
ICAgICAgQmFzaWNCbG9jayogc291cmNlQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3NvdXJjZUJs
b2NrSW5kZXhdLmdldCgpOwotICAgICAgICBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tkZXN0aW5hdGlvbkJsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBp
ZiAoIWRlc3RpbmF0aW9uQmxvY2spIHsKLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIHRyeWluZyB0
byBraWxsIG9mZiB0aGUgc291cmNlIGJsb2NrIGFuZCB0aGUgZGVzdGluYXRpb24gYmxvY2sgaXMg
YWxyZWFkeQotICAgICAgICAgICAgLy8gZGVhZCwgdGhlbiB3ZSdyZSBkb25lIQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVz
dGluYXRpb25CbG9jay0+cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZSogcGhp
Tm9kZSA9IGRlc3RpbmF0aW9uQmxvY2stPnBoaXNbaV07Ci0gICAgICAgICAgICBOb2RlKiBteU5v
ZGUgPSBzb3VyY2VCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwo
KSk7Ci0gICAgICAgICAgICBpZiAoIW15Tm9kZSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMg
d2lsbCBoYXBwZW4gaWYgdGhlcmUgaXMgYSBwaGkgaW4gdGhlIGRlc3RpbmF0aW9uIHRoYXQgcmVm
ZXJzIGludG8KLSAgICAgICAgICAgICAgICAvLyB0aGUgZGVzdGluYXRpb24gaXRzZWxmLgotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKAotICAgICAgICAg
ICAgICAgICJDb25zaWRlcmluZyByZW1vdmluZyByZWZlcmVuY2UgZnJvbSBwaGkgQCV1IHRvIEAl
dSBvbiBsb2NhbCByJWQ6IiwKLSAgICAgICAgICAgICAgICBwaGlOb2RlLT5pbmRleCgpLCBteU5v
ZGUtPmluZGV4KCksIHBoaU5vZGUtPmxvY2FsKCkpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAo
bXlOb2RlLT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAgIG15Tm9kZSA9IG15Tm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraikKLSAgICAgICAgICAgICAgICByZW1vdmVQb3RlbnRp
YWxseURlYWRQaGlSZWZlcmVuY2UobXlOb2RlLCBwaGlOb2RlLCBqLCBzb3VyY2VCbG9jay0+aXNS
ZWFjaGFibGUpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci0gICAg
CiAgICAgdm9pZCBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCwgQmxvY2tJbmRleCBqZXR0aXNvbmVkQmxvY2tJbmRleCkKICAgICB7CiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtNDA3LDggKzMwMSw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzLnJlbW92ZUxhc3Qo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmaXhQ
aGlzKGJsb2NrSW5kZXgsIGpldHRpc29uZWRCbG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCByZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UoTm9kZSogbXlOb2RlLCBOb2Rl
KiBwaGlOb2RlLCB1bnNpZ25lZCBlZGdlSW5kZXgsIGJvb2wgY2hhbmdlUmVmKQpAQCAtNTczLDk2
ICs0NjUsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIGRpZmZlcmVudCBwYXRoIHRoYW4g
c2Vjb25kQmxvY2suCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMo
KTsgKytpKQotICAgICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoZmlyc3RCbG9jaywgYm91
bmRhcnlDb2RlT3JpZ2luLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CisgICAgICAgICAgICAgICAg
a2VlcE9wZXJhbmRBbGl2ZShmaXJzdEJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5Q29k
ZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkpOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fs
cygpOyArK2kpCi0gICAgICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShmaXJzdEJsb2NrLCBi
b3VuZGFyeUNvZGVPcmlnaW4sIGkpOworICAgICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUo
Zmlyc3RCbG9jaywgamV0dGlzb25lZEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGkpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJs
b2NrLT5waGlzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgZmlyc3RCbG9jay0+cGhpcy5hcHBl
bmQoc2Vjb25kQmxvY2stPnBoaXNbaV0pOwogCi0gICAgICAgIC8vIEJlZm9yZSB3ZSBzdGFydCBj
aGFuZ2luZyB0aGUgc2Vjb25kIGJsb2NrJ3MgZ3JhcGgsIHJlY29yZCB3aGF0IG5vZGVzIHdvdWxk
Ci0gICAgICAgIC8vIGJlIHJlZmVyZW5jZWQgYnkgc3VjY2Vzc29ycyBvZiB0aGUgc2Vjb25kIGJs
b2NrLgotICAgICAgICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiBzdWJzdGl0dXRpb25z
KAotICAgICAgICAgICAgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3Vt
ZW50cygpLAotICAgICAgICAgICAgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJP
ZkxvY2FscygpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKLSAgICAgICAgICAgIHJl
Y29yZFBvc3NpYmxlSW5jb21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1dGlvbnMs
IGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
ZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsraSkKLSAgICAg
ICAgICAgIHJlY29yZFBvc3NpYmxlSW5jb21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0
aXR1dGlvbnMsIGkpOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxv
Y2stPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gc2Vjb25kQmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBib29sIGNoaWxkcmVuQWxyZWFkeUZp
eGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewotICAgICAgICAgICAgY2FzZSBQaGFudG9tOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFu
b2RlLT5jaGlsZDEoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAg
ICAgICAgICAgICAgIE5vZGUqIHBvc3NpYmxlTG9jYWxPcCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKLSAgICAgICAgICAgICAgICBpZiAocG9zc2libGVMb2NhbE9wLT5vcCgpICE9IEdldExvY2Fs
Ci0gICAgICAgICAgICAgICAgICAgICYmIHBvc3NpYmxlTG9jYWxPcC0+aGFzTG9jYWwoKQotICAg
ICAgICAgICAgICAgICAgICAmJiAhcG9zc2libGVMb2NhbE9wLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0g
Zmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocG9zc2libGVMb2NhbE9wLT5sb2Nh
bCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldExvY2FsLT5vcCgpID09IFNldExvY2Fs
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS0+Y2hp
bGRyZW4uY2hpbGQxKCksIHNldExvY2FsLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCghbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5B
bHJlYWR5Rml4ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
IHsKLSAgICAgICAgICAgICAgICAvLyBBIEZsdXNoIGNvdWxkIHVzZSBhIEdldExvY2FsLCBTZXRM
b2NhbCwgU2V0QXJndW1lbnQsIG9yIGEgUGhpLgotICAgICAgICAgICAgICAgIC8vIElmIGl0IHVz
ZXMgYSBHZXRMb2NhbCwgaXQnbGwgYmUgdGFrZW4gY2FyZSBvZiBiZWxvdy4gSWYgaXQgdXNlcyBh
Ci0gICAgICAgICAgICAgICAgLy8gU2V0TG9jYWwgb3IgU2V0QXJndW1lbnQsIHRoZW4gaXQgbXVz
dCBiZSB1c2luZyBhIG5vZGUgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAvLyBzYW1lIGJsb2Nr
LiBCdXQgaWYgaXQgdXNlcyBhIFBoaSwgdGhlbiB3ZSBzaG91bGQgcmVkaXJlY3QgaXQgdG8KLSAg
ICAgICAgICAgICAgICAvLyB1c2Ugd2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGFkdmVydGlzZWQg
YXMgYSB0YWlsIG9wZXJhbmQuCi0gICAgICAgICAgICAgICAgLy8gU2ltaWxhcmx5IGZvciBHZXRM
b2NhbDsgaXQgY291bGQgdXNlIGFueSBvZiB0aG9zZSBleGNlcHQgZm9yCi0gICAgICAgICAgICAg
ICAgLy8gR2V0TG9jYWwuIElmIGl0IHVzZXMgYSBQaGkgdGhlbiBpdCBzaG91bGQgYmUgcmVkaXJl
Y3RlZCB0byB1c2UgYQotICAgICAgICAgICAgICAgIC8vIFBoaSBmcm9tIHRoZSB0YWlsIG9wZXJh
bmQuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpICE9IFBoaSkKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgTm9kZSogYXRGaXJzdCA9IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5j
aGlsZHJlbi5jaGlsZDEoKSwgRWRnZShza2lwR2V0TG9jYWwoYXRGaXJzdCkpLCBub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWNoaWxkcmVuQWxyZWFkeUZp
eGVkKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2VSZWYgPSBub2RlLT5zaG91bGRHZW5l
cmF0ZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlz
IGEgR2V0TG9jYWwsIHRoZW4gd2UgbWlnaHQgbGlrZSB0byBmaXggaXQuCi0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5u
dW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZp
cnN0QmxvY2ssIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIGNoYW5nZVJlZik7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEhbm9k
ZS0+Y2hpbGQxKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChm
aXJzdEJsb2NrLCBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCEhbm9kZS0+Y2hpbGQyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS0+Y2hpbGRyZW4uY2hpbGQy
KCksIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFub2RlLT5jaGls
ZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZp
cnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBjaGFuZ2VSZWYpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBmaXJzdEJsb2NrLT5hcHBlbmQobm9kZSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBm
aXJzdEJsb2NrLT5hcHBlbmQoc2Vjb25kQmxvY2stPmF0KGkpKTsKICAgICAgICAgCiAgICAgICAg
IEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwoKSk7CiAgICAgICAgIApAQCAt
Njg0LDM3ICs0OTYsNiBAQCBwcml2YXRlOgogICAgICAgICBpZiAoamV0dGlzb25lZEJsb2NrSW5k
ZXggIT0gTm9CbG9jaykKICAgICAgICAgICAgIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoZmly
c3RCbG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7CiAgICAgICAgIAotICAgICAgICAv
LyBGaXggdXAgdGhlIHZhcmlhYmxlcyBhdCB0YWlsLgotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsg
KytpKQotICAgICAgICAgICAgZml4VGFpbE9wZXJhbmQoZmlyc3RCbG9jaywgc2Vjb25kQmxvY2ss
IGFyZ3VtZW50VG9PcGVyYW5kKGkpLCBzdWJzdGl0dXRpb25zKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCk7ICsraSkKLSAgICAgICAgICAgIGZpeFRhaWxPcGVyYW5kKGZpcnN0QmxvY2ssIHNlY29uZEJs
b2NrLCBpLCBzdWJzdGl0dXRpb25zKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpeCB1cCB0aGUg
cmVmZXJlbmNlcyBmcm9tIG91ciBuZXcgc3VjY2Vzc29ycy4KLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9ncmFwaC5udW1TdWNjZXNzb3JzKGZpcnN0QmxvY2spOyBpLS07KSB7Ci0gICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3Vj
Y2Vzc29yKGZpcnN0QmxvY2ssIGkpXS5nZXQoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBzdWNjZXNzb3ItPnBoaXMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAg
ICBOb2RlKiBwaGlOb2RlID0gc3VjY2Vzc29yLT5waGlzW2pdOwotICAgICAgICAgICAgICAgIGJv
b2wgY2hhbmdlUmVmID0gcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKLSAgICAgICAgICAgICAg
ICBPcGVyYW5kU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMub3BlcmFu
ZChwaGlOb2RlLT5sb2NhbCgpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFBlcmZvcm1pbmcgb3BlcmFuZCBz
dWJzdGl0dXRpb24gIiwgc3Vic3RpdHV0aW9uLCAiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAg
ICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMSgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkgPT0gc3Vic3RpdHV0aW9u
Lm9sZENoaWxkKQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKHBoaU5v
ZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7
Ci0gICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDIoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpID09
IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VDaGlsZChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxk
LCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQzKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChwaGlOb2Rl
LT5jaGlsZDMoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguY2hhbmdlQ2hpbGQocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHN1YnN0aXR1
dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICAKICAgICAgICAgZmlyc3RCbG9jay0+dmFsdWVzQXRUYWlsID0gc2Vjb25kQmxvY2stPnZh
bHVlc0F0VGFpbDsKICAgICAgICAgZmlyc3RCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uID0gc2Vj
b25kQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5n
UGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ1BTUmV0aHJlYWRpbmdQaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgQ1BTUmV0aHJlYWRpbmdQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJDUFMgcmV0aHJlYWRpbmciKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGgu
bV9mb3JtID09IFRocmVhZGVkQ1BTKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgZnJlZVVubmVjZXNzYXJ5Tm9kZXMoKTsKKyAgICAgICAgY2Fub25pY2FsaXpl
TG9jYWxzSW5CbG9ja3MoKTsKKyAgICAgICAgcHJvcGFnYXRlUGhpcygpOworICAgICAgICBtX2dy
YXBoLmNvbGxlY3RHYXJiYWdlKCk7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fZm9ybSA9
IFRocmVhZGVkQ1BTOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgCisgICAgdm9pZCBmcmVlVW5uZWNlc3NhcnlOb2RlcygpCisgICAgeworICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHVuc2lnbmVkIGZyb21JbmRleCA9IDA7CisgICAg
ICAgICAgICB1bnNpZ25lZCB0b0luZGV4ID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChmcm9tSW5k
ZXggPCBibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChmcm9tSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAg
ICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5vcCgpID09IFBoaSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LnNldENoaWxkMShFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hp
bGQxKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAg
ICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1BoYW50b21Mb2NhbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIE5vcDoKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0g
MDsgLy8gUmVzZXQgdGhlIHJlcGxhY2VtZW50IHNpbmNlIHRoZSBuZXh0IHBoYXNlIHdpbGwgdXNl
IGl0LgorICAgICAgICAgICAgICAgIGJsb2NrLT5hdCh0b0luZGV4KyspID0gbm9kZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJsb2NrLT5yZXNpemUodG9JbmRleCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXpl
KCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJl
ZShibG9jay0+cGhpc1twaGlJbmRleF0pOworICAgICAgICAgICAgYmxvY2stPnBoaXMucmVzaXpl
KDApOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9w
ZXJhbmRLaW5kPgorICAgIHZvaWQgY2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWlsKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVCgKKyAgICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5z
aXplRm9yPG9wZXJhbmRLaW5kPigpCisgICAgICAgICAgICA9PSBtX2Jsb2NrLT52YXJpYWJsZXNB
dFRhaWwuc2l6ZUZvcjxvcGVyYW5kS2luZD4oKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZUZvcjxvcGVyYW5kS2luZD4o
KTsgaS0tOykgeworICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9w
ZXJhbmRLaW5kPihpKSA9IDA7CisgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwu
YXRGb3I8b3BlcmFuZEtpbmQ+KGkpID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBO
b2RlKiBhZGRQaGlTaWxlbnRseShCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgQ29kZU9yaWdpbiYg
Y29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKKyAgICB7CisgICAgICAg
IE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZShEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgUGhpLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAg
ICAgYmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIE5vZGUqIGFkZFBoaShCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgQ29k
ZU9yaWdpbiYgY29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKKyAgICB7
CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGFkZFBoaVNpbGVudGx5KGJsb2NrLCBjb2RlT3JpZ2lu
LCB2YXJpYWJsZSk7CisgICAgICAgIG1fcGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkoYmxv
Y2ssIHJlc3VsdCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBO
b2RlKiBhZGRQaGkoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRQaGkobV9ibG9jaywgY29k
ZU9yaWdpbiwgdmFyaWFibGUpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBhZGRQaGkoTm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRQaGkobm9kZS0+Y29kZU9yaWdpbiwgbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbm9uaWNh
bGl6ZUdldExvY2FsKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQoIW5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
aWYgKE5vZGUqIG90aGVyTm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSkgeworICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
d2l0Y2ggKG90aGVyTm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAg
ICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9IG90
aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGlmIChvdGhlck5vZGUt
Pm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBh
IEdldExvY2FsLCBzbyB0aGlzIG1pZ2h0IGFzIHdlbGwgYmUgdGhlIG9uZS4KKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2RlKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3Ao
KSA9PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKG90
aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1l
bnQgfHwgb3RoZXJOb2RlLT5vcCgpID09IEdldExvY2FsKTsKKyAgICAgICAgICAgIEFTU0VSVChv
dGhlck5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCkgeworICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9kZSkpOwor
ICAgICAgICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkg
eworICAgICAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAg
ICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9k
ZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkg
PT0gUGhpIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkg
PT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEtl
ZXAgdGhpcyBHZXRMb2NhbCBidXQgbGluayBpdCB0byB0aGUgcHJpb3Igb25lcy4KKyAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhlck5vZGUpKTsKKyAgICAg
ICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkgPSBub2RlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkg
eworICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBHZXRM
b2NhbCB3aXRoIG90aGVyTm9kZS4KKyAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9
IG90aGVyTm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwp
OworICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoYWRkUGhpKG5vZGUpKSk7CisgICAgICAgIG1f
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRPcGVyYW5kRmlyc3RUaW1lKHZhcmlhYmxlLT5sb2Nh
bCgpLCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCksIG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbm9uaWNh
bGl6ZVNldExvY2FsKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBtX2Jsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2RlKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZT4KKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUZsdXNoT3JQ
aGFudG9tTG9jYWwoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAKKyAgICAgICAgaWYgKE5vZGUq
IG90aGVyTm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSkgeworICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCkgPT0gdmFyaWFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG90
aGVyTm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgIGNh
c2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAg
ICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IFBoaSB8fCBub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0
QXJndW1lbnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT0gUGhh
bnRvbUxvY2FsICYmIG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgeworICAgICAgICAgICAg
ICAgIC8vIFBoYW50b21Mb2NhbChTZXRMb2NhbCkgZG9lc24ndCBtYWtlIHNlbnNlLiBQaGFudG9t
TG9jYWwgbWVhbnM6IGF0IHRoaXMKKyAgICAgICAgICAgICAgICAvLyBwb2ludCBJIGtub3cgSSB3
b3VsZCBoYXZlIGJlZW4gaW50ZXJlc3RlZCBpbiB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZQor
ICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgcHVycG9zZSBvZiBPU1IuIFBoYW50b21Mb2NhbChT
ZXRMb2NhbCkgbWVhbnM6IGF0IHRoaXMgcG9pbnQgSQorICAgICAgICAgICAgICAgIC8vIGtub3cg
dGhhdCBJIHdvdWxkIGhhdmUgcmVhZCB0aGUgdmFsdWUgd3JpdHRlbiBieSB0aGF0IFNldExvY2Fs
LiBUaGlzIGlzCisgICAgICAgICAgICAgICAgLy8gcmVkdW5kYW50IGFuZCBpbmVmZmljaWVudCwg
c2luY2UgcmVhbGx5IGl0IGp1c3QgbWVhbnMgdGhhdCB3ZSB3YW50IHRvCisgICAgICAgICAgICAg
ICAgLy8gYmUga2VlcGluZyB0aGUgb3BlcmFuZCB0byB0aGUgU2V0TG9jYWwgYWxpdmUuIFRoZSBT
ZXRMb2NhbCBtYXkgZGllLCBhbmQKKyAgICAgICAgICAgICAgICAvLyB3ZSdsbCBiZSBmaW5lIGJl
Y2F1c2UgT1NSIHRyYWNrcyBkZWFkIFNldExvY2Fscy4KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBTbyB3ZSB0dXJuIHRoaXMgaW50byBhIFBoYW50b20gb24gdGhlIGNoaWxk
IG9mIHRoZSBTZXRMb2NhbC4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub2Rl
LT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZHJlbi5zZXRDaGlsZDEob3RoZXJOb2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGVy
ZSBpcyBub3RoaW5nIHdyb25nIHdpdGggaGF2aW5nIHJlZHVuZGFudCBGbHVzaCdzLiBJdCBqdXN0
IG5lZWRzIHRvCisgICAgICAgICAgICAvLyBiZSBsaW5rZWQgYXBwcm9wcmlhdGVseS4gTm90ZSB0
aGF0IGlmIHRoZXJlIGhhZCBhbHJlYWR5IGJlZW4gYSBwcmV2aW91cworICAgICAgICAgICAgLy8g
dXNlIGF0IHRhaWwgdGhlbiB3ZSBkb24ndCBvdmVycmlkZSBpdC4gSXQncyBmaW5lIGZvciB2YXJp
YWJsZXNBdFRhaWwgdG8KKyAgICAgICAgICAgIC8vIG9taXQgRmx1c2hlcyBhbmQgUGhhbnRvbUxv
Y2Fscy4gT24gdGhlIG90aGVyIGhhbmQsIGhhdmluZyBpdCByZWZlciB0byBhCisgICAgICAgICAg
ICAvLyBGbHVzaCBvciBhIFBoYW50b21Mb2NhbCBpZiBqdXN0IGJlZm9yZSBpdCB0aGUgbGFzdCB1
c2Ugd2FzIGEgR2V0TG9jYWwgd291bGQKKyAgICAgICAgICAgIC8vIHNlcmlvdXNseSBjb25mdXNl
IHRoZSBDRkEuCisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhl
ck5vZGUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoYWRkUGhpKG5vZGUpKSk7CisgICAgICAg
IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRPcGVyYW5kRmlyc3RUaW1lKHZhcmlhYmxlLT5s
b2NhbCgpLCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCksIG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbm9u
aWNhbGl6ZUxvY2Fsc0luQmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Jsb2NrKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQobV9ibG9jay0+aXNSZWFjaGFibGUpOwor
ICAgICAgICAKKyAgICAgICAgY2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWlsPEFyZ3VtZW50T3Bl
cmFuZD4oKTsKKyAgICAgICAgY2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWlsPExvY2FsT3BlcmFu
ZD4oKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzc3VtZXMgdGhhdCBhbGwgcGhpIHJlZmVyZW5j
ZXMgaGF2ZSBiZWVuIHJlbW92ZWQuIEFzc3VtZXMgdGhhdCB0aGluZ3MgdGhhdAorICAgICAgICAv
LyBzaG91bGQgYmUgbGl2ZSBoYXZlIGEgbm9uLXplcm8gcmVmIGNvdW50LCBidXQgZG9lc24ndCBh
c3N1bWUgdGhhdCB0aGUgcmVmCisgICAgICAgIC8vIGNvdW50cyBhcmUgY29ycmVjdCBiZXlvbmQg
dGhhdCAobW9yZSBmb3JtYWxseSAhIWxvZ2ljYWxSZWZDb3VudCA9PSAhIWFjdHVhbFJlZkNvdW50
CisgICAgICAgIC8vIGJ1dCBub3QgbG9naWNhbFJlZkNvdW50ID09IGFjdHVhbFJlZkNvdW50KS4g
QXNzdW1lcyB0aGF0IGl0IGNhbiBicmVhayByZWYKKyAgICAgICAgLy8gY291bnRzLgorICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2Js
b2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9i
bG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5w
ZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBU
aGUgcnVsZXMgZm9yIHRocmVhZGVkIENQUyBmb3JtOgorICAgICAgICAgICAgLy8gCisgICAgICAg
ICAgICAvLyBIZWFkIHZhcmlhYmxlOiB0aGUgZmlyc3QgdGhpbmcgdGhhdCBoYXBwZW5lZCB0byB0
aGUgdmFyaWFibGUgaW4gdGhlIGJsb2NrLgorICAgICAgICAgICAgLy8gSXQgbWF5IGJlIGEgRmx1
c2gsIFBoYW50b21Mb2NhbCwgR2V0TG9jYWwsIFNldExvY2FsLCBvciBTZXRBcmd1bWVudC4KKyAg
ICAgICAgICAgIC8vIFNldEFyZ3VtZW50IG1heSBvbmx5IGFwcGVhciBpbiB0aGUgcm9vdCBibG9j
ay4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUYWlsIHZhcmlhYmxlOiB0aGUgbGFz
dCB0aGluZyB0aGF0IGhhcHBlbmVkIHRvIHRoZSB2YXJpYWJsZSBpbiB0aGUgYmxvY2suCisgICAg
ICAgICAgICAvLyBJdCBtYXkgYmUgYSBGbHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwgU2V0
TG9jYWwsIG9yIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQgbWF5IG9u
bHkgYXBwZWFyIGluIHRoZSByb290IGJsb2NrLiBOb3RlIHRoYXQgaWYgdGhlcmUgZXZlcgorICAg
ICAgICAgICAgLy8gd2FzIGEgR2V0TG9jYWwgdG8gdGhlIHZhcmlhYmxlLCBhbmQgaXQgd2FzIGZv
bGxvd2VkIGJ5IFBoYW50b21Mb2NhbHMgYW5kCisgICAgICAgICAgICAvLyBGbHVzaGVzIGJ1dCBu
b3QgU2V0TG9jYWxzLCB0aGVuIHRoZSB0YWlsIHZhcmlhYmxlIHdpbGwgYmUgdGhlIEdldExvY2Fs
LgorICAgICAgICAgICAgLy8gVGhpcyByZWZsZWN0cyB0aGUgZmFjdCB0aGF0IHlvdSBvbmx5IGNh
cmUgdGhhdCB0aGUgdGFpbCB2YXJpYWJsZSBpcyBhCisgICAgICAgICAgICAvLyBGbHVzaCBvciBQ
aGFudG9tTG9jYWwgaWYgbm90aGluZyBlbHNlIGludGVyZXN0aW5nIGhhcHBlbmVkLgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIENoaWxkIG9mIEdldExvY2FsOiB0aGUgb3BlcmF0aW9u
IHRoYXQgdGhlIEdldExvY2FsIGtlZXBzIGFsaXZlLiBGb3IKKyAgICAgICAgICAgIC8vIHVuY2Fw
dHVyZWQgbG9jYWxzLCBpdCBtYXkgYmUgYSBQaGkgZnJvbSB0aGUgY3VycmVudCBibG9jay4gRm9y
IGFyZ3VtZW50cywKKyAgICAgICAgICAgIC8vIGl0IG1heSBiZSBhIFNldEFyZ3VtZW50LiBGb3Ig
Y2FwdHVyZWQgbG9jYWxzIGFuZCBhcmd1bWVudHMgaXQgbWF5IGFsc28gYmUKKyAgICAgICAgICAg
IC8vIGEgU2V0TG9jYWwuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2hpbGQgb2Yg
U2V0TG9jYWw6IG11c3QgYmUgYSB2YWx1ZSBwcm9kdWNpbmcgbm9kZS4KKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAvLyBDaGlsZCBvZiBGbHVzaDogaXQgbWF5IGJlIGEgUGhpIGZyb20gdGhl
IGN1cnJlbnQgYmxvY2sgb3IgYSBTZXRMb2NhbC4gRm9yCisgICAgICAgICAgICAvLyBhcmd1bWVu
dHMgaXQgbWF5IGFsc28gYmUgYSBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyBDaGlsZCBvZiBQaGFudG9tTG9jYWw6IGl0IG1heSBiZSBhIFBoaSBmcm9tIHRoZSBj
dXJyZW50IGJsb2NrLiBGb3IKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBpdCBtYXkgYWxzbyBi
ZSBhIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENoaWxkcmVu
IG9mIFBoaTogb3RoZXIgUGhpcyBpbiB0aGUgc2FtZSBiYXNpYyBibG9jaywgb3IgYW55IG9mIHRo
ZQorICAgICAgICAgICAgLy8gZm9sbG93aW5nIGZyb20gZnJvbSBwcmVkZWNlc3NvciBibG9ja3M6
IFNldExvY2FsLCBQaGksIG9yIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8gVGhlc2UgYXJl
IGNvbXB1dGVkIGJ5IGxvb2tpbmcgYXQgdGhlIHRhaWwgdmFyaWFibGVzIG9mIHRoZSBwcmVkZWNl
c3NvcgorICAgICAgICAgICAgLy8gYmxvY2tzIGFuZCBlaXRoZXIgdXNpbmcgaXQgZGlyZWN0bHkg
KGlmIGl0J3MgYSBTZXRMb2NhbCwgUGhpLCBvcgorICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQp
IG9yIGxvYWRpbmcgdGhhdCBub2RlcyBjaGlsZCAoaWYgaXQncyBhIEdldExvY2FsLCBQaGFub21M
b2NhbCwKKyAgICAgICAgICAgIC8vIG9yIEZsdXNoIC0gYWxsIG9mIHRoZXNlIHdpbGwgaGF2ZSBj
aGlsZHJlbiB0aGF0IGFyZSBTZXRMb2NhbCwgUGhpLCBvcgorICAgICAgICAgICAgLy8gU2V0QXJn
dW1lbnQpLgorICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXpl
R2V0TG9jYWwobm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6
ZVNldExvY2FsKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxpemVG
bHVzaE9yUGhhbnRvbUxvY2FsPEZsdXNoPihub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAg
ICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWw8UGhhbnRvbT4obm9kZSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHZvaWQgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MoKQorICAg
IHsKKyAgICAgICAgZm9yIChtX2Jsb2NrSW5kZXggPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
bV9ibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1ttX2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5C
bG9jaygpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFnYXRlUGhpcygp
CisgICAgeworICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWls
IGluc3RhbnRseS4KKyAgICAgICAgbV9ibG9jayA9IDA7CisgICAgICAgIG1fYmxvY2tJbmRleCA9
IE5vQmxvY2s7CisgICAgICAgIAorICAgICAgICB3aGlsZSAoIW1fcGhpU3RhY2suaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBQaGlTdGFja0VudHJ5IGVudHJ5ID0gbV9waGlTdGFjay5sYXN0KCk7
CisgICAgICAgICAgICBtX3BoaVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBlbnRyeS5tX2Jsb2NrOworICAgICAgICAgICAg
UHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBibG9jay0+bV9wcmVkZWNlc3NvcnM7Cisg
ICAgICAgICAgICBOb2RlKiBjdXJyZW50UGhpID0gZW50cnkubV9waGk7CisgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY3VycmVudFBoaS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gcHJlZGVjZXNzb3JzLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgTm9kZSomIHZhcmlhYmxlSW5QcmV2aW91cyA9IHByZWRlY2Vz
c29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAg
ICAgIGlmICghdmFyaWFibGVJblByZXZpb3VzKSB7CisgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlSW5QcmV2aW91cyA9IGFkZFBoaShwcmVkZWNlc3NvckJsb2NrLCBjdXJyZW50UGhpLT5jb2Rl
T3JpZ2luLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5zZXRPcGVyYW5kRmlyc3RUaW1lKG9wZXJhbmQsIHZhcmlhYmxlSW5Q
cmV2aW91cyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
c3dpdGNoICh2YXJpYWJsZUluUHJldmlvdXMtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQodmFyaWFibGVJblByZXZpb3VzLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJs
ZUluUHJldmlvdXMtPmNoaWxkMSgpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYWJsZUluUHJldmlvdXMgPSB2YXJpYWJsZUluUHJldmlvdXMtPmNo
aWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgQVNTRVJUKAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluUHJl
dmlvdXMtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgfHwgdmFyaWFibGVJ
blByZXZpb3VzLT5vcCgpID09IFBoaQorICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUlu
UHJldmlvdXMtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGJvb2wgZGlkU2V0Q2hpbGQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGNoaWxkSWR4ID0gMDsgY2hpbGRJZHggPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2NoaWxk
SWR4KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGhpLT5jaGlsZHJlbi5jaGls
ZChjaGlsZElkeCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFBoaS0+Y2hpbGRyZW4uc2V0Q2hpbGQoY2hpbGRJZHgsIEVkZ2Uo
dmFyaWFibGVJblByZXZpb3VzKSk7CisgICAgICAgICAgICAgICAgICAgIGRpZFNldENoaWxkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChkaWRTZXRDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogbmV3UGhpID0gYWRk
UGhpU2lsZW50bHkoYmxvY2ssIGN1cnJlbnRQaGktPmNvZGVPcmlnaW4sIHZhcmlhYmxlKTsKKyAg
ICAgICAgICAgICAgICBuZXdQaGktPmNoaWxkcmVuID0gY3VycmVudFBoaS0+Y2hpbGRyZW47Cisg
ICAgICAgICAgICAgICAgY3VycmVudFBoaS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShuZXdQaGksIHZh
cmlhYmxlSW5QcmV2aW91cywgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgc3RydWN0IFBoaVN0YWNrRW50cnkgeworICAgICAgICBQaGlTdGFja0VudHJ5KEJh
c2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBwaGkpCisgICAgICAgICAgICA6IG1fYmxvY2soYmxvY2sp
CisgICAgICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgICAgICBOb2RlKiBtX3BoaTsKKyAg
ICB9OworICAgIAorICAgIEJsb2NrSW5kZXggbV9ibG9ja0luZGV4OworICAgIEJhc2ljQmxvY2sq
IG1fYmxvY2s7CisgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDY0PiBtX3BoaVN0YWNrOworfTsK
KworYm9vbCBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBs
aW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ1BTIFJldGhyZWFkaW5nIFBoYXNlIik7Cisg
ICAgcmV0dXJuIHJ1blBoYXNlPENQU1JldGhyZWFkaW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDUFNSZXRo
cmVhZGluZ1BoYXNlX2gKKyNkZWZpbmUgREZHQ1BTUmV0aHJlYWRpbmdQaGFzZV9oCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDUFMgUmV0aHJlYWRp
bmc6CisvLworLy8gVGFrZXMgYSBncmFwaCBpbiB3aGljaCB0aGVyZSBhcmUgYXJiaXRyYXJ5IEdl
dExvY2Fscy9TZXRMb2NhbHMgd2l0aCBubyBjb25uZWN0aW9ucworLy8gYmV0d2VlbiB0aGVtLiBS
ZW1vdmVzIHJlZHVuZGFudCBvbmVzIGluIHRoZSBjYXNlIG9mIHVuY2FwdHVyZWQgdmFyaWFibGVz
LiBDb25uZWN0cworLy8gYWxsIG9mIHRoZW0gd2l0aCBQaGkgZnVuY3Rpb25zIHRvIHJlcHJlc2Vu
dCBsaXZlIHJhbmdlcy4KKworYm9vbCBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdDUFNSZXRocmVhZGluZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MTMwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSw5IEBAIHB1YmxpYzoKICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9jayA9IDA7IGJs
b2NrIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2spCiAgICAgICAgICAgICBwZXJm
b3JtQmxvY2tDU0UobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja10uZ2V0KCkpOwogICAgICAgICAKKyAg
ICAgICAgaWYgKG1fY2hhbmdlZCkKKyAgICAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gTG9hZFN0
b3JlOworICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CiAgICAgCkBA
IC05NzQsMjcgKzk3Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogICAgIAotICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihFZGdlJiBjaGlsZCwgYm9vbCBh
ZGRSZWYgPSB0cnVlKQotICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlz
IGFjdHVhbGx5IHVudXNlZC4KLSAgICAgICAgaWYgKCFjaGlsZCkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBsYWNlbWVu
dC4KLSAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFjZW1lbnQ7Ci0gICAg
ICAgIGlmICghcmVwbGFjZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
ICAgICBjaGlsZC5zZXROb2RlKHJlcGxhY2VtZW50KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRo
ZXJlIGlzIGRlZmluaXRlbHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQgdGhlIHJlcGxhY2Vt
ZW50IGRvZXMgbm90Ci0gICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4KLSAgICAgICAgQVNT
RVJUKCFjaGlsZC0+cmVwbGFjZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGFkZFJlZikK
LSAgICAgICAgICAgIG1fZ3JhcGgucmVmKGNoaWxkKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBl
bGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKE5vZGUqIG5vZGUpCiAgICAgewogICAg
ICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGFudG9tKTsKQEAgLTEwNzIsMjEgKzEwNTQsMTIg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KTsKLQotICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGls
ZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4
KyspCi0gICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBz
aG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNo
aWxkcmVuLmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vi
c3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOwogICAgICAg
ICAKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCiAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAgIAotICAg
ICAgICBpZiAoIXNob3VsZEdlbmVyYXRlKQorICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTExNjIsMjYgKzExMzUsMTYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIE5vZGUqIHBoaSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAg
ICAgIGlmICghc2V0UmVwbGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgR2V0TG9jYWwgd2UgcmVwbGFjZWQg
dXNlZCB0byByZWZlciB0byBhIFNldExvY2FsLCB0aGVuIGl0IG5vdwotICAgICAgICAgICAgLy8g
c2hvdWxkIHJlZmVyIHRvIHRoZSBjaGlsZCBvZiB0aGUgU2V0TG9jYWwgaW5zdGVhZC4KLSAgICAg
ICAgICAgIGlmIChwaGktPm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZS0+Y2hpbGQxKCkgPT0gcGhpKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5n
ZUVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHBoaS0+Y2hpbGQxKCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgTm9kZSogb2xkVGFpbCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZCgKLSAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxv
Y2FsKCkpOwotICAgICAgICAgICAgaWYgKG9sZFRhaWwgPT0gbm9kZSkgewotICAgICAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vz
c0RhdGEtPmxvY2FsKCkpID0KLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIE1haW50YWluIGdyYXBoIGludGVn
cml0eTogc2luY2Ugd2UncmUgcmVwbGFjaW5nIGEgR2V0TG9jYWwgd2l0aCBhIEdldExvY2FsVW5s
aW5rZWQsCi0gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIEdldExvY2FsVW5s
aW5rZWQgaXMgbm93IGxpbmtlZC4KLSAgICAgICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9w
LT5vcCgpID09IEdldExvY2FsVW5saW5rZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZh
bnRMb2NhbE9wLT5zZXRPcChHZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50
TG9jYWxPcC0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKHBoaSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKHBoaSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIElmIHdlIHJlcGxhY2UgYSBHZXRMb2NhbCB3aXRoIGEgR2V0TG9jYWxVbmxpbmtlZCwgdGhl
biB0dXJuIHRoZSBHZXRMb2NhbFVubGlua2VkCisgICAgICAgICAgICAvLyBpbnRvIGEgR2V0TG9j
YWwuCisgICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpID09IEdldExvY2FsVW5s
aW5rZWQpIHsKKyAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNvbnZlcnRUb0dldExv
Y2FsKHZhcmlhYmxlQWNjZXNzRGF0YSwgcGhpKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnJl
ZihwaGkpOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyMzUsOSArMTE5OCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoZGF0YU5vZGUpOwogICAgICAg
ICAgICAgbV9ncmFwaC5yZWYoZGF0YU5vZGUpOwotICAgICAgICAgICAgTm9kZSogb2xkVGFpbCA9
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7Ci0gICAgICAg
ICAgICBpZiAob2xkVGFpbCA9PSBub2RlKQotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCkgPSByZXBsYWNlbWVudDsKKyAgICAgICAg
ICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0
MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsNjAgKzMyMyw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKLSAgICAg
ICAgICAgICAgICBOb2RlKiBwcmV2aW91c0xvY2FsQWNjZXNzID0gMDsKLSAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5v
ZGUKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSBjb21tb24g
Y2FzZS4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0luUGhpcyhub2RlLT5j
aGlsZDEoKS5ub2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2Vz
cyA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gcHJldmlvdXNMb2NhbEFjY2Vz
czsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
aW5kZXhJbkJsb2NrID4gMCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE11c3Qgc2VhcmNoIGZv
ciB0aGUgcHJldmlvdXMgYWNjZXNzIHRvIHRoaXMgbG9jYWwuCi0gICAgICAgICAgICAgICAgICAg
IGZvciAoQmxvY2tJbmRleCBzdWJJbmRleEluQmxvY2sgPSBpbmRleEluQmxvY2s7IHN1YkluZGV4
SW5CbG9jay0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3ViTm9kZSA9IGJs
b2NrLT5hdChzdWJJbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
dWJOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5sb2NhbCgpICE9IG5vZGUtPmxvY2Fs
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUaGUgdHdvIG11c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoc3ViTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlv
dXNMb2NhbEFjY2VzcyA9IHN1Yk5vZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3Vz
TG9jYWxBY2Nlc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyBh
Y2Nlc3MgbXVzdCBoYXZlIGJlZW4gYSBQaGkuCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggcGhpSW5kZXhJbkJsb2NrID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRl
eEluQmxvY2stLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2Rl
ID0gYmxvY2stPnBoaXNbcGhpSW5kZXhJbkJsb2NrXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
aGlOb2RlLT5sb2NhbCgpICE9IG5vZGUtPmxvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0
d28gbXVzdCBoYXZlIGJlZW4gdW5pZmllZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQocGhpTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nl
c3MgPSBwaGlOb2RlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZp
b3VzTG9jYWxBY2Nlc3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlQocHJldmlvdXNM
b2NhbEFjY2Vzcyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSogdGFp
bE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRhaWxOb2RlID09IG5vZGUpCi0gICAgICAgICAgICAgICAgICAg
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IHByZXZpb3Vz
TG9jYWxBY2Nlc3M7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxOb2RlLT5vcCgpID09IEZsdXNo
Ci0gICAgICAgICAgICAgICAgICAgICAgICB8fCB0YWlsTm9kZS0+b3AoKSA9PSBTZXRMb2NhbAot
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNDYXB0dXJlZEF0T3JBZnRlcihibG9jaywgaW5k
ZXhJbkJsb2NrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBu
b2RlLT5jb2RlT3JpZ2luOwogICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5v
ZGUtPmNoaWxkcmVuOwogICAgICAgICAgICAgICAgIApAQCAtMzg0LDYgKzMzMCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
IFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkcmVuKTsKICAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgbV9zdGF0ZS5yZXNldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTUg
QEAKICNpbmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgogI2luY2x1ZGUgIkRGR0NGQVBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRG
R0NQU1JldGhyZWFkaW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1
ZGUgIkRGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5o
IgogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCIKKyNpbmNsdWRl
ICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNpbmNs
dWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCkBAIC0xMDIsOSArMTA1LDYgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxl
TW9kZSBjb21waWxlTQogICAgIGlmICghcGFyc2UoZXhlYywgZGZnKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pCi0g
ICAgICAgIGRmZy5wcmVkaWN0QXJndW1lbnRUeXBlcygpOwotICAgIAogICAgIC8vIEJ5IHRoaXMg
cG9pbnQgdGhlIERGRyBieXRlY29kZSBwYXJzZXIgd2lsbCBoYXZlIHBvdGVudGlhbGx5IG11dGF0
ZWQgdmFyaW91cyB0YWJsZXMKICAgICAvLyBpbiB0aGUgQ29kZUJsb2NrLiBUaGlzIGlzIGEgZ29v
ZCB0aW1lIHRvIHBlcmZvcm0gYW4gZWFybHkgc2hyaW5rLCB3aGljaCBpcyBtb3JlCiAgICAgLy8g
cG93ZXJmdWwgdGhhbiBhIGxhdGUgb25lLiBJdCdzIHNhZmUgdG8gZG8gc28gYmVjYXVzZSB3ZSBo
YXZlbid0IGdlbmVyYXRlZCBhbnkgY29kZQpAQCAtMTEzLDI3ICsxMTMsNDIgQEAgaW5saW5lIGJv
b2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogCiAgICAgaWYgKHZhbGlkYXRpb25FbmFi
bGVkKCkpCiAgICAgICAgIHZhbGlkYXRlKGRmZyk7CisgICAgCisgICAgcGVyZm9ybUNQU1JldGhy
ZWFkaW5nKGRmZyk7CisgICAgcGVyZm9ybVVuaWZpY2F0aW9uKGRmZyk7CisgICAgcGVyZm9ybVBy
ZWRpY3Rpb25JbmplY3Rpb24oZGZnKTsKKyAgICAKKyAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQo
KSkKKyAgICAgICAgdmFsaWRhdGUoZGZnKTsKKyAgICAKICAgICBwZXJmb3JtUHJlZGljdGlvblBy
b3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgcGVyZm9ybVN0cnVj
dHVyZUNoZWNrSG9pc3RpbmcoZGZnKTsKKyAgICAKICAgICB1bnNpZ25lZCBjbnQgPSAxOwogICAg
IGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludE5vdENvbnZlcmdlZDsKICAgICBmb3IgKDs7
ICsrY250KSB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAg
ICAgICAgICBkYXRhTG9nRigiREZHIGJlZ2lubmluZyBvcHRpbWl6YXRpb24gZml4cG9pbnQgaXRl
cmF0aW9uICMldS5cbiIsIGNudCk7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICAKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBjaGFuZ2VkIHw9IHBlcmZv
cm1Db25zdGFudEZvbGRpbmcoZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQXJndW1l
bnRzU2ltcGxpZmljYXRpb24oZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ0ZHU2lt
cGxpZmljYXRpb24oZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ1NFKGRmZyk7Cisg
ICAgICAgIAogICAgICAgICBpZiAoIWNoYW5nZWQpCiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgCiAgICAgICAgIGRmZy5yZXNldEV4aXRTdGF0ZXMoKTsKICAgICAgICAgcGVyZm9ybUZpeHVw
KGRmZyk7CisgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgIH0KKyAgICAK
ICAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7CiAgICAgcGVyZm9y
bUNTRShkZmcpOworICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOyAvLyBUaGlzIHNob3Vs
ZCB1c3VhbGx5IGJlIGEgbm8tb3Agc2luY2UgQ1NFIHJhcmVseSBkZXRocmVhZHMgdGhlIGdyYXBo
LgogICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgIGRhdGFMb2dG
KCJERkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBpbiAldSBpdGVyYXRpb25zLlxu
IiwgY250KTsKICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE0MTMwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw2ICs1Myw4IEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEMKICAgICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkK
ICAgICAsIG1fbXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQogICAgICwgbV9maXhw
b2ludFN0YXRlKEJlZm9yZUZpeHBvaW50KQorICAgICwgbV9mb3JtKExvYWRTdG9yZSkKKyAgICAs
IG1fdW5pZmljYXRpb25TdGF0ZShMb2NhbGx5VW5pZmllZCkKIHsKICAgICBBU1NFUlQobV9wcm9m
aWxlZEJsb2NrKTsKIH0KQEAgLTM3NywyMiArMzc5LDIyIEBAIHZvaWQgR3JhcGg6OmRlcmVmQ2hp
bGRyZW4oTm9kZSogb3ApCiAgICAgRE9fVE9fQ0hJTERSRU4ob3AsIGRlcmVmKTsKIH0KIAotdm9p
ZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoKQordm9pZCBHcmFwaDo6ZGV0aHJlYWQoKQog
ewotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID49IDEpOwotICAgIGZv
ciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4obV9jb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmls
ZSA9IG1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKLSAgICAg
ICAgaWYgKCFwcm9maWxlKQorICAgIGlmIChtX2Zvcm0gPT0gTG9hZFN0b3JlKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2Jsb2Nrcy5z
aXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgbV9hcmd1bWVudHNbYXJnXS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkp
OwotICAgICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2coCi0gICAgICAgICAgICAiQXJndW1lbnQgWyIsIGFyZywgIl0gcHJlZGljdGlvbjogIiwKLSAg
ICAgICAgICAgIFNwZWN1bGF0aW9uRHVtcChtX2FyZ3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+cHJlZGljdGlvbigpKSwgIlxuIik7Ci0jZW5kaWYKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsKKyAgICAg
ICAgICAgIE5vZGUqIHBoaSA9IGJsb2NrLT5waGlzW3BoaUluZGV4XTsKKyAgICAgICAgICAgIHBo
aS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBtX2Zvcm0g
PSBMb2FkU3RvcmU7CiB9CiAKIHZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8Qmxv
Y2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4
IHN1Y2Nlc3NvckluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw2MCBAQCBlbnVtIEFkZFNwZWN1bGF0aW9uTW9k
ZSB7CiAgICAgU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3csCiAgICAgU3Bl
Y3VsYXRlSW50ZWdlcgogfTsKKworLy8gRGVzY3JpYmVzIHRoZSBmb3JtIHlvdSBjYW4gZXhwZWN0
IHRoZSBlbnRpcmUgZ3JhcGggdG8gYmUgaW4uCitlbnVtIEdyYXBoRm9ybSB7CisgICAgLy8gTG9h
ZFN0b3JlIGZvcm0gbWVhbnMgdGhhdCBiYXNpYyBibG9ja3MgbWF5IGZyZWVseSB1c2UgR2V0TG9j
YWwsIFNldExvY2FsLAorICAgIC8vIEdldExvY2FsVW5saW5rZWQsIGFuZCBGbHVzaCBmb3IgYWNj
ZXNzaW5nIGxvY2FsIHZhcmlhYmxlcyBhbmQgaW5kaWNhdGluZworICAgIC8vIHdoZXJlIHRoZWly
IGxpdmUgcmFuZ2VzIG91Z2h0IHRvIGJlLiBMaXZlbmVzcyBpcyBpbXBsaWNpdCwgYXMgaXMgdGhl
IGRhdGEKKyAgICAvLyBmbG93IGJldHdlZW4gbG9jYWwgYWNjZXNzZXMuIEZvciBleGFtcGxlLCBM
b2FkU3RvcmUgZm9ybSBnaXZlcyBubyBlYXN5IHdheQorICAgIC8vIHRvIGRldGVybWluZSB3aGlj
aCBTZXRMb2NhbCdzIGZsb3cgaW50IG8gYSBHZXRMb2NhbC4gQXMgd2VsbCwgTG9hZFN0b3JlCisg
ICAgLy8gZm9ybSBpbXBsaWVzIG5vIHJlc3RyaWN0aW9ucyBvbiByZWR1bmRhbmN5OiB5b3UgY2Fu
IGZyZWVseSBlbWl0IG11bHRpcGxlCisgICAgLy8gR2V0TG9jYWxzLCBvciBtdWx0aXBsZSBTZXRM
b2NhbHMgKG9yIGFueSBjb21iaW5hdGlvbiB0aGVyZW9mKSB0byB0aGUgc2FtZQorICAgIC8vIGxv
Y2FsIGluIHRoZSBzYW1lIGJsb2NrLiBMb2FkU3RvcmUgZm9ybSBkb2VzIG5vdCByZXF1aXJlIGJh
c2ljIGJsb2NrcyB0bworICAgIC8vIGRlY2xhcmUgaG93IHRoZXkgYWZmZWN0IG9yIHVzZSBsb2Nh
bHMsIG90aGVyIHRoYW4gaW1wbGljaXRseSBieSB1c2luZworICAgIC8vIHRoZSBsb2NhbCBvcHMu
IEZpbmFsbHksIExvYWRTdG9yZSBhbGxvd3MgZmxleGliaWxpdHkgaW4gaG93IGxpdmVuZXNzIG9m
CisgICAgLy8gbG9jYWxzIGlzIGV4dGVuZGVkOyBmb3IgZXhhbXBsZSB5b3UgY2FuIHJlcGxhY2Ug
YSBHZXRMb2NhbCB3aXRoIGEgUGhhbnRvbQorICAgIC8vIGFuZCBzbyBsb25nIGFzIHRoZSBQaGFu
dG9tIHJldGFpbnMgdGhlIEdldExvY2FsJ3MgY2hpbGRyZW4gKGkuZS4gdGhlIFBoaQorICAgIC8v
IG1vc3QgbGlrZWx5KSB0aGVuIGl0IGltcGxpZXMgdGhhdCB0aGUgbG9jYWwgaXMgc3RpbGwgbGl2
ZSBidXQgdGhhdCBpdCBuZWVkCisgICAgLy8gbm90IGJlIHN0b3JlZCB0byB0aGUgc3RhY2sgbmVj
ZXNzYXJpbHkuIFRoaXMgaW1wbGllcyB0aGF0IFBoYW50b20gY2FuCisgICAgLy8gcmVmZXJlbmNl
IG5vZGVzIHRoYXQgaGF2ZSBubyByZXN1bHQsIGFzIGxvbmcgYXMgdGhvc2Ugbm9kZXMgYXJlIHZh
bGlkCisgICAgLy8gR2V0TG9jYWwgY2hpbGRyZW4gKGkuZS4gUGhpLCBTZXRMb2NhbCwgU2V0QXJn
dW1lbnQpLgorICAgIC8vCisgICAgLy8gTG9hZFN0b3JlIGZvcm0gYWxzbyBpbXBsaWVzIHRoYXQg
UGhpcyB0aGVtc2VsdmVzIGNhbiBoYXZlIGFyYml0cmFyeQorICAgIC8vIGNoaWxkcmVuLiBQaGkg
Y2hpbGRyZW4gY291bGQgZXZlbiBiZSBkYW5nbGluZywgYW5kIHNob3VsZCBub3QgYmUgcmVsaWVk
CisgICAgLy8gdXBvbi4KKyAgICAvLworICAgIC8vIExvYWRTdG9yZSBmb3JtIGlzIHN1aXRhYmxl
IGZvciBDRkcgdHJhbnNmb3JtYXRpb25zLCBhcyB3ZWxsIGFzIHN0cmVuZ3RoCisgICAgLy8gcmVk
dWN0aW9uLCBmb2xkaW5nLCBhbmQgQ1NFLgorICAgIExvYWRTdG9yZSwKKyAgICAKKyAgICAvLyBU
aHJlYWRlZENQUyBmb3JtIG1lYW5zIHRoYXQgYmFzaWMgYmxvY2tzIGxpc3QgdXAtZnJvbnQgd2hp
Y2ggbG9jYWxzIHRoZXkKKyAgICAvLyBleHBlY3QgdG8gYmUgbGl2ZSBhdCB0aGUgaGVhZCwgYW5k
IHdoaWNoIGxvY2FscyB0aGV5IG1ha2UgYXZhaWxhYmxlIGF0IHRoZQorICAgIC8vIHRhaWwuIFRo
cmVhZGVkQ1BTIGZvcm0gYWxzbyBpbXBsaWVzIHRoYXQ6CisgICAgLy8KKyAgICAvLyAtIEdldExv
Y2FscyBhbmQgU2V0TG9jYWxzIHRvIHVuY2FwdHVyZWQgdmFyaWFibGVzIGFyZSBub3QgcmVkdW5k
YW50IHdpdGhpbgorICAgIC8vICAgYSBiYXNpYyBibG9jay4KKyAgICAvLworICAgIC8vIC0gQWxs
IEdldExvY2FscyBhbmQgRmx1c2hlcyBhcmUgbGlua2VkIGRpcmVjdGx5IHRvIHRoZSBsYXN0IGFj
Y2VzcyBwb2ludAorICAgIC8vICAgb2YgdGhlIHZhcmlhYmxlLCB3aGljaCBtdXN0IG5vdCBiZSBh
bm90aGVyIEdldExvY2FsIGlmIHRoZSB2YXJpYWJsZSBpcworICAgIC8vICAgdW5jYXB0dXJlZC4K
KyAgICAvLworICAgIC8vIC0gUGhhbnRvbShQaGkpIGlzIG5vdCBsZWdhbCwgYnV0IFBoYW50b21M
b2NhbCBpcy4KKyAgICAvLworICAgIC8vIFRocmVhZGVkQ1BTIGZvcm0gaXMgc3VpdGFibGUgZm9y
IGRhdGEgZmxvdyBhbmFseXNpcyAoQ0ZBLCBwcmVkaWN0aW9uCisgICAgLy8gcHJvcGFnYXRpb24p
LCByZWdpc3RlciBhbGxvY2F0aW9uLCBhbmQgY29kZSBnZW5lcmF0aW9uLgorICAgIFRocmVhZGVk
Q1BTCit9OworCisvLyBEZXNjcmliZXMgdGhlIHN0YXRlIG9mIHRoZSBVbmlvbkZpbmQgc3RydWN0
dXJlIG9mIFZhcmlhYmxlQWNjZXNzRGF0YSdzLgorZW51bSBVbmlmaWNhdGlvblN0YXRlIHsKKyAg
ICAvLyBCYXNpY0Jsb2NrLWxvY2FsIGFjY2Vzc2VzIHRvIHZhcmlhYmxlcyBhcmUgYXBwcm9wcmlh
dGVseSB1bmlmaWVkIHdpdGggZWFjaCBvdGhlci4KKyAgICBMb2NhbGx5VW5pZmllZCwKICAgICAK
KyAgICAvLyBVbmlmaWNhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQgZ2xvYmFsbHkuCisgICAgR2xv
YmFsbHlVbmlmaWVkCit9OwogCiAvLwogLy8gPT09IEdyYXBoID09PQpAQCAtMTY3LDYgKzIyMCw0
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQyKE5vZGUqIG5vZGUpIHsg
Y2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDEpOyB9CiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hp
bGQzKE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDIpOyB9CiAgICAgCisg
ICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBi
b29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKKyAgICAgICAgaWYg
KG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJz
dENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhd
LCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwZXJmb3Jt
U3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJh
dGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRy
ZW4uY2hpbGQyKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0
dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRn
ZShFZGdlJiBjaGlsZCwgYm9vbCBhZGRSZWYpCisgICAgeworICAgICAgICAvLyBDaGVjayBpZiB0
aGlzIG9wZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgorICAgICAgICBpZiAoIWNoaWxkKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMg
YW55IHJlcGxhY2VtZW50LgorICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IGNoaWxkLT5yZXBs
YWNlbWVudDsKKyAgICAgICAgaWYgKCFyZXBsYWNlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIGNoaWxkLnNldE5vZGUocmVwbGFjZW1lbnQpOworICAgICAgICAK
KyAgICAgICAgLy8gVGhlcmUgaXMgZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhh
dCB0aGUgcmVwbGFjZW1lbnQgZG9lcyBub3QKKyAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50
LgorICAgICAgICBBU1NFUlQoIWNoaWxkLT5yZXBsYWNlbWVudCk7CisgICAgICAgIAorICAgICAg
ICBpZiAoYWRkUmVmKQorICAgICAgICAgICAgcmVmKGNoaWxkKTsKKyAgICB9CisgICAgCiAjZGVm
aW5lIERGR19ERUZJTkVfQUREX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBh
cmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAogICAgIHRl
bXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFkZE5vZGUoUmVmQ2hpbGRy
ZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0
ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAogICAgIHsgXApAQCAt
MTgzLDYgKzI3MCw4IEBAIHB1YmxpYzoKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJ
T04oREZHX0RFRklORV9BRERfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FERF9OT0RFCiAKKyAg
ICB2b2lkIGRldGhyZWFkKCk7CisgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSd2ZSBtb2Rp
ZmllZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBvZiBub2RlcyB0aGF0IGRlYWwgd2l0aAogICAgIC8v
IGxvY2FsIHZhcmlhYmxlcy4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBsb2NhbCB2YXJpYWJs
ZSByZWZlcmVuY2VzIGNhbiBmb3JtCiAgICAgLy8gY3ljbGVzLCBhbmQgaGVuY2UgcmVmZXJlbmNl
IGNvdW50aW5nIGlzIG5vdCBlbm91Z2guIFRoaXMgd2lsbCByZXNldCB0aGUKQEAgLTM1MSw4ICs0
NDAsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBl
KTsKICAgICAKLSAgICB2b2lkIHByZWRpY3RBcmd1bWVudFR5cGVzKCk7Ci0gICAgCiAgICAgU3Ry
dWN0dXJlU2V0KiBhZGRTdHJ1Y3R1cmVTZXQoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQpCiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlU2V0LnNpemUoKSk7CkBAIC03MTgs
NiArODA1LDggQEAgcHVibGljOgogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG1fbXVzdEhhbmRsZVZh
bHVlczsKICAgICAKICAgICBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1fZml4cG9pbnRTdGF0
ZTsKKyAgICBHcmFwaEZvcm0gbV9mb3JtOworICAgIFVuaWZpY2F0aW9uU3RhdGUgbV91bmlmaWNh
dGlvblN0YXRlOwogcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0
b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9j
a0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCwyMiBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKKyAgICB2
b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9
PSBQaGFudG9tICYmIChjaGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwgY2hpbGQxKCktPm9wKCkgPT0g
U2V0TG9jYWwgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnQpKTsKKyAgICAgICAgbV9v
cCA9IFBoYW50b21Mb2NhbDsKKyAgICAgICAgbV9vcEluZm8gPSBjaGlsZDEoKS0+bV9vcEluZm87
IC8vIENvcHkgdGhlIHZhcmlhYmxlQWNjZXNzRGF0YS4KKyAgICAgICAgY2hpbGRyZW4uc2V0Q2hp
bGQxKEVkZ2UoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29udmVydFRvR2V0TG9jYWwoVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgTm9kZSogcGhpKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fb3AgPT0gR2V0TG9jYWxVbmxpbmtlZCk7CisgICAgICAgIG1fb3AgPSBHZXRMb2NhbDsK
KyAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YXJpYWJsZSk7Cisg
ICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShFZGdlKHBoaSkpOworICAgIH0KKyAgICAKICAgICBK
U0NlbGwqIHdlYWtDb25zdGFudCgpCiAgICAgewogICAgICAgICBBU1NFUlQob3AoKSA9PSBXZWFr
SlNDb25zdGFudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIG1hY3JvKE5vcCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFj
cm8oUGhpLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikgXAogICAgIG1hY3Jv
KEZsdXNoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8o
UGhhbnRvbUxvY2FsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAg
XAogICAgIC8qIEdldCB0aGUgdmFsdWUgb2YgYSBsb2NhbCB2YXJpYWJsZSwgd2l0aG91dCBsaW5r
aW5nIGludG8gdGhlIFZhcmlhYmxlQWNjZXNzRGF0YSAqL1wKICAgICAvKiBuZXR3b3JrLiBUaGlz
IGlzIG9ubHkgdmFsaWQgZm9yIHZhcmlhYmxlIGFjY2Vzc2VzIHdob3NlIHByZWRpY3Rpb25zIG9y
aWdpbmF0ZWQgKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25JbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQcmVk
aWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1
ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFByZWRpY3Rpb25JbmplY3Rpb25QaGFzZSA6IHB1
YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgUHJlZGljdGlvbkluamVjdGlvblBoYXNlKEdyYXBo
JiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInByZWRpY3Rpb24gaW5qZWN0aW9uIikK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIEFTU0VSVChtX2dyYXBo
Lm1fdW5pZmljYXRpb25TdGF0ZSA9PSBHbG9iYWxseVVuaWZpZWQpOworICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkgPj0gMSk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHBy
b2ZpbGUgPSBwcm9maWxlZEJsb2NrKCktPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7Cisg
ICAgICAgICAgICBpZiAoIXByb2ZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJnXS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkp
OworICAgICAgICAgICAgCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAiQXJndW1lbnQgWyIsIGFyZywgIl0gcHJlZGlj
dGlvbjogIiwKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGlvbkR1bXAobV9hcmd1bWVudHNbYXJn
XS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSksICJcbiIpOworI2VuZGlmCisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBt
X2dyYXBoLm1fb3NyRW50cnlCeXRlY29kZUluZGV4KQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRs
ZVZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
bV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAgICAg
aWYgKCFub2RlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobm9kZS0+aGFzTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3QoCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
RnJvbVZhbHVlKG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisK
K2Jvb2wgcGVyZm9ybVByZWRpY3Rpb25JbmplY3Rpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgUHJlZGljdGlvbiBJbmplY3Rpb24gUGhh
c2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UHJlZGljdGlvbkluamVjdGlvblBoYXNlPihncmFw
aCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlX2gKKyNkZWZpbmUg
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFByZWRpY3Rpb24gSW5qZWN0aW9uOgorLy8KKy8vIFRh
a2VzIG1pc2NlbGxhbmVvdXMgZGF0YSBhYm91dCB2YXJpYWJsZSB0eXBlIHByZWRpY3Rpb25zIGFu
ZCBpbmplY3RzIHRoZW0uCisvLyBUaGlzIGluY2x1ZGVzIGFyZ3VtZW50IHByZWRpY3Rpb25zIGFu
ZCBPU1IgZW50cnkgcHJlZGljdGlvbnMuCisKK2Jvb2wgcGVyZm9ybVByZWRpY3Rpb25JbmplY3Rp
b24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2VfaApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0MTMwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0Myw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigp
CiAgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOwor
ICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gR2xvYmFsbHlVbmlm
aWVkKTsKKyAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQogICAgICAgICBtX2NvdW50ID0gMDsKICNlbmRpZgpAQCAtODEyLDYgKzgxNSw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgICAgIGNhc2UgTm9wOgogICAgICAg
ICBjYXNlIENvdW50RXhlY3V0aW9uOgorICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTGFzdE5vZGVUeXBlOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDA3LDYgKzUwMDcsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAg
Y2FzZSBQaGFudG9tOgorICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICAvLyBUaGlzIGlz
IGEgbm8tb3AuCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVy
ZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MTMwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNiArNDksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQog
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAg
ICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vz
c0RhdGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CiAgICAgICAgICAgICBp
ZiAoIXZhcmlhYmxlLT5pc1Jvb3QoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVW5pZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2Uu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIFVuaWZpY2F0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFVu
aWZpY2F0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAidW5p
ZmljYXRpb24iKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV91bmlmaWNhdGlvblN0YXRlID09IExvY2FsbHlVbmlmaWVkKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEVuc3VyZSB0aGF0IGFsbCBQaGkgZnVuY3Rpb25zIGFyZSB1bmlmaWVk
LgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKGJsb2Nr
LT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
cGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7CisgICAgICAgICAg
ICAgICAgTm9kZSogcGhpID0gYmxvY2stPnBoaXNbcGhpSW5kZXhdOworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgY2hpbGRJZHggPSAwOyBjaGlsZElkeCA8IEFkamFjZW5jeUxpc3Q6OlNp
emU7ICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwaGktPmNoaWxkcmVu
LmNoaWxkKGNoaWxkSWR4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcGhpLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+dW5pZnkoCisgICAgICAgICAgICAgICAgICAgICAgICBwaGktPmNoaWxkcmVuLmNoaWxk
KGNoaWxkSWR4KS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQg
YWxsIHByZWRpY3Rpb25zIGFyZSBmaXhlZCB1cCBiYXNlZCBvbiB0aGUgdW5pZmljYXRpb24uCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NE
YXRhLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGEg
PSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKKyAgICAgICAgICAgIGRhdGEtPmZp
bmQoKS0+cHJlZGljdChkYXRhLT5ub25VbmlmaWVkUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAg
IGRhdGEtPmZpbmQoKS0+bWVyZ2VJc0NhcHR1cmVkKGRhdGEtPmlzQ2FwdHVyZWQoKSk7CisgICAg
ICAgICAgICBkYXRhLT5maW5kKCktPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZChk
YXRhLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9IEdsb2JhbGx5VW5pZmllZDsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtVW5pZmljYXRp
b24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJE
RkcgVW5pZmljYXRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8VW5pZmljYXRpb25Q
aGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdV
bmlmaWNhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdVbmlmaWNhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR1VuaWZpY2F0aW9uUGhhc2VfaAorI2RlZmluZSBERkdVbmlmaWNhdGlvblBoYXNlX2gK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFVuaWZp
Y2F0aW9uOgorLy8KKy8vIEV4YW1pbmVzIGFsbCBQaGkgZnVuY3Rpb25zIGFuZCBlbnN1cmVzIHRo
YXQgdGhlIHZhcmlhYmxlIGFjY2VzcyBkYXRhcyBhcmUKKy8vIHVuaWZpZWQuIFRoaXMgY3JlYXRl
cyBvdXIgImxpdmUtcmFuZ2Ugc3BsaXQiIHZpZXcgb2YgdmFyaWFibGVzLgorCitib29sIHBlcmZv
cm1VbmlmaWNhdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1VuaWZpY2F0aW9uUGhhc2Vf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2
aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMTAgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3Jh
cGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgeworICAgICAgICAgICAgICAgICAgICAvLyBQaGkg
Y2hpbGRyZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhpSW5kZXgo
aSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwg
aik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwpAQCAtMTA5LDEwICsxMTMsMjAgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAvLyBVbmxlc3MgSSdtIGEgRmx1c2gsIFBoYW50b20sIEdldExvY2FsLCBvciBQaGks
IG15IGNoaWxkcmVuIHNob3VsZCBoYXNSZXN1bHQoKS4KICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1ZhcmlhYmxl
QWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBl
ZGdlKSwgZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVk
Z2UpLCBlZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gTG9jYWxseVVuaWZpZWQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmICFqKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNSZXN1
bHQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzMyw3ICsxNDcsOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5hZGQobm9kZSk7CiAg
ICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5pc1BoaUluZGV4KGkpKQogICAgICAgICAgICAgICAg
ICAgICBwaGlzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwotICAgICAgICAgICAgICAgIFZfRVFVQUwo
KG5vZGUpLCBteVJlZkNvdW50cy5nZXQobm9kZSksIG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7
CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTIHx8ICFu
b2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVB
TCgobm9kZSksIG15UmVmQ291bnRzLmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgp
KTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1D
aGlsZHJlbihub2RlKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1f
Z3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKQEAg
LTE0OCw2ICsxNjMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgbm9kZS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCA9IG5vZGUtPmxvY2FsKCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgeworICAgICAgICAgICAgICAg
ICAgICAvLyBQaGkgY2hpbGRyZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCisgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2st
PmlzUGhpSW5kZXgoaSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgu
Y2hpbGQobm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTg5LDExICsyMDgsMTMgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJl
ZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9w
cmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFBoaSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBGbHVzaAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFBoaQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFBoYW50b21Mb2NhbCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUgPT0gZWRnZS5ub2RlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yMzEsNiArMjUyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgbm9kZXNJblRoaXNCbG9j
ay5jb250YWlucyhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Rmx1c2g6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9m
b3JtID09IExvYWRTdG9yZSAmJiAhaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlLCBlZGdlKSwgIXBoaXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5v
ZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQpAQCAtMjU2LDYgKzI4OSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAg
ICAgICAgICAgICAgICBjaGVja09wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5k
ZXgsIGdldExvY2FsUG9zaXRpb25zLCBzZXRMb2NhbFBvc2l0aW9ucywgYXJndW1lbnRUb09wZXJh
bmQoaSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQx
MzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxv
Y2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMjAgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIG5lZWRzTmV3TGluZSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpIHx8IG5vZGUtPm9w
KCkgPT0gUGhpIHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAgICAgICAgaWYgKCFu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2Nh
bCkKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAg
IGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5v
ZGUtPmNoaWxkMSgpLT5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGaXJz
dCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhlbgog
ICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5v
ZGUuIFdlIGRvIHNvIGluIHRoaXMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186237</attachid>
            <date>2013-02-02 14:13:54 -0800</date>
            <delta_ts>2013-02-03 16:22:06 -0800</delta_ts>
            <desc>it runs 3d-cube!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>110532</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDEzMDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsMTIgQEAKIAkJMEYyMUMyN0QxNEJFNzI3
QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAvKiBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5dGVjb2RlQ29u
dmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNDJEQTcxM0Yz
QjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNTI2RTIxNkJDOTIwRjAwNzVENjNFIC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyNTI2REIxNkJDOTIwRDAwNzVENjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwICovOyB9OworCQkwRjI1MjZFMzE2QkM5MjExMDA3NUQ2M0UgLyogREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyNTI2REMxNkJDOTIwRDAwNzVENjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1MjZF
NDE2QkM5MjE1MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjUyNkREMTZCQzky
MEQwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9OworCQkw
RjI1MjZFNTE2QkM5MjE3MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1MjZERTE2
QkM5MjBEMDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNTI2RTYxNkJDOTIx
QTAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTI2REYxNkJDOTIwRDAwNzVENjNFIC8qIERG
R1VuaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjI1MjZFNzE2QkM5MjFEMDA3NUQ2M0Ug
LyogREZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyNTI2RTAxNkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9u
UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEyMTUx
QzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLzsgfTsKIAkJMEYyQkRDMTYxNTFD
NUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTk1OSw2ICs5NjUsMTIgQEAKIAkJMEYyMUMyN0ExNEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1
dGlvbkhhcm5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0aW9u
SGFybmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3RTE0QkVBQTgw
MDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCeXRlY29kZUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNTI2REIxNkJDOTIwRDAwNzVE
NjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
Q1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MjUyNkRDMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMjUyNkREMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlZGlj
dGlvbkluamVjdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1MjZERTE2QkM5MjBE
MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjI1MjZERjE2QkM5MjBEMDA3NUQ2M0UgLyogREZHVW5pZmljYXRpb25QaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVbmlmaWNhdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNTI2RTAxNkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0
aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVW5pZmljYXRp
b25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRml4dXBQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdGaXh1cFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTkyLDYg
KzI2MDQsOCBAQAogCQkJCTBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAq
LywKIAkJCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwICovLAogCQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5oICovLAorCQkJCTBGMjUyNkRCMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjI1MjZEQzE2QkM5MjBEMDA3NUQ2M0UgLyog
REZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8q
IERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEZGNDI3NjExNTkxQTFDOTAwNENCOUZGIC8qIERGR0Rp
c2Fzc2VtYmxlci5jcHAgKi8sCkBAIC0yNjQwLDYgKzI2NTQsOCBAQAogCQkJCTBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8sCiAJCQkJMEZG
RkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0
RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuaCAqLywKKwkJCQkwRjI1MjZERDE2QkM5MjBEMDA3
NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjI1MjZE
RTE2QkM5MjBEMDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJ
CQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyog
REZHUmVnaXN0ZXJCYW5rLmggKi8sCkBAIC0yNjU5LDYgKzI2NzUsOCBAQAogCQkJCTBGNjM5NDNE
MTVDNzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCAqLywK
IAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkw
RkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJMEYyNTI2REYx
NkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGMjUy
NkUwMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggKi8sCiAJCQkJMEYz
QjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCAqLywKIAkJCQkwRjNCM0Ey
QTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLywKIAkJCQkwRjJCREMzRjE1MjI4
MDE3MDBDRDg5MTAgLyogREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggKi8sCkBAIC0zMzE4LDYg
KzMzMzYsOSBAQAogCQkJCTE0Q0E5NThCMTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0
eUFuYWx5emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNENBOTU4RDE2QUI1MEZBMDA5MzhBMDYg
LyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYwNERB
MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjI1MjZFMzE2QkM5MjExMDA3NUQ2M0UgLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNTI2RTUxNkJDOTIxNzAwNzVENjNFIC8qIERGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNTI2RTcxNkJD
OTIxRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
Mzk1MSw2ICszOTcyLDkgQEAKIAkJCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29t
bW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBE
RkdFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAv
KiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjUyNkUy
MTZCQzkyMEYwMDc1RDYzRSAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMjUyNkU0MTZCQzkyMTUwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyNTI2RTYxNkJDOTIxQTAwNzVENjNF
IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMTQxMzAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDYgKzQ2LDggQEAgc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0cyB7CiAgICAgc3RhdGlj
IHZvaWQgZHVtcChjb25zdCBUJiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCkgeyB2YWx1ZS5kdW1w
KG91dCk7IH0KIH07CiAKK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQsIExvY2Fs
T3BlcmFuZCB9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHMgPSBPcGVy
YW5kVmFsdWVUcmFpdHM8VD4gPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgpAQCAtNjYsNiAr
NjgsMjggQEAgcHVibGljOgogICAgIFQmIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fbG9j
YWxzW2lkeF07IH0KICAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVy
biBtX2xvY2Fsc1tpZHhdOyB9CiAgICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFu
ZEtpbmQ+CisgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG9w
ZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJP
ZkFyZ3VtZW50cygpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICB9Cisg
ICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CisgICAgVCYgYXRGb3Ioc2l6ZV90
IGlkeCkKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQp
CisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4KTsKKyAgICAgICAgcmV0dXJuIGxvY2Fs
KGlkeCk7CisgICAgfQorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAg
IGNvbnN0IFQmIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAob3Bl
cmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50
KGlkeCk7CisgICAgICAgIHJldHVybiBsb2NhbChpZHgpOworICAgIH0KKyAgICAKICAgICB2b2lk
IGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChzaXplIDw9IG1f
bG9jYWxzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4Nyw2ICsx
Nzg3LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBGbHVzaDoKKyAgICBjYXNlIFBoYW50b21M
b2NhbDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCkBAIC0xOTEzLDYgKzE5MTQsNyBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0
YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgY2FzZSBQaGFu
dG9tTG9jYWw6CiAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICAvLyBUaGUgYmxvY2sg
dHJhbnNmZXJzIHRoZSB2YWx1ZSBmcm9tIGhlYWQgdG8gdGFpbC4KICAgICAgICAgICAgIHNvdXJj
ZSA9IGluVmFyaWFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDE0MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAg
ICAgICAgICAgY2FzZSBQaGk6IC8qIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA4NTU1ICovIHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02MzUsOCArNjM1LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgaWYgKGNoYW5nZWQpCi0gICAgICAgICAgICBtX2dyYXBoLmNv
bGxlY3RHYXJiYWdlKCk7CisgICAgICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICAgICAgICBtX2dy
YXBoLmRldGhyZWFkKCk7CisgICAgICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IExvYWRTdG9yZTsK
KyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMu
aAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9E
RSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1h
LCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0
ZW1wbGF0ZVBvc3QgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9kZShHcmFwaCYgZ3JhcGgsIFJl
ZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0
ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSogQmFzaWNCbG9j
azo6YXBwZW5kTm9kZShHcmFwaCYgZ3JhcGgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1v
ZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFy
YW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKICAgICAgICAgTm9kZSogcmVzdWx0ID0g
Z3JhcGguYWRkTm9kZShyZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFy
YW1zQ29tbWEgdmFsdWVBcmdzKTsgXAogICAgICAgICBhcHBlbmQocmVzdWx0KTsgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDE0MTM3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsNjQgKzI4NywzMyBAQCBwcml2YXRlOgog
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2Nh
bChvcGVyYW5kKTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2Fw
dHVyZWQob3BlcmFuZCwgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpOwogICAg
ICAgICAKKyAgICAgICAgLy8gVGhpcyBoYXMgdHdvIGdvYWxzOiAxKSBsaW5rIHRvZ2V0aGVyIHZh
cmlhYmxlIGFjY2VzcyBkYXRhcywgYW5kIDIpCisgICAgICAgIC8vIHRyeSB0byBhdm9pZCBjcmVh
dGluZyByZWR1bmRhbnQgR2V0TG9jYWxzLiAoMSkgaXMgcmVxdWlyZWQgZm9yCisgICAgICAgIC8v
IGNvcnJlY3RuZXNzIC0gbm8gb3RoZXIgcGhhc2Ugd2lsbCBlbnN1cmUgdGhhdCBibG9jay1sb2Nh
bCB2YXJpYWJsZQorICAgICAgICAvLyBhY2Nlc3MgZGF0YSB1bmlmaWNhdGlvbiBpcyBkb25lIGNv
cnJlY3RseS4gKDIpIGlzIHB1cmVseSBvcHBvcnR1bmlzdGljCisgICAgICAgIC8vIGFuZCBpcyBt
ZWFudCBhcyBhbiBjb21waWxlLXRpbWUgb3B0aW1pemF0aW9uIG9ubHkuCisgICAgICAgIAorICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOworICAgICAgICAKICAgICAgICAgaWYg
KG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEZsdXNoKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVHdvIHBvc3NpYmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sgd2FudHMgdGhl
IGxvY2FsIHRvIGJlIGxpdmUKLSAgICAgICAgICAgICAgICAvLyBidXQgaGFzIG5vdCBsb2FkZWQg
aXRzIHZhbHVlLCBvciBpdCBoYXMgbG9hZGVkIGl0cyB2YWx1ZSwgaW4KLSAgICAgICAgICAgICAg
ICAvLyB3aGljaCBjYXNlIHdlJ3JlIGRvbmUuCi0gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkp
IHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3Jh
cGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFu
ZCkgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0
TG9jYWwpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUlzQ2FwdHVyZWQo
aXNDYXB0dXJlZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ICE9IEZsdXNoKTsKLQotICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm1l
cmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChpc0NhcHR1cmVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugd2lzaCB0byB1c2UgdGhl
IHNhbWUgdmFyaWFibGUgYWNjZXNzIGRhdGEgYXMgdGhlIHByZXZpb3VzIGFjY2VzcywKLSAgICAg
ICAgICAgICAgICAvLyBidXQgZm9yIGFsbCBvdGhlciBwdXJwb3NlcyB3ZSB3YW50IHRvIGlzc3Vl
IGEgbG9hZCBzaW5jZSBmb3IgYWxsIHdlCi0gICAgICAgICAgICAgICAgLy8ga25vdywgYXQgdGhp
cyBzdGFnZSBvZiBjb21waWxhdGlvbiwgdGhlIGxvY2FsIGhhcyBiZWVuIGNsb2JiZXJlZC4KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgbGluayB0byB0
aGUgUGhpIG5vZGUsIG5vdCB0byB0aGUgR2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9kZS0+b3AoKSA9
PSBQaGkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIG5ld0dldExv
Y2FsID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbigKLSAgICAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwg
bm9kZSkpOwotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bG9jYWwob3BlcmFuZCkgPSBuZXdHZXRMb2NhbDsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3
R2V0TG9jYWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
OwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9j
YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQp
OworICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwg
aXNDYXB0dXJlZCk7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayBmb3IgcmVhZHMgb2Yg
dGVtcG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3MsCi0gICAgICAgIC8vIGV4cGFuZCBtX3ByZXNl
cnZlZFZhcnMgdG8gY292ZXIgdGhlc2UuCi0gICAgICAgIG1fcHJlc2VydmVkVmFycy5zZXQob3Bl
cmFuZCk7Ci0gICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKICAg
ICAgICAgCi0gICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFi
bGVBY2Nlc3NEYXRhKSk7Ci0gICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tF
bnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBvcGVyYW5kKSk7Ci0gICAgICAgIG5vZGUgPSBpbmpl
Y3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJp
YWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5k
U3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkpOwogICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9k
ZTsKLSAgICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0
TG9jYWxGaXJzdFRpbWUob3BlcmFuZCwgbm9kZSk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9CiAgICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBOb2RlKiB2
YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQpAQCAtMzczLDYxICszNDIsMjUgQEAg
cHJpdmF0ZToKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBib29sIGlzQ2FwdHVyZWQgPSBtX2Nv
ZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kKTsKIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlOworICAgICAgICAKICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IEZsdXNoKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHdvIHBvc3Np
YmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sgd2FudHMgdGhlIGxvY2FsIHRvIGJlIGxpdmUKLSAg
ICAgICAgICAgICAgICAvLyBidXQgaGFzIG5vdCBsb2FkZWQgaXRzIHZhbHVlLCBvciBpdCBoYXMg
bG9hZGVkIGl0cyB2YWx1ZSwgaW4KLSAgICAgICAgICAgICAgICAvLyB3aGljaCBjYXNlIHdlJ3Jl
IGRvbmUuCi0gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5t
ZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBp
bmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2
YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJl
ZCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldEFyZ3Vt
ZW50KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgZ2V0dGluZyBhbiBhcmd1bWVudCBpbiB0
aGUgZmlyc3QgYmFzaWMgYmxvY2s7IGxpbmsKLSAgICAgICAgICAgICAgICAvLyB0aGUgR2V0TG9j
YWwgdG8gdGhlIFNldEFyZ3VtZW50LgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5sb2Nh
bCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOwotICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKLSAgICAgICAgICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxh
dGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGUpLCBub2RlKSk7Ci0gICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1
bWVudCkgPSBub2RlOwotICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNDYXB0dXJlZCkgewotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAgICAgICBu
b2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9kZS0+b3Ao
KSA9PSBTZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCB8fCBub2RlLT5vcCgpID09IFBo
aSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24o
YWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwg
bm9kZSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUlzQ2FwdHVyZWQo
aXNDYXB0dXJlZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IEdldExvY2FsKQorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAg
ICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5u
b2RlKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFy
aWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICAKLSAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7Ci0KLSAgICAgICAgTm9kZSogcGhpID0gYWRkVG9H
cmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKLSAgICAgICAgbV9hcmd1bWVu
dFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGFyZ3Vt
ZW50KSk7Ci0gICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRv
R3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAg
ICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2Nh
bCwgT3BJbmZvKHZhcmlhYmxlKSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7Ci0gICAgICAgIAotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50
LCBub2RlKTsKLSAgICAgICAgCiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICB2b2lk
IHNldEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0g
Tm9ybWFsU2V0KQpAQCAtNDkzLDYzICs0MjYsMjQgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IGZsdXNoRGlyZWN0KGludCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0
aW9uKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNoZWNrIGlmIHRoZSBz
YW1lIG9wZXJhbmQgaGFkIGFscmVhZHkgYmVlbiBmbHVzaGVkIHRvCi0gICAgICAgIC8vIHNvbWUg
b3RoZXIgbG9jYWwgdmFyaWFibGUuCi0gICAgICAgIAogICAgICAgICBib29sIGlzQ2FwdHVyZWQg
PSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBtX2lubGluZVN0YWNrVG9wLT5tX2lu
bGluZUNhbGxGcmFtZSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQob3BlcmFuZCA8IEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGU7Ci0g
ICAgICAgIGludCBpbmRleDsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQp
KSB7Ci0gICAgICAgICAgICBpbmRleCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOwotICAg
ICAgICAgICAgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
aW5kZXgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kOwot
ICAgICAgICAgICAgbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
aW5kZXgpOwotICAgICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChvcGVyYW5kKTsKLSAgICAg
ICAgfQorICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgbm9kZSA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpICE9IEZsdXNoICYmIG5vZGUtPm9w
KCkgIT0gR2V0TG9jYWwpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBFbWl0IGEgRmx1
c2ggcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGFscmVhZHkgZmx1c2hlZCBpdC4KLSAgICAgICAg
ICAgIC8vIFRoaXMgZ2l2ZXMgdXMgZ3VpZGFuY2UgdG8gc2VlIHRoYXQgdGhlIHZhcmlhYmxlIGFs
c28gbmVlZHMgdG8gYmUgZmx1c2hlZAotICAgICAgICAgICAgLy8gZm9yIGFyZ3VtZW50cywgZXZl
biBpZiBpdCBhbHJlYWR5IGhhZCB0byBiZSBmbHVzaGVkIGZvciBvdGhlciByZWFzb25zLgotICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVy
Z2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChGbHVzaCwg
T3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGUpOwotICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50UG9zaXRpb24pCi0gICAgICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFi
bGUodmFyaWFibGVBY2Nlc3NEYXRhKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQor
ICAgICAgICAgICAgdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAg
ICAgICAgIHZhcmlhYmxlLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFu
ZCwgaXNDYXB0dXJlZCk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1
cmVkKTsKLSAgICAgICAgTm9kZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpKTsKLSAgICAgICAgbm9kZSA9IGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2
YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQo
b3BlcmFuZCkpIHsKLSAgICAgICAgICAgIG1fYXJndW1lbnRQaGlTdGFjay5hcHBlbmQoUGhpU3Rh
Y2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOwotICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCkgPSBub2RlOwotICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGlt
ZShpbmRleCwgbm9kZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2xvY2FsUGhp
U3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsK
LSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgp
ID0gbm9kZTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0
TG9jYWxGaXJzdFRpbWUoaW5kZXgsIG5vZGUpOwotICAgICAgICB9CisgICAgICAgIG5vZGUgPSBh
ZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgaWYg
KGFyZ3VtZW50UG9zaXRpb24pCi0gICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJp
YWJsZSh2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+
YWRkVmFyaWFibGUodmFyaWFibGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGZsdXNoQXJndW1l
bnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXMoKQpAQCAtMjAyNCw3ICsxOTE4LDYgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENh
Y2hlKSk7CiAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJn
dW1lbnQsIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50
c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50
KTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1l
bnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAgfQogICAgIH0KQEAg
LTMyMTMsMTUxICszMTA2LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgIH0KIH0KIAotdGVtcGxhdGU8Qnl0ZUNvZGVQYXJzZXI6OlBoaVN0YWNrVHlwZSBz
dGFja1R5cGU+Ci12b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQotewotICAg
IFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4mIHBoaVN0YWNrID0gKHN0YWNrVHlwZSA9PSBBcmd1
bWVudFBoaVN0YWNrKSA/IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsKLSAg
ICAKLSAgICB3aGlsZSAoIXBoaVN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBQaGlTdGFja0Vu
dHJ5IGVudHJ5ID0gcGhpU3RhY2subGFzdCgpOwotICAgICAgICBwaGlTdGFjay5yZW1vdmVMYXN0
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBQcmVkZWNlc3Nvckxpc3Qm
IHByZWRlY2Vzc29ycyA9IGVudHJ5Lm1fYmxvY2stPm1fcHJlZGVjZXNzb3JzOwotICAgICAgICB1
bnNpZ25lZCB2YXJObyA9IGVudHJ5Lm1fdmFyTm87Ci0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogZGF0YUZvclBoaSA9IGVudHJ5Lm1fcGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLQotI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0Yo
IiAgIEhhbmRsaW5nIHBoaSBlbnRyeSBmb3IgdmFyICV1LCBwaGkgQCV1LlxuIiwgZW50cnkubV92
YXJObywgZW50cnkubV9waGkpOwotI2VuZGlmCi0gICAgICAgIAotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewotI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgIERl
YWxpbmcgd2l0aCBwcmVkZWNlc3NvciBibG9jayAldS5cbiIsIHByZWRlY2Vzc29yc1tpXSk7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JC
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKLQotICAgICAg
ICAgICAgTm9kZSomIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVk
ZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQodmFyTm8pIDogcHJlZGVjZXNz
b3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKHZhck5vKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTm9kZSogdmFsdWVJblByZWRlY2Vzc29yID0gdmFyOwotICAgICAgICAgICAgaWYg
KCF2YWx1ZUluUHJlZGVjZXNzb3IpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIERpZCBub3QgZmluZCBu
b2RlLCBhZGRpbmcgcGhpLlxuIik7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIHZhbHVlSW5Q
cmVkZWNlc3NvciA9IGluc2VydFBoaU5vZGUoT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShz
dGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjayA/IGFyZ3VtZW50VG9PcGVyYW5kKHZhck5vKSA6
IHN0YXRpY19jYXN0PGludD4odmFyTm8pLCBmYWxzZSkpLCBwcmVkZWNlc3NvckJsb2NrKTsKLSAg
ICAgICAgICAgICAgICB2YXIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7Ci0gICAgICAgICAgICAgICAg
aWYgKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKQotICAgICAgICAgICAgICAgICAgICBw
cmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUodmFy
Tm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJz
dFRpbWUodmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0gICAgICAgICAgICAgICAgcGhpU3Rh
Y2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9jaywgdmFsdWVJblByZWRlY2Vz
c29yLCB2YXJObykpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUluUHJlZGVjZXNzb3It
Pm9wKCkgPT0gR2V0TG9jYWwpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIEZvdW5kIEdldExvY2FsIEAl
dS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvci0+aW5kZXgoKSk7Ci0jZW5kaWYKLQotICAgICAgICAg
ICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIFZhcmlhYmxlQWNjZXNzRGF0YXMg
YXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZQotICAgICAgICAgICAgICAgIC8vIEdldExvY2FsIGFu
ZCBpdHMgYmxvY2stbG9jYWwgUGhpLiBTdHJpY3RseSBzcGVha2luZyB3ZSBvbmx5IG5lZWQgdGhl
IHR3bwotICAgICAgICAgICAgICAgIC8vIHRvIGJlIHVuaWZpZWQuIEJ1dCBmb3IgZWZmaWNpZW5j
eSwgd2Ugd2FudCB0aGUgY29kZSB0aGF0IGNyZWF0ZXMgR2V0TG9jYWxzCi0gICAgICAgICAgICAg
ICAgLy8gYW5kIFBoaXMgdG8gdHJ5IHRvIHJldXNlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXMgbXVj
aCBhcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWVJblByZWRlY2Vzc29y
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YWx1ZUluUHJlZGVjZXNzb3ItPmNoaWxkMSgpLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
dmFsdWVJblByZWRlY2Vzc29yID0gdmFsdWVJblByZWRlY2Vzc29yLT5jaGlsZDEoKS5ub2RlKCk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgRm91bmQgQCV1LlxuIiwg
dmFsdWVJblByZWRlY2Vzc29yLT5pbmRleCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3Nvci0+b3Ao
KSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgIHx8IHZhbHVlSW5QcmVkZWNlc3Nvci0+b3Ao
KSA9PSBQaGkKLSAgICAgICAgICAgICAgICB8fCB2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0g
Rmx1c2gKLSAgICAgICAgICAgICAgICB8fCAodmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IFNl
dEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclByZWRlY2Vzc29yID0g
dmFsdWVJblByZWRlY2Vzc29yLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgZGF0YUZvclByZWRlY2Vzc29yLT51bmlmeShkYXRhRm9yUGhpKTsKLQotICAg
ICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGVudHJ5Lm1fcGhpOwotI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBSZWYg
Y291bnQgb2YgQCV1ID0gJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCBwaGlOb2RlLT5yZWZDb3Vu
dCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpIHsKLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgIFJlZmZpbmcgQCV1LlxuIiwgdmFsdWVJblByZWRlY2Vzc29yKTsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQxKCkpIHsKLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDEgPSBAJXUuXG4iLCBwaGlOb2RlLT5p
bmRleCgpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgcGhp
Tm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UodmFsdWVJblByZWRlY2Vzc29yKSk7Ci0jaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4KCkpOwotICAg
ICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwotICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDIo
KSkgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMiA9IEAldS5cbiIsIHBo
aU5vZGUtPmluZGV4KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0jZW5kaWYKLSAgICAgICAgICAg
ICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIoRWRnZSh2YWx1ZUluUHJlZGVjZXNzb3Ip
KTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAg
ICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgo
KSk7Ci0gICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUo
KSk7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXBoaU5vZGUt
PmNoaWxkMygpKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQzID0gQCV1
LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgdmFsdWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgotICAg
ICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLnNldENoaWxkMyhFZGdlKHZhbHVlSW5QcmVk
ZWNlc3NvcikpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2Rl
LT5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpk
YXRhRmlsZSgpKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTm9kZSogbmV3UGhpID0gaW5zZXJ0UGhpTm9kZShPcEluZm8oZGF0YUZvclBoaSks
IGVudHJ5Lm1fYmxvY2spOwotICAgICAgICAgICAgCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNwbGl0dGluZyBA
JXUsIGNyZWF0ZWQgQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgbmV3UGhpLT5pbmRleCgpKTsK
LSNlbmRpZgotCi0gICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoLnJlZihuZXdQaGkpOwotCi0gICAgICAgICAgICBuZXdQaGktPmNoaWxk
cmVuID0gcGhpTm9kZS0+Y2hpbGRyZW47Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1
OiAiLCBuZXdQaGktPmluZGV4KCkpOwotICAgICAgICAgICAgbmV3UGhpLT5kdW1wQ2hpbGRyZW4o
V1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgot
Ci0gICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKG5ld1BoaSwgdmFsdWVJ
blByZWRlY2Vzc29yLCAwKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBo
aU5vZGUtPmluZGV4KCkpOwotICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6
ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAgICAg
ICAgfQotICAgIH0KLX0KLQogdm9pZCBCeXRlQ29kZVBhcnNlcjo6Zml4VmFyaWFibGVBY2Nlc3NQ
cmVkaWN0aW9ucygpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92
YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKQEAgLTM3MzAsMTQgKzM0NzgsNiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgZGF0YUxvZ0YoIlByb2Nlc3NpbmcgbG9j
YWwgdmFyaWFibGUgcGhpcy5cbiIpOwogI2VuZGlmCiAgICAgCi0gICAgbV9jdXJyZW50UHJvZmls
aW5nSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKLSAgICAKLSAgICBwcm9jZXNzUGhpU3RhY2s8TG9j
YWxQaGlTdGFjaz4oKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
Ci0gICAgZGF0YUxvZ0YoIlByb2Nlc3NpbmcgYXJndW1lbnQgcGhpcy5cbiIpOwotI2VuZGlmCi0g
ICAgcHJvY2Vzc1BoaVN0YWNrPEFyZ3VtZW50UGhpU3RhY2s+KCk7Ci0KICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKGJsb2NrKTsKQEAgLTM3
NDUsMjcgKzM0ODUsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgICAg
ICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7CiAgICAgfQogICAgIAotICAg
IGZpeFZhcmlhYmxlQWNjZXNzUHJlZGljdGlvbnMoKTsKLSAgICAKLSAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5t
X29zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5v
cGVyYW5kKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9wZXJh
bmRGb3JJbmRleChpKSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+aGFzTG9jYWwoKSk7Ci0gICAgICAg
ICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdCgKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlc1tpXSkpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJzID0gbV9w
cmVzZXJ2ZWRWYXJzOwogICAgIG1fZ3JhcGgubV9sb2NhbFZhcnMgPSBtX251bUxvY2FsczsKICAg
ICBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNsb3RzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3
Miw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJl
bWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxv
Y2ssIDApLCBOb0Jsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9
IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTExMyw2ICsxMTQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGV0
aHJlYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcygKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRp
dGlvbiksCkBAIC0xMjYsNiArMTI4LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRl
eCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywg
Y29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRh
a2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29u
ZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMTU0LDYgKzE1Nyw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ0ZHU2ltcGxpZnk6
IEJyYW5jaCB0byBzYW1lIHN1Y2Nlc3NvciBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1
LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIHRh
cmdldEJsb2NrSW5kZXgpOwogI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxvY2tz
KGJsb2NrSW5kZXgsIHRhcmdldEJsb2NrSW5kZXgsIE5vQmxvY2spOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCkBAIC0yNTAsMTAyICsyNTQsMjggQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKGJsb2Nr
KTsKICAgICAgICAgQVNTRVJUKCFibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAKLSAgICAg
ICAgLy8gMSkgUmVtb3ZlIHJlZmVyZW5jZXMgZnJvbSBvdGhlciBibG9ja3MgdG8gdGhpcyBibG9j
ay4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1TdWNjZXNzb3JzKGJsb2Nr
KTsgaS0tOykKLSAgICAgICAgICAgIGZpeFBoaXMoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNz
b3IoYmxvY2ssIGkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5w
aGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9y
LmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgICAgICBtX2dyYXBo
Lm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwogICAgICAgICAKLSAgICAg
ICAgLy8gMikgS2lsbCB0aGUgYmxvY2sKICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5jbGVhcigpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFz
aWNCbG9jayogYmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgaW50IG9wZXJhbmQpCisgICAg
dm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBqZXR0
aXNvbmVkQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgaW50IG9wZXJhbmQpCiAgICAgewot
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJh
bmQpOwotICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgIE5vZGUqIGxpdmVuZXNzTm9kZSA9IGpl
dHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
IE5vZGUqIGF2YWlsYWJpbGl0eU5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgIGlmICghbGl2ZW5lc3NOb2RlKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkK
KyAgICAgICAgQVNTRVJUKGF2YWlsYWJpbGl0eU5vZGUpOworICAgICAgICBpZiAobGl2ZW5lc3NO
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKLSAgICAgICAgICAgIG5v
ZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKKyAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHlOb2RlLT5zaG91bGRHZW5lcmF0ZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBTZXRM
b2NhbCk7CiAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAgICAgICAgbV9ncmFwaCwg
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwg
bm9kZSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZml4UG9zc2libGVHZXRMb2NhbChCYXNpY0Js
b2NrKiBibG9jaywgRWRnZSYgZWRnZSwgYm9vbCBjaGFuZ2VSZWYpCi0gICAgewotICAgICAgICBO
b2RlKiBjaGlsZCA9IGVkZ2Uubm9kZSgpOwotICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gR2V0
TG9jYWwpCi0gICAgICAgICAgICByZXR1cm47Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgIENvbnNpZGVyaW5nIEdldExvY2Fs
IGF0IEAldSwgbG9jYWwgciVkLlxuIiwgbm9kZS0+aW5kZXgoKSwgY2hpbGQtPmxvY2FsKCkpOwot
I2VuZGlmCi0gICAgICAgIGlmIChjaGlsZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVy
ZWQoKSkgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgY2FwdHVyZWQuXG4iKTsKLSNlbmRpZgotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIE5vZGUqIG9yaWdpbmFsTm9kZSA9
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChjaGlsZC0+bG9jYWwoKSk7Ci0jaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAg
ICAgICBEZWFsaW5nIHdpdGggb3JpZ2luYWwgQCV1LlxuIiwgb3JpZ2luYWxOb2RlLT5pbmRleCgp
KTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlKTsKLSNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE9y
aWdpbmFsIGhhcyBsb2NhbCByJWQuXG4iLCBvcmlnaW5hbE5vZGUtPmxvY2FsKCkpOwotI2VuZGlm
Ci0gICAgICAgIEFTU0VSVChjaGlsZC0+bG9jYWwoKSA9PSBvcmlnaW5hbE5vZGUtPmxvY2FsKCkp
OwotICAgICAgICAvLyBQb3NzaWJpbGl0aWVzOgotICAgICAgICAvLyBTZXRMb2NhbCAtPiB0aGUg
c2Vjb25kQmxvY2sgaXMgZ2V0dGluZyB0aGUgdmFsdWUgb2Ygc29tZXRoaW5nIHRoYXQgaXMgaW1t
ZWRpYXRlbHkKLSAgICAgICAgLy8gICAgIGF2YWlsYWJsZSBpbiB0aGUgZmlyc3QgYmxvY2sgd2l0
aCBhIGtub3duIE5vZGVJbmRleC4KLSAgICAgICAgLy8gR2V0TG9jYWwgLT4gdGhlIHNlY29uZEJs
b2NrIGlzIGdldHRpbmcgdGhlIHZhbHVlIG9mIHNvbWV0aGluZyB0aGF0IHRoZSBmaXJzdAotICAg
ICAgICAvLyAgICAgYmxvY2sgYWxzbyBnZXRzLgotICAgICAgICAvLyBQaGkgLT4gdGhlIHNlY29u
ZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlIGZp
cnN0IGJsb2NrCi0gICAgICAgIC8vICAgICB3YXMgYWxzbyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUg
b24uCi0gICAgICAgIC8vIFNldEFyZ3VtZW50IC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcg
Zm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZQotICAgICAgICAvLyAgICAgZmly
c3QgYmxvY2sgd2FzIGtlZXBpbmcgYWxpdmUgYnkgdmlydHVlIG9mIHRoZSBmaXJzdEJsb2NrIGJl
aW5nIHRoZSByb290IGFuZAotICAgICAgICAvLyAgICAgdGhlIG9wZXJhbmQgYmVpbmcgYW4gYXJn
dW1lbnQuCi0gICAgICAgIC8vIEZsdXNoIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9y
IGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdAotICAgICAgICAvLyAgICAg
YmxvY2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxpdmUsIHNvIHRoZSBzZWNvbmQgYmxvY2sgc2hvdWxk
IHJlZmVyIGNoaWxkIG9mCi0gICAgICAgIC8vICAgICB0aGUgZmx1c2guCi0gICAgICAgIGlmIChv
cmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpCi0gICAgICAgICAgICBvcmlnaW5hbE5vZGUgPSBv
cmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgc3dpdGNoIChvcmlnaW5hbE5v
ZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgaWYgKGNo
YW5nZVJlZikKLSAgICAgICAgICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5l
cmF0ZSgpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgICAgICBkYXRhTG9nRigiICAgICAgICBJdCdzIGEgU2V0TG9jYWwuXG4iKTsKLSNlbmRpZgot
ICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VDaGlsZChlZGdlLCBvcmlnaW5hbE5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBJdCdzIGEgR2V0TG9jYWwu
XG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKG9yaWdpbmFsTm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKGVkZ2UsIG9yaWdpbmFs
Tm9kZSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBHZXRMb2NhbCB0
aGF0IHBvaW50cyB0byBhIGNoaWxkIEdldExvY2FsIHRoYXQgaXMgZGVhZCwgdGhlbgotICAgICAg
ICAgICAgLy8gd2UgaGF2ZSBubyBuZWVkIHRvIGRvIGFueXRoaW5nOiB0aGlzIG9yaWdpbmFsIEdl
dExvY2FsIGlzIHN0aWxsIHZhbGlkLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBQaGk6Ci0gICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsKLSAgICAgICAgaWYg
KGNoYW5nZVJlZikKLSAgICAgICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgUGhpL1NldEFyZ3VtZW50LlxuIik7Ci0jZW5k
aWYKLSAgICAgICAgICAgIC8vIEtlZXAgdGhlIEdldExvY2FsIQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICAg
ICAgbV9ncmFwaCwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50
b21Mb2NhbCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhhdmFpbGFiaWxpdHlOb2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGpldHRpc29u
QmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0lu
ZGV4LCBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbikKQEAgLTM1NCw0NSArMjg0LDEzIEBA
IHByaXZhdGU6CiAgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhdLmdldCgpOwogICAgICAgICAKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCi0gICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJs
b2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKKyAgICAgICAg
ICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlDb2Rl
T3JpZ2luLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsg
KytpKQotICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2ZShibG9jaywgYm91bmRhcnlDb2RlT3Jp
Z2luLCBpKTsKKyAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRC
bG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsKICAgICAgICAgCiAgICAgICAgIGZpeEpldHRp
c29uZWRQcmVkZWNlc3NvcnMoYmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIGZpeFBoaXMoQmxvY2tJbmRleCBzb3VyY2VCbG9ja0luZGV4LCBC
bG9ja0luZGV4IGRlc3RpbmF0aW9uQmxvY2tJbmRleCkKLSAgICB7Ci0gICAgICAgIEJhc2ljQmxv
Y2sqIHNvdXJjZUJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tzb3VyY2VCbG9ja0luZGV4XS5nZXQo
KTsKLSAgICAgICAgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbZGVzdGluYXRpb25CbG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlv
bkJsb2NrKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8ga2lsbCBvZmYgdGhl
IHNvdXJjZSBibG9jayBhbmQgdGhlIGRlc3RpbmF0aW9uIGJsb2NrIGlzIGFscmVhZHkKLSAgICAg
ICAgICAgIC8vIGRlYWQsIHRoZW4gd2UncmUgZG9uZSEKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9uQmxvY2st
PnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBkZXN0aW5h
dGlvbkJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAgTm9kZSogbXlOb2RlID0gc291cmNlQmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHBoaU5vZGUtPmxvY2FsKCkpOwotICAgICAgICAg
ICAgaWYgKCFteU5vZGUpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgaGFwcGVuIGlm
IHRoZXJlIGlzIGEgcGhpIGluIHRoZSBkZXN0aW5hdGlvbiB0aGF0IHJlZmVycyBpbnRvCi0gICAg
ICAgICAgICAgICAgLy8gdGhlIGRlc3RpbmF0aW9uIGl0c2VsZi4KLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIH0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigKLSAgICAgICAgICAgICAgICAiQ29uc2lk
ZXJpbmcgcmVtb3ZpbmcgcmVmZXJlbmNlIGZyb20gcGhpIEAldSB0byBAJXUgb24gbG9jYWwgciVk
OiIsCi0gICAgICAgICAgICAgICAgcGhpTm9kZS0+aW5kZXgoKSwgbXlOb2RlLT5pbmRleCgpLCBw
aGlOb2RlLT5sb2NhbCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKG15Tm9kZS0+b3AoKSA9
PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICBteU5vZGUgPSBteU5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBBZGphY2VuY3lMaXN0
OjpTaXplOyArK2opCi0gICAgICAgICAgICAgICAgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVm
ZXJlbmNlKG15Tm9kZSwgcGhpTm9kZSwgaiwgc291cmNlQmxvY2stPmlzUmVhY2hhYmxlKTsKLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRh
TG9nRigiXG4iKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIHZvaWQgZml4
SmV0dGlzb25lZFByZWRlY2Vzc29ycyhCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXgg
amV0dGlzb25lZEJsb2NrSW5kZXgpCiAgICAgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKQEAgLTQwNyw4ICszMDUsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
amV0dGlzb25lZEJsb2NrLT5tX3ByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZml4UGhpcyhibG9ja0luZGV4
LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVtb3ZlUG90
ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKE5vZGUqIG15Tm9kZSwgTm9kZSogcGhpTm9kZSwgdW5z
aWduZWQgZWRnZUluZGV4LCBib29sIGNoYW5nZVJlZikKQEAgLTU3Myw5NiArNDY5LDE2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgcGF0aCB0aGFuIHNlY29uZEJsb2NrLgog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29u
ZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKLSAgICAg
ICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0QmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdp
biwgYXJndW1lbnRUb09wZXJhbmQoaSkpOworICAgICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxp
dmUoZmlyc3RCbG9jaywgamV0dGlzb25lZEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGFyZ3Vt
ZW50VG9PcGVyYW5kKGkpKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0
dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQotICAg
ICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoZmlyc3RCbG9jaywgYm91bmRhcnlDb2RlT3Jp
Z2luLCBpKTsKKyAgICAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGZpcnN0QmxvY2ssIGpl
dHRpc29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+cGhpcy5zaXpl
KCk7ICsraSkKICAgICAgICAgICAgIGZpcnN0QmxvY2stPnBoaXMuYXBwZW5kKHNlY29uZEJsb2Nr
LT5waGlzW2ldKTsKIAotICAgICAgICAvLyBCZWZvcmUgd2Ugc3RhcnQgY2hhbmdpbmcgdGhlIHNl
Y29uZCBibG9jaydzIGdyYXBoLCByZWNvcmQgd2hhdCBub2RlcyB3b3VsZAotICAgICAgICAvLyBi
ZSByZWZlcmVuY2VkIGJ5IHN1Y2Nlc3NvcnMgb2YgdGhlIHNlY29uZCBibG9jay4KLSAgICAgICAg
T3BlcmFuZHM8T3BlcmFuZFN1YnN0aXR1dGlvbj4gc3Vic3RpdHV0aW9ucygKLSAgICAgICAgICAg
IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAg
ICAgICAgIHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCi0gICAgICAgICAgICByZWNvcmRQb3NzaWJsZUlu
Y29taW5nUmVmZXJlbmNlKHNlY29uZEJsb2NrLCBzdWJzdGl0dXRpb25zLCBhcmd1bWVudFRvT3Bl
cmFuZChpKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyArK2kpCi0gICAgICAgICAgICByZWNvcmRQ
b3NzaWJsZUluY29taW5nUmVmZXJlbmNlKHNlY29uZEJsb2NrLCBzdWJzdGl0dXRpb25zLCBpKTsK
LQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IHNlY29uZEJsb2NrLT5hdChpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgYm9vbCBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IGZhbHNlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbTogewotICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgICAgICBO
b2RlKiBwb3NzaWJsZUxvY2FsT3AgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHBvc3NpYmxlTG9jYWxPcC0+b3AoKSAhPSBHZXRMb2NhbAotICAgICAgICAgICAg
ICAgICAgICAmJiBwb3NzaWJsZUxvY2FsT3AtPmhhc0xvY2FsKCkKLSAgICAgICAgICAgICAgICAg
ICAgJiYgIXBvc3NpYmxlTG9jYWxPcC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQo
KSkgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IGZpcnN0QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKHBvc3NpYmxlTG9jYWxPcC0+bG9jYWwoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzZXRMb2NhbC0+b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgp
LCBzZXRMb2NhbC0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFu
b2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNo
aWxkMygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAg
ICAgICAgLy8gQSBGbHVzaCBjb3VsZCB1c2UgYSBHZXRMb2NhbCwgU2V0TG9jYWwsIFNldEFyZ3Vt
ZW50LCBvciBhIFBoaS4KLSAgICAgICAgICAgICAgICAvLyBJZiBpdCB1c2VzIGEgR2V0TG9jYWws
IGl0J2xsIGJlIHRha2VuIGNhcmUgb2YgYmVsb3cuIElmIGl0IHVzZXMgYQotICAgICAgICAgICAg
ICAgIC8vIFNldExvY2FsIG9yIFNldEFyZ3VtZW50LCB0aGVuIGl0IG11c3QgYmUgdXNpbmcgYSBu
b2RlIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgLy8gc2FtZSBibG9jay4gQnV0IGlmIGl0IHVz
ZXMgYSBQaGksIHRoZW4gd2Ugc2hvdWxkIHJlZGlyZWN0IGl0IHRvCi0gICAgICAgICAgICAgICAg
Ly8gdXNlIHdoYXRldmVyIHRoZSBmaXJzdCBibG9jayBhZHZlcnRpc2VkIGFzIGEgdGFpbCBvcGVy
YW5kLgotICAgICAgICAgICAgICAgIC8vIFNpbWlsYXJseSBmb3IgR2V0TG9jYWw7IGl0IGNvdWxk
IHVzZSBhbnkgb2YgdGhvc2UgZXhjZXB0IGZvcgotICAgICAgICAgICAgICAgIC8vIEdldExvY2Fs
LiBJZiBpdCB1c2VzIGEgUGhpIHRoZW4gaXQgc2hvdWxkIGJlIHJlZGlyZWN0ZWQgdG8gdXNlIGEK
LSAgICAgICAgICAgICAgICAvLyBQaGkgZnJvbSB0aGUgdGFpbCBvcGVyYW5kLgotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+b3AoKSAhPSBQaGkpCi0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIGF0Rmly
c3QgPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLT5sb2NhbCgpKTsK
LSAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQx
KCksIEVkZ2Uoc2tpcEdldExvY2FsKGF0Rmlyc3QpKSwgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7
Ci0gICAgICAgICAgICAgICAgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKCFjaGlsZHJlbkFscmVhZHlGaXhlZCkgewotICAgICAg
ICAgICAgICAgIGJvb2wgY2hhbmdlUmVmID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIEdldExvY2FsLCB0
aGVuIHdlIG1pZ2h0IGxpa2UgdG8gZml4IGl0LgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghIW1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghIW5vZGUtPmNoaWxkMSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9k
ZS0+Y2hpbGRyZW4uY2hpbGQxKCksIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghIW5vZGUtPmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJs
ZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBjaGFuZ2VSZWYp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS0+Y2hpbGQzKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2Rl
LT5jaGlsZHJlbi5jaGlsZDMoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmlyc3RCbG9j
ay0+YXBwZW5kKG5vZGUpOwotICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2Vjb25kQmxvY2stPnNpemUoKTsgKytpKQorICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBw
ZW5kKHNlY29uZEJsb2NrLT5hdChpKSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoZmlyc3RC
bG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwogICAgICAgICAKQEAgLTY4NCwzNyArNTAwLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGpldHRpc29uZWRCbG9ja0luZGV4ICE9IE5vQmxvY2sp
CiAgICAgICAgICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGZpcnN0QmxvY2tJbmRleCwg
amV0dGlzb25lZEJsb2NrSW5kZXgpOwogICAgICAgICAKLSAgICAgICAgLy8gRml4IHVwIHRoZSB2
YXJpYWJsZXMgYXQgdGFpbC4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRC
bG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKLSAgICAgICAg
ICAgIGZpeFRhaWxPcGVyYW5kKGZpcnN0QmxvY2ssIHNlY29uZEJsb2NrLCBhcmd1bWVudFRvT3Bl
cmFuZChpKSwgc3Vic3RpdHV0aW9ucyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCi0gICAg
ICAgICAgICBmaXhUYWlsT3BlcmFuZChmaXJzdEJsb2NrLCBzZWNvbmRCbG9jaywgaSwgc3Vic3Rp
dHV0aW9ucyk7Ci0gICAgICAgIAotICAgICAgICAvLyBGaXggdXAgdGhlIHJlZmVyZW5jZXMgZnJv
bSBvdXIgbmV3IHN1Y2Nlc3NvcnMuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgu
bnVtU3VjY2Vzc29ycyhmaXJzdEJsb2NrKTsgaS0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9j
ayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihmaXJzdEJs
b2NrLCBpKV0uZ2V0KCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3Vj
Y2Vzc29yLT5waGlzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogcGhpTm9k
ZSA9IHN1Y2Nlc3Nvci0+cGhpc1tqXTsKLSAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9
IHBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Ci0gICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0
aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLm9wZXJhbmQocGhpTm9kZS0+bG9j
YWwoKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBQZXJmb3JtaW5nIG9wZXJhbmQgc3Vic3RpdHV0aW9uICIs
IHN1YnN0aXR1dGlvbiwgIi5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKCFwaGlO
b2RlLT5jaGlsZDEoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMSgpID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VDaGlsZChwaGlOb2RlLT5jaGlsZHJlbi5j
aGlsZDEoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAg
ICAgIGlmICghcGhpTm9kZS0+Y2hpbGQyKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSA9PSBzdWJzdGl0dXRpb24u
b2xkQ2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQocGhpTm9k
ZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsK
LSAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMygpKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQzKCkgPT0g
c3Vic3RpdHV0aW9uLm9sZENoaWxkKQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5n
ZUNoaWxkKHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQs
IGNoYW5nZVJlZik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAg
IGZpcnN0QmxvY2stPnZhbHVlc0F0VGFpbCA9IHNlY29uZEJsb2NrLT52YWx1ZXNBdFRhaWw7CiAg
ICAgICAgIGZpcnN0QmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9IHNlY29uZEJsb2NrLT5jZmFC
cmFuY2hEaXJlY3Rpb247CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
QmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIENQU1JldGhyZWFkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
eworcHVibGljOgorICAgIENQU1JldGhyZWFkaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAg
ICA6IFBoYXNlKGdyYXBoLCAiQ1BTIHJldGhyZWFkaW5nIikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJl
YWRlZENQUykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZy
ZWVVbm5lY2Vzc2FyeU5vZGVzKCk7CisgICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tz
KCk7CisgICAgICAgIHByb3BhZ2F0ZVBoaXMoKTsKKyAgICAgICAgbV9ncmFwaC5jb2xsZWN0R2Fy
YmFnZSgpOworICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIAorICAgIHZvaWQg
ZnJlZVVubmVjZXNzYXJ5Tm9kZXMoKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAg
CisgICAgICAgICAgICB1bnNpZ25lZCBmcm9tSW5kZXggPSAwOworICAgICAgICAgICAgdW5zaWdu
ZWQgdG9JbmRleCA9IDA7CisgICAgICAgICAgICB3aGlsZSAoZnJvbUluZGV4IDwgYmxvY2stPnNp
emUoKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoZnJvbUluZGV4
KyspOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAg
ICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2Rl
LT5jaGlsZDEoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLT5vcCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50Ogor
ICAgICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbUxvY2FsKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS0+aGFzUmVzdWx0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBOb3A6CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2RlLT5yZXBs
YWNlbWVudCA9IDA7IC8vIFJlc2V0IHRoZSByZXBsYWNlbWVudCBzaW5jZSB0aGUgbmV4dCBwaGFz
ZSB3aWxsIHVzZSBpdC4KKyAgICAgICAgICAgICAgICBibG9jay0+YXQodG9JbmRleCsrKSA9IG5v
ZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBibG9jay0+cmVzaXplKHRvSW5kZXgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2st
PnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYWxs
b2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgICAgIGJsb2NrLT5w
aGlzLnJlc2l6ZSgwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxPcGVy
YW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICB2b2lkIGNsZWFyVmFyaWFibGVzQXRIZWFkQW5kVGFp
bCgpCisgICAgeworICAgICAgICBBU1NFUlQoCisgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJs
ZXNBdEhlYWQuc2l6ZUZvcjxvcGVyYW5kS2luZD4oKQorICAgICAgICAgICAgPT0gbV9ibG9jay0+
dmFyaWFibGVzQXRUYWlsLnNpemVGb3I8b3BlcmFuZEtpbmQ+KCkpOworICAgICAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemVGb3I8b3Bl
cmFuZEtpbmQ+KCk7IGktLTspIHsKKyAgICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5hdEZvcjxvcGVyYW5kS2luZD4oaSkgPSAwOworICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRLaW5kPihpKSA9IDA7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgTm9kZSogYWRkUGhpU2lsZW50bHkoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IENv
ZGVPcmlnaW4mIGNvZGVPcmlnaW4sIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCisgICAg
eworICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoRG9udFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoaSwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxl
KSk7CisgICAgICAgIGJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBOb2RlKiBhZGRQaGkoQmFzaWNCbG9jayogYmxvY2ss
IGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUpCisgICAgeworICAgICAgICBOb2RlKiByZXN1bHQgPSBhZGRQaGlTaWxlbnRseShibG9jaywg
Y29kZU9yaWdpbiwgdmFyaWFibGUpOworICAgICAgICBtX3BoaVN0YWNrLmFwcGVuZChQaGlTdGFj
a0VudHJ5KGJsb2NrLCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgTm9kZSogYWRkUGhpKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRkUGhpKG1f
YmxvY2ssIGNvZGVPcmlnaW4sIHZhcmlhYmxlKTsKKyAgICB9CisgICAgCisgICAgTm9kZSogYWRk
UGhpKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRkUGhpKG5vZGUtPmNvZGVP
cmlnaW4sIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjYW5vbmljYWxpemVHZXRMb2NhbChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgIGlmIChOb2RlKiBvdGhlck5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc3dpdGNoIChvdGhlck5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRmx1
c2g6CisgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICBvdGhl
ck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAo
b3RoZXJOb2RlLT5vcCgpID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIGhhdmUgYSBHZXRMb2NhbCwgc28gdGhpcyBtaWdodCBhcyB3ZWxsIGJlIHRoZSBvbmUuCisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9k
ZSkpOworICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvdGhl
ck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09
IFNldEFyZ3VtZW50IHx8IG90aGVyTm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CisgICAgICAgICAg
ICBBU1NFUlQob3RoZXJOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1l
bnQpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhl
ck5vZGUpKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBub2RlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0Nh
cHR1cmVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IEdldExv
Y2FsKQorICAgICAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFy
Z3VtZW50KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJO
b2RlLT5vcCgpID09IFBoaSB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJO
b2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBLZWVwIHRoaXMgR2V0TG9jYWwgYnV0IGxpbmsgaXQgdG8gdGhlIHByaW9yIG9uZXMu
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2Rl
KSk7CisgICAgICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0g
R2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGFsbCByZWZlcmVuY2VzIHRv
IHRoaXMgR2V0TG9jYWwgd2l0aCBvdGhlck5vZGUuCisgICAgICAgICAgICAgICAgbm9kZS0+cmVw
bGFjZW1lbnQgPSBvdGhlck5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgpID09
IFNldExvY2FsKTsKKyAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gb3RoZXJOb2RlLT5j
aGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKGFkZFBoaShub2RlKSkpOwor
ICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0T3BlcmFuZEZpcnN0VGltZSh2YXJp
YWJsZS0+bG9jYWwoKSwgbm9kZSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5z
ZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBub2RlKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjYW5vbmljYWxpemVTZXRMb2NhbChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgbV9ibG9j
ay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+bG9jYWwoKSwgbm9kZSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8Tm9kZVR5cGUgbm9kZVR5cGU+CisgICAgdm9pZCBjYW5vbmljYWxp
emVGbHVzaE9yUGhhbnRvbUxvY2FsKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQo
IW5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChOb2RlKiBvdGhlck5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
c3dpdGNoIChvdGhlck5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAg
ICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Cisg
ICAgICAgICAgICAgICAgb3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NF
UlQob3RoZXJOb2RlLT5vcCgpID09IFBoaSB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwg
fHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKG5vZGVUeXBlID09IFBoYW50b21Mb2NhbCAmJiBvdGhlck5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAvLyBQaGFudG9tTG9jYWwoU2V0TG9jYWwpIGRv
ZXNuJ3QgbWFrZSBzZW5zZS4gUGhhbnRvbUxvY2FsIG1lYW5zOiBhdCB0aGlzCisgICAgICAgICAg
ICAgICAgLy8gcG9pbnQgSSBrbm93IEkgd291bGQgaGF2ZSBiZWVuIGludGVyZXN0ZWQgaW4gdGhl
IHZhbHVlIG9mIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIHB1cnBv
c2Ugb2YgT1NSLiBQaGFudG9tTG9jYWwoU2V0TG9jYWwpIG1lYW5zOiBhdCB0aGlzIHBvaW50IEkK
KyAgICAgICAgICAgICAgICAvLyBrbm93IHRoYXQgSSB3b3VsZCBoYXZlIHJlYWQgdGhlIHZhbHVl
IHdyaXR0ZW4gYnkgdGhhdCBTZXRMb2NhbC4gVGhpcyBpcworICAgICAgICAgICAgICAgIC8vIHJl
ZHVuZGFudCBhbmQgaW5lZmZpY2llbnQsIHNpbmNlIHJlYWxseSBpdCBqdXN0IG1lYW5zIHRoYXQg
d2Ugd2FudCB0bworICAgICAgICAgICAgICAgIC8vIGJlIGtlZXBpbmcgdGhlIG9wZXJhbmQgdG8g
dGhlIFNldExvY2FsIGFsaXZlLiBUaGUgU2V0TG9jYWwgbWF5IGRpZSwgYW5kCisgICAgICAgICAg
ICAgICAgLy8gd2UnbGwgYmUgZmluZSBiZWNhdXNlIE9TUiB0cmFja3MgZGVhZCBTZXRMb2NhbHMu
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gU28gd2UgdHVybiB0aGlzIGlu
dG8gYSBQaGFudG9tIG9uIHRoZSBjaGlsZCBvZiB0aGUgU2V0TG9jYWwuCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKG90aGVyTm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm90aGluZyB3cm9uZyB3aXRoIGhhdmluZyBy
ZWR1bmRhbnQgRmx1c2gncy4gSXQganVzdCBuZWVkcyB0bworICAgICAgICAgICAgLy8gYmUgbGlu
a2VkIGFwcHJvcHJpYXRlbHkuIE5vdGUgdGhhdCBpZiB0aGVyZSBoYWQgYWxyZWFkeSBiZWVuIGEg
cHJldmlvdXMKKyAgICAgICAgICAgIC8vIHVzZSBhdCB0YWlsIHRoZW4gd2UgZG9uJ3Qgb3ZlcnJp
ZGUgaXQuIEl0J3MgZmluZSBmb3IgdmFyaWFibGVzQXRUYWlsIHRvCisgICAgICAgICAgICAvLyBv
bWl0IEZsdXNoZXMgYW5kIFBoYW50b21Mb2NhbHMuIE9uIHRoZSBvdGhlciBoYW5kLCBoYXZpbmcg
aXQgcmVmZXIgdG8gYQorICAgICAgICAgICAgLy8gRmx1c2ggb3IgYSBQaGFudG9tTG9jYWwgaWYg
anVzdCBiZWZvcmUgaXQgdGhlIGxhc3QgdXNlIHdhcyBhIEdldExvY2FsIHdvdWxkCisgICAgICAg
ICAgICAvLyBzZXJpb3VzbHkgY29uZnVzZSB0aGUgQ0ZBLgorICAgICAgICAgICAgbm9kZS0+Y2hp
bGRyZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2RlKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdl
KGFkZFBoaShub2RlKSkpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0T3Bl
cmFuZEZpcnN0VGltZSh2YXJpYWJsZS0+bG9jYWwoKSwgbm9kZSk7CisgICAgICAgIG1fYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpLCBub2RlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjYW5vbmljYWxpemVTZXRBcmd1bWVudChOb2RlKiBub2RlKQor
ICAgIHsKKyAgICAgICAgaW50IGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgbV9ibG9j
ay0+dmFyaWFibGVzQXRIZWFkLnNldE9wZXJhbmRGaXJzdFRpbWUobG9jYWwsIG5vZGUpOworICAg
ICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZEZpcnN0VGltZShsb2NhbCwg
bm9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9jaygp
CisgICAgeworICAgICAgICBpZiAoIW1fYmxvY2spCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIEFTU0VSVChtX2Jsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgIAorICAgICAgICBjbGVh
clZhcmlhYmxlc0F0SGVhZEFuZFRhaWw8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBjbGVh
clZhcmlhYmxlc0F0SGVhZEFuZFRhaWw8TG9jYWxPcGVyYW5kPigpOworICAgICAgICAKKyAgICAg
ICAgLy8gQXNzdW1lcyB0aGF0IGFsbCBwaGkgcmVmZXJlbmNlcyBoYXZlIGJlZW4gcmVtb3ZlZC4g
QXNzdW1lcyB0aGF0IHRoaW5ncyB0aGF0CisgICAgICAgIC8vIHNob3VsZCBiZSBsaXZlIGhhdmUg
YSBub24temVybyByZWYgY291bnQsIGJ1dCBkb2Vzbid0IGFzc3VtZSB0aGF0IHRoZSByZWYKKyAg
ICAgICAgLy8gY291bnRzIGFyZSBjb3JyZWN0IGJleW9uZCB0aGF0IChtb3JlIGZvcm1hbGx5ICEh
bG9naWNhbFJlZkNvdW50ID09ICEhYWN0dWFsUmVmQ291bnQKKyAgICAgICAgLy8gYnV0IG5vdCBs
b2dpY2FsUmVmQ291bnQgPT0gYWN0dWFsUmVmQ291bnQpLiBBc3N1bWVzIHRoYXQgaXQgY2FuIGJy
ZWFrIHJlZgorICAgICAgICAvLyBjb3VudHMuCisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKytub2RlSW5k
ZXgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9k
ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBydWxlcyBmb3IgdGhyZWFkZWQg
Q1BTIGZvcm06CisgICAgICAgICAgICAvLyAKKyAgICAgICAgICAgIC8vIEhlYWQgdmFyaWFibGU6
IHRoZSBmaXJzdCB0aGluZyB0aGF0IGhhcHBlbmVkIHRvIHRoZSB2YXJpYWJsZSBpbiB0aGUgYmxv
Y2suCisgICAgICAgICAgICAvLyBJdCBtYXkgYmUgYSBGbHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRM
b2NhbCwgU2V0TG9jYWwsIG9yIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8gU2V0QXJndW1l
bnQgbWF5IG9ubHkgYXBwZWFyIGluIHRoZSByb290IGJsb2NrLgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIFRhaWwgdmFyaWFibGU6IHRoZSBsYXN0IHRoaW5nIHRoYXQgaGFwcGVuZWQg
dG8gdGhlIHZhcmlhYmxlIGluIHRoZSBibG9jay4KKyAgICAgICAgICAgIC8vIEl0IG1heSBiZSBh
IEZsdXNoLCBQaGFudG9tTG9jYWwsIEdldExvY2FsLCBTZXRMb2NhbCwgb3IgU2V0QXJndW1lbnQu
CisgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCBtYXkgb25seSBhcHBlYXIgaW4gdGhlIHJvb3Qg
YmxvY2suIE5vdGUgdGhhdCBpZiB0aGVyZSBldmVyCisgICAgICAgICAgICAvLyB3YXMgYSBHZXRM
b2NhbCB0byB0aGUgdmFyaWFibGUsIGFuZCBpdCB3YXMgZm9sbG93ZWQgYnkgUGhhbnRvbUxvY2Fs
cyBhbmQKKyAgICAgICAgICAgIC8vIEZsdXNoZXMgYnV0IG5vdCBTZXRMb2NhbHMsIHRoZW4gdGhl
IHRhaWwgdmFyaWFibGUgd2lsbCBiZSB0aGUgR2V0TG9jYWwuCisgICAgICAgICAgICAvLyBUaGlz
IHJlZmxlY3RzIHRoZSBmYWN0IHRoYXQgeW91IG9ubHkgY2FyZSB0aGF0IHRoZSB0YWlsIHZhcmlh
YmxlIGlzIGEKKyAgICAgICAgICAgIC8vIEZsdXNoIG9yIFBoYW50b21Mb2NhbCBpZiBub3RoaW5n
IGVsc2UgaW50ZXJlc3RpbmcgaGFwcGVuZWQuCisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gQ2hpbGQgb2YgR2V0TG9jYWw6IHRoZSBvcGVyYXRpb24gdGhhdCB0aGUgR2V0TG9jYWwga2Vl
cHMgYWxpdmUuIEZvcgorICAgICAgICAgICAgLy8gdW5jYXB0dXJlZCBsb2NhbHMsIGl0IG1heSBi
ZSBhIFBoaSBmcm9tIHRoZSBjdXJyZW50IGJsb2NrLiBGb3IgYXJndW1lbnRzLAorICAgICAgICAg
ICAgLy8gaXQgbWF5IGJlIGEgU2V0QXJndW1lbnQuIEZvciBjYXB0dXJlZCBsb2NhbHMgYW5kIGFy
Z3VtZW50cyBpdCBtYXkgYWxzbyBiZQorICAgICAgICAgICAgLy8gYSBTZXRMb2NhbC4KKyAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAvLyBDaGlsZCBvZiBTZXRMb2NhbDogbXVzdCBiZSBhIHZh
bHVlIHByb2R1Y2luZyBub2RlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENoaWxk
IG9mIEZsdXNoOiBpdCBtYXkgYmUgYSBQaGkgZnJvbSB0aGUgY3VycmVudCBibG9jayBvciBhIFNl
dExvY2FsLiBGb3IKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBpdCBtYXkgYWxzbyBiZSBhIFNl
dEFyZ3VtZW50LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENoaWxkIG9mIFBoYW50
b21Mb2NhbDogaXQgbWF5IGJlIGEgUGhpIGZyb20gdGhlIGN1cnJlbnQgYmxvY2suIEZvcgorICAg
ICAgICAgICAgLy8gYXJndW1lbnRzIGl0IG1heSBhbHNvIGJlIGEgU2V0QXJndW1lbnQuCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2hpbGRyZW4gb2YgUGhpOiBvdGhlciBQaGlzIGlu
IHRoZSBzYW1lIGJhc2ljIGJsb2NrLCBvciBhbnkgb2YgdGhlCisgICAgICAgICAgICAvLyBmb2xs
b3dpbmcgZnJvbSBmcm9tIHByZWRlY2Vzc29yIGJsb2NrczogU2V0TG9jYWwsIFBoaSwgb3IgU2V0
QXJndW1lbnQuCisgICAgICAgICAgICAvLyBUaGVzZSBhcmUgY29tcHV0ZWQgYnkgbG9va2luZyBh
dCB0aGUgdGFpbCB2YXJpYWJsZXMgb2YgdGhlIHByZWRlY2Vzc29yCisgICAgICAgICAgICAvLyBi
bG9ja3MgYW5kIGVpdGhlciB1c2luZyBpdCBkaXJlY3RseSAoaWYgaXQncyBhIFNldExvY2FsLCBQ
aGksIG9yCisgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCkgb3IgbG9hZGluZyB0aGF0IG5vZGVz
IGNoaWxkIChpZiBpdCdzIGEgR2V0TG9jYWwsIFBoYW5vbUxvY2FsLAorICAgICAgICAgICAgLy8g
b3IgRmx1c2ggLSBhbGwgb2YgdGhlc2Ugd2lsbCBoYXZlIGNoaWxkcmVuIHRoYXQgYXJlIFNldExv
Y2FsLCBQaGksIG9yCisgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCkuCisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRM
b2NhbDoKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbChub2RlKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgU2V0
TG9jYWw6CisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXplU2V0TG9jYWwobm9kZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZs
dXNoOgorICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWw8Rmx1
c2g+KG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXpl
Rmx1c2hPclBoYW50b21Mb2NhbDxQaGFudG9tPihub2RlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAg
ICAgICAgICAgICAgY2Fub25pY2FsaXplU2V0QXJndW1lbnQobm9kZSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHZvaWQgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MoKQorICAgIHsKKyAgICAgICAgZm9y
IChtX2Jsb2NrSW5kZXggPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgbV9ibG9ja0luZGV4LS07
KSB7CisgICAgICAgICAgICBtX2Jsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2Jsb2NrSW5kZXhd
LmdldCgpOworICAgICAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9jaygpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFnYXRlUGhpcygpCisgICAgeworICAgICAg
ICAvLyBFbnN1cmUgdGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KKyAg
ICAgICAgbV9ibG9jayA9IDA7CisgICAgICAgIG1fYmxvY2tJbmRleCA9IE5vQmxvY2s7CisgICAg
ICAgIAorICAgICAgICB3aGlsZSAoIW1fcGhpU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBQaGlTdGFja0VudHJ5IGVudHJ5ID0gbV9waGlTdGFjay5sYXN0KCk7CisgICAgICAgICAgICBt
X3BoaVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBlbnRyeS5tX2Jsb2NrOworICAgICAgICAgICAgUHJlZGVjZXNzb3JMaXN0
JiBwcmVkZWNlc3NvcnMgPSBibG9jay0+bV9wcmVkZWNlc3NvcnM7CisgICAgICAgICAgICBOb2Rl
KiBjdXJyZW50UGhpID0gZW50cnkubV9waGk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gY3VycmVudFBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICBpbnQgb3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gcHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgeworICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgTm9kZSogdmFyaWFibGVJblByZXZpb3VzID0gcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJs
ZUluUHJldmlvdXMpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJblByZXZpb3VzID0g
YWRkUGhpKHByZWRlY2Vzc29yQmxvY2ssIGN1cnJlbnRQaGktPmNvZGVPcmlnaW4sIHZhcmlhYmxl
KTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWls
LnNldE9wZXJhbmRGaXJzdFRpbWUob3BlcmFuZCwgdmFyaWFibGVJblByZXZpb3VzKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldE9wZXJh
bmRGaXJzdFRpbWUob3BlcmFuZCwgdmFyaWFibGVJblByZXZpb3VzKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlSW5QcmV2aW91
cy0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBG
bHVzaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZUluUHJldmlvdXMt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlSW5QcmV2aW91cy0+Y2hpbGQxKCktPnZh
cmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5Q
cmV2aW91cyA9IHZhcmlhYmxlSW5QcmV2aW91cy0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQoCisg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5QcmV2aW91cy0+b3AoKSA9PSBTZXRMb2NhbAor
ICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUluUHJldmlvdXMtPm9wKCkgPT0gUGhpCisg
ICAgICAgICAgICAgICAgICAgIHx8IHZhcmlhYmxlSW5QcmV2aW91cy0+b3AoKSA9PSBTZXRBcmd1
bWVudCk7CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBkaWRTZXRDaGlsZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSAwOyBjaGlsZElk
eCA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsrY2hpbGRJZHgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGN1cnJlbnRQaGktPmNoaWxkcmVuLmNoaWxkKGNoaWxkSWR4KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGhpLT5j
aGlsZHJlbi5zZXRDaGlsZChjaGlsZElkeCwgRWRnZSh2YXJpYWJsZUluUHJldmlvdXMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZGlkU2V0Q2hpbGQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRpZFNldENo
aWxkKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBOb2RlKiBuZXdQaGkgPSBhZGRQaGlTaWxlbnRseShibG9jaywgY3VycmVu
dFBoaS0+Y29kZU9yaWdpbiwgdmFyaWFibGUpOworICAgICAgICAgICAgICAgIG5ld1BoaS0+Y2hp
bGRyZW4gPSBjdXJyZW50UGhpLT5jaGlsZHJlbjsKKyAgICAgICAgICAgICAgICBjdXJyZW50UGhp
LT5jaGlsZHJlbi5pbml0aWFsaXplKG5ld1BoaSwgdmFyaWFibGVJblByZXZpb3VzLCAwKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgUGhpU3RhY2tF
bnRyeSB7CisgICAgICAgIFBoaVN0YWNrRW50cnkoQmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIHBo
aSkKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgICAgICwgbV9waGkocGhp
KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIG1f
YmxvY2s7CisgICAgICAgIE5vZGUqIG1fcGhpOworICAgIH07CisgICAgCisgICAgQmxvY2tJbmRl
eCBtX2Jsb2NrSW5kZXg7CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBWZWN0b3I8UGhp
U3RhY2tFbnRyeSwgNjQ+IG1fcGhpU3RhY2s7Cit9OworCitib29sIHBlcmZvcm1DUFNSZXRocmVh
ZGluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBDUFMgUmV0aHJlYWRpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8Q1BTUmV0
aHJlYWRpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0NQU1JldGhyZWFkaW5nUGhhc2VfaAorI2RlZmluZSBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgR3JhcGg7CisKKy8vIENQUyBSZXRocmVhZGluZzoKKy8vCisvLyBUYWtlcyBhIGdyYXBo
IGluIHdoaWNoIHRoZXJlIGFyZSBhcmJpdHJhcnkgR2V0TG9jYWxzL1NldExvY2FscyB3aXRoIG5v
IGNvbm5lY3Rpb25zCisvLyBiZXR3ZWVuIHRoZW0uIFJlbW92ZXMgcmVkdW5kYW50IG9uZXMgaW4g
dGhlIGNhc2Ugb2YgdW5jYXB0dXJlZCB2YXJpYWJsZXMuIENvbm5lY3RzCisvLyBhbGwgb2YgdGhl
bSB3aXRoIFBoaSBmdW5jdGlvbnMgdG8gcmVwcmVzZW50IGxpdmUgcmFuZ2VzLgorCitib29sIHBl
cmZvcm1DUFNSZXRocmVhZGluZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NQU1JldGhyZWFk
aW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDkgQEAgcHVibGljOgogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgKytibG9jaykKICAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NTRShtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrXS5nZXQoKSk7CiAgICAgICAgIAorICAgICAgICBpZiAobV9jaGFuZ2VkKQorICAg
ICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBMb2FkU3RvcmU7CisgICAgICAgIAogICAgICAgICBy
ZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0KICAgICAKQEAgLTk3NCwyNyArOTc3LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwZXJmb3Jt
U3Vic3RpdHV0aW9uKEVkZ2UmIGNoaWxkLCBib29sIGFkZFJlZiA9IHRydWUpCi0gICAgewotICAg
ICAgICAvLyBDaGVjayBpZiB0aGlzIG9wZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgotICAgICAg
ICBpZiAoIWNoaWxkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgLy8g
Q2hlY2sgaWYgdGhlcmUgaXMgYW55IHJlcGxhY2VtZW50LgotICAgICAgICBOb2RlKiByZXBsYWNl
bWVudCA9IGNoaWxkLT5yZXBsYWNlbWVudDsKLSAgICAgICAgaWYgKCFyZXBsYWNlbWVudCkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGNoaWxkLnNldE5vZGUocmVwbGFj
ZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlcmUgaXMgZGVmaW5pdGVseSBhIHJlcGxh
Y2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQgZG9lcyBub3QKLSAgICAgICAgLy8g
aGF2ZSBhIHJlcGxhY2VtZW50LgotICAgICAgICBBU1NFUlQoIWNoaWxkLT5yZXBsYWNlbWVudCk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoYWRkUmVmKQotICAgICAgICAgICAgbV9ncmFwaC5yZWYo
Y2hpbGQpOwotICAgIH0KLSAgICAKICAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9t
Q2hpbGRyZW4oTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09
IFBoYW50b20pOwpAQCAtMTA3MiwyMSArMTA1NCwxMiBAQCBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgcGVyZm9ybU5vZGVDU0UoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGJvb2wgc2hvdWxk
R2VuZXJhdGUgPSBub2RlLT5zaG91bGRHZW5lcmF0ZSgpOwotCi0gICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgp
ICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKLSAgICAgICAgICAgICAgICBwZXJm
b3JtU3Vic3RpdHV0aW9uKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIHNob3Vs
ZEdlbmVyYXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0
dXRpb24obm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHNob3VsZEdl
bmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS0+Y2hpbGRyZW4u
Y2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgfQorICAgICAgICBtX2dyYXBoLnBl
cmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CiAgICAgICAgIAogICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBTZXRMb2NhbCkKICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5v
ZGVSZWxldmFudFRvT1NSKTsKICAgICAgICAgCi0gICAgICAgIGlmICghc2hvdWxkR2VuZXJhdGUp
CisgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpA
QCAtMTE2MiwyNiArMTEzNSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgTm9kZSogcGhpID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgaWYgKCFzZXRSZXBsYWNlbWVudChw
b3NzaWJsZVJlcGxhY2VtZW50KSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IC8vIElmIHRoZSBHZXRMb2NhbCB3ZSByZXBsYWNlZCB1c2VkIHRvIHJlZmVyIHRvIGEgU2V0TG9j
YWwsIHRoZW4gaXQgbm93Ci0gICAgICAgICAgICAvLyBzaG91bGQgcmVmZXIgdG8gdGhlIGNoaWxk
IG9mIHRoZSBTZXRMb2NhbCBpbnN0ZWFkLgotICAgICAgICAgICAgaWYgKHBoaS0+b3AoKSA9PSBT
ZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKSA9PSBwaGkp
OwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSwgcGhpLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBOb2RlKiBv
bGRUYWlsID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKAotICAgICAg
ICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7Ci0gICAgICAgICAgICBpZiAo
b2xkVGFpbCA9PSBub2RlKSB7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkgPQotICAgICAg
ICAgICAgICAgICAgICByZWxldmFudExvY2FsT3A7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgLy8gTWFpbnRhaW4gZ3JhcGggaW50ZWdyaXR5OiBzaW5jZSB3ZSdyZSByZXBsYWNp
bmcgYSBHZXRMb2NhbCB3aXRoIGEgR2V0TG9jYWxVbmxpbmtlZCwKLSAgICAgICAgICAgICAgICAv
LyBtYWtlIHN1cmUgdGhhdCB0aGUgR2V0TG9jYWxVbmxpbmtlZCBpcyBub3cgbGlua2VkLgotICAg
ICAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtl
ZCkgewotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPnNldE9wKEdldExvY2Fs
KTsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wLT5jaGlsZHJlbi5jaGlsZDEo
KSA9IEVkZ2UocGhpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYocGhpKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJl
YWQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgd2UgcmVwbGFjZSBhIEdldExv
Y2FsIHdpdGggYSBHZXRMb2NhbFVubGlua2VkLCB0aGVuIHR1cm4gdGhlIEdldExvY2FsVW5saW5r
ZWQKKyAgICAgICAgICAgIC8vIGludG8gYSBHZXRMb2NhbC4KKyAgICAgICAgICAgIGlmIChyZWxl
dmFudExvY2FsT3AtPm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtlZCkgeworICAgICAgICAgICAgICAg
IHJlbGV2YW50TG9jYWxPcC0+Y29udmVydFRvR2V0TG9jYWwodmFyaWFibGVBY2Nlc3NEYXRhLCBw
aGkpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHBoaSk7CiAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtMTIzNSw5ICsxMTk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZ3JhcGgu
Y2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNo
aWxkMSgpID0gRWRnZShkYXRhTm9kZSk7CiAgICAgICAgICAgICBtX2dyYXBoLnJlZihkYXRhTm9k
ZSk7Ci0gICAgICAgICAgICBOb2RlKiBvbGRUYWlsID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKLSAgICAgICAgICAgIGlmIChvbGRUYWlsID09IG5vZGUp
Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KGxvY2FsKSA9IHJlcGxhY2VtZW50OworICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwog
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyMyw2MCArMzIzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewotICAgICAgICAgICAgICAgIE5vZGUqIHByZXZpb3Vz
TG9jYWxBY2Nlc3MgPSAwOwotICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm9kZQotICAgICAgICAgICAgICAgICAgICAm
JiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
V2UgZXhwZWN0IHRoaXMgdG8gYmUgdGhlIGNvbW1vbiBjYXNlLgotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoYmxvY2stPmlzSW5QaGlzKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwotICAgICAg
ICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgp
OwotICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmRleEluQmxvY2sgPiAwKTsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gTXVzdCBzZWFyY2ggZm9yIHRoZSBwcmV2aW91cyBhY2Nlc3MgdG8g
dGhpcyBsb2NhbC4KLSAgICAgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHN1YkluZGV4
SW5CbG9jayA9IGluZGV4SW5CbG9jazsgc3ViSW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBzdWJOb2RlID0gYmxvY2stPmF0KHN1YkluZGV4SW5CbG9jayk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Yk5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXN1Yk5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN1Yk5vZGUtPmxvY2FsKCkgIT0gbm9kZS0+bG9jYWwoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0d28gbXVz
dCBoYXZlIGJlZW4gdW5pZmllZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdWJO
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gc3ViTm9kZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNMb2NhbEFjY2VzcykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIGFjY2VzcyBtdXN0IGhhdmUgYmVlbiBhIFBo
aS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBwaGlJbmRleEluQmxv
Y2sgPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4SW5CbG9jay0tOykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBibG9jay0+cGhpc1twaGlJbmRleElu
QmxvY2tdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmxvY2FsKCkgIT0gbm9kZS0+
bG9jYWwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHR3byBtdXN0IGhhdmUgYmVlbiB1bmlmaWVk
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwaGlOb2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IHBoaU5vZGU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJldmlvdXNMb2NhbEFjY2Vzcyk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiB0YWlsTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAodGFpbE5v
ZGUgPT0gbm9kZSkKLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gcHJldmlvdXNMb2NhbEFjY2VzczsKLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgICAg
ICAgICAgICAgdGFpbE5vZGUtPm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgICAgICAgICAg
IHx8IHRhaWxOb2RlLT5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICB8
fCBpc0NhcHR1cmVkQXRPckFmdGVyKGJsb2NrLCBpbmRleEluQmxvY2ssIG5vZGUtPmxvY2FsKCkp
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAg
ICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRyZW47CiAgICAgICAgICAg
ICAgICAgCkBAIC0zODQsNiArMzMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hp
bGRyZW4pOwogICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBtX3N0YXRlLnJl
c2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZp
c2lvbiAxNDEzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDEyICszNiwxNSBAQAogI2luY2x1ZGUgIkRGR0J5dGVDb2Rl
UGFyc2VyLmgiCiAjaW5jbHVkZSAiREZHQ0ZBUGhhc2UuaCIKICNpbmNsdWRlICJERkdDRkdTaW1w
bGlmaWNhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oIgog
I2luY2x1ZGUgIkRGR0NTRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuaCIKICNpbmNsdWRlICJERkdGaXh1cFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHSklUQ29tcGls
ZXIuaCIKKyNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVy
ZUNoZWNrSG9pc3RpbmdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3RlckFs
bG9jYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTEwMiw5ICsxMDUs
NiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgaWYgKCFw
YXJzZShleGVjLCBkZmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKGNv
bXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbikKLSAgICAgICAgZGZnLnByZWRpY3RBcmd1bWVu
dFR5cGVzKCk7Ci0gICAgCiAgICAgLy8gQnkgdGhpcyBwb2ludCB0aGUgREZHIGJ5dGVjb2RlIHBh
cnNlciB3aWxsIGhhdmUgcG90ZW50aWFsbHkgbXV0YXRlZCB2YXJpb3VzIHRhYmxlcwogICAgIC8v
IGluIHRoZSBDb2RlQmxvY2suIFRoaXMgaXMgYSBnb29kIHRpbWUgdG8gcGVyZm9ybSBhbiBlYXJs
eSBzaHJpbmssIHdoaWNoIGlzIG1vcmUKICAgICAvLyBwb3dlcmZ1bCB0aGFuIGEgbGF0ZSBvbmUu
IEl0J3Mgc2FmZSB0byBkbyBzbyBiZWNhdXNlIHdlIGhhdmVuJ3QgZ2VuZXJhdGVkIGFueSBjb2Rl
CkBAIC0xMTMsMjcgKzExMyw0MiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNv
bXBpbGVNCiAKICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUo
ZGZnKTsKKyAgICAKKyAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKKyAgICBwZXJmb3Jt
VW5pZmljYXRpb24oZGZnKTsKKyAgICBwZXJmb3JtUHJlZGljdGlvbkluamVjdGlvbihkZmcpOwor
ICAgIAorICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQorICAgICAgICB2YWxpZGF0ZShkZmcp
OworICAgIAogICAgIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJm
b3JtRml4dXAoZGZnKTsKICAgICBwZXJmb3JtU3RydWN0dXJlQ2hlY2tIb2lzdGluZyhkZmcpOwor
ICAgIAogICAgIHVuc2lnbmVkIGNudCA9IDE7CiAgICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZp
eHBvaW50Tm90Q29udmVyZ2VkOwogICAgIGZvciAoOzsgKytjbnQpIHsKICAgICAgICAgaWYgKHZl
cmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgIGRhdGFMb2dGKCJERkcgYmVn
aW5uaW5nIG9wdGltaXphdGlvbiBmaXhwb2ludCBpdGVyYXRpb24gIyV1LlxuIiwgY250KTsKICAg
ICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAogICAgICAgICBwZXJmb3JtQ0ZB
KGRmZyk7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNvbnN0YW50Rm9sZGluZyhkZmcpOwog
ICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Bcmd1bWVudHNTaW1wbGlmaWNhdGlvbihkZmcpOwog
ICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihkZmcpOwogICAgICAg
ICBjaGFuZ2VkIHw9IHBlcmZvcm1DU0UoZGZnKTsKKyAgICAgICAgCiAgICAgICAgIGlmICghY2hh
bmdlZCkKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICAgICAgZGZnLnJlc2V0RXhp
dFN0YXRlcygpOwogICAgICAgICBwZXJmb3JtRml4dXAoZGZnKTsKKyAgICAgICAgcGVyZm9ybUNQ
U1JldGhyZWFkaW5nKGRmZyk7CiAgICAgfQorICAgIAogICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUg
PSBGaXhwb2ludENvbnZlcmdlZDsKICAgICBwZXJmb3JtQ1NFKGRmZyk7CisgICAgcGVyZm9ybUNQ
U1JldGhyZWFkaW5nKGRmZyk7IC8vIFRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYSBuby1vcCBzaW5j
ZSBDU0UgcmFyZWx5IGRldGhyZWFkcyB0aGUgZ3JhcGguCiAgICAgaWYgKHZlcmJvc2VDb21waWxh
dGlvbkVuYWJsZWQoKSkKICAgICAgICAgZGF0YUxvZ0YoIkRGRyBvcHRpbWl6YXRpb24gZml4cG9p
bnQgY29udmVyZ2VkIGluICV1IGl0ZXJhdGlvbnMuXG4iLCBjbnQpOwogICAgIHBlcmZvcm1WaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAgR3JhcGg6
OkdyYXBoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgICwgbV9vc3JFbnRyeUJ5dGVj
b2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICwgbV9tdXN0SGFuZGxlVmFsdWVz
KG11c3RIYW5kbGVWYWx1ZXMpCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQp
CisgICAgLCBtX2Zvcm0oTG9hZFN0b3JlKQorICAgICwgbV91bmlmaWNhdGlvblN0YXRlKExvY2Fs
bHlVbmlmaWVkKQogewogICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2spOwogfQpAQCAtMzc3LDIy
ICszNzksMjIgQEAgdm9pZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihOb2RlKiBvcCkKICAgICBET19U
T19DSElMRFJFTihvcCwgZGVyZWYpOwogfQogCi12b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRU
eXBlcygpCit2b2lkIEdyYXBoOjpkZXRocmVhZCgpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkgPj0gMSk7Ci0gICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsgKythcmcp
IHsKLSAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gbV9wcm9maWxlZEJsb2NrLT52YWx1
ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOwotICAgICAgICBpZiAoIXByb2ZpbGUpCisgICAgaWYg
KG1fZm9ybSA9PSBMb2FkU3RvcmUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgewor
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwor
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAg
ICAgICBtX2FyZ3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcm9m
aWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKSk7Ci0gICAgICAgIAotI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJBcmd1bWVu
dCBbIiwgYXJnLCAiXSBwcmVkaWN0aW9uOiAiLAotICAgICAgICAgICAgU3BlY3VsYXRpb25EdW1w
KG1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCAi
XG4iKTsKLSNlbmRpZgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBo
aXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAgICAgICAgTm9kZSogcGhpID0gYmxvY2st
PnBoaXNbcGhpSW5kZXhdOworICAgICAgICAgICAgcGhpLT5jaGlsZHJlbi5yZXNldCgpOworICAg
ICAgICB9CiAgICAgfQorICAgIAorICAgIG1fZm9ybSA9IExvYWRTdG9yZTsKIH0KIAogdm9pZCBH
cmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBC
bG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcg
KzgwLDYwIEBAIGVudW0gQWRkU3BlY3VsYXRpb25Nb2RlIHsKICAgICBTcGVjdWxhdGVJbnRlZ2Vy
QnV0QWx3YXlzV2F0Y2hPdmVyZmxvdywKICAgICBTcGVjdWxhdGVJbnRlZ2VyCiB9OworCisvLyBE
ZXNjcmliZXMgdGhlIGZvcm0geW91IGNhbiBleHBlY3QgdGhlIGVudGlyZSBncmFwaCB0byBiZSBp
bi4KK2VudW0gR3JhcGhGb3JtIHsKKyAgICAvLyBMb2FkU3RvcmUgZm9ybSBtZWFucyB0aGF0IGJh
c2ljIGJsb2NrcyBtYXkgZnJlZWx5IHVzZSBHZXRMb2NhbCwgU2V0TG9jYWwsCisgICAgLy8gR2V0
TG9jYWxVbmxpbmtlZCwgYW5kIEZsdXNoIGZvciBhY2Nlc3NpbmcgbG9jYWwgdmFyaWFibGVzIGFu
ZCBpbmRpY2F0aW5nCisgICAgLy8gd2hlcmUgdGhlaXIgbGl2ZSByYW5nZXMgb3VnaHQgdG8gYmUu
IExpdmVuZXNzIGlzIGltcGxpY2l0LCBhcyBpcyB0aGUgZGF0YQorICAgIC8vIGZsb3cgYmV0d2Vl
biBsb2NhbCBhY2Nlc3Nlcy4gRm9yIGV4YW1wbGUsIExvYWRTdG9yZSBmb3JtIGdpdmVzIG5vIGVh
c3kgd2F5CisgICAgLy8gdG8gZGV0ZXJtaW5lIHdoaWNoIFNldExvY2FsJ3MgZmxvdyBpbnQgbyBh
IEdldExvY2FsLiBBcyB3ZWxsLCBMb2FkU3RvcmUKKyAgICAvLyBmb3JtIGltcGxpZXMgbm8gcmVz
dHJpY3Rpb25zIG9uIHJlZHVuZGFuY3k6IHlvdSBjYW4gZnJlZWx5IGVtaXQgbXVsdGlwbGUKKyAg
ICAvLyBHZXRMb2NhbHMsIG9yIG11bHRpcGxlIFNldExvY2FscyAob3IgYW55IGNvbWJpbmF0aW9u
IHRoZXJlb2YpIHRvIHRoZSBzYW1lCisgICAgLy8gbG9jYWwgaW4gdGhlIHNhbWUgYmxvY2suIExv
YWRTdG9yZSBmb3JtIGRvZXMgbm90IHJlcXVpcmUgYmFzaWMgYmxvY2tzIHRvCisgICAgLy8gZGVj
bGFyZSBob3cgdGhleSBhZmZlY3Qgb3IgdXNlIGxvY2Fscywgb3RoZXIgdGhhbiBpbXBsaWNpdGx5
IGJ5IHVzaW5nCisgICAgLy8gdGhlIGxvY2FsIG9wcy4gRmluYWxseSwgTG9hZFN0b3JlIGFsbG93
cyBmbGV4aWJpbGl0eSBpbiBob3cgbGl2ZW5lc3Mgb2YKKyAgICAvLyBsb2NhbHMgaXMgZXh0ZW5k
ZWQ7IGZvciBleGFtcGxlIHlvdSBjYW4gcmVwbGFjZSBhIEdldExvY2FsIHdpdGggYSBQaGFudG9t
CisgICAgLy8gYW5kIHNvIGxvbmcgYXMgdGhlIFBoYW50b20gcmV0YWlucyB0aGUgR2V0TG9jYWwn
cyBjaGlsZHJlbiAoaS5lLiB0aGUgUGhpCisgICAgLy8gbW9zdCBsaWtlbHkpIHRoZW4gaXQgaW1w
bGllcyB0aGF0IHRoZSBsb2NhbCBpcyBzdGlsbCBsaXZlIGJ1dCB0aGF0IGl0IG5lZWQKKyAgICAv
LyBub3QgYmUgc3RvcmVkIHRvIHRoZSBzdGFjayBuZWNlc3NhcmlseS4gVGhpcyBpbXBsaWVzIHRo
YXQgUGhhbnRvbSBjYW4KKyAgICAvLyByZWZlcmVuY2Ugbm9kZXMgdGhhdCBoYXZlIG5vIHJlc3Vs
dCwgYXMgbG9uZyBhcyB0aG9zZSBub2RlcyBhcmUgdmFsaWQKKyAgICAvLyBHZXRMb2NhbCBjaGls
ZHJlbiAoaS5lLiBQaGksIFNldExvY2FsLCBTZXRBcmd1bWVudCkuCisgICAgLy8KKyAgICAvLyBM
b2FkU3RvcmUgZm9ybSBhbHNvIGltcGxpZXMgdGhhdCBQaGlzIHRoZW1zZWx2ZXMgY2FuIGhhdmUg
YXJiaXRyYXJ5CisgICAgLy8gY2hpbGRyZW4uIFBoaSBjaGlsZHJlbiBjb3VsZCBldmVuIGJlIGRh
bmdsaW5nLCBhbmQgc2hvdWxkIG5vdCBiZSByZWxpZWQKKyAgICAvLyB1cG9uLgorICAgIC8vCisg
ICAgLy8gTG9hZFN0b3JlIGZvcm0gaXMgc3VpdGFibGUgZm9yIENGRyB0cmFuc2Zvcm1hdGlvbnMs
IGFzIHdlbGwgYXMgc3RyZW5ndGgKKyAgICAvLyByZWR1Y3Rpb24sIGZvbGRpbmcsIGFuZCBDU0Uu
CisgICAgTG9hZFN0b3JlLAorICAgIAorICAgIC8vIFRocmVhZGVkQ1BTIGZvcm0gbWVhbnMgdGhh
dCBiYXNpYyBibG9ja3MgbGlzdCB1cC1mcm9udCB3aGljaCBsb2NhbHMgdGhleQorICAgIC8vIGV4
cGVjdCB0byBiZSBsaXZlIGF0IHRoZSBoZWFkLCBhbmQgd2hpY2ggbG9jYWxzIHRoZXkgbWFrZSBh
dmFpbGFibGUgYXQgdGhlCisgICAgLy8gdGFpbC4gVGhyZWFkZWRDUFMgZm9ybSBhbHNvIGltcGxp
ZXMgdGhhdDoKKyAgICAvLworICAgIC8vIC0gR2V0TG9jYWxzIGFuZCBTZXRMb2NhbHMgdG8gdW5j
YXB0dXJlZCB2YXJpYWJsZXMgYXJlIG5vdCByZWR1bmRhbnQgd2l0aGluCisgICAgLy8gICBhIGJh
c2ljIGJsb2NrLgorICAgIC8vCisgICAgLy8gLSBBbGwgR2V0TG9jYWxzIGFuZCBGbHVzaGVzIGFy
ZSBsaW5rZWQgZGlyZWN0bHkgdG8gdGhlIGxhc3QgYWNjZXNzIHBvaW50CisgICAgLy8gICBvZiB0
aGUgdmFyaWFibGUsIHdoaWNoIG11c3Qgbm90IGJlIGFub3RoZXIgR2V0TG9jYWwgaWYgdGhlIHZh
cmlhYmxlIGlzCisgICAgLy8gICB1bmNhcHR1cmVkLgorICAgIC8vCisgICAgLy8gLSBQaGFudG9t
KFBoaSkgaXMgbm90IGxlZ2FsLCBidXQgUGhhbnRvbUxvY2FsIGlzLgorICAgIC8vCisgICAgLy8g
VGhyZWFkZWRDUFMgZm9ybSBpcyBzdWl0YWJsZSBmb3IgZGF0YSBmbG93IGFuYWx5c2lzIChDRkEs
IHByZWRpY3Rpb24KKyAgICAvLyBwcm9wYWdhdGlvbiksIHJlZ2lzdGVyIGFsbG9jYXRpb24sIGFu
ZCBjb2RlIGdlbmVyYXRpb24uCisgICAgVGhyZWFkZWRDUFMKK307CisKKy8vIERlc2NyaWJlcyB0
aGUgc3RhdGUgb2YgdGhlIFVuaW9uRmluZCBzdHJ1Y3R1cmUgb2YgVmFyaWFibGVBY2Nlc3NEYXRh
J3MuCitlbnVtIFVuaWZpY2F0aW9uU3RhdGUgeworICAgIC8vIEJhc2ljQmxvY2stbG9jYWwgYWNj
ZXNzZXMgdG8gdmFyaWFibGVzIGFyZSBhcHByb3ByaWF0ZWx5IHVuaWZpZWQgd2l0aCBlYWNoIG90
aGVyLgorICAgIExvY2FsbHlVbmlmaWVkLAogICAgIAorICAgIC8vIFVuaWZpY2F0aW9uIGhhcyBi
ZWVuIHBlcmZvcm1lZCBnbG9iYWxseS4KKyAgICBHbG9iYWxseVVuaWZpZWQKK307CiAKIC8vCiAv
LyA9PT0gR3JhcGggPT09CkBAIC0xNjcsNiArMjIwLDQwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNs
ZWFyQW5kRGVyZWZDaGlsZDIoTm9kZSogbm9kZSkgeyBjbGVhckFuZERlcmVmQ2hpbGQobm9kZSwg
MSk7IH0KICAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDMoTm9kZSogbm9kZSkgeyBjbGVhckFu
ZERlcmVmQ2hpbGQobm9kZSwgMik7IH0KICAgICAKKyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRp
b24oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpOworICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmly
c3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxk
cmVuKCk7IGNoaWxkSWR4KyspCisgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZv
ckVkZ2UobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIHNob3VsZEdlbmVyYXRlKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUt
PmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3Jt
U3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2VuZXJh
dGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRy
ZW4uY2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKEVkZ2UmIGNoaWxkLCBib29sIGFkZFJl
ZikKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1
bnVzZWQuCisgICAgICAgIGlmICghY2hpbGQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCisgICAgICAg
IE5vZGUqIHJlcGxhY2VtZW50ID0gY2hpbGQtPnJlcGxhY2VtZW50OworICAgICAgICBpZiAoIXJl
cGxhY2VtZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgY2hpbGQu
c2V0Tm9kZShyZXBsYWNlbWVudCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGVyZSBpcyBkZWZp
bml0ZWx5IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBkb2VzIG5v
dAorICAgICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCisgICAgICAgIEFTU0VSVCghY2hpbGQt
PnJlcGxhY2VtZW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChhZGRSZWYpCisgICAgICAgICAg
ICByZWYoY2hpbGQpOworICAgIH0KKyAgICAKICNkZWZpbmUgREZHX0RFRklORV9BRERfTk9ERSh0
ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2
YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCiAgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1w
bGF0ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBS
ZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0Nv
bW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCkBAIC0xODMsNiArMjcwLDggQEAgcHVibGljOgog
ICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FERF9OT0RFKQog
I3VuZGVmIERGR19ERUZJTkVfQUREX05PREUKIAorICAgIHZvaWQgZGV0aHJlYWQoKTsKKyAgICAK
ICAgICAvLyBDYWxsIHRoaXMgaWYgeW91J3ZlIG1vZGlmaWVkIHRoZSByZWZlcmVuY2UgY291bnRz
IG9mIG5vZGVzIHRoYXQgZGVhbCB3aXRoCiAgICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGlzIGlz
IG5lY2Vzc2FyeSBiZWNhdXNlIGxvY2FsIHZhcmlhYmxlIHJlZmVyZW5jZXMgY2FuIGZvcm0KICAg
ICAvLyBjeWNsZXMsIGFuZCBoZW5jZSByZWZlcmVuY2UgY291bnRpbmcgaXMgbm90IGVub3VnaC4g
VGhpcyB3aWxsIHJlc2V0IHRoZQpAQCAtMzUxLDggKzQ0MCw2IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBjb25zdCBjaGFyICpvcE5hbWUoTm9kZVR5cGUpOwogICAgIAotICAgIHZvaWQgcHJlZGlj
dEFyZ3VtZW50VHlwZXMoKTsKLSAgICAKICAgICBTdHJ1Y3R1cmVTZXQqIGFkZFN0cnVjdHVyZVNl
dChjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmVTZXQuc2l6ZSgpKTsKQEAgLTcxOCw2ICs4MDUsOCBAQCBwdWJsaWM6CiAgICAg
T3BlcmFuZHM8SlNWYWx1ZT4gbV9tdXN0SGFuZGxlVmFsdWVzOwogICAgIAogICAgIE9wdGltaXph
dGlvbkZpeHBvaW50U3RhdGUgbV9maXhwb2ludFN0YXRlOworICAgIEdyYXBoRm9ybSBtX2Zvcm07
CisgICAgVW5pZmljYXRpb25TdGF0ZSBtX3VuaWZpY2F0aW9uU3RhdGU7CiBwcml2YXRlOgogICAg
IAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmts
aXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE0MTMwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDQsNiArMzA0LDIyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNs
b2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29udmVydFRvUGhhbnRvbUxvY2Fs
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IFBoYW50b20gJiYgKGNoaWxkMSgpLT5v
cCgpID09IFBoaSB8fCBjaGlsZDEoKS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBjaGlsZDEoKS0+b3Ao
KSA9PSBTZXRBcmd1bWVudCkpOworICAgICAgICBtX29wID0gUGhhbnRvbUxvY2FsOworICAgICAg
ICBtX29wSW5mbyA9IGNoaWxkMSgpLT5tX29wSW5mbzsgLy8gQ29weSB0aGUgdmFyaWFibGVBY2Nl
c3NEYXRhLgorICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoRWRnZSgpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjb252ZXJ0VG9HZXRMb2NhbChWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
LCBOb2RlKiBwaGkpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRMb2NhbFVubGlu
a2VkKTsKKyAgICAgICAgbV9vcCA9IEdldExvY2FsOworICAgICAgICBtX29wSW5mbyA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KHZhcmlhYmxlKTsKKyAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQx
KEVkZ2UocGhpKSk7CisgICAgfQorICAgIAogICAgIEpTQ2VsbCogd2Vha0NvbnN0YW50KCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChvcCgpID09IFdlYWtKU0NvbnN0YW50KTsKQEAgLTM1OCw2ICsz
NzQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICBjYXNlIFNl
dEFyZ3VtZW50OgogICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOb3AsIE5vZGVEb2VzTm90RXhpdCkgXAogICAg
IG1hY3JvKFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwKICAgICBt
YWNybyhGbHVzaCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAorICAgIG1h
Y3JvKFBoYW50b21Mb2NhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAog
ICAgIFwKICAgICAvKiBHZXQgdGhlIHZhbHVlIG9mIGEgbG9jYWwgdmFyaWFibGUsIHdpdGhvdXQg
bGlua2luZyBpbnRvIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgKi9cCiAgICAgLyogbmV0d29yay4g
VGhpcyBpcyBvbmx5IHZhbGlkIGZvciB2YXJpYWJsZSBhY2Nlc3NlcyB3aG9zZSBwcmVkaWN0aW9u
cyBvcmlnaW5hdGVkICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNp
bmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFByZWRpY3Rpb25JbmplY3Rpb25QaGFzZShH
cmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwcmVkaWN0aW9uIGluamVjdGlv
biIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBB
U1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICBBU1NFUlQobV9n
cmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gR2xvYmFsbHlVbmlmaWVkKTsKKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpID49IDEpOworICAgICAg
ICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICAgICAgVmFsdWVQcm9maWxl
KiBwcm9maWxlID0gcHJvZmlsZWRCbG9jaygpLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcp
OworICAgICAgICAgICAgaWYgKCFwcm9maWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ10tPnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bigpKTsKKyAgICAgICAgICAgIAorI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAg
ICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgIkFyZ3VtZW50IFsiLCBhcmcsICJdIHBy
ZWRpY3Rpb246ICIsCisgICAgICAgICAgICAgICAgU3BlY3VsYXRpb25EdW1wKG1fYXJndW1lbnRz
W2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKKyNlbmRp
ZgorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4g
IT0gbV9ncmFwaC5tX29zckVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211c3RI
YW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAg
ICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPmhhc0xvY2FsKCkpOworICAgICAgICAgICAgICAgIG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KAorICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlc1tpXSkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9
OworCitib29sIHBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFByZWRpY3Rpb24gSW5qZWN0aW9u
IFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFByZWRpY3Rpb25JbmplY3Rpb25QaGFzZT4o
Z3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZV9oCisjZGVm
aW5lIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQcmVkaWN0aW9uIEluamVjdGlvbjoKKy8vCisv
LyBUYWtlcyBtaXNjZWxsYW5lb3VzIGRhdGEgYWJvdXQgdmFyaWFibGUgdHlwZSBwcmVkaWN0aW9u
cyBhbmQgaW5qZWN0cyB0aGVtLgorLy8gVGhpcyBpbmNsdWRlcyBhcmd1bWVudCBwcmVkaWN0aW9u
cyBhbmQgT1NSIGVudHJ5IHByZWRpY3Rpb25zLgorCitib29sIHBlcmZvcm1QcmVkaWN0aW9uSW5q
ZWN0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNl
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBy
dW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BT
KTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV91bmlmaWNhdGlvblN0YXRlID09IEdsb2JhbGx5
VW5pZmllZCk7CisgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKICAgICAgICAgbV9jb3VudCA9IDA7CiAjZW5kaWYKQEAgLTgxMiw2ICs4MTUsNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIElubGluZVN0YXJ0OgogICAgICAgICBjYXNlIE5vcDoKICAg
ICAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExhc3ROb2RlVHlw
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAwNyw2ICs1MDA3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAog
ICAgIGNhc2UgUGhhbnRvbToKKyAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgLy8gVGhp
cyBpcyBhIG5vLW9wLgogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDEzMDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVu
KCkKICAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7
CisgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fdmFyaWFibGVB
Y2Nlc3NEYXRhLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOwogICAgICAgICAg
ICAgaWYgKCF2YXJpYWJsZS0+aXNSb290KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBo
YXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgor
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBVbmlmaWNhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAg
ICBVbmlmaWNhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwg
InVuaWZpY2F0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAg
IEFTU0VSVChtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBMb2NhbGx5VW5pZmllZCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBFbnN1cmUgdGhhdCBhbGwgUGhpIGZ1bmN0aW9ucyBhcmUgdW5p
ZmllZC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChi
bG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAg
ICAgICAgICAgIE5vZGUqIHBoaSA9IGJsb2NrLT5waGlzW3BoaUluZGV4XTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gMDsgY2hpbGRJZHggPCBBZGphY2VuY3lMaXN0
OjpTaXplOyArK2NoaWxkSWR4KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGhpLT5jaGls
ZHJlbi5jaGlsZChjaGlsZElkeCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHBoaS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCktPnVuaWZ5KAorICAgICAgICAgICAgICAgICAgICAgICAgcGhpLT5jaGlsZHJlbi5j
aGlsZChjaGlsZElkeCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEVuc3VyZSB0
aGF0IGFsbCBwcmVkaWN0aW9ucyBhcmUgZml4ZWQgdXAgYmFzZWQgb24gdGhlIHVuaWZpY2F0aW9u
LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNj
ZXNzRGF0YS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBk
YXRhID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CisgICAgICAgICAgICBkYXRh
LT5maW5kKCktPnByZWRpY3QoZGF0YS0+bm9uVW5pZmllZFByZWRpY3Rpb24oKSk7CisgICAgICAg
ICAgICBkYXRhLT5maW5kKCktPm1lcmdlSXNDYXB0dXJlZChkYXRhLT5pc0NhcHR1cmVkKCkpOwor
ICAgICAgICAgICAgZGF0YS0+ZmluZCgpLT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWls
ZWQoZGF0YS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgbV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPSBHbG9iYWxseVVuaWZp
ZWQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK2Jvb2wgcGVyZm9ybVVuaWZp
Y2F0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lv
bigiREZHIFVuaWZpY2F0aW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFVuaWZpY2F0
aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVW5pZmljYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdVbmlmaWNhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHVW5pZmljYXRpb25QaGFz
ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBV
bmlmaWNhdGlvbjoKKy8vCisvLyBFeGFtaW5lcyBhbGwgUGhpIGZ1bmN0aW9ucyBhbmQgZW5zdXJl
cyB0aGF0IHRoZSB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMgYXJlCisvLyB1bmlmaWVkLiBUaGlzIGNy
ZWF0ZXMgb3VyICJsaXZlLXJhbmdlIHNwbGl0IiB2aWV3IG9mIHZhcmlhYmxlcy4KKworYm9vbCBw
ZXJmb3JtVW5pZmljYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdVbmlmaWNhdGlvblBo
YXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJ
KHJldmlzaW9uIDE0MTMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBt
X2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
UGhpIGNoaWxkcmVuIGluIExvYWRTdG9yZSBmb3JtIGFyZSBpbnZhbGlkLgorICAgICAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJsb2NrLT5pc1BoaUlu
ZGV4KGkpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5v
ZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTEwOSwxMCArMTEzLDIwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgLy8gVW5sZXNzIEknbSBhIEZsdXNoLCBQaGFudG9tLCBHZXRMb2NhbCwgb3Ig
UGhpLCBteSBjaGlsZHJlbiBzaG91bGQgaGFzUmVzdWx0KCkuCiAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206CiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNWYXJp
YWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSwgZWRnZSksIGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBlZGdlKSwgZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV91bmlmaWNhdGlvblN0YXRlID09IExvY2FsbHlVbmlmaWVk
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiAhaikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFz
UmVzdWx0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzMsNyArMTQ3
LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2suYWRkKG5vZGUp
OwogICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNQaGlJbmRleChpKSkKICAgICAgICAgICAg
ICAgICAgICAgcGhpc0luVGhpc0Jsb2NrLmFkZChub2RlKTsKLSAgICAgICAgICAgICAgICBWX0VR
VUFMKChub2RlKSwgbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50
KCkpOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyB8
fCAhbm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICAgICAgICAgIFZf
RVFVQUwoKG5vZGUpLCBteVJlZkNvdW50cy5nZXQobm9kZSksIG5vZGUtPmFkanVzdGVkUmVmQ291
bnQoKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgu
bnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2Ug
PSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2Up
CkBAIC0xNDgsNiArMTYzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZSksIG5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gUGhpIGNoaWxkcmVuIGluIExvYWRTdG9yZSBmb3JtIGFyZSBpbnZhbGlkLgor
ICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJs
b2NrLT5pc1BoaUluZGV4KGkpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dy
YXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE4MywxNyArMjAyLDI0IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBu
b3QgcmVmZXJyaW5nIHRvICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KICAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ss
IGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwcmV2Tm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAocHJldk5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldk5vZGUgPSBwcmV2Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBi
bG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWws
IGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBGbHVzaAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gUGhp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVu
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFBoaSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUgPT0gZWRnZS5ub2RlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzEsNiArMjU3LDE4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgbm9kZXNJblRo
aXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9mb3JtID09IExvYWRTdG9yZSAmJiAhaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgIXBoaXNJblRoaXNCbG9jay5jb250YWlucyhl
ZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQpAQCAtMjM5LDcgKzI3Nyw4IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZSwgYmxvY2tJbmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSkgPT0gbm90U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09
IFRocmVhZGVkQ1BTKQorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJs
b2NrSW5kZXgpLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5v
dFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIFNldExvY2FsOgpAQCAtMjU2LDYgKzI5NSw5IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBjaGVja09wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIGdldExvY2Fs
UG9zaXRpb25zLCBzZXRMb2NhbFBvc2l0aW9ucywgYXJndW1lbnRUb09wZXJhbmQoaSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQxMzAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMjAgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIG5lZWRzTmV3TGluZSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpIHx8IG5vZGUtPm9wKCkgPT0gUGhpIHx8
IG5vZGUtPm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBoaToK
KyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRv
bUxvY2FsOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBj
YXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMSgp
LT5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ug
b24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhlbgogICAgICAgICAgICAg
ICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNv
IGluIHRoaXMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186271</attachid>
            <date>2013-02-03 16:22:06 -0800</date>
            <delta_ts>2013-02-03 20:31:56 -0800</delta_ts>
            <desc>passes all of the simple tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>112129</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDE3MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsMTIgQEAKIAkJMEYyMUMyN0QxNEJFNzI3
QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAvKiBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5dGVjb2RlQ29u
dmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNDJEQTcxM0Yz
QjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNTI2RTIxNkJDOTIwRjAwNzVENjNFIC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyNTI2REIxNkJDOTIwRDAwNzVENjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwICovOyB9OworCQkwRjI1MjZFMzE2QkM5MjExMDA3NUQ2M0UgLyogREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyNTI2REMxNkJDOTIwRDAwNzVENjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1MjZF
NDE2QkM5MjE1MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjUyNkREMTZCQzky
MEQwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9OworCQkw
RjI1MjZFNTE2QkM5MjE3MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1MjZERTE2
QkM5MjBEMDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNTI2RTYxNkJDOTIx
QTAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTI2REYxNkJDOTIwRDAwNzVENjNFIC8qIERG
R1VuaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjI1MjZFNzE2QkM5MjFEMDA3NUQ2M0Ug
LyogREZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyNTI2RTAxNkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9u
UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEyMTUx
QzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLzsgfTsKIAkJMEYyQkRDMTYxNTFD
NUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTk2Miw2ICs5NjgsMTIgQEAKIAkJMEYyMUMyN0ExNEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1
dGlvbkhhcm5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0aW9u
SGFybmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3RTE0QkVBQTgw
MDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCeXRlY29kZUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNTI2REIxNkJDOTIwRDAwNzVE
NjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
Q1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MjUyNkRDMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMjUyNkREMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlZGlj
dGlvbkluamVjdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1MjZERTE2QkM5MjBE
MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjI1MjZERjE2QkM5MjBEMDA3NUQ2M0UgLyogREZHVW5pZmljYXRpb25QaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVbmlmaWNhdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNTI2RTAxNkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0
aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVW5pZmljYXRp
b25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRml4dXBQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdGaXh1cFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjAxLDYg
KzI2MTMsOCBAQAogCQkJCTBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAq
LywKIAkJCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwICovLAogCQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5oICovLAorCQkJCTBGMjUyNkRCMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjI1MjZEQzE2QkM5MjBEMDA3NUQ2M0UgLyog
REZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8q
IERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEZGNDI3NjExNTkxQTFDOTAwNENCOUZGIC8qIERGR0Rp
c2Fzc2VtYmxlci5jcHAgKi8sCkBAIC0yNjQ5LDYgKzI2NjMsOCBAQAogCQkJCTBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8sCiAJCQkJMEZG
RkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0
RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuaCAqLywKKwkJCQkwRjI1MjZERDE2QkM5MjBEMDA3
NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjI1MjZE
RTE2QkM5MjBEMDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJ
CQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyog
REZHUmVnaXN0ZXJCYW5rLmggKi8sCkBAIC0yNjY4LDYgKzI2ODQsOCBAQAogCQkJCTBGNjM5NDNE
MTVDNzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCAqLywK
IAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkw
RkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJMEYyNTI2REYx
NkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGMjUy
NkUwMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggKi8sCiAJCQkJMEYz
QjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCAqLywKIAkJCQkwRjNCM0Ey
QTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLywKIAkJCQkwRjJCREMzRjE1MjI4
MDE3MDBDRDg5MTAgLyogREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggKi8sCkBAIC0zMzI5LDYg
KzMzNDcsOSBAQAogCQkJCTE0Q0E5NThCMTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0
eUFuYWx5emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNENBOTU4RDE2QUI1MEZBMDA5MzhBMDYg
LyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYwNERB
MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjI1MjZFMzE2QkM5MjExMDA3NUQ2M0UgLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNTI2RTUxNkJDOTIxNzAwNzVENjNFIC8qIERGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNTI2RTcxNkJD
OTIxRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
Mzk2Miw2ICszOTgzLDkgQEAKIAkJCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29t
bW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBE
RkdFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAv
KiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjUyNkUy
MTZCQzkyMEYwMDc1RDYzRSAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMjUyNkU0MTZCQzkyMTUwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyNTI2RTYxNkJDOTIxQTAwNzVENjNF
IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJGMEYyRDEx
NkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDE0MTcy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0Niw4IEBAIHN0cnVjdCBPcGVyYW5kVmFsdWVUcmFpdHMgewogICAg
IHN0YXRpYyB2b2lkIGR1bXAoY29uc3QgVCYgdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpIHsgdmFs
dWUuZHVtcChvdXQpOyB9CiB9OwogCitlbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5k
LCBMb2NhbE9wZXJhbmQgfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
ID0gT3BlcmFuZFZhbHVlVHJhaXRzPFQ+ID4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKQEAg
LTY2LDYgKzY4LDI4IEBAIHB1YmxpYzoKICAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVy
biBtX2xvY2Fsc1tpZHhdOyB9CiAgICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQogICAgIAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5k
IG9wZXJhbmRLaW5kPgorICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICAgICByZXR1cm4g
bnVtYmVyT2ZBcmd1bWVudHMoKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mTG9jYWxzKCk7Cisg
ICAgfQorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIFQmIGF0Rm9y
KHNpemVfdCBpZHgpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRP
cGVyYW5kKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7CisgICAgICAgIHJldHVy
biBsb2NhbChpZHgpOworICAgIH0KKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2lu
ZD4KKyAgICBjb25zdCBUJiBhdEZvcihzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBh
cmd1bWVudChpZHgpOworICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICB9CisgICAgCiAg
ICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBpZiAoc2l6
ZSA8PSBtX2xvY2Fscy5zaXplKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
ODcsNiArMTc4Nyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgRmx1c2g6CisgICAgY2FzZSBQ
aGFudG9tTG9jYWw6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIApAQCAtMTkxMyw2ICsxOTE0LDcgQEAgaW5saW5lIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIGNh
c2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgLy8gVGhl
IGJsb2NrIHRyYW5zZmVycyB0aGUgdmFsdWUgZnJvbSBoZWFkIHRvIHRhaWwuCiAgICAgICAgICAg
ICBzb3VyY2UgPSBpblZhcmlhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjYXNlIFBoaTogewor
ICAgICAgICAgICAgICAgIGNhc2UgUGhpOiAvKiBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwODU1NSAqLyB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTA3LDYgKzUwNyw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRn
ZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRN
eUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlZigpOyAvLyBU
aGlzIGlzIGEgbXVzdC1nZW5lcmF0ZSBub2RlLgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJl
Y29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNM
ZW5ndGguCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjM1LDggKzYzNiwxMCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChjaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaC5j
b2xsZWN0R2FyYmFnZSgpOworICAgICAgICBpZiAoY2hhbmdlZCkgeworICAgICAgICAgICAgbV9n
cmFwaC5kZXRocmVhZCgpOworICAgICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBMb2FkU3RvcmU7
CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVz
LmgJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05P
REUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21t
YSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMg
dGVtcGxhdGVQb3N0IE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBS
ZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAg
dGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxv
Y2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5N
b2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9
IGdyYXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKICAgICAgICAgYXBwZW5kKHJlc3VsdCk7IFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDY0ICsyODcsMzMgQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9j
YWwob3BlcmFuZCk7CiAgICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0Nh
cHR1cmVkKG9wZXJhbmQsIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgCisgICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2FsczogMSkgbGluayB0b2dldGhlciB2
YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQorICAgICAgICAvLyB0cnkgdG8gYXZvaWQgY3Jl
YXRpbmcgcmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJlcXVpcmVkIGZvcgorICAgICAgICAv
LyBjb3JyZWN0bmVzcyAtIG5vIG90aGVyIHBoYXNlIHdpbGwgZW5zdXJlIHRoYXQgYmxvY2stbG9j
YWwgdmFyaWFibGUKKyAgICAgICAgLy8gYWNjZXNzIGRhdGEgdW5pZmljYXRpb24gaXMgZG9uZSBj
b3JyZWN0bHkuICgyKSBpcyBwdXJlbHkgb3Bwb3J0dW5pc3RpYworICAgICAgICAvLyBhbmQgaXMg
bWVhbnQgYXMgYW4gY29tcGlsZS10aW1lIG9wdGltaXphdGlvbiBvbmx5LgorICAgICAgICAKKyAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKKyAgICAgICAgCiAgICAgICAgIGlm
IChub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBGbHVzaCkgewotICAgICAg
ICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRzIHRo
ZSBsb2NhbCB0byBiZSBsaXZlCi0gICAgICAgICAgICAgICAgLy8gYnV0IGhhcyBub3QgbG9hZGVk
IGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGluCi0gICAgICAgICAgICAg
ICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgotICAgICAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAg
ICAgICAgICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dy
YXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSkpOwotICAgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJh
bmQpID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNl
dExvY2FsKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVk
KGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSAhPSBGbHVzaCk7Ci0KLSAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5t
ZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoaXNDYXB0dXJlZCkgewotICAgICAgICAgICAgICAgIC8vIFdlIHdpc2ggdG8gdXNlIHRo
ZSBzYW1lIHZhcmlhYmxlIGFjY2VzcyBkYXRhIGFzIHRoZSBwcmV2aW91cyBhY2Nlc3MsCi0gICAg
ICAgICAgICAgICAgLy8gYnV0IGZvciBhbGwgb3RoZXIgcHVycG9zZXMgd2Ugd2FudCB0byBpc3N1
ZSBhIGxvYWQgc2luY2UgZm9yIGFsbCB3ZQotICAgICAgICAgICAgICAgIC8vIGtub3csIGF0IHRo
aXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24sIHRoZSBsb2NhbCBoYXMgYmVlbiBjbG9iYmVyZWQuCi0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGxpbmsgdG8g
dGhlIFBoaSBub2RlLCBub3QgdG8gdGhlIEdldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkg
PT0gUGhpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBuZXdHZXRM
b2NhbCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oCi0gICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSks
IG5vZGUpKTsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKG9wZXJhbmQpID0gbmV3R2V0TG9jYWw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5l
d0dldExvY2FsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsKTsKLSAgICAgICAg
ICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBjYXNlIFNldExv
Y2FsOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChvcGVyYW5k
KTsKKyAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQs
IGlzQ2FwdHVyZWQpOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9m
IHRlbXBvcmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLAotICAgICAgICAvLyBleHBhbmQgbV9wcmVz
ZXJ2ZWRWYXJzIHRvIGNvdmVyIHRoZXNlLgotICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9w
ZXJhbmQpOwotICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAg
ICAgICAgIAotICAgICAgICBOb2RlKiBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlh
YmxlQWNjZXNzRGF0YSkpOwotICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNr
RW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgb3BlcmFuZCkpOwotICAgICAgICBub2RlID0gaW5q
ZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFy
aWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7CisgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFu
ZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5v
ZGU7Ci0gICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNl
dExvY2FsRmlyc3RUaW1lKG9wZXJhbmQsIG5vZGUpOwotICAgICAgICAKICAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQogICAgIHZvaWQgc2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCwgTm9kZSog
dmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKQEAgLTM3Myw2MSArMzQyLDI1IEBA
IHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9j
b2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCk7CiAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZTsKKyAgICAgICAgCiAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBGbHVzaCkgewotICAgICAgICAgICAgICAgIC8vIFR3byBwb3Nz
aWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRzIHRoZSBsb2NhbCB0byBiZSBsaXZlCi0g
ICAgICAgICAgICAgICAgLy8gYnV0IGhhcyBub3QgbG9hZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFz
IGxvYWRlZCBpdHMgdmFsdWUsIGluCi0gICAgICAgICAgICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdy
ZSBkb25lLgotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+
bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBub2RlID0g
aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8o
dmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSkpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5v
cCgpID09IFNldEFyZ3VtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2gpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVy
ZWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRBcmd1
bWVudCkgewotICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1lbnQgaW4g
dGhlIGZpcnN0IGJhc2ljIGJsb2NrOyBsaW5rCi0gICAgICAgICAgICAgICAgLy8gdGhlIEdldExv
Y2FsIHRvIHRoZSBTZXRBcmd1bWVudC4KLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+bG9j
YWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKLSAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3Vs
YXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZSkpOwotICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJn
dW1lbnQpID0gbm9kZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnQpOwotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09
IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgfHwgbm9kZS0+b3AoKSA9PSBQ
aGkpOwotICAgICAgICAgICAgICAgIHJldHVybiBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9u
KGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSks
IG5vZGUpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVk
KGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKICAgICAgICAgCi0gICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwotCi0gICAgICAgIE5vZGUqIHBoaSA9IGFkZFRv
R3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7Ci0gICAgICAgIG1fYXJndW1l
bnRQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBhcmd1
bWVudCkpOwotICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRU
b0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7CisgICAg
ICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9j
YWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwotICAgICAgICAKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVu
dCwgbm9kZSk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgdm9p
ZCBzZXRBcmd1bWVudChpbnQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9
IE5vcm1hbFNldCkKQEAgLTQ5Myw2MyArNDI2LDI0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBmbHVzaERpcmVjdChpbnQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3Np
dGlvbikKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjaGVjayBpZiB0aGUg
c2FtZSBvcGVyYW5kIGhhZCBhbHJlYWR5IGJlZW4gZmx1c2hlZCB0bwotICAgICAgICAvLyBzb21l
IG90aGVyIGxvY2FsIHZhcmlhYmxlLgotICAgICAgICAKICAgICAgICAgYm9vbCBpc0NhcHR1cmVk
ID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgbV9pbmxpbmVTdGFja1RvcC0+bV9p
bmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9wZXJhbmQgPCBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBub2RlOwot
ICAgICAgICBpbnQgaW5kZXg7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5k
KSkgewotICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKLSAg
ICAgICAgICAgIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50
KGluZGV4KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGluZGV4ID0gb3BlcmFuZDsK
LSAgICAgICAgICAgIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2Fs
KGluZGV4KTsKLSAgICAgICAgICAgIG1fcHJlc2VydmVkVmFycy5zZXQob3BlcmFuZCk7Ci0gICAg
ICAgIH0KKyAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGU7CiAgICAgICAgIAogICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICAg
ICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgIG5vZGUgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCAmJiBub2RlLT5v
cCgpICE9IEdldExvY2FsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRW1pdCBhIEZs
dXNoIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBhbHJlYWR5IGZsdXNoZWQgaXQuCi0gICAgICAg
ICAgICAvLyBUaGlzIGdpdmVzIHVzIGd1aWRhbmNlIHRvIHNlZSB0aGF0IHRoZSB2YXJpYWJsZSBh
bHNvIG5lZWRzIHRvIGJlIGZsdXNoZWQKLSAgICAgICAgICAgIC8vIGZvciBhcmd1bWVudHMsIGV2
ZW4gaWYgaXQgYWxyZWFkeSBoYWQgdG8gYmUgZmx1c2hlZCBmb3Igb3RoZXIgcmVhc29ucy4KLSAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1l
cmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoRmx1c2gs
IE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKTsKLSAgICAgICAgICAgIGlmIChhcmd1
bWVudFBvc2l0aW9uKQotICAgICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlh
YmxlKHZhcmlhYmxlQWNjZXNzRGF0YSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
KyAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJh
bmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0
dXJlZCk7Ci0gICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFi
bGVBY2Nlc3NEYXRhKSk7Ci0gICAgICAgIG5vZGUgPSBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8o
dmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpKSB7Ci0gICAgICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0
YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsKLSAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpID0gbm9kZTsKLSAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRp
bWUoaW5kZXgsIG5vZGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9sb2NhbFBo
aVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7
Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4
KSA9IG5vZGU7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNl
dExvY2FsRmlyc3RUaW1lKGluZGV4LCBub2RlKTsKLSAgICAgICAgfQorICAgICAgICBub2RlID0g
YWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlKSk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIGlm
IChhcmd1bWVudFBvc2l0aW9uKQotICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFy
aWFibGUodmFyaWFibGVBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24t
PmFkZFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmbHVzaEFyZ3Vt
ZW50c0FuZENhcHR1cmVkVmFyaWFibGVzKCkKQEAgLTIwMjQsNyArMTkxOCw2IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRD
YWNoZSkpOwogICAgICAgICAgICAgTm9kZSogc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFy
Z3VtZW50LCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVu
dHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVu
dCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3Vt
ZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0zMjEzLDE1MSArMzEwNiw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICB9CiB9CiAKLXRlbXBsYXRlPEJ5dGVDb2RlUGFyc2VyOjpQaGlTdGFja1R5cGUg
c3RhY2tUeXBlPgotdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKLXsKLSAg
ICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTY+JiBwaGlTdGFjayA9IChzdGFja1R5cGUgPT0gQXJn
dW1lbnRQaGlTdGFjaykgPyBtX2FyZ3VtZW50UGhpU3RhY2sgOiBtX2xvY2FsUGhpU3RhY2s7Ci0g
ICAgCi0gICAgd2hpbGUgKCFwaGlTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgUGhpU3RhY2tF
bnRyeSBlbnRyeSA9IHBoaVN0YWNrLmxhc3QoKTsKLSAgICAgICAgcGhpU3RhY2sucmVtb3ZlTGFz
dCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFlbnRyeS5tX2Jsb2NrLT5pc1JlYWNoYWJsZSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgUHJlZGVjZXNzb3JMaXN0
JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS5tX2Jsb2NrLT5tX3ByZWRlY2Vzc29yczsKLSAgICAgICAg
dW5zaWduZWQgdmFyTm8gPSBlbnRyeS5tX3Zhck5vOwotICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIGRhdGFGb3JQaGkgPSBlbnRyeS5tX3BoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0KLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dG
KCIgICBIYW5kbGluZyBwaGkgZW50cnkgZm9yIHZhciAldSwgcGhpIEAldS5cbiIsIGVudHJ5Lm1f
dmFyTm8sIGVudHJ5Lm1fcGhpKTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKLSNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICBE
ZWFsaW5nIHdpdGggcHJlZGVjZXNzb3IgYmxvY2sgJXUuXG4iLCBwcmVkZWNlc3NvcnNbaV0pOwot
I2VuZGlmCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7Ci0KLSAgICAg
ICAgICAgIE5vZGUqJiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8gcHJl
ZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KHZhck5vKSA6IHByZWRlY2Vz
c29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbCh2YXJObyk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIE5vZGUqIHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhcjsKLSAgICAgICAgICAgIGlm
ICghdmFsdWVJblByZWRlY2Vzc29yKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBEaWQgbm90IGZpbmQg
bm9kZSwgYWRkaW5nIHBoaS5cbiIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICB2YWx1ZUlu
UHJlZGVjZXNzb3IgPSBpbnNlcnRQaGlOb2RlKE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
c3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2sgPyBhcmd1bWVudFRvT3BlcmFuZCh2YXJObykg
OiBzdGF0aWNfY2FzdDxpbnQ+KHZhck5vKSwgZmFsc2UpKSwgcHJlZGVjZXNzb3JCbG9jayk7Ci0g
ICAgICAgICAgICAgICAgdmFyID0gdmFsdWVJblByZWRlY2Vzc29yOwotICAgICAgICAgICAgICAg
IGlmIChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykKLSAgICAgICAgICAgICAgICAgICAg
cHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKHZh
ck5vLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmly
c3RUaW1lKHZhck5vLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotICAgICAgICAgICAgICAgIHBoaVN0
YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KHByZWRlY2Vzc29yQmxvY2ssIHZhbHVlSW5QcmVkZWNl
c3NvciwgdmFyTm8pKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVJblByZWRlY2Vzc29y
LT5vcCgpID09IEdldExvY2FsKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3VuZCBHZXRMb2NhbCBA
JXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNzb3ItPmluZGV4KCkpOwotI2VuZGlmCi0KLSAgICAgICAg
ICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGFz
IGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBHZXRMb2NhbCBh
bmQgaXRzIGJsb2NrLWxvY2FsIFBoaS4gU3RyaWN0bHkgc3BlYWtpbmcgd2Ugb25seSBuZWVkIHRo
ZSB0d28KLSAgICAgICAgICAgICAgICAvLyB0byBiZSB1bmlmaWVkLiBCdXQgZm9yIGVmZmljaWVu
Y3ksIHdlIHdhbnQgdGhlIGNvZGUgdGhhdCBjcmVhdGVzIEdldExvY2FscwotICAgICAgICAgICAg
ICAgIC8vIGFuZCBQaGlzIHRvIHRyeSB0byByZXVzZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFzIG11
Y2ggYXMgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlSW5QcmVkZWNlc3Nv
ci0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFsdWVJblByZWRlY2Vzc29yLT5jaGlsZDEoKS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhbHVlSW5QcmVkZWNlc3Nvci0+Y2hpbGQxKCkubm9kZSgp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIEZvdW5kIEAldS5cbiIs
IHZhbHVlSW5QcmVkZWNlc3Nvci0+aW5kZXgoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3ItPm9w
KCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICB8fCB2YWx1ZUluUHJlZGVjZXNzb3ItPm9w
KCkgPT0gUGhpCi0gICAgICAgICAgICAgICAgfHwgdmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09
IEZsdXNoCi0gICAgICAgICAgICAgICAgfHwgKHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBT
ZXRBcmd1bWVudCAmJiBzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQcmVkZWNlc3NvciA9
IHZhbHVlSW5QcmVkZWNlc3Nvci0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGRhdGFGb3JQcmVkZWNlc3Nvci0+dW5pZnkoZGF0YUZvclBoaSk7Ci0KLSAg
ICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBlbnRyeS5tX3BoaTsKLSNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgUmVm
IGNvdW50IG9mIEAldSA9ICV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgcGhpTm9kZS0+cmVmQ291
bnQoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKSB7Ci0j
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCIgICAgICBSZWZmaW5nIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0j
ZW5kaWYKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZih2YWx1ZUluUHJlZGVjZXNzb3IpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMSgpKSB7Ci0j
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQxID0gQCV1LlxuIiwgcGhpTm9kZS0+
aW5kZXgoKSwgdmFsdWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHBo
aU5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwotI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsKLSAg
ICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQy
KCkpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDIgPSBAJXUuXG4iLCBw
aGlOb2RlLT5pbmRleCgpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotI2VuZGlmCi0gICAgICAgICAg
ICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQyKEVkZ2UodmFsdWVJblByZWRlY2Vzc29y
KSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAg
ICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4
KCkpOwotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxl
KCkpOwotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFwaGlOb2Rl
LT5jaGlsZDMoKSkgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
LSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMyA9IEAl
dS5cbiIsIHBoaU5vZGUtPmluZGV4KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDMoRWRnZSh2YWx1ZUluUHJl
ZGVjZXNzb3IpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9k
ZS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6
ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIE5vZGUqIG5ld1BoaSA9IGluc2VydFBoaU5vZGUoT3BJbmZvKGRhdGFGb3JQaGkp
LCBlbnRyeS5tX2Jsb2NrKTsKLSAgICAgICAgICAgIAotI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBTcGxpdHRpbmcg
QCV1LCBjcmVhdGVkIEAldS5cbiIsIHBoaU5vZGUtPmluZGV4KCksIG5ld1BoaS0+aW5kZXgoKSk7
Ci0jZW5kaWYKLQotICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpCi0gICAgICAg
ICAgICAgICAgbV9ncmFwaC5yZWYobmV3UGhpKTsKLQotICAgICAgICAgICAgbmV3UGhpLT5jaGls
ZHJlbiA9IHBoaU5vZGUtPmNoaWxkcmVuOwotCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAl
dTogIiwgbmV3UGhpLT5pbmRleCgpKTsKLSAgICAgICAgICAgIG5ld1BoaS0+ZHVtcENoaWxkcmVu
KFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYK
LQotICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShuZXdQaGksIHZhbHVl
SW5QcmVkZWNlc3NvciwgMCk7Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBw
aGlOb2RlLT5pbmRleCgpKTsKLSAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6
OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmZpeFZhcmlhYmxlQWNjZXNz
UHJlZGljdGlvbnMoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1f
dmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKSB7CkBAIC0zNzMwLDE0ICszNDc4LDYgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIGRhdGFMb2dGKCJQcm9jZXNzaW5nIGxv
Y2FsIHZhcmlhYmxlIHBoaXMuXG4iKTsKICNlbmRpZgogICAgIAotICAgIG1fY3VycmVudFByb2Zp
bGluZ0luZGV4ID0gbV9jdXJyZW50SW5kZXg7Ci0gICAgCi0gICAgcHJvY2Vzc1BoaVN0YWNrPExv
Y2FsUGhpU3RhY2s+KCk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgIGRhdGFMb2dGKCJQcm9jZXNzaW5nIGFyZ3VtZW50IHBoaXMuXG4iKTsKLSNlbmRpZgot
ICAgIHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0YWNrPigpOwotCiAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVChibG9jayk7CkBAIC0z
NzQ1LDI3ICszNDg1LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICAg
ICAgbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5jbGVhcigpOwogICAgIH0KICAgICAKLSAg
ICBmaXhWYXJpYWJsZUFjY2Vzc1ByZWRpY3Rpb25zKCk7Ci0gICAgCi0gICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9IG1fZ3JhcGgu
bV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
b3BlcmFuZCgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5vcGVy
YW5kRm9ySW5kZXgoaSkpOwotICAgICAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0xvY2FsKCkpOwotICAgICAg
ICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QoCi0gICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXNbaV0pKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBtX2dyYXBoLm1fcHJlc2VydmVkVmFycyA9IG1f
cHJlc2VydmVkVmFyczsKICAgICBtX2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAg
ICAgbV9ncmFwaC5tX3BhcmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTQxNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiAr
NzIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHRy
ZW1lTG9nZ2luZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yKGJs
b2NrLCAwKSwgTm9CbG9jayk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNoYW5nZWQg
PSBvdXRlckNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xMTMsNiArMTE0LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRl
dGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25k
aXRpb24pLApAQCAtMTI2LDYgKzEyOCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChleHRyZW1lTG9nZ2luZykKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5k
ZXggdGFrZW5CbG9ja0luZGV4ID0gbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ss
IGNvbmRpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCBub3RU
YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgIWNv
bmRpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTE1NCw2ICsxNTcsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNGR1NpbXBsaWZ5
OiBCcmFuY2ggdG8gc2FtZSBzdWNjZXNzb3IgbWVyZ2Ugb24gQmxvY2sgIyV1IHRvIEJsb2NrICMl
dS5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LCB0
YXJnZXRCbG9ja0luZGV4KTsKICNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2Nr
cyhibG9ja0luZGV4LCB0YXJnZXRCbG9ja0luZGV4LCBOb0Jsb2NrKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQpAQCAtMjUwLDEwNCArMjU0LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChibG9j
ayk7CiAgICAgICAgIEFTU0VSVCghYmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgCi0gICAg
ICAgIC8vIDEpIFJlbW92ZSByZWZlcmVuY2VzIGZyb20gb3RoZXIgYmxvY2tzIHRvIHRoaXMgYmxv
Y2suCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhibG9j
ayk7IGktLTspCi0gICAgICAgICAgICBmaXhQaGlzKGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vz
c29yKGJsb2NrLCBpKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+
cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRv
ci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgbV9ncmFw
aC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5hdChub2RlSW5kZXgpKTsKICAgICAgICAgCi0gICAg
ICAgIC8vIDIpIEtpbGwgdGhlIGJsb2NrCiAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uY2xlYXIoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJh
c2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2ssIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICBOb2RlKiBsaXZlbmVzc05v
ZGUgPSBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwot
ICAgICAgICBOb2RlKiBhdmFpbGFiaWxpdHlOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKG9wZXJhbmQpOwogICAgICAgICBpZiAoIWxpdmVuZXNzTm9kZSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgQVNTRVJUKGF2YWlsYWJpbGl0eU5vZGUpOwogICAgICAgICBpZiAo
bGl2ZW5lc3NOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoYXZhaWxhYmlsaXR5Tm9kZS0+b3AoKSA9PSBTZXRM
b2NhbCkKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU5vZGUgPSBhdmFpbGFiaWxpdHlOb2RlLT5j
aGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgIGlmICghYXZhaWxhYmlsaXR5Tm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKKyAgICAgICAgaWYgKCFsaXZlbmVzc05vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChhdmFpbGFiaWxpdHlOb2RlLT5vcCgp
ICE9IFNldExvY2FsKTsKICAgICAgICAgYmxvY2stPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICBt
X2dyYXBoLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2Rl
T3JpZ2luLCBhdmFpbGFiaWxpdHlOb2RlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaXhQb3Nz
aWJsZUdldExvY2FsKEJhc2ljQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdlLCBib29sIGNoYW5nZVJl
ZikKLSAgICB7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gZWRnZS5ub2RlKCk7Ci0gICAgICAgIGlm
IChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKLSAgICAgICAgICAgIHJldHVybjsKLSNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAg
Q29uc2lkZXJpbmcgR2V0TG9jYWwgYXQgQCV1LCBsb2NhbCByJWQuXG4iLCBub2RlLT5pbmRleCgp
LCBjaGlsZC0+bG9jYWwoKSk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGNoaWxkLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBjYXB0dXJl
ZC5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Tm9kZSogb3JpZ2luYWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxk
LT5sb2NhbCgpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0g
ICAgICAgIGRhdGFMb2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4iLCBv
cmlnaW5hbE5vZGUtPmluZGV4KCkpOwotI2VuZGlmCi0gICAgICAgIEFTU0VSVChvcmlnaW5hbE5v
ZGUpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgICAgT3JpZ2luYWwgaGFzIGxvY2FsIHIlZC5cbiIsIG9yaWdpbmFsTm9k
ZS0+bG9jYWwoKSk7Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUKGNoaWxkLT5sb2NhbCgpID09IG9y
aWdpbmFsTm9kZS0+bG9jYWwoKSk7Ci0gICAgICAgIC8vIFBvc3NpYmlsaXRpZXM6Ci0gICAgICAg
IC8vIFNldExvY2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBz
b21ldGhpbmcgdGhhdCBpcyBpbW1lZGlhdGVseQotICAgICAgICAvLyAgICAgYXZhaWxhYmxlIGlu
IHRoZSBmaXJzdCBibG9jayB3aXRoIGEga25vd24gTm9kZUluZGV4LgotICAgICAgICAvLyBHZXRM
b2NhbCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgZ2V0dGluZyB0aGUgdmFsdWUgb2Ygc29tZXRoaW5n
IHRoYXQgdGhlIGZpcnN0Ci0gICAgICAgIC8vICAgICBibG9jayBhbHNvIGdldHMuCi0gICAgICAg
IC8vIFBoaSAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFu
IG9wZXJhbmQgdGhhdCB0aGUgZmlyc3QgYmxvY2sKLSAgICAgICAgLy8gICAgIHdhcyBhbHNvIGFz
a2luZyBmb3Iga2VlcC1hbGl2ZSBvbi4KLSAgICAgICAgLy8gU2V0QXJndW1lbnQgLT4gdGhlIHNl
Y29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhl
Ci0gICAgICAgIC8vICAgICBmaXJzdCBibG9jayB3YXMga2VlcGluZyBhbGl2ZSBieSB2aXJ0dWUg
b2YgdGhlIGZpcnN0QmxvY2sgYmVpbmcgdGhlIHJvb3QgYW5kCi0gICAgICAgIC8vICAgICB0aGUg
b3BlcmFuZCBiZWluZyBhbiBhcmd1bWVudC4KLSAgICAgICAgLy8gRmx1c2ggLT4gdGhlIHNlY29u
ZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlIGZp
cnN0Ci0gICAgICAgIC8vICAgICBibG9jayB3YXMgZm9yY2luZyB0byBiZSBhbGl2ZSwgc28gdGhl
IHNlY29uZCBibG9jayBzaG91bGQgcmVmZXIgY2hpbGQgb2YKLSAgICAgICAgLy8gICAgIHRoZSBm
bHVzaC4KLSAgICAgICAgaWYgKG9yaWdpbmFsTm9kZS0+b3AoKSA9PSBGbHVzaCkKLSAgICAgICAg
ICAgIG9yaWdpbmFsTm9kZSA9IG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAg
ICBzd2l0Y2ggKG9yaWdpbmFsTm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIFNldExvY2FsOiB7
Ci0gICAgICAgICAgICBpZiAoY2hhbmdlUmVmKQotICAgICAgICAgICAgICAgIEFTU0VSVChvcmln
aW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBTZXRM
b2NhbC5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKGVkZ2Us
IG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRMb2NhbDogewotI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgIEl0J3MgYSBHZXRMb2NhbC5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAob3JpZ2lu
YWxOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdl
Q2hpbGQoZWRnZSwgb3JpZ2luYWxOb2RlLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgLy8gSWYg
d2UgaGF2ZSBhIEdldExvY2FsIHRoYXQgcG9pbnRzIHRvIGEgY2hpbGQgR2V0TG9jYWwgdGhhdCBp
cyBkZWFkLCB0aGVuCi0gICAgICAgICAgICAvLyB3ZSBoYXZlIG5vIG5lZWQgdG8gZG8gYW55dGhp
bmc6IHRoaXMgb3JpZ2luYWwgR2V0TG9jYWwgaXMgc3RpbGwgdmFsaWQuCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFBoaToKLSAgICAgICAgY2FzZSBTZXRBcmd1
bWVudDogewotICAgICAgICBpZiAoY2hhbmdlUmVmKQotICAgICAgICAgICAgQVNTRVJUKG9yaWdp
bmFsTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBQaGkvU2V0
QXJndW1lbnQuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgLy8gS2VlcCB0aGUgR2V0TG9jYWwh
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CisgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgT3BJ
bmZvKGxpdmVuZXNzTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBqZXR0aXNvbkJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBq
ZXR0aXNvbmVkQmxvY2tJbmRleCwgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4pCkBAIC0z
NjMsMzggKzI4OSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGZpeEpldHRpc29uZWRQcmVkZWNlc3Nv
cnMoYmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGZpeFBoaXMoQmxvY2tJbmRleCBzb3VyY2VCbG9ja0luZGV4LCBCbG9ja0luZGV4IGRlc3Rp
bmF0aW9uQmxvY2tJbmRleCkKLSAgICB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2Nr
ID0gbV9ncmFwaC5tX2Jsb2Nrc1tzb3VyY2VCbG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgQmFz
aWNCbG9jayogZGVzdGluYXRpb25CbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbZGVzdGluYXRpb25C
bG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbkJsb2NrKSB7Ci0gICAg
ICAgICAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8ga2lsbCBvZmYgdGhlIHNvdXJjZSBibG9jayBh
bmQgdGhlIGRlc3RpbmF0aW9uIGJsb2NrIGlzIGFscmVhZHkKLSAgICAgICAgICAgIC8vIGRlYWQs
IHRoZW4gd2UncmUgZG9uZSEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9uQmxvY2stPnBoaXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBkZXN0aW5hdGlvbkJsb2NrLT5waGlz
W2ldOwotICAgICAgICAgICAgTm9kZSogbXlOb2RlID0gc291cmNlQmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKHBoaU5vZGUtPmxvY2FsKCkpOwotICAgICAgICAgICAgaWYgKCFteU5vZGUp
IHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgaGFwcGVuIGlmIHRoZXJlIGlzIGEgcGhp
IGluIHRoZSBkZXN0aW5hdGlvbiB0aGF0IHJlZmVycyBpbnRvCi0gICAgICAgICAgICAgICAgLy8g
dGhlIGRlc3RpbmF0aW9uIGl0c2VsZi4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgICAgICBkYXRhTG9nRigKLSAgICAgICAgICAgICAgICAiQ29uc2lkZXJpbmcgcmVtb3Zpbmcg
cmVmZXJlbmNlIGZyb20gcGhpIEAldSB0byBAJXUgb24gbG9jYWwgciVkOiIsCi0gICAgICAgICAg
ICAgICAgcGhpTm9kZS0+aW5kZXgoKSwgbXlOb2RlLT5pbmRleCgpLCBwaGlOb2RlLT5sb2NhbCgp
KTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKG15Tm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKLSAg
ICAgICAgICAgICAgICBteU5vZGUgPSBteU5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2opCi0g
ICAgICAgICAgICAgICAgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKG15Tm9kZSwg
cGhpTm9kZSwgaiwgc291cmNlQmxvY2stPmlzUmVhY2hhYmxlKTsKLSNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKLSNl
bmRpZgotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIHZvaWQgZml4SmV0dGlzb25lZFByZWRl
Y2Vzc29ycyhCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0dGlzb25lZEJsb2Nr
SW5kZXgpCiAgICAgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
QEAgLTQwOSw4ICszMDMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgamV0dGlzb25lZEJsb2Nr
LT5tX3ByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgZml4UGhpcyhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxv
Y2tJbmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhp
UmVmZXJlbmNlKE5vZGUqIG15Tm9kZSwgTm9kZSogcGhpTm9kZSwgdW5zaWduZWQgZWRnZUluZGV4
LCBib29sIGNoYW5nZVJlZikKQEAgLTU4Myw4OCArNDc1LDggQEAgcHJpdmF0ZToKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+cGhpcy5zaXplKCk7ICsraSkKICAg
ICAgICAgICAgIGZpcnN0QmxvY2stPnBoaXMuYXBwZW5kKHNlY29uZEJsb2NrLT5waGlzW2ldKTsK
IAotICAgICAgICAvLyBCZWZvcmUgd2Ugc3RhcnQgY2hhbmdpbmcgdGhlIHNlY29uZCBibG9jaydz
IGdyYXBoLCByZWNvcmQgd2hhdCBub2RlcyB3b3VsZAotICAgICAgICAvLyBiZSByZWZlcmVuY2Vk
IGJ5IHN1Y2Nlc3NvcnMgb2YgdGhlIHNlY29uZCBibG9jay4KLSAgICAgICAgT3BlcmFuZHM8T3Bl
cmFuZFN1YnN0aXR1dGlvbj4gc3Vic3RpdHV0aW9ucygKLSAgICAgICAgICAgIHNlY29uZEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAgICAgICAgIHNlY29u
ZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2kpCi0gICAgICAgICAgICByZWNvcmRQb3NzaWJsZUluY29taW5nUmVmZXJl
bmNlKHNlY29uZEJsb2NrLCBzdWJzdGl0dXRpb25zLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpOyArK2kpCi0gICAgICAgICAgICByZWNvcmRQb3NzaWJsZUluY29t
aW5nUmVmZXJlbmNlKHNlY29uZEJsb2NrLCBzdWJzdGl0dXRpb25zLCBpKTsKLQotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IHNlY29uZEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgYm9vbCBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IGZhbHNlOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgUGhh
bnRvbTogewotICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VS
VChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBwb3NzaWJs
ZUxvY2FsT3AgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBv
c3NpYmxlTG9jYWxPcC0+b3AoKSAhPSBHZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAmJiBw
b3NzaWJsZUxvY2FsT3AtPmhhc0xvY2FsKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIXBvc3Np
YmxlTG9jYWxPcC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewotICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKHBvc3NpYmxlTG9jYWxPcC0+bG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChzZXRMb2NhbC0+b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC0+
Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMygpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1
c2g6Ci0gICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgLy8gQSBG
bHVzaCBjb3VsZCB1c2UgYSBHZXRMb2NhbCwgU2V0TG9jYWwsIFNldEFyZ3VtZW50LCBvciBhIFBo
aS4KLSAgICAgICAgICAgICAgICAvLyBJZiBpdCB1c2VzIGEgR2V0TG9jYWwsIGl0J2xsIGJlIHRh
a2VuIGNhcmUgb2YgYmVsb3cuIElmIGl0IHVzZXMgYQotICAgICAgICAgICAgICAgIC8vIFNldExv
Y2FsIG9yIFNldEFyZ3VtZW50LCB0aGVuIGl0IG11c3QgYmUgdXNpbmcgYSBub2RlIGZyb20gdGhl
Ci0gICAgICAgICAgICAgICAgLy8gc2FtZSBibG9jay4gQnV0IGlmIGl0IHVzZXMgYSBQaGksIHRo
ZW4gd2Ugc2hvdWxkIHJlZGlyZWN0IGl0IHRvCi0gICAgICAgICAgICAgICAgLy8gdXNlIHdoYXRl
dmVyIHRoZSBmaXJzdCBibG9jayBhZHZlcnRpc2VkIGFzIGEgdGFpbCBvcGVyYW5kLgotICAgICAg
ICAgICAgICAgIC8vIFNpbWlsYXJseSBmb3IgR2V0TG9jYWw7IGl0IGNvdWxkIHVzZSBhbnkgb2Yg
dGhvc2UgZXhjZXB0IGZvcgotICAgICAgICAgICAgICAgIC8vIEdldExvY2FsLiBJZiBpdCB1c2Vz
IGEgUGhpIHRoZW4gaXQgc2hvdWxkIGJlIHJlZGlyZWN0ZWQgdG8gdXNlIGEKLSAgICAgICAgICAg
ICAgICAvLyBQaGkgZnJvbSB0aGUgdGFpbCBvcGVyYW5kLgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+b3AoKSAhPSBQaGkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIGF0Rmlyc3QgPSBmaXJzdEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKLSAgICAgICAgICAg
ICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIEVkZ2Uoc2tp
cEdldExvY2FsKGF0Rmlyc3QpKSwgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAg
ICAgICAgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFjaGlsZHJlbkFscmVhZHlGaXhlZCkgewotICAgICAgICAgICAgICAgIGJv
b2wgY2hhbmdlUmVmID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIEdldExvY2FsLCB0aGVuIHdlIG1pZ2h0
IGxpa2UgdG8gZml4IGl0LgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9k
ZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElk
eCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSWR4
IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
IW1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBtX2dyYXBoLm1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghIW5vZGUtPmNoaWxkMSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS0+Y2hpbGRyZW4u
Y2hpbGQxKCksIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghIW5vZGUtPmNo
aWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZp
cnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBjaGFuZ2VSZWYpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCEhbm9kZS0+Y2hpbGQzKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLT5jaGlsZHJlbi5j
aGlsZDMoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKG5v
ZGUpOwotICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxv
Y2stPnNpemUoKTsgKytpKQorICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKHNlY29uZEJs
b2NrLT5hdChpKSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+bGFzdCgp
LT5pc1Rlcm1pbmFsKCkpOwogICAgICAgICAKQEAgLTY4NiwzNyArNDk4LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgaWYgKGpldHRpc29uZWRCbG9ja0luZGV4ICE9IE5vQmxvY2spCiAgICAgICAgICAg
ICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGZpcnN0QmxvY2tJbmRleCwgamV0dGlzb25lZEJs
b2NrSW5kZXgpOwogICAgICAgICAKLSAgICAgICAgLy8gRml4IHVwIHRoZSB2YXJpYWJsZXMgYXQg
dGFpbC4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKLSAgICAgICAgICAgIGZpeFRhaWxP
cGVyYW5kKGZpcnN0QmxvY2ssIHNlY29uZEJsb2NrLCBhcmd1bWVudFRvT3BlcmFuZChpKSwgc3Vi
c3RpdHV0aW9ucyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCi0gICAgICAgICAgICBmaXhU
YWlsT3BlcmFuZChmaXJzdEJsb2NrLCBzZWNvbmRCbG9jaywgaSwgc3Vic3RpdHV0aW9ucyk7Ci0g
ICAgICAgIAotICAgICAgICAvLyBGaXggdXAgdGhlIHJlZmVyZW5jZXMgZnJvbSBvdXIgbmV3IHN1
Y2Nlc3NvcnMuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29y
cyhmaXJzdEJsb2NrKTsgaS0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
ID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihmaXJzdEJsb2NrLCBpKV0uZ2V0
KCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3VjY2Vzc29yLT5waGlz
LnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHN1Y2Nlc3Nv
ci0+cGhpc1tqXTsKLSAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IHBoaU5vZGUtPnNo
b3VsZEdlbmVyYXRlKCk7Ci0gICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlvbiBzdWJz
dGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7Ci0jaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBQZXJmb3JtaW5nIG9wZXJhbmQgc3Vic3RpdHV0aW9uICIsIHN1YnN0aXR1dGlv
biwgIi5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDEo
KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBo
aU5vZGUtPmNoaWxkMSgpID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5jaGFuZ2VDaGlsZChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc3Vi
c3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgIGlmICghcGhp
Tm9kZS0+Y2hpbGQyKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDIoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCi0g
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQocGhpTm9kZS0+Y2hpbGRyZW4u
Y2hpbGQyKCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQzKCkgPT0gc3Vic3RpdHV0aW9u
Lm9sZENoaWxkKQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKHBoaU5v
ZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIGZpcnN0QmxvY2st
PnZhbHVlc0F0VGFpbCA9IHNlY29uZEJsb2NrLT52YWx1ZXNBdFRhaWw7CiAgICAgICAgIGZpcnN0
QmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9IHNlY29uZEJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rp
b247CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRo
cmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NQU1JldGhyZWFkaW5nUGhh
c2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lu
bGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIENQU1JldGhyZWFkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgor
ICAgIENQU1JldGhyZWFkaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdy
YXBoLCAiQ1BTIHJldGhyZWFkaW5nIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVu
KCkKKyAgICB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZyZWVVbm5lY2Vzc2Fy
eU5vZGVzKCk7CisgICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzKCk7CisgICAgICAg
IHByb3BhZ2F0ZVBoaXMoKTsKKyAgICAgICAgbV9ncmFwaC5jb2xsZWN0R2FyYmFnZSgpOworICAg
ICAgICAKKyAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIAorICAgIHZvaWQgZnJlZVVubmVjZXNz
YXJ5Tm9kZXMoKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICB1bnNpZ25lZCBmcm9tSW5kZXggPSAwOworICAgICAgICAgICAgdW5zaWduZWQgdG9JbmRleCA9
IDA7CisgICAgICAgICAgICB3aGlsZSAoZnJvbUluZGV4IDwgYmxvY2stPnNpemUoKSkgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoZnJvbUluZGV4KyspOworICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgR2V0
TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICBjYXNl
IFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hp
bGQxKEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPmNoaWxkMSgpLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
UGhpOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAg
ICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29u
dmVydFRvUGhhbnRvbUxvY2FsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChub2RlLT5jaGlsZDEoKS0+aGFzUmVzdWx0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBOb3A6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IDA7
IC8vIFJlc2V0IHRoZSByZXBsYWNlbWVudCBzaW5jZSB0aGUgbmV4dCBwaGFzZSB3aWxsIHVzZSBp
dC4KKyAgICAgICAgICAgICAgICBibG9jay0+YXQodG9JbmRleCsrKSA9IG5vZGU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBibG9jay0+cmVzaXplKHRvSW5kZXgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgp
OyBwaGlJbmRleC0tOykKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUo
YmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgICAgIGJsb2NrLT5waGlzLnJlc2l6ZSgw
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVy
YW5kS2luZD4KKyAgICB2b2lkIGNsZWFyVmFyaWFibGVzQXRIZWFkQW5kVGFpbCgpCisgICAgewor
ICAgICAgICBBU1NFUlQoCisgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6
ZUZvcjxvcGVyYW5kS2luZD4oKQorICAgICAgICAgICAgPT0gbV9ibG9jay0+dmFyaWFibGVzQXRU
YWlsLnNpemVGb3I8b3BlcmFuZEtpbmQ+KCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemVGb3I8b3BlcmFuZEtpbmQ+KCk7
IGktLTspIHsKKyAgICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hdEZvcjxvcGVy
YW5kS2luZD4oaSkgPSAwOworICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0
Rm9yPG9wZXJhbmRLaW5kPihpKSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9k
ZSogYWRkUGhpU2lsZW50bHkoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4sIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCisgICAgeworICAgICAgICBO
b2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9k
ZSwgU3BlY05vbmUsIFBoaSwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSk7CisgICAgICAg
IGJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBOb2RlKiBhZGRQaGkoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IENvZGVP
cmlnaW4mIGNvZGVPcmlnaW4sIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCisgICAgewor
ICAgICAgICBOb2RlKiByZXN1bHQgPSBhZGRQaGlTaWxlbnRseShibG9jaywgY29kZU9yaWdpbiwg
dmFyaWFibGUpOworICAgICAgICBtX3BoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KGJsb2Nr
LCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTm9k
ZSogYWRkUGhpKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRkUGhpKG1fYmxvY2ssIGNvZGVP
cmlnaW4sIHZhcmlhYmxlKTsKKyAgICB9CisgICAgCisgICAgTm9kZSogYWRkUGhpKE5vZGUqIG5v
ZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRkUGhpKG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjYW5vbmljYWxp
emVHZXRMb2NhbChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGlm
IChOb2RlKiBvdGhlck5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpID09IHZhcmlhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dp
dGNoIChvdGhlck5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAg
ICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhl
ck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5v
cCgpID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgYSBH
ZXRMb2NhbCwgc28gdGhpcyBtaWdodCBhcyB3ZWxsIGJlIHRoZSBvbmUuCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9kZSkpOworICAgICAg
ICAgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkg
PT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChvdGhl
ck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50
IHx8IG90aGVyTm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CisgICAgICAgICAgICBBU1NFUlQob3Ro
ZXJOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpIHsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhlck5vZGUpKTsKKyAg
ICAgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkgPSBub2RlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAg
ICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUt
Pm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgpID09
IFBoaSB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09
IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBLZWVw
IHRoaXMgR2V0TG9jYWwgYnV0IGxpbmsgaXQgdG8gdGhlIHByaW9yIG9uZXMuCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2RlKSk7CisgICAgICAg
ICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpID0gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsK
KyAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgR2V0TG9j
YWwgd2l0aCBvdGhlck5vZGUuCisgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBv
dGhlck5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgpID09IFNldExvY2FsKTsK
KyAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5v
ZGUqIHBoaSA9IGFkZFBoaShub2RlKTsKKyAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQx
KEVkZ2UocGhpKSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRPcGVyYW5k
Rmlyc3RUaW1lKHZhcmlhYmxlLT5sb2NhbCgpLCBwaGkpOworICAgICAgICBtX2Jsb2NrLT52YXJp
YWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSwgbm9kZSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY2Fub25pY2FsaXplU2V0TG9jYWwoTm9kZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUtPmxvY2FsKCks
IG5vZGUpOworICAgIH0KKworICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBlPgorICAgIHZv
aWQgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbChOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoTm9kZSogb3RoZXJOb2RlID0gbV9ibG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKSB7CisgICAgICAgICAgICBBU1NFUlQob3Ro
ZXJOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN3aXRjaCAob3RoZXJOb2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNl
IEZsdXNoOgorICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICBjYXNl
IEdldExvY2FsOgorICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9IG90aGVyTm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBQaGkgfHwgb3RoZXJOb2RlLT5vcCgp
ID09IFNldExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChub2RlVHlwZSA9PSBQaGFudG9tTG9jYWwgJiYgb3RoZXJO
b2RlLT5vcCgpID09IFNldExvY2FsKSB7CisgICAgICAgICAgICAgICAgLy8gUGhhbnRvbUxvY2Fs
KFNldExvY2FsKSBkb2Vzbid0IG1ha2Ugc2Vuc2UuIFBoYW50b21Mb2NhbCBtZWFuczogYXQgdGhp
cworICAgICAgICAgICAgICAgIC8vIHBvaW50IEkga25vdyBJIHdvdWxkIGhhdmUgYmVlbiBpbnRl
cmVzdGVkIGluIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgLy8g
Zm9yIHRoZSBwdXJwb3NlIG9mIE9TUi4gUGhhbnRvbUxvY2FsKFNldExvY2FsKSBtZWFuczogYXQg
dGhpcyBwb2ludCBJCisgICAgICAgICAgICAgICAgLy8ga25vdyB0aGF0IEkgd291bGQgaGF2ZSBy
ZWFkIHRoZSB2YWx1ZSB3cml0dGVuIGJ5IHRoYXQgU2V0TG9jYWwuIFRoaXMgaXMKKyAgICAgICAg
ICAgICAgICAvLyByZWR1bmRhbnQgYW5kIGluZWZmaWNpZW50LCBzaW5jZSByZWFsbHkgaXQganVz
dCBtZWFucyB0aGF0IHdlIHdhbnQgdG8KKyAgICAgICAgICAgICAgICAvLyBiZSBrZWVwaW5nIHRo
ZSBvcGVyYW5kIHRvIHRoZSBTZXRMb2NhbCBhbGl2ZS4gVGhlIFNldExvY2FsIG1heSBkaWUsIGFu
ZAorICAgICAgICAgICAgICAgIC8vIHdlJ2xsIGJlIGZpbmUgYmVjYXVzZSBPU1IgdHJhY2tzIGRl
YWQgU2V0TG9jYWxzLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFNvIHdl
IHR1cm4gdGhpcyBpbnRvIGEgUGhhbnRvbSBvbiB0aGUgY2hpbGQgb2YgdGhlIFNldExvY2FsLgor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKFBoYW50b20pOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShv
dGhlck5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vdGhpbmcgd3Jvbmcg
d2l0aCBoYXZpbmcgcmVkdW5kYW50IEZsdXNoJ3MuIEl0IGp1c3QgbmVlZHMgdG8KKyAgICAgICAg
ICAgIC8vIGJlIGxpbmtlZCBhcHByb3ByaWF0ZWx5LiBOb3RlIHRoYXQgaWYgdGhlcmUgaGFkIGFs
cmVhZHkgYmVlbiBhIHByZXZpb3VzCisgICAgICAgICAgICAvLyB1c2UgYXQgdGFpbCB0aGVuIHdl
IGRvbid0IG92ZXJyaWRlIGl0LiBJdCdzIGZpbmUgZm9yIHZhcmlhYmxlc0F0VGFpbCB0bworICAg
ICAgICAgICAgLy8gb21pdCBGbHVzaGVzIGFuZCBQaGFudG9tTG9jYWxzLiBPbiB0aGUgb3RoZXIg
aGFuZCwgaGF2aW5nIGl0IHJlZmVyIHRvIGEKKyAgICAgICAgICAgIC8vIEZsdXNoIG9yIGEgUGhh
bnRvbUxvY2FsIGlmIGp1c3QgYmVmb3JlIGl0IHRoZSBsYXN0IHVzZSB3YXMgYSBHZXRMb2NhbCB3
b3VsZAorICAgICAgICAgICAgLy8gc2VyaW91c2x5IGNvbmZ1c2UgdGhlIENGQS4KKyAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9kZSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBub2RlLT5jaGlsZHJlbi5z
ZXRDaGlsZDEoRWRnZShhZGRQaGkobm9kZSkpKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVz
QXRIZWFkLnNldE9wZXJhbmRGaXJzdFRpbWUodmFyaWFibGUtPmxvY2FsKCksIG5vZGUpOworICAg
ICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSwgbm9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2Fub25pY2FsaXplU2V0QXJndW1lbnQo
Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGludCBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7Cisg
ICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRPcGVyYW5kRmlyc3RUaW1lKGxvY2Fs
LCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmRGaXJz
dFRpbWUobG9jYWwsIG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUxv
Y2Fsc0luQmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Jsb2NrKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBBU1NFUlQobV9ibG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAK
KyAgICAgICAgY2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWlsPEFyZ3VtZW50T3BlcmFuZD4oKTsK
KyAgICAgICAgY2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWlsPExvY2FsT3BlcmFuZD4oKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEFzc3VtZXMgdGhhdCBhbGwgcGhpIHJlZmVyZW5jZXMgaGF2ZSBi
ZWVuIHJlbW92ZWQuIEFzc3VtZXMgdGhhdCB0aGluZ3MgdGhhdAorICAgICAgICAvLyBzaG91bGQg
YmUgbGl2ZSBoYXZlIGEgbm9uLXplcm8gcmVmIGNvdW50LCBidXQgZG9lc24ndCBhc3N1bWUgdGhh
dCB0aGUgcmVmCisgICAgICAgIC8vIGNvdW50cyBhcmUgY29ycmVjdCBiZXlvbmQgdGhhdCAobW9y
ZSBmb3JtYWxseSAhIWxvZ2ljYWxSZWZDb3VudCA9PSAhIWFjdHVhbFJlZkNvdW50CisgICAgICAg
IC8vIGJ1dCBub3QgbG9naWNhbFJlZkNvdW50ID09IGFjdHVhbFJlZkNvdW50KS4gQXNzdW1lcyB0
aGF0IGl0IGNhbiBicmVhayByZWYKKyAgICAgICAgLy8gY291bnRzLgorICAgICAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2Jsb2NrLT5zaXpl
KCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQo
bm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vi
c3RpdHV0aW9uKG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGUgcnVsZXMg
Zm9yIHRocmVhZGVkIENQUyBmb3JtOgorICAgICAgICAgICAgLy8gCisgICAgICAgICAgICAvLyBI
ZWFkIHZhcmlhYmxlOiB0aGUgZmlyc3QgdGhpbmcgdGhhdCBoYXBwZW5lZCB0byB0aGUgdmFyaWFi
bGUgaW4gdGhlIGJsb2NrLgorICAgICAgICAgICAgLy8gSXQgbWF5IGJlIGEgRmx1c2gsIFBoYW50
b21Mb2NhbCwgR2V0TG9jYWwsIFNldExvY2FsLCBvciBTZXRBcmd1bWVudC4KKyAgICAgICAgICAg
IC8vIFNldEFyZ3VtZW50IG1heSBvbmx5IGFwcGVhciBpbiB0aGUgcm9vdCBibG9jay4KKyAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAvLyBUYWlsIHZhcmlhYmxlOiB0aGUgbGFzdCB0aGluZyB0
aGF0IGhhcHBlbmVkIHRvIHRoZSB2YXJpYWJsZSBpbiB0aGUgYmxvY2suCisgICAgICAgICAgICAv
LyBJdCBtYXkgYmUgYSBGbHVzaCwgUGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwgU2V0TG9jYWwsIG9y
IFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQgbWF5IG9ubHkgYXBwZWFy
IGluIHRoZSByb290IGJsb2NrLiBOb3RlIHRoYXQgaWYgdGhlcmUgZXZlcgorICAgICAgICAgICAg
Ly8gd2FzIGEgR2V0TG9jYWwgdG8gdGhlIHZhcmlhYmxlLCBhbmQgaXQgd2FzIGZvbGxvd2VkIGJ5
IFBoYW50b21Mb2NhbHMgYW5kCisgICAgICAgICAgICAvLyBGbHVzaGVzIGJ1dCBub3QgU2V0TG9j
YWxzLCB0aGVuIHRoZSB0YWlsIHZhcmlhYmxlIHdpbGwgYmUgdGhlIEdldExvY2FsLgorICAgICAg
ICAgICAgLy8gVGhpcyByZWZsZWN0cyB0aGUgZmFjdCB0aGF0IHlvdSBvbmx5IGNhcmUgdGhhdCB0
aGUgdGFpbCB2YXJpYWJsZSBpcyBhCisgICAgICAgICAgICAvLyBGbHVzaCBvciBQaGFudG9tTG9j
YWwgaWYgbm90aGluZyBlbHNlIGludGVyZXN0aW5nIGhhcHBlbmVkLgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIENoaWxkIG9mIEdldExvY2FsOiB0aGUgb3BlcmF0aW9uIHRoYXQgdGhl
IEdldExvY2FsIGtlZXBzIGFsaXZlLiBGb3IKKyAgICAgICAgICAgIC8vIHVuY2FwdHVyZWQgbG9j
YWxzLCBpdCBtYXkgYmUgYSBQaGkgZnJvbSB0aGUgY3VycmVudCBibG9jay4gRm9yIGFyZ3VtZW50
cywKKyAgICAgICAgICAgIC8vIGl0IG1heSBiZSBhIFNldEFyZ3VtZW50LiBGb3IgY2FwdHVyZWQg
bG9jYWxzIGFuZCBhcmd1bWVudHMgaXQgbWF5IGFsc28gYmUKKyAgICAgICAgICAgIC8vIGEgU2V0
TG9jYWwuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2hpbGQgb2YgU2V0TG9jYWw6
IG11c3QgYmUgYSB2YWx1ZSBwcm9kdWNpbmcgbm9kZS4KKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAvLyBDaGlsZCBvZiBGbHVzaDogaXQgbWF5IGJlIGEgUGhpIGZyb20gdGhlIGN1cnJlbnQg
YmxvY2sgb3IgYSBTZXRMb2NhbC4gRm9yCisgICAgICAgICAgICAvLyBhcmd1bWVudHMgaXQgbWF5
IGFsc28gYmUgYSBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBD
aGlsZCBvZiBQaGFudG9tTG9jYWw6IGl0IG1heSBiZSBhIFBoaSBmcm9tIHRoZSBjdXJyZW50IGJs
b2NrLiBGb3IKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBpdCBtYXkgYWxzbyBiZSBhIFNldEFy
Z3VtZW50LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENoaWxkcmVuIG9mIFBoaTog
b3RoZXIgUGhpcyBpbiB0aGUgc2FtZSBiYXNpYyBibG9jaywgb3IgYW55IG9mIHRoZQorICAgICAg
ICAgICAgLy8gZm9sbG93aW5nIGZyb20gZnJvbSBwcmVkZWNlc3NvciBibG9ja3M6IFNldExvY2Fs
LCBQaGksIG9yIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8gVGhlc2UgYXJlIGNvbXB1dGVk
IGJ5IGxvb2tpbmcgYXQgdGhlIHRhaWwgdmFyaWFibGVzIG9mIHRoZSBwcmVkZWNlc3NvcgorICAg
ICAgICAgICAgLy8gYmxvY2tzIGFuZCBlaXRoZXIgdXNpbmcgaXQgZGlyZWN0bHkgKGlmIGl0J3Mg
YSBTZXRMb2NhbCwgUGhpLCBvcgorICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQpIG9yIGxvYWRp
bmcgdGhhdCBub2RlcyBjaGlsZCAoaWYgaXQncyBhIEdldExvY2FsLCBQaGFub21Mb2NhbCwKKyAg
ICAgICAgICAgIC8vIG9yIEZsdXNoIC0gYWxsIG9mIHRoZXNlIHdpbGwgaGF2ZSBjaGlsZHJlbiB0
aGF0IGFyZSBTZXRMb2NhbCwgUGhpLCBvcgorICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQpLgor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWwo
bm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZVNldExvY2Fs
KG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhh
bnRvbUxvY2FsPEZsdXNoPihub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAg
IGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWw8UGhhbnRvbT4obm9kZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OgorICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZVNldEFyZ3VtZW50KG5vZGUpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzKCkKKyAgICB7
CisgICAgICAgIGZvciAobV9ibG9ja0luZGV4ID0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7IG1f
YmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgbV9ibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
bV9ibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxv
Y2soKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZVBoaXMoKQor
ICAgIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgZmFpbCBp
bnN0YW50bHkuCisgICAgICAgIG1fYmxvY2sgPSAwOworICAgICAgICBtX2Jsb2NrSW5kZXggPSBO
b0Jsb2NrOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKCFtX3BoaVN0YWNrLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgUGhpU3RhY2tFbnRyeSBlbnRyeSA9IG1fcGhpU3RhY2subGFzdCgpOwor
ICAgICAgICAgICAgbV9waGlTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZW50cnkubV9ibG9jazsKKyAgICAgICAgICAgIFBy
ZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPm1fcHJlZGVjZXNzb3JzOworICAg
ICAgICAgICAgTm9kZSogY3VycmVudFBoaSA9IGVudHJ5Lm1fcGhpOworICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGN1cnJlbnRQaGktPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHByZWRlY2Vzc29ycy5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1twcmVkZWNlc3NvcnNbaV1dLmdldCgpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIE5vZGUqIHZhcmlhYmxlSW5QcmV2aW91cyA9IHByZWRlY2Vzc29y
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAg
IGlmICghdmFyaWFibGVJblByZXZpb3VzKSB7CisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxl
SW5QcmV2aW91cyA9IGFkZFBoaShwcmVkZWNlc3NvckJsb2NrLCBjdXJyZW50UGhpLT5jb2RlT3Jp
Z2luLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kRmlyc3RUaW1lKG9wZXJhbmQsIHZhcmlhYmxlSW5QcmV2
aW91cyk7CisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5zZXRPcGVyYW5kRmlyc3RUaW1lKG9wZXJhbmQsIHZhcmlhYmxlSW5QcmV2aW91cyk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YXJp
YWJsZUluUHJldmlvdXMtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFi
bGVJblByZXZpb3VzLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUluUHJldmlvdXMt
PmNoaWxkMSgpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZUluUHJldmlvdXMgPSB2YXJpYWJsZUluUHJldmlvdXMtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgQVNTRVJUKAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluUHJldmlvdXMtPm9wKCkg
PT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgfHwgdmFyaWFibGVJblByZXZpb3VzLT5v
cCgpID09IFBoaQorICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUluUHJldmlvdXMtPm9w
KCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJvb2wgZGlk
U2V0Q2hpbGQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4
ID0gMDsgY2hpbGRJZHggPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2NoaWxkSWR4KSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGhpLT5jaGlsZHJlbi5jaGlsZChjaGlsZElkeCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFBoaS0+Y2hpbGRyZW4uc2V0Q2hpbGQoY2hpbGRJZHgsIEVkZ2UodmFyaWFibGVJblBy
ZXZpb3VzKSk7CisgICAgICAgICAgICAgICAgICAgIGRpZFNldENoaWxkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChkaWRTZXRDaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogbmV3UGhpID0gYWRkUGhpU2lsZW50bHko
YmxvY2ssIGN1cnJlbnRQaGktPmNvZGVPcmlnaW4sIHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAg
ICBuZXdQaGktPmNoaWxkcmVuID0gY3VycmVudFBoaS0+Y2hpbGRyZW47CisgICAgICAgICAgICAg
ICAgY3VycmVudFBoaS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShuZXdQaGksIHZhcmlhYmxlSW5QcmV2
aW91cywgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3Ry
dWN0IFBoaVN0YWNrRW50cnkgeworICAgICAgICBQaGlTdGFja0VudHJ5KEJhc2ljQmxvY2sqIGJs
b2NrLCBOb2RlKiBwaGkpCisgICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgICAg
ICAsIG1fcGhpKHBoaSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgICAgICBOb2RlKiBtX3BoaTsKKyAgICB9OworICAgIAor
ICAgIEJsb2NrSW5kZXggbV9ibG9ja0luZGV4OworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cisg
ICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDY0PiBtX3BoaVN0YWNrOworfTsKKworYm9vbCBwZXJm
b3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgQ1BTIFJldGhyZWFkaW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1
blBoYXNlPENQU1JldGhyZWFkaW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDUFNSZXRocmVhZGluZ1BoYXNl
X2gKKyNkZWZpbmUgREZHQ1BTUmV0aHJlYWRpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDUFMgUmV0aHJlYWRpbmc6CisvLworLy8g
VGFrZXMgYSBncmFwaCBpbiB3aGljaCB0aGVyZSBhcmUgYXJiaXRyYXJ5IEdldExvY2Fscy9TZXRM
b2NhbHMgd2l0aCBubyBjb25uZWN0aW9ucworLy8gYmV0d2VlbiB0aGVtLiBSZW1vdmVzIHJlZHVu
ZGFudCBvbmVzIGluIHRoZSBjYXNlIG9mIHVuY2FwdHVyZWQgdmFyaWFibGVzLiBDb25uZWN0cwor
Ly8gYWxsIG9mIHRoZW0gd2l0aCBQaGkgZnVuY3Rpb25zIHRvIHJlcHJlc2VudCBsaXZlIHJhbmdl
cy4KKworYm9vbCBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw5IEBA
IHB1YmxpYzoKICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9jayA9IDA7IGJsb2NrIDwgbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2spCiAgICAgICAgICAgICBwZXJmb3JtQmxvY2tDU0Uo
bV9ncmFwaC5tX2Jsb2Nrc1tibG9ja10uZ2V0KCkpOwogICAgICAgICAKKyAgICAgICAgaWYgKG1f
Y2hhbmdlZCkKKyAgICAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gTG9hZFN0b3JlOworICAgICAg
ICAKICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CiAgICAgCkBAIC05NzQsMjcgKzk3
Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAg
IHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihFZGdlJiBjaGlsZCwgYm9vbCBhZGRSZWYgPSB0cnVl
KQotICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVu
dXNlZC4KLSAgICAgICAgaWYgKCFjaGlsZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBsYWNlbWVudC4KLSAgICAgICAg
Tm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFjZW1lbnQ7Ci0gICAgICAgIGlmICghcmVw
bGFjZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBjaGlsZC5z
ZXROb2RlKHJlcGxhY2VtZW50KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZXJlIGlzIGRlZmlu
aXRlbHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQgdGhlIHJlcGxhY2VtZW50IGRvZXMgbm90
Ci0gICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4KLSAgICAgICAgQVNTRVJUKCFjaGlsZC0+
cmVwbGFjZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGFkZFJlZikKLSAgICAgICAgICAg
IG1fZ3JhcGgucmVmKGNoaWxkKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBlbGltaW5hdGVJcnJl
bGV2YW50UGhhbnRvbUNoaWxkcmVuKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBBU1NFUlQo
bm9kZS0+b3AoKSA9PSBQaGFudG9tKTsKQEAgLTEwNzIsMjEgKzEwNTQsMTIgQEAgcHJpdmF0ZToK
ICAgICAKICAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAg
ICBib29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKLQotICAgICAg
ICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUt
PmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAg
ICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBw
ZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0
ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxk
MigpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOwogICAgICAgICAKICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCiAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAgIAotICAgICAgICBpZiAoIXNo
b3VsZEdlbmVyYXRlKQorICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKQEAgLTExNjIsMjYgKzExMzUsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IE5vZGUqIHBoaSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmICghc2V0
UmVwbGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAvLyBJZiB0aGUgR2V0TG9jYWwgd2UgcmVwbGFjZWQgdXNlZCB0byByZWZl
ciB0byBhIFNldExvY2FsLCB0aGVuIGl0IG5vdwotICAgICAgICAgICAgLy8gc2hvdWxkIHJlZmVy
IHRvIHRoZSBjaGlsZCBvZiB0aGUgU2V0TG9jYWwgaW5zdGVhZC4KLSAgICAgICAgICAgIGlmIChw
aGktPm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hp
bGQxKCkgPT0gcGhpKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS0+
Y2hpbGRyZW4uY2hpbGQxKCksIHBoaS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgTm9kZSogb2xkVGFpbCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZCgKLSAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwotICAg
ICAgICAgICAgaWYgKG9sZFRhaWwgPT0gbm9kZSkgewotICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2Fs
KCkpID0KLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIE1haW50YWluIGdyYXBoIGludGVncml0eTogc2luY2Ug
d2UncmUgcmVwbGFjaW5nIGEgR2V0TG9jYWwgd2l0aCBhIEdldExvY2FsVW5saW5rZWQsCi0gICAg
ICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIEdldExvY2FsVW5saW5rZWQgaXMgbm93
IGxpbmtlZC4KLSAgICAgICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpID09IEdl
dExvY2FsVW5saW5rZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wLT5z
ZXRPcChHZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+Y2hp
bGRyZW4uY2hpbGQxKCkgPSBFZGdlKHBoaSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
cmVmKHBoaSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHdlIHJl
cGxhY2UgYSBHZXRMb2NhbCB3aXRoIGEgR2V0TG9jYWxVbmxpbmtlZCwgdGhlbiB0dXJuIHRoZSBH
ZXRMb2NhbFVubGlua2VkCisgICAgICAgICAgICAvLyBpbnRvIGEgR2V0TG9jYWwuCisgICAgICAg
ICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpID09IEdldExvY2FsVW5saW5rZWQpIHsKKyAg
ICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNvbnZlcnRUb0dldExvY2FsKHZhcmlhYmxl
QWNjZXNzRGF0YSwgcGhpKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGkpOwogICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTEyMzUsOSArMTE5OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoZGF0YU5vZGUpOwogICAgICAgICAgICAgbV9ncmFw
aC5yZWYoZGF0YU5vZGUpOwotICAgICAgICAgICAgTm9kZSogb2xkVGFpbCA9IG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICBpZiAob2xk
VGFpbCA9PSBub2RlKQotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChsb2NhbCkgPSByZXBsYWNlbWVudDsKKyAgICAgICAgICAgIG1fZ3JhcGgu
ZGV0aHJlYWQoKTsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjMsNjAgKzMyMyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
IXZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICBO
b2RlKiBwcmV2aW91c0xvY2FsQWNjZXNzID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vZGUKLSAgICAgICAg
ICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSBjb21tb24gY2FzZS4KLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0luUGhpcyhub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gcHJldmlvdXNMb2NhbEFjY2VzczsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5kZXhJbkJsb2Nr
ID4gMCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE11c3Qgc2VhcmNoIGZvciB0aGUgcHJldmlv
dXMgYWNjZXNzIHRvIHRoaXMgbG9jYWwuCi0gICAgICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBzdWJJbmRleEluQmxvY2sgPSBpbmRleEluQmxvY2s7IHN1YkluZGV4SW5CbG9jay0tOykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3ViTm9kZSA9IGJsb2NrLT5hdChzdWJJ
bmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdWJOb2RlLT5sb2NhbCgpICE9IG5vZGUtPmxvY2FsKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgdHdvIG11c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoc3ViTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2Vz
cyA9IHN1Yk5vZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzTG9jYWxBY2Nlc3Mp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyBhY2Nlc3MgbXVzdCBo
YXZlIGJlZW4gYSBQaGkuCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
cGhpSW5kZXhJbkJsb2NrID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleEluQmxvY2stLTsp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBo
aXNbcGhpSW5kZXhJbkJsb2NrXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBo
aU5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5sb2Nh
bCgpICE9IG5vZGUtPmxvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0d28gbXVzdCBoYXZl
IGJlZW4gdW5pZmllZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocGhpTm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBwaGlOb2Rl
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nl
c3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlQocHJldmlvdXNMb2NhbEFjY2Vzcyk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSogdGFpbE5vZGUgPSBibG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHRhaWxOb2RlID09IG5vZGUpCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nlc3M7
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRhaWxOb2RlLT5vcCgpID09IEZsdXNoCi0gICAgICAgICAg
ICAgICAgICAgICAgICB8fCB0YWlsTm9kZS0+b3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgaXNDYXB0dXJlZEF0T3JBZnRlcihibG9jaywgaW5kZXhJbkJsb2NrLCBu
b2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCiAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3Jp
Z2luOwogICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkcmVu
OwogICAgICAgICAgICAgICAgIApAQCAtMzg0LDYgKzMzMCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNv
ZGVPcmlnaW4sIGNoaWxkcmVuKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5k
ZXRocmVhZCgpOwogICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgbV9zdGF0ZS5yZXNldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkocmV2aXNpb24gMTQxNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTUgQEAKICNpbmNsdWRl
ICJERkdCeXRlQ29kZVBhcnNlci5oIgogI2luY2x1ZGUgIkRGR0NGQVBoYXNlLmgiCiAjaW5jbHVk
ZSAiREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR0NQU1JldGhyZWFk
aW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgogI2luY2x1ZGUg
IkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCIKKyNpbmNsdWRlICJERkdVbmlmaWNh
dGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNpbmNsdWRlICJERkdWaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCkBA
IC0xMDIsOSArMTA1LDYgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxl
TQogICAgIGlmICghcGFyc2UoZXhlYywgZGZnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAotICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pCi0gICAgICAgIGRmZy5w
cmVkaWN0QXJndW1lbnRUeXBlcygpOwotICAgIAogICAgIC8vIEJ5IHRoaXMgcG9pbnQgdGhlIERG
RyBieXRlY29kZSBwYXJzZXIgd2lsbCBoYXZlIHBvdGVudGlhbGx5IG11dGF0ZWQgdmFyaW91cyB0
YWJsZXMKICAgICAvLyBpbiB0aGUgQ29kZUJsb2NrLiBUaGlzIGlzIGEgZ29vZCB0aW1lIHRvIHBl
cmZvcm0gYW4gZWFybHkgc2hyaW5rLCB3aGljaCBpcyBtb3JlCiAgICAgLy8gcG93ZXJmdWwgdGhh
biBhIGxhdGUgb25lLiBJdCdzIHNhZmUgdG8gZG8gc28gYmVjYXVzZSB3ZSBoYXZlbid0IGdlbmVy
YXRlZCBhbnkgY29kZQpAQCAtMTEzLDI3ICsxMTMsNDIgQEAgaW5saW5lIGJvb2wgY29tcGlsZShD
b21waWxlTW9kZSBjb21waWxlTQogCiAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAg
ICAgIHZhbGlkYXRlKGRmZyk7CisgICAgCisgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7
CisgICAgcGVyZm9ybVVuaWZpY2F0aW9uKGRmZyk7CisgICAgcGVyZm9ybVByZWRpY3Rpb25Jbmpl
Y3Rpb24oZGZnKTsKKyAgICAKKyAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAg
dmFsaWRhdGUoZGZnKTsKKyAgICAKICAgICBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKGRm
Zyk7CiAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgcGVyZm9ybVN0cnVjdHVyZUNoZWNrSG9p
c3RpbmcoZGZnKTsKKyAgICAKICAgICB1bnNpZ25lZCBjbnQgPSAxOwogICAgIGRmZy5tX2ZpeHBv
aW50U3RhdGUgPSBGaXhwb2ludE5vdENvbnZlcmdlZDsKICAgICBmb3IgKDs7ICsrY250KSB7CiAg
ICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRh
TG9nRigiREZHIGJlZ2lubmluZyBvcHRpbWl6YXRpb24gZml4cG9pbnQgaXRlcmF0aW9uICMldS5c
biIsIGNudCk7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKICAgICAg
ICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Db25zdGFudEZv
bGRpbmcoZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQXJndW1lbnRzU2ltcGxpZmlj
YXRpb24oZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ0ZHU2ltcGxpZmljYXRpb24o
ZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ1NFKGRmZyk7CisgICAgICAgIAogICAg
ICAgICBpZiAoIWNoYW5nZWQpCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgICAg
IGRmZy5yZXNldEV4aXRTdGF0ZXMoKTsKICAgICAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CisgICAg
ICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgIH0KKyAgICAKICAgICBkZmcubV9m
aXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7CiAgICAgcGVyZm9ybUNTRShkZmcpOwor
ICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOyAvLyBUaGlzIHNob3VsZCB1c3VhbGx5IGJl
IGEgbm8tb3Agc2luY2UgQ1NFIHJhcmVseSBkZXRocmVhZHMgdGhlIGdyYXBoLgogICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgIGRhdGFMb2dGKCJERkcgb3B0aW1p
emF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBpbiAldSBpdGVyYXRpb25zLlxuIiwgY250KTsKICAg
ICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1
Myw4IEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEMKICAgICAsIG1f
b3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAsIG1fbXVz
dEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQogICAgICwgbV9maXhwb2ludFN0YXRlKEJl
Zm9yZUZpeHBvaW50KQorICAgICwgbV9mb3JtKExvYWRTdG9yZSkKKyAgICAsIG1fdW5pZmljYXRp
b25TdGF0ZShMb2NhbGx5VW5pZmllZCkKIHsKICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsK
IH0KQEAgLTE5NSw5ICsxOTcsMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0
LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzdHJ1Y3QoIiwgUmF3UG9pbnRlcihu
b2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSwgIiAtPiAi
LCBSYXdQb2ludGVyKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJl
KSwgIikiKTsKICAgICBpZiAobm9kZS0+aGFzRnVuY3Rpb24oKSkgewogICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJmdW5jdGlvbigiLCBSYXdQb2ludGVyKG5vZGUtPmZ1bmN0aW9uKCkpLCAiLCAi
KTsKLSAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpz
X2luZm8pKQotICAgICAgICAgICAgb3V0LnByaW50KEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAoanND
YXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpKS0+anNFeGVjdXRhYmxlKCkpKTsKLSAg
ICAgICAgZWxzZQorICAgICAgICBpZiAobm9kZS0+ZnVuY3Rpb24oKS0+aW5oZXJpdHMoJkpTRnVu
Y3Rpb246OnNfaW5mbykpIHsKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganND
YXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpKTsKKyAgICAgICAgICAgIGlmIChmdW5j
dGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIjxob3N0
IGZ1bmN0aW9uPiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmlu
dChGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKSkpOworICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIG91dC5wcmludCgiPG5vdCBKU0Z1bmN0aW9uPiIpOwog
ICAgICAgICBvdXQucHJpbnQoIikiKTsKICAgICB9CkBAIC0zNzcsMjIgKzM4MywyMiBAQCB2b2lk
IEdyYXBoOjpkZXJlZkNoaWxkcmVuKE5vZGUqIG9wKQogICAgIERPX1RPX0NISUxEUkVOKG9wLCBk
ZXJlZik7CiB9CiAKLXZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKCkKK3ZvaWQgR3Jh
cGg6OmRldGhyZWFkKCkKIHsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSA+PSAxKTsKLSAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgewotICAgICAgICBWYWx1
ZVByb2ZpbGUqIHByb2ZpbGUgPSBtX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3Vt
ZW50KGFyZyk7Ci0gICAgICAgIGlmICghcHJvZmlsZSkKKyAgICBpZiAobV9mb3JtID09IExvYWRT
dG9yZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gbV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxv
Y2spCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIG1fYXJndW1lbnRz
W2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRh
dGVkUHJlZGljdGlvbigpKTsKLSAgICAgICAgCi0jaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQotICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIkFyZ3VtZW50IFsiLCBhcmcsICJdIHBy
ZWRpY3Rpb246ICIsCi0gICAgICAgICAgICBTcGVjdWxhdGlvbkR1bXAobV9hcmd1bWVudHNbYXJn
XS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSksICJcbiIpOwotI2VuZGlmCisg
ICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUlu
ZGV4LS07KSB7CisgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07
CisgICAgICAgICAgICBwaGktPmNoaWxkcmVuLnJlc2V0KCk7CisgICAgICAgIH0KICAgICB9Cisg
ICAgCisgICAgbV9mb3JtID0gTG9hZFN0b3JlOwogfQogCiB2b2lkIEdyYXBoOjpoYW5kbGVTdWNj
ZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJ
bmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNjAgQEAgZW51bSBB
ZGRTcGVjdWxhdGlvbk1vZGUgewogICAgIFNwZWN1bGF0ZUludGVnZXJCdXRBbHdheXNXYXRjaE92
ZXJmbG93LAogICAgIFNwZWN1bGF0ZUludGVnZXIKIH07CisKKy8vIERlc2NyaWJlcyB0aGUgZm9y
bSB5b3UgY2FuIGV4cGVjdCB0aGUgZW50aXJlIGdyYXBoIHRvIGJlIGluLgorZW51bSBHcmFwaEZv
cm0geworICAgIC8vIExvYWRTdG9yZSBmb3JtIG1lYW5zIHRoYXQgYmFzaWMgYmxvY2tzIG1heSBm
cmVlbHkgdXNlIEdldExvY2FsLCBTZXRMb2NhbCwKKyAgICAvLyBHZXRMb2NhbFVubGlua2VkLCBh
bmQgRmx1c2ggZm9yIGFjY2Vzc2luZyBsb2NhbCB2YXJpYWJsZXMgYW5kIGluZGljYXRpbmcKKyAg
ICAvLyB3aGVyZSB0aGVpciBsaXZlIHJhbmdlcyBvdWdodCB0byBiZS4gTGl2ZW5lc3MgaXMgaW1w
bGljaXQsIGFzIGlzIHRoZSBkYXRhCisgICAgLy8gZmxvdyBiZXR3ZWVuIGxvY2FsIGFjY2Vzc2Vz
LiBGb3IgZXhhbXBsZSwgTG9hZFN0b3JlIGZvcm0gZ2l2ZXMgbm8gZWFzeSB3YXkKKyAgICAvLyB0
byBkZXRlcm1pbmUgd2hpY2ggU2V0TG9jYWwncyBmbG93IGludCBvIGEgR2V0TG9jYWwuIEFzIHdl
bGwsIExvYWRTdG9yZQorICAgIC8vIGZvcm0gaW1wbGllcyBubyByZXN0cmljdGlvbnMgb24gcmVk
dW5kYW5jeTogeW91IGNhbiBmcmVlbHkgZW1pdCBtdWx0aXBsZQorICAgIC8vIEdldExvY2Fscywg
b3IgbXVsdGlwbGUgU2V0TG9jYWxzIChvciBhbnkgY29tYmluYXRpb24gdGhlcmVvZikgdG8gdGhl
IHNhbWUKKyAgICAvLyBsb2NhbCBpbiB0aGUgc2FtZSBibG9jay4gTG9hZFN0b3JlIGZvcm0gZG9l
cyBub3QgcmVxdWlyZSBiYXNpYyBibG9ja3MgdG8KKyAgICAvLyBkZWNsYXJlIGhvdyB0aGV5IGFm
ZmVjdCBvciB1c2UgbG9jYWxzLCBvdGhlciB0aGFuIGltcGxpY2l0bHkgYnkgdXNpbmcKKyAgICAv
LyB0aGUgbG9jYWwgb3BzLiBGaW5hbGx5LCBMb2FkU3RvcmUgYWxsb3dzIGZsZXhpYmlsaXR5IGlu
IGhvdyBsaXZlbmVzcyBvZgorICAgIC8vIGxvY2FscyBpcyBleHRlbmRlZDsgZm9yIGV4YW1wbGUg
eW91IGNhbiByZXBsYWNlIGEgR2V0TG9jYWwgd2l0aCBhIFBoYW50b20KKyAgICAvLyBhbmQgc28g
bG9uZyBhcyB0aGUgUGhhbnRvbSByZXRhaW5zIHRoZSBHZXRMb2NhbCdzIGNoaWxkcmVuIChpLmUu
IHRoZSBQaGkKKyAgICAvLyBtb3N0IGxpa2VseSkgdGhlbiBpdCBpbXBsaWVzIHRoYXQgdGhlIGxv
Y2FsIGlzIHN0aWxsIGxpdmUgYnV0IHRoYXQgaXQgbmVlZAorICAgIC8vIG5vdCBiZSBzdG9yZWQg
dG8gdGhlIHN0YWNrIG5lY2Vzc2FyaWx5LiBUaGlzIGltcGxpZXMgdGhhdCBQaGFudG9tIGNhbgor
ICAgIC8vIHJlZmVyZW5jZSBub2RlcyB0aGF0IGhhdmUgbm8gcmVzdWx0LCBhcyBsb25nIGFzIHRo
b3NlIG5vZGVzIGFyZSB2YWxpZAorICAgIC8vIEdldExvY2FsIGNoaWxkcmVuIChpLmUuIFBoaSwg
U2V0TG9jYWwsIFNldEFyZ3VtZW50KS4KKyAgICAvLworICAgIC8vIExvYWRTdG9yZSBmb3JtIGFs
c28gaW1wbGllcyB0aGF0IFBoaXMgdGhlbXNlbHZlcyBjYW4gaGF2ZSBhcmJpdHJhcnkKKyAgICAv
LyBjaGlsZHJlbi4gUGhpIGNoaWxkcmVuIGNvdWxkIGV2ZW4gYmUgZGFuZ2xpbmcsIGFuZCBzaG91
bGQgbm90IGJlIHJlbGllZAorICAgIC8vIHVwb24uCisgICAgLy8KKyAgICAvLyBMb2FkU3RvcmUg
Zm9ybSBpcyBzdWl0YWJsZSBmb3IgQ0ZHIHRyYW5zZm9ybWF0aW9ucywgYXMgd2VsbCBhcyBzdHJl
bmd0aAorICAgIC8vIHJlZHVjdGlvbiwgZm9sZGluZywgYW5kIENTRS4KKyAgICBMb2FkU3RvcmUs
CisgICAgCisgICAgLy8gVGhyZWFkZWRDUFMgZm9ybSBtZWFucyB0aGF0IGJhc2ljIGJsb2NrcyBs
aXN0IHVwLWZyb250IHdoaWNoIGxvY2FscyB0aGV5CisgICAgLy8gZXhwZWN0IHRvIGJlIGxpdmUg
YXQgdGhlIGhlYWQsIGFuZCB3aGljaCBsb2NhbHMgdGhleSBtYWtlIGF2YWlsYWJsZSBhdCB0aGUK
KyAgICAvLyB0YWlsLiBUaHJlYWRlZENQUyBmb3JtIGFsc28gaW1wbGllcyB0aGF0OgorICAgIC8v
CisgICAgLy8gLSBHZXRMb2NhbHMgYW5kIFNldExvY2FscyB0byB1bmNhcHR1cmVkIHZhcmlhYmxl
cyBhcmUgbm90IHJlZHVuZGFudCB3aXRoaW4KKyAgICAvLyAgIGEgYmFzaWMgYmxvY2suCisgICAg
Ly8KKyAgICAvLyAtIEFsbCBHZXRMb2NhbHMgYW5kIEZsdXNoZXMgYXJlIGxpbmtlZCBkaXJlY3Rs
eSB0byB0aGUgbGFzdCBhY2Nlc3MgcG9pbnQKKyAgICAvLyAgIG9mIHRoZSB2YXJpYWJsZSwgd2hp
Y2ggbXVzdCBub3QgYmUgYW5vdGhlciBHZXRMb2NhbCBpZiB0aGUgdmFyaWFibGUgaXMKKyAgICAv
LyAgIHVuY2FwdHVyZWQuCisgICAgLy8KKyAgICAvLyAtIFBoYW50b20oUGhpKSBpcyBub3QgbGVn
YWwsIGJ1dCBQaGFudG9tTG9jYWwgaXMuCisgICAgLy8KKyAgICAvLyBUaHJlYWRlZENQUyBmb3Jt
IGlzIHN1aXRhYmxlIGZvciBkYXRhIGZsb3cgYW5hbHlzaXMgKENGQSwgcHJlZGljdGlvbgorICAg
IC8vIHByb3BhZ2F0aW9uKSwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgYW5kIGNvZGUgZ2VuZXJhdGlv
bi4KKyAgICBUaHJlYWRlZENQUworfTsKKworLy8gRGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiB0aGUg
VW5pb25GaW5kIHN0cnVjdHVyZSBvZiBWYXJpYWJsZUFjY2Vzc0RhdGEncy4KK2VudW0gVW5pZmlj
YXRpb25TdGF0ZSB7CisgICAgLy8gQmFzaWNCbG9jay1sb2NhbCBhY2Nlc3NlcyB0byB2YXJpYWJs
ZXMgYXJlIGFwcHJvcHJpYXRlbHkgdW5pZmllZCB3aXRoIGVhY2ggb3RoZXIuCisgICAgTG9jYWxs
eVVuaWZpZWQsCiAgICAgCisgICAgLy8gVW5pZmljYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkIGds
b2JhbGx5LgorICAgIEdsb2JhbGx5VW5pZmllZAorfTsKIAogLy8KIC8vID09PSBHcmFwaCA9PT0K
QEAgLTE2Nyw2ICsyMjAsNDAgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxk
MihOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAxKTsgfQogICAgIHZvaWQg
Y2xlYXJBbmREZXJlZkNoaWxkMyhOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2Rl
LCAyKTsgfQogICAgIAorICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihOb2RlKiBub2RlKQor
ICAgIHsKKyAgICAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRl
KCk7CisgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxk
SWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgr
KykKKyAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShtX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQx
KCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JF
ZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAg
ICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgc2hv
dWxkR2VuZXJhdGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybVN1
YnN0aXR1dGlvbkZvckVkZ2UoRWRnZSYgY2hpbGQsIGJvb2wgYWRkUmVmKQorICAgIHsKKyAgICAg
ICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVudXNlZC4KKyAgICAgICAg
aWYgKCFjaGlsZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIENo
ZWNrIGlmIHRoZXJlIGlzIGFueSByZXBsYWNlbWVudC4KKyAgICAgICAgTm9kZSogcmVwbGFjZW1l
bnQgPSBjaGlsZC0+cmVwbGFjZW1lbnQ7CisgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBjaGlsZC5zZXROb2RlKHJlcGxhY2Vt
ZW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZXJlIGlzIGRlZmluaXRlbHkgYSByZXBsYWNl
bWVudC4gQXNzZXJ0IHRoYXQgdGhlIHJlcGxhY2VtZW50IGRvZXMgbm90CisgICAgICAgIC8vIGhh
dmUgYSByZXBsYWNlbWVudC4KKyAgICAgICAgQVNTRVJUKCFjaGlsZC0+cmVwbGFjZW1lbnQpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGFkZFJlZikKKyAgICAgICAgICAgIHJlZihjaGlsZCk7Cisg
ICAgfQorICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1w
bGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1
ZUFyZ3MpIFwKICAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBh
ZGROb2RlKFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5v
ZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMp
IFwKICAgICB7IFwKQEAgLTE4Myw2ICsyNzAsOCBAQCBwdWJsaWM6CiAgICAgREZHX1ZBUklBRElD
X1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQUREX05PREUpCiAjdW5kZWYgREZHX0RFRklO
RV9BRERfTk9ERQogCisgICAgdm9pZCBkZXRocmVhZCgpOworICAgIAogICAgIC8vIENhbGwgdGhp
cyBpZiB5b3UndmUgbW9kaWZpZWQgdGhlIHJlZmVyZW5jZSBjb3VudHMgb2Ygbm9kZXMgdGhhdCBk
ZWFsIHdpdGgKICAgICAvLyBsb2NhbCB2YXJpYWJsZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1
c2UgbG9jYWwgdmFyaWFibGUgcmVmZXJlbmNlcyBjYW4gZm9ybQogICAgIC8vIGN5Y2xlcywgYW5k
IGhlbmNlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBub3QgZW5vdWdoLiBUaGlzIHdpbGwgcmVzZXQg
dGhlCkBAIC0zNTEsOCArNDQwLDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIg
Km9wTmFtZShOb2RlVHlwZSk7CiAgICAgCi0gICAgdm9pZCBwcmVkaWN0QXJndW1lbnRUeXBlcygp
OwotICAgIAogICAgIFN0cnVjdHVyZVNldCogYWRkU3RydWN0dXJlU2V0KGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlU2V0KQogICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZVNldC5z
aXplKCkpOwpAQCAtNzE4LDYgKzgwNSw4IEBAIHB1YmxpYzoKICAgICBPcGVyYW5kczxKU1ZhbHVl
PiBtX211c3RIYW5kbGVWYWx1ZXM7CiAgICAgCiAgICAgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0
ZSBtX2ZpeHBvaW50U3RhdGU7CisgICAgR3JhcGhGb3JtIG1fZm9ybTsKKyAgICBVbmlmaWNhdGlv
blN0YXRlIG1fdW5pZmljYXRpb25TdGF0ZTsKIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5k
bGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXgg
YmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTQxNzIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw2ICszMDQsMjIgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAg
ICB9CiAgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QaGFudG9tTG9jYWwoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fb3AgPT0gUGhhbnRvbSAmJiAoY2hpbGQxKCktPm9wKCkgPT0gUGhpIHx8IGNo
aWxkMSgpLT5vcCgpID09IFNldExvY2FsIHx8IGNoaWxkMSgpLT5vcCgpID09IFNldEFyZ3VtZW50
KSk7CisgICAgICAgIG1fb3AgPSBQaGFudG9tTG9jYWw7CisgICAgICAgIG1fb3BJbmZvID0gY2hp
bGQxKCktPm1fb3BJbmZvOyAvLyBDb3B5IHRoZSB2YXJpYWJsZUFjY2Vzc0RhdGEuCisgICAgICAg
IGNoaWxkcmVuLnNldENoaWxkMShFZGdlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbnZl
cnRUb0dldExvY2FsKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUsIE5vZGUqIHBoaSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX29wID09IEdldExvY2FsVW5saW5rZWQpOworICAgICAgICBt
X29wID0gR2V0TG9jYWw7CisgICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4odmFyaWFibGUpOworICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShwaGkpKTsKKyAg
ICB9CisgICAgCiAgICAgSlNDZWxsKiB3ZWFrQ29uc3RhbnQoKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG9wKCkgPT0gV2Vha0pTQ29uc3RhbnQpOwpAQCAtMzU4LDYgKzM3NCw3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAg
ICAgIGNhc2UgRmx1c2g6CisgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAx
NDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogICAgIG1hY3JvKE5vcCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhpLCBOb2Rl
RG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikgXAogICAgIG1hY3JvKEZsdXNoLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oUGhhbnRvbUxvY2Fs
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgXAogICAgIC8qIEdl
dCB0aGUgdmFsdWUgb2YgYSBsb2NhbCB2YXJpYWJsZSwgd2l0aG91dCBsaW5raW5nIGludG8gdGhl
IFZhcmlhYmxlQWNjZXNzRGF0YSAqL1wKICAgICAvKiBuZXR3b3JrLiBUaGlzIGlzIG9ubHkgdmFs
aWQgZm9yIHZhcmlhYmxlIGFjY2Vzc2VzIHdob3NlIHByZWRpY3Rpb25zIG9yaWdpbmF0ZWQgKi9c
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNl
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIFByZWRpY3Rpb25JbmplY3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CitwdWJsaWM6CisgICAgUHJlZGljdGlvbkluamVjdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgOiBQaGFzZShncmFwaCwgInByZWRpY3Rpb24gaW5qZWN0aW9uIikKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1f
Zm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fdW5pZmljYXRp
b25TdGF0ZSA9PSBHbG9iYWxseVVuaWZpZWQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkgPj0gMSk7CisgICAgICAgIGZvciAoc2l6ZV90IGFy
ZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKSk7ICsrYXJnKSB7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBwcm9m
aWxlZEJsb2NrKCktPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgICAgICBp
ZiAoIXByb2ZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkpOworICAgICAgICAg
ICAgCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICAgICAiQXJndW1lbnQgWyIsIGFyZywgIl0gcHJlZGljdGlvbjogIiwKKyAg
ICAgICAgICAgICAgICBTcGVjdWxhdGlvbkR1bXAobV9hcmd1bWVudHNbYXJnXS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSksICJcbiIpOworI2VuZGlmCisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fb3Ny
RW50cnlCeXRlY29kZUluZGV4KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVz
QXRIZWFkLm9wZXJhbmQoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9tdXN0SGFuZGxl
VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+aGFzTG9jYWwoKSk7CisgICAgICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPnByZWRpY3QoCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1f
Z3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK2Jvb2wgcGVyZm9y
bVByZWRpY3Rpb25JbmplY3Rpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgUHJlZGljdGlvbiBJbmplY3Rpb24gUGhhc2UiKTsKKyAgICBy
ZXR1cm4gcnVuUGhhc2U8UHJlZGljdGlvbkluamVjdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
R3JhcGg7CisKKy8vIFByZWRpY3Rpb24gSW5qZWN0aW9uOgorLy8KKy8vIFRha2VzIG1pc2NlbGxh
bmVvdXMgZGF0YSBhYm91dCB2YXJpYWJsZSB0eXBlIHByZWRpY3Rpb25zIGFuZCBpbmplY3RzIHRo
ZW0uCisvLyBUaGlzIGluY2x1ZGVzIGFyZ3VtZW50IHByZWRpY3Rpb25zIGFuZCBPU1IgZW50cnkg
cHJlZGljdGlvbnMuCisKK2Jvb2wgcGVyZm9ybVByZWRpY3Rpb25JbmplY3Rpb24oR3JhcGgmKTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2VfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw2ICs0Myw5IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAgeworICAg
ICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICBBU1NF
UlQobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gR2xvYmFsbHlVbmlmaWVkKTsKKyAgICAg
ICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBt
X2NvdW50ID0gMDsKICNlbmRpZgpAQCAtODEyLDYgKzgxNSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgICAgIGNhc2UgTm9wOgogICAgICAgICBjYXNlIENvdW50
RXhlY3V0aW9uOgorICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTGFzdE5vZGVUeXBlOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDA3LDYgKzUwMDcsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBQaGFudG9t
OgorICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AuCiAg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksNiArNDksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gJm1f
Z3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxl
LT5pc1Jvb3QoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdV
bmlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2UuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNs
dWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFVuaWZp
Y2F0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFVuaWZpY2F0aW9uUGhh
c2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAidW5pZmljYXRpb24iKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgu
bV91bmlmaWNhdGlvblN0YXRlID09IExvY2FsbHlVbmlmaWVkKTsKKyAgICAgICAgCisgICAgICAg
IC8vIEVuc3VyZSB0aGF0IGFsbCBQaGkgZnVuY3Rpb25zIGFyZSB1bmlmaWVkLgorICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9j
a0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJs
ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBi
bG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSog
cGhpID0gYmxvY2stPnBoaXNbcGhpSW5kZXhdOworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY2hpbGRJZHggPSAwOyBjaGlsZElkeCA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsrY2hpbGRJ
ZHgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwaGktPmNoaWxkcmVuLmNoaWxkKGNoaWxk
SWR4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgcGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dW5pZnko
CisgICAgICAgICAgICAgICAgICAgICAgICBwaGktPmNoaWxkcmVuLmNoaWxkKGNoaWxkSWR4KS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgYWxsIHByZWRpY3Rp
b25zIGFyZSBmaXhlZCB1cCBiYXNlZCBvbiB0aGUgdW5pZmljYXRpb24uCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGEgPSAmbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKKyAgICAgICAgICAgIGRhdGEtPmZpbmQoKS0+cHJlZGlj
dChkYXRhLT5ub25VbmlmaWVkUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGRhdGEtPmZpbmQo
KS0+bWVyZ2VJc0NhcHR1cmVkKGRhdGEtPmlzQ2FwdHVyZWQoKSk7CisgICAgICAgICAgICBkYXRh
LT5maW5kKCktPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZChkYXRhLT5zdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBt
X2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9IEdsb2JhbGx5VW5pZmllZDsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtVW5pZmljYXRpb24oR3JhcGgmIGdy
YXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgVW5pZmljYXRp
b24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8VW5pZmljYXRpb25QaGFzZT4oZ3JhcGgp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBo
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNh
dGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1VuaWZpY2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1VuaWZp
Y2F0aW9uUGhhc2VfaAorI2RlZmluZSBERkdVbmlmaWNhdGlvblBoYXNlX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFVuaWZpY2F0aW9uOgorLy8K
Ky8vIEV4YW1pbmVzIGFsbCBQaGkgZnVuY3Rpb25zIGFuZCBlbnN1cmVzIHRoYXQgdGhlIHZhcmlh
YmxlIGFjY2VzcyBkYXRhcyBhcmUKKy8vIHVuaWZpZWQuIFRoaXMgY3JlYXRlcyBvdXIgImxpdmUt
cmFuZ2Ugc3BsaXQiIHZpZXcgb2YgdmFyaWFibGVzLgorCitib29sIHBlcmZvcm1VbmlmaWNhdGlv
bihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1VuaWZpY2F0aW9uUGhhc2VfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTQxNzIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMCw2ICsxMDAsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICgh
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRy
ZW4obm9kZSk7ICsraikgeworICAgICAgICAgICAgICAgICAgICAvLyBQaGkgY2hpbGRyZW4gaW4g
TG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhpSW5kZXgoaSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtMTA5LDEwICsxMTMsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBV
bmxlc3MgSSdtIGEgRmx1c2gsIFBoYW50b20sIEdldExvY2FsLCBvciBQaGksIG15IGNoaWxkcmVu
IHNob3VsZCBoYXNSZXN1bHQoKS4KICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhp
OgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5o
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gTG9jYWxseVVuaWZpZWQpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZSwgZWRnZSksIGVkZ2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmICFqKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNSZXN1bHQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzMyw3ICsxNDcsMTAgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwogICAgICAgICAgICAg
ICAgIGlmIChibG9jay0+aXNQaGlJbmRleChpKSkKICAgICAgICAgICAgICAgICAgICAgcGhpc0lu
VGhpc0Jsb2NrLmFkZChub2RlKTsKLSAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbXlS
ZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyB8fCAhbm9kZS0+aGFzVmFy
aWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBt
eVJlZkNvdW50cy5nZXQobm9kZSksIG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG15UmVm
Q291bnRzLmdldChub2RlKSA/IG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA6IHRydWUpOwogICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVu
KG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5j
aGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQpAQCAtMTQ4LDYg
KzE2NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2Rl
LT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0g
bm9kZS0+bG9jYWwoKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
bV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFBoaSBjaGlsZHJlbiBpbiBMb2FkU3RvcmUgZm9ybSBhcmUgaW52YWxpZC4KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiBibG9jay0+aXNQaGlJ
bmRleChpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChu
b2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC0xODMsMTcgKzIwNCwyNCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmlu
ZyB0byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFibGUuCiAgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrSW5kZXgsIEJsb2NrLCBibG9jay0+bV9w
cmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cHJldk5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHByZXZOb2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExv
Y2FsOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZOb2RlID0gcHJldk5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJl
ZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9w
cmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFBoaSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlID09IGVkZ2Uubm9kZSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjE0LDEwICsyNDIsMTggQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgo
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihhcmd1bWVudFRvT3BlcmFuZChpKSksIGJsb2Nr
SW5kZXgpLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFy
aWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQorICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihhcmd1bWVu
dFRvT3BlcmFuZChpKSksIGJsb2NrSW5kZXgpLCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1
bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkpLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZ2V0TG9j
YWxQb3NpdGlvbnMuYXJndW1lbnQoaSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgc2V0TG9j
YWxQb3NpdGlvbnMuYXJndW1lbnQoaSkgPSBub3RTZXQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZMb2NhbHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4oaSksIGJsb2NrSW5kZXgpLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5sb2NhbChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRo
cmVhZGVkQ1BTKQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihpKSwgYmxvY2tJbmRleCksICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmxv
Y2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgpKTsKKwogICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLmxvY2FsKGkp
ID0gbm90U2V0OwogICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLmxvY2FsKGkpID0g
bm90U2V0OwogICAgICAgICAgICAgfQpAQCAtMjMxLDYgKzI2NywxOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIG5vZGVzSW5U
aGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgorICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgIWopCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksICFwaGlzSW5UaGlzQmxvY2suY29udGFpbnMo
ZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKQEAgLTIzOSw3ICsyODcsOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUsIGJsb2NrSW5kZXgpLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpID09IG5vdFNldCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9
PSBUaHJlYWRlZENQUykKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBi
bG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBu
b3RTZXQpOwogICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgY2FzZSBTZXRMb2NhbDoKQEAgLTI1Niw2ICszMDUsOSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgY2hlY2tPcGVyYW5kKAogICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LCBnZXRMb2Nh
bFBvc2l0aW9ucywgc2V0TG9jYWxQb3NpdGlvbnMsIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDIwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBuZWVkc05ld0xpbmUgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSB8fCBub2RlLT5vcCgpID09IFBoaSB8
fCBub2RlLT5vcCgpID09IEZsdXNoKQorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBQaGk6
CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50
b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
Y2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDEo
KS0+aGFzUmVzdWx0KCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGNhbGwgdXNl
IG9uIGFsbCBvZiB0aGUgY3VycmVudCBub2RlJ3MgY2hpbGRyZW4sIHRoZW4KICAgICAgICAgICAg
ICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBkbyBz
byBpbiB0aGlzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186292</attachid>
            <date>2013-02-03 20:31:56 -0800</date>
            <delta_ts>2013-02-03 23:15:38 -0800</delta_ts>
            <desc>It runs all of the things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>113744</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDE3MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsMTIgQEAKIAkJMEYyMUMyN0QxNEJFNzI3
QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAvKiBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5dGVjb2RlQ29u
dmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNDJEQTcxM0Yz
QjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNTI2RTIxNkJDOTIwRjAwNzVENjNFIC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyNTI2REIxNkJDOTIwRDAwNzVENjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwICovOyB9OworCQkwRjI1MjZFMzE2QkM5MjExMDA3NUQ2M0UgLyogREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyNTI2REMxNkJDOTIwRDAwNzVENjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1MjZF
NDE2QkM5MjE1MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjUyNkREMTZCQzky
MEQwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9OworCQkw
RjI1MjZFNTE2QkM5MjE3MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1MjZERTE2
QkM5MjBEMDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNTI2RTYxNkJDOTIx
QTAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTI2REYxNkJDOTIwRDAwNzVENjNFIC8qIERG
R1VuaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjI1MjZFNzE2QkM5MjFEMDA3NUQ2M0Ug
LyogREZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyNTI2RTAxNkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9u
UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEyMTUx
QzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLzsgfTsKIAkJMEYyQkRDMTYxNTFD
NUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTk2Miw2ICs5NjgsMTIgQEAKIAkJMEYyMUMyN0ExNEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1
dGlvbkhhcm5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0aW9u
SGFybmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3RTE0QkVBQTgw
MDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCeXRlY29kZUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNTI2REIxNkJDOTIwRDAwNzVE
NjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
Q1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MjUyNkRDMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMjUyNkREMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlZGlj
dGlvbkluamVjdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1MjZERTE2QkM5MjBE
MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjI1MjZERjE2QkM5MjBEMDA3NUQ2M0UgLyogREZHVW5pZmljYXRpb25QaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVbmlmaWNhdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNTI2RTAxNkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0
aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVW5pZmljYXRp
b25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRml4dXBQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdGaXh1cFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjAxLDYg
KzI2MTMsOCBAQAogCQkJCTBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAq
LywKIAkJCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwICovLAogCQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5oICovLAorCQkJCTBGMjUyNkRCMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjI1MjZEQzE2QkM5MjBEMDA3NUQ2M0UgLyog
REZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8q
IERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEZGNDI3NjExNTkxQTFDOTAwNENCOUZGIC8qIERGR0Rp
c2Fzc2VtYmxlci5jcHAgKi8sCkBAIC0yNjQ5LDYgKzI2NjMsOCBAQAogCQkJCTBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8sCiAJCQkJMEZG
RkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0
RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuaCAqLywKKwkJCQkwRjI1MjZERDE2QkM5MjBEMDA3
NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjI1MjZE
RTE2QkM5MjBEMDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJ
CQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyog
REZHUmVnaXN0ZXJCYW5rLmggKi8sCkBAIC0yNjY4LDYgKzI2ODQsOCBAQAogCQkJCTBGNjM5NDNE
MTVDNzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCAqLywK
IAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkw
RkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJMEYyNTI2REYx
NkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGMjUy
NkUwMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggKi8sCiAJCQkJMEYz
QjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCAqLywKIAkJCQkwRjNCM0Ey
QTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLywKIAkJCQkwRjJCREMzRjE1MjI4
MDE3MDBDRDg5MTAgLyogREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggKi8sCkBAIC0zMzI5LDYg
KzMzNDcsOSBAQAogCQkJCTE0Q0E5NThCMTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0
eUFuYWx5emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNENBOTU4RDE2QUI1MEZBMDA5MzhBMDYg
LyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYwNERB
MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjI1MjZFMzE2QkM5MjExMDA3NUQ2M0UgLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNTI2RTUxNkJDOTIxNzAwNzVENjNFIC8qIERGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNTI2RTcxNkJD
OTIxRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
Mzk2Miw2ICszOTgzLDkgQEAKIAkJCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29t
bW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBE
RkdFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAv
KiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjUyNkUy
MTZCQzkyMEYwMDc1RDYzRSAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMjUyNkU0MTZCQzkyMTUwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyNTI2RTYxNkJDOTIxQTAwNzVENjNF
IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJGMEYyRDEx
NkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDE0MTcy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0Niw4IEBAIHN0cnVjdCBPcGVyYW5kVmFsdWVUcmFpdHMgewogICAg
IHN0YXRpYyB2b2lkIGR1bXAoY29uc3QgVCYgdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpIHsgdmFs
dWUuZHVtcChvdXQpOyB9CiB9OwogCitlbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5k
LCBMb2NhbE9wZXJhbmQgfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
ID0gT3BlcmFuZFZhbHVlVHJhaXRzPFQ+ID4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKQEAg
LTY2LDYgKzY4LDI4IEBAIHB1YmxpYzoKICAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVy
biBtX2xvY2Fsc1tpZHhdOyB9CiAgICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQogICAgIAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5k
IG9wZXJhbmRLaW5kPgorICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICAgICByZXR1cm4g
bnVtYmVyT2ZBcmd1bWVudHMoKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mTG9jYWxzKCk7Cisg
ICAgfQorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIFQmIGF0Rm9y
KHNpemVfdCBpZHgpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRP
cGVyYW5kKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7CisgICAgICAgIHJldHVy
biBsb2NhbChpZHgpOworICAgIH0KKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2lu
ZD4KKyAgICBjb25zdCBUJiBhdEZvcihzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBh
cmd1bWVudChpZHgpOworICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICB9CisgICAgCiAg
ICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBpZiAoc2l6
ZSA8PSBtX2xvY2Fscy5zaXplKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
ODcsNiArMTc4Nyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgRmx1c2g6CisgICAgY2FzZSBQ
aGFudG9tTG9jYWw6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIApAQCAtMTkxMyw2ICsxOTE0LDcgQEAgaW5saW5lIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIGNh
c2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgLy8gVGhl
IGJsb2NrIHRyYW5zZmVycyB0aGUgdmFsdWUgZnJvbSBoZWFkIHRvIHRhaWwuCiAgICAgICAgICAg
ICBzb3VyY2UgPSBpblZhcmlhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjYXNlIFBoaTogewor
ICAgICAgICAgICAgICAgIGNhc2UgUGhpOiAvKiBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwODU1NSAqLyB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTA3LDYgKzUwNyw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRn
ZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRN
eUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlZigpOyAvLyBU
aGlzIGlzIGEgbXVzdC1nZW5lcmF0ZSBub2RlLgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJl
Y29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNM
ZW5ndGguCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjM1LDggKzYzNiwxMCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChjaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaC5j
b2xsZWN0R2FyYmFnZSgpOworICAgICAgICBpZiAoY2hhbmdlZCkgeworICAgICAgICAgICAgbV9n
cmFwaC5kZXRocmVhZCgpOworICAgICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBMb2FkU3RvcmU7
CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVz
LmgJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05P
REUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21t
YSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMg
dGVtcGxhdGVQb3N0IE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBS
ZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAg
dGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxv
Y2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5N
b2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9
IGdyYXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKICAgICAgICAgYXBwZW5kKHJlc3VsdCk7IFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDY0ICsyODcsMzMgQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9j
YWwob3BlcmFuZCk7CiAgICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0Nh
cHR1cmVkKG9wZXJhbmQsIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgCisgICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2FsczogMSkgbGluayB0b2dldGhlciB2
YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQorICAgICAgICAvLyB0cnkgdG8gYXZvaWQgY3Jl
YXRpbmcgcmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJlcXVpcmVkIGZvcgorICAgICAgICAv
LyBjb3JyZWN0bmVzcyAtIG5vIG90aGVyIHBoYXNlIHdpbGwgZW5zdXJlIHRoYXQgYmxvY2stbG9j
YWwgdmFyaWFibGUKKyAgICAgICAgLy8gYWNjZXNzIGRhdGEgdW5pZmljYXRpb24gaXMgZG9uZSBj
b3JyZWN0bHkuICgyKSBpcyBwdXJlbHkgb3Bwb3J0dW5pc3RpYworICAgICAgICAvLyBhbmQgaXMg
bWVhbnQgYXMgYW4gY29tcGlsZS10aW1lIG9wdGltaXphdGlvbiBvbmx5LgorICAgICAgICAKKyAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKKyAgICAgICAgCiAgICAgICAgIGlm
IChub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBGbHVzaCkgewotICAgICAg
ICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRzIHRo
ZSBsb2NhbCB0byBiZSBsaXZlCi0gICAgICAgICAgICAgICAgLy8gYnV0IGhhcyBub3QgbG9hZGVk
IGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGluCi0gICAgICAgICAgICAg
ICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgotICAgICAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAg
ICAgICAgICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dy
YXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSkpOwotICAgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJh
bmQpID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNl
dExvY2FsKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVk
KGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSAhPSBGbHVzaCk7Ci0KLSAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5t
ZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoaXNDYXB0dXJlZCkgewotICAgICAgICAgICAgICAgIC8vIFdlIHdpc2ggdG8gdXNlIHRo
ZSBzYW1lIHZhcmlhYmxlIGFjY2VzcyBkYXRhIGFzIHRoZSBwcmV2aW91cyBhY2Nlc3MsCi0gICAg
ICAgICAgICAgICAgLy8gYnV0IGZvciBhbGwgb3RoZXIgcHVycG9zZXMgd2Ugd2FudCB0byBpc3N1
ZSBhIGxvYWQgc2luY2UgZm9yIGFsbCB3ZQotICAgICAgICAgICAgICAgIC8vIGtub3csIGF0IHRo
aXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24sIHRoZSBsb2NhbCBoYXMgYmVlbiBjbG9iYmVyZWQuCi0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGxpbmsgdG8g
dGhlIFBoaSBub2RlLCBub3QgdG8gdGhlIEdldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkg
PT0gUGhpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBuZXdHZXRM
b2NhbCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oCi0gICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSks
IG5vZGUpKTsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKG9wZXJhbmQpID0gbmV3R2V0TG9jYWw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5l
d0dldExvY2FsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsKTsKLSAgICAgICAg
ICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBjYXNlIFNldExv
Y2FsOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChvcGVyYW5k
KTsKKyAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQs
IGlzQ2FwdHVyZWQpOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9m
IHRlbXBvcmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLAotICAgICAgICAvLyBleHBhbmQgbV9wcmVz
ZXJ2ZWRWYXJzIHRvIGNvdmVyIHRoZXNlLgotICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9w
ZXJhbmQpOwotICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAg
ICAgICAgIAotICAgICAgICBOb2RlKiBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlh
YmxlQWNjZXNzRGF0YSkpOwotICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNr
RW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgb3BlcmFuZCkpOwotICAgICAgICBub2RlID0gaW5q
ZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFy
aWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7CisgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFu
ZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5v
ZGU7Ci0gICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNl
dExvY2FsRmlyc3RUaW1lKG9wZXJhbmQsIG5vZGUpOwotICAgICAgICAKICAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQogICAgIHZvaWQgc2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCwgTm9kZSog
dmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKQEAgLTM3Myw2MSArMzQyLDI1IEBA
IHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9j
b2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCk7CiAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZTsKKyAgICAgICAgCiAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBGbHVzaCkgewotICAgICAgICAgICAgICAgIC8vIFR3byBwb3Nz
aWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRzIHRoZSBsb2NhbCB0byBiZSBsaXZlCi0g
ICAgICAgICAgICAgICAgLy8gYnV0IGhhcyBub3QgbG9hZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFz
IGxvYWRlZCBpdHMgdmFsdWUsIGluCi0gICAgICAgICAgICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdy
ZSBkb25lLgotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+
bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBub2RlID0g
aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8o
dmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSkpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5v
cCgpID09IFNldEFyZ3VtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2gpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVy
ZWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRBcmd1
bWVudCkgewotICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1lbnQgaW4g
dGhlIGZpcnN0IGJhc2ljIGJsb2NrOyBsaW5rCi0gICAgICAgICAgICAgICAgLy8gdGhlIEdldExv
Y2FsIHRvIHRoZSBTZXRBcmd1bWVudC4KLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+bG9j
YWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKLSAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3Vs
YXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZSkpOwotICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJn
dW1lbnQpID0gbm9kZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnQpOwotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09
IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgfHwgbm9kZS0+b3AoKSA9PSBQ
aGkpOwotICAgICAgICAgICAgICAgIHJldHVybiBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9u
KGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSks
IG5vZGUpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVk
KGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKICAgICAgICAgCi0gICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwotCi0gICAgICAgIE5vZGUqIHBoaSA9IGFkZFRv
R3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7Ci0gICAgICAgIG1fYXJndW1l
bnRQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBhcmd1
bWVudCkpOwotICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRU
b0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7CisgICAg
ICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9j
YWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwotICAgICAgICAKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVu
dCwgbm9kZSk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgdm9p
ZCBzZXRBcmd1bWVudChpbnQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9
IE5vcm1hbFNldCkKQEAgLTQ5Myw2MyArNDI2LDI3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBmbHVzaERpcmVjdChpbnQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3Np
dGlvbikKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjaGVjayBpZiB0aGUg
c2FtZSBvcGVyYW5kIGhhZCBhbHJlYWR5IGJlZW4gZmx1c2hlZCB0bwotICAgICAgICAvLyBzb21l
IG90aGVyIGxvY2FsIHZhcmlhYmxlLgotICAgICAgICAKICAgICAgICAgYm9vbCBpc0NhcHR1cmVk
ID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgbV9pbmxpbmVTdGFja1RvcC0+bV9p
bmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9wZXJhbmQgPCBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBub2RlOwot
ICAgICAgICBpbnQgaW5kZXg7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5k
KSkgewotICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKLSAg
ICAgICAgICAgIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50
KGluZGV4KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGluZGV4ID0gb3BlcmFuZDsK
LSAgICAgICAgICAgIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2Fs
KGluZGV4KTsKKyAgICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKICAgICAg
ICAgICAgIG1fcHJlc2VydmVkVmFycy5zZXQob3BlcmFuZCk7Ci0gICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQob3BlcmFuZCk7CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlOwogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAg
ICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2ggJiYgbm9kZS0+b3AoKSAh
PSBHZXRMb2NhbCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEVtaXQgYSBGbHVzaCBy
ZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgYWxyZWFkeSBmbHVzaGVkIGl0LgotICAgICAgICAgICAg
Ly8gVGhpcyBnaXZlcyB1cyBndWlkYW5jZSB0byBzZWUgdGhhdCB0aGUgdmFyaWFibGUgYWxzbyBu
ZWVkcyB0byBiZSBmbHVzaGVkCi0gICAgICAgICAgICAvLyBmb3IgYXJndW1lbnRzLCBldmVuIGlm
IGl0IGFscmVhZHkgaGFkIHRvIGJlIGZsdXNoZWQgZm9yIG90aGVyIHJlYXNvbnMuCi0gICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlz
Q2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBPcElu
Zm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSk7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRQ
b3NpdGlvbikKLSAgICAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJpYWJsZSh2
YXJpYWJsZUFjY2Vzc0RhdGEpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAg
ICAgICAgICB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgdmFyaWFibGUtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBp
c0NhcHR1cmVkKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQp
OwotICAgICAgICBOb2RlKiBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSkpOwotICAgICAgICBub2RlID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlh
YmxlQWNjZXNzRGF0YSksIHBoaSk7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVy
YW5kKSkgewotICAgICAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0Vu
dHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KSA9IG5vZGU7Ci0gICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGlu
ZGV4LCBub2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbG9jYWxQaGlTdGFj
ay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOwotICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpbmRleCkgPSBu
b2RlOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2Nh
bEZpcnN0VGltZShpbmRleCwgbm9kZSk7Ci0gICAgICAgIH0KKyAgICAgICAgbm9kZSA9IGFkZFRv
R3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAgICBpZiAoYXJn
dW1lbnRQb3NpdGlvbikKLSAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxl
KHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRW
YXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZmx1c2hBcmd1bWVudHNB
bmRDYXB0dXJlZFZhcmlhYmxlcygpCkBAIC0yMDI0LDcgKzE5MjEsNiBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUp
KTsKICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVu
dCwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2Fy
Z3VtZW50XSA9IHNldEFyZ3VtZW50OwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwog
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRBcmd1bWVudEZp
cnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzIx
MywxNTEgKzMxMDksNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgfQogfQogCi10ZW1wbGF0ZTxCeXRlQ29kZVBhcnNlcjo6UGhpU3RhY2tUeXBlIHN0YWNr
VHlwZT4KLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCi17Ci0gICAgVmVj
dG9yPFBoaVN0YWNrRW50cnksIDE2PiYgcGhpU3RhY2sgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50
UGhpU3RhY2spID8gbV9hcmd1bWVudFBoaVN0YWNrIDogbV9sb2NhbFBoaVN0YWNrOwotICAgIAot
ICAgIHdoaWxlICghcGhpU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBoaVN0YWNrRW50cnkg
ZW50cnkgPSBwaGlTdGFjay5sYXN0KCk7Ci0gICAgICAgIHBoaVN0YWNrLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghZW50cnkubV9ibG9jay0+aXNSZWFjaGFibGUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIFByZWRlY2Vzc29yTGlzdCYgcHJl
ZGVjZXNzb3JzID0gZW50cnkubV9ibG9jay0+bV9wcmVkZWNlc3NvcnM7Ci0gICAgICAgIHVuc2ln
bmVkIHZhck5vID0gZW50cnkubV92YXJObzsKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBk
YXRhRm9yUGhpID0gZW50cnkubV9waGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotCi0jaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAg
SGFuZGxpbmcgcGhpIGVudHJ5IGZvciB2YXIgJXUsIHBoaSBAJXUuXG4iLCBlbnRyeS5tX3Zhck5v
LCBlbnRyeS5tX3BoaSk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0jaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgRGVhbGlu
ZyB3aXRoIHByZWRlY2Vzc29yIGJsb2NrICV1LlxuIiwgcHJlZGVjZXNzb3JzW2ldKTsKLSNlbmRp
ZgotICAgICAgICAgICAgCi0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2Nr
ID0gbV9ncmFwaC5tX2Jsb2Nrc1twcmVkZWNlc3NvcnNbaV1dLmdldCgpOwotCi0gICAgICAgICAg
ICBOb2RlKiYgdmFyID0gKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vz
c29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudCh2YXJObykgOiBwcmVkZWNlc3NvckJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwodmFyTm8pOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBOb2RlKiB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXI7Ci0gICAgICAgICAgICBpZiAoIXZh
bHVlSW5QcmVkZWNlc3NvcikgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgRGlkIG5vdCBmaW5kIG5vZGUs
IGFkZGluZyBwaGkuXG4iKTsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAgdmFsdWVJblByZWRl
Y2Vzc29yID0gaW5zZXJ0UGhpTm9kZShPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKHN0YWNr
VHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrID8gYXJndW1lbnRUb09wZXJhbmQodmFyTm8pIDogc3Rh
dGljX2Nhc3Q8aW50Pih2YXJObyksIGZhbHNlKSksIHByZWRlY2Vzc29yQmxvY2spOwotICAgICAg
ICAgICAgICAgIHZhciA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKLSAgICAgICAgICAgICAgICBpZiAo
c3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spCi0gICAgICAgICAgICAgICAgICAgIHByZWRl
Y2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZSh2YXJObywg
dmFsdWVJblByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGlt
ZSh2YXJObywgdmFsdWVJblByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgICAgICBwaGlTdGFjay5h
cHBlbmQoUGhpU3RhY2tFbnRyeShwcmVkZWNlc3NvckJsb2NrLCB2YWx1ZUluUHJlZGVjZXNzb3Is
IHZhck5vKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlSW5QcmVkZWNlc3Nvci0+b3Ao
KSA9PSBHZXRMb2NhbCkgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgRm91bmQgR2V0TG9jYWwgQCV1Llxu
IiwgdmFsdWVJblByZWRlY2Vzc29yLT5pbmRleCgpKTsKLSNlbmRpZgotCi0gICAgICAgICAgICAg
ICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcmUg
aWRlbnRpY2FsIGJldHdlZW4gdGhlCi0gICAgICAgICAgICAgICAgLy8gR2V0TG9jYWwgYW5kIGl0
cyBibG9jay1sb2NhbCBQaGkuIFN0cmljdGx5IHNwZWFraW5nIHdlIG9ubHkgbmVlZCB0aGUgdHdv
Ci0gICAgICAgICAgICAgICAgLy8gdG8gYmUgdW5pZmllZC4gQnV0IGZvciBlZmZpY2llbmN5LCB3
ZSB3YW50IHRoZSBjb2RlIHRoYXQgY3JlYXRlcyBHZXRMb2NhbHMKLSAgICAgICAgICAgICAgICAv
LyBhbmQgUGhpcyB0byB0cnkgdG8gcmV1c2UgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcyBtdWNoIGFz
IHBvc3NpYmxlLgotICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUluUHJlZGVjZXNzb3ItPnZh
cmlhYmxlQWNjZXNzRGF0YSgpID09IHZhbHVlSW5QcmVkZWNlc3Nvci0+Y2hpbGQxKCktPnZhcmlh
YmxlQWNjZXNzRGF0YSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2YWx1
ZUluUHJlZGVjZXNzb3IgPSB2YWx1ZUluUHJlZGVjZXNzb3ItPmNoaWxkMSgpLm5vZGUoKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3VuZCBAJXUuXG4iLCB2YWx1
ZUluUHJlZGVjZXNzb3ItPmluZGV4KCkpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlQoCi0gICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09
IFNldExvY2FsCi0gICAgICAgICAgICAgICAgfHwgdmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09
IFBoaQotICAgICAgICAgICAgICAgIHx8IHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBGbHVz
aAotICAgICAgICAgICAgICAgIHx8ICh2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gU2V0QXJn
dW1lbnQgJiYgc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUHJlZGVjZXNzb3IgPSB2YWx1
ZUluUHJlZGVjZXNzb3ItPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBkYXRhRm9yUHJlZGVjZXNzb3ItPnVuaWZ5KGRhdGFGb3JQaGkpOwotCi0gICAgICAg
ICAgICBOb2RlKiBwaGlOb2RlID0gZW50cnkubV9waGk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFJlZiBjb3Vu
dCBvZiBAJXUgPSAldS5cbiIsIHBoaU5vZGUtPmluZGV4KCksIHBoaU5vZGUtPnJlZkNvdW50KCkp
OwotI2VuZGlmCi0gICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkgewotI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nRigiICAgICAgUmVmZmluZyBAJXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotI2VuZGlm
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYodmFsdWVJblByZWRlY2Vzc29yKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDEoKSkgewotI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMSA9IEAldS5cbiIsIHBoaU5vZGUtPmluZGV4
KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBwaGlOb2Rl
LT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZSh2YWx1ZUluUHJlZGVjZXNzb3IpKTsKLSNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxv
Z0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7Ci0gICAgICAg
ICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMigpKSB7
Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQyID0gQCV1LlxuIiwgcGhpTm9k
ZS0+aW5kZXgoKSwgdmFsdWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IHBoaU5vZGUtPmNoaWxkcmVuLnNldENoaWxkMihFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwot
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsK
LSAgICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsK
LSAgICAgICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hp
bGQzKCkpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDMgPSBAJXUuXG4i
LCBwaGlOb2RlLT5pbmRleCgpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQzKEVkZ2UodmFsdWVJblByZWRlY2Vz
c29yKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmlu
ZGV4KCkpOwotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFG
aWxlKCkpOwotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBOb2RlKiBuZXdQaGkgPSBpbnNlcnRQaGlOb2RlKE9wSW5mbyhkYXRhRm9yUGhpKSwgZW50
cnkubV9ibG9jayk7Ci0gICAgICAgICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU3BsaXR0aW5nIEAldSwg
Y3JlYXRlZCBAJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCBuZXdQaGktPmluZGV4KCkpOwotI2Vu
ZGlmCi0KLSAgICAgICAgICAgIGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKQotICAgICAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKG5ld1BoaSk7Ci0KLSAgICAgICAgICAgIG5ld1BoaS0+Y2hpbGRyZW4g
PSBwaGlOb2RlLT5jaGlsZHJlbjsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIs
IG5ld1BoaS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBuZXdQaGktPmR1bXBDaGlsZHJlbihXVEY6
OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0KLSAg
ICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUobmV3UGhpLCB2YWx1ZUluUHJl
ZGVjZXNzb3IsIDApOwotCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9k
ZS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRh
RmlsZSgpKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotICAgICAgICB9
Ci0gICAgfQotfQotCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpmaXhWYXJpYWJsZUFjY2Vzc1ByZWRp
Y3Rpb25zKCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkgewpAQCAtMzczMCwxNCArMzQ4MSw2IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICBkYXRhTG9nRigiUHJvY2Vzc2luZyBsb2NhbCB2
YXJpYWJsZSBwaGlzLlxuIik7CiAjZW5kaWYKICAgICAKLSAgICBtX2N1cnJlbnRQcm9maWxpbmdJ
bmRleCA9IG1fY3VycmVudEluZGV4OwotICAgIAotICAgIHByb2Nlc3NQaGlTdGFjazxMb2NhbFBo
aVN0YWNrPigpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICBkYXRhTG9nRigiUHJvY2Vzc2luZyBhcmd1bWVudCBwaGlzLlxuIik7Ci0jZW5kaWYKLSAgICBw
cm9jZXNzUGhpU3RhY2s8QXJndW1lbnRQaGlTdGFjaz4oKTsKLQogICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyAr
K2Jsb2NrSW5kZXgpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOwogICAgICAgICBBU1NFUlQoYmxvY2spOwpAQCAtMzc0NSwy
NyArMzQ4OCw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgICAgIG1f
Z3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIoKTsKICAgICB9CiAgICAgCi0gICAgZml4
VmFyaWFibGVBY2Nlc3NQcmVkaWN0aW9ucygpOwotICAgIAotICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Js
b2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fb3Ny
RW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmQoCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZv
ckluZGV4KGkpKTsKLSAgICAgICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5oYXNMb2NhbCgpKTsKLSAgICAgICAgICAg
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KAotICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgCiAgICAgbV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMgPSBtX3ByZXNl
cnZlZFZhcnM7CiAgICAgbV9ncmFwaC5tX2xvY2FsVmFycyA9IG1fbnVtTG9jYWxzOwogICAgIG1f
Z3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcg
QEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmVtZUxv
Z2dpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywg
MCksIE5vQmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0
ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTEz
LDYgKzExNCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChleHRyZW1lTG9nZ2luZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5kdW1wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVh
ZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxvY2tzKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9u
KSwKQEAgLTEyNiw2ICsxMjgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguZGV0aHJlYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRh
a2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25k
aXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW5C
bG9ja0luZGV4ID0gbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssICFjb25kaXRp
b24pOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0xNTQsNiArMTU3LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDRkdTaW1wbGlmeTogQnJh
bmNoIHRvIHNhbWUgc3VjY2Vzc29yIG1lcmdlIG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUuXG4i
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgdGFyZ2V0
QmxvY2tJbmRleCk7CiAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmRldGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxv
Y2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwgTm9CbG9jayk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
QEAgLTI1MCwxMDQgKzI1NCwyNiBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQoYmxvY2spOwog
ICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgIAotICAgICAgICAv
LyAxKSBSZW1vdmUgcmVmZXJlbmNlcyBmcm9tIG90aGVyIGJsb2NrcyB0byB0aGlzIGJsb2NrLgot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoYmxvY2spOyBp
LS07KQotICAgICAgICAgICAgZml4UGhpcyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3Nvcihi
bG9jaywgaSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMu
c2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgICAgIG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJl
ZShibG9jay0+cGhpc1twaGlJbmRleF0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAgIG1fZ3JhcGgubV9h
bGxvY2F0b3IuZnJlZShibG9jay0+YXQobm9kZUluZGV4KSk7CiAgICAgICAgIAotICAgICAgICAv
LyAyKSBLaWxsIHRoZSBibG9jawogICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmNsZWFyKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Js
b2NrKiBibG9jaywgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIGludCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgTm9kZSogbGl2ZW5lc3NOb2RlID0g
amV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKLSAgICAg
ICAgTm9kZSogYXZhaWxhYmlsaXR5Tm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChvcGVyYW5kKTsKICAgICAgICAgaWYgKCFsaXZlbmVzc05vZGUpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIEFTU0VSVChhdmFpbGFiaWxpdHlOb2RlKTsKICAgICAgICAgaWYgKGxpdmVu
ZXNzTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKGF2YWlsYWJpbGl0eU5vZGUtPm9wKCkgPT0gU2V0TG9jYWwp
Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlOb2RlID0gYXZhaWxhYmlsaXR5Tm9kZS0+Y2hpbGQx
KCkubm9kZSgpOwotICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eU5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCisgICAgICAgIGlmICghbGl2ZW5lc3NOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoYXZhaWxhYmlsaXR5Tm9kZS0+b3AoKSAhPSBT
ZXRMb2NhbCk7CiAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAgICAgICAgbV9ncmFw
aCwgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdp
biwgYXZhaWxhYmlsaXR5Tm9kZSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZml4UG9zc2libGVH
ZXRMb2NhbChCYXNpY0Jsb2NrKiBibG9jaywgRWRnZSYgZWRnZSwgYm9vbCBjaGFuZ2VSZWYpCi0g
ICAgewotICAgICAgICBOb2RlKiBjaGlsZCA9IGVkZ2Uubm9kZSgpOwotICAgICAgICBpZiAoY2hp
bGQtPm9wKCkgIT0gR2V0TG9jYWwpCi0gICAgICAgICAgICByZXR1cm47Ci0jaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgIENvbnNp
ZGVyaW5nIEdldExvY2FsIGF0IEAldSwgbG9jYWwgciVkLlxuIiwgbm9kZS0+aW5kZXgoKSwgY2hp
bGQtPmxvY2FsKCkpOwotI2VuZGlmCi0gICAgICAgIGlmIChjaGlsZC0+dmFyaWFibGVBY2Nlc3NE
YXRhKCktPmlzQ2FwdHVyZWQoKSkgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgY2FwdHVyZWQuXG4i
KTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIE5vZGUq
IG9yaWdpbmFsTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChjaGlsZC0+bG9j
YWwoKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICBkYXRhTG9nRigiICAgICAgICBEZWFsaW5nIHdpdGggb3JpZ2luYWwgQCV1LlxuIiwgb3JpZ2lu
YWxOb2RlLT5pbmRleCgpKTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQob3JpZ2luYWxOb2RlKTsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFM
b2dGKCIgICAgICAgIE9yaWdpbmFsIGhhcyBsb2NhbCByJWQuXG4iLCBvcmlnaW5hbE5vZGUtPmxv
Y2FsKCkpOwotI2VuZGlmCi0gICAgICAgIEFTU0VSVChjaGlsZC0+bG9jYWwoKSA9PSBvcmlnaW5h
bE5vZGUtPmxvY2FsKCkpOwotICAgICAgICAvLyBQb3NzaWJpbGl0aWVzOgotICAgICAgICAvLyBT
ZXRMb2NhbCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgZ2V0dGluZyB0aGUgdmFsdWUgb2Ygc29tZXRo
aW5nIHRoYXQgaXMgaW1tZWRpYXRlbHkKLSAgICAgICAgLy8gICAgIGF2YWlsYWJsZSBpbiB0aGUg
Zmlyc3QgYmxvY2sgd2l0aCBhIGtub3duIE5vZGVJbmRleC4KLSAgICAgICAgLy8gR2V0TG9jYWwg
LT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZhbHVlIG9mIHNvbWV0aGluZyB0aGF0
IHRoZSBmaXJzdAotICAgICAgICAvLyAgICAgYmxvY2sgYWxzbyBnZXRzLgotICAgICAgICAvLyBQ
aGkgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVy
YW5kIHRoYXQgdGhlIGZpcnN0IGJsb2NrCi0gICAgICAgIC8vICAgICB3YXMgYWxzbyBhc2tpbmcg
Zm9yIGtlZXAtYWxpdmUgb24uCi0gICAgICAgIC8vIFNldEFyZ3VtZW50IC0+IHRoZSBzZWNvbmRC
bG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZQotICAg
ICAgICAvLyAgICAgZmlyc3QgYmxvY2sgd2FzIGtlZXBpbmcgYWxpdmUgYnkgdmlydHVlIG9mIHRo
ZSBmaXJzdEJsb2NrIGJlaW5nIHRoZSByb290IGFuZAotICAgICAgICAvLyAgICAgdGhlIG9wZXJh
bmQgYmVpbmcgYW4gYXJndW1lbnQuCi0gICAgICAgIC8vIEZsdXNoIC0+IHRoZSBzZWNvbmRCbG9j
ayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdAot
ICAgICAgICAvLyAgICAgYmxvY2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxpdmUsIHNvIHRoZSBzZWNv
bmQgYmxvY2sgc2hvdWxkIHJlZmVyIGNoaWxkIG9mCi0gICAgICAgIC8vICAgICB0aGUgZmx1c2gu
Ci0gICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpCi0gICAgICAgICAgICBv
cmlnaW5hbE5vZGUgPSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgc3dp
dGNoIChvcmlnaW5hbE5vZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBTZXRMb2NhbDogewotICAg
ICAgICAgICAgaWYgKGNoYW5nZVJlZikKLSAgICAgICAgICAgICAgICBBU1NFUlQob3JpZ2luYWxO
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBJdCdzIGEgU2V0TG9jYWwu
XG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VDaGlsZChlZGdlLCBvcmln
aW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBJ
dCdzIGEgR2V0TG9jYWwuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKG9yaWdpbmFsTm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxk
KGVkZ2UsIG9yaWdpbmFsTm9kZSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgIC8vIElmIHdlIGhh
dmUgYSBHZXRMb2NhbCB0aGF0IHBvaW50cyB0byBhIGNoaWxkIEdldExvY2FsIHRoYXQgaXMgZGVh
ZCwgdGhlbgotICAgICAgICAgICAgLy8gd2UgaGF2ZSBubyBuZWVkIHRvIGRvIGFueXRoaW5nOiB0
aGlzIG9yaWdpbmFsIEdldExvY2FsIGlzIHN0aWxsIHZhbGlkLgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBQaGk6Ci0gICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6
IHsKLSAgICAgICAgaWYgKGNoYW5nZVJlZikKLSAgICAgICAgICAgIEFTU0VSVChvcmlnaW5hbE5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgUGhpL1NldEFyZ3Vt
ZW50LlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgIC8vIEtlZXAgdGhlIEdldExvY2FsIQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQorICAgICAgICAgICAgbV9ncmFwaCwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIFBoYW50b21Mb2NhbCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhs
aXZlbmVzc05vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgamV0dGlzb25CbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0dGlz
b25lZEJsb2NrSW5kZXgsIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luKQpAQCAtMzYzLDM4
ICsyODksNiBAQCBwcml2YXRlOgogICAgICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGJs
b2NrSW5kZXgsIGpldHRpc29uZWRCbG9ja0luZGV4KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBm
aXhQaGlzKEJsb2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgQmxvY2tJbmRleCBkZXN0aW5hdGlv
bkJsb2NrSW5kZXgpCi0gICAgewotICAgICAgICBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jayA9IG1f
Z3JhcGgubV9ibG9ja3Nbc291cmNlQmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIEJhc2ljQmxv
Y2sqIGRlc3RpbmF0aW9uQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Rlc3RpbmF0aW9uQmxvY2tJ
bmRleF0uZ2V0KCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb25CbG9jaykgewotICAgICAgICAg
ICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRvIGtpbGwgb2ZmIHRoZSBzb3VyY2UgYmxvY2sgYW5kIHRo
ZSBkZXN0aW5hdGlvbiBibG9jayBpcyBhbHJlYWR5Ci0gICAgICAgICAgICAvLyBkZWFkLCB0aGVu
IHdlJ3JlIGRvbmUhCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbkJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gZGVzdGluYXRpb25CbG9jay0+cGhpc1tpXTsK
LSAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9IHNvdXJjZUJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChwaGlOb2RlLT5sb2NhbCgpKTsKLSAgICAgICAgICAgIGlmICghbXlOb2RlKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGhhcHBlbiBpZiB0aGVyZSBpcyBhIHBoaSBpbiB0
aGUgZGVzdGluYXRpb24gdGhhdCByZWZlcnMgaW50bwotICAgICAgICAgICAgICAgIC8vIHRoZSBk
ZXN0aW5hdGlvbiBpdHNlbGYuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAg
ICAgZGF0YUxvZ0YoCi0gICAgICAgICAgICAgICAgIkNvbnNpZGVyaW5nIHJlbW92aW5nIHJlZmVy
ZW5jZSBmcm9tIHBoaSBAJXUgdG8gQCV1IG9uIGxvY2FsIHIlZDoiLAotICAgICAgICAgICAgICAg
IHBoaU5vZGUtPmluZGV4KCksIG15Tm9kZS0+aW5kZXgoKSwgcGhpTm9kZS0+bG9jYWwoKSk7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIGlmIChteU5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAg
ICAgICAgICAgbXlOb2RlID0gbXlOb2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytqKQotICAgICAg
ICAgICAgICAgIHJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJlZmVyZW5jZShteU5vZGUsIHBoaU5v
ZGUsIGosIHNvdXJjZUJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7Ci0jZW5kaWYK
LSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICB2b2lkIGZpeEpldHRpc29uZWRQcmVkZWNlc3Nv
cnMoQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4
KQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC00
MDksOCArMzAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+bV9w
cmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGZpeFBoaXMoYmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5k
ZXgpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJlZmVy
ZW5jZShOb2RlKiBteU5vZGUsIE5vZGUqIHBoaU5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCwgYm9v
bCBjaGFuZ2VSZWYpCkBAIC01ODMsODggKzQ3NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpCiAgICAgICAg
ICAgICBmaXJzdEJsb2NrLT5waGlzLmFwcGVuZChzZWNvbmRCbG9jay0+cGhpc1tpXSk7CiAKLSAg
ICAgICAgLy8gQmVmb3JlIHdlIHN0YXJ0IGNoYW5naW5nIHRoZSBzZWNvbmQgYmxvY2sncyBncmFw
aCwgcmVjb3JkIHdoYXQgbm9kZXMgd291bGQKLSAgICAgICAgLy8gYmUgcmVmZXJlbmNlZCBieSBz
dWNjZXNzb3JzIG9mIHRoZSBzZWNvbmQgYmxvY2suCi0gICAgICAgIE9wZXJhbmRzPE9wZXJhbmRT
dWJzdGl0dXRpb24+IHN1YnN0aXR1dGlvbnMoCi0gICAgICAgICAgICBzZWNvbmRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICBzZWNvbmRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgKytpKQotICAgICAgICAgICAgcmVjb3JkUG9zc2libGVJbmNvbWluZ1JlZmVyZW5jZShz
ZWNvbmRCbG9jaywgc3Vic3RpdHV0aW9ucywgYXJndW1lbnRUb09wZXJhbmQoaSkpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVt
YmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAgICAgICAgcmVjb3JkUG9zc2libGVJbmNvbWluZ1Jl
ZmVyZW5jZShzZWNvbmRCbG9jaywgc3Vic3RpdHV0aW9ucywgaSk7Ci0KLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBzZWNvbmRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGJvb2wgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFBoYW50b206
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICAgICAgTm9kZSogcG9zc2libGVMb2Nh
bE9wID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGlmIChwb3NzaWJs
ZUxvY2FsT3AtPm9wKCkgIT0gR2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgJiYgcG9zc2li
bGVMb2NhbE9wLT5oYXNMb2NhbCgpCi0gICAgICAgICAgICAgICAgICAgICYmICFwb3NzaWJsZUxv
Y2FsT3AtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZChwb3NzaWJsZUxvY2FsT3AtPmxvY2FsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
c2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2V0TG9jYWwtPmNoaWxk
MSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQyKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoOgot
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgICAgIC8vIEEgRmx1c2gg
Y291bGQgdXNlIGEgR2V0TG9jYWwsIFNldExvY2FsLCBTZXRBcmd1bWVudCwgb3IgYSBQaGkuCi0g
ICAgICAgICAgICAgICAgLy8gSWYgaXQgdXNlcyBhIEdldExvY2FsLCBpdCdsbCBiZSB0YWtlbiBj
YXJlIG9mIGJlbG93LiBJZiBpdCB1c2VzIGEKLSAgICAgICAgICAgICAgICAvLyBTZXRMb2NhbCBv
ciBTZXRBcmd1bWVudCwgdGhlbiBpdCBtdXN0IGJlIHVzaW5nIGEgbm9kZSBmcm9tIHRoZQotICAg
ICAgICAgICAgICAgIC8vIHNhbWUgYmxvY2suIEJ1dCBpZiBpdCB1c2VzIGEgUGhpLCB0aGVuIHdl
IHNob3VsZCByZWRpcmVjdCBpdCB0bwotICAgICAgICAgICAgICAgIC8vIHVzZSB3aGF0ZXZlciB0
aGUgZmlyc3QgYmxvY2sgYWR2ZXJ0aXNlZCBhcyBhIHRhaWwgb3BlcmFuZC4KLSAgICAgICAgICAg
ICAgICAvLyBTaW1pbGFybHkgZm9yIEdldExvY2FsOyBpdCBjb3VsZCB1c2UgYW55IG9mIHRob3Nl
IGV4Y2VwdCBmb3IKLSAgICAgICAgICAgICAgICAvLyBHZXRMb2NhbC4gSWYgaXQgdXNlcyBhIFBo
aSB0aGVuIGl0IHNob3VsZCBiZSByZWRpcmVjdGVkIHRvIHVzZSBhCi0gICAgICAgICAgICAgICAg
Ly8gUGhpIGZyb20gdGhlIHRhaWwgb3BlcmFuZC4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPm9wKCkgIT0gUGhpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBhdEZpcnN0ID0gZmlyc3RCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAg
bV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBFZGdlKHNraXBHZXRM
b2NhbChhdEZpcnN0KSksIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgICAg
IGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICghY2hpbGRyZW5BbHJlYWR5Rml4ZWQpIHsKLSAgICAgICAgICAgICAgICBib29sIGNo
YW5nZVJlZiA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBHZXRMb2NhbCwgdGhlbiB3ZSBtaWdodCBsaWtl
IHRvIGZpeCBpdC4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZElkeCA8IG5v
ZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbV9ncmFwaC5tX3ZhckFyZ0NoaWxk
cmVuW2NoaWxkSWR4XSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoISFub2RlLT5jaGlsZDEoKSkgewotICAgICAgICAgICAgICAg
ICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVuLmNoaWxk
MSgpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgICAgICBpZiAoISFub2RlLT5jaGlsZDIo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJs
b2NrLCBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghIW5vZGUtPmNoaWxkMygpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS0+Y2hpbGRyZW4uY2hpbGQz
KCksIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpcnN0QmxvY2stPmFwcGVuZChub2RlKTsK
LSAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIGZpcnN0QmxvY2stPmFwcGVuZChzZWNvbmRCbG9jay0+
YXQoaSkpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3QoKS0+aXNU
ZXJtaW5hbCgpKTsKICAgICAgICAgCkBAIC02ODYsMzcgKzQ5OCw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmIChqZXR0aXNvbmVkQmxvY2tJbmRleCAhPSBOb0Jsb2NrKQogICAgICAgICAgICAgZml4
SmV0dGlzb25lZFByZWRlY2Vzc29ycyhmaXJzdEJsb2NrSW5kZXgsIGpldHRpc29uZWRCbG9ja0lu
ZGV4KTsKICAgICAgICAgCi0gICAgICAgIC8vIEZpeCB1cCB0aGUgdmFyaWFibGVzIGF0IHRhaWwu
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCi0gICAgICAgICAgICBmaXhUYWlsT3BlcmFu
ZChmaXJzdEJsb2NrLCBzZWNvbmRCbG9jaywgYXJndW1lbnRUb09wZXJhbmQoaSksIHN1YnN0aXR1
dGlvbnMpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAgICAgICAgZml4VGFpbE9w
ZXJhbmQoZmlyc3RCbG9jaywgc2Vjb25kQmxvY2ssIGksIHN1YnN0aXR1dGlvbnMpOwotICAgICAg
ICAKLSAgICAgICAgLy8gRml4IHVwIHRoZSByZWZlcmVuY2VzIGZyb20gb3VyIG5ldyBzdWNjZXNz
b3JzLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoZmly
c3RCbG9jayk7IGktLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1f
Z3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoZmlyc3RCbG9jaywgaSldLmdldCgpOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nvci0+cGhpcy5zaXpl
KCk7ICsraikgewotICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBzdWNjZXNzb3ItPnBo
aXNbal07Ci0gICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2VSZWYgPSBwaGlOb2RlLT5zaG91bGRH
ZW5lcmF0ZSgpOwotICAgICAgICAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRpb24gc3Vic3RpdHV0
aW9uID0gc3Vic3RpdHV0aW9ucy5vcGVyYW5kKHBoaU5vZGUtPmxvY2FsKCkpOwotI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgUGVyZm9ybWluZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiAiLCBzdWJzdGl0dXRpb24sICIu
XG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQxKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChwaGlOb2Rl
LT5jaGlsZDEoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCi0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguY2hhbmdlQ2hpbGQocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHN1YnN0aXR1
dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUt
PmNoaWxkMigpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxkKQotICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxk
MigpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAg
aWYgKCFwaGlOb2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpID09IHN1YnN0aXR1dGlvbi5vbGRD
aGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VDaGlsZChwaGlOb2RlLT5j
aGlsZHJlbi5jaGlsZDMoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBmaXJzdEJsb2NrLT52YWx1
ZXNBdFRhaWwgPSBzZWNvbmRCbG9jay0+dmFsdWVzQXRUYWlsOwogICAgICAgICBmaXJzdEJsb2Nr
LT5jZmFCcmFuY2hEaXJlY3Rpb24gPSBzZWNvbmRCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uOwog
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRp
bmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDUFNSZXRocmVhZGluZ1BoYXNlLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1
ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitj
bGFzcyBDUFNSZXRocmVhZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBD
UFNSZXRocmVhZGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwg
IkNQUyByZXRocmVhZGluZyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisg
ICAgeworICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBmcmVlVW5uZWNlc3NhcnlOb2Rl
cygpOworICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrcygpOworICAgICAgICBwcm9w
YWdhdGVQaGlzKCk7CisgICAgICAgIG1fZ3JhcGguY29sbGVjdEdhcmJhZ2UoKTsKKyAgICAgICAg
CisgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICAKKyAgICB2b2lkIGZyZWVVbm5lY2Vzc2FyeU5v
ZGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBB
U1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdW5z
aWduZWQgZnJvbUluZGV4ID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRvSW5kZXggPSAwOwor
ICAgICAgICAgICAgd2hpbGUgKGZyb21JbmRleCA8IGJsb2NrLT5zaXplKCkpIHsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGZyb21JbmRleCsrKTsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2Fs
OgorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFu
dG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShF
ZGdlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IFBoYW50b206CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5jaGlsZDEoKS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFBoaToK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1BoYW50b21Mb2NhbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+Y2hpbGQxKCktPmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgTm9wOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSAwOyAvLyBS
ZXNldCB0aGUgcmVwbGFjZW1lbnQgc2luY2UgdGhlIG5leHQgcGhhc2Ugd2lsbCB1c2UgaXQuCisg
ICAgICAgICAgICAgICAgYmxvY2stPmF0KHRvSW5kZXgrKykgPSBub2RlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYmxvY2stPnJlc2l6ZSh0b0luZGV4KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhp
SW5kZXgtLTspCisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2Nr
LT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgICAgICBibG9jay0+cGhpcy5yZXNpemUoMCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtp
bmQ+CisgICAgdm9pZCBjbGVhclZhcmlhYmxlc0F0SGVhZEFuZFRhaWwoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKAorICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemVGb3I8
b3BlcmFuZEtpbmQ+KCkKKyAgICAgICAgICAgID09IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5z
aXplRm9yPG9wZXJhbmRLaW5kPigpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplRm9yPG9wZXJhbmRLaW5kPigpOyBpLS07
KSB7CisgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXRGb3I8b3BlcmFuZEtp
bmQ+KGkpID0gMDsKKyAgICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxv
cGVyYW5kS2luZD4oaSkgPSAwOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGUqIGFk
ZFBoaVNpbGVudGx5KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3Jp
Z2luLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAgTm9kZSog
cmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNw
ZWNOb25lLCBQaGksIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICBibG9j
ay0+cGhpcy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgTm9kZSogYWRkUGhpKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQorICAgIHsKKyAgICAg
ICAgTm9kZSogcmVzdWx0ID0gYWRkUGhpU2lsZW50bHkoYmxvY2ssIGNvZGVPcmlnaW4sIHZhcmlh
YmxlKTsKKyAgICAgICAgbV9waGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShibG9jaywgcmVz
dWx0KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIE5vZGUqIGFk
ZFBoaShjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkZFBoaShtX2Jsb2NrLCBjb2RlT3JpZ2lu
LCB2YXJpYWJsZSk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGFkZFBoaShOb2RlKiBub2RlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkZFBoaShub2RlLT5jb2RlT3JpZ2luLCBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2Fub25pY2FsaXplR2V0
TG9jYWwoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICBpZiAoTm9k
ZSogb3RoZXJOb2RlID0gbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpKSB7CisgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSA9PSB2YXJpYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAo
b3RoZXJOb2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAg
Y2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgb3RoZXJOb2RlID0gb3RoZXJOb2Rl
LT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9
PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBoYXZlIGEgR2V0TG9j
YWwsIHNvIHRoaXMgbWlnaHQgYXMgd2VsbCBiZSB0aGUgb25lLgorICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhlck5vZGUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgpID09IFNl
dExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2Rl
LT5vcCgpID09IFNldExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCB8fCBv
dGhlck5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpOworICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50KSB7CisgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2RlKSk7CisgICAgICAg
ICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpID0gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAg
ICAgICAgICAgb3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgp
ID09IFNldExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBQaGkg
fHwgb3RoZXJOb2RlLT5vcCgpID09IFNldExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRB
cmd1bWVudCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gS2VlcCB0aGlz
IEdldExvY2FsIGJ1dCBsaW5rIGl0IHRvIHRoZSBwcmlvciBvbmVzLgorICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9kZSkpOworICAgICAgICAgICAg
ICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
IG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IEdldExvY2FsKSB7CisgICAg
ICAgICAgICAgICAgLy8gUmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIEdldExvY2FsIHdp
dGggb3RoZXJOb2RlLgorICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gb3RoZXJO
b2RlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAg
ICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2RlKiBw
aGkgPSBhZGRQaGkobm9kZSk7CisgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdl
KHBoaSkpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0T3BlcmFuZEZpcnN0
VGltZSh2YXJpYWJsZS0+bG9jYWwoKSwgcGhpKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVz
QXRUYWlsLnNldE9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCksIG5vZGUpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNhbm9uaWNhbGl6ZVNldExvY2FsKE5vZGUqIG5vZGUpCisgICAgeworICAgICAg
ICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2Rl
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZT4KKyAgICB2b2lkIGNh
bm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAK
KyAgICAgICAgaWYgKE5vZGUqIG90aGVyTm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkgeworICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzd2l0Y2ggKG90aGVyTm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBGbHVz
aDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgY2FzZSBHZXRM
b2NhbDoKKyAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gUGhpIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBT
ZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT0gUGhhbnRvbUxvY2FsICYmIG90aGVyTm9kZS0+
b3AoKSA9PSBTZXRMb2NhbCkgeworICAgICAgICAgICAgICAgIC8vIFBoYW50b21Mb2NhbChTZXRM
b2NhbCkgZG9lc24ndCBtYWtlIHNlbnNlLiBQaGFudG9tTG9jYWwgbWVhbnM6IGF0IHRoaXMKKyAg
ICAgICAgICAgICAgICAvLyBwb2ludCBJIGtub3cgSSB3b3VsZCBoYXZlIGJlZW4gaW50ZXJlc3Rl
ZCBpbiB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgIC8vIGZvciB0
aGUgcHVycG9zZSBvZiBPU1IuIFBoYW50b21Mb2NhbChTZXRMb2NhbCkgbWVhbnM6IGF0IHRoaXMg
cG9pbnQgSQorICAgICAgICAgICAgICAgIC8vIGtub3cgdGhhdCBJIHdvdWxkIGhhdmUgcmVhZCB0
aGUgdmFsdWUgd3JpdHRlbiBieSB0aGF0IFNldExvY2FsLiBUaGlzIGlzCisgICAgICAgICAgICAg
ICAgLy8gcmVkdW5kYW50IGFuZCBpbmVmZmljaWVudCwgc2luY2UgcmVhbGx5IGl0IGp1c3QgbWVh
bnMgdGhhdCB3ZSB3YW50IHRvCisgICAgICAgICAgICAgICAgLy8gYmUga2VlcGluZyB0aGUgb3Bl
cmFuZCB0byB0aGUgU2V0TG9jYWwgYWxpdmUuIFRoZSBTZXRMb2NhbCBtYXkgZGllLCBhbmQKKyAg
ICAgICAgICAgICAgICAvLyB3ZSdsbCBiZSBmaW5lIGJlY2F1c2UgT1NSIHRyYWNrcyBkZWFkIFNl
dExvY2Fscy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBTbyB3ZSB0dXJu
IHRoaXMgaW50byBhIFBoYW50b20gb24gdGhlIGNoaWxkIG9mIHRoZSBTZXRMb2NhbC4KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQ
aGFudG9tKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEob3RoZXJO
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBub3RoaW5nIHdyb25nIHdpdGgg
aGF2aW5nIHJlZHVuZGFudCBGbHVzaCdzLiBJdCBqdXN0IG5lZWRzIHRvCisgICAgICAgICAgICAv
LyBiZSBsaW5rZWQgYXBwcm9wcmlhdGVseS4gTm90ZSB0aGF0IGlmIHRoZXJlIGhhZCBhbHJlYWR5
IGJlZW4gYSBwcmV2aW91cworICAgICAgICAgICAgLy8gdXNlIGF0IHRhaWwgdGhlbiB3ZSBkb24n
dCBvdmVycmlkZSBpdC4gSXQncyBmaW5lIGZvciB2YXJpYWJsZXNBdFRhaWwgdG8KKyAgICAgICAg
ICAgIC8vIG9taXQgRmx1c2hlcyBhbmQgUGhhbnRvbUxvY2Fscy4gT24gdGhlIG90aGVyIGhhbmQs
IGhhdmluZyBpdCByZWZlciB0byBhCisgICAgICAgICAgICAvLyBGbHVzaCBvciBhIFBoYW50b21M
b2NhbCBpZiBqdXN0IGJlZm9yZSBpdCB0aGUgbGFzdCB1c2Ugd2FzIGEgR2V0TG9jYWwgd291bGQK
KyAgICAgICAgICAgIC8vIHNlcmlvdXNseSBjb25mdXNlIHRoZSBDRkEuCisgICAgICAgICAgICBu
b2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhlck5vZGUpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hp
bGQxKEVkZ2UoYWRkUGhpKG5vZGUpKSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5zZXRPcGVyYW5kRmlyc3RUaW1lKHZhcmlhYmxlLT5sb2NhbCgpLCBub2RlKTsKKyAgICAgICAg
bV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCksIG5v
ZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbm9uaWNhbGl6ZVNldEFyZ3VtZW50KE5vZGUq
IG5vZGUpCisgICAgeworICAgICAgICBpbnQgbG9jYWwgPSBub2RlLT5sb2NhbCgpOworICAgICAg
ICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0T3BlcmFuZEZpcnN0VGltZShsb2NhbCwgbm9k
ZSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kRmlyc3RUaW1l
KGxvY2FsLCBub2RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjYW5vbmljYWxpemVMb2NhbHNJ
bkJsb2NrKCkKKyAgICB7CisgICAgICAgIGlmICghbV9ibG9jaykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgQVNTRVJUKG1fYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAgCisgICAg
ICAgIGNsZWFyVmFyaWFibGVzQXRIZWFkQW5kVGFpbDxBcmd1bWVudE9wZXJhbmQ+KCk7CisgICAg
ICAgIGNsZWFyVmFyaWFibGVzQXRIZWFkQW5kVGFpbDxMb2NhbE9wZXJhbmQ+KCk7CisgICAgICAg
IAorICAgICAgICAvLyBBc3N1bWVzIHRoYXQgYWxsIHBoaSByZWZlcmVuY2VzIGhhdmUgYmVlbiBy
ZW1vdmVkLiBBc3N1bWVzIHRoYXQgdGhpbmdzIHRoYXQKKyAgICAgICAgLy8gc2hvdWxkIGJlIGxp
dmUgaGF2ZSBhIG5vbi16ZXJvIHJlZiBjb3VudCwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoYXQgdGhl
IHJlZgorICAgICAgICAvLyBjb3VudHMgYXJlIGNvcnJlY3QgYmV5b25kIHRoYXQgKG1vcmUgZm9y
bWFsbHkgISFsb2dpY2FsUmVmQ291bnQgPT0gISFhY3R1YWxSZWZDb3VudAorICAgICAgICAvLyBi
dXQgbm90IGxvZ2ljYWxSZWZDb3VudCA9PSBhY3R1YWxSZWZDb3VudCkuIEFzc3VtZXMgdGhhdCBp
dCBjYW4gYnJlYWsgcmVmCisgICAgICAgIC8vIGNvdW50cy4KKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgbV9ibG9jay0+c2l6ZSgpOyAr
K25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KG5vZGVJ
bmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1
dGlvbihub2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhlIHJ1bGVzIGZvciB0
aHJlYWRlZCBDUFMgZm9ybToKKyAgICAgICAgICAgIC8vIAorICAgICAgICAgICAgLy8gSGVhZCB2
YXJpYWJsZTogdGhlIGZpcnN0IHRoaW5nIHRoYXQgaGFwcGVuZWQgdG8gdGhlIHZhcmlhYmxlIGlu
IHRoZSBibG9jay4KKyAgICAgICAgICAgIC8vIEl0IG1heSBiZSBhIEZsdXNoLCBQaGFudG9tTG9j
YWwsIEdldExvY2FsLCBTZXRMb2NhbCwgb3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLyBT
ZXRBcmd1bWVudCBtYXkgb25seSBhcHBlYXIgaW4gdGhlIHJvb3QgYmxvY2suCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gVGFpbCB2YXJpYWJsZTogdGhlIGxhc3QgdGhpbmcgdGhhdCBo
YXBwZW5lZCB0byB0aGUgdmFyaWFibGUgaW4gdGhlIGJsb2NrLgorICAgICAgICAgICAgLy8gSXQg
bWF5IGJlIGEgRmx1c2gsIFBoYW50b21Mb2NhbCwgR2V0TG9jYWwsIFNldExvY2FsLCBvciBTZXRB
cmd1bWVudC4KKyAgICAgICAgICAgIC8vIFNldEFyZ3VtZW50IG1heSBvbmx5IGFwcGVhciBpbiB0
aGUgcm9vdCBibG9jay4gTm90ZSB0aGF0IGlmIHRoZXJlIGV2ZXIKKyAgICAgICAgICAgIC8vIHdh
cyBhIEdldExvY2FsIHRvIHRoZSB2YXJpYWJsZSwgYW5kIGl0IHdhcyBmb2xsb3dlZCBieSBQaGFu
dG9tTG9jYWxzIGFuZAorICAgICAgICAgICAgLy8gRmx1c2hlcyBidXQgbm90IFNldExvY2Fscywg
dGhlbiB0aGUgdGFpbCB2YXJpYWJsZSB3aWxsIGJlIHRoZSBHZXRMb2NhbC4KKyAgICAgICAgICAg
IC8vIFRoaXMgcmVmbGVjdHMgdGhlIGZhY3QgdGhhdCB5b3Ugb25seSBjYXJlIHRoYXQgdGhlIHRh
aWwgdmFyaWFibGUgaXMgYQorICAgICAgICAgICAgLy8gRmx1c2ggb3IgUGhhbnRvbUxvY2FsIGlm
IG5vdGhpbmcgZWxzZSBpbnRlcmVzdGluZyBoYXBwZW5lZC4KKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyBDaGlsZCBvZiBHZXRMb2NhbDogdGhlIG9wZXJhdGlvbiB0aGF0IHRoZSBHZXRM
b2NhbCBrZWVwcyBhbGl2ZS4gRm9yCisgICAgICAgICAgICAvLyB1bmNhcHR1cmVkIGxvY2Fscywg
aXQgbWF5IGJlIGEgUGhpIGZyb20gdGhlIGN1cnJlbnQgYmxvY2suIEZvciBhcmd1bWVudHMsCisg
ICAgICAgICAgICAvLyBpdCBtYXkgYmUgYSBTZXRBcmd1bWVudC4gRm9yIGNhcHR1cmVkIGxvY2Fs
cyBhbmQgYXJndW1lbnRzIGl0IG1heSBhbHNvIGJlCisgICAgICAgICAgICAvLyBhIFNldExvY2Fs
LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIENoaWxkIG9mIFNldExvY2FsOiBtdXN0
IGJlIGEgdmFsdWUgcHJvZHVjaW5nIG5vZGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gQ2hpbGQgb2YgRmx1c2g6IGl0IG1heSBiZSBhIFBoaSBmcm9tIHRoZSBjdXJyZW50IGJsb2Nr
IG9yIGEgU2V0TG9jYWwuIEZvcgorICAgICAgICAgICAgLy8gYXJndW1lbnRzIGl0IG1heSBhbHNv
IGJlIGEgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2hpbGQg
b2YgUGhhbnRvbUxvY2FsOiBpdCBtYXkgYmUgYSBQaGkgZnJvbSB0aGUgY3VycmVudCBibG9jay4g
Rm9yCisgICAgICAgICAgICAvLyBhcmd1bWVudHMgaXQgbWF5IGFsc28gYmUgYSBTZXRBcmd1bWVu
dC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBDaGlsZHJlbiBvZiBQaGk6IG90aGVy
IFBoaXMgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2ssIG9yIGFueSBvZiB0aGUKKyAgICAgICAgICAg
IC8vIGZvbGxvd2luZyBmcm9tIGZyb20gcHJlZGVjZXNzb3IgYmxvY2tzOiBTZXRMb2NhbCwgUGhp
LCBvciBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBjb21wdXRlZCBieSBs
b29raW5nIGF0IHRoZSB0YWlsIHZhcmlhYmxlcyBvZiB0aGUgcHJlZGVjZXNzb3IKKyAgICAgICAg
ICAgIC8vIGJsb2NrcyBhbmQgZWl0aGVyIHVzaW5nIGl0IGRpcmVjdGx5IChpZiBpdCdzIGEgU2V0
TG9jYWwsIFBoaSwgb3IKKyAgICAgICAgICAgIC8vIFNldEFyZ3VtZW50KSBvciBsb2FkaW5nIHRo
YXQgbm9kZXMgY2hpbGQgKGlmIGl0J3MgYSBHZXRMb2NhbCwgUGhhbm9tTG9jYWwsCisgICAgICAg
ICAgICAvLyBvciBGbHVzaCAtIGFsbCBvZiB0aGVzZSB3aWxsIGhhdmUgY2hpbGRyZW4gdGhhdCBh
cmUgU2V0TG9jYWwsIFBoaSwgb3IKKyAgICAgICAgICAgIC8vIFNldEFyZ3VtZW50KS4KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBj
YXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsKG5vZGUp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxpemVTZXRMb2NhbChub2Rl
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbDxGbHVzaD4obm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICBjYW5v
bmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsPFBoYW50b20+KG5vZGUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxpemVTZXRBcmd1bWVudChub2RlKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrcygpCisgICAgeworICAg
ICAgICBmb3IgKG1fYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBtX2Jsb2Nr
SW5kZXgtLTspIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW21fYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKKyAgICB7
CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIGZhaWwgaW5zdGFu
dGx5LgorICAgICAgICBtX2Jsb2NrID0gMDsKKyAgICAgICAgbV9ibG9ja0luZGV4ID0gTm9CbG9j
azsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICghbV9waGlTdGFjay5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIFBoaVN0YWNrRW50cnkgZW50cnkgPSBtX3BoaVN0YWNrLmxhc3QoKTsKKyAgICAg
ICAgICAgIG1fcGhpU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IGVudHJ5Lm1fYmxvY2s7CisgICAgICAgICAgICBQcmVkZWNl
c3Nvckxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5tX3ByZWRlY2Vzc29yczsKKyAgICAgICAg
ICAgIE5vZGUqIGN1cnJlbnRQaGkgPSBlbnRyeS5tX3BoaTsKKyAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBjdXJyZW50UGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsK
KyAgICAgICAgICAgIGludCBvcGVyYW5kID0gdmFyaWFibGUtPmxvY2FsKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBwcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JCbG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBOb2RlKiB2YXJpYWJsZUluUHJldmlvdXMgPSBwcmVkZWNlc3NvckJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXZhcmlhYmxlSW5QcmV2aW91cykgeworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluUHJl
dmlvdXMgPSBhZGRQaGkocHJlZGVjZXNzb3JCbG9jaywgY3VycmVudFBoaS0+Y29kZU9yaWdpbiwg
dmFyaWFibGUpOworICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuc2V0T3BlcmFuZEZpcnN0VGltZShvcGVyYW5kLCB2YXJpYWJsZUluUHJldmlvdXMp
OworICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
c2V0T3BlcmFuZEZpcnN0VGltZShvcGVyYW5kLCB2YXJpYWJsZUluUHJldmlvdXMpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGVJ
blByZXZpb3VzLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlSW5Q
cmV2aW91cy0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGVJblByZXZpb3VzLT5jaGls
ZDEoKS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGVJblByZXZpb3VzID0gdmFyaWFibGVJblByZXZpb3VzLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFT
U0VSVCgKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJblByZXZpb3VzLT5vcCgpID09IFNl
dExvY2FsCisgICAgICAgICAgICAgICAgICAgIHx8IHZhcmlhYmxlSW5QcmV2aW91cy0+b3AoKSA9
PSBQaGkKKyAgICAgICAgICAgICAgICAgICAgfHwgdmFyaWFibGVJblByZXZpb3VzLT5vcCgpID09
IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGRpZFNldENo
aWxkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IDA7
IGNoaWxkSWR4IDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytjaGlsZElkeCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudFBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJZHgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRQaGktPmNoaWxkcmVuLnNldENoaWxkKGNoaWxkSWR4LCBFZGdlKHZhcmlhYmxlSW5QcmV2aW91
cykpOworICAgICAgICAgICAgICAgICAgICBkaWRTZXRDaGlsZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
ZGlkU2V0Q2hpbGQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIG5ld1BoaSA9IGFkZFBoaVNpbGVudGx5KGJsb2Nr
LCBjdXJyZW50UGhpLT5jb2RlT3JpZ2luLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgbmV3
UGhpLT5jaGlsZHJlbiA9IGN1cnJlbnRQaGktPmNoaWxkcmVuOworICAgICAgICAgICAgICAgIGN1
cnJlbnRQaGktPmNoaWxkcmVuLmluaXRpYWxpemUobmV3UGhpLCB2YXJpYWJsZUluUHJldmlvdXMs
IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0cnVjdCBQ
aGlTdGFja0VudHJ5IHsKKyAgICAgICAgUGhpU3RhY2tFbnRyeShCYXNpY0Jsb2NrKiBibG9jaywg
Tm9kZSogcGhpKQorICAgICAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAgICAgLCBt
X3BoaShwaGkpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQmFzaWNC
bG9jayogbV9ibG9jazsKKyAgICAgICAgTm9kZSogbV9waGk7CisgICAgfTsKKyAgICAKKyAgICBC
bG9ja0luZGV4IG1fYmxvY2tJbmRleDsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIFZl
Y3RvcjxQaGlTdGFja0VudHJ5LCA2ND4gbV9waGlTdGFjazsKK307CisKK2Jvb2wgcGVyZm9ybUNQ
U1JldGhyZWFkaW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIENQUyBSZXRocmVhZGluZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFz
ZTxDUFNSZXRocmVhZGluZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ1BTUmV0aHJlYWRpbmdQaGFzZV9oCisj
ZGVmaW5lIERGR0NQU1JldGhyZWFkaW5nUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ1BTIFJldGhyZWFkaW5nOgorLy8KKy8vIFRha2Vz
IGEgZ3JhcGggaW4gd2hpY2ggdGhlcmUgYXJlIGFyYml0cmFyeSBHZXRMb2NhbHMvU2V0TG9jYWxz
IHdpdGggbm8gY29ubmVjdGlvbnMKKy8vIGJldHdlZW4gdGhlbS4gUmVtb3ZlcyByZWR1bmRhbnQg
b25lcyBpbiB0aGUgY2FzZSBvZiB1bmNhcHR1cmVkIHZhcmlhYmxlcy4gQ29ubmVjdHMKKy8vIGFs
bCBvZiB0aGVtIHdpdGggUGhpIGZ1bmN0aW9ucyB0byByZXByZXNlbnQgbGl2ZSByYW5nZXMuCisK
K2Jvb2wgcGVyZm9ybUNQU1JldGhyZWFkaW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOSBAQCBwdWJs
aWM6CiAgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpOyArK2Jsb2NrKQogICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2tdLmdldCgpKTsKICAgICAgICAgCisgICAgICAgIGlmIChtX2NoYW5n
ZWQpCisgICAgICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IExvYWRTdG9yZTsKKyAgICAgICAgCiAg
ICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAgICAgfQogICAgIApAQCAtOTc0LDI3ICs5NzcsNiBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lk
IHBlcmZvcm1TdWJzdGl0dXRpb24oRWRnZSYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKLSAg
ICB7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQu
Ci0gICAgICAgIGlmICghY2hpbGQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
ICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCi0gICAgICAgIE5vZGUq
IHJlcGxhY2VtZW50ID0gY2hpbGQtPnJlcGxhY2VtZW50OwotICAgICAgICBpZiAoIXJlcGxhY2Vt
ZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgY2hpbGQuc2V0Tm9k
ZShyZXBsYWNlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGVyZSBpcyBkZWZpbml0ZWx5
IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBkb2VzIG5vdAotICAg
ICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCi0gICAgICAgIEFTU0VSVCghY2hpbGQtPnJlcGxh
Y2VtZW50KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChhZGRSZWYpCi0gICAgICAgICAgICBtX2dy
YXBoLnJlZihjaGlsZCk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgZWxpbWluYXRlSXJyZWxldmFu
dFBoYW50b21DaGlsZHJlbihOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gUGhhbnRvbSk7CkBAIC0xMDcyLDIxICsxMDU0LDEyIEBAIHByaXZhdGU6CiAgICAg
CiAgICAgdm9pZCBwZXJmb3JtTm9kZUNTRShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgYm9v
bCBzaG91bGRHZW5lcmF0ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Ci0KLSAgICAgICAgaWYg
KG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJz
dENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbihub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOwot
ICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwg
c2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLT5j
aGlsZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICB9CisgICAgICAgIG1f
Z3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihub2RlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFNldExvY2FsKQogICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdl
RmxhZ3MoTm9kZVJlbGV2YW50VG9PU1IpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFzaG91bGRH
ZW5lcmF0ZSkKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCkBAIC0xMTYyLDI2ICsxMTM1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2Rl
KiBwaGkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBpZiAoIXNldFJlcGxh
Y2VtZW50KHBvc3NpYmxlUmVwbGFjZW1lbnQpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgLy8gSWYgdGhlIEdldExvY2FsIHdlIHJlcGxhY2VkIHVzZWQgdG8gcmVmZXIgdG8g
YSBTZXRMb2NhbCwgdGhlbiBpdCBub3cKLSAgICAgICAgICAgIC8vIHNob3VsZCByZWZlciB0byB0
aGUgY2hpbGQgb2YgdGhlIFNldExvY2FsIGluc3RlYWQuCi0gICAgICAgICAgICBpZiAocGhpLT5v
cCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgp
ID09IHBoaSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxk
cmVuLmNoaWxkMSgpLCBwaGktPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IE5vZGUqIG9sZFRhaWwgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQo
Ci0gICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKLSAgICAgICAg
ICAgIGlmIChvbGRUYWlsID09IG5vZGUpIHsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9
Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcDsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBNYWludGFpbiBncmFwaCBpbnRlZ3JpdHk6IHNpbmNlIHdlJ3Jl
IHJlcGxhY2luZyBhIEdldExvY2FsIHdpdGggYSBHZXRMb2NhbFVubGlua2VkLAotICAgICAgICAg
ICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBHZXRMb2NhbFVubGlua2VkIGlzIG5vdyBsaW5r
ZWQuCi0gICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRMb2Nh
bFVubGlua2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+c2V0T3Ao
R2V0TG9jYWwpOwotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNoaWxkcmVu
LmNoaWxkMSgpID0gRWRnZShwaGkpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihw
aGkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFw
aC5kZXRocmVhZCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSByZXBsYWNl
IGEgR2V0TG9jYWwgd2l0aCBhIEdldExvY2FsVW5saW5rZWQsIHRoZW4gdHVybiB0aGUgR2V0TG9j
YWxVbmxpbmtlZAorICAgICAgICAgICAgLy8gaW50byBhIEdldExvY2FsLgorICAgICAgICAgICAg
aWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKSB7CisgICAgICAg
ICAgICAgICAgcmVsZXZhbnRMb2NhbE9wLT5jb252ZXJ0VG9HZXRMb2NhbCh2YXJpYWJsZUFjY2Vz
c0RhdGEsIHBoaSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYocGhpKTsKICAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC0xMjM1LDkgKzExOTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKG5vZGUpOwogICAgICAgICAgICAgbm9kZS0+Y2hp
bGRyZW4uY2hpbGQxKCkgPSBFZGdlKGRhdGFOb2RlKTsKICAgICAgICAgICAgIG1fZ3JhcGgucmVm
KGRhdGFOb2RlKTsKLSAgICAgICAgICAgIE5vZGUqIG9sZFRhaWwgPSBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwotICAgICAgICAgICAgaWYgKG9sZFRhaWwg
PT0gbm9kZSkKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQobG9jYWwpID0gcmVwbGFjZW1lbnQ7CisgICAgICAgICAgICBtX2dyYXBoLmRldGhy
ZWFkKCk7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIzLDYwICszMjMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSog
cHJldmlvdXNMb2NhbEFjY2VzcyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBub2RlCi0gICAgICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBleHBlY3QgdGhpcyB0byBiZSB0aGUgY29tbW9uIGNhc2UuCi0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChibG9jay0+aXNJblBoaXMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3Bl
cmFuZChub2RlLT5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nlc3M7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluZGV4SW5CbG9jayA+IDAp
OwotICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IHNlYXJjaCBmb3IgdGhlIHByZXZpb3VzIGFj
Y2VzcyB0byB0aGlzIGxvY2FsLgotICAgICAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
c3ViSW5kZXhJbkJsb2NrID0gaW5kZXhJbkJsb2NrOyBzdWJJbmRleEluQmxvY2stLTspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN1Yk5vZGUgPSBibG9jay0+YXQoc3ViSW5kZXhJ
bkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3ViTm9kZS0+bG9jYWwoKSAhPSBub2RlLT5sb2NhbCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhl
IHR3byBtdXN0IGhhdmUgYmVlbiB1bmlmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHN1Yk5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBz
dWJOb2RlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c0xvY2FsQWNjZXNzKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgYWNjZXNzIG11c3QgaGF2ZSBi
ZWVuIGEgUGhpLgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHBoaUlu
ZGV4SW5CbG9jayA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXhJbkJsb2NrLS07KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW3Bo
aUluZGV4SW5CbG9ja107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+bG9jYWwoKSAh
PSBub2RlLT5sb2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdHdvIG11c3QgaGF2ZSBiZWVu
IHVuaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNjZXNzID0gcGhpTm9kZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nlc3MpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIHRhaWxOb2RlID0gYmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlm
ICh0YWlsTm9kZSA9PSBub2RlKQotICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOwotICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICB0YWlsTm9kZS0+b3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgdGFpbE5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGlzQ2FwdHVyZWRBdE9yQWZ0ZXIoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZS0+
bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAogICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsK
ICAgICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKICAg
ICAgICAgICAgICAgICAKQEAgLTM4NCw2ICszMzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3Jp
Z2luLCBjaGlsZHJlbik7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJl
YWQoKTsKICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIG1f
c3RhdGUucmVzZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5j
cHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE1IEBACiAjaW5jbHVkZSAiREZH
Qnl0ZUNvZGVQYXJzZXIuaCIKICNpbmNsdWRlICJERkdDRkFQaGFzZS5oIgogI2luY2x1ZGUgIkRG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmgiCiAjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKICNpbmNsdWRlICJERkdK
SVRDb21waWxlci5oIgorI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgog
I2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHVW5pZmljYXRpb25Q
aGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtMTAy
LDkgKzEwNSw2IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAg
ICBpZiAoIXBhcnNlKGV4ZWMsIGRmZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBpZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKQotICAgICAgICBkZmcucHJlZGlj
dEFyZ3VtZW50VHlwZXMoKTsKLSAgICAKICAgICAvLyBCeSB0aGlzIHBvaW50IHRoZSBERkcgYnl0
ZWNvZGUgcGFyc2VyIHdpbGwgaGF2ZSBwb3RlbnRpYWxseSBtdXRhdGVkIHZhcmlvdXMgdGFibGVz
CiAgICAgLy8gaW4gdGhlIENvZGVCbG9jay4gVGhpcyBpcyBhIGdvb2QgdGltZSB0byBwZXJmb3Jt
IGFuIGVhcmx5IHNocmluaywgd2hpY2ggaXMgbW9yZQogICAgIC8vIHBvd2VyZnVsIHRoYW4gYSBs
YXRlIG9uZS4gSXQncyBzYWZlIHRvIGRvIHNvIGJlY2F1c2Ugd2UgaGF2ZW4ndCBnZW5lcmF0ZWQg
YW55IGNvZGUKQEAgLTExMywyNyArMTEzLDQyIEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGls
ZU1vZGUgY29tcGlsZU0KIAogICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQogICAgICAgICB2
YWxpZGF0ZShkZmcpOworICAgIAorICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOworICAg
IHBlcmZvcm1VbmlmaWNhdGlvbihkZmcpOworICAgIHBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9u
KGRmZyk7CisgICAgCisgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCisgICAgICAgIHZhbGlk
YXRlKGRmZyk7CisgICAgCiAgICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOwog
ICAgIHBlcmZvcm1GaXh1cChkZmcpOwogICAgIHBlcmZvcm1TdHJ1Y3R1cmVDaGVja0hvaXN0aW5n
KGRmZyk7CisgICAgCiAgICAgdW5zaWduZWQgY250ID0gMTsKICAgICBkZmcubV9maXhwb2ludFN0
YXRlID0gRml4cG9pbnROb3RDb252ZXJnZWQ7CiAgICAgZm9yICg7OyArK2NudCkgewogICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgZGF0YUxvZ0Yo
IkRGRyBiZWdpbm5pbmcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGl0ZXJhdGlvbiAjJXUuXG4iLCBj
bnQpOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIHBl
cmZvcm1DRkEoZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ29uc3RhbnRGb2xkaW5n
KGRmZyk7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUFyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
KGRmZyk7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKGRmZyk7
CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNTRShkZmcpOworICAgICAgICAKICAgICAgICAg
aWYgKCFjaGFuZ2VkKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAogICAgICAgICBkZmcu
cmVzZXRFeGl0U3RhdGVzKCk7CiAgICAgICAgIHBlcmZvcm1GaXh1cChkZmcpOworICAgICAgICBw
ZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICB9CisgICAgCiAgICAgZGZnLm1fZml4cG9p
bnRTdGF0ZSA9IEZpeHBvaW50Q29udmVyZ2VkOwogICAgIHBlcmZvcm1DU0UoZGZnKTsKKyAgICBw
ZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBiZSBhIG5v
LW9wIHNpbmNlIENTRSByYXJlbHkgZGV0aHJlYWRzIHRoZSBncmFwaC4KICAgICBpZiAodmVyYm9z
ZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICBkYXRhTG9nRigiREZHIG9wdGltaXphdGlv
biBmaXhwb2ludCBjb252ZXJnZWQgaW4gJXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7CiAgICAgcGVy
Zm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBA
QCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDCiAgICAgLCBtX29zckVu
dHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBtX211c3RIYW5k
bGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKICAgICAsIG1fZml4cG9pbnRTdGF0ZShCZWZvcmVG
aXhwb2ludCkKKyAgICAsIG1fZm9ybShMb2FkU3RvcmUpCisgICAgLCBtX3VuaWZpY2F0aW9uU3Rh
dGUoTG9jYWxseVVuaWZpZWQpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiB9CkBA
IC0xOTUsOSArMTk3LDEzIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSksICIgLT4gIiwgUmF3
UG9pbnRlcihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksICIp
Iik7CiAgICAgaWYgKG5vZGUtPmhhc0Z1bmN0aW9uKCkpIHsKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiZnVuY3Rpb24oIiwgUmF3UG9pbnRlcihub2RlLT5mdW5jdGlvbigpKSwgIiwgIik7Ci0g
ICAgICAgIGlmIChub2RlLT5mdW5jdGlvbigpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZv
KSkKLSAgICAgICAgICAgIG91dC5wcmludChGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKGpzQ2FzdDxK
U0Z1bmN0aW9uKj4obm9kZS0+ZnVuY3Rpb24oKSktPmpzRXhlY3V0YWJsZSgpKSk7Ci0gICAgICAg
IGVsc2UKKyAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmluaGVyaXRzKCZKU0Z1bmN0aW9u
OjpzX2luZm8pKSB7CisgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4obm9kZS0+ZnVuY3Rpb24oKSk7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24t
PmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCI8aG9zdCBmdW5j
dGlvbj4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoRnVu
Y3Rpb25FeGVjdXRhYmxlRHVtcChmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCkpKTsKKyAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnQoIjxub3QgSlNGdW5jdGlvbj4iKTsKICAgICAg
ICAgb3V0LnByaW50KCIpIik7CiAgICAgfQpAQCAtMzc3LDIyICszODMsMjIgQEAgdm9pZCBHcmFw
aDo6ZGVyZWZDaGlsZHJlbihOb2RlKiBvcCkKICAgICBET19UT19DSElMRFJFTihvcCwgZGVyZWYp
OwogfQogCi12b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcygpCit2b2lkIEdyYXBoOjpk
ZXRocmVhZCgpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPj0g
MSk7Ci0gICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKLSAgICAgICAgVmFsdWVQcm9m
aWxlKiBwcm9maWxlID0gbV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChh
cmcpOwotICAgICAgICBpZiAoIXByb2ZpbGUpCisgICAgaWYgKG1fZm9ybSA9PSBMb2FkU3RvcmUp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBtX2FyZ3VtZW50c1thcmdd
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24oKSk7Ci0gICAgICAgIAotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAg
ICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJBcmd1bWVudCBbIiwgYXJnLCAiXSBwcmVkaWN0
aW9uOiAiLAotICAgICAgICAgICAgU3BlY3VsYXRpb25EdW1wKG1fYXJndW1lbnRzW2FyZ10tPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKLSNlbmRpZgorICAgICAg
ICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0t
OykgeworICAgICAgICAgICAgTm9kZSogcGhpID0gYmxvY2stPnBoaXNbcGhpSW5kZXhdOworICAg
ICAgICAgICAgcGhpLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICB9CiAgICAgfQorICAgIAor
ICAgIG1fZm9ybSA9IExvYWRTdG9yZTsKIH0KIAogdm9pZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29y
KFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgs
IEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYwIEBAIGVudW0gQWRkU3Bl
Y3VsYXRpb25Nb2RlIHsKICAgICBTcGVjdWxhdGVJbnRlZ2VyQnV0QWx3YXlzV2F0Y2hPdmVyZmxv
dywKICAgICBTcGVjdWxhdGVJbnRlZ2VyCiB9OworCisvLyBEZXNjcmliZXMgdGhlIGZvcm0geW91
IGNhbiBleHBlY3QgdGhlIGVudGlyZSBncmFwaCB0byBiZSBpbi4KK2VudW0gR3JhcGhGb3JtIHsK
KyAgICAvLyBMb2FkU3RvcmUgZm9ybSBtZWFucyB0aGF0IGJhc2ljIGJsb2NrcyBtYXkgZnJlZWx5
IHVzZSBHZXRMb2NhbCwgU2V0TG9jYWwsCisgICAgLy8gR2V0TG9jYWxVbmxpbmtlZCwgYW5kIEZs
dXNoIGZvciBhY2Nlc3NpbmcgbG9jYWwgdmFyaWFibGVzIGFuZCBpbmRpY2F0aW5nCisgICAgLy8g
d2hlcmUgdGhlaXIgbGl2ZSByYW5nZXMgb3VnaHQgdG8gYmUuIExpdmVuZXNzIGlzIGltcGxpY2l0
LCBhcyBpcyB0aGUgZGF0YQorICAgIC8vIGZsb3cgYmV0d2VlbiBsb2NhbCBhY2Nlc3Nlcy4gRm9y
IGV4YW1wbGUsIExvYWRTdG9yZSBmb3JtIGdpdmVzIG5vIGVhc3kgd2F5CisgICAgLy8gdG8gZGV0
ZXJtaW5lIHdoaWNoIFNldExvY2FsJ3MgZmxvdyBpbnQgbyBhIEdldExvY2FsLiBBcyB3ZWxsLCBM
b2FkU3RvcmUKKyAgICAvLyBmb3JtIGltcGxpZXMgbm8gcmVzdHJpY3Rpb25zIG9uIHJlZHVuZGFu
Y3k6IHlvdSBjYW4gZnJlZWx5IGVtaXQgbXVsdGlwbGUKKyAgICAvLyBHZXRMb2NhbHMsIG9yIG11
bHRpcGxlIFNldExvY2FscyAob3IgYW55IGNvbWJpbmF0aW9uIHRoZXJlb2YpIHRvIHRoZSBzYW1l
CisgICAgLy8gbG9jYWwgaW4gdGhlIHNhbWUgYmxvY2suIExvYWRTdG9yZSBmb3JtIGRvZXMgbm90
IHJlcXVpcmUgYmFzaWMgYmxvY2tzIHRvCisgICAgLy8gZGVjbGFyZSBob3cgdGhleSBhZmZlY3Qg
b3IgdXNlIGxvY2Fscywgb3RoZXIgdGhhbiBpbXBsaWNpdGx5IGJ5IHVzaW5nCisgICAgLy8gdGhl
IGxvY2FsIG9wcy4gRmluYWxseSwgTG9hZFN0b3JlIGFsbG93cyBmbGV4aWJpbGl0eSBpbiBob3cg
bGl2ZW5lc3Mgb2YKKyAgICAvLyBsb2NhbHMgaXMgZXh0ZW5kZWQ7IGZvciBleGFtcGxlIHlvdSBj
YW4gcmVwbGFjZSBhIEdldExvY2FsIHdpdGggYSBQaGFudG9tCisgICAgLy8gYW5kIHNvIGxvbmcg
YXMgdGhlIFBoYW50b20gcmV0YWlucyB0aGUgR2V0TG9jYWwncyBjaGlsZHJlbiAoaS5lLiB0aGUg
UGhpCisgICAgLy8gbW9zdCBsaWtlbHkpIHRoZW4gaXQgaW1wbGllcyB0aGF0IHRoZSBsb2NhbCBp
cyBzdGlsbCBsaXZlIGJ1dCB0aGF0IGl0IG5lZWQKKyAgICAvLyBub3QgYmUgc3RvcmVkIHRvIHRo
ZSBzdGFjayBuZWNlc3NhcmlseS4gVGhpcyBpbXBsaWVzIHRoYXQgUGhhbnRvbSBjYW4KKyAgICAv
LyByZWZlcmVuY2Ugbm9kZXMgdGhhdCBoYXZlIG5vIHJlc3VsdCwgYXMgbG9uZyBhcyB0aG9zZSBu
b2RlcyBhcmUgdmFsaWQKKyAgICAvLyBHZXRMb2NhbCBjaGlsZHJlbiAoaS5lLiBQaGksIFNldExv
Y2FsLCBTZXRBcmd1bWVudCkuCisgICAgLy8KKyAgICAvLyBMb2FkU3RvcmUgZm9ybSBhbHNvIGlt
cGxpZXMgdGhhdCBQaGlzIHRoZW1zZWx2ZXMgY2FuIGhhdmUgYXJiaXRyYXJ5CisgICAgLy8gY2hp
bGRyZW4uIFBoaSBjaGlsZHJlbiBjb3VsZCBldmVuIGJlIGRhbmdsaW5nLCBhbmQgc2hvdWxkIG5v
dCBiZSByZWxpZWQKKyAgICAvLyB1cG9uLgorICAgIC8vCisgICAgLy8gTG9hZFN0b3JlIGZvcm0g
aXMgc3VpdGFibGUgZm9yIENGRyB0cmFuc2Zvcm1hdGlvbnMsIGFzIHdlbGwgYXMgc3RyZW5ndGgK
KyAgICAvLyByZWR1Y3Rpb24sIGZvbGRpbmcsIGFuZCBDU0UuCisgICAgTG9hZFN0b3JlLAorICAg
IAorICAgIC8vIFRocmVhZGVkQ1BTIGZvcm0gbWVhbnMgdGhhdCBiYXNpYyBibG9ja3MgbGlzdCB1
cC1mcm9udCB3aGljaCBsb2NhbHMgdGhleQorICAgIC8vIGV4cGVjdCB0byBiZSBsaXZlIGF0IHRo
ZSBoZWFkLCBhbmQgd2hpY2ggbG9jYWxzIHRoZXkgbWFrZSBhdmFpbGFibGUgYXQgdGhlCisgICAg
Ly8gdGFpbC4gVGhyZWFkZWRDUFMgZm9ybSBhbHNvIGltcGxpZXMgdGhhdDoKKyAgICAvLworICAg
IC8vIC0gR2V0TG9jYWxzIGFuZCBTZXRMb2NhbHMgdG8gdW5jYXB0dXJlZCB2YXJpYWJsZXMgYXJl
IG5vdCByZWR1bmRhbnQgd2l0aGluCisgICAgLy8gICBhIGJhc2ljIGJsb2NrLgorICAgIC8vCisg
ICAgLy8gLSBBbGwgR2V0TG9jYWxzIGFuZCBGbHVzaGVzIGFyZSBsaW5rZWQgZGlyZWN0bHkgdG8g
dGhlIGxhc3QgYWNjZXNzIHBvaW50CisgICAgLy8gICBvZiB0aGUgdmFyaWFibGUsIHdoaWNoIG11
c3Qgbm90IGJlIGFub3RoZXIgR2V0TG9jYWwgaWYgdGhlIHZhcmlhYmxlIGlzCisgICAgLy8gICB1
bmNhcHR1cmVkLgorICAgIC8vCisgICAgLy8gLSBQaGFudG9tKFBoaSkgaXMgbm90IGxlZ2FsLCBi
dXQgUGhhbnRvbUxvY2FsIGlzLgorICAgIC8vCisgICAgLy8gVGhyZWFkZWRDUFMgZm9ybSBpcyBz
dWl0YWJsZSBmb3IgZGF0YSBmbG93IGFuYWx5c2lzIChDRkEsIHByZWRpY3Rpb24KKyAgICAvLyBw
cm9wYWdhdGlvbiksIHJlZ2lzdGVyIGFsbG9jYXRpb24sIGFuZCBjb2RlIGdlbmVyYXRpb24uCisg
ICAgVGhyZWFkZWRDUFMKK307CisKKy8vIERlc2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhlIFVuaW9u
RmluZCBzdHJ1Y3R1cmUgb2YgVmFyaWFibGVBY2Nlc3NEYXRhJ3MuCitlbnVtIFVuaWZpY2F0aW9u
U3RhdGUgeworICAgIC8vIEJhc2ljQmxvY2stbG9jYWwgYWNjZXNzZXMgdG8gdmFyaWFibGVzIGFy
ZSBhcHByb3ByaWF0ZWx5IHVuaWZpZWQgd2l0aCBlYWNoIG90aGVyLgorICAgIExvY2FsbHlVbmlm
aWVkLAogICAgIAorICAgIC8vIFVuaWZpY2F0aW9uIGhhcyBiZWVuIHBlcmZvcm1lZCBnbG9iYWxs
eS4KKyAgICBHbG9iYWxseVVuaWZpZWQKK307CiAKIC8vCiAvLyA9PT0gR3JhcGggPT09CkBAIC0x
NjcsNiArMjIwLDQwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZDIoTm9k
ZSogbm9kZSkgeyBjbGVhckFuZERlcmVmQ2hpbGQobm9kZSwgMSk7IH0KICAgICB2b2lkIGNsZWFy
QW5kRGVyZWZDaGlsZDMoTm9kZSogbm9kZSkgeyBjbGVhckFuZERlcmVmQ2hpbGQobm9kZSwgMik7
IH0KICAgICAKKyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb24oTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2RlLT5zaG91bGRHZW5lcmF0ZSgpOwor
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8
IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCisg
ICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UobV92YXJBcmdDaGlsZHJl
bltjaGlsZElkeF0sIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBz
aG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShu
b2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVy
Zm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHNob3VsZEdl
bmVyYXRlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0
dXRpb25Gb3JFZGdlKEVkZ2UmIGNoaWxkLCBib29sIGFkZFJlZikKKyAgICB7CisgICAgICAgIC8v
IENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCisgICAgICAgIGlmICgh
Y2hpbGQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayBp
ZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCisgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50ID0g
Y2hpbGQtPnJlcGxhY2VtZW50OworICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgY2hpbGQuc2V0Tm9kZShyZXBsYWNlbWVudCk7
CisgICAgICAgIAorICAgICAgICAvLyBUaGVyZSBpcyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQu
IEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBkb2VzIG5vdAorICAgICAgICAvLyBoYXZlIGEg
cmVwbGFjZW1lbnQuCisgICAgICAgIEFTU0VSVCghY2hpbGQtPnJlcGxhY2VtZW50KTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChhZGRSZWYpCisgICAgICAgICAgICByZWYoY2hpbGQpOworICAgIH0K
KyAgICAKICNkZWZpbmUgREZHX0RFRklORV9BRERfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQ
b3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdz
KSBcCiAgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRkTm9k
ZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9k
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAg
ICAgeyBcCkBAIC0xODMsNiArMjcwLDggQEAgcHVibGljOgogICAgIERGR19WQVJJQURJQ19URU1Q
TEFURV9GVU5DVElPTihERkdfREVGSU5FX0FERF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVfQURE
X05PREUKIAorICAgIHZvaWQgZGV0aHJlYWQoKTsKKyAgICAKICAgICAvLyBDYWxsIHRoaXMgaWYg
eW91J3ZlIG1vZGlmaWVkIHRoZSByZWZlcmVuY2UgY291bnRzIG9mIG5vZGVzIHRoYXQgZGVhbCB3
aXRoCiAgICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGxv
Y2FsIHZhcmlhYmxlIHJlZmVyZW5jZXMgY2FuIGZvcm0KICAgICAvLyBjeWNsZXMsIGFuZCBoZW5j
ZSByZWZlcmVuY2UgY291bnRpbmcgaXMgbm90IGVub3VnaC4gVGhpcyB3aWxsIHJlc2V0IHRoZQpA
QCAtMzUxLDggKzQ0MCw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyICpvcE5h
bWUoTm9kZVR5cGUpOwogICAgIAotICAgIHZvaWQgcHJlZGljdEFyZ3VtZW50VHlwZXMoKTsKLSAg
ICAKICAgICBTdHJ1Y3R1cmVTZXQqIGFkZFN0cnVjdHVyZVNldChjb25zdCBTdHJ1Y3R1cmVTZXQm
IHN0cnVjdHVyZVNldCkKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVTZXQuc2l6ZSgp
KTsKQEAgLTcxOCw2ICs4MDUsOCBAQCBwdWJsaWM6CiAgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbV9t
dXN0SGFuZGxlVmFsdWVzOwogICAgIAogICAgIE9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUgbV9m
aXhwb2ludFN0YXRlOworICAgIEdyYXBoRm9ybSBtX2Zvcm07CisgICAgVW5pZmljYXRpb25TdGF0
ZSBtX3VuaWZpY2F0aW9uU3RhdGU7CiBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxlU3Vj
Y2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2Nr
SW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNiArMzA0LDIyIEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQog
ICAgIAorICAgIHZvaWQgY29udmVydFRvUGhhbnRvbUxvY2FsKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX29wID09IFBoYW50b20gJiYgKGNoaWxkMSgpLT5vcCgpID09IFBoaSB8fCBjaGlsZDEo
KS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBjaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVudCkpOwor
ICAgICAgICBtX29wID0gUGhhbnRvbUxvY2FsOworICAgICAgICBtX29wSW5mbyA9IGNoaWxkMSgp
LT5tX29wSW5mbzsgLy8gQ29weSB0aGUgdmFyaWFibGVBY2Nlc3NEYXRhLgorICAgICAgICBjaGls
ZHJlbi5zZXRDaGlsZDEoRWRnZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9H
ZXRMb2NhbChWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBOb2RlKiBwaGkpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRMb2NhbFVubGlua2VkKTsKKyAgICAgICAgbV9vcCA9
IEdldExvY2FsOworICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZh
cmlhYmxlKTsKKyAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UocGhpKSk7CisgICAgfQor
ICAgIAogICAgIEpTQ2VsbCogd2Vha0NvbnN0YW50KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChv
cCgpID09IFdlYWtKU0NvbnN0YW50KTsKQEAgLTM1OCw2ICszNzQsNyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICBj
YXNlIEZsdXNoOgorICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTQxNzIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw2ICs2Myw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhOb3AsIE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBoaSwgTm9kZURvZXNO
b3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwKICAgICBtYWNybyhGbHVzaCwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAorICAgIG1hY3JvKFBoYW50b21Mb2NhbCwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIFwKICAgICAvKiBHZXQgdGhl
IHZhbHVlIG9mIGEgbG9jYWwgdmFyaWFibGUsIHdpdGhvdXQgbGlua2luZyBpbnRvIHRoZSBWYXJp
YWJsZUFjY2Vzc0RhdGEgKi9cCiAgICAgLyogbmV0d29yay4gVGhpcyBpcyBvbmx5IHZhbGlkIGZv
ciB2YXJpYWJsZSBhY2Nlc3NlcyB3aG9zZSBwcmVkaWN0aW9ucyBvcmlnaW5hdGVkICovXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgor
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVi
bGljOgorICAgIFByZWRpY3Rpb25JbmplY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAg
IDogUGhhc2UoZ3JhcGgsICJwcmVkaWN0aW9uIGluamVjdGlvbiIpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0g
PT0gVGhyZWFkZWRDUFMpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3Rh
dGUgPT0gR2xvYmFsbHlVbmlmaWVkKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChjb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpID49IDEpOworICAgICAgICBmb3IgKHNpemVfdCBhcmcgPSAw
OyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkp
OyArK2FyZykgeworICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gcHJvZmlsZWRC
bG9jaygpLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICAgICAgaWYgKCFw
cm9maWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIAor
I2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAg
ICAgICAgICAgICAgIkFyZ3VtZW50IFsiLCBhcmcsICJdIHByZWRpY3Rpb246ICIsCisgICAgICAg
ICAgICAgICAgU3BlY3VsYXRpb25EdW1wKG1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX29zckVudHJ5
Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5vcGVyYW5kKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVl
cy5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmhh
c0xvY2FsKCkpOworICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5w
cmVkaWN0KAorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBo
Lm1fbXVzdEhhbmRsZVZhbHVlc1tpXSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1QcmVk
aWN0aW9uSW5qZWN0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIFByZWRpY3Rpb24gSW5qZWN0aW9uIFBoYXNlIik7CisgICAgcmV0dXJu
IHJ1blBoYXNlPFByZWRpY3Rpb25JbmplY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Jbmpl
Y3Rpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZV9oCisjZGVmaW5lIERGR1ByZWRpY3Rpb25Jbmpl
Y3Rpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBo
OworCisvLyBQcmVkaWN0aW9uIEluamVjdGlvbjoKKy8vCisvLyBUYWtlcyBtaXNjZWxsYW5lb3Vz
IGRhdGEgYWJvdXQgdmFyaWFibGUgdHlwZSBwcmVkaWN0aW9ucyBhbmQgaW5qZWN0cyB0aGVtLgor
Ly8gVGhpcyBpbmNsdWRlcyBhcmd1bWVudCBwcmVkaWN0aW9ucyBhbmQgT1NSIGVudHJ5IHByZWRp
Y3Rpb25zLgorCitib29sIHBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9uKEdyYXBoJik7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NiArNDMsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgQVNTRVJUKG1f
Z3JhcGgubV91bmlmaWNhdGlvblN0YXRlID09IEdsb2JhbGx5VW5pZmllZCk7CisgICAgICAgIAog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgbV9jb3Vu
dCA9IDA7CiAjZW5kaWYKQEAgLTgxMiw2ICs4MTUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IElubGluZVN0YXJ0OgogICAgICAgICBjYXNlIE5vcDoKICAgICAgICAgY2FzZSBDb3VudEV4ZWN1
dGlvbjoKKyAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
MTQxNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAwNyw2ICs1MDA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUGhhbnRvbToKKyAg
ICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wLgogICAgICAg
ICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYg
KzQ5LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAgIEFT
U0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgaS0t
OykgewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9ICZtX2dyYXBo
Lm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOwogICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS0+aXNS
b290KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmlj
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBVbmlmaWNhdGlv
blBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBVbmlmaWNhdGlvblBoYXNlKEdy
YXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInVuaWZpY2F0aW9uIikKKyAgICB7
CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dy
YXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fdW5p
ZmljYXRpb25TdGF0ZSA9PSBMb2NhbGx5VW5pZmllZCk7CisgICAgICAgIAorICAgICAgICAvLyBF
bnN1cmUgdGhhdCBhbGwgUGhpIGZ1bmN0aW9ucyBhcmUgdW5pZmllZC4KKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRl
eC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2st
PnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9
IGJsb2NrLT5waGlzW3BoaUluZGV4XTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNo
aWxkSWR4ID0gMDsgY2hpbGRJZHggPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2NoaWxkSWR4KSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghcGhpLT5jaGlsZHJlbi5jaGlsZChjaGlsZElkeCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIHBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnVuaWZ5KAorICAg
ICAgICAgICAgICAgICAgICAgICAgcGhpLT5jaGlsZHJlbi5jaGlsZChjaGlsZElkeCktPnZhcmlh
YmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEVuc3VyZSB0aGF0IGFsbCBwcmVkaWN0aW9ucyBh
cmUgZml4ZWQgdXAgYmFzZWQgb24gdGhlIHVuaWZpY2F0aW9uLgorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhID0gJm1fZ3JhcGgubV92YXJp
YWJsZUFjY2Vzc0RhdGFbaV07CisgICAgICAgICAgICBkYXRhLT5maW5kKCktPnByZWRpY3QoZGF0
YS0+bm9uVW5pZmllZFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBkYXRhLT5maW5kKCktPm1l
cmdlSXNDYXB0dXJlZChkYXRhLT5pc0NhcHR1cmVkKCkpOworICAgICAgICAgICAgZGF0YS0+Zmlu
ZCgpLT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZGF0YS0+c3RydWN0dXJlQ2hl
Y2tIb2lzdGluZ0ZhaWxlZCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ncmFw
aC5tX3VuaWZpY2F0aW9uU3RhdGUgPSBHbG9iYWxseVVuaWZpZWQ7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KK307CisKK2Jvb2wgcGVyZm9ybVVuaWZpY2F0aW9uKEdyYXBoJiBncmFwaCkK
K3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFVuaWZpY2F0aW9uIFBo
YXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFVuaWZpY2F0aW9uUGhhc2U+KGdyYXBoKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25Q
aGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlm
aWNhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdVbmlmaWNhdGlv
blBoYXNlX2gKKyNkZWZpbmUgREZHVW5pZmljYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBVbmlmaWNhdGlvbjoKKy8vCisvLyBF
eGFtaW5lcyBhbGwgUGhpIGZ1bmN0aW9ucyBhbmQgZW5zdXJlcyB0aGF0IHRoZSB2YXJpYWJsZSBh
Y2Nlc3MgZGF0YXMgYXJlCisvLyB1bmlmaWVkLiBUaGlzIGNyZWF0ZXMgb3VyICJsaXZlLXJhbmdl
IHNwbGl0IiB2aWV3IG9mIHZhcmlhYmxlcy4KKworYm9vbCBwZXJmb3JtVW5pZmljYXRpb24oR3Jh
cGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdVbmlmaWNhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDAsNiArMTAwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5v
ZGUpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUGhpIGNoaWxkcmVuIGluIExvYWRT
dG9yZSBmb3JtIGFyZSBpbnZhbGlkLgorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5t
X2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJsb2NrLT5pc1BoaUluZGV4KGkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTEwOSwxMCArMTEzLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNz
IEknbSBhIEZsdXNoLCBQaGFudG9tLCBHZXRMb2NhbCwgb3IgUGhpLCBteSBjaGlsZHJlbiBzaG91
bGQgaGFzUmVzdWx0KCkuCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIFBoYW50b206CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIFBoaToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzVmFy
aWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV91bmlmaWNhdGlvblN0YXRlID09IExvY2FsbHlVbmlmaWVkKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUs
IGVkZ2UpLCBlZGdlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9mb3JtID09IExvYWRTdG9yZSAmJiAhaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzMsNyArMTQ3LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBub2Rlc0luVGhpc0Jsb2NrLmFkZChub2RlKTsKICAgICAgICAgICAgICAgICBp
ZiAoYmxvY2stPmlzUGhpSW5kZXgoaSkpCiAgICAgICAgICAgICAgICAgICAgIHBoaXNJblRoaXNC
bG9jay5hZGQobm9kZSk7Ci0gICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG15UmVmQ291
bnRzLmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMgfHwgIW5vZGUtPmhhc1ZhcmlhYmxl
QWNjZXNzRGF0YSgpKQorICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbXlSZWZD
b3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBteVJlZkNvdW50
cy5nZXQobm9kZSkgPyBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgOiB0cnVlKTsKICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2Rl
KTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQo
bm9kZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKQEAgLTE0OCw2ICsxNjUs
MTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3Ao
KSA9PSBQaGkpOwogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUt
PmxvY2FsKCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3Jh
cGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgeworICAgICAgICAgICAgICAgICAgICAvLyBQaGkg
Y2hpbGRyZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhpSW5kZXgo
aSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwg
aik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwpAQCAtMTgzLDE3ICsyMDQsMjQgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8g
KnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgogICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9ja0luZGV4LCBCbG9jaywgYmxvY2stPm1fcHJlZGVj
ZXNzb3JzW2tdKSwgcHJldk5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZO
b2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChw
cmV2Tm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2
Tm9kZSA9IHByZXZOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vz
c29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVj
ZXNzb3JzW2tdLCBwcmV2Tm9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IEZsdXNoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2Fs
LCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChwcmV2Tm9kZSA9PSBlZGdlLm5vZGUoKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTIxNCwxMCArMjQyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJhbmQoaSkpLCBibG9ja0luZGV4
KSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5hcmd1bWVudChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykKKyAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09w
ZXJhbmQoaSkpLCBibG9ja0luZGV4KSwgIWJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
aSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpKS0+aGFzVmFyaWFibGVBY2Nl
c3NEYXRhKCkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGdldExvY2FsUG9z
aXRpb25zLmFyZ3VtZW50KGkpID0gbm90U2V0OwogICAgICAgICAgICAgICAgIHNldExvY2FsUG9z
aXRpb25zLmFyZ3VtZW50KGkpID0gbm90U2V0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9j
YWxzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KGkpLCBibG9ja0luZGV4KSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9j
YWwoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nl
c3NEYXRhKCkpOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRl
ZENQUykKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxS
ZWdpc3Rlcj4oaSksIGJsb2NrSW5kZXgpLCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChp
KSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0Rh
dGEoKSk7CisKICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5sb2NhbChpKSA9IG5v
dFNldDsKICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5sb2NhbChpKSA9IG5vdFNl
dDsKICAgICAgICAgICAgIH0KQEAgLTIzMSw2ICsyNjcsMTggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBub2Rlc0luVGhpc0Js
b2NrLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBGbHVzaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIFBoYW50b206CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5t
X2Zvcm0gPT0gTG9hZFN0b3JlICYmICFqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCAhcGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uu
bm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCkBAIC0yMzksNyArMjg3LDggQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9
PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhy
ZWFkZWRDUFMpCisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2tJ
bmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0
KTsKICAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5s
b2NhbCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGNhc2UgU2V0TG9jYWw6CkBAIC0yNTYsNiArMzA1LDkgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9mb3JtID09IExvYWRTdG9yZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGNo
ZWNrT3BlcmFuZCgKICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgZ2V0TG9jYWxQb3Np
dGlvbnMsIHNldExvY2FsUG9zaXRpb25zLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFs
UmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDExICs2OCwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgbmVlZHNOZXdMaW5lID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkgfHwgbm9kZS0+b3AoKSA9PSBQaGkgfHwgbm9k
ZS0+b3AoKSA9PSBGbHVzaCkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgUGhpOgorICAg
ICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNhc2Ug
R2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQxKCktPmhh
c1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBjYWxsIHVzZSBvbiBh
bGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCiAgICAgICAgICAgICAgICAg
Ly8gYWxsb2NhdGUgYSBWaXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8gc28gaW4g
dGhpcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5j
cHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDEzIEBAIHZvaWQgSlNW
YWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb24KICAgICAgICAgb3V0LnByaW50ZigiRG91
YmxlOiAlMDh4OiUwOHgsICVsZiIsIHUuYXNUd29JbnQzMnNbMV0sIHUuYXNUd29JbnQzMnNbMF0s
IGFzRG91YmxlKCkpOwogI2VuZGlmCiAgICAgfSBlbHNlIGlmIChpc0NlbGwoKSkgewotICAgICAg
ICBpZiAoYXNDZWxsKCktPmluaGVyaXRzKCZTdHJ1Y3R1cmU6OnNfaW5mbykpIHsKKyAgICAgICAg
aWYgKGFzQ2VsbCgpLT5pbmhlcml0cygmSlNTdHJpbmc6OnNfaW5mbykpIHsKKyAgICAgICAgICAg
IEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSk7CisgICAgICAg
ICAgICBvdXQucHJpbnQoIlN0cmluZzogIik7CisgICAgICAgICAgICBpZiAoc3RyaW5nLT5pc1Jv
cGUoKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIihyb3BlKSAiKTsKKyAgICAgICAgICAg
IG91dC5wcmludChzdHJpbmctPnRyeUdldFZhbHVlKCkpOworICAgICAgICB9IGVsc2UgaWYgKGFz
Q2VsbCgpLT5pbmhlcml0cygmU3RydWN0dXJlOjpzX2luZm8pKSB7CiAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGpzQ2FzdDxTdHJ1Y3R1cmUqPihhc0NlbGwoKSk7CiAgICAgICAg
ICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAgICAgIlN0cnVjdHVyZTogIiwgUmF3UG9pbnRl
cihzdHJ1Y3R1cmUpLCAiOiAiLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUsCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDE0
MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2Niw2ICsxNjYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgcHJv
dGVjdGVkOgorICAgICAgICBmcmllbmQgY2xhc3MgSlNWYWx1ZTsKKyAgICAgICAgCiAgICAgICAg
IGJvb2wgaXNSb3BlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5pc051bGwoKTsgfQogICAgICAg
ICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBJczhCaXQ7IH0KICAgICAg
ICAgdm9pZCBzZXRJczhCaXQoYm9vbCBmbGFnKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186313</attachid>
            <date>2013-02-03 23:15:38 -0800</date>
            <delta_ts>2013-02-07 13:26:46 -0800</delta_ts>
            <desc>improved performance</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>116451</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDE3MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsMTIgQEAKIAkJMEYyMUMyN0QxNEJFNzI3
QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAvKiBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5dGVjb2RlQ29u
dmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNDJEQTcxM0Yz
QjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNTI2RTIxNkJDOTIwRjAwNzVENjNFIC8qIERGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyNTI2REIxNkJDOTIwRDAwNzVENjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwICovOyB9OworCQkwRjI1MjZFMzE2QkM5MjExMDA3NUQ2M0UgLyogREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyNTI2REMxNkJDOTIwRDAwNzVENjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjI1MjZF
NDE2QkM5MjE1MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjUyNkREMTZCQzky
MEQwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9OworCQkw
RjI1MjZFNTE2QkM5MjE3MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1MjZERTE2
QkM5MjBEMDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyNTI2RTYxNkJDOTIx
QTAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTI2REYxNkJDOTIwRDAwNzVENjNFIC8qIERG
R1VuaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjI1MjZFNzE2QkM5MjFEMDA3NUQ2M0Ug
LyogREZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyNTI2RTAxNkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9u
UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEyMTUx
QzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLzsgfTsKIAkJMEYyQkRDMTYxNTFD
NUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTk2Miw2ICs5NjgsMTIgQEAKIAkJMEYyMUMyN0ExNEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1
dGlvbkhhcm5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0aW9u
SGFybmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3RTE0QkVBQTgw
MDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBCeXRlY29kZUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNTI2REIxNkJDOTIwRDAwNzVE
NjNFIC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
Q1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MjUyNkRDMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMjUyNkREMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlZGlj
dGlvbkluamVjdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI1MjZERTE2QkM5MjBE
MDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjI1MjZERjE2QkM5MjBEMDA3NUQ2M0UgLyogREZHVW5pZmljYXRpb25QaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVbmlmaWNhdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyNTI2RTAxNkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0
aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVW5pZmljYXRp
b25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBk
ZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRml4dXBQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdGaXh1cFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjAxLDYg
KzI2MTMsOCBAQAogCQkJCTBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAq
LywKIAkJCQkwRjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwICovLAogCQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5oICovLAorCQkJCTBGMjUyNkRCMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjI1MjZEQzE2QkM5MjBEMDA3NUQ2M0UgLyog
REZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRFRjkwOTUwMEM3MjUz
MiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8q
IERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEZGNDI3NjExNTkxQTFDOTAwNENCOUZGIC8qIERGR0Rp
c2Fzc2VtYmxlci5jcHAgKi8sCkBAIC0yNjQ5LDYgKzI2NjMsOCBAQAogCQkJCTBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8sCiAJCQkJMEZG
RkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0
RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuaCAqLywKKwkJCQkwRjI1MjZERDE2QkM5MjBEMDA3
NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjI1MjZE
RTE2QkM5MjBEMDA3NUQ2M0UgLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJ
CQkJMEZGRkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyog
REZHUmVnaXN0ZXJCYW5rLmggKi8sCkBAIC0yNjY4LDYgKzI2ODQsOCBAQAogCQkJCTBGNjM5NDNE
MTVDNzVGMTQwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCAqLywK
IAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkw
RkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJMEYyNTI2REYx
NkJDOTIwRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGMjUy
NkUwMTZCQzkyMEQwMDc1RDYzRSAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggKi8sCiAJCQkJMEYz
QjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCAqLywKIAkJCQkwRjNCM0Ey
QTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLywKIAkJCQkwRjJCREMzRjE1MjI4
MDE3MDBDRDg5MTAgLyogREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggKi8sCkBAIC0zMzI5LDYg
KzMzNDcsOSBAQAogCQkJCTE0Q0E5NThCMTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0
eUFuYWx5emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNENBOTU4RDE2QUI1MEZBMDA5MzhBMDYg
LyogT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYwNERB
MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjI1MjZFMzE2QkM5MjExMDA3NUQ2M0UgLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNTI2RTUxNkJDOTIxNzAwNzVENjNFIC8qIERGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNTI2RTcxNkJD
OTIxRDAwNzVENjNFIC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
Mzk2Miw2ICszOTgzLDkgQEAKIAkJCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29t
bW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBE
RkdFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAv
KiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjUyNkUy
MTZCQzkyMEYwMDc1RDYzRSAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMjUyNkU0MTZCQzkyMTUwMDc1RDYzRSAvKiBERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyNTI2RTYxNkJDOTIxQTAwNzVENjNF
IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJGMEYyRDEx
NkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDE0MTcy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0Niw4IEBAIHN0cnVjdCBPcGVyYW5kVmFsdWVUcmFpdHMgewogICAg
IHN0YXRpYyB2b2lkIGR1bXAoY29uc3QgVCYgdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpIHsgdmFs
dWUuZHVtcChvdXQpOyB9CiB9OwogCitlbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5k
LCBMb2NhbE9wZXJhbmQgfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRz
ID0gT3BlcmFuZFZhbHVlVHJhaXRzPFQ+ID4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKQEAg
LTY2LDYgKzY4LDI4IEBAIHB1YmxpYzoKICAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVy
biBtX2xvY2Fsc1tpZHhdOyB9CiAgICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQogICAgIAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5k
IG9wZXJhbmRLaW5kPgorICAgIHNpemVfdCBzaXplRm9yKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICAgICByZXR1cm4g
bnVtYmVyT2ZBcmd1bWVudHMoKTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mTG9jYWxzKCk7Cisg
ICAgfQorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIFQmIGF0Rm9y
KHNpemVfdCBpZHgpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRP
cGVyYW5kKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7CisgICAgICAgIHJldHVy
biBsb2NhbChpZHgpOworICAgIH0KKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2lu
ZD4KKyAgICBjb25zdCBUJiBhdEZvcihzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBh
cmd1bWVudChpZHgpOworICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICB9CisgICAgCiAg
ICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBpZiAoc2l6
ZSA8PSBtX2xvY2Fscy5zaXplKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
ODcsNiArMTc4Nyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgRmx1c2g6CisgICAgY2FzZSBQ
aGFudG9tTG9jYWw6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIApAQCAtMTkxMyw2ICsxOTE0LDcgQEAgaW5saW5lIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIGNh
c2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgLy8gVGhl
IGJsb2NrIHRyYW5zZmVycyB0aGUgdmFsdWUgZnJvbSBoZWFkIHRvIHRhaWwuCiAgICAgICAgICAg
ICBzb3VyY2UgPSBpblZhcmlhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjYXNlIFBoaTogewor
ICAgICAgICAgICAgICAgIGNhc2UgUGhpOiAvKiBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwODU1NSAqLyB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTA3LDYgKzUwNyw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRn
ZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRN
eUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlZigpOyAvLyBU
aGlzIGlzIGEgbXVzdC1nZW5lcmF0ZSBub2RlLgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJl
Y29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNM
ZW5ndGguCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjM1LDggKzYzNiwxMCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChjaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaC5j
b2xsZWN0R2FyYmFnZSgpOworICAgICAgICBpZiAoY2hhbmdlZCkgeworICAgICAgICAgICAgbV9n
cmFwaC5kZXRocmVhZCgpOworICAgICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBMb2FkU3RvcmU7
CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVz
LmgJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05P
REUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21t
YSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMg
dGVtcGxhdGVQb3N0IE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBS
ZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAg
dGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxv
Y2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5N
b2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9
IGdyYXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKICAgICAgICAgYXBwZW5kKHJlc3VsdCk7IFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDY0ICsyODcsMzMgQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9j
YWwob3BlcmFuZCk7CiAgICAgICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0Nh
cHR1cmVkKG9wZXJhbmQsIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKTsKICAg
ICAgICAgCisgICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2FsczogMSkgbGluayB0b2dldGhlciB2
YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQorICAgICAgICAvLyB0cnkgdG8gYXZvaWQgY3Jl
YXRpbmcgcmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJlcXVpcmVkIGZvcgorICAgICAgICAv
LyBjb3JyZWN0bmVzcyAtIG5vIG90aGVyIHBoYXNlIHdpbGwgZW5zdXJlIHRoYXQgYmxvY2stbG9j
YWwgdmFyaWFibGUKKyAgICAgICAgLy8gYWNjZXNzIGRhdGEgdW5pZmljYXRpb24gaXMgZG9uZSBj
b3JyZWN0bHkuICgyKSBpcyBwdXJlbHkgb3Bwb3J0dW5pc3RpYworICAgICAgICAvLyBhbmQgaXMg
bWVhbnQgYXMgYW4gY29tcGlsZS10aW1lIG9wdGltaXphdGlvbiBvbmx5LgorICAgICAgICAKKyAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKKyAgICAgICAgCiAgICAgICAgIGlm
IChub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBGbHVzaCkgewotICAgICAg
ICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRzIHRo
ZSBsb2NhbCB0byBiZSBsaXZlCi0gICAgICAgICAgICAgICAgLy8gYnV0IGhhcyBub3QgbG9hZGVk
IGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGluCi0gICAgICAgICAgICAg
ICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgotICAgICAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAg
ICAgICAgICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dy
YXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSkpOwotICAgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJh
bmQpID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNl
dExvY2FsKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVk
KGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSAhPSBGbHVzaCk7Ci0KLSAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5t
ZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoaXNDYXB0dXJlZCkgewotICAgICAgICAgICAgICAgIC8vIFdlIHdpc2ggdG8gdXNlIHRo
ZSBzYW1lIHZhcmlhYmxlIGFjY2VzcyBkYXRhIGFzIHRoZSBwcmV2aW91cyBhY2Nlc3MsCi0gICAg
ICAgICAgICAgICAgLy8gYnV0IGZvciBhbGwgb3RoZXIgcHVycG9zZXMgd2Ugd2FudCB0byBpc3N1
ZSBhIGxvYWQgc2luY2UgZm9yIGFsbCB3ZQotICAgICAgICAgICAgICAgIC8vIGtub3csIGF0IHRo
aXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24sIHRoZSBsb2NhbCBoYXMgYmVlbiBjbG9iYmVyZWQuCi0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGxpbmsgdG8g
dGhlIFBoaSBub2RlLCBub3QgdG8gdGhlIEdldExvY2FsLgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkg
PT0gUGhpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBuZXdHZXRM
b2NhbCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oCi0gICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSks
IG5vZGUpKTsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKG9wZXJhbmQpID0gbmV3R2V0TG9jYWw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5l
d0dldExvY2FsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsKTsKLSAgICAgICAg
ICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBjYXNlIFNldExv
Y2FsOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChvcGVyYW5k
KTsKKyAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQs
IGlzQ2FwdHVyZWQpOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgZm9yIHJlYWRzIG9m
IHRlbXBvcmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLAotICAgICAgICAvLyBleHBhbmQgbV9wcmVz
ZXJ2ZWRWYXJzIHRvIGNvdmVyIHRoZXNlLgotICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9w
ZXJhbmQpOwotICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAg
ICAgICAgIAotICAgICAgICBOb2RlKiBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlh
YmxlQWNjZXNzRGF0YSkpOwotICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNr
RW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgb3BlcmFuZCkpOwotICAgICAgICBub2RlID0gaW5q
ZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFy
aWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7CisgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFu
ZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5v
ZGU7Ci0gICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNl
dExvY2FsRmlyc3RUaW1lKG9wZXJhbmQsIG5vZGUpOwotICAgICAgICAKICAgICAgICAgcmV0dXJu
IG5vZGU7CiAgICAgfQogICAgIHZvaWQgc2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCwgTm9kZSog
dmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKQEAgLTM3Myw2MSArMzQyLDI1IEBA
IHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9j
b2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCk7CiAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZTsKKyAgICAgICAgCiAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBGbHVzaCkgewotICAgICAgICAgICAgICAgIC8vIFR3byBwb3Nz
aWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRzIHRoZSBsb2NhbCB0byBiZSBsaXZlCi0g
ICAgICAgICAgICAgICAgLy8gYnV0IGhhcyBub3QgbG9hZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFz
IGxvYWRlZCBpdHMgdmFsdWUsIGluCi0gICAgICAgICAgICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdy
ZSBkb25lLgotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+
bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBub2RlID0g
aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8o
dmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSkpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5v
cCgpID09IFNldEFyZ3VtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2gpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVy
ZWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRBcmd1
bWVudCkgewotICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1lbnQgaW4g
dGhlIGZpcnN0IGJhc2ljIGJsb2NrOyBsaW5rCi0gICAgICAgICAgICAgICAgLy8gdGhlIEdldExv
Y2FsIHRvIHRoZSBTZXRBcmd1bWVudC4KLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+bG9j
YWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKLSAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3Vs
YXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSwgbm9kZSkpOwotICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJn
dW1lbnQpID0gbm9kZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnQpOwotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09
IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgfHwgbm9kZS0+b3AoKSA9PSBQ
aGkpOwotICAgICAgICAgICAgICAgIHJldHVybiBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9u
KGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSks
IG5vZGUpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB2YXJpYWJsZS0+bWVyZ2VJc0NhcHR1cmVk
KGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKICAgICAgICAgCi0gICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nl
c3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwotCi0gICAgICAgIE5vZGUqIHBoaSA9IGFkZFRv
R3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7Ci0gICAgICAgIG1fYXJndW1l
bnRQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBhcmd1
bWVudCkpOwotICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRU
b0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7CisgICAg
ICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9j
YWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwotICAgICAgICAKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVu
dCwgbm9kZSk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgdm9p
ZCBzZXRBcmd1bWVudChpbnQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9
IE5vcm1hbFNldCkKQEAgLTQ5Myw2MyArNDI2LDI3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBmbHVzaERpcmVjdChpbnQgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3Np
dGlvbikKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjaGVjayBpZiB0aGUg
c2FtZSBvcGVyYW5kIGhhZCBhbHJlYWR5IGJlZW4gZmx1c2hlZCB0bwotICAgICAgICAvLyBzb21l
IG90aGVyIGxvY2FsIHZhcmlhYmxlLgotICAgICAgICAKICAgICAgICAgYm9vbCBpc0NhcHR1cmVk
ID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgbV9pbmxpbmVTdGFja1RvcC0+bV9p
bmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9wZXJhbmQgPCBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBub2RlOwot
ICAgICAgICBpbnQgaW5kZXg7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5k
KSkgewotICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsKLSAg
ICAgICAgICAgIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50
KGluZGV4KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGluZGV4ID0gb3BlcmFuZDsK
LSAgICAgICAgICAgIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2Fs
KGluZGV4KTsKKyAgICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKICAgICAg
ICAgICAgIG1fcHJlc2VydmVkVmFycy5zZXQob3BlcmFuZCk7Ci0gICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQob3BlcmFuZCk7CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlOwogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAg
ICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2ggJiYgbm9kZS0+b3AoKSAh
PSBHZXRMb2NhbCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEVtaXQgYSBGbHVzaCBy
ZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgYWxyZWFkeSBmbHVzaGVkIGl0LgotICAgICAgICAgICAg
Ly8gVGhpcyBnaXZlcyB1cyBndWlkYW5jZSB0byBzZWUgdGhhdCB0aGUgdmFyaWFibGUgYWxzbyBu
ZWVkcyB0byBiZSBmbHVzaGVkCi0gICAgICAgICAgICAvLyBmb3IgYXJndW1lbnRzLCBldmVuIGlm
IGl0IGFscmVhZHkgaGFkIHRvIGJlIGZsdXNoZWQgZm9yIG90aGVyIHJlYXNvbnMuCi0gICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlz
Q2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBPcElu
Zm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSk7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRQ
b3NpdGlvbikKLSAgICAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJpYWJsZSh2
YXJpYWJsZUFjY2Vzc0RhdGEpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAg
ICAgICAgICB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgdmFyaWFibGUtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBp
c0NhcHR1cmVkKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQp
OwotICAgICAgICBOb2RlKiBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSkpOwotICAgICAgICBub2RlID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlh
YmxlQWNjZXNzRGF0YSksIHBoaSk7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVy
YW5kKSkgewotICAgICAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0Vu
dHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KSA9IG5vZGU7Ci0gICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGlu
ZGV4LCBub2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbG9jYWxQaGlTdGFj
ay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOwotICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpbmRleCkgPSBu
b2RlOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2Nh
bEZpcnN0VGltZShpbmRleCwgbm9kZSk7Ci0gICAgICAgIH0KKyAgICAgICAgbm9kZSA9IGFkZFRv
R3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAgICBpZiAoYXJn
dW1lbnRQb3NpdGlvbikKLSAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxl
KHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRW
YXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZmx1c2hBcmd1bWVudHNB
bmRDYXB0dXJlZFZhcmlhYmxlcygpCkBAIC0yMDI0LDcgKzE5MjEsNiBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUp
KTsKICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVu
dCwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2Fy
Z3VtZW50XSA9IHNldEFyZ3VtZW50OwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwog
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRBcmd1bWVudEZp
cnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzIx
MywxNTEgKzMxMDksNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgfQogfQogCi10ZW1wbGF0ZTxCeXRlQ29kZVBhcnNlcjo6UGhpU3RhY2tUeXBlIHN0YWNr
VHlwZT4KLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCi17Ci0gICAgVmVj
dG9yPFBoaVN0YWNrRW50cnksIDE2PiYgcGhpU3RhY2sgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50
UGhpU3RhY2spID8gbV9hcmd1bWVudFBoaVN0YWNrIDogbV9sb2NhbFBoaVN0YWNrOwotICAgIAot
ICAgIHdoaWxlICghcGhpU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBoaVN0YWNrRW50cnkg
ZW50cnkgPSBwaGlTdGFjay5sYXN0KCk7Ci0gICAgICAgIHBoaVN0YWNrLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghZW50cnkubV9ibG9jay0+aXNSZWFjaGFibGUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIFByZWRlY2Vzc29yTGlzdCYgcHJl
ZGVjZXNzb3JzID0gZW50cnkubV9ibG9jay0+bV9wcmVkZWNlc3NvcnM7Ci0gICAgICAgIHVuc2ln
bmVkIHZhck5vID0gZW50cnkubV92YXJObzsKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBk
YXRhRm9yUGhpID0gZW50cnkubV9waGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotCi0jaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAg
SGFuZGxpbmcgcGhpIGVudHJ5IGZvciB2YXIgJXUsIHBoaSBAJXUuXG4iLCBlbnRyeS5tX3Zhck5v
LCBlbnRyeS5tX3BoaSk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0jaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgRGVhbGlu
ZyB3aXRoIHByZWRlY2Vzc29yIGJsb2NrICV1LlxuIiwgcHJlZGVjZXNzb3JzW2ldKTsKLSNlbmRp
ZgotICAgICAgICAgICAgCi0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2Nr
ID0gbV9ncmFwaC5tX2Jsb2Nrc1twcmVkZWNlc3NvcnNbaV1dLmdldCgpOwotCi0gICAgICAgICAg
ICBOb2RlKiYgdmFyID0gKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vz
c29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudCh2YXJObykgOiBwcmVkZWNlc3NvckJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwodmFyTm8pOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBOb2RlKiB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXI7Ci0gICAgICAgICAgICBpZiAoIXZh
bHVlSW5QcmVkZWNlc3NvcikgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgRGlkIG5vdCBmaW5kIG5vZGUs
IGFkZGluZyBwaGkuXG4iKTsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAgdmFsdWVJblByZWRl
Y2Vzc29yID0gaW5zZXJ0UGhpTm9kZShPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKHN0YWNr
VHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrID8gYXJndW1lbnRUb09wZXJhbmQodmFyTm8pIDogc3Rh
dGljX2Nhc3Q8aW50Pih2YXJObyksIGZhbHNlKSksIHByZWRlY2Vzc29yQmxvY2spOwotICAgICAg
ICAgICAgICAgIHZhciA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKLSAgICAgICAgICAgICAgICBpZiAo
c3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spCi0gICAgICAgICAgICAgICAgICAgIHByZWRl
Y2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZSh2YXJObywg
dmFsdWVJblByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGlt
ZSh2YXJObywgdmFsdWVJblByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgICAgICBwaGlTdGFjay5h
cHBlbmQoUGhpU3RhY2tFbnRyeShwcmVkZWNlc3NvckJsb2NrLCB2YWx1ZUluUHJlZGVjZXNzb3Is
IHZhck5vKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlSW5QcmVkZWNlc3Nvci0+b3Ao
KSA9PSBHZXRMb2NhbCkgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgRm91bmQgR2V0TG9jYWwgQCV1Llxu
IiwgdmFsdWVJblByZWRlY2Vzc29yLT5pbmRleCgpKTsKLSNlbmRpZgotCi0gICAgICAgICAgICAg
ICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcmUg
aWRlbnRpY2FsIGJldHdlZW4gdGhlCi0gICAgICAgICAgICAgICAgLy8gR2V0TG9jYWwgYW5kIGl0
cyBibG9jay1sb2NhbCBQaGkuIFN0cmljdGx5IHNwZWFraW5nIHdlIG9ubHkgbmVlZCB0aGUgdHdv
Ci0gICAgICAgICAgICAgICAgLy8gdG8gYmUgdW5pZmllZC4gQnV0IGZvciBlZmZpY2llbmN5LCB3
ZSB3YW50IHRoZSBjb2RlIHRoYXQgY3JlYXRlcyBHZXRMb2NhbHMKLSAgICAgICAgICAgICAgICAv
LyBhbmQgUGhpcyB0byB0cnkgdG8gcmV1c2UgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcyBtdWNoIGFz
IHBvc3NpYmxlLgotICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUluUHJlZGVjZXNzb3ItPnZh
cmlhYmxlQWNjZXNzRGF0YSgpID09IHZhbHVlSW5QcmVkZWNlc3Nvci0+Y2hpbGQxKCktPnZhcmlh
YmxlQWNjZXNzRGF0YSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2YWx1
ZUluUHJlZGVjZXNzb3IgPSB2YWx1ZUluUHJlZGVjZXNzb3ItPmNoaWxkMSgpLm5vZGUoKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3VuZCBAJXUuXG4iLCB2YWx1
ZUluUHJlZGVjZXNzb3ItPmluZGV4KCkpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlQoCi0gICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09
IFNldExvY2FsCi0gICAgICAgICAgICAgICAgfHwgdmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09
IFBoaQotICAgICAgICAgICAgICAgIHx8IHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBGbHVz
aAotICAgICAgICAgICAgICAgIHx8ICh2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gU2V0QXJn
dW1lbnQgJiYgc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUHJlZGVjZXNzb3IgPSB2YWx1
ZUluUHJlZGVjZXNzb3ItPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBkYXRhRm9yUHJlZGVjZXNzb3ItPnVuaWZ5KGRhdGFGb3JQaGkpOwotCi0gICAgICAg
ICAgICBOb2RlKiBwaGlOb2RlID0gZW50cnkubV9waGk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFJlZiBjb3Vu
dCBvZiBAJXUgPSAldS5cbiIsIHBoaU5vZGUtPmluZGV4KCksIHBoaU5vZGUtPnJlZkNvdW50KCkp
OwotI2VuZGlmCi0gICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkgewotI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nRigiICAgICAgUmVmZmluZyBAJXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotI2VuZGlm
Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYodmFsdWVJblByZWRlY2Vzc29yKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDEoKSkgewotI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMSA9IEAldS5cbiIsIHBoaU5vZGUtPmluZGV4
KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBwaGlOb2Rl
LT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZSh2YWx1ZUluUHJlZGVjZXNzb3IpKTsKLSNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxv
Z0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7Ci0gICAgICAg
ICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMigpKSB7
Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAg
ICAgIGRhdGFMb2dGKCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQyID0gQCV1LlxuIiwgcGhpTm9k
ZS0+aW5kZXgoKSwgdmFsdWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IHBoaU5vZGUtPmNoaWxkcmVuLnNldENoaWxkMihFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwot
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsK
LSAgICAgICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsK
LSAgICAgICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hp
bGQzKCkpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDMgPSBAJXUuXG4i
LCBwaGlOb2RlLT5pbmRleCgpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQzKEVkZ2UodmFsdWVJblByZWRlY2Vz
c29yKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmlu
ZGV4KCkpOwotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFG
aWxlKCkpOwotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBOb2RlKiBuZXdQaGkgPSBpbnNlcnRQaGlOb2RlKE9wSW5mbyhkYXRhRm9yUGhpKSwgZW50
cnkubV9ibG9jayk7Ci0gICAgICAgICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU3BsaXR0aW5nIEAldSwg
Y3JlYXRlZCBAJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCBuZXdQaGktPmluZGV4KCkpOwotI2Vu
ZGlmCi0KLSAgICAgICAgICAgIGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKQotICAgICAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKG5ld1BoaSk7Ci0KLSAgICAgICAgICAgIG5ld1BoaS0+Y2hpbGRyZW4g
PSBwaGlOb2RlLT5jaGlsZHJlbjsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIs
IG5ld1BoaS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBuZXdQaGktPmR1bXBDaGlsZHJlbihXVEY6
OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0KLSAg
ICAgICAgICAgIHBoaU5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUobmV3UGhpLCB2YWx1ZUluUHJl
ZGVjZXNzb3IsIDApOwotCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9k
ZS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRh
RmlsZSgpKTsKLSAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotICAgICAgICB9
Ci0gICAgfQotfQotCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpmaXhWYXJpYWJsZUFjY2Vzc1ByZWRp
Y3Rpb25zKCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkgewpAQCAtMzczMCw0MCArMzQ4MSwyNSBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgZGF0YUxvZ0YoIlByb2Nlc3NpbmcgbG9jYWwg
dmFyaWFibGUgcGhpcy5cbiIpOwogI2VuZGlmCiAgICAgCi0gICAgbV9jdXJyZW50UHJvZmlsaW5n
SW5kZXggPSBtX2N1cnJlbnRJbmRleDsKKyAgICBBU1NFUlQobV9wcmVzZXJ2ZWRWYXJzLnNpemUo
KSk7CisgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0g
bV9wcmVzZXJ2ZWRWYXJzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAobV9wcmVzZXJ2ZWRW
YXJzLnF1aWNrR2V0KGkpKSB7CisgICAgICAgICAgICBudW1iZXJPZkxvY2FscyA9IGkgKyAxOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAgICAgCi0gICAgcHJvY2Vzc1Bo
aVN0YWNrPExvY2FsUGhpU3RhY2s+KCk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJQcm9jZXNzaW5nIGFyZ3VtZW50IHBoaXMuXG4iKTsK
LSNlbmRpZgotICAgIHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0YWNrPigpOwotCiAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVChibG9j
ayk7Ci0gICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICBpZiAoIWJsb2Nr
LT5pc1JlYWNoYWJsZSkgewogICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4
XS5jbGVhcigpOwotICAgIH0KLSAgICAKLSAgICBmaXhWYXJpYWJsZUFjY2Vzc1ByZWRpY3Rpb25z
KCk7Ci0gICAgCi0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFibG9j
ay0+aXNPU1JUYXJnZXQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGJsb2Nr
LT5ieXRlY29kZUJlZ2luICE9IG1fZ3JhcGgubV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBo
Lm1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSkpOwotICAgICAgICAgICAg
aWYgKCFub2RlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQVNTRVJU
KG5vZGUtPmhhc0xvY2FsKCkpOwotICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPnByZWRpY3QoCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFw
aC5tX211c3RIYW5kbGVWYWx1ZXNbaV0pKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobnVtYmVyT2ZMb2NhbHMpOworICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2FscyhudW1iZXJPZkxvY2Fscyk7
CiAgICAgfQogICAgIAogICAgIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJzID0gbV9wcmVzZXJ2ZWRW
YXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw2ICs3Miw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgbV9ncmFw
aC5zdWNjZXNzb3IoYmxvY2ssIDApLCBOb0Jsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTExMyw2ICsxMTQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJn
ZUJsb2NrcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRp
b24oYmxvY2ssIGNvbmRpdGlvbiksCkBAIC0xMjYsNiArMTI4LDcgQEAgcHVibGljOgogI2VuZGlm
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQmxvY2tJbmRleCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihibG9jaywgY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
bG9ja0luZGV4IG5vdFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGJsb2NrLCAhY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMTU0
LDYgKzE1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
RigiQ0ZHU2ltcGxpZnk6IEJyYW5jaCB0byBzYW1lIHN1Y2Nlc3NvciBtZXJnZSBvbiBCbG9jayAj
JXUgdG8gQmxvY2sgIyV1LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrSW5kZXgsIHRhcmdldEJsb2NrSW5kZXgpOwogI2VuZGlmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1lcmdlQmxvY2tzKGJsb2NrSW5kZXgsIHRhcmdldEJsb2NrSW5kZXgsIE5vQmxvY2spOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0yNTAsMTA0ICsyNTQsMjYgQEAgcHJpdmF0ZToKICAgICAg
ICAgQVNTRVJUKGJsb2NrKTsKICAgICAgICAgQVNTRVJUKCFibG9jay0+aXNSZWFjaGFibGUpOwog
ICAgICAgICAKLSAgICAgICAgLy8gMSkgUmVtb3ZlIHJlZmVyZW5jZXMgZnJvbSBvdGhlciBibG9j
a3MgdG8gdGhpcyBibG9jay4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1T
dWNjZXNzb3JzKGJsb2NrKTsgaS0tOykKLSAgICAgICAgICAgIGZpeFBoaXMoYmxvY2tJbmRleCwg
bV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIGkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJ
bmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICBtX2dy
YXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAg
ICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwog
ICAgICAgICAKLSAgICAgICAgLy8gMikgS2lsbCB0aGUgYmxvY2sKICAgICAgICAgbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5jbGVhcigpOwogICAgIH0KICAgICAKICAgICB2b2lkIGtlZXBP
cGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9j
aywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIE5v
ZGUqIGxpdmVuZXNzTm9kZSA9IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmQob3BlcmFuZCk7Ci0gICAgICAgIE5vZGUqIGF2YWlsYWJpbGl0eU5vZGUgPSBibG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgIGlmICghbGl2ZW5lc3NOb2Rl
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoYXZhaWxhYmlsaXR5Tm9kZSk7
CiAgICAgICAgIGlmIChsaXZlbmVzc05vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhdmFpbGFiaWxpdHlOb2Rl
LT5vcCgpID09IFNldExvY2FsKQotICAgICAgICAgICAgYXZhaWxhYmlsaXR5Tm9kZSA9IGF2YWls
YWJpbGl0eU5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHlO
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICBpZiAoIWxpdmVuZXNzTm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKGF2YWlsYWJp
bGl0eU5vZGUtPm9wKCkgIT0gU2V0TG9jYWwpOwogICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgK
LSAgICAgICAgICAgIG1fZ3JhcGgsIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
IFBoYW50b20sIGNvZGVPcmlnaW4sIGF2YWlsYWJpbGl0eU5vZGUpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGZpeFBvc3NpYmxlR2V0TG9jYWwoQmFzaWNCbG9jayogYmxvY2ssIEVkZ2UmIGVkZ2Us
IGJvb2wgY2hhbmdlUmVmKQotICAgIHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBlZGdlLm5vZGUo
KTsKLSAgICAgICAgaWYgKGNoaWxkLT5vcCgpICE9IEdldExvY2FsKQotICAgICAgICAgICAgcmV0
dXJuOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ZGF0YUxvZ0YoIiAgICBDb25zaWRlcmluZyBHZXRMb2NhbCBhdCBAJXUsIGxvY2FsIHIlZC5cbiIs
IG5vZGUtPmluZGV4KCksIGNoaWxkLT5sb2NhbCgpKTsKLSNlbmRpZgotICAgICAgICBpZiAoY2hp
bGQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKLSNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAg
ICBJdCdzIGNhcHR1cmVkLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQoY2hpbGQtPmxvY2FsKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgRGVhbGluZyB3aXRoIG9yaWdp
bmFsIEAldS5cbiIsIG9yaWdpbmFsTm9kZS0+aW5kZXgoKSk7Ci0jZW5kaWYKLSAgICAgICAgQVNT
RVJUKG9yaWdpbmFsTm9kZSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICBPcmlnaW5hbCBoYXMgbG9jYWwgciVkLlxu
Iiwgb3JpZ2luYWxOb2RlLT5sb2NhbCgpKTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQoY2hpbGQt
PmxvY2FsKCkgPT0gb3JpZ2luYWxOb2RlLT5sb2NhbCgpKTsKLSAgICAgICAgLy8gUG9zc2liaWxp
dGllczoKLSAgICAgICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcg
dGhlIHZhbHVlIG9mIHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5Ci0gICAgICAgIC8vICAg
ICBhdmFpbGFibGUgaW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2RlSW5kZXguCi0g
ICAgICAgIC8vIEdldExvY2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1
ZSBvZiBzb21ldGhpbmcgdGhhdCB0aGUgZmlyc3QKLSAgICAgICAgLy8gICAgIGJsb2NrIGFsc28g
Z2V0cy4KLSAgICAgICAgLy8gUGhpIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtl
ZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdCBibG9jawotICAgICAgICAvLyAg
ICAgd2FzIGFsc28gYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uLgotICAgICAgICAvLyBTZXRBcmd1
bWVudCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9w
ZXJhbmQgdGhhdCB0aGUKLSAgICAgICAgLy8gICAgIGZpcnN0IGJsb2NrIHdhcyBrZWVwaW5nIGFs
aXZlIGJ5IHZpcnR1ZSBvZiB0aGUgZmlyc3RCbG9jayBiZWluZyB0aGUgcm9vdCBhbmQKLSAgICAg
ICAgLy8gICAgIHRoZSBvcGVyYW5kIGJlaW5nIGFuIGFyZ3VtZW50LgotICAgICAgICAvLyBGbHVz
aCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9wZXJh
bmQgdGhhdCB0aGUgZmlyc3QKLSAgICAgICAgLy8gICAgIGJsb2NrIHdhcyBmb3JjaW5nIHRvIGJl
IGFsaXZlLCBzbyB0aGUgc2Vjb25kIGJsb2NrIHNob3VsZCByZWZlciBjaGlsZCBvZgotICAgICAg
ICAvLyAgICAgdGhlIGZsdXNoLgotICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5vcCgpID09IEZs
dXNoKQotICAgICAgICAgICAgb3JpZ2luYWxOb2RlID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5u
b2RlKCk7Ci0gICAgICAgIHN3aXRjaCAob3JpZ2luYWxOb2RlLT5vcCgpKSB7Ci0gICAgICAgIGNh
c2UgU2V0TG9jYWw6IHsKLSAgICAgICAgICAgIGlmIChjaGFuZ2VSZWYpCi0gICAgICAgICAgICAg
ICAgQVNTRVJUKG9yaWdpbmFsTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0jaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAg
ICAgSXQncyBhIFNldExvY2FsLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgIG1fZ3JhcGguY2hh
bmdlQ2hpbGQoZWRnZSwgb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5ub2RlKCksIGNoYW5nZVJlZik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdldExvY2FsOiB7
Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgICAgSXQncyBhIEdldExvY2FsLlxuIik7Ci0jZW5kaWYKLSAgICAgICAg
ICAgIGlmIChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAg
bV9ncmFwaC5jaGFuZ2VDaGlsZChlZGdlLCBvcmlnaW5hbE5vZGUsIGNoYW5nZVJlZik7Ci0gICAg
ICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgR2V0TG9jYWwgdGhhdCBwb2ludHMgdG8gYSBjaGlsZCBH
ZXRMb2NhbCB0aGF0IGlzIGRlYWQsIHRoZW4KLSAgICAgICAgICAgIC8vIHdlIGhhdmUgbm8gbmVl
ZCB0byBkbyBhbnl0aGluZzogdGhpcyBvcmlnaW5hbCBHZXRMb2NhbCBpcyBzdGlsbCB2YWxpZC4K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgUGhpOgotICAgICAg
ICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgIGlmIChjaGFuZ2VSZWYpCi0gICAgICAgICAg
ICBBU1NFUlQob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAg
ICBJdCdzIFBoaS9TZXRBcmd1bWVudC5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICAvLyBLZWVw
IHRoZSBHZXRMb2NhbCEKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgsIERvbnRSZWZDaGls
ZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tTG9jYWwsIGNvZGVPcmlnaW4sCisg
ICAgICAgICAgICBPcEluZm8obGl2ZW5lc3NOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGpldHRpc29uQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4
LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4LCBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29k
ZU9yaWdpbikKQEAgLTM2MywzOCArMjg5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgZml4SmV0dGlz
b25lZFByZWRlY2Vzc29ycyhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgZml4UGhpcyhCbG9ja0luZGV4IHNvdXJjZUJsb2NrSW5kZXgsIEJs
b2NrSW5kZXggZGVzdGluYXRpb25CbG9ja0luZGV4KQotICAgIHsKLSAgICAgICAgQmFzaWNCbG9j
ayogc291cmNlQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3NvdXJjZUJsb2NrSW5kZXhdLmdldCgp
OwotICAgICAgICBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tkZXN0aW5hdGlvbkJsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBpZiAoIWRlc3RpbmF0aW9u
QmxvY2spIHsKLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIHRyeWluZyB0byBraWxsIG9mZiB0aGUg
c291cmNlIGJsb2NrIGFuZCB0aGUgZGVzdGluYXRpb24gYmxvY2sgaXMgYWxyZWFkeQotICAgICAg
ICAgICAgLy8gZGVhZCwgdGhlbiB3ZSdyZSBkb25lIQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVzdGluYXRpb25CbG9jay0+
cGhpcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGRlc3RpbmF0
aW9uQmxvY2stPnBoaXNbaV07Ci0gICAgICAgICAgICBOb2RlKiBteU5vZGUgPSBzb3VyY2VCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7Ci0gICAgICAgICAg
ICBpZiAoIW15Tm9kZSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBoYXBwZW4gaWYg
dGhlcmUgaXMgYSBwaGkgaW4gdGhlIGRlc3RpbmF0aW9uIHRoYXQgcmVmZXJzIGludG8KLSAgICAg
ICAgICAgICAgICAvLyB0aGUgZGVzdGluYXRpb24gaXRzZWxmLgotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKAotICAgICAgICAgICAgICAgICJDb25zaWRl
cmluZyByZW1vdmluZyByZWZlcmVuY2UgZnJvbSBwaGkgQCV1IHRvIEAldSBvbiBsb2NhbCByJWQ6
IiwKLSAgICAgICAgICAgICAgICBwaGlOb2RlLT5pbmRleCgpLCBteU5vZGUtPmluZGV4KCksIHBo
aU5vZGUtPmxvY2FsKCkpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAobXlOb2RlLT5vcCgpID09
IEdldExvY2FsKQotICAgICAgICAgICAgICAgIG15Tm9kZSA9IG15Tm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IEFkamFjZW5jeUxpc3Q6
OlNpemU7ICsraikKLSAgICAgICAgICAgICAgICByZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZl
cmVuY2UobXlOb2RlLCBwaGlOb2RlLCBqLCBzb3VyY2VCbG9jay0+aXNSZWFjaGFibGUpOwotI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFM
b2dGKCJcbiIpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgdm9pZCBmaXhK
ZXR0aXNvbmVkUHJlZGVjZXNzb3JzKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBq
ZXR0aXNvbmVkQmxvY2tJbmRleCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQpAQCAtNDA5LDggKzMwMyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBq
ZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmaXhQaGlzKGJsb2NrSW5kZXgs
IGpldHRpc29uZWRCbG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZW1vdmVQb3Rl
bnRpYWxseURlYWRQaGlSZWZlcmVuY2UoTm9kZSogbXlOb2RlLCBOb2RlKiBwaGlOb2RlLCB1bnNp
Z25lZCBlZGdlSW5kZXgsIGJvb2wgY2hhbmdlUmVmKQpAQCAtNTgzLDg4ICs0NzUsOCBAQCBwcml2
YXRlOgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5waGlzLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgZmlyc3RCbG9jay0+cGhpcy5hcHBlbmQoc2Vjb25kQmxv
Y2stPnBoaXNbaV0pOwogCi0gICAgICAgIC8vIEJlZm9yZSB3ZSBzdGFydCBjaGFuZ2luZyB0aGUg
c2Vjb25kIGJsb2NrJ3MgZ3JhcGgsIHJlY29yZCB3aGF0IG5vZGVzIHdvdWxkCi0gICAgICAgIC8v
IGJlIHJlZmVyZW5jZWQgYnkgc3VjY2Vzc29ycyBvZiB0aGUgc2Vjb25kIGJsb2NrLgotICAgICAg
ICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiBzdWJzdGl0dXRpb25zKAotICAgICAgICAg
ICAgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAg
ICAgICAgICAgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKLSAgICAgICAgICAgIHJlY29yZFBvc3NpYmxl
SW5jb21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1dGlvbnMsIGFyZ3VtZW50VG9P
cGVyYW5kKGkpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsraSkKLSAgICAgICAgICAgIHJlY29y
ZFBvc3NpYmxlSW5jb21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1dGlvbnMsIGkp
OwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gc2Vjb25kQmxvY2stPmF0KGkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBib29sIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gZmFsc2U7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAg
ICAgICAgY2FzZSBQaGFudG9tOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEo
KSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgICAg
IE5vZGUqIHBvc3NpYmxlTG9jYWxPcCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAg
ICAgICAgICBpZiAocG9zc2libGVMb2NhbE9wLT5vcCgpICE9IEdldExvY2FsCi0gICAgICAgICAg
ICAgICAgICAgICYmIHBvc3NpYmxlTG9jYWxPcC0+aGFzTG9jYWwoKQotICAgICAgICAgICAgICAg
ICAgICAmJiAhcG9zc2libGVMb2NhbE9wLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJl
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gZmlyc3RCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQocG9zc2libGVMb2NhbE9wLT5sb2NhbCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHNldExvY2FsLT5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQx
KCksIHNldExvY2FsLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
IW5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+
Y2hpbGQzKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5BbHJlYWR5Rml4ZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAg
ICAgICAgICAvLyBBIEZsdXNoIGNvdWxkIHVzZSBhIEdldExvY2FsLCBTZXRMb2NhbCwgU2V0QXJn
dW1lbnQsIG9yIGEgUGhpLgotICAgICAgICAgICAgICAgIC8vIElmIGl0IHVzZXMgYSBHZXRMb2Nh
bCwgaXQnbGwgYmUgdGFrZW4gY2FyZSBvZiBiZWxvdy4gSWYgaXQgdXNlcyBhCi0gICAgICAgICAg
ICAgICAgLy8gU2V0TG9jYWwgb3IgU2V0QXJndW1lbnQsIHRoZW4gaXQgbXVzdCBiZSB1c2luZyBh
IG5vZGUgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAvLyBzYW1lIGJsb2NrLiBCdXQgaWYgaXQg
dXNlcyBhIFBoaSwgdGhlbiB3ZSBzaG91bGQgcmVkaXJlY3QgaXQgdG8KLSAgICAgICAgICAgICAg
ICAvLyB1c2Ugd2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGFkdmVydGlzZWQgYXMgYSB0YWlsIG9w
ZXJhbmQuCi0gICAgICAgICAgICAgICAgLy8gU2ltaWxhcmx5IGZvciBHZXRMb2NhbDsgaXQgY291
bGQgdXNlIGFueSBvZiB0aG9zZSBleGNlcHQgZm9yCi0gICAgICAgICAgICAgICAgLy8gR2V0TG9j
YWwuIElmIGl0IHVzZXMgYSBQaGkgdGhlbiBpdCBzaG91bGQgYmUgcmVkaXJlY3RlZCB0byB1c2Ug
YQotICAgICAgICAgICAgICAgIC8vIFBoaSBmcm9tIHRoZSB0YWlsIG9wZXJhbmQuCi0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpICE9IFBoaSkKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSogYXRG
aXJzdCA9IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkp
OwotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGls
ZDEoKSwgRWRnZShza2lwR2V0TG9jYWwoYXRGaXJzdCkpLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgp
KTsKLSAgICAgICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWNoaWxkcmVuQWxyZWFkeUZpeGVkKSB7Ci0gICAg
ICAgICAgICAgICAgYm9vbCBjaGFuZ2VSZWYgPSBub2RlLT5zaG91bGRHZW5lcmF0ZSgpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGEgR2V0TG9jYWws
IHRoZW4gd2UgbWlnaHQgbGlrZSB0byBmaXggaXQuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigp
OwotICAgICAgICAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEhbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG1f
Z3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIGNoYW5nZVJlZik7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEhbm9kZS0+Y2hpbGQxKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBu
b2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCEhbm9kZS0+Y2hpbGQyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3Np
YmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIGNoYW5nZVJl
Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFub2RlLT5jaGlsZDMoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaXJzdEJs
b2NrLT5hcHBlbmQobm9kZSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzZWNvbmRCbG9jay0+c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmaXJzdEJsb2NrLT5h
cHBlbmQoc2Vjb25kQmxvY2stPmF0KGkpKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChmaXJz
dEJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwoKSk7CiAgICAgICAgIApAQCAtNjg2LDM3ICs0OTgs
NiBAQCBwcml2YXRlOgogICAgICAgICBpZiAoamV0dGlzb25lZEJsb2NrSW5kZXggIT0gTm9CbG9j
aykKICAgICAgICAgICAgIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoZmlyc3RCbG9ja0luZGV4
LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7CiAgICAgICAgIAotICAgICAgICAvLyBGaXggdXAgdGhl
IHZhcmlhYmxlcyBhdCB0YWlsLgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29u
ZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQotICAgICAg
ICAgICAgZml4VGFpbE9wZXJhbmQoZmlyc3RCbG9jaywgc2Vjb25kQmxvY2ssIGFyZ3VtZW50VG9P
cGVyYW5kKGkpLCBzdWJzdGl0dXRpb25zKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkKLSAg
ICAgICAgICAgIGZpeFRhaWxPcGVyYW5kKGZpcnN0QmxvY2ssIHNlY29uZEJsb2NrLCBpLCBzdWJz
dGl0dXRpb25zKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZpeCB1cCB0aGUgcmVmZXJlbmNlcyBm
cm9tIG91ciBuZXcgc3VjY2Vzc29ycy4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFw
aC5udW1TdWNjZXNzb3JzKGZpcnN0QmxvY2spOyBpLS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgPSBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGZpcnN0
QmxvY2ssIGkpXS5nZXQoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBz
dWNjZXNzb3ItPnBoaXMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBwaGlO
b2RlID0gc3VjY2Vzc29yLT5waGlzW2pdOwotICAgICAgICAgICAgICAgIGJvb2wgY2hhbmdlUmVm
ID0gcGhpTm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKLSAgICAgICAgICAgICAgICBPcGVyYW5kU3Vi
c3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMub3BlcmFuZChwaGlOb2RlLT5s
b2NhbCgpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgIFBlcmZvcm1pbmcgb3BlcmFuZCBzdWJzdGl0dXRpb24g
Iiwgc3Vic3RpdHV0aW9uLCAiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAoIXBo
aU5vZGUtPmNoaWxkMSgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxkKQot
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKHBoaU5vZGUtPmNoaWxkcmVu
LmNoaWxkMSgpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDIoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpID09IHN1YnN0aXR1dGlv
bi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VDaGlsZChwaGlO
b2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYp
OwotICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQzKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDMoKSA9
PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hh
bmdlQ2hpbGQocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHN1YnN0aXR1dGlvbi5uZXdDaGls
ZCwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKICAgICAg
ICAgZmlyc3RCbG9jay0+dmFsdWVzQXRUYWlsID0gc2Vjb25kQmxvY2stPnZhbHVlc0F0VGFpbDsK
ICAgICAgICAgZmlyc3RCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uID0gc2Vjb25kQmxvY2stPmNm
YUJyYW5jaERpcmVjdGlvbjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAi
REZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ1BTUmV0aHJlYWRpbmdQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CitwdWJsaWM6CisgICAgQ1BTUmV0aHJlYWRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJDUFMgcmV0aHJlYWRpbmciKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRo
cmVhZGVkQ1BTKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
ZnJlZVVubmVjZXNzYXJ5Tm9kZXMoKTsKKyAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9j
a3MoKTsKKyAgICAgICAgcHJvcGFnYXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7CisgICAgICAgIHBy
b3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBtX2dyYXBoLmNvbGxlY3RH
YXJiYWdlKCk7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVhZGVkQ1BT
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgCisgICAgdm9p
ZCBmcmVlVW5uZWNlc3NhcnlOb2RlcygpCisgICAgeworICAgICAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIENQUyBSZXRocmVhZGluZzogZnJlZVVubmVjZXNzYXJ5Tm9kZXMi
KTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBB
U1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdW5z
aWduZWQgZnJvbUluZGV4ID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRvSW5kZXggPSAwOwor
ICAgICAgICAgICAgd2hpbGUgKGZyb21JbmRleCA8IGJsb2NrLT5zaXplKCkpIHsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGZyb21JbmRleCsrKTsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2Fs
OgorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFu
dG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShF
ZGdlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IFBoYW50b206CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5jaGlsZDEoKS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFBoaToK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1BoYW50b21Mb2NhbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+Y2hpbGQxKCktPmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgTm9wOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSAwOyAvLyBS
ZXNldCB0aGUgcmVwbGFjZW1lbnQgc2luY2UgdGhlIG5leHQgcGhhc2Ugd2lsbCB1c2UgaXQuCisg
ICAgICAgICAgICAgICAgYmxvY2stPmF0KHRvSW5kZXgrKykgPSBub2RlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYmxvY2stPnJlc2l6ZSh0b0luZGV4KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhp
SW5kZXgtLTspCisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2Nr
LT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgICAgICBibG9jay0+cGhpcy5yZXNpemUoMCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtp
bmQ+CisgICAgdm9pZCBjbGVhclZhcmlhYmxlc0F0SGVhZEFuZFRhaWwoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKAorICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemVGb3I8
b3BlcmFuZEtpbmQ+KCkKKyAgICAgICAgICAgID09IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5z
aXplRm9yPG9wZXJhbmRLaW5kPigpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplRm9yPG9wZXJhbmRLaW5kPigpOyBpLS07
KSB7CisgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXRGb3I8b3BlcmFuZEtp
bmQ+KGkpID0gMDsKKyAgICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxv
cGVyYW5kS2luZD4oaSkgPSAwOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFMV0FZU19J
TkxJTkUgTm9kZSogYWRkUGhpU2lsZW50bHkoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IENvZGVP
cmlnaW4mIGNvZGVPcmlnaW4sIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCisgICAgewor
ICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoRG9udFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIFBoaSwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSk7
CisgICAgICAgIGJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4K
KyAgICBBTFdBWVNfSU5MSU5FIE5vZGUqIGFkZFBoaShCYXNpY0Jsb2NrKiBibG9jaywgY29uc3Qg
Q29kZU9yaWdpbiYgY29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgc2l6
ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkUGhpU2lsZW50bHko
YmxvY2ssIGNvZGVPcmlnaW4sIHZhcmlhYmxlKTsKKyAgICAgICAgcGhpU3RhY2tGb3I8b3BlcmFu
ZEtpbmQ+KCkuYXBwZW5kKFBoaVN0YWNrRW50cnkoYmxvY2ssIGluZGV4LCByZXN1bHQpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtp
bmQgb3BlcmFuZEtpbmQ+CisgICAgQUxXQVlTX0lOTElORSBOb2RlKiBhZGRQaGkoY29uc3QgQ29k
ZU9yaWdpbiYgY29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgc2l6ZV90
IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkZFBoaTxvcGVyYW5kS2luZD4obV9ibG9j
aywgY29kZU9yaWdpbiwgdmFyaWFibGUsIGluZGV4KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CisgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2Nh
bEZvcihOb2RlKiBub2RlLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBzaXplX3QgaWR4
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoTm9kZSogb3RoZXJOb2RlID0gbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9y
PG9wZXJhbmRLaW5kPihpZHgpKSB7CisgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHN3aXRjaCAob3RoZXJOb2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAg
ICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgb3RoZXJOb2RlID0g
b3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKG90aGVyTm9k
ZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBoYXZl
IGEgR2V0TG9jYWwsIHNvIHRoaXMgbWlnaHQgYXMgd2VsbCBiZSB0aGUgb25lLgorICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhlck5vZGUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRL
aW5kPihpZHgpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgp
ID09IFNldExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQob3Ro
ZXJOb2RlLT5vcCgpID09IFNldExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVu
dCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpOworICAgICAgICAgICAgQVNTRVJUKG90
aGVyTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGUpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50KSB7CisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2RlKSk7Cisg
ICAgICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRLaW5k
PihpZHgpID0gbm9kZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAg
ICAgICAgICAgICAgb3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5v
cCgpID09IFNldExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBQ
aGkgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBT
ZXRBcmd1bWVudCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gS2VlcCB0
aGlzIEdldExvY2FsIGJ1dCBsaW5rIGl0IHRvIHRoZSBwcmlvciBvbmVzLgorICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9kZSkpOworICAgICAgICAg
ICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9
IG5vZGU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IEdldExvY2FsKSB7CisgICAg
ICAgICAgICAgICAgLy8gUmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIEdldExvY2FsIHdp
dGggb3RoZXJOb2RlLgorICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gb3RoZXJO
b2RlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAg
ICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2RlKiBw
aGkgPSBhZGRQaGk8b3BlcmFuZEtpbmQ+KG5vZGUtPmNvZGVPcmlnaW4sIHZhcmlhYmxlLCBpZHgp
OworICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShwaGkpKTsKKyAgICAgICAg
bV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9wZXJhbmRLaW5kPihpZHgpID0gcGhpOwor
ICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGlkeCkg
PSBub2RlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUdldExvY2FsKE5vZGUq
IG5vZGUpCisgICAgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudCh2
YXJpYWJsZS0+bG9jYWwoKSkpCisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxB
cmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCBvcGVyYW5kVG9Bcmd1bWVudCh2YXJpYWJs
ZS0+bG9jYWwoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRM
b2NhbEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY2Fub25pY2FsaXplU2V0TG9jYWwoTm9kZSogbm9kZSkK
KyAgICB7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUt
PmxvY2FsKCksIG5vZGUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2Rl
VHlwZSwgT3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CisgICAgdm9pZCBjYW5vbmljYWxpemVGbHVz
aE9yUGhhbnRvbUxvY2FsRm9yKE5vZGUqIG5vZGUsIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUsIHNpemVfdCBpZHgpCisgICAgeworICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChOb2RlKiBvdGhlck5vZGUgPSBtX2Jsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGlkeCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChv
dGhlck5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc3dpdGNoIChvdGhlck5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgRmx1c2g6CisgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgIGNh
c2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgb3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGls
ZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgpID09IFBoaSB8fCBvdGhlck5vZGUtPm9w
KCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09IFBoYW50b21Mb2NhbCAmJiBvdGhl
ck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAvLyBQaGFudG9tTG9j
YWwoU2V0TG9jYWwpIGRvZXNuJ3QgbWFrZSBzZW5zZS4gUGhhbnRvbUxvY2FsIG1lYW5zOiBhdCB0
aGlzCisgICAgICAgICAgICAgICAgLy8gcG9pbnQgSSBrbm93IEkgd291bGQgaGF2ZSBiZWVuIGlu
dGVyZXN0ZWQgaW4gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAv
LyBmb3IgdGhlIHB1cnBvc2Ugb2YgT1NSLiBQaGFudG9tTG9jYWwoU2V0TG9jYWwpIG1lYW5zOiBh
dCB0aGlzIHBvaW50IEkKKyAgICAgICAgICAgICAgICAvLyBrbm93IHRoYXQgSSB3b3VsZCBoYXZl
IHJlYWQgdGhlIHZhbHVlIHdyaXR0ZW4gYnkgdGhhdCBTZXRMb2NhbC4gVGhpcyBpcworICAgICAg
ICAgICAgICAgIC8vIHJlZHVuZGFudCBhbmQgaW5lZmZpY2llbnQsIHNpbmNlIHJlYWxseSBpdCBq
dXN0IG1lYW5zIHRoYXQgd2Ugd2FudCB0bworICAgICAgICAgICAgICAgIC8vIGJlIGtlZXBpbmcg
dGhlIG9wZXJhbmQgdG8gdGhlIFNldExvY2FsIGFsaXZlLiBUaGUgU2V0TG9jYWwgbWF5IGRpZSwg
YW5kCisgICAgICAgICAgICAgICAgLy8gd2UnbGwgYmUgZmluZSBiZWNhdXNlIE9TUiB0cmFja3Mg
ZGVhZCBTZXRMb2NhbHMuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gU28g
d2UgdHVybiB0aGlzIGludG8gYSBQaGFudG9tIG9uIHRoZSBjaGlsZCBvZiB0aGUgU2V0TG9jYWwu
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQx
KG90aGVyTm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm90aGluZyB3cm9u
ZyB3aXRoIGhhdmluZyByZWR1bmRhbnQgRmx1c2gncy4gSXQganVzdCBuZWVkcyB0bworICAgICAg
ICAgICAgLy8gYmUgbGlua2VkIGFwcHJvcHJpYXRlbHkuIE5vdGUgdGhhdCBpZiB0aGVyZSBoYWQg
YWxyZWFkeSBiZWVuIGEgcHJldmlvdXMKKyAgICAgICAgICAgIC8vIHVzZSBhdCB0YWlsIHRoZW4g
d2UgZG9uJ3Qgb3ZlcnJpZGUgaXQuIEl0J3MgZmluZSBmb3IgdmFyaWFibGVzQXRUYWlsIHRvCisg
ICAgICAgICAgICAvLyBvbWl0IEZsdXNoZXMgYW5kIFBoYW50b21Mb2NhbHMuIE9uIHRoZSBvdGhl
ciBoYW5kLCBoYXZpbmcgaXQgcmVmZXIgdG8gYQorICAgICAgICAgICAgLy8gRmx1c2ggb3IgYSBQ
aGFudG9tTG9jYWwgaWYganVzdCBiZWZvcmUgaXQgdGhlIGxhc3QgdXNlIHdhcyBhIEdldExvY2Fs
IHdvdWxkCisgICAgICAgICAgICAvLyBzZXJpb3VzbHkgY29uZnVzZSB0aGUgQ0ZBLgorICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2RlKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG5vZGUtPmNoaWxkcmVu
LnNldENoaWxkMShFZGdlKGFkZFBoaTxvcGVyYW5kS2luZD4obm9kZS0+Y29kZU9yaWdpbiwgdmFy
aWFibGUsIGlkeCkpKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9w
ZXJhbmRLaW5kPihpZHgpID0gbm9kZTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWls
LmF0Rm9yPG9wZXJhbmRLaW5kPihpZHgpID0gbm9kZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxO
b2RlVHlwZSBub2RlVHlwZT4KKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9j
YWwoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0Fy
Z3VtZW50KHZhcmlhYmxlLT5sb2NhbCgpKSkKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNo
T3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFi
bGUsIG9wZXJhbmRUb0FyZ3VtZW50KHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUs
IExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjYW5vbmljYWxpemVTZXRBcmd1bWVudChOb2RlKiBub2RlKQorICAg
IHsKKyAgICAgICAgaW50IGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgQVNTRVJUKG9w
ZXJhbmRJc0FyZ3VtZW50KGxvY2FsKSk7CisgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmRU
b0FyZ3VtZW50KGxvY2FsKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFy
Z3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFi
bGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKCkKKyAgICB7CisgICAgICAg
IGlmICghbV9ibG9jaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKG1fYmxv
Y2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAgCisgICAgICAgIGNsZWFyVmFyaWFibGVzQXRIZWFk
QW5kVGFpbDxBcmd1bWVudE9wZXJhbmQ+KCk7CisgICAgICAgIGNsZWFyVmFyaWFibGVzQXRIZWFk
QW5kVGFpbDxMb2NhbE9wZXJhbmQ+KCk7CisgICAgICAgIAorICAgICAgICAvLyBBc3N1bWVzIHRo
YXQgYWxsIHBoaSByZWZlcmVuY2VzIGhhdmUgYmVlbiByZW1vdmVkLiBBc3N1bWVzIHRoYXQgdGhp
bmdzIHRoYXQKKyAgICAgICAgLy8gc2hvdWxkIGJlIGxpdmUgaGF2ZSBhIG5vbi16ZXJvIHJlZiBj
b3VudCwgYnV0IGRvZXNuJ3QgYXNzdW1lIHRoYXQgdGhlIHJlZgorICAgICAgICAvLyBjb3VudHMg
YXJlIGNvcnJlY3QgYmV5b25kIHRoYXQgKG1vcmUgZm9ybWFsbHkgISFsb2dpY2FsUmVmQ291bnQg
PT0gISFhY3R1YWxSZWZDb3VudAorICAgICAgICAvLyBidXQgbm90IGxvZ2ljYWxSZWZDb3VudCA9
PSBhY3R1YWxSZWZDb3VudCkuIEFzc3VtZXMgdGhhdCBpdCBjYW4gYnJlYWsgcmVmCisgICAgICAg
IC8vIGNvdW50cy4KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
MDsgbm9kZUluZGV4IDwgbV9ibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihub2RlKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gVGhlIHJ1bGVzIGZvciB0aHJlYWRlZCBDUFMgZm9ybToKKyAgICAg
ICAgICAgIC8vIAorICAgICAgICAgICAgLy8gSGVhZCB2YXJpYWJsZTogdGhlIGZpcnN0IHRoaW5n
IHRoYXQgaGFwcGVuZWQgdG8gdGhlIHZhcmlhYmxlIGluIHRoZSBibG9jay4KKyAgICAgICAgICAg
IC8vIEl0IG1heSBiZSBhIEZsdXNoLCBQaGFudG9tTG9jYWwsIEdldExvY2FsLCBTZXRMb2NhbCwg
b3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCBtYXkgb25seSBhcHBl
YXIgaW4gdGhlIHJvb3QgYmxvY2suCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGFp
bCB2YXJpYWJsZTogdGhlIGxhc3QgdGhpbmcgdGhhdCBoYXBwZW5lZCB0byB0aGUgdmFyaWFibGUg
aW4gdGhlIGJsb2NrLgorICAgICAgICAgICAgLy8gSXQgbWF5IGJlIGEgRmx1c2gsIFBoYW50b21M
b2NhbCwgR2V0TG9jYWwsIFNldExvY2FsLCBvciBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgIC8v
IFNldEFyZ3VtZW50IG1heSBvbmx5IGFwcGVhciBpbiB0aGUgcm9vdCBibG9jay4gTm90ZSB0aGF0
IGlmIHRoZXJlIGV2ZXIKKyAgICAgICAgICAgIC8vIHdhcyBhIEdldExvY2FsIHRvIHRoZSB2YXJp
YWJsZSwgYW5kIGl0IHdhcyBmb2xsb3dlZCBieSBQaGFudG9tTG9jYWxzIGFuZAorICAgICAgICAg
ICAgLy8gRmx1c2hlcyBidXQgbm90IFNldExvY2FscywgdGhlbiB0aGUgdGFpbCB2YXJpYWJsZSB3
aWxsIGJlIHRoZSBHZXRMb2NhbC4KKyAgICAgICAgICAgIC8vIFRoaXMgcmVmbGVjdHMgdGhlIGZh
Y3QgdGhhdCB5b3Ugb25seSBjYXJlIHRoYXQgdGhlIHRhaWwgdmFyaWFibGUgaXMgYQorICAgICAg
ICAgICAgLy8gRmx1c2ggb3IgUGhhbnRvbUxvY2FsIGlmIG5vdGhpbmcgZWxzZSBpbnRlcmVzdGlu
ZyBoYXBwZW5lZC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBDaGlsZCBvZiBHZXRM
b2NhbDogdGhlIG9wZXJhdGlvbiB0aGF0IHRoZSBHZXRMb2NhbCBrZWVwcyBhbGl2ZS4gRm9yCisg
ICAgICAgICAgICAvLyB1bmNhcHR1cmVkIGxvY2FscywgaXQgbWF5IGJlIGEgUGhpIGZyb20gdGhl
IGN1cnJlbnQgYmxvY2suIEZvciBhcmd1bWVudHMsCisgICAgICAgICAgICAvLyBpdCBtYXkgYmUg
YSBTZXRBcmd1bWVudC4gRm9yIGNhcHR1cmVkIGxvY2FscyBhbmQgYXJndW1lbnRzIGl0IG1heSBh
bHNvIGJlCisgICAgICAgICAgICAvLyBhIFNldExvY2FsLgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIENoaWxkIG9mIFNldExvY2FsOiBtdXN0IGJlIGEgdmFsdWUgcHJvZHVjaW5nIG5v
ZGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2hpbGQgb2YgRmx1c2g6IGl0IG1h
eSBiZSBhIFBoaSBmcm9tIHRoZSBjdXJyZW50IGJsb2NrIG9yIGEgU2V0TG9jYWwuIEZvcgorICAg
ICAgICAgICAgLy8gYXJndW1lbnRzIGl0IG1heSBhbHNvIGJlIGEgU2V0QXJndW1lbnQuCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2hpbGQgb2YgUGhhbnRvbUxvY2FsOiBpdCBtYXkg
YmUgYSBQaGkgZnJvbSB0aGUgY3VycmVudCBibG9jay4gRm9yCisgICAgICAgICAgICAvLyBhcmd1
bWVudHMgaXQgbWF5IGFsc28gYmUgYSBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyBDaGlsZHJlbiBvZiBQaGk6IG90aGVyIFBoaXMgaW4gdGhlIHNhbWUgYmFzaWMg
YmxvY2ssIG9yIGFueSBvZiB0aGUKKyAgICAgICAgICAgIC8vIGZvbGxvd2luZyBmcm9tIGZyb20g
cHJlZGVjZXNzb3IgYmxvY2tzOiBTZXRMb2NhbCwgUGhpLCBvciBTZXRBcmd1bWVudC4KKyAgICAg
ICAgICAgIC8vIFRoZXNlIGFyZSBjb21wdXRlZCBieSBsb29raW5nIGF0IHRoZSB0YWlsIHZhcmlh
YmxlcyBvZiB0aGUgcHJlZGVjZXNzb3IKKyAgICAgICAgICAgIC8vIGJsb2NrcyBhbmQgZWl0aGVy
IHVzaW5nIGl0IGRpcmVjdGx5IChpZiBpdCdzIGEgU2V0TG9jYWwsIFBoaSwgb3IKKyAgICAgICAg
ICAgIC8vIFNldEFyZ3VtZW50KSBvciBsb2FkaW5nIHRoYXQgbm9kZXMgY2hpbGQgKGlmIGl0J3Mg
YSBHZXRMb2NhbCwgUGhhbm9tTG9jYWwsCisgICAgICAgICAgICAvLyBvciBGbHVzaCAtIGFsbCBv
ZiB0aGVzZSB3aWxsIGhhdmUgY2hpbGRyZW4gdGhhdCBhcmUgU2V0TG9jYWwsIFBoaSwgb3IKKyAg
ICAgICAgICAgIC8vIFNldEFyZ3VtZW50KS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAg
ICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAg
ICAgICAgICBjYW5vbmljYWxpemVTZXRMb2NhbChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAg
ICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbDxGbHVzaD4obm9kZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFBo
YW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxv
Y2FsPFBoYW50b20+KG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAgICBjYW5v
bmljYWxpemVTZXRBcmd1bWVudChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjYW5vbmlj
YWxpemVMb2NhbHNJbkJsb2NrcygpCisgICAgeworICAgICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIENQUyBSZXRocmVhZGluZzogY2Fub25pY2FsaXplTG9jYWxzSW5CbG9j
a3MiKTsKKyAgICAgICAgCisgICAgICAgIGZvciAobV9ibG9ja0luZGV4ID0gbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCk7IG1fYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgbV9ibG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbbV9ibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGNhbm9uaWNh
bGl6ZUxvY2Fsc0luQmxvY2soKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICB2b2lkIHByb3BhZ2F0ZVBoaXMoKQorICAg
IHsKKyAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0gb3BlcmFu
ZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kID8gbV9hcmd1bWVudFBoaVN0YWNrIDogbV9sb2NhbFBo
aVN0YWNrOworICAgICAgICAKKyAgICAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBDUFMgUmV0aHJlYWRpbmc6IHByb3BhZ2F0ZVBoaXMiKTsKKyAgICAgICAgCisgICAgICAg
IC8vIEVuc3VyZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIGZhaWwgaW5zdGFudGx5LgorICAg
ICAgICBtX2Jsb2NrID0gMDsKKyAgICAgICAgbV9ibG9ja0luZGV4ID0gTm9CbG9jazsKKyAgICAg
ICAgCisgICAgICAgIHdoaWxlICghcGhpU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBQ
aGlTdGFja0VudHJ5IGVudHJ5ID0gcGhpU3RhY2subGFzdCgpOworICAgICAgICAgICAgcGhpU3Rh
Y2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGVudHJ5Lm1fYmxvY2s7CisgICAgICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRl
Y2Vzc29ycyA9IGJsb2NrLT5tX3ByZWRlY2Vzc29yczsKKyAgICAgICAgICAgIE5vZGUqIGN1cnJl
bnRQaGkgPSBlbnRyeS5tX3BoaTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBjdXJyZW50UGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIHNp
emVfdCBpbmRleCA9IGVudHJ5Lm1faW5kZXg7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBwcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAg
ICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVj
ZXNzb3JzW2ldXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2Rl
KiB2YXJpYWJsZUluUHJldmlvdXMgPSBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
YXRGb3I8b3BlcmFuZEtpbmQ+KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxl
SW5QcmV2aW91cykgeworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluUHJldmlvdXMgPSBh
ZGRQaGk8b3BlcmFuZEtpbmQ+KHByZWRlY2Vzc29yQmxvY2ssIGN1cnJlbnRQaGktPmNvZGVPcmln
aW4sIHZhcmlhYmxlLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaW5kZXgpID0gdmFyaWFibGVJ
blByZXZpb3VzOworICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQuYXRGb3I8b3BlcmFuZEtpbmQ+KGluZGV4KSA9IHZhcmlhYmxlSW5QcmV2aW91czsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZh
cmlhYmxlSW5QcmV2aW91cy0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExv
Y2FsOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJp
YWJsZUluUHJldmlvdXMtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlSW5QcmV2aW91
cy0+Y2hpbGQxKCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlSW5QcmV2aW91cyA9IHZhcmlhYmxlSW5QcmV2aW91cy0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5QcmV2aW91cy0+b3Ao
KSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUluUHJldmlvdXMt
Pm9wKCkgPT0gUGhpCisgICAgICAgICAgICAgICAgICAgIHx8IHZhcmlhYmxlSW5QcmV2aW91cy0+
b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFj
dXJyZW50UGhpLT5jaGlsZDEoKSkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGhpLT5j
aGlsZHJlbi5zZXRDaGlsZDEoRWRnZSh2YXJpYWJsZUluUHJldmlvdXMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICghY3VycmVudFBoaS0+Y2hpbGQyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBo
aS0+Y2hpbGRyZW4uc2V0Q2hpbGQyKEVkZ2UodmFyaWFibGVJblByZXZpb3VzKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoIWN1cnJlbnRQaGktPmNoaWxkMygpKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRQaGktPmNoaWxkcmVuLnNldENoaWxkMyhFZGdlKHZhcmlhYmxlSW5QcmV2aW91cykpOworICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogbmV3UGhpID0gYWRkUGhpU2lsZW50bHkoYmxv
Y2ssIGN1cnJlbnRQaGktPmNvZGVPcmlnaW4sIHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICBu
ZXdQaGktPmNoaWxkcmVuID0gY3VycmVudFBoaS0+Y2hpbGRyZW47CisgICAgICAgICAgICAgICAg
Y3VycmVudFBoaS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShuZXdQaGksIHZhcmlhYmxlSW5QcmV2aW91
cywgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RydWN0
IFBoaVN0YWNrRW50cnkgeworICAgICAgICBQaGlTdGFja0VudHJ5KEJhc2ljQmxvY2sqIGJsb2Nr
LCBzaXplX3QgaW5kZXgsIE5vZGUqIHBoaSkKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykK
KyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgICwgbV9waGkocGhpKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxv
Y2s7CisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICBOb2RlKiBtX3BoaTsKKyAgICB9
OworICAgIAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIFZlY3Rv
cjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlTdGFja0ZvcigpCisgICAgeworICAgICAgICBpZiAo
b3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJn
dW1lbnRQaGlTdGFjazsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICB9Cisg
ICAgCisgICAgQmxvY2tJbmRleCBtX2Jsb2NrSW5kZXg7CisgICAgQmFzaWNCbG9jayogbV9ibG9j
azsKKyAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3VtZW50UGhpU3RhY2s7Cisg
ICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0YWNrOworfTsKKworYm9v
bCBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVn
aW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ1BTIFJldGhyZWFkaW5nIFBoYXNlIik7CisgICAgcmV0
dXJuIHJ1blBoYXNlPENQU1JldGhyZWFkaW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDUFNSZXRocmVhZGlu
Z1BoYXNlX2gKKyNkZWZpbmUgREZHQ1BTUmV0aHJlYWRpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDUFMgUmV0aHJlYWRpbmc6Cisv
LworLy8gVGFrZXMgYSBncmFwaCBpbiB3aGljaCB0aGVyZSBhcmUgYXJiaXRyYXJ5IEdldExvY2Fs
cy9TZXRMb2NhbHMgd2l0aCBubyBjb25uZWN0aW9ucworLy8gYmV0d2VlbiB0aGVtLiBSZW1vdmVz
IHJlZHVuZGFudCBvbmVzIGluIHRoZSBjYXNlIG9mIHVuY2FwdHVyZWQgdmFyaWFibGVzLiBDb25u
ZWN0cworLy8gYWxsIG9mIHRoZW0gd2l0aCBQaGkgZnVuY3Rpb25zIHRvIHJlcHJlc2VudCBsaXZl
IHJhbmdlcy4KKworYm9vbCBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdDUFNSZXRocmVhZGluZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0
OSw5IEBAIHB1YmxpYzoKICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9jayA9IDA7IGJsb2NrIDwg
bV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2spCiAgICAgICAgICAgICBwZXJmb3JtQmxv
Y2tDU0UobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja10uZ2V0KCkpOwogICAgICAgICAKKyAgICAgICAg
aWYgKG1fY2hhbmdlZCkKKyAgICAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gTG9hZFN0b3JlOwor
ICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CiAgICAgCkBAIC05NzQs
MjcgKzk3Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihFZGdlJiBjaGlsZCwgYm9vbCBhZGRSZWYg
PSB0cnVlKQotICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVh
bGx5IHVudXNlZC4KLSAgICAgICAgaWYgKCFjaGlsZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBsYWNlbWVudC4KLSAg
ICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFjZW1lbnQ7Ci0gICAgICAgIGlm
ICghcmVwbGFjZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBj
aGlsZC5zZXROb2RlKHJlcGxhY2VtZW50KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZXJlIGlz
IGRlZmluaXRlbHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQgdGhlIHJlcGxhY2VtZW50IGRv
ZXMgbm90Ci0gICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4KLSAgICAgICAgQVNTRVJUKCFj
aGlsZC0+cmVwbGFjZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGFkZFJlZikKLSAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKGNoaWxkKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBlbGltaW5h
dGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSA9PSBQaGFudG9tKTsKQEAgLTEwNzIsMjEgKzEwNTQsMTIgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5vZGUpCiAgICAgewot
ICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKLQot
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8
IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0g
ICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRH
ZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVu
LmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0
aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgIH0K
KyAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOwogICAgICAgICAKICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCiAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAgIAotICAgICAgICBp
ZiAoIXNob3VsZEdlbmVyYXRlKQorICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKQEAgLTExNjIsMjYgKzExMzUsMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIE5vZGUqIHBoaSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlm
ICghc2V0UmVwbGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgR2V0TG9jYWwgd2UgcmVwbGFjZWQgdXNlZCB0
byByZWZlciB0byBhIFNldExvY2FsLCB0aGVuIGl0IG5vdwotICAgICAgICAgICAgLy8gc2hvdWxk
IHJlZmVyIHRvIHRoZSBjaGlsZCBvZiB0aGUgU2V0TG9jYWwgaW5zdGVhZC4KLSAgICAgICAgICAg
IGlmIChwaGktPm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9k
ZS0+Y2hpbGQxKCkgPT0gcGhpKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uo
bm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHBoaS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgTm9kZSogb2xkVGFpbCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZCgKLSAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkp
OwotICAgICAgICAgICAgaWYgKG9sZFRhaWwgPT0gbm9kZSkgewotICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCkpID0KLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIE1haW50YWluIGdyYXBoIGludGVncml0eTog
c2luY2Ugd2UncmUgcmVwbGFjaW5nIGEgR2V0TG9jYWwgd2l0aCBhIEdldExvY2FsVW5saW5rZWQs
Ci0gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIEdldExvY2FsVW5saW5rZWQg
aXMgbm93IGxpbmtlZC4KLSAgICAgICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgp
ID09IEdldExvY2FsVW5saW5rZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2Nh
bE9wLT5zZXRPcChHZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxP
cC0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKHBoaSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgucmVmKHBoaSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElm
IHdlIHJlcGxhY2UgYSBHZXRMb2NhbCB3aXRoIGEgR2V0TG9jYWxVbmxpbmtlZCwgdGhlbiB0dXJu
IHRoZSBHZXRMb2NhbFVubGlua2VkCisgICAgICAgICAgICAvLyBpbnRvIGEgR2V0TG9jYWwuCisg
ICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpID09IEdldExvY2FsVW5saW5rZWQp
IHsKKyAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNvbnZlcnRUb0dldExvY2FsKHZh
cmlhYmxlQWNjZXNzRGF0YSwgcGhpKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGkp
OwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyMzUsOSArMTE5OCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAgICAgICAg
ICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoZGF0YU5vZGUpOwogICAgICAgICAgICAg
bV9ncmFwaC5yZWYoZGF0YU5vZGUpOwotICAgICAgICAgICAgTm9kZSogb2xkVGFpbCA9IG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICBp
ZiAob2xkVGFpbCA9PSBub2RlKQotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCkgPSByZXBsYWNlbWVudDsKKyAgICAgICAgICAgIG1f
Z3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0MTcyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsNjAgKzMyMyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKLSAgICAgICAgICAg
ICAgICBOb2RlKiBwcmV2aW91c0xvY2FsQWNjZXNzID0gMDsKLSAgICAgICAgICAgICAgICBpZiAo
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vZGUKLSAg
ICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSBjb21tb24gY2FzZS4K
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0luUGhpcyhub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2NhbEFjY2VzcyA9IG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gcHJldmlvdXNMb2NhbEFjY2VzczsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5kZXhJ
bkJsb2NrID4gMCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE11c3Qgc2VhcmNoIGZvciB0aGUg
cHJldmlvdXMgYWNjZXNzIHRvIHRoaXMgbG9jYWwuCi0gICAgICAgICAgICAgICAgICAgIGZvciAo
QmxvY2tJbmRleCBzdWJJbmRleEluQmxvY2sgPSBpbmRleEluQmxvY2s7IHN1YkluZGV4SW5CbG9j
ay0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3ViTm9kZSA9IGJsb2NrLT5h
dChzdWJJbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWJOb2RlLT5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5sb2NhbCgpICE9IG5vZGUtPmxvY2FsKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgdHdvIG11c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoc3ViTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMb2Nh
bEFjY2VzcyA9IHN1Yk5vZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzTG9jYWxB
Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyBhY2Nlc3Mg
bXVzdCBoYXZlIGJlZW4gYSBQaGkuCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggcGhpSW5kZXhJbkJsb2NrID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleEluQmxv
Y2stLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxv
Y2stPnBoaXNbcGhpSW5kZXhJbkJsb2NrXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaGlOb2Rl
LT5sb2NhbCgpICE9IG5vZGUtPmxvY2FsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0d28gbXVz
dCBoYXZlIGJlZW4gdW5pZmllZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
cGhpTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBw
aGlOb2RlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3VzTG9j
YWxBY2Nlc3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlQocHJldmlvdXNMb2NhbEFj
Y2Vzcyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSogdGFpbE5vZGUg
PSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRhaWxOb2RlID09IG5vZGUpCi0gICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxB
Y2Nlc3M7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxOb2RlLT5vcCgpID09IEZsdXNoCi0gICAg
ICAgICAgICAgICAgICAgICAgICB8fCB0YWlsTm9kZS0+b3AoKSA9PSBTZXRMb2NhbAotICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgaXNDYXB0dXJlZEF0T3JBZnRlcihibG9jaywgaW5kZXhJbkJs
b2NrLCBub2RlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCiAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5j
b2RlT3JpZ2luOwogICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNo
aWxkcmVuOwogICAgICAgICAgICAgICAgIApAQCAtMzg0LDYgKzMzMCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50
b20sIGNvZGVPcmlnaW4sIGNoaWxkcmVuKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgbV9n
cmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICAgICAgbV9zdGF0ZS5yZXNldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTQxNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTUgQEAKICNp
bmNsdWRlICJERkdCeXRlQ29kZVBhcnNlci5oIgogI2luY2x1ZGUgIkRGR0NGQVBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1ZGUgIkRG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKICNp
bmNsdWRlICJERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCIKKyNpbmNsdWRlICJERkdV
bmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNpbmNsdWRlICJE
RkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCkBAIC0xMDIsOSArMTA1LDYgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBj
b21waWxlTQogICAgIGlmICghcGFyc2UoZXhlYywgZGZnKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pCi0gICAgICAg
IGRmZy5wcmVkaWN0QXJndW1lbnRUeXBlcygpOwotICAgIAogICAgIC8vIEJ5IHRoaXMgcG9pbnQg
dGhlIERGRyBieXRlY29kZSBwYXJzZXIgd2lsbCBoYXZlIHBvdGVudGlhbGx5IG11dGF0ZWQgdmFy
aW91cyB0YWJsZXMKICAgICAvLyBpbiB0aGUgQ29kZUJsb2NrLiBUaGlzIGlzIGEgZ29vZCB0aW1l
IHRvIHBlcmZvcm0gYW4gZWFybHkgc2hyaW5rLCB3aGljaCBpcyBtb3JlCiAgICAgLy8gcG93ZXJm
dWwgdGhhbiBhIGxhdGUgb25lLiBJdCdzIHNhZmUgdG8gZG8gc28gYmVjYXVzZSB3ZSBoYXZlbid0
IGdlbmVyYXRlZCBhbnkgY29kZQpAQCAtMTEzLDI3ICsxMTMsNDIgQEAgaW5saW5lIGJvb2wgY29t
cGlsZShDb21waWxlTW9kZSBjb21waWxlTQogCiAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkp
CiAgICAgICAgIHZhbGlkYXRlKGRmZyk7CisgICAgCisgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5n
KGRmZyk7CisgICAgcGVyZm9ybVVuaWZpY2F0aW9uKGRmZyk7CisgICAgcGVyZm9ybVByZWRpY3Rp
b25JbmplY3Rpb24oZGZnKTsKKyAgICAKKyAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKKyAg
ICAgICAgdmFsaWRhdGUoZGZnKTsKKyAgICAKICAgICBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0
aW9uKGRmZyk7CiAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CiAgICAgcGVyZm9ybVN0cnVjdHVyZUNo
ZWNrSG9pc3RpbmcoZGZnKTsKKyAgICAKICAgICB1bnNpZ25lZCBjbnQgPSAxOwogICAgIGRmZy5t
X2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludE5vdENvbnZlcmdlZDsKICAgICBmb3IgKDs7ICsrY250
KSB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAg
ICBkYXRhTG9nRigiREZHIGJlZ2lubmluZyBvcHRpbWl6YXRpb24gZml4cG9pbnQgaXRlcmF0aW9u
ICMldS5cbiIsIGNudCk7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAK
ICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Db25z
dGFudEZvbGRpbmcoZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQXJndW1lbnRzU2lt
cGxpZmljYXRpb24oZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ0ZHU2ltcGxpZmlj
YXRpb24oZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ1NFKGRmZyk7CisgICAgICAg
IAogICAgICAgICBpZiAoIWNoYW5nZWQpCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCiAg
ICAgICAgIGRmZy5yZXNldEV4aXRTdGF0ZXMoKTsKICAgICAgICAgcGVyZm9ybUZpeHVwKGRmZyk7
CisgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgIH0KKyAgICAKICAgICBk
ZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7CiAgICAgcGVyZm9ybUNTRShk
ZmcpOworICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOyAvLyBUaGlzIHNob3VsZCB1c3Vh
bGx5IGJlIGEgbm8tb3Agc2luY2UgQ1NFIHJhcmVseSBkZXRocmVhZHMgdGhlIGdyYXBoLgogICAg
IGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgIGRhdGFMb2dGKCJERkcg
b3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBpbiAldSBpdGVyYXRpb25zLlxuIiwgY250
KTsKICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw2ICs1Myw4IEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEMKICAg
ICAsIG1fb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAs
IG1fbXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQogICAgICwgbV9maXhwb2ludFN0
YXRlKEJlZm9yZUZpeHBvaW50KQorICAgICwgbV9mb3JtKExvYWRTdG9yZSkKKyAgICAsIG1fdW5p
ZmljYXRpb25TdGF0ZShMb2NhbGx5VW5pZmllZCkKIHsKICAgICBBU1NFUlQobV9wcm9maWxlZEJs
b2NrKTsKIH0KQEAgLTE5NSw5ICsxOTcsMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzdHJ1Y3QoIiwgUmF3UG9p
bnRlcihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSwg
IiAtPiAiLCBSYXdQb2ludGVyKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3Ry
dWN0dXJlKSwgIikiKTsKICAgICBpZiAobm9kZS0+aGFzRnVuY3Rpb24oKSkgewogICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJmdW5jdGlvbigiLCBSYXdQb2ludGVyKG5vZGUtPmZ1bmN0aW9uKCkp
LCAiLCAiKTsKLSAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmluaGVyaXRzKCZKU0Z1bmN0
aW9uOjpzX2luZm8pKQotICAgICAgICAgICAgb3V0LnByaW50KEZ1bmN0aW9uRXhlY3V0YWJsZUR1
bXAoanNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpKS0+anNFeGVjdXRhYmxlKCkp
KTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobm9kZS0+ZnVuY3Rpb24oKS0+aW5oZXJpdHMo
JkpTRnVuY3Rpb246OnNfaW5mbykpIHsKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpKTsKKyAgICAgICAgICAgIGlm
IChmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Ijxob3N0IGZ1bmN0aW9uPiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91
dC5wcmludChGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKSkp
OworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG91dC5wcmludCgiPG5vdCBKU0Z1bmN0aW9u
PiIpOwogICAgICAgICBvdXQucHJpbnQoIikiKTsKICAgICB9CkBAIC0zNzcsMjIgKzM4MywyNCBA
QCB2b2lkIEdyYXBoOjpkZXJlZkNoaWxkcmVuKE5vZGUqIG9wKQogICAgIERPX1RPX0NISUxEUkVO
KG9wLCBkZXJlZik7CiB9CiAKLXZvaWQgR3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKCkKK3Zv
aWQgR3JhcGg6OmRldGhyZWFkKCkKIHsKLSAgICBBU1NFUlQobV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSA+PSAxKTsKLSAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgewotICAgICAg
ICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBtX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZv
ckFyZ3VtZW50KGFyZyk7Ci0gICAgICAgIGlmICghcHJvZmlsZSkKKyAgICBpZiAobV9mb3JtID09
IExvYWRTdG9yZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgRGV0aHJlYWRpbmciKTsKKyAgICAKKyAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IG1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBt
X2FyZ3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcm9maWxlLT5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKSk7Ci0gICAgICAgIAotI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJBcmd1bWVudCBbIiwg
YXJnLCAiXSBwcmVkaWN0aW9uOiAiLAotICAgICAgICAgICAgU3BlY3VsYXRpb25EdW1wKG1fYXJn
dW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsK
LSNlbmRpZgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6
ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAgICAgICAgTm9kZSogcGhpID0gYmxvY2stPnBoaXNb
cGhpSW5kZXhdOworICAgICAgICAgICAgcGhpLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICB9
CiAgICAgfQorICAgIAorICAgIG1fZm9ybSA9IExvYWRTdG9yZTsKIH0KIAogdm9pZCBHcmFwaDo6
aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpCkBAIC00MDgsNiArNDE2
LDggQEAgdm9pZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9jawogCiB2b2lkIEdy
YXBoOjpjb2xsZWN0R2FyYmFnZSgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdp
b24oIkRGRyBHYXJiYWdlIENvbGxlY3Rpb24iKTsKKyAgICAKICAgICAvLyBGaXJzdCByZXNldCB0
aGUgY291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewog
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQxNzIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw3ICs4MCw2MCBAQCBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAgICAgU3BlY3VsYXRl
SW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3csCiAgICAgU3BlY3VsYXRlSW50ZWdlcgogfTsK
KworLy8gRGVzY3JpYmVzIHRoZSBmb3JtIHlvdSBjYW4gZXhwZWN0IHRoZSBlbnRpcmUgZ3JhcGgg
dG8gYmUgaW4uCitlbnVtIEdyYXBoRm9ybSB7CisgICAgLy8gTG9hZFN0b3JlIGZvcm0gbWVhbnMg
dGhhdCBiYXNpYyBibG9ja3MgbWF5IGZyZWVseSB1c2UgR2V0TG9jYWwsIFNldExvY2FsLAorICAg
IC8vIEdldExvY2FsVW5saW5rZWQsIGFuZCBGbHVzaCBmb3IgYWNjZXNzaW5nIGxvY2FsIHZhcmlh
YmxlcyBhbmQgaW5kaWNhdGluZworICAgIC8vIHdoZXJlIHRoZWlyIGxpdmUgcmFuZ2VzIG91Z2h0
IHRvIGJlLiBMaXZlbmVzcyBpcyBpbXBsaWNpdCwgYXMgaXMgdGhlIGRhdGEKKyAgICAvLyBmbG93
IGJldHdlZW4gbG9jYWwgYWNjZXNzZXMuIEZvciBleGFtcGxlLCBMb2FkU3RvcmUgZm9ybSBnaXZl
cyBubyBlYXN5IHdheQorICAgIC8vIHRvIGRldGVybWluZSB3aGljaCBTZXRMb2NhbCdzIGZsb3cg
aW50IG8gYSBHZXRMb2NhbC4gQXMgd2VsbCwgTG9hZFN0b3JlCisgICAgLy8gZm9ybSBpbXBsaWVz
IG5vIHJlc3RyaWN0aW9ucyBvbiByZWR1bmRhbmN5OiB5b3UgY2FuIGZyZWVseSBlbWl0IG11bHRp
cGxlCisgICAgLy8gR2V0TG9jYWxzLCBvciBtdWx0aXBsZSBTZXRMb2NhbHMgKG9yIGFueSBjb21i
aW5hdGlvbiB0aGVyZW9mKSB0byB0aGUgc2FtZQorICAgIC8vIGxvY2FsIGluIHRoZSBzYW1lIGJs
b2NrLiBMb2FkU3RvcmUgZm9ybSBkb2VzIG5vdCByZXF1aXJlIGJhc2ljIGJsb2NrcyB0bworICAg
IC8vIGRlY2xhcmUgaG93IHRoZXkgYWZmZWN0IG9yIHVzZSBsb2NhbHMsIG90aGVyIHRoYW4gaW1w
bGljaXRseSBieSB1c2luZworICAgIC8vIHRoZSBsb2NhbCBvcHMuIEZpbmFsbHksIExvYWRTdG9y
ZSBhbGxvd3MgZmxleGliaWxpdHkgaW4gaG93IGxpdmVuZXNzIG9mCisgICAgLy8gbG9jYWxzIGlz
IGV4dGVuZGVkOyBmb3IgZXhhbXBsZSB5b3UgY2FuIHJlcGxhY2UgYSBHZXRMb2NhbCB3aXRoIGEg
UGhhbnRvbQorICAgIC8vIGFuZCBzbyBsb25nIGFzIHRoZSBQaGFudG9tIHJldGFpbnMgdGhlIEdl
dExvY2FsJ3MgY2hpbGRyZW4gKGkuZS4gdGhlIFBoaQorICAgIC8vIG1vc3QgbGlrZWx5KSB0aGVu
IGl0IGltcGxpZXMgdGhhdCB0aGUgbG9jYWwgaXMgc3RpbGwgbGl2ZSBidXQgdGhhdCBpdCBuZWVk
CisgICAgLy8gbm90IGJlIHN0b3JlZCB0byB0aGUgc3RhY2sgbmVjZXNzYXJpbHkuIFRoaXMgaW1w
bGllcyB0aGF0IFBoYW50b20gY2FuCisgICAgLy8gcmVmZXJlbmNlIG5vZGVzIHRoYXQgaGF2ZSBu
byByZXN1bHQsIGFzIGxvbmcgYXMgdGhvc2Ugbm9kZXMgYXJlIHZhbGlkCisgICAgLy8gR2V0TG9j
YWwgY2hpbGRyZW4gKGkuZS4gUGhpLCBTZXRMb2NhbCwgU2V0QXJndW1lbnQpLgorICAgIC8vCisg
ICAgLy8gTG9hZFN0b3JlIGZvcm0gYWxzbyBpbXBsaWVzIHRoYXQgUGhpcyB0aGVtc2VsdmVzIGNh
biBoYXZlIGFyYml0cmFyeQorICAgIC8vIGNoaWxkcmVuLiBQaGkgY2hpbGRyZW4gY291bGQgZXZl
biBiZSBkYW5nbGluZywgYW5kIHNob3VsZCBub3QgYmUgcmVsaWVkCisgICAgLy8gdXBvbi4KKyAg
ICAvLworICAgIC8vIExvYWRTdG9yZSBmb3JtIGlzIHN1aXRhYmxlIGZvciBDRkcgdHJhbnNmb3Jt
YXRpb25zLCBhcyB3ZWxsIGFzIHN0cmVuZ3RoCisgICAgLy8gcmVkdWN0aW9uLCBmb2xkaW5nLCBh
bmQgQ1NFLgorICAgIExvYWRTdG9yZSwKKyAgICAKKyAgICAvLyBUaHJlYWRlZENQUyBmb3JtIG1l
YW5zIHRoYXQgYmFzaWMgYmxvY2tzIGxpc3QgdXAtZnJvbnQgd2hpY2ggbG9jYWxzIHRoZXkKKyAg
ICAvLyBleHBlY3QgdG8gYmUgbGl2ZSBhdCB0aGUgaGVhZCwgYW5kIHdoaWNoIGxvY2FscyB0aGV5
IG1ha2UgYXZhaWxhYmxlIGF0IHRoZQorICAgIC8vIHRhaWwuIFRocmVhZGVkQ1BTIGZvcm0gYWxz
byBpbXBsaWVzIHRoYXQ6CisgICAgLy8KKyAgICAvLyAtIEdldExvY2FscyBhbmQgU2V0TG9jYWxz
IHRvIHVuY2FwdHVyZWQgdmFyaWFibGVzIGFyZSBub3QgcmVkdW5kYW50IHdpdGhpbgorICAgIC8v
ICAgYSBiYXNpYyBibG9jay4KKyAgICAvLworICAgIC8vIC0gQWxsIEdldExvY2FscyBhbmQgRmx1
c2hlcyBhcmUgbGlua2VkIGRpcmVjdGx5IHRvIHRoZSBsYXN0IGFjY2VzcyBwb2ludAorICAgIC8v
ICAgb2YgdGhlIHZhcmlhYmxlLCB3aGljaCBtdXN0IG5vdCBiZSBhbm90aGVyIEdldExvY2FsIGlm
IHRoZSB2YXJpYWJsZSBpcworICAgIC8vICAgdW5jYXB0dXJlZC4KKyAgICAvLworICAgIC8vIC0g
UGhhbnRvbShQaGkpIGlzIG5vdCBsZWdhbCwgYnV0IFBoYW50b21Mb2NhbCBpcy4KKyAgICAvLwor
ICAgIC8vIFRocmVhZGVkQ1BTIGZvcm0gaXMgc3VpdGFibGUgZm9yIGRhdGEgZmxvdyBhbmFseXNp
cyAoQ0ZBLCBwcmVkaWN0aW9uCisgICAgLy8gcHJvcGFnYXRpb24pLCByZWdpc3RlciBhbGxvY2F0
aW9uLCBhbmQgY29kZSBnZW5lcmF0aW9uLgorICAgIFRocmVhZGVkQ1BTCit9OworCisvLyBEZXNj
cmliZXMgdGhlIHN0YXRlIG9mIHRoZSBVbmlvbkZpbmQgc3RydWN0dXJlIG9mIFZhcmlhYmxlQWNj
ZXNzRGF0YSdzLgorZW51bSBVbmlmaWNhdGlvblN0YXRlIHsKKyAgICAvLyBCYXNpY0Jsb2NrLWxv
Y2FsIGFjY2Vzc2VzIHRvIHZhcmlhYmxlcyBhcmUgYXBwcm9wcmlhdGVseSB1bmlmaWVkIHdpdGgg
ZWFjaCBvdGhlci4KKyAgICBMb2NhbGx5VW5pZmllZCwKICAgICAKKyAgICAvLyBVbmlmaWNhdGlv
biBoYXMgYmVlbiBwZXJmb3JtZWQgZ2xvYmFsbHkuCisgICAgR2xvYmFsbHlVbmlmaWVkCit9Owog
CiAvLwogLy8gPT09IEdyYXBoID09PQpAQCAtMTY3LDYgKzIyMCw0MCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjbGVhckFuZERlcmVmQ2hpbGQyKE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxk
KG5vZGUsIDEpOyB9CiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQzKE5vZGUqIG5vZGUpIHsg
Y2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDIpOyB9CiAgICAgCisgICAgdm9pZCBwZXJmb3JtU3Vi
c3RpdHV0aW9uKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBib29sIHNob3VsZEdlbmVyYXRl
ID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKKyAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBO
b2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5v
ZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5u
dW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0
dXRpb25Gb3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRn
ZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAg
cGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIHNob3Vs
ZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUt
PmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShFZGdlJiBjaGlsZCwgYm9v
bCBhZGRSZWYpCisgICAgeworICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG9wZXJhbmQgaXMgYWN0
dWFsbHkgdW51c2VkLgorICAgICAgICBpZiAoIWNoaWxkKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IHJlcGxhY2VtZW50Lgor
ICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IGNoaWxkLT5yZXBsYWNlbWVudDsKKyAgICAgICAg
aWYgKCFyZXBsYWNlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IGNoaWxkLnNldE5vZGUocmVwbGFjZW1lbnQpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlcmUg
aXMgZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQg
ZG9lcyBub3QKKyAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgorICAgICAgICBBU1NFUlQo
IWNoaWxkLT5yZXBsYWNlbWVudCk7CisgICAgICAgIAorICAgICAgICBpZiAoYWRkUmVmKQorICAg
ICAgICAgICAgcmVmKGNoaWxkKTsKKyAgICB9CisgICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQURE
X05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXND
b21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAogICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJh
bXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFkZE5vZGUoUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVu
TW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQ
YXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAogICAgIHsgXApAQCAtMTgzLDYgKzI3MCw4IEBAIHB1
YmxpYzoKICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BRERf
Tk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0FERF9OT0RFCiAKKyAgICB2b2lkIGRldGhyZWFkKCk7
CisgICAgCiAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSd2ZSBtb2RpZmllZCB0aGUgcmVmZXJlbmNl
IGNvdW50cyBvZiBub2RlcyB0aGF0IGRlYWwgd2l0aAogICAgIC8vIGxvY2FsIHZhcmlhYmxlcy4g
VGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBsb2NhbCB2YXJpYWJsZSByZWZlcmVuY2VzIGNhbiBm
b3JtCiAgICAgLy8gY3ljbGVzLCBhbmQgaGVuY2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzIG5vdCBl
bm91Z2guIFRoaXMgd2lsbCByZXNldCB0aGUKQEAgLTM1MSw4ICs0NDAsNiBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKICAgICAKLSAgICB2b2lk
IHByZWRpY3RBcmd1bWVudFR5cGVzKCk7Ci0gICAgCiAgICAgU3RydWN0dXJlU2V0KiBhZGRTdHJ1
Y3R1cmVTZXQoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQpCiAgICAgewogICAgICAg
ICBBU1NFUlQoc3RydWN0dXJlU2V0LnNpemUoKSk7CkBAIC03MTgsNiArODA1LDggQEAgcHVibGlj
OgogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG1fbXVzdEhhbmRsZVZhbHVlczsKICAgICAKICAgICBP
cHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1fZml4cG9pbnRTdGF0ZTsKKyAgICBHcmFwaEZvcm0g
bV9mb3JtOworICAgIFVuaWZpY2F0aW9uU3RhdGUgbV91bmlmaWNhdGlvblN0YXRlOwogcHJpdmF0
ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+
JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3Nvcklu
ZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDE3
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzA0LDYgKzMwNCwyMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0g
fk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1BoYW50
b21Mb2NhbCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9vcCA9PSBQaGFudG9tICYmIChjaGls
ZDEoKS0+b3AoKSA9PSBQaGkgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0TG9jYWwgfHwgY2hpbGQx
KCktPm9wKCkgPT0gU2V0QXJndW1lbnQpKTsKKyAgICAgICAgbV9vcCA9IFBoYW50b21Mb2NhbDsK
KyAgICAgICAgbV9vcEluZm8gPSBjaGlsZDEoKS0+bV9vcEluZm87IC8vIENvcHkgdGhlIHZhcmlh
YmxlQWNjZXNzRGF0YS4KKyAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY29udmVydFRvR2V0TG9jYWwoVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSwgTm9kZSogcGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0TG9j
YWxVbmxpbmtlZCk7CisgICAgICAgIG1fb3AgPSBHZXRMb2NhbDsKKyAgICAgICAgbV9vcEluZm8g
PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YXJpYWJsZSk7CisgICAgICAgIGNoaWxkcmVuLnNl
dENoaWxkMShFZGdlKHBoaSkpOworICAgIH0KKyAgICAKICAgICBKU0NlbGwqIHdlYWtDb25zdGFu
dCgpCiAgICAgewogICAgICAgICBBU1NFUlQob3AoKSA9PSBXZWFrSlNDb25zdGFudCk7CkBAIC0z
NTgsNiArMzc0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIFBoaToKICAgICAgICAg
Y2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgY2FzZSBQaGFu
dG9tTG9jYWw6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQp
IFwKICAgICBtYWNybyhQaGksIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBc
CiAgICAgbWFjcm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwK
KyAgICBtYWNybyhQaGFudG9tTG9jYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4
aXQpIFwKICAgICBcCiAgICAgLyogR2V0IHRoZSB2YWx1ZSBvZiBhIGxvY2FsIHZhcmlhYmxlLCB3
aXRob3V0IGxpbmtpbmcgaW50byB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhICovXAogICAgIC8qIG5l
dHdvcmsuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IgdmFyaWFibGUgYWNjZXNzZXMgd2hvc2UgcHJl
ZGljdGlvbnMgb3JpZ2luYXRlZCAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgUHJlZGljdGlvbkluamVjdGlv
blBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAicHJlZGljdGlvbiBp
bmplY3Rpb24iKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV91bmlmaWNhdGlvblN0YXRlID09IEdsb2JhbGx5VW5pZmllZCk7CisgICAg
ICAgIAorICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSA+PSAxKTsK
KyAgICAgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihj
b2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAgICAgICAgICAgIFZhbHVl
UHJvZmlsZSogcHJvZmlsZSA9IHByb2ZpbGVkQmxvY2soKS0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoYXJnKTsKKyAgICAgICAgICAgIGlmICghcHJvZmlsZSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmdd
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24oKSk7CisgICAgICAgICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0Up
CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJBcmd1bWVudCBbIiwgYXJn
LCAiXSBwcmVkaWN0aW9uOiAiLAorICAgICAgICAgICAgICAgIFNwZWN1bGF0aW9uRHVtcChtX2Fy
Z3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSwgIlxuIik7
CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29k
ZUJlZ2luICE9IG1fZ3JhcGgubV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgu
bV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCgKKyAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIEFTU0VSVChub2RlLT5oYXNMb2NhbCgpKTsKKyAgICAgICAgICAgICAgICBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdCgKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXNbaV0pKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorfTsKKworYm9vbCBwZXJmb3JtUHJlZGljdGlvbkluamVjdGlvbihHcmFwaCYgZ3JhcGgp
Cit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBQcmVkaWN0aW9uIElu
amVjdGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2Vf
aAorI2RlZmluZSBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gUHJlZGljdGlvbiBJbmplY3Rpb246
CisvLworLy8gVGFrZXMgbWlzY2VsbGFuZW91cyBkYXRhIGFib3V0IHZhcmlhYmxlIHR5cGUgcHJl
ZGljdGlvbnMgYW5kIGluamVjdHMgdGhlbS4KKy8vIFRoaXMgaW5jbHVkZXMgYXJndW1lbnQgcHJl
ZGljdGlvbnMgYW5kIE9TUiBlbnRyeSBwcmVkaWN0aW9ucy4KKworYm9vbCBwZXJmb3JtUHJlZGlj
dGlvbkluamVjdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQxNzIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDkgQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgcnVuKCkKICAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJl
YWRlZENQUyk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBH
bG9iYWxseVVuaWZpZWQpOworICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCiAgICAgICAgIG1fY291bnQgPSAwOwogI2VuZGlmCkBAIC04MTIsNiArODE1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAgICAgICAgY2FzZSBO
b3A6CiAgICAgICAgIGNhc2UgQ291bnRFeGVjdXRpb246CisgICAgICAgIGNhc2UgUGhhbnRvbUxv
Y2FsOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMYXN0
Tm9kZVR5cGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0MTcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMDcs
NiArNTAwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICB9CiAKICAgICBjYXNlIFBoYW50b206CisgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAg
IC8vIFRoaXMgaXMgYSBuby1vcC4KICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQxNzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBi
b29sIHJ1bigpCiAgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFk
ZWRDUFMpOworICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3Zh
cmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKICAg
ICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHVW5pZmlj
YXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhh
c2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgVW5pZmljYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJs
aWM6CisgICAgVW5pZmljYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJ1bmlmaWNhdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigp
CisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOwor
ICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gTG9jYWxseVVuaWZp
ZWQpOworICAgICAgICAKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgYWxsIFBoaSBmdW5jdGlvbnMg
YXJlIHVuaWZpZWQuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBB
U1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsK
KyAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IDA7IGNoaWxkSWR4IDwgQWRqYWNl
bmN5TGlzdDo6U2l6ZTsgKytjaGlsZElkeCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXBo
aS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJZHgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBwaGktPnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT51bmlmeSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHBoaS0+Y2hp
bGRyZW4uY2hpbGQoY2hpbGRJZHgpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBF
bnN1cmUgdGhhdCBhbGwgcHJlZGljdGlvbnMgYXJlIGZpeGVkIHVwIGJhc2VkIG9uIHRoZSB1bmlm
aWNhdGlvbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJp
YWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogZGF0YSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOworICAgICAgICAg
ICAgZGF0YS0+ZmluZCgpLT5wcmVkaWN0KGRhdGEtPm5vblVuaWZpZWRQcmVkaWN0aW9uKCkpOwor
ICAgICAgICAgICAgZGF0YS0+ZmluZCgpLT5tZXJnZUlzQ2FwdHVyZWQoZGF0YS0+aXNDYXB0dXJl
ZCgpKTsKKyAgICAgICAgICAgIGRhdGEtPmZpbmQoKS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nRmFpbGVkKGRhdGEtPnN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV91bmlmaWNhdGlvblN0YXRlID0gR2xvYmFs
bHlVbmlmaWVkOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZv
cm1VbmlmaWNhdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIkRGRyBVbmlmaWNhdGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxV
bmlmaWNhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHVW5pZmljYXRpb25QaGFzZV9oCisjZGVmaW5lIERGR1VuaWZpY2F0
aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsK
KworLy8gVW5pZmljYXRpb246CisvLworLy8gRXhhbWluZXMgYWxsIFBoaSBmdW5jdGlvbnMgYW5k
IGVuc3VyZXMgdGhhdCB0aGUgdmFyaWFibGUgYWNjZXNzIGRhdGFzIGFyZQorLy8gdW5pZmllZC4g
VGhpcyBjcmVhdGVzIG91ciAibGl2ZS1yYW5nZSBzcGxpdCIgdmlldyBvZiB2YXJpYWJsZXMuCisK
K2Jvb2wgcGVyZm9ybVVuaWZpY2F0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVW5pZmlj
YXRpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCShyZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytqKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFBoaSBjaGlsZHJlbiBpbiBMb2FkU3RvcmUgZm9ybSBhcmUgaW52YWxpZC4KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiBibG9jay0+
aXNQaGlJbmRleChpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5j
aGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xMDksMTAgKzExMywyMCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBJJ20gYSBGbHVzaCwgUGhhbnRvbSwgR2V0TG9j
YWwsIG9yIFBoaSwgbXkgY2hpbGRyZW4gc2hvdWxkIGhhc1Jlc3VsdCgpLgogICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBG
bHVzaDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tOgogICAgICAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBMb2NhbGx5
VW5pZmllZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgIWopCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVk
Z2UtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMz
LDcgKzE0NywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5h
ZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5pc1BoaUluZGV4KGkpKQogICAg
ICAgICAgICAgICAgICAgICBwaGlzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwotICAgICAgICAgICAg
ICAgIFZfRVFVQUwoKG5vZGUpLCBteVJlZkNvdW50cy5nZXQobm9kZSksIG5vZGUtPmFkanVzdGVk
UmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVh
ZGVkQ1BTIHx8ICFub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKKyAgICAgICAgICAgICAg
ICAgICAgVl9FUVVBTCgobm9kZSksIG15UmVmQ291bnRzLmdldChub2RlKSwgbm9kZS0+YWRqdXN0
ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlKSwgbXlSZWZDb3VudHMuZ2V0KG5vZGUpID8gbm9kZS0+YWRqdXN0ZWRS
ZWZDb3VudCgpIDogdHJ1ZSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAg
ICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWVkZ2UpCkBAIC0xNDgsNiArMTY1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgpOwogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gUGhpIGNoaWxkcmVuIGluIExvYWRTdG9yZSBmb3JtIGFy
ZSBpbnZhbGlkLgorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9h
ZFN0b3JlICYmIGJsb2NrLT5pc1BoaUluZGV4KGkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBFZGdl
IGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAo
IWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE4MywxNyArMjA0
LDI0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQ
aGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRvICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNl
c3NvcnMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2
YWlsYWJsZS4KICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJ
bmRleCwgQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHJldk5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEZsdXNoOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBwcmV2Tm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFy
Z3VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3Ao
KSA9PSBGbHVzaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUt
Pm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBw
cmV2Tm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9
PSBTZXRBcmd1bWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5v
cCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUgPT0gZWRn
ZS5ub2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTQsMTAgKzI0MiwxOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGFyZ3Vt
ZW50VG9PcGVyYW5kKGkpKSwgYmxvY2tJbmRleCksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmFy
Z3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSktPmhhc1Zhcmlh
YmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0g
VGhyZWFkZWRDUFMpCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KGFyZ3VtZW50VG9PcGVyYW5kKGkpKSwgYmxvY2tJbmRleCksICFibG9j
ay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
YXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5hcmd1bWVudChpKSA9IG5vdFNldDsK
ICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5hcmd1bWVudChpKSA9IG5vdFNldDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpKSwgYmxvY2tJbmRleCks
ICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhl
YWQubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCisgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCBibG9ja0luZGV4KSwgIWJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5s
b2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworCiAgICAgICAgICAgICAgICAgZ2V0
TG9jYWxQb3NpdGlvbnMubG9jYWwoaSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgc2V0TG9j
YWxQb3NpdGlvbnMubG9jYWwoaSkgPSBub3RTZXQ7CiAgICAgICAgICAgICB9CkBAIC0yMzEsNiAr
MjY3LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlLCBlZGdlKSwgbm9kZXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IExvYWRTdG9yZSAmJiAhaikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgIXBo
aXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQpAQCAtMjM5LDcgKzI4Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIEdl
dExvY2FsOgogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2tJbmRleCksIGdldExvY2FsUG9zaXRp
b25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQorICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrSW5kZXgpLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGdldExv
Y2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgpAQCAtMjU2LDYgKzMw
NSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKICAgICAgICAgICAgICAgICBjaGVja09wZXJhbmQoCiAgICAgICAgICAgICAgICAg
ICAgIGJsb2NrSW5kZXgsIGdldExvY2FsUG9zaXRpb25zLCBzZXRMb2NhbFBvc2l0aW9ucywgYXJn
dW1lbnRUb09wZXJhbmQoaSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
aXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTQxNzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFs
UmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgs
MjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG5lZWRzTmV3TGluZSA9IHRydWU7CiAjZW5k
aWYKICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgp
IHx8IG5vZGUtPm9wKCkgPT0gUGhpIHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAg
ICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoIW5vZGUtPmNoaWxkMSgpLT5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGls
ZHJlbiwgdGhlbgogICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVy
IGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxNDE3MjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjEyLDcgKzIxMiwxMyBAQCB2b2lkIEpTVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uCiAgICAgICAgIG91dC5wcmludGYoIkRvdWJsZTogJTA4eDolMDh4LCAlbGYiLCB1LmFzVHdv
SW50MzJzWzFdLCB1LmFzVHdvSW50MzJzWzBdLCBhc0RvdWJsZSgpKTsKICNlbmRpZgogICAgIH0g
ZWxzZSBpZiAoaXNDZWxsKCkpIHsKLSAgICAgICAgaWYgKGFzQ2VsbCgpLT5pbmhlcml0cygmU3Ry
dWN0dXJlOjpzX2luZm8pKSB7CisgICAgICAgIGlmIChhc0NlbGwoKS0+aW5oZXJpdHMoJkpTU3Ry
aW5nOjpzX2luZm8pKSB7CisgICAgICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0PEpT
U3RyaW5nKj4oYXNDZWxsKCkpOworICAgICAgICAgICAgb3V0LnByaW50KCJTdHJpbmc6ICIpOwor
ICAgICAgICAgICAgaWYgKHN0cmluZy0+aXNSb3BlKCkpCisgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCIocm9wZSkgIik7CisgICAgICAgICAgICBvdXQucHJpbnQoc3RyaW5nLT50cnlHZXRWYWx1
ZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChhc0NlbGwoKS0+aW5oZXJpdHMoJlN0cnVjdHVyZTo6
c19pbmZvKSkgewogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0Nhc3Q8U3Ry
dWN0dXJlKj4oYXNDZWxsKCkpOwogICAgICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAg
ICAgICJTdHJ1Y3R1cmU6ICIsIFJhd1BvaW50ZXIoc3RydWN0dXJlKSwgIjogIiwgc3RydWN0dXJl
LT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAxNDE3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNiArMTY2LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHByb3RlY3RlZDoKKyAgICAgICAgZnJpZW5kIGNsYXNz
IEpTVmFsdWU7CisgICAgICAgIAogICAgICAgICBib29sIGlzUm9wZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWUuaXNOdWxsKCk7IH0KICAgICAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVy
biBtX2ZsYWdzICYgSXM4Qml0OyB9CiAgICAgICAgIHZvaWQgc2V0SXM4Qml0KGJvb2wgZmxhZykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187166</attachid>
            <date>2013-02-07 13:26:46 -0800</date>
            <delta_ts>2013-02-07 14:53:03 -0800</delta_ts>
            <desc>it might be done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>128677</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDIxNjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBACiAJCTBGOTZFQkIzMTY2NzZF
RjYwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NkVCQjExNjY3NkVGNDAwOEJBREUzIC8qIENv
ZGVCbG9ja1dpdGhKSVRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY5NzQ5NzExNjg3QURFNDAwQTRGRjZBIC8qIEpTQ2VsbElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTc0OTZG
MTY4N0FERTIwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5ODIwNjAxNkJGRTM4MTAwMjQwRDAyIC8q
IFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjk4MjA1RDE2QkZFMzdGMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJn
ZXRzLmNwcCAqLzsgfTsKLQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1w
VGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oICovOyB9Owor
ICAgICAgICAgICAgICAgIDBGOTgyMDYxMTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRh
cmdldHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTgyMDVFMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlEMzM3MDE2NURCQjkw
MDA1QUQzODcgLyogRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzZFMTY1REJCOEQwMDVBRDM4NyAvKiBEaXNhc3NlbWJs
ZXIuY3BwICovOyB9OwogCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjlGQzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAgKi87IH07CiAJCTBGOUZDOEM0MTRFMUI2MDAwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5
SWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjlGQzhDMDE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMzQsNiArMjM0
LDEyIEBACiAJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNDE0
OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovOyB9OwogCQkwRkJDMEFFODE0
OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdF
eGl0UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5OThGMDA0
ODEzMTUgLyogQ29kZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGQkUwRjcyMTZDMURCMDMwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQkUwRjZCMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNw
cCAqLzsgfTsKKwkJMEZCRTBGNzMxNkMxREIwNTAwODJDNUU4IC8qIERGR0NQU1JldGhyZWFkaW5n
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QkUwRjZDMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCRTBGNzQxNkMx
REIwOTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJFMEY2RDE2QzFEQjAxMDA4
MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEZCRTBG
NzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRTBGNkUxNkMxREIw
MTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQkUwRjc2MTZDMURCMEYwMDgy
QzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlm
aWNhdGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEZCRTBGNzcxNkMxREIxMjAwODJDNUU4IC8qIERG
R1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQkUwRjcwMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZD
MDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBE
RkdPU1JFeGl0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZDMDk3NkQxNDY4QUI0RTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3NkMxNDY4
QUI0QTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzA5NzZFMTQ2OEFCNTEwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDMDk3NkIxNDY4QUI0QTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVs
cGVycy5jcHAgKi87IH07CkBAIC0xMTE5LDYgKzExMjUsMTIgQEAKIAkJMEZCQzBBRTQxNDk2QzdD
MTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERGR0V4aXRQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGR0V4aXRQcm9maWxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2lu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQ
U1JldGhyZWFkaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ1BTUmV0aHJlYWRp
bmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQkUwRjZDMTZDMURC
MDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQkUw
RjZEMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTggLyog
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1ByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkJF
MEY2RjE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVbmlmaWNhdGlvblBoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZCRTBGNzAxNkMxREIwMTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVW5pZmljYXRpb25QaGFzZS5oOyBw
YXRoID0gZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZDMDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdC5oOyBwYXRoID0gZGZnL0RGR09TUkV4
aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDk3NkIxNDY4QUI0QTAwQ0Yy
NDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBwYXRoID0gZGZnL0RGR0Fzc2VtYmx5
SGVscGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzZDMTQ2OEFC
NEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQXNzZW1ibHlIZWxwZXJzLmg7IHBhdGggPSBkZmcvREZHQXNzZW1ibHlI
ZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjA0LDYgKzI2MTYsOCBA
QAogCQkJCTBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAqLywKIAkJCQkw
RjNCM0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwICov
LAogCQkJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5oICovLAorCQkJCTBGQkUwRjZCMTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGlu
Z1BoYXNlLmNwcCAqLywKKwkJCQkwRkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5oICovLAogCQkJCTBGRkZDOTREMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdD
U0VQaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBo
YXNlLmggKi8sCiAJCQkJMEZGNDI3NjExNTkxQTFDOTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxl
ci5jcHAgKi8sCkBAIC0yNjUyLDYgKzI2NjYsOCBAQAogCQkJCTBGRUZDOUE4MTY4MUEzQjAwMDU2
N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8sCiAJCQkJMEZGRkM5NEYxNEVG
OTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0RUY5MDk1MDBD
NzI1MzIgLyogREZHUGhhc2UuaCAqLywKKwkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTggLyog
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRkJFMEY2RTE2QzFEQjAx
MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEZGRkM5
NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCAq
LywKIAkJCQkwRkZGQzk1MjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0
ZXJCYW5rLmggKi8sCkBAIC0yNjcxLDYgKzI2ODcsOCBAQAogCQkJCTBGNjM5NDNEMTVDNzVGMTQw
MDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCAqLywKIAkJCQkwRkMw
OTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0
NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJMEZCRTBGNkYxNkMxREIwMTAw
ODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGQkUwRjcwMTZDMURC
MDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggKi8sCiAJCQkJMEYzQjNBMjkxNTQ3
NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCAqLywKIAkJCQkwRjNCM0EyQTE1NDc0RkY0
MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLywKIAkJCQkwRjJCREMzRjE1MjI4MDE3MDBDRDg5
MTAgLyogREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggKi8sCkBAIC0zMzMwLDYgKzMzNDgsOSBA
QAogCQkJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODY3MDRCNDMxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJTeW50YXhDaGVja2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lz
ZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkJFMEY3MzE2QzFEQjA1MDA4MkM1
RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCRTBG
NzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZCRTBGNzcxNkMxREIxMjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzk2NSw2ICszOTg2LDkgQEAKIAkJCQk4NjcwNEI4
OTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODY3MDRCNDIxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJTeW50YXhDaGVja2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOTgyMDYwMTZCRkUzODEwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdl
dHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJDNUU4IC8qIERG
R0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZCRTBGNzQxNkMx
REIwOTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkJFMEY3NjE2QzFEQjBGMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCBzdHJ1
Y3QgT3BlcmFuZFZhbHVlVHJhaXRzIHsKICAgICBzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IFQmIHZh
bHVlLCBQcmludFN0cmVhbSYgb3V0KSB7IHZhbHVlLmR1bXAob3V0KTsgfQogfTsKIAorZW51bSBP
cGVyYW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07CisKIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxUPiA+CiBj
bGFzcyBPcGVyYW5kcyB7CiBwdWJsaWM6CkBAIC02Niw2ICs2OCwyOCBAQCBwdWJsaWM6CiAgICAg
VCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQogICAgIGNvbnN0
IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KICAg
ICAKKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBzaXplX3Qgc2l6
ZUZvcigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRP
cGVyYW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mQXJndW1lbnRzKCk7CisgICAgICAg
IHJldHVybiBudW1iZXJPZkxvY2FscygpOworICAgIH0KKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2lu
ZCBvcGVyYW5kS2luZD4KKyAgICBUJiBhdEZvcihzaXplX3QgaWR4KQorICAgIHsKKyAgICAgICAg
aWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBh
cmd1bWVudChpZHgpOworICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICB9CisgICAgdGVt
cGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CisgICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90
IGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9w
ZXJhbmQpCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4KTsKKyAgICAgICAgcmV0dXJu
IGxvY2FsKGlkeCk7CisgICAgfQorICAgIAogICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBz
aXplKQogICAgIHsKICAgICAgICAgaWYgKHNpemUgPD0gbV9sb2NhbHMuc2l6ZSgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZp
c2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzg3LDYgKzE3ODcsNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToK
ICAgICBjYXNlIEZsdXNoOgorICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBub2RlLT5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTE5MTMs
NiArMTkxNCw3IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICBj
YXNlIFNldEFyZ3VtZW50OgorICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgY2Fz
ZSBGbHVzaDoKICAgICAgICAgICAgIC8vIFRoZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZy
b20gaGVhZCB0byB0YWlsLgogICAgICAgICAgICAgc291cmNlID0gaW5WYXJpYWJsZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMTQyMTYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRl
ICJERkdDb21tb24uaCIKICNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb25BbGlnbmVkLmg+CiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0xOTcsNiArMTk4LDkgQEAgdm9pZCog
QWxsb2NhdG9yPFQ+OjphbGxvY2F0ZVNsb3coKQogICAgIEFTU0VSVCghbV9mcmVlTGlzdEhlYWQp
OwogICAgIEFTU0VSVCghbV9idW1wUmVtYWluaW5nKTsKICAgICAKKyAgICBpZiAobG9nQ29tcGls
YXRpb25DaGFuZ2VzKCkpCisgICAgICAgIGRhdGFMb2coIkFsbG9jYXRpbmcgYW5vdGhlciBhbGxv
Y2F0b3IgcmVnaW9uLlxuIik7CisgICAgCiAgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9j
YXRpb24gPSBQYWdlQWxsb2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKFJlZ2lvbjo6c2l6ZSgpLCBS
ZWdpb246OnNpemUoKSwgT1NBbGxvY2F0b3I6OkpTR0NIZWFwUGFnZXMpOwogICAgIGlmICghc3Rh
dGljX2Nhc3Q8Ym9vbD4oYWxsb2NhdGlvbikpCiAgICAgICAgIENSQVNIKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0MjE2MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAg
ICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAgICAgY2FzZSBQaGk6IC8qIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4NTU1ICovIHsKICAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZh
cmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC01MDcsNiArNTA3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1lbnRzTGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+cmVmKCk7IC8vIFRoaXMgaXMgYSBtdXN0LWdlbmVyYXRlIG5vZGUuCiAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAtLWlu
ZGV4SW5CbG9jazsgLy8gRm9yY2UgcmVjb25zaWRlcmF0aW9uIG9mIHRoaXMgb3Agbm9ldyB0aGF0
IGl0J3MgYSBHZXRNeUFyZ3VtZW50c0xlbmd0aC4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC02MzUsOCArNjM2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGluc2VydGlvblNldC5l
eGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGNoYW5nZWQp
Ci0gICAgICAgICAgICBtX2dyYXBoLmNvbGxlY3RHYXJiYWdlKCk7CisgICAgICAgIGlmIChjaGFu
Z2VkKSB7CisgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CisgICAgICAgICAgICBtX2dy
YXBoLm1fZm9ybSA9IExvYWRTdG9yZTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0
dXJuIGNoYW5nZWQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTQyMTYyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZp
bmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBl
UGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAg
dGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogQmFzaWNCbG9jazo6YXBw
ZW5kTm9kZShHcmFwaCYgZ3JhcGgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJl
Zk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29t
bWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9z
dCBpbmxpbmUgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9kZShHcmFwaCYgZ3JhcGgsIFJlZkNo
aWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVj
dWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwK
ICAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZShyZWZDaGlsZHJlbk1vZGUsIHJl
Zk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAogICAgICAgICBh
cHBlbmQocmVzdWx0KTsgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0MjE2MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODks
NjQgKzI4OSwzMyBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKTsKICAgICAgICAgYm9vbCBpc0NhcHR1
cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1lKCkp
OwogICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBoYXMgdHdvIGdvYWxzOiAxKSBsaW5rIHRvZ2V0
aGVyIHZhcmlhYmxlIGFjY2VzcyBkYXRhcywgYW5kIDIpCisgICAgICAgIC8vIHRyeSB0byBhdm9p
ZCBjcmVhdGluZyByZWR1bmRhbnQgR2V0TG9jYWxzLiAoMSkgaXMgcmVxdWlyZWQgZm9yCisgICAg
ICAgIC8vIGNvcnJlY3RuZXNzIC0gbm8gb3RoZXIgcGhhc2Ugd2lsbCBlbnN1cmUgdGhhdCBibG9j
ay1sb2NhbCB2YXJpYWJsZQorICAgICAgICAvLyBhY2Nlc3MgZGF0YSB1bmlmaWNhdGlvbiBpcyBk
b25lIGNvcnJlY3RseS4gKDIpIGlzIHB1cmVseSBvcHBvcnR1bmlzdGljCisgICAgICAgIC8vIGFu
ZCBpcyBtZWFudCBhcyBhbiBjb21waWxlLXRpbWUgb3B0aW1pemF0aW9uIG9ubHkuCisgICAgICAg
IAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOworICAgICAgICAKICAgICAg
ICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEZsdXNoKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gVHdvIHBvc3NpYmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sgd2Fu
dHMgdGhlIGxvY2FsIHRvIGJlIGxpdmUKLSAgICAgICAgICAgICAgICAvLyBidXQgaGFzIG5vdCBs
b2FkZWQgaXRzIHZhbHVlLCBvciBpdCBoYXMgbG9hZGVkIGl0cyB2YWx1ZSwgaW4KLSAgICAgICAg
ICAgICAgICAvLyB3aGljaCBjYXNlIHdlJ3JlIGRvbmUuCi0gICAgICAgICAgICAgICAgbm9kZSA9
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBQaGkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFk
ZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
b3BlcmFuZCkgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkg
PT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUlzQ2Fw
dHVyZWQoaXNDYXB0dXJlZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5vcCgpICE9IEZsdXNoKTsKLQotICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChpc0NhcHR1cmVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2Ugd2lzaCB0byB1
c2UgdGhlIHNhbWUgdmFyaWFibGUgYWNjZXNzIGRhdGEgYXMgdGhlIHByZXZpb3VzIGFjY2VzcywK
LSAgICAgICAgICAgICAgICAvLyBidXQgZm9yIGFsbCBvdGhlciBwdXJwb3NlcyB3ZSB3YW50IHRv
IGlzc3VlIGEgbG9hZCBzaW5jZSBmb3IgYWxsIHdlCi0gICAgICAgICAgICAgICAgLy8ga25vdywg
YXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbiwgdGhlIGxvY2FsIGhhcyBiZWVuIGNsb2JiZXJl
ZC4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgbGlu
ayB0byB0aGUgUGhpIG5vZGUsIG5vdCB0byB0aGUgR2V0TG9jYWwuCi0gICAgICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9kZS0+
b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIG5l
d0dldExvY2FsID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbigKLSAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpKSwgbm9kZSkpOwotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwob3BlcmFuZCkgPSBuZXdHZXRMb2NhbDsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbmV3R2V0TG9jYWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgIHJldHVy
biBub2RlOwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwotICAg
ICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9w
ZXJhbmQpOworICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3Bl
cmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayBmb3IgcmVh
ZHMgb2YgdGVtcG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3MsCi0gICAgICAgIC8vIGV4cGFuZCBt
X3ByZXNlcnZlZFZhcnMgdG8gY292ZXIgdGhlc2UuCi0gICAgICAgIG1fcHJlc2VydmVkVmFycy5z
ZXQob3BlcmFuZCk7Ci0gICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVk
KTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8o
dmFyaWFibGVBY2Nlc3NEYXRhKSk7Ci0gICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQoUGhp
U3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBvcGVyYW5kKSk7Ci0gICAgICAgIG5vZGUg
PSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5m
byh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsKKyAgICAgICAgbm9kZSA9IGluamVjdExhenlP
cGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkp
OwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQp
ID0gbm9kZTsKLSAgICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhl
YWQuc2V0TG9jYWxGaXJzdFRpbWUob3BlcmFuZCwgbm9kZSk7Ci0gICAgICAgIAogICAgICAgICBy
ZXR1cm4gbm9kZTsKICAgICB9CiAgICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBO
b2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQpAQCAtMzc1LDYxICszNDQs
MjUgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICBib29sIGlzQ2FwdHVyZWQg
PSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kKTsKIAorICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlOworICAgICAgICAKICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IEZsdXNoKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHdv
IHBvc3NpYmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sgd2FudHMgdGhlIGxvY2FsIHRvIGJlIGxp
dmUKLSAgICAgICAgICAgICAgICAvLyBidXQgaGFzIG5vdCBsb2FkZWQgaXRzIHZhbHVlLCBvciBp
dCBoYXMgbG9hZGVkIGl0cyB2YWx1ZSwgaW4KLSAgICAgICAgICAgICAgICAvLyB3aGljaCBjYXNl
IHdlJ3JlIGRvbmUuCi0gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NE
YXRhLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5v
ZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlzQ2FwdHVyZWQoaXND
YXB0dXJlZCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNl
dEFyZ3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgZ2V0dGluZyBhbiBhcmd1bWVu
dCBpbiB0aGUgZmlyc3QgYmFzaWMgYmxvY2s7IGxpbmsKLSAgICAgICAgICAgICAgICAvLyB0aGUg
R2V0TG9jYWwgdG8gdGhlIFNldEFyZ3VtZW50LgotICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5sb2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOwotICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRT
cGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGUpLCBub2RlKSk7
Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCkgPSBub2RlOwotICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNDYXB0dXJlZCkgewotICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgICAg
ICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgbm9k
ZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gU2V0TG9jYWwgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCB8fCBub2RlLT5vcCgp
ID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluamVjdExhenlPcGVyYW5kU3BlY3Vs
YXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpKSwgbm9kZSkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJnZUlzQ2Fw
dHVyZWQoaXNDYXB0dXJlZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAg
ICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0g
ICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHZhcmlhYmxlID0g
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICAKLSAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJs
ZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7Ci0KLSAgICAgICAgTm9kZSogcGhpID0g
YWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKLSAgICAgICAgbV9h
cmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGks
IGFyZ3VtZW50KSk7Ci0gICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9u
KGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpKTsK
KyAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChH
ZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlKSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7Ci0gICAgICAgIAotICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFy
Z3VtZW50LCBub2RlKTsKLSAgICAgICAgCiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAg
ICB2b2lkIHNldEFyZ3VtZW50KGludCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRN
b2RlID0gTm9ybWFsU2V0KQpAQCAtNDk1LDYzICs0MjgsMjcgQEAgcHJpdmF0ZToKICAgICAKICAg
ICB2b2lkIGZsdXNoRGlyZWN0KGludCBvcGVyYW5kLCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVu
dFBvc2l0aW9uKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNoZWNrIGlm
IHRoZSBzYW1lIG9wZXJhbmQgaGFkIGFscmVhZHkgYmVlbiBmbHVzaGVkIHRvCi0gICAgICAgIC8v
IHNvbWUgb3RoZXIgbG9jYWwgdmFyaWFibGUuCi0gICAgICAgIAogICAgICAgICBib29sIGlzQ2Fw
dHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBpbmxpbmVDYWxsRnJhbWUo
KSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQob3BlcmFuZCA8IEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4KTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgICAgIGludCBp
bmRleDsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAgICAg
ICAgICBpbmRleCA9IG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpOwotICAgICAgICAgICAgbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kOwotICAgICAgICAgICAg
bm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgpOworICAg
ICAgICBpZiAoIW9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQogICAgICAgICAgICAgbV9wcmVz
ZXJ2ZWRWYXJzLnNldChvcGVyYW5kKTsKLSAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTm9k
ZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CiAgICAg
ICAgIAogICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCAmJiBub2RlLT5vcCgpICE9IEdldExvY2FsKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRW1pdCBhIEZsdXNoIHJlZ2FyZGxlc3Mgb2Yg
d2hldGhlciB3ZSBhbHJlYWR5IGZsdXNoZWQgaXQuCi0gICAgICAgICAgICAvLyBUaGlzIGdpdmVz
IHVzIGd1aWRhbmNlIHRvIHNlZSB0aGF0IHRoZSB2YXJpYWJsZSBhbHNvIG5lZWRzIHRvIGJlIGZs
dXNoZWQKLSAgICAgICAgICAgIC8vIGZvciBhcmd1bWVudHMsIGV2ZW4gaWYgaXQgYWxyZWFkeSBo
YWQgdG8gYmUgZmx1c2hlZCBmb3Igb3RoZXIgcmVhc29ucy4KLSAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlSXNDYXB0dXJlZChpc0Nh
cHR1cmVkKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLCBub2RlKTsKLSAgICAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9uKQotICAg
ICAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlhYmxlQWNjZXNz
RGF0YSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB2YXJpYWJsZS0+
bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwog
ICAgICAgICAKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7Ci0gICAgICAgIE5v
ZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7Ci0g
ICAgICAgIG5vZGUgPSBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRh
KSwgcGhpKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Ci0gICAg
ICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50
QmxvY2ssIHBoaSwgaW5kZXgpKTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpID0gbm9kZTsKLSAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5vZGUpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlT
dGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7Ci0gICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGU7Ci0gICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKGlu
ZGV4LCBub2RlKTsKLSAgICAgICAgfQorICAgICAgICBub2RlID0gYWRkVG9HcmFwaChGbHVzaCwg
T3BJbmZvKHZhcmlhYmxlKSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7CiAgICAgICAgIGlmIChhcmd1bWVudFBvc2l0aW9u
KQotICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFibGUodmFyaWFibGVBY2Nl
c3NEYXRhKTsKKyAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlhYmxlKHZhcmlh
YmxlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmbHVzaEFyZ3VtZW50c0FuZENhcHR1cmVkVmFy
aWFibGVzKCkKQEAgLTIwNDAsNyArMTkzNyw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwogICAgICAgICAg
ICAgTm9kZSogc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcEluZm8odmFy
aWFibGUpKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gc2V0
QXJndW1lbnQ7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNl
dEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CiAgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3Vt
ZW50LCBzZXRBcmd1bWVudCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzk5LDYgKzI2OTUsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBGYWxzZVRyaVN0YXRlKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIEVtaXQgYSBwbGFjZWhvbGRlciBmb3IgdGhpcyBieXRlY29kZSBvcGVyYXRpb24gYnV0
IG90aGVyd2lzZQogICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGZhbGwgdGhyb3VnaC4KKyAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKICAgICAgICAgICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfanRydWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KQEAgLTI4MTgsNiArMjcxNSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IFRydWVUcmlTdGF0
ZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEgcGxhY2Vob2xkZXIgZm9yIHRoaXMg
Ynl0ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKICAgICAgICAgICAgICAgICAgICAgLy8g
anVzdCBmYWxsIHRocm91Z2guCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRv
bSk7CiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2pmYWxzZSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjg1OCw2ICsyNzU2LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0
aGlzIGJ5dGVjb2RlIG9wZXJhdGlvbiBidXQgb3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBqdXN0IGZhbGwgdGhyb3VnaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9q
bGVzcyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yODg0
LDYgKzI3ODMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBF
bWl0IGEgcGxhY2Vob2xkZXIgZm9yIHRoaXMgYnl0ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndp
c2UKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgorICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2psZXNzZXEpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQpAQCAtMjkxMCw2ICsyODEwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0aGlzIGJ5dGVj
b2RlIG9wZXJhdGlvbiBidXQgb3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBq
dXN0IGZhbGwgdGhyb3VnaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhh
bnRvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qZ3JlYXRlcik7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yOTM2LDYgKzI4
MzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEg
cGxhY2Vob2xkZXIgZm9yIHRoaXMgYnl0ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgorICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2pncmVhdGVyZXEpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMjk1OCw2ICsyODYwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBpZiAoYSA8IGIpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBwbGFjZWhvbGRlciBmb3IgdGhpcyBieXRl
Y29kZSBvcGVyYXRpb24gYnV0IG90aGVyd2lzZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
anVzdCBmYWxsIHRocm91Z2guCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBo
YW50b20pOwogICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfam5sZXNzKTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsK
QEAgLTI5ODMsNiArMjg4Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPD0gYikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0aGlzIGJ5dGVjb2RlIG9wZXJhdGlv
biBidXQgb3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGZhbGwgdGhy
b3VnaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qbmxlc3NlcSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1
bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CkBAIC0zMDA4LDYg
KzI5MTIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChhID4gYikgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0aGlzIGJ5dGVjb2RlIG9wZXJhdGlvbiBidXQgb3RoZXJ3
aXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGZhbGwgdGhyb3VnaC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9qbmdyZWF0ZXIpOwogICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8o
bV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpOwpAQCAtMzAzMyw2ICsyOTM4LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
ICAgICBpZiAoYSA+PSBiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEgcGxh
Y2Vob2xkZXIgZm9yIHRoaXMgYnl0ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgorICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2puZ3JlYXRlcmVxKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsKQEAgLTM0MDksMTUxICszMzE1LDYgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIH0KIH0KIAotdGVtcGxhdGU8
Qnl0ZUNvZGVQYXJzZXI6OlBoaVN0YWNrVHlwZSBzdGFja1R5cGU+Ci12b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2soKQotewotICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4m
IHBoaVN0YWNrID0gKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IG1fYXJndW1lbnRQ
aGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsKLSAgICAKLSAgICB3aGlsZSAoIXBoaVN0YWNrLmlz
RW1wdHkoKSkgewotICAgICAgICBQaGlTdGFja0VudHJ5IGVudHJ5ID0gcGhpU3RhY2subGFzdCgp
OwotICAgICAgICBwaGlTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IWVudHJ5Lm1fYmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIAotICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyA9IGVudHJ5Lm1fYmxv
Y2stPm1fcHJlZGVjZXNzb3JzOwotICAgICAgICB1bnNpZ25lZCB2YXJObyA9IGVudHJ5Lm1fdmFy
Tm87Ci0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclBoaSA9IGVudHJ5Lm1fcGhp
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAgIEhhbmRsaW5nIHBoaSBlbnRyeSBmb3Ig
dmFyICV1LCBwaGkgQCV1LlxuIiwgZW50cnkubV92YXJObywgZW50cnkubV9waGkpOwotI2VuZGlm
Ci0gICAgICAgIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5z
aXplKCk7ICsraSkgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
LSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgIERlYWxpbmcgd2l0aCBwcmVkZWNlc3NvciBibG9j
ayAldS5cbiIsIHByZWRlY2Vzc29yc1tpXSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJl
ZGVjZXNzb3JzW2ldXS5nZXQoKTsKLQotICAgICAgICAgICAgTm9kZSomIHZhciA9IChzdGFja1R5
cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuYXJndW1lbnQodmFyTm8pIDogcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxv
Y2FsKHZhck5vKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogdmFsdWVJblByZWRl
Y2Vzc29yID0gdmFyOwotICAgICAgICAgICAgaWYgKCF2YWx1ZUluUHJlZGVjZXNzb3IpIHsKLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgIERpZCBub3QgZmluZCBub2RlLCBhZGRpbmcgcGhpLlxuIik7Ci0jZW5k
aWYKLQotICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IGluc2VydFBoaU5vZGUo
T3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFj
ayA/IGFyZ3VtZW50VG9PcGVyYW5kKHZhck5vKSA6IHN0YXRpY19jYXN0PGludD4odmFyTm8pLCBm
YWxzZSkpLCBwcmVkZWNlc3NvckJsb2NrKTsKLSAgICAgICAgICAgICAgICB2YXIgPSB2YWx1ZUlu
UHJlZGVjZXNzb3I7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBo
aVN0YWNrKQotICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNB
dEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUodmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUodmFyTm8sIHZhbHVlSW5QcmVkZWNl
c3Nvcik7Ci0gICAgICAgICAgICAgICAgcGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJl
ZGVjZXNzb3JCbG9jaywgdmFsdWVJblByZWRlY2Vzc29yLCB2YXJObykpOwotICAgICAgICAgICAg
fSBlbHNlIGlmICh2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gR2V0TG9jYWwpIHsKLSNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIiAgICAgIEZvdW5kIEdldExvY2FsIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvci0+
aW5kZXgoKSk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJl
IHRoYXQgdGhlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZQot
ICAgICAgICAgICAgICAgIC8vIEdldExvY2FsIGFuZCBpdHMgYmxvY2stbG9jYWwgUGhpLiBTdHJp
Y3RseSBzcGVha2luZyB3ZSBvbmx5IG5lZWQgdGhlIHR3bwotICAgICAgICAgICAgICAgIC8vIHRv
IGJlIHVuaWZpZWQuIEJ1dCBmb3IgZWZmaWNpZW5jeSwgd2Ugd2FudCB0aGUgY29kZSB0aGF0IGNy
ZWF0ZXMgR2V0TG9jYWxzCi0gICAgICAgICAgICAgICAgLy8gYW5kIFBoaXMgdG8gdHJ5IHRvIHJl
dXNlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KLSAgICAgICAgICAg
ICAgICBBU1NFUlQodmFsdWVJblByZWRlY2Vzc29yLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2
YWx1ZUluUHJlZGVjZXNzb3ItPmNoaWxkMSgpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gdmFsdWVJ
blByZWRlY2Vzc29yLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nRigiICAgICAgRm91bmQgQCV1LlxuIiwgdmFsdWVJblByZWRlY2Vzc29yLT5pbmRleCgp
KTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKAotICAgICAgICAg
ICAgICAgIHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAg
ICAgIHx8IHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBQaGkKLSAgICAgICAgICAgICAgICB8
fCB2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgICB8fCAo
dmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IFNldEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBB
cmd1bWVudFBoaVN0YWNrKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogZGF0YUZvclByZWRlY2Vzc29yID0gdmFsdWVJblByZWRlY2Vzc29yLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZGF0YUZvclByZWRlY2Vz
c29yLT51bmlmeShkYXRhRm9yUGhpKTsKLQotICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGVu
dHJ5Lm1fcGhpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBSZWYgY291bnQgb2YgQCV1ID0gJXUuXG4iLCBwaGlO
b2RlLT5pbmRleCgpLCBwaGlOb2RlLT5yZWZDb3VudCgpKTsKLSNlbmRpZgotICAgICAgICAgICAg
aWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFJlZmZpbmcgQCV1
LlxuIiwgdmFsdWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICghcGhpTm9kZS0+Y2hpbGQxKCkpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1
LT5jaGlsZDEgPSBAJXUuXG4iLCBwaGlOb2RlLT5pbmRleCgpLCB2YWx1ZUluUHJlZGVjZXNzb3Ip
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgcGhpTm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVk
Z2UodmFsdWVJblByZWRlY2Vzc29yKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBA
JXU6ICIsIHBoaU5vZGUtPmluZGV4KCkpOwotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBD
aGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4i
KTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDIoKSkgewotI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU2V0
dGluZyBAJXUtPmNoaWxkMiA9IEAldS5cbiIsIHBoaU5vZGUtPmluZGV4KCksIHZhbHVlSW5QcmVk
ZWNlc3Nvcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRD
aGlsZDIoRWRnZSh2YWx1ZUluUHJlZGVjZXNzb3IpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxk
cmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgcGhpTm9k
ZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICAgICAgZGF0YUxv
Z0YoIi5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMygpKSB7Ci0jaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIg
ICAgICBTZXR0aW5nIEAldS0+Y2hpbGQzID0gQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgdmFs
dWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxk
cmVuLnNldENoaWxkMyhFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwotI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAg
ICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsKLSAgICAgICAgICAgICAg
ICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogbmV3UGhpID0gaW5z
ZXJ0UGhpTm9kZShPcEluZm8oZGF0YUZvclBoaSksIGVudHJ5Lm1fYmxvY2spOwotICAgICAgICAg
ICAgCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgIFNwbGl0dGluZyBAJXUsIGNyZWF0ZWQgQCV1LlxuIiwgcGhpTm9k
ZS0+aW5kZXgoKSwgbmV3UGhpLT5pbmRleCgpKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBpZiAo
cGhpTm9kZS0+cmVmQ291bnQoKSkKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdQaGkp
OwotCi0gICAgICAgICAgICBuZXdQaGktPmNoaWxkcmVuID0gcGhpTm9kZS0+Y2hpbGRyZW47Ci0K
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBk
YXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBuZXdQaGktPmluZGV4KCkpOwotICAg
ICAgICAgICAgbmV3UGhpLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAg
ICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotCi0gICAgICAgICAgICBwaGlOb2RlLT5jaGls
ZHJlbi5pbml0aWFsaXplKG5ld1BoaSwgdmFsdWVJblByZWRlY2Vzc29yLCAwKTsKLQotI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4KCkpOwotICAgICAgICAg
ICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICBk
YXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBCeXRl
Q29kZVBhcnNlcjo6Zml4VmFyaWFibGVBY2Nlc3NQcmVkaWN0aW9ucygpCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyAr
K2kpIHsKQEAgLTM5MzYsNDAgKzM2OTcsMjUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2Uo
KQogICAgIGRhdGFMb2dGKCJQcm9jZXNzaW5nIGxvY2FsIHZhcmlhYmxlIHBoaXMuXG4iKTsKICNl
bmRpZgogICAgIAotICAgIG1fY3VycmVudFByb2ZpbGluZ0luZGV4ID0gbV9jdXJyZW50SW5kZXg7
CisgICAgQVNTRVJUKG1fcHJlc2VydmVkVmFycy5zaXplKCkpOworICAgIHNpemVfdCBudW1iZXJP
ZkxvY2FscyA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IG1fcHJlc2VydmVkVmFycy5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgaWYgKG1fcHJlc2VydmVkVmFycy5xdWlja0dldChpKSkgeworICAg
ICAgICAgICAgbnVtYmVyT2ZMb2NhbHMgPSBpICsgMTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQogICAgIAotICAgIHByb2Nlc3NQaGlTdGFjazxMb2NhbFBoaVN0YWNrPigp
OwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICBkYXRhTG9n
RigiUHJvY2Vzc2luZyBhcmd1bWVudCBwaGlzLlxuIik7Ci0jZW5kaWYKLSAgICBwcm9jZXNzUGhp
U3RhY2s8QXJndW1lbnRQaGlTdGFjaz4oKTsKLQogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOwogICAgICAgICBBU1NFUlQoYmxvY2spOwotICAgICAgICBpZiAoIWJsb2Nr
LT5pc1JlYWNoYWJsZSkKKyAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpIHsKICAgICAg
ICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIoKTsKLSAgICB9Ci0gICAg
Ci0gICAgZml4VmFyaWFibGVBY2Nlc3NQcmVkaWN0aW9ucygpOwotICAgIAotICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBpZiAoIWJsb2NrKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dy
YXBoLm1fb3NyRW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMu
b3BlcmFuZEZvckluZGV4KGkpKTsKLSAgICAgICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5oYXNMb2NhbCgpKTsKLSAg
ICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KAotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ld
KSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
ZW5zdXJlTG9jYWxzKG51bWJlck9mTG9jYWxzKTsKKyAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5lbnN1cmVMb2NhbHMobnVtYmVyT2ZMb2NhbHMpOwogICAgIH0KICAgICAKICAgICBtX2dy
YXBoLm1fcHJlc2VydmVkVmFycyA9IG1fcHJlc2VydmVkVmFyczsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTQyMTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHRyZW1lTG9nZ2lu
ZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1lcmdlQmxvY2tzKGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSwg
Tm9CbG9jayk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNoYW5nZWQgPSBvdXRlckNo
YW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTMsNiAr
MTE0LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmR1bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pLApA
QCAtMTI2LDYgKzEyOCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChleHRyZW1lTG9nZ2luZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5k
ZXRocmVhZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW5C
bG9ja0luZGV4ID0gbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlv
bik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCBub3RUYWtlbkJsb2Nr
SW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgIWNvbmRpdGlvbik7
CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTE1NCw2ICsxNTcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNGR1NpbXBsaWZ5OiBCcmFuY2gg
dG8gc2FtZSBzdWNjZXNzb3IgbWVyZ2Ugb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldS5cbiIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LCB0YXJnZXRCbG9j
a0luZGV4KTsKICNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGV0
aHJlYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0lu
ZGV4LCB0YXJnZXRCbG9ja0luZGV4LCBOb0Jsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAt
MjUwLDEwNCArMjU0LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAg
ICAgIEFTU0VSVCghYmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgCi0gICAgICAgIC8vIDEp
IFJlbW92ZSByZWZlcmVuY2VzIGZyb20gb3RoZXIgYmxvY2tzIHRvIHRoaXMgYmxvY2suCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhibG9jayk7IGktLTsp
Ci0gICAgICAgICAgICBmaXhQaGlzKGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yKGJsb2Nr
LCBpKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXpl
KCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJs
b2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
YmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9j
YXRvci5mcmVlKGJsb2NrLT5hdChub2RlSW5kZXgpKTsKICAgICAgICAgCi0gICAgICAgIC8vIDIp
IEtpbGwgdGhlIGJsb2NrCiAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xl
YXIoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sq
IGJsb2NrLCBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICBOb2RlKiBsaXZlbmVzc05vZGUgPSBqZXR0
aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICBO
b2RlKiBhdmFpbGFiaWxpdHlOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9w
ZXJhbmQpOwogICAgICAgICBpZiAoIWxpdmVuZXNzTm9kZSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgQVNTRVJUKGF2YWlsYWJpbGl0eU5vZGUpOwogICAgICAgICBpZiAobGl2ZW5lc3NO
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBpZiAoYXZhaWxhYmlsaXR5Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKLSAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU5vZGUgPSBhdmFpbGFiaWxpdHlOb2RlLT5jaGlsZDEoKS5u
b2RlKCk7Ci0gICAgICAgIGlmICghYXZhaWxhYmlsaXR5Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
KyAgICAgICAgaWYgKCFsaXZlbmVzc05vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChhdmFpbGFiaWxpdHlOb2RlLT5vcCgpICE9IFNldExv
Y2FsKTsKICAgICAgICAgYmxvY2stPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICBtX2dyYXBoLCBS
ZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBh
dmFpbGFiaWxpdHlOb2RlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaXhQb3NzaWJsZUdldExv
Y2FsKEJhc2ljQmxvY2sqIGJsb2NrLCBFZGdlJiBlZGdlLCBib29sIGNoYW5nZVJlZikKLSAgICB7
Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gZWRnZS5ub2RlKCk7Ci0gICAgICAgIGlmIChjaGlsZC0+
b3AoKSAhPSBHZXRMb2NhbCkKLSAgICAgICAgICAgIHJldHVybjsKLSNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgQ29uc2lkZXJp
bmcgR2V0TG9jYWwgYXQgQCV1LCBsb2NhbCByJWQuXG4iLCBub2RlLT5pbmRleCgpLCBjaGlsZC0+
bG9jYWwoKSk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGNoaWxkLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+aXNDYXB0dXJlZCgpKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBjYXB0dXJlZC5cbiIpOwot
I2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTm9kZSogb3Jp
Z2luYWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGNoaWxkLT5sb2NhbCgp
KTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRh
dGFMb2dGKCIgICAgICAgIERlYWxpbmcgd2l0aCBvcmlnaW5hbCBAJXUuXG4iLCBvcmlnaW5hbE5v
ZGUtPmluZGV4KCkpOwotI2VuZGlmCi0gICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGUpOwotI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0Yo
IiAgICAgICAgT3JpZ2luYWwgaGFzIGxvY2FsIHIlZC5cbiIsIG9yaWdpbmFsTm9kZS0+bG9jYWwo
KSk7Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUKGNoaWxkLT5sb2NhbCgpID09IG9yaWdpbmFsTm9k
ZS0+bG9jYWwoKSk7Ci0gICAgICAgIC8vIFBvc3NpYmlsaXRpZXM6Ci0gICAgICAgIC8vIFNldExv
Y2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhpbmcg
dGhhdCBpcyBpbW1lZGlhdGVseQotICAgICAgICAvLyAgICAgYXZhaWxhYmxlIGluIHRoZSBmaXJz
dCBibG9jayB3aXRoIGEga25vd24gTm9kZUluZGV4LgotICAgICAgICAvLyBHZXRMb2NhbCAtPiB0
aGUgc2Vjb25kQmxvY2sgaXMgZ2V0dGluZyB0aGUgdmFsdWUgb2Ygc29tZXRoaW5nIHRoYXQgdGhl
IGZpcnN0Ci0gICAgICAgIC8vICAgICBibG9jayBhbHNvIGdldHMuCi0gICAgICAgIC8vIFBoaSAt
PiB0aGUgc2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9wZXJhbmQg
dGhhdCB0aGUgZmlyc3QgYmxvY2sKLSAgICAgICAgLy8gICAgIHdhcyBhbHNvIGFza2luZyBmb3Ig
a2VlcC1hbGl2ZSBvbi4KLSAgICAgICAgLy8gU2V0QXJndW1lbnQgLT4gdGhlIHNlY29uZEJsb2Nr
IGlzIGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlCi0gICAgICAg
IC8vICAgICBmaXJzdCBibG9jayB3YXMga2VlcGluZyBhbGl2ZSBieSB2aXJ0dWUgb2YgdGhlIGZp
cnN0QmxvY2sgYmVpbmcgdGhlIHJvb3QgYW5kCi0gICAgICAgIC8vICAgICB0aGUgb3BlcmFuZCBi
ZWluZyBhbiBhcmd1bWVudC4KLSAgICAgICAgLy8gRmx1c2ggLT4gdGhlIHNlY29uZEJsb2NrIGlz
IGFza2luZyBmb3Iga2VlcC1hbGl2ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlIGZpcnN0Ci0gICAg
ICAgIC8vICAgICBibG9jayB3YXMgZm9yY2luZyB0byBiZSBhbGl2ZSwgc28gdGhlIHNlY29uZCBi
bG9jayBzaG91bGQgcmVmZXIgY2hpbGQgb2YKLSAgICAgICAgLy8gICAgIHRoZSBmbHVzaC4KLSAg
ICAgICAgaWYgKG9yaWdpbmFsTm9kZS0+b3AoKSA9PSBGbHVzaCkKLSAgICAgICAgICAgIG9yaWdp
bmFsTm9kZSA9IG9yaWdpbmFsTm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBzd2l0Y2gg
KG9yaWdpbmFsTm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAg
ICAgICBpZiAoY2hhbmdlUmVmKQotICAgICAgICAgICAgICAgIEFTU0VSVChvcmlnaW5hbE5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3MgYSBTZXRMb2NhbC5cbiIp
OwotI2VuZGlmCi0gICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKGVkZ2UsIG9yaWdpbmFs
Tm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRMb2NhbDogewotI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3Mg
YSBHZXRMb2NhbC5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5z
aG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQoZWRn
ZSwgb3JpZ2luYWxOb2RlLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBh
IEdldExvY2FsIHRoYXQgcG9pbnRzIHRvIGEgY2hpbGQgR2V0TG9jYWwgdGhhdCBpcyBkZWFkLCB0
aGVuCi0gICAgICAgICAgICAvLyB3ZSBoYXZlIG5vIG5lZWQgdG8gZG8gYW55dGhpbmc6IHRoaXMg
b3JpZ2luYWwgR2V0TG9jYWwgaXMgc3RpbGwgdmFsaWQuCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIFBoaToKLSAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewot
ICAgICAgICBpZiAoY2hhbmdlUmVmKQotICAgICAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBQaGkvU2V0QXJndW1lbnQu
XG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgLy8gS2VlcCB0aGUgR2V0TG9jYWwhCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVj
Tm9uZSwgUGhhbnRvbUxvY2FsLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGxpdmVu
ZXNzTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBq
ZXR0aXNvbkJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBqZXR0aXNvbmVk
QmxvY2tJbmRleCwgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4pCkBAIC0zNjMsMzggKzI4
OSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoYmxvY2tJ
bmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpeFBo
aXMoQmxvY2tJbmRleCBzb3VyY2VCbG9ja0luZGV4LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uQmxv
Y2tJbmRleCkKLSAgICB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrc1tzb3VyY2VCbG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgQmFzaWNCbG9jayog
ZGVzdGluYXRpb25CbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbZGVzdGluYXRpb25CbG9ja0luZGV4
XS5nZXQoKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbkJsb2NrKSB7Ci0gICAgICAgICAgICAv
LyBJZiB3ZSdyZSB0cnlpbmcgdG8ga2lsbCBvZmYgdGhlIHNvdXJjZSBibG9jayBhbmQgdGhlIGRl
c3RpbmF0aW9uIGJsb2NrIGlzIGFscmVhZHkKLSAgICAgICAgICAgIC8vIGRlYWQsIHRoZW4gd2Un
cmUgZG9uZSEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGRlc3RpbmF0aW9uQmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBkZXN0aW5hdGlvbkJsb2NrLT5waGlzW2ldOwotICAg
ICAgICAgICAgTm9kZSogbXlOb2RlID0gc291cmNlQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKHBoaU5vZGUtPmxvY2FsKCkpOwotICAgICAgICAgICAgaWYgKCFteU5vZGUpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGlzIHdpbGwgaGFwcGVuIGlmIHRoZXJlIGlzIGEgcGhpIGluIHRoZSBk
ZXN0aW5hdGlvbiB0aGF0IHJlZmVycyBpbnRvCi0gICAgICAgICAgICAgICAgLy8gdGhlIGRlc3Rp
bmF0aW9uIGl0c2VsZi4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBk
YXRhTG9nRigKLSAgICAgICAgICAgICAgICAiQ29uc2lkZXJpbmcgcmVtb3ZpbmcgcmVmZXJlbmNl
IGZyb20gcGhpIEAldSB0byBAJXUgb24gbG9jYWwgciVkOiIsCi0gICAgICAgICAgICAgICAgcGhp
Tm9kZS0+aW5kZXgoKSwgbXlOb2RlLT5pbmRleCgpLCBwaGlOb2RlLT5sb2NhbCgpKTsKLSNlbmRp
ZgotICAgICAgICAgICAgaWYgKG15Tm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAg
ICAgICBteU5vZGUgPSBteU5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2opCi0gICAgICAgICAg
ICAgICAgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKG15Tm9kZSwgcGhpTm9kZSwg
aiwgc291cmNlQmxvY2stPmlzUmVhY2hhYmxlKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKLSNlbmRpZgotICAg
ICAgICB9Ci0gICAgfQotICAgIAogICAgIHZvaWQgZml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhC
bG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0dGlzb25lZEJsb2NrSW5kZXgpCiAg
ICAgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTQwOSw4
ICszMDMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5tX3ByZWRl
Y2Vzc29ycy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgZml4UGhpcyhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNl
KE5vZGUqIG15Tm9kZSwgTm9kZSogcGhpTm9kZSwgdW5zaWduZWQgZWRnZUluZGV4LCBib29sIGNo
YW5nZVJlZikKQEAgLTU4Myw4OCArNDc1LDggQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+cGhpcy5zaXplKCk7ICsraSkKICAgICAgICAgICAg
IGZpcnN0QmxvY2stPnBoaXMuYXBwZW5kKHNlY29uZEJsb2NrLT5waGlzW2ldKTsKIAotICAgICAg
ICAvLyBCZWZvcmUgd2Ugc3RhcnQgY2hhbmdpbmcgdGhlIHNlY29uZCBibG9jaydzIGdyYXBoLCBy
ZWNvcmQgd2hhdCBub2RlcyB3b3VsZAotICAgICAgICAvLyBiZSByZWZlcmVuY2VkIGJ5IHN1Y2Nl
c3NvcnMgb2YgdGhlIHNlY29uZCBibG9jay4KLSAgICAgICAgT3BlcmFuZHM8T3BlcmFuZFN1YnN0
aXR1dGlvbj4gc3Vic3RpdHV0aW9ucygKLSAgICAgICAgICAgIHNlY29uZEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAgICAgICAgICAgIHNlY29uZEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpCi0gICAgICAgICAgICByZWNvcmRQb3NzaWJsZUluY29taW5nUmVmZXJlbmNlKHNlY29u
ZEJsb2NrLCBzdWJzdGl0dXRpb25zLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJP
ZkxvY2FscygpOyArK2kpCi0gICAgICAgICAgICByZWNvcmRQb3NzaWJsZUluY29taW5nUmVmZXJl
bmNlKHNlY29uZEJsb2NrLCBzdWJzdGl0dXRpb25zLCBpKTsKLQotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IHNlY29uZEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ym9vbCBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgUGhhbnRvbTogewot
ICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBwb3NzaWJsZUxvY2FsT3Ag
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlTG9j
YWxPcC0+b3AoKSAhPSBHZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAmJiBwb3NzaWJsZUxv
Y2FsT3AtPmhhc0xvY2FsKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIXBvc3NpYmxlTG9jYWxP
cC0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewotICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBzZXRMb2NhbCA9IGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KHBvc3NpYmxlTG9jYWxPcC0+bG9jYWwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZXRM
b2NhbC0+b3AoKSA9PSBTZXRMb2NhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzZXRMb2NhbC0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDIoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAg
ICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgLy8gQSBGbHVzaCBjb3Vs
ZCB1c2UgYSBHZXRMb2NhbCwgU2V0TG9jYWwsIFNldEFyZ3VtZW50LCBvciBhIFBoaS4KLSAgICAg
ICAgICAgICAgICAvLyBJZiBpdCB1c2VzIGEgR2V0TG9jYWwsIGl0J2xsIGJlIHRha2VuIGNhcmUg
b2YgYmVsb3cuIElmIGl0IHVzZXMgYQotICAgICAgICAgICAgICAgIC8vIFNldExvY2FsIG9yIFNl
dEFyZ3VtZW50LCB0aGVuIGl0IG11c3QgYmUgdXNpbmcgYSBub2RlIGZyb20gdGhlCi0gICAgICAg
ICAgICAgICAgLy8gc2FtZSBibG9jay4gQnV0IGlmIGl0IHVzZXMgYSBQaGksIHRoZW4gd2Ugc2hv
dWxkIHJlZGlyZWN0IGl0IHRvCi0gICAgICAgICAgICAgICAgLy8gdXNlIHdoYXRldmVyIHRoZSBm
aXJzdCBibG9jayBhZHZlcnRpc2VkIGFzIGEgdGFpbCBvcGVyYW5kLgotICAgICAgICAgICAgICAg
IC8vIFNpbWlsYXJseSBmb3IgR2V0TG9jYWw7IGl0IGNvdWxkIHVzZSBhbnkgb2YgdGhvc2UgZXhj
ZXB0IGZvcgotICAgICAgICAgICAgICAgIC8vIEdldExvY2FsLiBJZiBpdCB1c2VzIGEgUGhpIHRo
ZW4gaXQgc2hvdWxkIGJlIHJlZGlyZWN0ZWQgdG8gdXNlIGEKLSAgICAgICAgICAgICAgICAvLyBQ
aGkgZnJvbSB0aGUgdGFpbCBvcGVyYW5kLgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS0+b3AoKSAhPSBQaGkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIGF0Rmlyc3QgPSBmaXJzdEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKLSAgICAgICAgICAgICAgICBtX2dy
YXBoLmNoYW5nZUVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIEVkZ2Uoc2tpcEdldExvY2Fs
KGF0Rmlyc3QpKSwgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICAgICAgY2hp
bGRyZW5BbHJlYWR5Rml4ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKCFjaGlsZHJlbkFscmVhZHlGaXhlZCkgewotICAgICAgICAgICAgICAgIGJvb2wgY2hhbmdl
UmVmID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIEdldExvY2FsLCB0aGVuIHdlIG1pZ2h0IGxpa2UgdG8g
Zml4IGl0LgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFy
Z3MpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUt
PmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+
Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5b
Y2hpbGRJZHhdLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICghIW5vZGUtPmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCks
IGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghIW5vZGUtPmNoaWxkMigpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ss
IG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCEhbm9kZS0+Y2hpbGQzKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwg
Y2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKG5vZGUpOwotICAg
ICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnNpemUo
KTsgKytpKQorICAgICAgICAgICAgZmlyc3RCbG9jay0+YXBwZW5kKHNlY29uZEJsb2NrLT5hdChp
KSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+bGFzdCgpLT5pc1Rlcm1p
bmFsKCkpOwogICAgICAgICAKQEAgLTY4NiwzNyArNDk4LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKGpldHRpc29uZWRCbG9ja0luZGV4ICE9IE5vQmxvY2spCiAgICAgICAgICAgICBmaXhKZXR0
aXNvbmVkUHJlZGVjZXNzb3JzKGZpcnN0QmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgp
OwogICAgICAgICAKLSAgICAgICAgLy8gRml4IHVwIHRoZSB2YXJpYWJsZXMgYXQgdGFpbC4KLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKLSAgICAgICAgICAgIGZpeFRhaWxPcGVyYW5kKGZp
cnN0QmxvY2ssIHNlY29uZEJsb2NrLCBhcmd1bWVudFRvT3BlcmFuZChpKSwgc3Vic3RpdHV0aW9u
cyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCi0gICAgICAgICAgICBmaXhUYWlsT3BlcmFu
ZChmaXJzdEJsb2NrLCBzZWNvbmRCbG9jaywgaSwgc3Vic3RpdHV0aW9ucyk7Ci0gICAgICAgIAot
ICAgICAgICAvLyBGaXggdXAgdGhlIHJlZmVyZW5jZXMgZnJvbSBvdXIgbmV3IHN1Y2Nlc3NvcnMu
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhmaXJzdEJs
b2NrKTsgaS0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9ncmFw
aC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihmaXJzdEJsb2NrLCBpKV0uZ2V0KCk7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3VjY2Vzc29yLT5waGlzLnNpemUoKTsg
KytqKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHN1Y2Nlc3Nvci0+cGhpc1tq
XTsKLSAgICAgICAgICAgICAgICBib29sIGNoYW5nZVJlZiA9IHBoaU5vZGUtPnNob3VsZEdlbmVy
YXRlKCk7Ci0gICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24g
PSBzdWJzdGl0dXRpb25zLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7Ci0jaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBQZXJmb3JtaW5nIG9wZXJhbmQgc3Vic3RpdHV0aW9uICIsIHN1YnN0aXR1dGlvbiwgIi5cbiIp
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDEoKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNo
aWxkMSgpID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5jaGFuZ2VDaGlsZChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc3Vic3RpdHV0aW9u
Lm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hp
bGQyKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlm
IChwaGlOb2RlLT5jaGlsZDIoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCi0gICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCks
IHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICBpZiAo
IXBoaU5vZGUtPmNoaWxkMygpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQzKCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxk
KQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKHBoaU5vZGUtPmNoaWxk
cmVuLmNoaWxkMygpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIGZpcnN0QmxvY2stPnZhbHVlc0F0
VGFpbCA9IHNlY29uZEJsb2NrLT52YWx1ZXNBdFRhaWw7CiAgICAgICAgIGZpcnN0QmxvY2stPmNm
YUJyYW5jaERpcmVjdGlvbiA9IHNlY29uZEJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb247CiAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCIKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIK
KyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IENQU1JldGhyZWFkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIENQU1Jl
dGhyZWFkaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiQ1BT
IHJldGhyZWFkaW5nIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7
CisgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZyZWVVbm5lY2Vzc2FyeU5vZGVzKCk7
CisgICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzKCk7CisgICAgICAgIHByb3BhZ2F0
ZVBoaXM8TG9jYWxPcGVyYW5kPigpOworICAgICAgICBwcm9wYWdhdGVQaGlzPEFyZ3VtZW50T3Bl
cmFuZD4oKTsKKyAgICAgICAgbV9ncmFwaC5jb2xsZWN0R2FyYmFnZSgpOworICAgICAgICAKKyAg
ICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCitwcml2YXRlOgorICAgIAorICAgIHZvaWQgZnJlZVVubmVjZXNzYXJ5Tm9kZXMo
KQorICAgIHsKKyAgICAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDUFMg
UmV0aHJlYWRpbmc6IGZyZWVVbm5lY2Vzc2FyeU5vZGVzIik7CisgICAgICAgIAorICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9j
a0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJs
ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHVuc2lnbmVkIGZyb21JbmRleCA9IDA7Cisg
ICAgICAgICAgICB1bnNpZ25lZCB0b0luZGV4ID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChmcm9t
SW5kZXggPCBibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChmcm9tSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CisgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNl
IEZsdXNoOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCktPm9wKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tTG9jYWwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLT5oYXNSZXN1bHQo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE5vcDoK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gMDsgLy8gUmVzZXQgdGhlIHJlcGxhY2VtZW50IHNp
bmNlIHRoZSBuZXh0IHBoYXNlIHdpbGwgdXNlIGl0LgorICAgICAgICAgICAgICAgIGJsb2NrLT5h
dCh0b0luZGV4KyspID0gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJsb2NrLT5y
ZXNpemUodG9JbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
cGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAg
ICAgIG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOworICAg
ICAgICAgICAgYmxvY2stPnBoaXMucmVzaXplKDApOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIHZvaWQgY2xlYXJWYXJp
YWJsZXNBdEhlYWRBbmRUYWlsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgKKyAgICAgICAgICAg
IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zaXplRm9yPG9wZXJhbmRLaW5kPigpCisgICAgICAg
ICAgICA9PSBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2l6ZUZvcjxvcGVyYW5kS2luZD4oKSk7
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2Jsb2NrLT52YXJpYWJsZXNB
dEhlYWQuc2l6ZUZvcjxvcGVyYW5kS2luZD4oKTsgaS0tOykgeworICAgICAgICAgICAgbV9ibG9j
ay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9wZXJhbmRLaW5kPihpKSA9IDA7CisgICAgICAgICAg
ICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGkpID0gMDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIE5vZGUqIGFkZFBoaVNpbGVu
dGx5KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQorICAgIHsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0g
bV9ncmFwaC5hZGROb2RlKERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQ
aGksIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICBibG9jay0+cGhpcy5h
cHBlbmQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
dGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CisgICAgQUxXQVlTX0lOTElORSBOb2Rl
KiBhZGRQaGkoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4s
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUsIHNpemVfdCBpbmRleCkKKyAgICB7CisgICAg
ICAgIE5vZGUqIHJlc3VsdCA9IGFkZFBoaVNpbGVudGx5KGJsb2NrLCBjb2RlT3JpZ2luLCB2YXJp
YWJsZSk7CisgICAgICAgIHBoaVN0YWNrRm9yPG9wZXJhbmRLaW5kPigpLmFwcGVuZChQaGlTdGFj
a0VudHJ5KGJsb2NrLCBpbmRleCwgcmVzdWx0KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIEFM
V0FZU19JTkxJTkUgTm9kZSogYWRkUGhpKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUsIHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZGRQaGk8b3BlcmFuZEtpbmQ+KG1fYmxvY2ssIGNvZGVPcmlnaW4sIHZhcmlhYmxl
LCBpbmRleCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRL
aW5kPgorICAgIHZvaWQgY2Fub25pY2FsaXplR2V0TG9jYWxGb3IoTm9kZSogbm9kZSwgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgc2l6ZV90IGlkeCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKE5vZGUqIG90aGVyTm9k
ZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSkgewor
ICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFy
aWFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG90aGVyTm9kZS0+b3Ao
KSkgeworICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxv
Y2FsOgorICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0gUGhpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBhIEdldExvY2FsLCBzbyB0aGlzIG1p
Z2h0IGFzIHdlbGwgYmUgdGhlIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2RlKSk7CisgICAgICAgICAgICAgICAgICAgIG1fYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9IG5vZGU7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBvdGhlck5v
ZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2Nh
bCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgfHwgb3RoZXJOb2RlLT5vcCgpID09
IEdldExvY2FsKTsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpID09IHZhcmlhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG90aGVy
Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9kZSkpOworICAgICAgICAgICAgICAgIG1fYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9IG5vZGU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgICAgIGlmIChvdGhl
ck5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIG90aGVyTm9kZSA9
IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBvdGhl
ck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gUGhpIHx8IG90aGVyTm9kZS0+b3AoKSA9
PSBTZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhpcyBHZXRMb2NhbCBidXQgbGluayBp
dCB0byB0aGUgcHJpb3Igb25lcy4KKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRD
aGlsZDEoRWRnZShvdGhlck5vZGUpKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGlkeCkgPSBub2RlOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG90
aGVyTm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAgICAgICAgICAgIC8vIFJlcGxhY2Ug
YWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBHZXRMb2NhbCB3aXRoIG90aGVyTm9kZS4KKyAgICAgICAg
ICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IG90aGVyTm9kZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChv
dGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOworICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1l
bnQgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgTm9kZSogcGhpID0gYWRkUGhpPG9wZXJhbmRLaW5k
Pihub2RlLT5jb2RlT3JpZ2luLCB2YXJpYWJsZSwgaWR4KTsKKyAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uc2V0Q2hpbGQxKEVkZ2UocGhpKSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9IHBoaTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRLaW5kPihpZHgpID0gbm9kZTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2NhbChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKQorICAg
ICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8QXJndW1lbnRPcGVyYW5kPihub2RlLCB2
YXJpYWJsZSwgb3BlcmFuZFRvQXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgY2Fub25pY2FsaXplR2V0TG9jYWxGb3I8TG9jYWxPcGVyYW5kPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNhbm9uaWNhbGl6ZVNldExvY2FsKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBtX2Jsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2RlKTsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8Tm9kZVR5cGUgbm9kZVR5cGUsIE9wZXJhbmRLaW5kIG9wZXJh
bmRLaW5kPgorICAgIHZvaWQgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcihOb2Rl
KiBub2RlLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBzaXplX3QgaWR4KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
Tm9kZSogb3RoZXJOb2RlID0gbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRL
aW5kPihpZHgpKSB7CisgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSA9PSB2YXJpYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAo
b3RoZXJOb2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAg
Y2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAg
ICAgICAgIG90aGVyTm9kZSA9IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKG90aGVy
Tm9kZS0+b3AoKSA9PSBQaGkgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldExvY2FsIHx8IG90aGVy
Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChub2RlVHlwZSA9PSBQaGFudG9tTG9jYWwgJiYgb3RoZXJOb2RlLT5vcCgpID09IFNldExvY2Fs
KSB7CisgICAgICAgICAgICAgICAgLy8gUGhhbnRvbUxvY2FsKFNldExvY2FsKSBkb2Vzbid0IG1h
a2Ugc2Vuc2UuIFBoYW50b21Mb2NhbCBtZWFuczogYXQgdGhpcworICAgICAgICAgICAgICAgIC8v
IHBvaW50IEkga25vdyBJIHdvdWxkIGhhdmUgYmVlbiBpbnRlcmVzdGVkIGluIHRoZSB2YWx1ZSBv
ZiB0aGlzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBwdXJwb3NlIG9mIE9T
Ui4gUGhhbnRvbUxvY2FsKFNldExvY2FsKSBtZWFuczogYXQgdGhpcyBwb2ludCBJCisgICAgICAg
ICAgICAgICAgLy8ga25vdyB0aGF0IEkgd291bGQgaGF2ZSByZWFkIHRoZSB2YWx1ZSB3cml0dGVu
IGJ5IHRoYXQgU2V0TG9jYWwuIFRoaXMgaXMKKyAgICAgICAgICAgICAgICAvLyByZWR1bmRhbnQg
YW5kIGluZWZmaWNpZW50LCBzaW5jZSByZWFsbHkgaXQganVzdCBtZWFucyB0aGF0IHdlIHdhbnQg
dG8KKyAgICAgICAgICAgICAgICAvLyBiZSBrZWVwaW5nIHRoZSBvcGVyYW5kIHRvIHRoZSBTZXRM
b2NhbCBhbGl2ZS4gVGhlIFNldExvY2FsIG1heSBkaWUsIGFuZAorICAgICAgICAgICAgICAgIC8v
IHdlJ2xsIGJlIGZpbmUgYmVjYXVzZSBPU1IgdHJhY2tzIGRlYWQgU2V0TG9jYWxzLgorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFNvIHdlIHR1cm4gdGhpcyBpbnRvIGEgUGhh
bnRvbSBvbiB0aGUgY2hpbGQgb2YgdGhlIFNldExvY2FsLgorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShvdGhlck5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIFRoZXJlIGlzIG5vdGhpbmcgd3Jvbmcgd2l0aCBoYXZpbmcgcmVkdW5kYW50
IEZsdXNoJ3MuIEl0IGp1c3QgbmVlZHMgdG8KKyAgICAgICAgICAgIC8vIGJlIGxpbmtlZCBhcHBy
b3ByaWF0ZWx5LiBOb3RlIHRoYXQgaWYgdGhlcmUgaGFkIGFscmVhZHkgYmVlbiBhIHByZXZpb3Vz
CisgICAgICAgICAgICAvLyB1c2UgYXQgdGFpbCB0aGVuIHdlIGRvbid0IG92ZXJyaWRlIGl0LiBJ
dCdzIGZpbmUgZm9yIHZhcmlhYmxlc0F0VGFpbCB0bworICAgICAgICAgICAgLy8gb21pdCBGbHVz
aGVzIGFuZCBQaGFudG9tTG9jYWxzLiBPbiB0aGUgb3RoZXIgaGFuZCwgaGF2aW5nIGl0IHJlZmVy
IHRvIGEKKyAgICAgICAgICAgIC8vIEZsdXNoIG9yIGEgUGhhbnRvbUxvY2FsIGlmIGp1c3QgYmVm
b3JlIGl0IHRoZSBsYXN0IHVzZSB3YXMgYSBHZXRMb2NhbCB3b3VsZAorICAgICAgICAgICAgLy8g
c2VyaW91c2x5IGNvbmZ1c2UgdGhlIENGQS4KKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNl
dENoaWxkMShFZGdlKG90aGVyTm9kZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShhZGRQaGk8
b3BlcmFuZEtpbmQ+KG5vZGUtPmNvZGVPcmlnaW4sIHZhcmlhYmxlLCBpZHgpKSk7CisgICAgICAg
IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9IG5vZGU7
CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4
KSA9IG5vZGU7CisgICAgfQorCisgICAgdGVtcGxhdGU8Tm9kZVR5cGUgbm9kZVR5cGU+CisgICAg
dm9pZCBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKE5vZGUqIG5vZGUpCisgICAgewor
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudCh2YXJpYWJsZS0+bG9jYWwo
KSkpCisgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVU
eXBlLCBBcmd1bWVudE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCBvcGVyYW5kVG9Bcmd1bWVudCh2
YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYW5vbmljYWxp
emVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBMb2NhbE9wZXJhbmQ+KG5vZGUsIHZh
cmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2Fub25p
Y2FsaXplU2V0QXJndW1lbnQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGludCBsb2NhbCA9
IG5vZGUtPmxvY2FsKCk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kSXNBcmd1bWVudChsb2NhbCkp
OworICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kVG9Bcmd1bWVudChsb2NhbCk7CisgICAg
ICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVu
dCwgbm9kZSk7CisgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRBcmd1bWVudEZp
cnN0VGltZShhcmd1bWVudCwgbm9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2Fub25pY2Fs
aXplTG9jYWxzSW5CbG9jaygpCisgICAgeworICAgICAgICBpZiAoIW1fYmxvY2spCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChtX2Jsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAg
ICAgIAorICAgICAgICBjbGVhclZhcmlhYmxlc0F0SGVhZEFuZFRhaWw8QXJndW1lbnRPcGVyYW5k
PigpOworICAgICAgICBjbGVhclZhcmlhYmxlc0F0SGVhZEFuZFRhaWw8TG9jYWxPcGVyYW5kPigp
OworICAgICAgICAKKyAgICAgICAgLy8gQXNzdW1lcyB0aGF0IGFsbCBwaGkgcmVmZXJlbmNlcyBo
YXZlIGJlZW4gcmVtb3ZlZC4gQXNzdW1lcyB0aGF0IHRoaW5ncyB0aGF0CisgICAgICAgIC8vIHNo
b3VsZCBiZSBsaXZlIGhhdmUgYSBub24temVybyByZWYgY291bnQsIGJ1dCBkb2Vzbid0IGFzc3Vt
ZSB0aGF0IHRoZSByZWYKKyAgICAgICAgLy8gY291bnRzIGFyZSBjb3JyZWN0IGJleW9uZCB0aGF0
IChtb3JlIGZvcm1hbGx5ICEhbG9naWNhbFJlZkNvdW50ID09ICEhYWN0dWFsUmVmQ291bnQKKyAg
ICAgICAgLy8gYnV0IG5vdCBsb2dpY2FsUmVmQ291bnQgPT0gYWN0dWFsUmVmQ291bnQpLiBBc3N1
bWVzIHRoYXQgaXQgY2FuIGJyZWFrIHJlZgorICAgICAgICAvLyBjb3VudHMuCisgICAgICAgIAor
ICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IG1fYmxvY2st
PnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLnBlcmZv
cm1TdWJzdGl0dXRpb24obm9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBy
dWxlcyBmb3IgdGhyZWFkZWQgQ1BTIGZvcm06CisgICAgICAgICAgICAvLyAKKyAgICAgICAgICAg
IC8vIEhlYWQgdmFyaWFibGU6IHRoZSBmaXJzdCB0aGluZyB0aGF0IGhhcHBlbmVkIHRvIHRoZSB2
YXJpYWJsZSBpbiB0aGUgYmxvY2suCisgICAgICAgICAgICAvLyBJdCBtYXkgYmUgYSBGbHVzaCwg
UGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwgU2V0TG9jYWwsIG9yIFNldEFyZ3VtZW50LgorICAgICAg
ICAgICAgLy8gU2V0QXJndW1lbnQgbWF5IG9ubHkgYXBwZWFyIGluIHRoZSByb290IGJsb2NrLgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRhaWwgdmFyaWFibGU6IHRoZSBsYXN0IHRo
aW5nIHRoYXQgaGFwcGVuZWQgdG8gdGhlIHZhcmlhYmxlIGluIHRoZSBibG9jay4KKyAgICAgICAg
ICAgIC8vIEl0IG1heSBiZSBhIEZsdXNoLCBQaGFudG9tTG9jYWwsIEdldExvY2FsLCBTZXRMb2Nh
bCwgb3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCBtYXkgb25seSBh
cHBlYXIgaW4gdGhlIHJvb3QgYmxvY2suIE5vdGUgdGhhdCBpZiB0aGVyZSBldmVyCisgICAgICAg
ICAgICAvLyB3YXMgYSBHZXRMb2NhbCB0byB0aGUgdmFyaWFibGUsIGFuZCBpdCB3YXMgZm9sbG93
ZWQgYnkgUGhhbnRvbUxvY2FscyBhbmQKKyAgICAgICAgICAgIC8vIEZsdXNoZXMgYnV0IG5vdCBT
ZXRMb2NhbHMsIHRoZW4gdGhlIHRhaWwgdmFyaWFibGUgd2lsbCBiZSB0aGUgR2V0TG9jYWwuCisg
ICAgICAgICAgICAvLyBUaGlzIHJlZmxlY3RzIHRoZSBmYWN0IHRoYXQgeW91IG9ubHkgY2FyZSB0
aGF0IHRoZSB0YWlsIHZhcmlhYmxlIGlzIGEKKyAgICAgICAgICAgIC8vIEZsdXNoIG9yIFBoYW50
b21Mb2NhbCBpZiBub3RoaW5nIGVsc2UgaW50ZXJlc3RpbmcgaGFwcGVuZWQuCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gQ2hpbGQgb2YgR2V0TG9jYWw6IHRoZSBvcGVyYXRpb24gdGhh
dCB0aGUgR2V0TG9jYWwga2VlcHMgYWxpdmUuIEZvcgorICAgICAgICAgICAgLy8gdW5jYXB0dXJl
ZCBsb2NhbHMsIGl0IG1heSBiZSBhIFBoaSBmcm9tIHRoZSBjdXJyZW50IGJsb2NrLiBGb3IgYXJn
dW1lbnRzLAorICAgICAgICAgICAgLy8gaXQgbWF5IGJlIGEgU2V0QXJndW1lbnQuIEZvciBjYXB0
dXJlZCBsb2NhbHMgYW5kIGFyZ3VtZW50cyBpdCBtYXkgYWxzbyBiZQorICAgICAgICAgICAgLy8g
YSBTZXRMb2NhbC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBDaGlsZCBvZiBTZXRM
b2NhbDogbXVzdCBiZSBhIHZhbHVlIHByb2R1Y2luZyBub2RlLgorICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIC8vIENoaWxkIG9mIEZsdXNoOiBpdCBtYXkgYmUgYSBQaGkgZnJvbSB0aGUgY3Vy
cmVudCBibG9jayBvciBhIFNldExvY2FsLiBGb3IKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBp
dCBtYXkgYWxzbyBiZSBhIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIENoaWxkIG9mIFBoYW50b21Mb2NhbDogaXQgbWF5IGJlIGEgUGhpIGZyb20gdGhlIGN1cnJl
bnQgYmxvY2suIEZvcgorICAgICAgICAgICAgLy8gYXJndW1lbnRzIGl0IG1heSBhbHNvIGJlIGEg
U2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2hpbGRyZW4gb2Yg
UGhpOiBvdGhlciBQaGlzIGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrLCBvciBhbnkgb2YgdGhlCisg
ICAgICAgICAgICAvLyBmb2xsb3dpbmcgZnJvbSBmcm9tIHByZWRlY2Vzc29yIGJsb2NrczogU2V0
TG9jYWwsIFBoaSwgb3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLyBUaGVzZSBhcmUgY29t
cHV0ZWQgYnkgbG9va2luZyBhdCB0aGUgdGFpbCB2YXJpYWJsZXMgb2YgdGhlIHByZWRlY2Vzc29y
CisgICAgICAgICAgICAvLyBibG9ja3MgYW5kIGVpdGhlciB1c2luZyBpdCBkaXJlY3RseSAoaWYg
aXQncyBhIFNldExvY2FsLCBQaGksIG9yCisgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCkgb3Ig
bG9hZGluZyB0aGF0IG5vZGVzIGNoaWxkIChpZiBpdCdzIGEgR2V0TG9jYWwsIFBoYW5vbUxvY2Fs
LAorICAgICAgICAgICAgLy8gb3IgRmx1c2ggLSBhbGwgb2YgdGhlc2Ugd2lsbCBoYXZlIGNoaWxk
cmVuIHRoYXQgYXJlIFNldExvY2FsLCBQaGksIG9yCisgICAgICAgICAgICAvLyBTZXRBcmd1bWVu
dCkuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRM
b2NhbChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXplU2V0
TG9jYWwobm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNo
T3JQaGFudG9tTG9jYWw8Rmx1c2g+KG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAg
ICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbDxQaGFudG9tPihub2RlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
U2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXplU2V0QXJndW1lbnQobm9k
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MoKQor
ICAgIHsKKyAgICAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDUFMgUmV0
aHJlYWRpbmc6IGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzIik7CisgICAgICAgIAorICAgICAg
ICBmb3IgKG1fYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBtX2Jsb2NrSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW21fYmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtp
bmQ+CisgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKKyAgICB7CisgICAgICAgIFZlY3RvcjxQaGlT
dGFja0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9IG9wZXJhbmRLaW5kID09IEFyZ3VtZW50T3BlcmFu
ZCA/IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsKKyAgICAgICAgCisgICAg
ICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ1BTIFJldGhyZWFkaW5nOiBw
cm9wYWdhdGVQaGlzIik7CisgICAgICAgIAorICAgICAgICAvLyBFbnN1cmUgdGhhdCBhdHRlbXB0
cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KKyAgICAgICAgbV9ibG9jayA9IDA7CisgICAg
ICAgIG1fYmxvY2tJbmRleCA9IE5vQmxvY2s7CisgICAgICAgIAorICAgICAgICB3aGlsZSAoIXBo
aVN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgUGhpU3RhY2tFbnRyeSBlbnRyeSA9IHBo
aVN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgIHBoaVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBlbnRyeS5tX2Jsb2NrOwor
ICAgICAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBibG9jay0+bV9wcmVk
ZWNlc3NvcnM7CisgICAgICAgICAgICBOb2RlKiBjdXJyZW50UGhpID0gZW50cnkubV9waGk7Cisg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY3VycmVudFBoaS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSBlbnRyeS5tX2lu
ZGV4OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gcHJlZGVjZXNz
b3JzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vz
c29yQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogdmFyaWFibGVJblByZXZpb3VzID0g
cHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRLaW5kPihpbmRl
eCk7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZUluUHJldmlvdXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGVJblByZXZpb3VzID0gYWRkUGhpPG9wZXJhbmRLaW5kPihwcmVk
ZWNlc3NvckJsb2NrLCBjdXJyZW50UGhpLT5jb2RlT3JpZ2luLCB2YXJpYWJsZSwgaW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRG
b3I8b3BlcmFuZEtpbmQ+KGluZGV4KSA9IHZhcmlhYmxlSW5QcmV2aW91czsKKyAgICAgICAgICAg
ICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9wZXJhbmRL
aW5kPihpbmRleCkgPSB2YXJpYWJsZUluUHJldmlvdXM7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJsZUluUHJldmlvdXMtPm9wKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFibGVJblByZXZpb3VzLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUluUHJldmlvdXMtPmNoaWxkMSgpLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluUHJldmlvdXMg
PSB2YXJpYWJsZUluUHJldmlvdXMtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKAorICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZUluUHJldmlvdXMtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAg
ICAgICAgICAgICAgfHwgdmFyaWFibGVJblByZXZpb3VzLT5vcCgpID09IFBoaQorICAgICAgICAg
ICAgICAgICAgICB8fCB2YXJpYWJsZUluUHJldmlvdXMtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwor
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghY3VycmVudFBoaS0+Y2hpbGQxKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBoaS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uo
dmFyaWFibGVJblByZXZpb3VzKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRQaGktPmNoaWxkMigp
KSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQaGktPmNoaWxkcmVuLnNldENoaWxkMihF
ZGdlKHZhcmlhYmxlSW5QcmV2aW91cykpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50UGhpLT5jaGls
ZDMoKSkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGhpLT5jaGlsZHJlbi5zZXRDaGls
ZDMoRWRnZSh2YXJpYWJsZUluUHJldmlvdXMpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IE5vZGUqIG5ld1BoaSA9IGFkZFBoaVNpbGVudGx5KGJsb2NrLCBjdXJyZW50UGhpLT5jb2RlT3Jp
Z2luLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgbmV3UGhpLT5jaGlsZHJlbiA9IGN1cnJl
bnRQaGktPmNoaWxkcmVuOworICAgICAgICAgICAgICAgIGN1cnJlbnRQaGktPmNoaWxkcmVuLmlu
aXRpYWxpemUobmV3UGhpLCB2YXJpYWJsZUluUHJldmlvdXMsIDApOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0cnVjdCBQaGlTdGFja0VudHJ5IHsKKyAgICAg
ICAgUGhpU3RhY2tFbnRyeShCYXNpY0Jsb2NrKiBibG9jaywgc2l6ZV90IGluZGV4LCBOb2RlKiBw
aGkpCisgICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgICAgICAsIG1faW5kZXgo
aW5kZXgpCisgICAgICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgICAgICBzaXplX3QgbV9p
bmRleDsKKyAgICAgICAgTm9kZSogbV9waGk7CisgICAgfTsKKyAgICAKKyAgICB0ZW1wbGF0ZTxP
cGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYg
cGhpU3RhY2tGb3IoKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFyZ3VtZW50
T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50UGhpU3RhY2s7CisgICAgICAg
IHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CisgICAgfQorICAgIAorICAgIEJsb2NrSW5kZXggbV9i
bG9ja0luZGV4OworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgVmVjdG9yPFBoaVN0YWNr
RW50cnksIDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOworICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5
LCAxMjg+IG1fbG9jYWxQaGlTdGFjazsKK307CisKK2Jvb2wgcGVyZm9ybUNQU1JldGhyZWFkaW5n
KEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZH
IENQUyBSZXRocmVhZGluZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxDUFNSZXRocmVh
ZGluZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHQ1BTUmV0aHJlYWRpbmdQaGFzZV9oCisjZGVmaW5lIERGR0NQ
U1JldGhyZWFkaW5nUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBHcmFwaDsKKworLy8gQ1BTIFJldGhyZWFkaW5nOgorLy8KKy8vIFRha2VzIGEgZ3JhcGggaW4g
d2hpY2ggdGhlcmUgYXJlIGFyYml0cmFyeSBHZXRMb2NhbHMvU2V0TG9jYWxzIHdpdGggbm8gY29u
bmVjdGlvbnMKKy8vIGJldHdlZW4gdGhlbS4gUmVtb3ZlcyByZWR1bmRhbnQgb25lcyBpbiB0aGUg
Y2FzZSBvZiB1bmNhcHR1cmVkIHZhcmlhYmxlcy4gQ29ubmVjdHMKKy8vIGFsbCBvZiB0aGVtIHdp
dGggUGhpIGZ1bmN0aW9ucyB0byByZXByZXNlbnQgbGl2ZSByYW5nZXMuCisKK2Jvb2wgcGVyZm9y
bUNQU1JldGhyZWFkaW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc0LDI3ICs5NzQsNiBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIHBlcmZvcm1TdWJzdGl0
dXRpb24oRWRnZSYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKLSAgICB7Ci0gICAgICAgIC8v
IENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCi0gICAgICAgIGlmICgh
Y2hpbGQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICAvLyBDaGVjayBp
ZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCi0gICAgICAgIE5vZGUqIHJlcGxhY2VtZW50ID0g
Y2hpbGQtPnJlcGxhY2VtZW50OwotICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgY2hpbGQuc2V0Tm9kZShyZXBsYWNlbWVudCk7
Ci0gICAgICAgIAotICAgICAgICAvLyBUaGVyZSBpcyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQu
IEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBkb2VzIG5vdAotICAgICAgICAvLyBoYXZlIGEg
cmVwbGFjZW1lbnQuCi0gICAgICAgIEFTU0VSVCghY2hpbGQtPnJlcGxhY2VtZW50KTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChhZGRSZWYpCi0gICAgICAgICAgICBtX2dyYXBoLnJlZihjaGlsZCk7
Ci0gICAgfQotICAgIAogICAgIHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJl
bihOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhhbnRv
bSk7CkBAIC0xMDcyLDIxICsxMDUxLDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBwZXJm
b3JtTm9kZUNTRShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgYm9vbCBzaG91bGRHZW5lcmF0
ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkg
JiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2Rl
LT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJz
dGl0dXRpb24obV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJh
dGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihu
b2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVy
Zm9ybVN1YnN0aXR1dGlvbihub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUp
OwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLT5jaGlsZHJlbi5jaGlsZDMo
KSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICB9CisgICAgICAgIG1fZ3JhcGgucGVyZm9ybVN1
YnN0aXR1dGlvbihub2RlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNl
dExvY2FsKQogICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVJlbGV2
YW50VG9PU1IpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFzaG91bGRHZW5lcmF0ZSkKKyAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0xMTYy
LDI2ICsxMTMyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBwaGkgPSBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBpZiAoIXNldFJlcGxhY2VtZW50KHBvc3NpYmxl
UmVwbGFjZW1lbnQpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gSWYg
dGhlIEdldExvY2FsIHdlIHJlcGxhY2VkIHVzZWQgdG8gcmVmZXIgdG8gYSBTZXRMb2NhbCwgdGhl
biBpdCBub3cKLSAgICAgICAgICAgIC8vIHNob3VsZCByZWZlciB0byB0aGUgY2hpbGQgb2YgdGhl
IFNldExvY2FsIGluc3RlYWQuCi0gICAgICAgICAgICBpZiAocGhpLT5vcCgpID09IFNldExvY2Fs
KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpID09IHBoaSk7Ci0gICAg
ICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBw
aGktPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGUqIG9sZFRhaWwg
PSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQoCi0gICAgICAgICAgICAg
ICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKLSAgICAgICAgICAgIGlmIChvbGRUYWls
ID09IG5vZGUpIHsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9Ci0gICAgICAgICAgICAg
ICAgICAgIHJlbGV2YW50TG9jYWxPcDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAvLyBNYWludGFpbiBncmFwaCBpbnRlZ3JpdHk6IHNpbmNlIHdlJ3JlIHJlcGxhY2luZyBhIEdl
dExvY2FsIHdpdGggYSBHZXRMb2NhbFVubGlua2VkLAotICAgICAgICAgICAgICAgIC8vIG1ha2Ug
c3VyZSB0aGF0IHRoZSBHZXRMb2NhbFVubGlua2VkIGlzIG5vdyBsaW5rZWQuCi0gICAgICAgICAg
ICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+c2V0T3AoR2V0TG9jYWwpOwotICAg
ICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRn
ZShwaGkpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGkpOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSByZXBsYWNlIGEgR2V0TG9jYWwgd2l0
aCBhIEdldExvY2FsVW5saW5rZWQsIHRoZW4gdHVybiB0aGUgR2V0TG9jYWxVbmxpbmtlZAorICAg
ICAgICAgICAgLy8gaW50byBhIEdldExvY2FsLgorICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9j
YWxPcC0+b3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKSB7CisgICAgICAgICAgICAgICAgcmVsZXZh
bnRMb2NhbE9wLT5jb252ZXJ0VG9HZXRMb2NhbCh2YXJpYWJsZUFjY2Vzc0RhdGEsIHBoaSk7Cisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYocGhpKTsKICAgICAgICAgICAgIH0KKwogICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC0xMjM1LDkgKzExOTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFu
ZERlcmVmQ2hpbGQxKG5vZGUpOwogICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkg
PSBFZGdlKGRhdGFOb2RlKTsKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGRhdGFOb2RlKTsKLSAg
ICAgICAgICAgIE5vZGUqIG9sZFRhaWwgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQobG9jYWwpOwotICAgICAgICAgICAgaWYgKG9sZFRhaWwgPT0gbm9kZSkKLSAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwp
ID0gcmVwbGFjZW1lbnQ7CisgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDE0MjE2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksNSArMzksNTcgQEAgdm9pZCBOb2RlUG9pbnRlclRyYWl0czo6ZHVtcChOb2Rl
KiB2YWx1ZQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpERkc6Ok9wdGltaXph
dGlvbkZpeHBvaW50U3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNh
c2UgSlNDOjpERkc6OkJlZm9yZUZpeHBvaW50OgorICAgICAgICBvdXQucHJpbnQoIkJlZm9yZUZp
eHBvaW50Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpERkc6OkZpeHBvaW50Tm90
Q29udmVyZ2VkOgorICAgICAgICBvdXQucHJpbnQoIkZpeHBvaW50Tm90Q29udmVyZ2VkIik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpERkc6OkZpeHBvaW50Q29udmVyZ2VkOgorICAg
ICAgICBvdXQucHJpbnQoIkZpeHBvaW50Q29udmVyZ2VkIik7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IEpTQzo6REZHOjpHcmFwaEZvcm0gZm9ybSkKK3sKKyAgICBzd2l0Y2ggKGZvcm0pIHsKKyAgICBj
YXNlIEpTQzo6REZHOjpMb2FkU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiTG9hZFN0b3JlIik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpERkc6OlRocmVhZGVkQ1BTOgorICAgICAg
ICBvdXQucHJpbnQoIlRocmVhZGVkQ1BTIik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6REZH
OjpVbmlmaWNhdGlvblN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBj
YXNlIEpTQzo6REZHOjpMb2NhbGx5VW5pZmllZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2NhbGx5
VW5pZmllZCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpTQzo6REZHOjpHbG9iYWxseVVu
aWZpZWQ6CisgICAgICAgIG91dC5wcmludCgiR2xvYmFsbHlVbmlmaWVkIik7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiArMTQ2LDE1IEBAIGlubGluZSBib29s
IHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKQogI2VuZGlmCiB9CiAKK2lubGluZSBib29sIGxv
Z0NvbXBpbGF0aW9uQ2hhbmdlcygpCit7CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQor
ICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gdmVyYm9zZUNvbXBpbGF0aW9uRW5h
YmxlZCgpIHx8IE9wdGlvbnM6OmxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpOworI2VuZGlmCit9CisK
IGlubGluZSBib29sIHNob3VsZER1bXBHcmFwaEF0RWFjaFBoYXNlKCkKIHsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0xNjYsOCArMTc1LDcwIEBAIGVudW0g
Tm9SZXN1bHRUYWcgeyBOb1Jlc3VsdCB9OwogCiBlbnVtIE9wdGltaXphdGlvbkZpeHBvaW50U3Rh
dGUgeyBCZWZvcmVGaXhwb2ludCwgRml4cG9pbnROb3RDb252ZXJnZWQsIEZpeHBvaW50Q29udmVy
Z2VkIH07CiAKKy8vIERlc2NyaWJlcyB0aGUgZm9ybSB5b3UgY2FuIGV4cGVjdCB0aGUgZW50aXJl
IGdyYXBoIHRvIGJlIGluLgorZW51bSBHcmFwaEZvcm0geworICAgIC8vIExvYWRTdG9yZSBmb3Jt
IG1lYW5zIHRoYXQgYmFzaWMgYmxvY2tzIG1heSBmcmVlbHkgdXNlIEdldExvY2FsLCBTZXRMb2Nh
bCwKKyAgICAvLyBHZXRMb2NhbFVubGlua2VkLCBhbmQgRmx1c2ggZm9yIGFjY2Vzc2luZyBsb2Nh
bCB2YXJpYWJsZXMgYW5kIGluZGljYXRpbmcKKyAgICAvLyB3aGVyZSB0aGVpciBsaXZlIHJhbmdl
cyBvdWdodCB0byBiZS4gTGl2ZW5lc3MgaXMgaW1wbGljaXQsIGFzIGlzIHRoZSBkYXRhCisgICAg
Ly8gZmxvdyBiZXR3ZWVuIGxvY2FsIGFjY2Vzc2VzLiBGb3IgZXhhbXBsZSwgTG9hZFN0b3JlIGZv
cm0gZ2l2ZXMgbm8gZWFzeSB3YXkKKyAgICAvLyB0byBkZXRlcm1pbmUgd2hpY2ggU2V0TG9jYWwn
cyBmbG93IGludCBvIGEgR2V0TG9jYWwuIEFzIHdlbGwsIExvYWRTdG9yZQorICAgIC8vIGZvcm0g
aW1wbGllcyBubyByZXN0cmljdGlvbnMgb24gcmVkdW5kYW5jeTogeW91IGNhbiBmcmVlbHkgZW1p
dCBtdWx0aXBsZQorICAgIC8vIEdldExvY2Fscywgb3IgbXVsdGlwbGUgU2V0TG9jYWxzIChvciBh
bnkgY29tYmluYXRpb24gdGhlcmVvZikgdG8gdGhlIHNhbWUKKyAgICAvLyBsb2NhbCBpbiB0aGUg
c2FtZSBibG9jay4gTG9hZFN0b3JlIGZvcm0gZG9lcyBub3QgcmVxdWlyZSBiYXNpYyBibG9ja3Mg
dG8KKyAgICAvLyBkZWNsYXJlIGhvdyB0aGV5IGFmZmVjdCBvciB1c2UgbG9jYWxzLCBvdGhlciB0
aGFuIGltcGxpY2l0bHkgYnkgdXNpbmcKKyAgICAvLyB0aGUgbG9jYWwgb3BzLiBGaW5hbGx5LCBM
b2FkU3RvcmUgYWxsb3dzIGZsZXhpYmlsaXR5IGluIGhvdyBsaXZlbmVzcyBvZgorICAgIC8vIGxv
Y2FscyBpcyBleHRlbmRlZDsgZm9yIGV4YW1wbGUgeW91IGNhbiByZXBsYWNlIGEgR2V0TG9jYWwg
d2l0aCBhIFBoYW50b20KKyAgICAvLyBhbmQgc28gbG9uZyBhcyB0aGUgUGhhbnRvbSByZXRhaW5z
IHRoZSBHZXRMb2NhbCdzIGNoaWxkcmVuIChpLmUuIHRoZSBQaGkKKyAgICAvLyBtb3N0IGxpa2Vs
eSkgdGhlbiBpdCBpbXBsaWVzIHRoYXQgdGhlIGxvY2FsIGlzIHN0aWxsIGxpdmUgYnV0IHRoYXQg
aXQgbmVlZAorICAgIC8vIG5vdCBiZSBzdG9yZWQgdG8gdGhlIHN0YWNrIG5lY2Vzc2FyaWx5LiBU
aGlzIGltcGxpZXMgdGhhdCBQaGFudG9tIGNhbgorICAgIC8vIHJlZmVyZW5jZSBub2RlcyB0aGF0
IGhhdmUgbm8gcmVzdWx0LCBhcyBsb25nIGFzIHRob3NlIG5vZGVzIGFyZSB2YWxpZAorICAgIC8v
IEdldExvY2FsIGNoaWxkcmVuIChpLmUuIFBoaSwgU2V0TG9jYWwsIFNldEFyZ3VtZW50KS4KKyAg
ICAvLworICAgIC8vIExvYWRTdG9yZSBmb3JtIGFsc28gaW1wbGllcyB0aGF0IFBoaXMgdGhlbXNl
bHZlcyBjYW4gaGF2ZSBhcmJpdHJhcnkKKyAgICAvLyBjaGlsZHJlbi4gUGhpIGNoaWxkcmVuIGNv
dWxkIGV2ZW4gYmUgZGFuZ2xpbmcsIGFuZCBzaG91bGQgbm90IGJlIHJlbGllZAorICAgIC8vIHVw
b24uCisgICAgLy8KKyAgICAvLyBMb2FkU3RvcmUgZm9ybSBpcyBzdWl0YWJsZSBmb3IgQ0ZHIHRy
YW5zZm9ybWF0aW9ucywgYXMgd2VsbCBhcyBzdHJlbmd0aAorICAgIC8vIHJlZHVjdGlvbiwgZm9s
ZGluZywgYW5kIENTRS4KKyAgICBMb2FkU3RvcmUsCisgICAgCisgICAgLy8gVGhyZWFkZWRDUFMg
Zm9ybSBtZWFucyB0aGF0IGJhc2ljIGJsb2NrcyBsaXN0IHVwLWZyb250IHdoaWNoIGxvY2FscyB0
aGV5CisgICAgLy8gZXhwZWN0IHRvIGJlIGxpdmUgYXQgdGhlIGhlYWQsIGFuZCB3aGljaCBsb2Nh
bHMgdGhleSBtYWtlIGF2YWlsYWJsZSBhdCB0aGUKKyAgICAvLyB0YWlsLiBUaHJlYWRlZENQUyBm
b3JtIGFsc28gaW1wbGllcyB0aGF0OgorICAgIC8vCisgICAgLy8gLSBHZXRMb2NhbHMgYW5kIFNl
dExvY2FscyB0byB1bmNhcHR1cmVkIHZhcmlhYmxlcyBhcmUgbm90IHJlZHVuZGFudCB3aXRoaW4K
KyAgICAvLyAgIGEgYmFzaWMgYmxvY2suCisgICAgLy8KKyAgICAvLyAtIEFsbCBHZXRMb2NhbHMg
YW5kIEZsdXNoZXMgYXJlIGxpbmtlZCBkaXJlY3RseSB0byB0aGUgbGFzdCBhY2Nlc3MgcG9pbnQK
KyAgICAvLyAgIG9mIHRoZSB2YXJpYWJsZSwgd2hpY2ggbXVzdCBub3QgYmUgYW5vdGhlciBHZXRM
b2NhbCBpZiB0aGUgdmFyaWFibGUgaXMKKyAgICAvLyAgIHVuY2FwdHVyZWQuCisgICAgLy8KKyAg
ICAvLyAtIFBoYW50b20oUGhpKSBpcyBub3QgbGVnYWwsIGJ1dCBQaGFudG9tTG9jYWwgaXMuCisg
ICAgLy8KKyAgICAvLyBUaHJlYWRlZENQUyBmb3JtIGlzIHN1aXRhYmxlIGZvciBkYXRhIGZsb3cg
YW5hbHlzaXMgKENGQSwgcHJlZGljdGlvbgorICAgIC8vIHByb3BhZ2F0aW9uKSwgcmVnaXN0ZXIg
YWxsb2NhdGlvbiwgYW5kIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICBUaHJlYWRlZENQUworfTsKKwor
Ly8gRGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiB0aGUgVW5pb25GaW5kIHN0cnVjdHVyZSBvZiBWYXJp
YWJsZUFjY2Vzc0RhdGEncy4KK2VudW0gVW5pZmljYXRpb25TdGF0ZSB7CisgICAgLy8gQmFzaWNC
bG9jay1sb2NhbCBhY2Nlc3NlcyB0byB2YXJpYWJsZXMgYXJlIGFwcHJvcHJpYXRlbHkgdW5pZmll
ZCB3aXRoIGVhY2ggb3RoZXIuCisgICAgTG9jYWxseVVuaWZpZWQsCisgICAgCisgICAgLy8gVW5p
ZmljYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkIGdsb2JhbGx5LgorICAgIEdsb2JhbGx5VW5pZmll
ZAorfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCituYW1lc3BhY2UgV1RGIHsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6Ok9wdGltaXphdGlvbkZp
eHBvaW50U3RhdGUpOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6
OkdyYXBoRm9ybSk7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6
VW5pZmljYXRpb25TdGF0ZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDYzICszMjMs
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IEdldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogcHJldmlvdXNMb2NhbEFjY2VzcyA9
IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9PSBub2RlCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxk
MSgpLT5vcCgpID09IFBoaSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBleHBlY3QgdGhp
cyB0byBiZSB0aGUgY29tbW9uIGNhc2UuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9j
ay0+aXNJblBoaXMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9
IHByZXZpb3VzTG9jYWxBY2Nlc3M7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGluZGV4SW5CbG9jayA+IDApOwotICAgICAgICAgICAgICAgICAg
ICAvLyBNdXN0IHNlYXJjaCBmb3IgdGhlIHByZXZpb3VzIGFjY2VzcyB0byB0aGlzIGxvY2FsLgot
ICAgICAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggc3ViSW5kZXhJbkJsb2NrID0gaW5k
ZXhJbkJsb2NrOyBzdWJJbmRleEluQmxvY2stLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIHN1Yk5vZGUgPSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghc3ViTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
c3ViTm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+bG9j
YWwoKSAhPSBub2RlLT5sb2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHR3byBtdXN0IGhhdmUgYmVlbiB1
bmlmaWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN1Yk5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBzdWJOb2RlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwcmV2aW91c0xvY2FsQWNjZXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUaGUgcHJldmlvdXMgYWNjZXNzIG11c3QgaGF2ZSBiZWVuIGEgUGhpLgotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHBoaUluZGV4SW5CbG9jayA9IGJsb2NrLT5w
aGlzLnNpemUoKTsgcGhpSW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW3BoaUluZGV4SW5CbG9ja107Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+bG9jYWwoKSAhPSBub2RlLT5sb2NhbCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUaGUgdHdvIG11c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmV2aW91c0xvY2FsQWNjZXNzID0gcGhpTm9kZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgQVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nlc3MpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIE5vZGUqIHRhaWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KG5vZGUtPmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmICh0YWlsTm9kZSA9PSBub2RlKQot
ICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoCi0gICAgICAgICAgICAgICAgICAgICAgICB0YWls
Tm9kZS0+b3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGFpbE5vZGUt
Pm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzQ2FwdHVyZWRB
dE9yQWZ0ZXIoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgIEFkamFjZW5j
eUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKLSAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1
ZSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
IFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkcmVuKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE0MjE2MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE1
IEBACiAjaW5jbHVkZSAiREZHQnl0ZUNvZGVQYXJzZXIuaCIKICNpbmNsdWRlICJERkdDRkFQaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNs
dWRlICJERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgorI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmgiCisjaW5jbHVk
ZSAiREZHVW5pZmljYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCiAjaW5j
bHVkZSAiREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgpAQCAtNzIsNyArNzUsNyBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVN
b2RlIGNvbXBpbGVNCiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisg
ICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQogICAgICAgICBkYXRhTG9nKCJERkcgY29t
cGlsaW5nICIsICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2Rl
QmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CiAgICAgCiAgICAgLy8gRGVyaXZlIG91
ciBzZXQgb2YgbXVzdC1oYW5kbGUgdmFsdWVzLiBUaGUgY29tcGlsYXRpb24gbXVzdCBiZSBhdCBs
ZWFzdCBjb25zZXJ2YXRpdmUKQEAgLTEwMiw5ICsxMDUsNiBAQCBpbmxpbmUgYm9vbCBjb21waWxl
KENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgaWYgKCFwYXJzZShleGVjLCBkZmcpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5j
dGlvbikKLSAgICAgICAgZGZnLnByZWRpY3RBcmd1bWVudFR5cGVzKCk7Ci0gICAgCiAgICAgLy8g
QnkgdGhpcyBwb2ludCB0aGUgREZHIGJ5dGVjb2RlIHBhcnNlciB3aWxsIGhhdmUgcG90ZW50aWFs
bHkgbXV0YXRlZCB2YXJpb3VzIHRhYmxlcwogICAgIC8vIGluIHRoZSBDb2RlQmxvY2suIFRoaXMg
aXMgYSBnb29kIHRpbWUgdG8gcGVyZm9ybSBhbiBlYXJseSBzaHJpbmssIHdoaWNoIGlzIG1vcmUK
ICAgICAvLyBwb3dlcmZ1bCB0aGFuIGEgbGF0ZSBvbmUuIEl0J3Mgc2FmZSB0byBkbyBzbyBiZWNh
dXNlIHdlIGhhdmVuJ3QgZ2VuZXJhdGVkIGFueSBjb2RlCkBAIC0xMTMsMjggKzExMyw0MyBAQCBp
bmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAKICAgICBpZiAodmFsaWRh
dGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsKKyAgICAKKyAgICBwZXJmb3Jt
Q1BTUmV0aHJlYWRpbmcoZGZnKTsKKyAgICBwZXJmb3JtVW5pZmljYXRpb24oZGZnKTsKKyAgICBw
ZXJmb3JtUHJlZGljdGlvbkluamVjdGlvbihkZmcpOworICAgIAorICAgIGlmICh2YWxpZGF0aW9u
RW5hYmxlZCgpKQorICAgICAgICB2YWxpZGF0ZShkZmcpOworICAgIAogICAgIHBlcmZvcm1QcmVk
aWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtRml4dXAoZGZnKTsKICAgICBwZXJm
b3JtU3RydWN0dXJlQ2hlY2tIb2lzdGluZyhkZmcpOworICAgIAogICAgIHVuc2lnbmVkIGNudCA9
IDE7CiAgICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50Tm90Q29udmVyZ2VkOwogICAg
IGZvciAoOzsgKytjbnQpIHsKLSAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQo
KSkKKyAgICAgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQogICAgICAgICAgICAgZGF0
YUxvZ0YoIkRGRyBiZWdpbm5pbmcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGl0ZXJhdGlvbiAjJXUu
XG4iLCBjbnQpOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCiAgICAg
ICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ29uc3RhbnRG
b2xkaW5nKGRmZyk7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUFyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uKGRmZyk7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9u
KGRmZyk7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNTRShkZmcpOworICAgICAgICAKICAg
ICAgICAgaWYgKCFjaGFuZ2VkKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAogICAgICAg
ICBkZmcucmVzZXRFeGl0U3RhdGVzKCk7CiAgICAgICAgIHBlcmZvcm1GaXh1cChkZmcpOworICAg
ICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICB9CisgICAgCiAgICAgZGZnLm1f
Zml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50Q29udmVyZ2VkOwogICAgIHBlcmZvcm1DU0UoZGZnKTsK
LSAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQorICAgIHBlcmZvcm1DUFNSZXRo
cmVhZGluZyhkZmcpOyAvLyBUaGlzIHNob3VsZCB1c3VhbGx5IGJlIGEgbm8tb3Agc2luY2UgQ1NF
IHJhcmVseSBkZXRocmVhZHMgdGhlIGdyYXBoLgorICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5n
ZXMoKSkKICAgICAgICAgZGF0YUxvZ0YoIkRGRyBvcHRpbWl6YXRpb24gZml4cG9pbnQgY29udmVy
Z2VkIGluICV1IGl0ZXJhdGlvbnMuXG4iLCBjbnQpOwogICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uKGRmZyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tX
aXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKICNp
bmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgpAQCAtNTMsNiArNTQsOCBAQCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBDCiAgICAgLCBtX29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgp
CiAgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKICAgICAsIG1fZml4
cG9pbnRTdGF0ZShCZWZvcmVGaXhwb2ludCkKKyAgICAsIG1fZm9ybShMb2FkU3RvcmUpCisgICAg
LCBtX3VuaWZpY2F0aW9uU3RhdGUoTG9jYWxseVVuaWZpZWQpCiB7CiAgICAgQVNTRVJUKG1fcHJv
ZmlsZWRCbG9jayk7CiB9CkBAIC0xOTUsOSArMTk4LDEzIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIs
IFJhd1BvaW50ZXIobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVj
dHVyZSksICIgLT4gIiwgUmF3UG9pbnRlcihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgp
Lm5ld1N0cnVjdHVyZSksICIpIik7CiAgICAgaWYgKG5vZGUtPmhhc0Z1bmN0aW9uKCkpIHsKICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiZnVuY3Rpb24oIiwgUmF3UG9pbnRlcihub2RlLT5mdW5j
dGlvbigpKSwgIiwgIik7Ci0gICAgICAgIGlmIChub2RlLT5mdW5jdGlvbigpLT5pbmhlcml0cygm
SlNGdW5jdGlvbjo6c19pbmZvKSkKLSAgICAgICAgICAgIG91dC5wcmludChGdW5jdGlvbkV4ZWN1
dGFibGVEdW1wKGpzQ2FzdDxKU0Z1bmN0aW9uKj4obm9kZS0+ZnVuY3Rpb24oKSktPmpzRXhlY3V0
YWJsZSgpKSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmlu
aGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKSB7CisgICAgICAgICAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4obm9kZS0+ZnVuY3Rpb24oKSk7CisgICAgICAg
ICAgICBpZiAoZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgb3V0
LnByaW50KCI8aG9zdCBmdW5jdGlvbj4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoRnVuY3Rpb25FeGVjdXRhYmxlRHVtcChmdW5jdGlvbi0+anNFeGVjdXRh
YmxlKCkpKTsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnQoIjxub3QgSlNG
dW5jdGlvbj4iKTsKICAgICAgICAgb3V0LnByaW50KCIpIik7CiAgICAgfQpAQCAtMzA0LDYgKzMx
MSw5IEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKIAogdm9pZCBH
cmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogeworICAgIGRhdGFMb2coIkRGRyBmb3IgIiwg
Q29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksICI6XG4i
KTsKKyAgICBkYXRhTG9nKCIgIEZpeHBvaW50IHN0YXRlOiAiLCBtX2ZpeHBvaW50U3RhdGUsICI7
IEZvcm06ICIsIG1fZm9ybSwgIjsgVW5pZmljYXRpb24gc3RhdGU6ICIsIG1fdW5pZmljYXRpb25T
dGF0ZSwgIlxuIik7CisgICAgCiAgICAgTm9kZSogbGFzdE5vZGUgPSAwOwogICAgIGZvciAoc2l6
ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKQEAgLTM3NywyMiArMzg3LDI3IEBAIHZvaWQg
R3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZSogb3ApCiAgICAgRE9fVE9fQ0hJTERSRU4ob3AsIGRl
cmVmKTsKIH0KIAotdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoKQordm9pZCBHcmFw
aDo6ZGV0aHJlYWQoKQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
ID49IDEpOwotICAgIGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVf
dD4obV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7Ci0gICAgICAgIFZhbHVl
UHJvZmlsZSogcHJvZmlsZSA9IG1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1l
bnQoYXJnKTsKLSAgICAgICAgaWYgKCFwcm9maWxlKQorICAgIGlmIChtX2Zvcm0gPT0gTG9hZFN0
b3JlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdl
cygpKQorICAgICAgICBkYXRhTG9nKCJEZXRocmVhZGluZyBERkcgZ3JhcGguXG4iKTsKKyAgICAK
KyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIERldGhyZWFkaW5nIik7Cisg
ICAgCisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2Jsb2Nrcy5zaXplKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAKLSAgICAgICAgbV9hcmd1bWVudHNbYXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPnByZWRpY3QocHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkpOwotICAgICAg
ICAKLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coCi0gICAg
ICAgICAgICAiQXJndW1lbnQgWyIsIGFyZywgIl0gcHJlZGljdGlvbjogIiwKLSAgICAgICAgICAg
IFNwZWN1bGF0aW9uRHVtcChtX2FyZ3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdGlvbigpKSwgIlxuIik7Ci0jZW5kaWYKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJ
bmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5v
ZGUqIHBoaSA9IGJsb2NrLT5waGlzW3BoaUluZGV4XTsKKyAgICAgICAgICAgIHBoaS0+Y2hpbGRy
ZW4ucmVzZXQoKTsKKyAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBtX2Zvcm0gPSBMb2FkU3Rv
cmU7CiB9CiAKIHZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwg
MTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3Nv
ckluZGV4KQpAQCAtNDA4LDYgKzQyMyw4IEBAIHZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihW
ZWN0b3I8QmxvY2sKIAogdm9pZCBHcmFwaDo6Y29sbGVjdEdhcmJhZ2UoKQogeworICAgIFNhbXBs
aW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgR2FyYmFnZSBDb2xsZWN0aW9uIik7CisgICAg
CiAgICAgLy8gRmlyc3QgcmVzZXQgdGhlIGNvdW50cyB0byAwIGZvciBhbGwgbm9kZXMuCiAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHJldmlzaW9uIDE0MjE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNiBAQCBlbnVtIEFkZFNwZWN1bGF0aW9u
TW9kZSB7CiAgICAgU3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3csCiAgICAg
U3BlY3VsYXRlSW50ZWdlcgogfTsKLSAgICAKIAogLy8KIC8vID09PSBHcmFwaCA9PT0KQEAgLTE2
Nyw2ICsxNjYsNDAgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2Rl
KiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAxKTsgfQogICAgIHZvaWQgY2xlYXJB
bmREZXJlZkNoaWxkMyhOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAyKTsg
fQogICAgIAorICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihOb2RlKiBub2RlKQorICAgIHsK
KyAgICAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Cisg
ICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwg
bm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAg
ICAgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShtX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHNo
b3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5v
ZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJm
b3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2Vu
ZXJhdGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1
dGlvbkZvckVkZ2UoRWRnZSYgY2hpbGQsIGJvb2wgYWRkUmVmKQorICAgIHsKKyAgICAgICAgLy8g
Q2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVudXNlZC4KKyAgICAgICAgaWYgKCFj
aGlsZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIGlm
IHRoZXJlIGlzIGFueSByZXBsYWNlbWVudC4KKyAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBj
aGlsZC0+cmVwbGFjZW1lbnQ7CisgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBjaGlsZC5zZXROb2RlKHJlcGxhY2VtZW50KTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoZXJlIGlzIGRlZmluaXRlbHkgYSByZXBsYWNlbWVudC4g
QXNzZXJ0IHRoYXQgdGhlIHJlcGxhY2VtZW50IGRvZXMgbm90CisgICAgICAgIC8vIGhhdmUgYSBy
ZXBsYWNlbWVudC4KKyAgICAgICAgQVNTRVJUKCFjaGlsZC0+cmVwbGFjZW1lbnQpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGFkZFJlZikKKyAgICAgICAgICAgIHJlZihjaGlsZCk7CisgICAgfQor
ICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBv
c3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3Mp
IFwKICAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhZGROb2Rl
KFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2Rl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAg
ICB7IFwKQEAgLTE4Myw2ICsyMTYsOCBAQCBwdWJsaWM6CiAgICAgREZHX1ZBUklBRElDX1RFTVBM
QVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQUREX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BRERf
Tk9ERQogCisgICAgdm9pZCBkZXRocmVhZCgpOworICAgIAogICAgIC8vIENhbGwgdGhpcyBpZiB5
b3UndmUgbW9kaWZpZWQgdGhlIHJlZmVyZW5jZSBjb3VudHMgb2Ygbm9kZXMgdGhhdCBkZWFsIHdp
dGgKICAgICAvLyBsb2NhbCB2YXJpYWJsZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgbG9j
YWwgdmFyaWFibGUgcmVmZXJlbmNlcyBjYW4gZm9ybQogICAgIC8vIGN5Y2xlcywgYW5kIGhlbmNl
IHJlZmVyZW5jZSBjb3VudGluZyBpcyBub3QgZW5vdWdoLiBUaGlzIHdpbGwgcmVzZXQgdGhlCkBA
IC0xOTEsNiArMjI2LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNvbnZlcnRUb0NvbnN0
YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKKyAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBkZXRocmVhZCgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0
YSgpKTsKICAgICAgICAgbm9kZS0+Y29udmVydFRvQ29uc3RhbnQoY29uc3RhbnROdW1iZXIpOwog
ICAgIH0KICAgICAKQEAgLTM1MSw4ICszOTAsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29u
c3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKICAgICAKLSAgICB2b2lkIHByZWRpY3RBcmd1bWVu
dFR5cGVzKCk7Ci0gICAgCiAgICAgU3RydWN0dXJlU2V0KiBhZGRTdHJ1Y3R1cmVTZXQoY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQpCiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0
dXJlU2V0LnNpemUoKSk7CkBAIC03MTgsNiArNzU1LDggQEAgcHVibGljOgogICAgIE9wZXJhbmRz
PEpTVmFsdWU+IG1fbXVzdEhhbmRsZVZhbHVlczsKICAgICAKICAgICBPcHRpbWl6YXRpb25GaXhw
b2ludFN0YXRlIG1fZml4cG9pbnRTdGF0ZTsKKyAgICBHcmFwaEZvcm0gbV9mb3JtOworICAgIFVu
aWZpY2F0aW9uU3RhdGUgbV91bmlmaWNhdGlvblN0YXRlOwogcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxv
Y2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDYgKzMx
NCwyMiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dv
cmxkOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCisgICAg
eworICAgICAgICBBU1NFUlQobV9vcCA9PSBQaGFudG9tICYmIChjaGlsZDEoKS0+b3AoKSA9PSBQ
aGkgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0TG9jYWwgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0
QXJndW1lbnQpKTsKKyAgICAgICAgbV9vcCA9IFBoYW50b21Mb2NhbDsKKyAgICAgICAgbV9vcElu
Zm8gPSBjaGlsZDEoKS0+bV9vcEluZm87IC8vIENvcHkgdGhlIHZhcmlhYmxlQWNjZXNzRGF0YS4K
KyAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgY29udmVydFRvR2V0TG9jYWwoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgTm9kZSog
cGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0TG9jYWxVbmxpbmtlZCk7Cisg
ICAgICAgIG1fb3AgPSBHZXRMb2NhbDsKKyAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90Pih2YXJpYWJsZSk7CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShFZGdlKHBo
aSkpOworICAgIH0KKyAgICAKICAgICBKU0NlbGwqIHdlYWtDb25zdGFudCgpCiAgICAgewogICAg
ICAgICBBU1NFUlQob3AoKSA9PSBXZWFrSlNDb25zdGFudCk7CkBAIC0zNjgsNiArMzg0LDcgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJl
dmlzaW9uIDE0MjE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQ
aGksIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCiAgICAgbWFjcm8oRmx1
c2gsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBtYWNybyhQaGFu
dG9tTG9jYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBcCiAg
ICAgLyogR2V0IHRoZSB2YWx1ZSBvZiBhIGxvY2FsIHZhcmlhYmxlLCB3aXRob3V0IGxpbmtpbmcg
aW50byB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhICovXAogICAgIC8qIG5ldHdvcmsuIFRoaXMgaXMg
b25seSB2YWxpZCBmb3IgdmFyaWFibGUgYWNjZXNzZXMgd2hvc2UgcHJlZGljdGlvbnMgb3JpZ2lu
YXRlZCAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCShyZXZp
c2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBAQCB2b2lkIFBoYXNlOjpiZWdpblBoYXNlKCkK
IHsKICAgICBpZiAoIXNob3VsZER1bXBHcmFwaEF0RWFjaFBoYXNlKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBkYXRhTG9nRigiQmVnaW5uaW5nIERGRyBwaGFzZSAlcy5cbiIsIG1fbmFtZSk7Ci0g
ICAgZGF0YUxvZ0YoIkdyYXBoIGJlZm9yZSAlczpcbiIsIG1fbmFtZSk7CisgICAgZGF0YUxvZygi
QmVnaW5uaW5nIERGRyBwaGFzZSAiLCBtX25hbWUsICIuXG4iKTsKKyAgICBkYXRhTG9nKCJCZWZv
cmUgIiwgbV9uYW1lLCAiOlxuIik7CiAgICAgbV9ncmFwaC5kdW1wKCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHJldmlzaW9uIDE0MjE2MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyAr
NzMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBQaGFzZVR5cGU+CiBib29sIHJ1bkFuZExvZyhQaGFz
ZVR5cGUmIHBoYXNlKQogewogICAgIGJvb2wgcmVzdWx0ID0gcGhhc2UucnVuKCk7Ci0gICAgaWYg
KE9wdGlvbnM6OmR1bXBHcmFwaEF0RWFjaFBoYXNlKCkpCisgICAgaWYgKHJlc3VsdCAmJiBsb2dD
b21waWxhdGlvbkNoYW5nZXMoKSkKICAgICAgICAgZGF0YUxvZ0YoIlBoYXNlICVzIGNoYW5nZWQg
dGhlIElSLlxuIiwgcGhhc2UubmFtZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNl
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxp
bmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitjbGFzcyBQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGlj
OgorICAgIFByZWRpY3Rpb25JbmplY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDog
UGhhc2UoZ3JhcGgsICJwcmVkaWN0aW9uIGluamVjdGlvbiIpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0g
VGhyZWFkZWRDUFMpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUg
PT0gR2xvYmFsbHlVbmlmaWVkKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChjb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpID49IDEpOworICAgICAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyAr
K2FyZykgeworICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gcHJvZmlsZWRCbG9j
aygpLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICAgICAgaWYgKCFwcm9m
aWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0
KHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIAorI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAg
ICAgICAgICAgIkFyZ3VtZW50IFsiLCBhcmcsICJdIHByZWRpY3Rpb246ICIsCisgICAgICAgICAg
ICAgICAgU3BlY3VsYXRpb25EdW1wKG1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
aWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX29zckVudHJ5Qnl0
ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5v
cGVyYW5kKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5v
cGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0xv
Y2FsKCkpOworICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0KAorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLm1f
bXVzdEhhbmRsZVZhbHVlc1tpXSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1QcmVkaWN0
aW9uSW5qZWN0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIFByZWRpY3Rpb24gSW5qZWN0aW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1
blBoYXNlPFByZWRpY3Rpb25JbmplY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZV9oCisjZGVmaW5lIERGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOwor
CisvLyBQcmVkaWN0aW9uIEluamVjdGlvbjoKKy8vCisvLyBUYWtlcyBtaXNjZWxsYW5lb3VzIGRh
dGEgYWJvdXQgdmFyaWFibGUgdHlwZSBwcmVkaWN0aW9ucyBhbmQgaW5qZWN0cyB0aGVtLgorLy8g
VGhpcyBpbmNsdWRlcyBhcmd1bWVudCBwcmVkaWN0aW9ucyBhbmQgT1NSIGVudHJ5IHByZWRpY3Rp
b25zLgorCitib29sIHBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9uKEdyYXBoJik7CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV91bmlmaWNhdGlvblN0YXRlID09IEdsb2JhbGx5VW5pZmllZCk7CisgICAgICAgIAogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgbV9jb3VudCA9
IDA7CiAjZW5kaWYKQEAgLTgxMiw2ICs4MTUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElu
bGluZVN0YXJ0OgogICAgICAgICBjYXNlIE5vcDoKICAgICAgICAgY2FzZSBDb3VudEV4ZWN1dGlv
bjoKKyAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTQy
MTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTAwNyw2ICs1MDA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUGhhbnRvbToKKyAgICBj
YXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wLgogICAgICAgICBu
b1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5
LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAgICAgIEFTU0VS
VChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgaS0tOykg
ewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9ICZtX2dyYXBoLm1f
dmFyaWFibGVBY2Nlc3NEYXRhW2ldOwogICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS0+aXNSb290
KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1VuaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBVbmlmaWNhdGlvblBo
YXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBVbmlmaWNhdGlvblBoYXNlKEdyYXBo
JiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInVuaWZpY2F0aW9uIikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBo
Lm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fdW5pZmlj
YXRpb25TdGF0ZSA9PSBMb2NhbGx5VW5pZmllZCk7CisgICAgICAgIAorICAgICAgICAvLyBFbnN1
cmUgdGhhdCBhbGwgUGhpIGZ1bmN0aW9ucyBhcmUgdW5pZmllZC4KKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Js
b2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBo
aXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJs
b2NrLT5waGlzW3BoaUluZGV4XTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gMDsgY2hpbGRJZHggPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2NoaWxkSWR4KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghcGhpLT5jaGlsZHJlbi5jaGlsZChjaGlsZElkeCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIHBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnVuaWZ5KAorICAgICAg
ICAgICAgICAgICAgICAgICAgcGhpLT5jaGlsZHJlbi5jaGlsZChjaGlsZElkeCktPnZhcmlhYmxl
QWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEVuc3VyZSB0aGF0IGFsbCBwcmVkaWN0aW9ucyBhcmUg
Zml4ZWQgdXAgYmFzZWQgb24gdGhlIHVuaWZpY2F0aW9uLgorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhID0gJm1fZ3JhcGgubV92YXJpYWJs
ZUFjY2Vzc0RhdGFbaV07CisgICAgICAgICAgICBkYXRhLT5maW5kKCktPnByZWRpY3QoZGF0YS0+
bm9uVW5pZmllZFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBkYXRhLT5maW5kKCktPm1lcmdl
SXNDYXB0dXJlZChkYXRhLT5pc0NhcHR1cmVkKCkpOworICAgICAgICAgICAgZGF0YS0+ZmluZCgp
LT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZGF0YS0+c3RydWN0dXJlQ2hlY2tI
b2lzdGluZ0ZhaWxlZCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5t
X3VuaWZpY2F0aW9uU3RhdGUgPSBHbG9iYWxseVVuaWZpZWQ7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KK307CisKK2Jvb2wgcGVyZm9ybVVuaWZpY2F0aW9uKEdyYXBoJiBncmFwaCkKK3sK
KyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFVuaWZpY2F0aW9uIFBoYXNl
Iik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFVuaWZpY2F0aW9uUGhhc2U+KGdyYXBoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFz
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNh
dGlvblBoYXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdVbmlmaWNhdGlvblBo
YXNlX2gKKyNkZWZpbmUgREZHVW5pZmljYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBVbmlmaWNhdGlvbjoKKy8vCisvLyBFeGFt
aW5lcyBhbGwgUGhpIGZ1bmN0aW9ucyBhbmQgZW5zdXJlcyB0aGF0IHRoZSB2YXJpYWJsZSBhY2Nl
c3MgZGF0YXMgYXJlCisvLyB1bmlmaWVkLiBUaGlzIGNyZWF0ZXMgb3VyICJsaXZlLXJhbmdlIHNw
bGl0IiB2aWV3IG9mIHZhcmlhYmxlcy4KKworYm9vbCBwZXJmb3JtVW5pZmljYXRpb24oR3JhcGgm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdVbmlmaWNhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE0MjE2MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsNiArMTAwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUp
OyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUGhpIGNoaWxkcmVuIGluIExvYWRTdG9y
ZSBmb3JtIGFyZSBpbnZhbGlkLgorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zv
cm0gPT0gTG9hZFN0b3JlICYmIGJsb2NrLT5pc1BoaUluZGV4KGkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEw
OSwxMCArMTEzLDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIEkn
bSBhIEZsdXNoLCBQaGFudG9tLCBHZXRMb2NhbCwgb3IgUGhpLCBteSBjaGlsZHJlbiBzaG91bGQg
aGFzUmVzdWx0KCkuCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgotICAgICAgICAgICAgICAgICAgICBjYXNl
IFBoYW50b206CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIFBoaToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzVmFyaWFi
bGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV91
bmlmaWNhdGlvblN0YXRlID09IExvY2FsbHlVbmlmaWVkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVk
Z2UpLCBlZGdlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9m
b3JtID09IExvYWRTdG9yZSAmJiAhaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzMsNyArMTQ3LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBub2Rlc0luVGhpc0Jsb2NrLmFkZChub2RlKTsKICAgICAgICAgICAgICAgICBpZiAo
YmxvY2stPmlzUGhpSW5kZXgoaSkpCiAgICAgICAgICAgICAgICAgICAgIHBoaXNJblRoaXNCbG9j
ay5hZGQobm9kZSk7Ci0gICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG15UmVmQ291bnRz
LmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMgfHwgIW5vZGUtPmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgpKQorICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbXlSZWZDb3Vu
dHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBteVJlZkNvdW50cy5n
ZXQobm9kZSkgPyBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgOiB0cnVlKTsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsg
KytqKSB7CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9k
ZSwgaik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKQEAgLTE0OCw2ICsxNjUsMTAg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3AoKSA9
PSBQaGkpOwogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxv
Y2FsKCk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgu
bnVtQ2hpbGRyZW4obm9kZSk7ICsraikgeworICAgICAgICAgICAgICAgICAgICAvLyBQaGkgY2hp
bGRyZW4gaW4gTG9hZFN0b3JlIGZvcm0gYXJlIGludmFsaWQuCisgICAgICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUgJiYgYmxvY2stPmlzUGhpSW5kZXgoaSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgaik7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtMTgzLDE3ICsyMDQsMjQgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRo
aXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgogICAgICAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKGxvY2FsLCBibG9ja0luZGV4LCBCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNz
b3JzW2tdKSwgcHJldk5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZOb2Rl
LT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmV2
Tm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9k
ZSA9IHByZXZOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29y
c1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNz
b3JzW2tdLCBwcmV2Tm9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2
Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IEZsdXNoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsLCBi
bG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwcmV2Tm9kZSA9PSBlZGdlLm5vZGUoKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTIxNCwxMCArMjQyLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJhbmQoaSkpLCBibG9ja0luZGV4KSwg
IWJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5hcmd1bWVudChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykKKyAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJh
bmQoaSkpLCBibG9ja0luZGV4KSwgIWJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSkg
fHwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpKS0+aGFzVmFyaWFibGVBY2Nlc3NE
YXRhKCkpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRp
b25zLmFyZ3VtZW50KGkpID0gbm90U2V0OwogICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRp
b25zLmFyZ3VtZW50KGkpID0gbm90U2V0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCk7ICsraSkgeworICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KGkpLCBibG9ja0luZGV4KSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwo
aSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NE
YXRhKCkpOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQ
UykKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4oaSksIGJsb2NrSW5kZXgpLCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpKSB8
fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEo
KSk7CisKICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5sb2NhbChpKSA9IG5vdFNl
dDsKICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5sb2NhbChpKSA9IG5vdFNldDsK
ICAgICAgICAgICAgIH0KQEAgLTIzMSw2ICsyNjcsMTggQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBub2Rlc0luVGhpc0Jsb2Nr
LmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBG
bHVzaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIFBoYW50b206CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zv
cm0gPT0gTG9hZFN0b3JlICYmICFqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGUsIGVkZ2UpLCAhcGhpc0luVGhpc0Jsb2NrLmNvbnRhaW5zKGVkZ2Uubm9k
ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCkBAIC0yMzksNyArMjg3LDggQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBi
bG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBu
b3RTZXQpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFk
ZWRDUFMpCisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2tJbmRl
eCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNh
c2UgU2V0TG9jYWw6CkBAIC0yNTYsNiArMzA1LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9mb3JtID09IExvYWRTdG9yZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGNoZWNr
T3BlcmFuZCgKICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgZ2V0TG9jYWxQb3NpdGlv
bnMsIHNldExvY2FsUG9zaXRpb25zLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CkBAIC0zNDQsNyAr
Mzk2LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoRHVtcE1vZGUgPT0g
RG9udER1bXBHcmFwaCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YUxvZygiR3Jh
cGggb2YgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29k
ZTo6REZHSklUKSwgIiBhdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgZGF0YUxvZygi
QXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CiAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgIH0K
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFs
bG9jYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDIxNjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDExICs2OCwyMCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgbmVlZHNOZXdMaW5lID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkgfHwgbm9kZS0+b3AoKSA9
PSBQaGkgfHwgbm9kZS0+b3AoKSA9PSBGbHVzaCkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQor
ICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNh
c2UgUGhpOgorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgY2Fz
ZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+
Y2hpbGQxKCktPmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEZpcnN0LCBj
YWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCiAgICAg
ICAgICAgICAgICAgLy8gYWxsb2NhdGUgYSBWaXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMgbm9kZS4g
V2UgZG8gc28gaW4gdGhpcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMxLDcg
KzE0MzEsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAg
ICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5qc0NvZGVFbnRyeUZvcihraW5k
KTsKICAgICB9CiAgICAgCi0gICAgaWYgKGNhbGxMaW5rSW5mbykgeworICAgIGlmICghTExJTlRf
QUxXQVlTX0FDQ0VTU19TTE9XICYmIGNhbGxMaW5rSW5mbykgewogICAgICAgICBpZiAoY2FsbExp
bmtJbmZvLT5pc09uTGlzdCgpKQogICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5yZW1vdmUoKTsK
ICAgICAgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVyID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3Bw
CShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiwxMyBAQCB2b2lkIEpTVmFs
dWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uCiAgICAgICAgIG91dC5wcmludGYoIkRvdWJs
ZTogJTA4eDolMDh4LCAlbGYiLCB1LmFzVHdvSW50MzJzWzFdLCB1LmFzVHdvSW50MzJzWzBdLCBh
c0RvdWJsZSgpKTsKICNlbmRpZgogICAgIH0gZWxzZSBpZiAoaXNDZWxsKCkpIHsKLSAgICAgICAg
aWYgKGFzQ2VsbCgpLT5pbmhlcml0cygmU3RydWN0dXJlOjpzX2luZm8pKSB7CisgICAgICAgIGlm
IChhc0NlbGwoKS0+aW5oZXJpdHMoJkpTU3RyaW5nOjpzX2luZm8pKSB7CisgICAgICAgICAgICBK
U1N0cmluZyogc3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4oYXNDZWxsKCkpOworICAgICAgICAg
ICAgb3V0LnByaW50KCJTdHJpbmc6ICIpOworICAgICAgICAgICAgaWYgKHN0cmluZy0+aXNSb3Bl
KCkpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIocm9wZSkgIik7CisgICAgICAgICAgICBv
dXQucHJpbnQoc3RyaW5nLT50cnlHZXRWYWx1ZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChhc0Nl
bGwoKS0+aW5oZXJpdHMoJlN0cnVjdHVyZTo6c19pbmZvKSkgewogICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBqc0Nhc3Q8U3RydWN0dXJlKj4oYXNDZWxsKCkpOwogICAgICAgICAg
ICAgb3V0LnByaW50KAogICAgICAgICAgICAgICAgICJTdHJ1Y3R1cmU6ICIsIFJhd1BvaW50ZXIo
c3RydWN0dXJlKSwgIjogIiwgc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiAxNDIx
NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjYsNiArMTY2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpTVmFsdWU7CisgICAgICAgIAogICAgICAgICBi
b29sIGlzUm9wZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuaXNOdWxsKCk7IH0KICAgICAgICAg
Ym9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgSXM4Qml0OyB9CiAgICAgICAg
IHZvaWQgc2V0SXM4Qml0KGJvb2wgZmxhZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE0MjE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB2KGJvb2wsIGR1bXBCeXRlY29kZUF0REZHVGltZSwgZmFsc2UpIFwK
ICAgICB2KGJvb2wsIGR1bXBHcmFwaEF0RWFjaFBoYXNlLCBmYWxzZSkgXAogICAgIHYoYm9vbCwg
dmVyYm9zZUNvbXBpbGF0aW9uLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgbG9nQ29tcGlsYXRpb25D
aGFuZ2VzLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgcHJpbnRFYWNoT1NSRXhpdCwgZmFsc2UpIFwK
ICAgICB2KGJvb2wsIHZhbGlkYXRlR3JhcGgsIGZhbHNlKSBcCiAgICAgdihib29sLCB2YWxpZGF0
ZUdyYXBoQXRFYWNoUGhhc2UsIGZhbHNlKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187181</attachid>
            <date>2013-02-07 14:53:03 -0800</date>
            <delta_ts>2013-02-08 16:55:33 -0800</delta_ts>
            <desc>almost there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>136424</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQyMTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NSBA
QAorMjAxMy0wMi0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgYWxsb3cgcGhhc2VzIHRvIGJyZWFrIFBoaSdzIGFuZCB0aGVuIGhhdmUgb25l
IHBoYXNlIHRvIHJlYnVpbGQgdGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA4NDE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBJbnRyb2R1Y2VzIHR3byBuZXcgREZHIGZvcm1zOiBMb2Fk
U3RvcmUgYW5kIFRocmVhZGVkQ1BTLiBUaGVzZSBhcmUgZGVzY3JpYmVkIGluCisgICAgICAgIGRl
dGFpbCBpbiBERkdDb21tb24uaC4KKyAgICAgICAgCisgICAgICAgIENvbnNlcXVlbnRseSwgREZH
IHBoYXNlcyBubyBsb25nZXIgaGF2ZSB0byB3b3JyeSBhYm91dCBwcmVzZXJ2aW5nIGRhdGEgZmxv
dworICAgICAgICBsaW5rcyBiZXR3ZWVuIGJhc2ljIGJsb2Nrcy4gSXQgaXMgZ2VuZXJhbGx5IGFs
d2F5cyBzYWZlIHRvIHJlcXVlc3QgdGhhdCB0aGUKKyAgICAgICAgZ3JhcGggYmUgZGV0aHJlYWRl
ZCAoR3JhcGg6OmRldGhyZWFkKSwgd2hpY2ggYnJpbmdzIGl0IGludG8gTG9hZFN0b3JlIGZvcm0s
IHdoZXJlCisgICAgICAgIHRoZSBkYXRhIGZsb3cgaXMgaW1wbGljaXQuIEluIHRoaXMgZm9ybSwg
b25seSBsaXZlbmVzcy1hdC1oZWFkIG5lZWRzIHRvIGJlCisgICAgICAgIHByZXNlcnZlZC4KKyAg
ICAgICAgCisgICAgICAgIEFsbCBvZiB0aGUgbWFjaGluZXJ5IGZvciAidGhyZWFkaW5nIiB0aGUg
Z3JhcGggdG8gaW50cm9kdWNlIGRhdGEgZmxvdyBiZXR3ZWVuCisgICAgICAgIGJsb2NrcyBpcyBu
b3cgbW92ZWQgb3V0IG9mIHRoZSBieXRlY29kZSBwYXJzZXIgYW5kIGludG8gdGhlIENQU1JldGhy
ZWFkaW5nUGhhc2UuCisgICAgICAgIEFsbCBwaGFzZXMgdGhhdCBwcmV2aW91c2x5IGRpZCB0aGlz
IG1haW50ZW5hbmNlIHRoZW1zZWx2ZXMgbm93IGp1c3QgcmVseSBvbgorICAgICAgICBiZWluZyBh
YmxlIHRvIGRldGhyZWFkIHRoZSBncmFwaC4gVGhlIG9uZSBleGNlcHRpb24gaXMgdGhlIHN0cnVj
dHVyZSBjaGVjaworICAgICAgICBob2lzaW5nIHBoYXNlLCB3aGljaCBvcGVyYXRlcyBvdmVyIGEg
dGhyZWFkZWQgZ3JhcGggYW5kIHByZXNlcnZlcyBpdCwgZm9yIHRoZQorICAgICAgICBzYWtlIG9m
IHBlcmZvcm1hbmNlLgorICAgICAgICAKKyAgICAgICAgQWxzbyBtb3ZlZCB0d28gb3RoZXIgdGhp
bmdzIGludG8gdGhlaXIgb3duIHBoYXNlczogdW5pZmljYXRpb24gKHByZXZpb3VzbHkgZm91bmQK
KyAgICAgICAgaW4gdGhlIHBhcnNlcikgYW5kIHByZWRpY3Rpb24gaW5qZWN0aW9uIChwcmV2aW91
c2x5IGZvdW5kIGluIHZhcmlvdXMgcGxhY2VzKS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHMu
aDoKKyAgICAgICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNpemVGb3Ip
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXRGb3IpOgorICAgICAgICAqIGRmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKToK
KyAgICAgICAgKiBkZmcvREZHQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjphbGxv
Y2F0ZVNsb3cpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpy
dW4pOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Zmx1c2hEaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAg
ICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpraWxsVW5yZWFjaGFibGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmtlZXBPcGVyYW5kQWxp
dmUpOgorICAgICAgICAoQ0ZHU2ltcGxpZmljYXRpb25QaGFzZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6Zml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9ja3MpOgor
ICAgICAgICAqIGRmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAg
IChERkcpOgorICAgICAgICAoQ1BTUmV0aHJlYWRpbmdQaGFzZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Q1BTUmV0aHJlYWRpbmdQaGFzZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpD
UFNSZXRocmVhZGluZ1BoYXNlOjpmcmVlVW5uZWNlc3NhcnlOb2Rlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWlsKToK
KyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjphZGRQaGlTaWxlbnRseSk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6YWRkUGhpKToKKyAgICAg
ICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVHZXRMb2NhbEZv
cik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXpl
R2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9u
aWNhbGl6ZVNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNl
OjpjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yKToKKyAgICAgICAgKEpTQzo6REZH
OjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsKToK
KyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVTZXRB
cmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25p
Y2FsaXplTG9jYWxzSW5CbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQ
aGFzZTo6Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OkNQ
U1JldGhyZWFkaW5nUGhhc2U6OnByb3BhZ2F0ZVBoaXMpOgorICAgICAgICAoSlNDOjpERkc6OkNQ
U1JldGhyZWFkaW5nUGhhc2U6OlBoaVN0YWNrRW50cnk6OlBoaVN0YWNrRW50cnkpOgorICAgICAg
ICAoUGhpU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFz
ZTo6cGhpU3RhY2tGb3IpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1DUFNSZXRocmVhZGlu
Zyk6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChDU0VQ
aGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAg
ICAgICAgKiBkZmcvREZHQ29tbW9uLmNwcDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6
OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpsb2dDb21waWxhdGlvbkNoYW5nZXMpOgorICAgICAgICAoREZHKToKKyAgICAgICAg
KFdURik6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAg
ICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6R3Jh
cGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6ZGV0aHJlYWQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb2xsZWN0R2Fy
YmFnZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnBlcmZvcm1TdWJzdGl0dXRpb24pOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZSk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmNvbnZlcnRUb0NvbnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb1BoYW50b21Mb2NhbCk6CisgICAg
ICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9HZXRMb2NhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQaGFzZTo6YmVnaW5QaGFzZSk6CisgICAg
ICAgICogZGZnL0RGR1BoYXNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6cnVuQW5kTG9nKToKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAoUHJlZGljdGlvbkluamVjdGlvblBoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2U6OlByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNlOjpydW4p
OgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmg6IEFkZGVkLgorICAgICAgICAo
REZHKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpydW4pOgorICAg
ICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAg
ICAgICogZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6
CisgICAgICAgIChVbmlmaWNhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpVbmlmaWNh
dGlvblBoYXNlOjpVbmlmaWNhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpVbmlmaWNh
dGlvblBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1VbmlmaWNhdGlvbik6
CisgICAgICAgICogZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsaWRhdGU6OnZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6ZHVtcEdy
YXBoSWZBcHByb3ByaWF0ZSk6CisgICAgICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVyQWxsb2Nh
dGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAgICAgICogcnVudGltZS9KU0NKU1Zh
bHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZHVtcCk6CisgICAgICAgICogcnVudGlt
ZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0
aW9ucy5oOgorICAgICAgICAoSlNDKToKKwogMjAxMy0wMi0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRzo6Qnl0ZUNvZGVQYXJzZXIgc2hvdWxkIGRvIHN1
cmdpY2FsIGNvbnN0YW50IGZvbGRpbmcgdG8gcmVkdWNlIGxvYWQgb24gdGhlIG9wdGltaXphdGlv
biBmaXhwb2ludApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0
MjE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAKIAkJMEY5
NkVCQjMxNjY3NkVGNjAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2RUJCMTE2Njc2RUY0MDA4
QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk3NDk3MTE2ODdBREU0MDBBNEZGNkEgLyogSlND
ZWxsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY5NzQ5NkYxNjg3QURFMjAwQTRGRjZBIC8qIEpTQ2VsbElubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk4MjA2MDE2QkZFMzgx
MDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTgyMDVEMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVj
aXNlSnVtcFRhcmdldHMuY3BwICovOyB9OwotCQkwRjk4MjA2MTE2QkZFMzgzMDAyNDBEMDIgLyog
UHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjk4MjA1RTE2QkZFMzdGMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRz
LmggKi87IH07CisgICAgICAgICAgICAgICAgMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFBy
ZWNpc2VKdW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5ODIwNUUxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUQz
MzcwMTY1REJCOTAwMDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzNkUxNjVEQkI4RDAwNUFEMzg3IC8q
IERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGOUZDOEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOUZDOEJGMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmNwcCAqLzsgfTsKIAkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHlt
b3JwaGljUHV0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOUZDOEMwMTRFMUI1RkIwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTIzNCw2ICsyMzQsMTIgQEAKIAkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQ
cm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi87IH07CiAJ
CTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTUxNDk2QzdDMTAwRDRG
QkREIC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVPcmlnaW4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkQ3RTY3
MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCRTBGNzIxNkMxREIwMzAwODJDNUU4IC8qIERG
R0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1JldGhyZWFk
aW5nUGhhc2UuY3BwICovOyB9OworCQkwRkJFMEY3MzE2QzFEQjA1MDA4MkM1RTggLyogREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCRTBGNkMxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RkJFMEY3NDE2QzFEQjA5MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkUwRjZE
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9
OworCQkwRkJFMEY3NTE2QzFEQjBCMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJF
MEY2RTE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCRTBGNzYx
NkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRTBGNkYxNkMxREIwMTAwODJDNUU4
IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRkJFMEY3NzE2QzFEQjEyMDA4
MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRTBGNzAxNkMxREIwMTAwODJDNUU4IC8qIERGR1VuaWZp
Y2F0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3NjgxNDY4QTZFRjAw
Q0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkMwOTc2RDE0NjhBQjRFMDBDRjI0NDIgLyogREZHQXNzZW1ibHlI
ZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDMDk3NkUxNDY4QUI1
MTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2QjE0NjhBQjRBMDBDRjI0NDIgLyogREZH
QXNzZW1ibHlIZWxwZXJzLmNwcCAqLzsgfTsKQEAgLTExMTksNiArMTEyNSwxMiBAQAogCQkwRkJD
MEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZHRXhpdFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkJDMEFFNTE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2Zp
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZHRXhpdFByb2ZpbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCRDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8q
IENvZGVPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZU9yaWdp
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkJFMEY2QjE2QzFEQjAxMDA4MkM1
RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZC
RTBGNkMxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oOyBwYXRo
ID0gZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZCRTBGNkQxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQkUwRjZFMTZDMURCMDEw
MDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGQkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VuaWZpY2F0aW9uUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkJFMEY3MDE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRp
b25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdVbmlmaWNhdGlv
blBoYXNlLmg7IHBhdGggPSBkZmcvREZHVW5pZmljYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZHT1NSRXhpdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Lmg7IHBhdGggPSBk
ZmcvREZHT1NSRXhpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTc2QjE0
NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fzc2VtYmx5SGVscGVycy5jcHA7IHBhdGggPSBkZmcv
REZHQXNzZW1ibHlIZWxwZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZD
MDk3NkMxNDY4QUI0QTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBc3NlbWJseUhlbHBlcnMuaDsgcGF0aCA9IGRmZy9E
RkdBc3NlbWJseUhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2MDQs
NiArMjYxNiw4IEBACiAJCQkJMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5o
ICovLAogCQkJCTBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAgKi8sCiAJCQkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmggKi8sCisJCQkJMEZCRTBGNkIxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQ
U1JldGhyZWFkaW5nUGhhc2UuY3BwICovLAorCQkJCTBGQkUwRjZDMTZDMURCMDEwMDgyQzVFOCAv
KiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZGRkM5NEQxNEVGOTA5NTAwQzcy
NTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk0RTE0RUY5MDk1MDBDNzI1MzIg
LyogREZHQ1NFUGhhc2UuaCAqLywKIAkJCQkwRkY0Mjc2MTE1OTFBMUM5MDA0Q0I5RkYgLyogREZH
RGlzYXNzZW1ibGVyLmNwcCAqLywKQEAgLTI2NTIsNiArMjY2Niw4IEBACiAJCQkJMEZFRkM5QTgx
NjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCAqLywKIAkJCQkw
RkZGQzk0RjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUw
MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5oICovLAorCQkJCTBGQkUwRjZEMTZDMURCMDEw
MDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGQkUw
RjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCAqLywK
IAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTUyMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5oICovLAogCQkJCTg2RUM5REMxMTMyOERGODIwMDJCMkFENyAv
KiBERkdSZWdpc3RlckJhbmsuaCAqLywKQEAgLTI2NzEsNiArMjY4Nyw4IEBACiAJCQkJMEY2Mzk0
M0QxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5oICov
LAogCQkJCTBGQzA5NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICovLAogCQkJ
CTBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKKwkJCQkwRkJFMEY2
RjE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgKi8sCisJCQkJMEZC
RTBGNzAxNkMxREIwMTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCAqLywKIAkJCQkw
RjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICovLAogCQkJCTBGM0Iz
QTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oICovLAogCQkJCTBGMkJEQzNGMTUy
MjgwMTcwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCAqLywKQEAgLTMzMzAs
NiArMzM0OCw5IEBACiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJu
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5
bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYxMTZCRkUzODMwMDI0MEQw
MiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQkUwRjczMTZD
MURCMDUwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkJFMEY3NTE2QzFEQjBCMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkJFMEY3NzE2QzFEQjEyMDA4MkM1RTggLyogREZH
VW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zOTY1LDYgKzM5ODYsOSBAQAog
CQkJCTg2NzA0Qjg5MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NjcwNEI0MjEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5ODIwNjAxNkJGRTM4MTAwMjQwRDAyIC8qIFByZWNp
c2VKdW1wVGFyZ2V0cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkJFMEY3MjE2QzFEQjAzMDA4
MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkJFMEY3NDE2QzFEQjA5MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGQkUwRjc2MTZDMURCMEYwMDgyQzVFOCAvKiBERkdVbmlm
aWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDE0MjE2MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0
Niw4IEBAIHN0cnVjdCBPcGVyYW5kVmFsdWVUcmFpdHMgewogICAgIHN0YXRpYyB2b2lkIGR1bXAo
Y29uc3QgVCYgdmFsdWUsIFByaW50U3RyZWFtJiBvdXQpIHsgdmFsdWUuZHVtcChvdXQpOyB9CiB9
OwogCitlbnVtIE9wZXJhbmRLaW5kIHsgQXJndW1lbnRPcGVyYW5kLCBMb2NhbE9wZXJhbmQgfTsK
KwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzID0gT3BlcmFuZFZhbHVlVHJh
aXRzPFQ+ID4KIGNsYXNzIE9wZXJhbmRzIHsKIHB1YmxpYzoKQEAgLTY2LDYgKzY4LDI4IEBAIHB1
YmxpYzoKICAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX2xvY2Fsc1tpZHhdOyB9
CiAgICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbHNb
aWR4XTsgfQogICAgIAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAg
IHNpemVfdCBzaXplRm9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kS2luZCA9
PSBBcmd1bWVudE9wZXJhbmQpCisgICAgICAgICAgICByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMo
KTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mTG9jYWxzKCk7CisgICAgfQorICAgIHRlbXBsYXRl
PE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIFQmIGF0Rm9yKHNpemVfdCBpZHgpCisgICAg
eworICAgICAgICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7CisgICAgICAgIHJldHVybiBsb2NhbChpZHgpOworICAg
IH0KKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBjb25zdCBUJiBh
dEZvcihzaXplX3QgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09
IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOworICAg
ICAgICByZXR1cm4gbG9jYWwoaWR4KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBlbnN1cmVMb2Nh
bHMoc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBpZiAoc2l6ZSA8PSBtX2xvY2Fscy5zaXpl
KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHJldmlzaW9uIDE0MjE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3ODcsNiArMTc4Nyw3IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAg
IGNhc2UgUGhpOgogICAgIGNhc2UgRmx1c2g6CisgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAg
ICAgIG5vZGUtPnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IApAQCAtMTkxMyw2ICsxOTE0LDcgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VT
dGF0ZUF0VAogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBQaGk6
CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgog
ICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHRyYW5zZmVycyB0
aGUgdmFsdWUgZnJvbSBoZWFkIHRvIHRhaWwuCiAgICAgICAgICAgICBzb3VyY2UgPSBpblZhcmlh
YmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZp
c2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbkFs
aWduZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTE5Nyw2ICsxOTgs
OSBAQCB2b2lkKiBBbGxvY2F0b3I8VD46OmFsbG9jYXRlU2xvdygpCiAgICAgQVNTRVJUKCFtX2Zy
ZWVMaXN0SGVhZCk7CiAgICAgQVNTRVJUKCFtX2J1bXBSZW1haW5pbmcpOwogICAgIAorICAgIGlm
IChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKKyAgICAgICAgZGF0YUxvZygiQWxsb2NhdGluZyBh
bm90aGVyIGFsbG9jYXRvciByZWdpb24uXG4iKTsKKyAgICAKICAgICBQYWdlQWxsb2NhdGlvbkFs
aWduZWQgYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoUmVnaW9u
OjpzaXplKCksIFJlZ2lvbjo6c2l6ZSgpLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CiAg
ICAgaWYgKCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0aW9uKSkKICAgICAgICAgQ1JBU0goKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQyMTYyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6Ci0gICAgICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAgICBjYXNlIFBo
aTogLyogRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg1
NTUgKi8gewogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTUwNyw2ICs1MDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5ndGgpOworICAg
ICAgICAgICAgICAgICAgICBub2RlLT5yZWYoKTsgLy8gVGhpcyBpcyBhIG11c3QtZ2VuZXJhdGUg
bm9kZS4KICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBv
cCBub2V3IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRzTGVuZ3RoLgogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTYzNSw4ICs2MzYsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBp
ZiAoY2hhbmdlZCkKLSAgICAgICAgICAgIG1fZ3JhcGguY29sbGVjdEdhcmJhZ2UoKTsKKyAgICAg
ICAgaWYgKGNoYW5nZWQpIHsKKyAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKKyAgICAg
ICAgICAgIG1fZ3JhcGgubV9mb3JtID0gTG9hZFN0b3JlOworICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNDIxNjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAogI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0
ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFy
Z3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBCYXNp
Y0Jsb2NrOjphcHBlbmROb2RlKEdyYXBoJiBncmFwaCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxk
cmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFs
dWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMg
dGVtcGxhdGVQb3N0IGlubGluZSBOb2RlKiBCYXNpY0Jsb2NrOjphcHBlbmROb2RlKEdyYXBoJiBn
cmFwaCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9k
ZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykg
XAogICAgIHsgXAogICAgICAgICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHJlZkNoaWxk
cmVuTW9kZSwgcmVmTm9kZU1vZGUsIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpOyBc
CiAgICAgICAgIGFwcGVuZChyZXN1bHQpOyBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQyMTYyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4OSw2NCArMjg5LDMzIEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwogICAgICAgICBi
b29sIGlzQ2FwdHVyZWQgPSBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZChvcGVyYW5kLCBpbmxpbmVD
YWxsRnJhbWUoKSk7CiAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGhhcyB0d28gZ29hbHM6IDEp
IGxpbmsgdG9nZXRoZXIgdmFyaWFibGUgYWNjZXNzIGRhdGFzLCBhbmQgMikKKyAgICAgICAgLy8g
dHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHJlZHVuZGFudCBHZXRMb2NhbHMuICgxKSBpcyByZXF1aXJl
ZCBmb3IKKyAgICAgICAgLy8gY29ycmVjdG5lc3MgLSBubyBvdGhlciBwaGFzZSB3aWxsIGVuc3Vy
ZSB0aGF0IGJsb2NrLWxvY2FsIHZhcmlhYmxlCisgICAgICAgIC8vIGFjY2VzcyBkYXRhIHVuaWZp
Y2F0aW9uIGlzIGRvbmUgY29ycmVjdGx5LiAoMikgaXMgcHVyZWx5IG9wcG9ydHVuaXN0aWMKKyAg
ICAgICAgLy8gYW5kIGlzIG1lYW50IGFzIGFuIGNvbXBpbGUtdGltZSBvcHRpbWl6YXRpb24gb25s
eS4KKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CisgICAg
ICAgIAogICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
Rmx1c2gpIHsKLSAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRo
ZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQotICAgICAgICAgICAgICAgIC8vIGJ1
dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBp
bgotICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KLSAgICAgICAgICAg
ICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFBoaSkgewotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlSXNDYXB0dXJlZChpc0Nh
cHR1cmVkKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3Bl
Y3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSks
IG5vZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB2YXJp
YWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgdmFyaWFibGUt
Pm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
QVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2gpOwotCi0gICAgICAgICAgICBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGlzQ2FwdHVyZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBX
ZSB3aXNoIHRvIHVzZSB0aGUgc2FtZSB2YXJpYWJsZSBhY2Nlc3MgZGF0YSBhcyB0aGUgcHJldmlv
dXMgYWNjZXNzLAotICAgICAgICAgICAgICAgIC8vIGJ1dCBmb3IgYWxsIG90aGVyIHB1cnBvc2Vz
IHdlIHdhbnQgdG8gaXNzdWUgYSBsb2FkIHNpbmNlIGZvciBhbGwgd2UKLSAgICAgICAgICAgICAg
ICAvLyBrbm93LCBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLCB0aGUgbG9jYWwgaGFzIGJl
ZW4gY2xvYmJlcmVkLgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB3ZSBsaW5rIHRvIHRoZSBQaGkgbm9kZSwgbm90IHRvIHRoZSBHZXRMb2NhbC4KLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2Nh
bCB8fCBub2RlLT5vcCgpID09IFBoaSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgTm9kZSogbmV3R2V0TG9jYWwgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKAotICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkpLCBub2RlKSk7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5ld0dldExvY2FsOwotICAgICAgICAg
ICAgICAgIHJldHVybiBuZXdHZXRMb2NhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRM
b2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAg
ICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcHJlc2VydmVk
VmFycy5zZXQob3BlcmFuZCk7CisgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKICAgICAgICAgfQotCi0gICAgICAgIC8vIENo
ZWNrIGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9tIHByaW9yIGJsb2NrcywKLSAgICAgICAg
Ly8gZXhwYW5kIG1fcHJlc2VydmVkVmFycyB0byBjb3ZlciB0aGVzZS4KLSAgICAgICAgbV9wcmVz
ZXJ2ZWRWYXJzLnNldChvcGVyYW5kKTsKLSAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQs
IGlzQ2FwdHVyZWQpOwogICAgICAgICAKLSAgICAgICAgTm9kZSogcGhpID0gYWRkVG9HcmFwaChQ
aGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKLSAgICAgICAgbV9sb2NhbFBoaVN0YWNr
LmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIG9wZXJhbmQpKTsKLSAg
ICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRM
b2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSkpOworICAgICAgICBub2RlID0g
aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8o
dmFyaWFibGUpKSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9j
YWwob3BlcmFuZCkgPSBub2RlOwotICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGltZShvcGVyYW5kLCBub2RlKTsKLSAgICAgICAg
CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVk
IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCkBAIC0z
NzUsNjEgKzM0NCwyNSBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGJvb2wg
aXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQpOwogCisgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGU7CisgICAgICAgIAogICAgICAgICBpZiAobm9k
ZSkgewotICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRmx1c2gpIHsKLSAgICAgICAgICAg
ICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUgbG9j
YWwgdG8gYmUgbGl2ZQotICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBpdHMg
dmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgotICAgICAgICAgICAgICAgIC8v
IHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KLSAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hp
bGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFBoaSkgewot
ICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZUFjY2Vzc0RhdGEtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChH
ZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0
TG9jYWwgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpICE9IEZsdXNoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm1lcmdlSXND
YXB0dXJlZChpc0NhcHR1cmVkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gU2V0QXJndW1lbnQpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5n
IGFuIGFyZ3VtZW50IGluIHRoZSBmaXJzdCBiYXNpYyBibG9jazsgbGluawotICAgICAgICAgICAg
ICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUgU2V0QXJndW1lbnQuCi0gICAgICAgICAgICAgICAg
QVNTRVJUKG5vZGUtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVy
YW5kKSk7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIG5vZGUgPSBpbmplY3RM
YXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJs
ZSksIG5vZGUpKTsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc0NhcHR1
cmVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAg
ICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRM
b2NhbCB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKLSAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50IHx8
IG5vZGUtPm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5qZWN0TGF6eU9w
ZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkpLCBub2RlKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB2YXJp
YWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgdmFyaWFibGUt
Pm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNl
dExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAg
ICAgIH0KKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
dmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAg
ICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsKLQotICAgICAgICBO
b2RlKiBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwot
ICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50
QmxvY2ssIHBoaSwgYXJndW1lbnQpKTsKLSAgICAgICAgbm9kZSA9IGluamVjdExhenlPcGVyYW5k
U3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0
YSksIHBoaSkpOworICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihh
ZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGUpKSk7CiAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKLSAgICAg
ICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRG
aXJzdFRpbWUoYXJndW1lbnQsIG5vZGUpOwotICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vZGU7
CiAgICAgfQogICAgIHZvaWQgc2V0QXJndW1lbnQoaW50IG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBT
ZXRNb2RlIHNldE1vZGUgPSBOb3JtYWxTZXQpCkBAIC00OTUsNjMgKzQyOCwyNyBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgZmx1c2hEaXJlY3QoaW50IG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRp
b24qIGFyZ3VtZW50UG9zaXRpb24pCiAgICAgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgY2hlY2sgaWYgdGhlIHNhbWUgb3BlcmFuZCBoYWQgYWxyZWFkeSBiZWVuIGZsdXNoZWQgdG8K
LSAgICAgICAgLy8gc29tZSBvdGhlciBsb2NhbCB2YXJpYWJsZS4KLSAgICAgICAgCiAgICAgICAg
IGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQsIGlubGlu
ZUNhbGxGcmFtZSgpKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChvcGVyYW5kIDwgRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXgpOwogICAgICAgICAKLSAgICAgICAgTm9kZSogbm9kZTsKLSAg
ICAgICAgaW50IGluZGV4OwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkp
IHsKLSAgICAgICAgICAgIGluZGV4ID0gb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCk7Ci0gICAg
ICAgICAgICBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChp
bmRleCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbmRleCA9IG9wZXJhbmQ7Ci0g
ICAgICAgICAgICBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChp
bmRleCk7CisgICAgICAgIGlmICghb3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCiAgICAgICAg
ICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOwotICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpICE9IEZsdXNoICYmIG5vZGUtPm9wKCkgIT0g
R2V0TG9jYWwpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBFbWl0IGEgRmx1c2ggcmVn
YXJkbGVzcyBvZiB3aGV0aGVyIHdlIGFscmVhZHkgZmx1c2hlZCBpdC4KLSAgICAgICAgICAgIC8v
IFRoaXMgZ2l2ZXMgdXMgZ3VpZGFuY2UgdG8gc2VlIHRoYXQgdGhlIHZhcmlhYmxlIGFsc28gbmVl
ZHMgdG8gYmUgZmx1c2hlZAotICAgICAgICAgICAgLy8gZm9yIGFyZ3VtZW50cywgZXZlbiBpZiBp
dCBhbHJlYWR5IGhhZCB0byBiZSBmbHVzaGVkIGZvciBvdGhlciByZWFzb25zLgotICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0Nh
cHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZv
KHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGUpOwotICAgICAgICAgICAgaWYgKGFyZ3VtZW50UG9z
aXRpb24pCi0gICAgICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFyaWFibGUodmFy
aWFibGVBY2Nlc3NEYXRhKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAg
ICAgICAgdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
IHZhcmlhYmxlLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCwgaXND
YXB0dXJlZCk7CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVkKTsK
LSAgICAgICAgTm9kZSogcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vz
c0RhdGEpKTsKLSAgICAgICAgbm9kZSA9IGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLCBwaGkpOwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFu
ZCkpIHsKLSAgICAgICAgICAgIG1fYXJndW1lbnRQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRy
eShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOwotICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCkgPSBub2RlOwotICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShpbmRl
eCwgbm9kZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2xvY2FsUGhpU3RhY2su
YXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsKLSAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgpID0gbm9k
ZTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxG
aXJzdFRpbWUoaW5kZXgsIG5vZGUpOwotICAgICAgICB9CisgICAgICAgIG5vZGUgPSBhZGRUb0dy
YXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgaWYgKGFyZ3Vt
ZW50UG9zaXRpb24pCi0gICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJpYWJsZSh2
YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgYXJndW1lbnRQb3NpdGlvbi0+YWRkVmFy
aWFibGUodmFyaWFibGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGZsdXNoQXJndW1lbnRzQW5k
Q2FwdHVyZWRWYXJpYWJsZXMoKQpAQCAtMjA0MCw3ICsxOTM3LDYgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tU
b3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7
CiAgICAgICAgICAgICBOb2RlKiBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQs
IE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmd1
bWVudF0gPSBzZXRBcmd1bWVudDsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1lbnRGaXJz
dFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3OTks
NiArMjY5NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEZhbHNlVHJpU3RhdGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0aGlzIGJ5dGVjb2RlIG9w
ZXJhdGlvbiBidXQgb3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0
aHJvdWdoLgorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20pOwogICAgICAg
ICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qdHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQpAQCAtMjgxOCw2ICsyNzE1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0g
VHJ1ZVRyaVN0YXRlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBwbGFjZWhvbGRl
ciBmb3IgdGhpcyBieXRlY29kZSBvcGVyYXRpb24gYnV0IG90aGVyd2lzZQogICAgICAgICAgICAg
ICAgICAgICAvLyBqdXN0IGZhbGwgdGhyb3VnaC4KKyAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tKTsKICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfamZhbHNl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yODU4LDYgKzI3NTYsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEgcGxhY2Vo
b2xkZXIgZm9yIHRoaXMgYnl0ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgorICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2psZXNzKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KQEAgLTI4ODQsNiArMjc4Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEVtaXQgYSBwbGFjZWhvbGRlciBmb3IgdGhpcyBieXRlY29kZSBvcGVyYXRpb24g
YnV0IG90aGVyd2lzZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBmYWxsIHRocm91
Z2guCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20pOwogICAgICAg
ICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfamxlc3NlcSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yOTEwLDYgKzI4MTAsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEgcGxhY2Vob2xkZXIgZm9y
IHRoaXMgYnl0ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgorICAgICAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQaGFudG9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2pncmVhdGVyKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAg
LTI5MzYsNiArMjgzNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEVtaXQgYSBwbGFjZWhvbGRlciBmb3IgdGhpcyBieXRlY29kZSBvcGVyYXRpb24gYnV0IG90
aGVyd2lzZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBmYWxsIHRocm91Z2guCisg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20pOwogICAgICAgICAgICAg
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfamdyZWF0ZXJlcSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yOTU4LDYgKzI4NjAsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIGlmIChh
IDwgYikgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZv
ciB0aGlzIGJ5dGVjb2RlIG9wZXJhdGlvbiBidXQgb3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBqdXN0IGZhbGwgdGhyb3VnaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9qbmxlc3MpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2
ZU9mZnNldCkpOwpAQCAtMjk4Myw2ICsyODg2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBpZiAoYSA8PSBiKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEgcGxhY2Vob2xkZXIgZm9yIHRoaXMgYnl0ZWNv
ZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1
c3QgZmFsbCB0aHJvdWdoLgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFu
dG9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2pubGVzc2VxKTsK
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsK
QEAgLTMwMDgsNiArMjkxMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPiBiKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBFbWl0IGEgcGxhY2Vob2xkZXIgZm9yIHRoaXMgYnl0ZWNvZGUgb3BlcmF0aW9u
IGJ1dCBvdGhlcndpc2UKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJv
dWdoLgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2puZ3JlYXRlcik7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1
bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CkBAIC0zMDMzLDYg
KzI5MzgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChhID49IGIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEVtaXQgYSBwbGFjZWhvbGRlciBmb3IgdGhpcyBieXRlY29kZSBvcGVyYXRpb24gYnV0IG90aGVy
d2lzZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBmYWxsIHRocm91Z2guCisgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20pOwogICAgICAgICAgICAgICAg
ICAgICAgICAgTkVYVF9PUENPREUob3Bfam5ncmVhdGVyZXEpOwogICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpOwpAQCAtMzQwOSwxNTEgKzMzMTUs
NiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgfQogfQog
Ci10ZW1wbGF0ZTxCeXRlQ29kZVBhcnNlcjo6UGhpU3RhY2tUeXBlIHN0YWNrVHlwZT4KLXZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCi17Ci0gICAgVmVjdG9yPFBoaVN0YWNr
RW50cnksIDE2PiYgcGhpU3RhY2sgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8g
bV9hcmd1bWVudFBoaVN0YWNrIDogbV9sb2NhbFBoaVN0YWNrOwotICAgIAotICAgIHdoaWxlICgh
cGhpU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBoaVN0YWNrRW50cnkgZW50cnkgPSBwaGlT
dGFjay5sYXN0KCk7Ci0gICAgICAgIHBoaVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghZW50cnkubV9ibG9jay0+aXNSZWFjaGFibGUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgCi0gICAgICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzID0g
ZW50cnkubV9ibG9jay0+bV9wcmVkZWNlc3NvcnM7Ci0gICAgICAgIHVuc2lnbmVkIHZhck5vID0g
ZW50cnkubV92YXJObzsKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUGhpID0g
ZW50cnkubV9waGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotCi0jaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgSGFuZGxpbmcgcGhp
IGVudHJ5IGZvciB2YXIgJXUsIHBoaSBAJXUuXG4iLCBlbnRyeS5tX3Zhck5vLCBlbnRyeS5tX3Bo
aSk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJl
ZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgRGVhbGluZyB3aXRoIHByZWRl
Y2Vzc29yIGJsb2NrICV1LlxuIiwgcHJlZGVjZXNzb3JzW2ldKTsKLSNlbmRpZgotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1twcmVkZWNlc3NvcnNbaV1dLmdldCgpOwotCi0gICAgICAgICAgICBOb2RlKiYgdmFy
ID0gKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vzc29yQmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5hcmd1bWVudCh2YXJObykgOiBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubG9jYWwodmFyTm8pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiB2
YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXI7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlSW5QcmVkZWNl
c3NvcikgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiICAgICAgRGlkIG5vdCBmaW5kIG5vZGUsIGFkZGluZyBwaGku
XG4iKTsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gaW5z
ZXJ0UGhpTm9kZShPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKHN0YWNrVHlwZSA9PSBBcmd1
bWVudFBoaVN0YWNrID8gYXJndW1lbnRUb09wZXJhbmQodmFyTm8pIDogc3RhdGljX2Nhc3Q8aW50
Pih2YXJObyksIGZhbHNlKSksIHByZWRlY2Vzc29yQmxvY2spOwotICAgICAgICAgICAgICAgIHZh
ciA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2tUeXBlID09
IEFyZ3VtZW50UGhpU3RhY2spCi0gICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZSh2YXJObywgdmFsdWVJblByZWRl
Y2Vzc29yKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByZWRl
Y2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGltZSh2YXJObywgdmFs
dWVJblByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgICAgICBwaGlTdGFjay5hcHBlbmQoUGhpU3Rh
Y2tFbnRyeShwcmVkZWNlc3NvckJsb2NrLCB2YWx1ZUluUHJlZGVjZXNzb3IsIHZhck5vKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBHZXRMb2Nh
bCkgewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiICAgICAgRm91bmQgR2V0TG9jYWwgQCV1LlxuIiwgdmFsdWVJblBy
ZWRlY2Vzc29yLT5pbmRleCgpKTsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAgLy8gV2Ugd2Fu
dCB0byBlbnN1cmUgdGhhdCB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcmUgaWRlbnRpY2FsIGJl
dHdlZW4gdGhlCi0gICAgICAgICAgICAgICAgLy8gR2V0TG9jYWwgYW5kIGl0cyBibG9jay1sb2Nh
bCBQaGkuIFN0cmljdGx5IHNwZWFraW5nIHdlIG9ubHkgbmVlZCB0aGUgdHdvCi0gICAgICAgICAg
ICAgICAgLy8gdG8gYmUgdW5pZmllZC4gQnV0IGZvciBlZmZpY2llbmN5LCB3ZSB3YW50IHRoZSBj
b2RlIHRoYXQgY3JlYXRlcyBHZXRMb2NhbHMKLSAgICAgICAgICAgICAgICAvLyBhbmQgUGhpcyB0
byB0cnkgdG8gcmV1c2UgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcyBtdWNoIGFzIHBvc3NpYmxlLgot
ICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUluUHJlZGVjZXNzb3ItPnZhcmlhYmxlQWNjZXNz
RGF0YSgpID09IHZhbHVlSW5QcmVkZWNlc3Nvci0+Y2hpbGQxKCktPnZhcmlhYmxlQWNjZXNzRGF0
YSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNz
b3IgPSB2YWx1ZUluUHJlZGVjZXNzb3ItPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3VuZCBAJXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNz
b3ItPmluZGV4KCkpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQo
Ci0gICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IFNldExvY2FsCi0g
ICAgICAgICAgICAgICAgfHwgdmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IFBoaQotICAgICAg
ICAgICAgICAgIHx8IHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBGbHVzaAotICAgICAgICAg
ICAgICAgIHx8ICh2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gU2V0QXJndW1lbnQgJiYgc3Rh
Y2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUHJlZGVjZXNzb3IgPSB2YWx1ZUluUHJlZGVjZXNz
b3ItPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkYXRh
Rm9yUHJlZGVjZXNzb3ItPnVuaWZ5KGRhdGFGb3JQaGkpOwotCi0gICAgICAgICAgICBOb2RlKiBw
aGlOb2RlID0gZW50cnkubV9waGk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIFJlZiBjb3VudCBvZiBAJXUgPSAl
dS5cbiIsIHBoaU5vZGUtPmluZGV4KCksIHBoaU5vZGUtPnJlZkNvdW50KCkpOwotI2VuZGlmCi0g
ICAgICAgICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkgewotI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAg
UmVmZmluZyBAJXUuXG4iLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotI2VuZGlmCi0gICAgICAgICAg
ICAgICAgbV9ncmFwaC5yZWYodmFsdWVJblByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDEoKSkgewotI2lmIERGR19FTkFCTEUoREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAg
U2V0dGluZyBAJXUtPmNoaWxkMSA9IEAldS5cbiIsIHBoaU5vZGUtPmluZGV4KCksIHZhbHVlSW5Q
cmVkZWNlc3Nvcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5z
ZXRDaGlsZDEoRWRnZSh2YWx1ZUluUHJlZGVjZXNzb3IpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENo
aWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgcGhp
Tm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7Ci0gICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMigpKSB7Ci0jaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIgICAgICBTZXR0aW5nIEAldS0+Y2hpbGQyID0gQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwg
dmFsdWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNo
aWxkcmVuLnNldENoaWxkMihFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwotI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigi
ICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsKLSAgICAgICAgICAg
ICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAg
ICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQzKCkpIHsKLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDMgPSBAJXUuXG4iLCBwaGlOb2RlLT5p
bmRleCgpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgcGhp
Tm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQzKEVkZ2UodmFsdWVJblByZWRlY2Vzc29yKSk7Ci0jaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRh
dGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4KCkpOwotICAg
ICAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwotICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBu
ZXdQaGkgPSBpbnNlcnRQaGlOb2RlKE9wSW5mbyhkYXRhRm9yUGhpKSwgZW50cnkubV9ibG9jayk7
Ci0gICAgICAgICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
Ci0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgU3BsaXR0aW5nIEAldSwgY3JlYXRlZCBAJXUu
XG4iLCBwaGlOb2RlLT5pbmRleCgpLCBuZXdQaGktPmluZGV4KCkpOwotI2VuZGlmCi0KLSAgICAg
ICAgICAgIGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGgu
cmVmKG5ld1BoaSk7Ci0KLSAgICAgICAgICAgIG5ld1BoaS0+Y2hpbGRyZW4gPSBwaGlOb2RlLT5j
aGlsZHJlbjsKLQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIG5ld1BoaS0+aW5k
ZXgoKSk7Ci0gICAgICAgICAgICBuZXdQaGktPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkp
OwotICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIHBo
aU5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUobmV3UGhpLCB2YWx1ZUluUHJlZGVjZXNzb3IsIDAp
OwotCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7
Ci0gICAgICAgICAgICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKLSAg
ICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQot
CiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpmaXhWYXJpYWJsZUFjY2Vzc1ByZWRpY3Rpb25zKCkKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0
YS5zaXplKCk7ICsraSkgewpAQCAtMzkzNiw0MCArMzY5NywyNSBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZSgpCiAgICAgZGF0YUxvZ0YoIlByb2Nlc3NpbmcgbG9jYWwgdmFyaWFibGUgcGhp
cy5cbiIpOwogI2VuZGlmCiAgICAgCi0gICAgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXggPSBtX2N1
cnJlbnRJbmRleDsKKyAgICBBU1NFUlQobV9wcmVzZXJ2ZWRWYXJzLnNpemUoKSk7CisgICAgc2l6
ZV90IG51bWJlck9mTG9jYWxzID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gbV9wcmVzZXJ2ZWRW
YXJzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAobV9wcmVzZXJ2ZWRWYXJzLnF1aWNrR2V0
KGkpKSB7CisgICAgICAgICAgICBudW1iZXJPZkxvY2FscyA9IGkgKyAxOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAgICAgCi0gICAgcHJvY2Vzc1BoaVN0YWNrPExvY2Fs
UGhpU3RhY2s+KCk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgIGRhdGFMb2dGKCJQcm9jZXNzaW5nIGFyZ3VtZW50IHBoaXMuXG4iKTsKLSNlbmRpZgotICAg
IHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0YWNrPigpOwotCiAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVChibG9jayk7Ci0gICAgICAg
IGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJs
ZSkgewogICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5jbGVhcigpOwot
ICAgIH0KLSAgICAKLSAgICBmaXhWYXJpYWJsZUFjY2Vzc1ByZWRpY3Rpb25zKCk7Ci0gICAgCi0g
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlmICghYmxv
Y2spCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJn
ZXQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJl
Z2luICE9IG1fZ3JhcGgubV9vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRs
ZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbXVzdEhh
bmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSkpOwotICAgICAgICAgICAgaWYgKCFub2RlKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0xv
Y2FsKCkpOwotICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Qo
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25Gcm9tVmFsdWUobV9ncmFwaC5tX211c3RIYW5k
bGVWYWx1ZXNbaV0pKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobnVtYmVyT2ZMb2NhbHMpOworICAgICAgICBibG9jay0+
dmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2FscyhudW1iZXJPZkxvY2Fscyk7CiAgICAgfQogICAg
IAogICAgIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJzID0gbV9wcmVzZXJ2ZWRWYXJzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2
ICs3Miw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4
dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3Io
YmxvY2ssIDApLCBOb0Jsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdl
ZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTExMyw2ICsxMTQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZGV0aHJlYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcygKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNv
bmRpdGlvbiksCkBAIC0xMjYsNiArMTI4LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJ
bmRleCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9j
aywgY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IG5v
dFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAh
Y29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMTU0LDYgKzE1Nyw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ0ZHU2ltcGxp
Znk6IEJyYW5jaCB0byBzYW1lIHN1Y2Nlc3NvciBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sg
IyV1LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgs
IHRhcmdldEJsb2NrSW5kZXgpOwogI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxv
Y2tzKGJsb2NrSW5kZXgsIHRhcmdldEJsb2NrSW5kZXgsIE5vQmxvY2spOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCkBAIC0yNTAsMTA0ICsyNTQsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKGJs
b2NrKTsKICAgICAgICAgQVNTRVJUKCFibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAKLSAg
ICAgICAgLy8gMSkgUmVtb3ZlIHJlZmVyZW5jZXMgZnJvbSBvdGhlciBibG9ja3MgdG8gdGhpcyBi
bG9jay4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1TdWNjZXNzb3JzKGJs
b2NrKTsgaS0tOykKLSAgICAgICAgICAgIGZpeFBoaXMoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNj
ZXNzb3IoYmxvY2ssIGkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2Nr
LT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2Nh
dG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgICAgICBtX2dy
YXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwogICAgICAgICAKLSAg
ICAgICAgLy8gMikgS2lsbCB0aGUgYmxvY2sKICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5jbGVhcigpOwogICAgIH0KICAgICAKICAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUo
QmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIE5vZGUqIGxpdmVuZXNz
Tm9kZSA9IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7
Ci0gICAgICAgIE5vZGUqIGF2YWlsYWJpbGl0eU5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgIGlmICghbGl2ZW5lc3NOb2RlKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoYXZhaWxhYmlsaXR5Tm9kZSk7CiAgICAgICAgIGlm
IChsaXZlbmVzc05vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhdmFpbGFiaWxpdHlOb2RlLT5vcCgpID09IFNl
dExvY2FsKQotICAgICAgICAgICAgYXZhaWxhYmlsaXR5Tm9kZSA9IGF2YWlsYWJpbGl0eU5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHlOb2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICBpZiAoIWxpdmVuZXNzTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKGF2YWlsYWJpbGl0eU5vZGUtPm9w
KCkgIT0gU2V0TG9jYWwpOwogICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAg
IG1fZ3JhcGgsIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNv
ZGVPcmlnaW4sIGF2YWlsYWJpbGl0eU5vZGUpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpeFBv
c3NpYmxlR2V0TG9jYWwoQmFzaWNCbG9jayogYmxvY2ssIEVkZ2UmIGVkZ2UsIGJvb2wgY2hhbmdl
UmVmKQotICAgIHsKLSAgICAgICAgTm9kZSogY2hpbGQgPSBlZGdlLm5vZGUoKTsKLSAgICAgICAg
aWYgKGNoaWxkLT5vcCgpICE9IEdldExvY2FsKQotICAgICAgICAgICAgcmV0dXJuOwotI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIiAg
ICBDb25zaWRlcmluZyBHZXRMb2NhbCBhdCBAJXUsIGxvY2FsIHIlZC5cbiIsIG5vZGUtPmluZGV4
KCksIGNoaWxkLT5sb2NhbCgpKTsKLSNlbmRpZgotICAgICAgICBpZiAoY2hpbGQtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBJdCdzIGNhcHR1
cmVkLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBOb2RlKiBvcmlnaW5hbE5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQoY2hp
bGQtPmxvY2FsKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
LSAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgRGVhbGluZyB3aXRoIG9yaWdpbmFsIEAldS5cbiIs
IG9yaWdpbmFsTm9kZS0+aW5kZXgoKSk7Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUKG9yaWdpbmFs
Tm9kZSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICBkYXRhTG9nRigiICAgICAgICBPcmlnaW5hbCBoYXMgbG9jYWwgciVkLlxuIiwgb3JpZ2luYWxO
b2RlLT5sb2NhbCgpKTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQoY2hpbGQtPmxvY2FsKCkgPT0g
b3JpZ2luYWxOb2RlLT5sb2NhbCgpKTsKLSAgICAgICAgLy8gUG9zc2liaWxpdGllczoKLSAgICAg
ICAgLy8gU2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZhbHVlIG9m
IHNvbWV0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5Ci0gICAgICAgIC8vICAgICBhdmFpbGFibGUg
aW4gdGhlIGZpcnN0IGJsb2NrIHdpdGggYSBrbm93biBOb2RlSW5kZXguCi0gICAgICAgIC8vIEdl
dExvY2FsIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhp
bmcgdGhhdCB0aGUgZmlyc3QKLSAgICAgICAgLy8gICAgIGJsb2NrIGFsc28gZ2V0cy4KLSAgICAg
ICAgLy8gUGhpIC0+IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24g
YW4gb3BlcmFuZCB0aGF0IHRoZSBmaXJzdCBibG9jawotICAgICAgICAvLyAgICAgd2FzIGFsc28g
YXNraW5nIGZvciBrZWVwLWFsaXZlIG9uLgotICAgICAgICAvLyBTZXRBcmd1bWVudCAtPiB0aGUg
c2Vjb25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9wZXJhbmQgdGhhdCB0
aGUKLSAgICAgICAgLy8gICAgIGZpcnN0IGJsb2NrIHdhcyBrZWVwaW5nIGFsaXZlIGJ5IHZpcnR1
ZSBvZiB0aGUgZmlyc3RCbG9jayBiZWluZyB0aGUgcm9vdCBhbmQKLSAgICAgICAgLy8gICAgIHRo
ZSBvcGVyYW5kIGJlaW5nIGFuIGFyZ3VtZW50LgotICAgICAgICAvLyBGbHVzaCAtPiB0aGUgc2Vj
b25kQmxvY2sgaXMgYXNraW5nIGZvciBrZWVwLWFsaXZlIG9uIGFuIG9wZXJhbmQgdGhhdCB0aGUg
Zmlyc3QKLSAgICAgICAgLy8gICAgIGJsb2NrIHdhcyBmb3JjaW5nIHRvIGJlIGFsaXZlLCBzbyB0
aGUgc2Vjb25kIGJsb2NrIHNob3VsZCByZWZlciBjaGlsZCBvZgotICAgICAgICAvLyAgICAgdGhl
IGZsdXNoLgotICAgICAgICBpZiAob3JpZ2luYWxOb2RlLT5vcCgpID09IEZsdXNoKQotICAgICAg
ICAgICAgb3JpZ2luYWxOb2RlID0gb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAg
ICAgIHN3aXRjaCAob3JpZ2luYWxOb2RlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgU2V0TG9jYWw6
IHsKLSAgICAgICAgICAgIGlmIChjaGFuZ2VSZWYpCi0gICAgICAgICAgICAgICAgQVNTRVJUKG9y
aWdpbmFsTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgICAgSXQncyBhIFNl
dExvY2FsLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQoZWRn
ZSwgb3JpZ2luYWxOb2RlLT5jaGlsZDEoKS5ub2RlKCksIGNoYW5nZVJlZik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0jaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAg
ICAgICAgSXQncyBhIEdldExvY2FsLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChvcmln
aW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFu
Z2VDaGlsZChlZGdlLCBvcmlnaW5hbE5vZGUsIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgR2V0TG9jYWwgdGhhdCBwb2ludHMgdG8gYSBjaGlsZCBHZXRMb2NhbCB0aGF0
IGlzIGRlYWQsIHRoZW4KLSAgICAgICAgICAgIC8vIHdlIGhhdmUgbm8gbmVlZCB0byBkbyBhbnl0
aGluZzogdGhpcyBvcmlnaW5hbCBHZXRMb2NhbCBpcyBzdGlsbCB2YWxpZC4KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgUGhpOgotICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OiB7Ci0gICAgICAgIGlmIChjaGFuZ2VSZWYpCi0gICAgICAgICAgICBBU1NFUlQob3Jp
Z2luYWxOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBJdCdzIFBoaS9T
ZXRBcmd1bWVudC5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICAvLyBLZWVwIHRoZSBHZXRMb2Nh
bCEKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgsIERvbnRSZWZDaGlsZHJlbiwgRG9udFJl
Zk5vZGUsIFNwZWNOb25lLCBQaGFudG9tTG9jYWwsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICBP
cEluZm8obGl2ZW5lc3NOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGpldHRpc29uQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4
IGpldHRpc29uZWRCbG9ja0luZGV4LCBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbikKQEAg
LTM2MywzOCArMjg5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgZml4SmV0dGlzb25lZFByZWRlY2Vz
c29ycyhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgZml4UGhpcyhCbG9ja0luZGV4IHNvdXJjZUJsb2NrSW5kZXgsIEJsb2NrSW5kZXggZGVz
dGluYXRpb25CbG9ja0luZGV4KQotICAgIHsKLSAgICAgICAgQmFzaWNCbG9jayogc291cmNlQmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW3NvdXJjZUJsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBC
YXNpY0Jsb2NrKiBkZXN0aW5hdGlvbkJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tkZXN0aW5hdGlv
bkJsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBpZiAoIWRlc3RpbmF0aW9uQmxvY2spIHsKLSAg
ICAgICAgICAgIC8vIElmIHdlJ3JlIHRyeWluZyB0byBraWxsIG9mZiB0aGUgc291cmNlIGJsb2Nr
IGFuZCB0aGUgZGVzdGluYXRpb24gYmxvY2sgaXMgYWxyZWFkeQotICAgICAgICAgICAgLy8gZGVh
ZCwgdGhlbiB3ZSdyZSBkb25lIQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVzdGluYXRpb25CbG9jay0+cGhpcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGRlc3RpbmF0aW9uQmxvY2stPnBo
aXNbaV07Ci0gICAgICAgICAgICBOb2RlKiBteU5vZGUgPSBzb3VyY2VCbG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQocGhpTm9kZS0+bG9jYWwoKSk7Ci0gICAgICAgICAgICBpZiAoIW15Tm9k
ZSkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBoYXBwZW4gaWYgdGhlcmUgaXMgYSBw
aGkgaW4gdGhlIGRlc3RpbmF0aW9uIHRoYXQgcmVmZXJzIGludG8KLSAgICAgICAgICAgICAgICAv
LyB0aGUgZGVzdGluYXRpb24gaXRzZWxmLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAg
ICAgICAgICAgIGRhdGFMb2dGKAotICAgICAgICAgICAgICAgICJDb25zaWRlcmluZyByZW1vdmlu
ZyByZWZlcmVuY2UgZnJvbSBwaGkgQCV1IHRvIEAldSBvbiBsb2NhbCByJWQ6IiwKLSAgICAgICAg
ICAgICAgICBwaGlOb2RlLT5pbmRleCgpLCBteU5vZGUtPmluZGV4KCksIHBoaU5vZGUtPmxvY2Fs
KCkpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAobXlOb2RlLT5vcCgpID09IEdldExvY2FsKQot
ICAgICAgICAgICAgICAgIG15Tm9kZSA9IG15Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraikK
LSAgICAgICAgICAgICAgICByZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZlcmVuY2UobXlOb2Rl
LCBwaGlOb2RlLCBqLCBzb3VyY2VCbG9jay0+aXNSZWFjaGFibGUpOwotI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwot
I2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgdm9pZCBmaXhKZXR0aXNvbmVkUHJl
ZGVjZXNzb3JzKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBqZXR0aXNvbmVkQmxv
Y2tJbmRleCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQpAQCAtNDA5LDggKzMwMyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBqZXR0aXNvbmVkQmxv
Y2stPm1fcHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBmaXhQaGlzKGJsb2NrSW5kZXgsIGpldHRpc29uZWRC
bG9ja0luZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZW1vdmVQb3RlbnRpYWxseURlYWRQ
aGlSZWZlcmVuY2UoTm9kZSogbXlOb2RlLCBOb2RlKiBwaGlOb2RlLCB1bnNpZ25lZCBlZGdlSW5k
ZXgsIGJvb2wgY2hhbmdlUmVmKQpAQCAtNTgzLDg4ICs0NzUsOCBAQCBwcml2YXRlOgogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT5waGlzLnNpemUoKTsgKytpKQog
ICAgICAgICAgICAgZmlyc3RCbG9jay0+cGhpcy5hcHBlbmQoc2Vjb25kQmxvY2stPnBoaXNbaV0p
OwogCi0gICAgICAgIC8vIEJlZm9yZSB3ZSBzdGFydCBjaGFuZ2luZyB0aGUgc2Vjb25kIGJsb2Nr
J3MgZ3JhcGgsIHJlY29yZCB3aGF0IG5vZGVzIHdvdWxkCi0gICAgICAgIC8vIGJlIHJlZmVyZW5j
ZWQgYnkgc3VjY2Vzc29ycyBvZiB0aGUgc2Vjb25kIGJsb2NrLgotICAgICAgICBPcGVyYW5kczxP
cGVyYW5kU3Vic3RpdHV0aW9uPiBzdWJzdGl0dXRpb25zKAotICAgICAgICAgICAgc2Vjb25kQmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAgICAgc2Vj
b25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkKLSAgICAgICAgICAgIHJlY29yZFBvc3NpYmxlSW5jb21pbmdSZWZl
cmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1dGlvbnMsIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mTG9jYWxzKCk7ICsraSkKLSAgICAgICAgICAgIHJlY29yZFBvc3NpYmxlSW5j
b21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1dGlvbnMsIGkpOwotCi0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBOb2RlKiBub2RlID0gc2Vjb25kQmxvY2stPmF0KGkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBib29sIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gZmFsc2U7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBQ
aGFudG9tOiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICAgICAgICAgIE5vZGUqIHBvc3Np
YmxlTG9jYWxPcCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAo
cG9zc2libGVMb2NhbE9wLT5vcCgpICE9IEdldExvY2FsCi0gICAgICAgICAgICAgICAgICAgICYm
IHBvc3NpYmxlTG9jYWxPcC0+aGFzTG9jYWwoKQotICAgICAgICAgICAgICAgICAgICAmJiAhcG9z
c2libGVMb2NhbE9wLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gZmlyc3RCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm9wZXJhbmQocG9zc2libGVMb2NhbE9wLT5sb2NhbCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHNldExvY2FsLT5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHNldExvY2Fs
LT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxk
MigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQzKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBG
bHVzaDoKLSAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAvLyBB
IEZsdXNoIGNvdWxkIHVzZSBhIEdldExvY2FsLCBTZXRMb2NhbCwgU2V0QXJndW1lbnQsIG9yIGEg
UGhpLgotICAgICAgICAgICAgICAgIC8vIElmIGl0IHVzZXMgYSBHZXRMb2NhbCwgaXQnbGwgYmUg
dGFrZW4gY2FyZSBvZiBiZWxvdy4gSWYgaXQgdXNlcyBhCi0gICAgICAgICAgICAgICAgLy8gU2V0
TG9jYWwgb3IgU2V0QXJndW1lbnQsIHRoZW4gaXQgbXVzdCBiZSB1c2luZyBhIG5vZGUgZnJvbSB0
aGUKLSAgICAgICAgICAgICAgICAvLyBzYW1lIGJsb2NrLiBCdXQgaWYgaXQgdXNlcyBhIFBoaSwg
dGhlbiB3ZSBzaG91bGQgcmVkaXJlY3QgaXQgdG8KLSAgICAgICAgICAgICAgICAvLyB1c2Ugd2hh
dGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGFkdmVydGlzZWQgYXMgYSB0YWlsIG9wZXJhbmQuCi0gICAg
ICAgICAgICAgICAgLy8gU2ltaWxhcmx5IGZvciBHZXRMb2NhbDsgaXQgY291bGQgdXNlIGFueSBv
ZiB0aG9zZSBleGNlcHQgZm9yCi0gICAgICAgICAgICAgICAgLy8gR2V0TG9jYWwuIElmIGl0IHVz
ZXMgYSBQaGkgdGhlbiBpdCBzaG91bGQgYmUgcmVkaXJlY3RlZCB0byB1c2UgYQotICAgICAgICAg
ICAgICAgIC8vIFBoaSBmcm9tIHRoZSB0YWlsIG9wZXJhbmQuCi0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5vcCgpICE9IFBoaSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSogYXRGaXJzdCA9IGZpcnN0
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOwotICAgICAgICAg
ICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgRWRnZShz
a2lwR2V0TG9jYWwoYXRGaXJzdCkpLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAg
ICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoIWNoaWxkcmVuQWxyZWFkeUZpeGVkKSB7Ci0gICAgICAgICAgICAgICAg
Ym9vbCBjaGFuZ2VSZWYgPSBub2RlLT5zaG91bGRHZW5lcmF0ZSgpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGEgR2V0TG9jYWwsIHRoZW4gd2UgbWln
aHQgbGlrZSB0byBmaXggaXQuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBO
b2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJ
ZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgKytjaGlsZElkeCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCEhbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG1fZ3JhcGgubV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF0sIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEhbm9kZS0+Y2hpbGQxKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZml4UG9zc2libGVHZXRMb2NhbChmaXJzdEJsb2NrLCBub2RlLT5jaGlsZHJl
bi5jaGlsZDEoKSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEhbm9kZS0+
Y2hpbGQyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwo
Zmlyc3RCbG9jaywgbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIGNoYW5nZVJlZik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoISFub2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUtPmNoaWxkcmVu
LmNoaWxkMygpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaXJzdEJsb2NrLT5hcHBlbmQo
bm9kZSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRC
bG9jay0+c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmaXJzdEJsb2NrLT5hcHBlbmQoc2Vjb25k
QmxvY2stPmF0KGkpKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0
KCktPmlzVGVybWluYWwoKSk7CiAgICAgICAgIApAQCAtNjg2LDM3ICs0OTgsNiBAQCBwcml2YXRl
OgogICAgICAgICBpZiAoamV0dGlzb25lZEJsb2NrSW5kZXggIT0gTm9CbG9jaykKICAgICAgICAg
ICAgIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoZmlyc3RCbG9ja0luZGV4LCBqZXR0aXNvbmVk
QmxvY2tJbmRleCk7CiAgICAgICAgIAotICAgICAgICAvLyBGaXggdXAgdGhlIHZhcmlhYmxlcyBh
dCB0YWlsLgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQotICAgICAgICAgICAgZml4VGFp
bE9wZXJhbmQoZmlyc3RCbG9jaywgc2Vjb25kQmxvY2ssIGFyZ3VtZW50VG9PcGVyYW5kKGkpLCBz
dWJzdGl0dXRpb25zKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9j
ay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkKLSAgICAgICAgICAgIGZp
eFRhaWxPcGVyYW5kKGZpcnN0QmxvY2ssIHNlY29uZEJsb2NrLCBpLCBzdWJzdGl0dXRpb25zKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIEZpeCB1cCB0aGUgcmVmZXJlbmNlcyBmcm9tIG91ciBuZXcg
c3VjY2Vzc29ycy4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1TdWNjZXNz
b3JzKGZpcnN0QmxvY2spOyBpLS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgPSBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGZpcnN0QmxvY2ssIGkpXS5n
ZXQoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzdWNjZXNzb3ItPnBo
aXMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gc3VjY2Vz
c29yLT5waGlzW2pdOwotICAgICAgICAgICAgICAgIGJvb2wgY2hhbmdlUmVmID0gcGhpTm9kZS0+
c2hvdWxkR2VuZXJhdGUoKTsKLSAgICAgICAgICAgICAgICBPcGVyYW5kU3Vic3RpdHV0aW9uIHN1
YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMub3BlcmFuZChwaGlOb2RlLT5sb2NhbCgpKTsKLSNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgIFBlcmZvcm1pbmcgb3BlcmFuZCBzdWJzdGl0dXRpb24gIiwgc3Vic3RpdHV0
aW9uLCAiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxk
MSgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAo
cGhpTm9kZS0+Y2hpbGQxKCkgPT0gc3Vic3RpdHV0aW9uLm9sZENoaWxkKQotICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKHBoaU5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBz
dWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgaWYgKCFw
aGlOb2RlLT5jaGlsZDIoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpID09IHN1YnN0aXR1dGlvbi5vbGRDaGlsZCkK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VDaGlsZChwaGlOb2RlLT5jaGlsZHJl
bi5jaGlsZDIoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFuZ2VSZWYpOwotICAgICAgICAg
ICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDMoKSA9PSBzdWJzdGl0dXRp
b24ub2xkQ2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQocGhp
Tm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVm
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgZmlyc3RCbG9j
ay0+dmFsdWVzQXRUYWlsID0gc2Vjb25kQmxvY2stPnZhbHVlc0F0VGFpbDsKICAgICAgICAgZmly
c3RCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uID0gc2Vjb25kQmxvY2stPmNmYUJyYW5jaERpcmVj
dGlvbjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2Nr
SW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIK
KyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgQ1BTUmV0aHJlYWRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6
CisgICAgQ1BTUmV0aHJlYWRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJDUFMgcmV0aHJlYWRpbmciKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBy
dW4oKQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgZnJlZVVubmVjZXNz
YXJ5Tm9kZXMoKTsKKyAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MoKTsKKyAgICAg
ICAgcHJvcGFnYXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7CisgICAgICAgIHByb3BhZ2F0ZVBoaXM8
QXJndW1lbnRPcGVyYW5kPigpOworICAgICAgICBtX2dyYXBoLmNvbGxlY3RHYXJiYWdlKCk7Cisg
ICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVhZGVkQ1BTOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgCisgICAgdm9pZCBmcmVlVW5uZWNl
c3NhcnlOb2RlcygpCisgICAgeworICAgICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lv
bigiREZHIENQUyBSZXRocmVhZGluZzogZnJlZVVubmVjZXNzYXJ5Tm9kZXMiKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2st
PmlzUmVhY2hhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdW5zaWduZWQgZnJvbUlu
ZGV4ID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRvSW5kZXggPSAwOworICAgICAgICAgICAg
d2hpbGUgKGZyb21JbmRleCA8IGJsb2NrLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KGZyb21JbmRleCsrKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAg
ICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKCkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5jaGls
ZDEoKS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTZXRM
b2NhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21Mb2Nh
bCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkt
Pmhhc1Jlc3VsdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgTm9wOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSAwOyAvLyBSZXNldCB0aGUgcmVw
bGFjZW1lbnQgc2luY2UgdGhlIG5leHQgcGhhc2Ugd2lsbCB1c2UgaXQuCisgICAgICAgICAgICAg
ICAgYmxvY2stPmF0KHRvSW5kZXgrKykgPSBub2RlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYmxvY2stPnJlc2l6ZSh0b0luZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisg
ICAgICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUlu
ZGV4XSk7CisgICAgICAgICAgICBibG9jay0+cGhpcy5yZXNpemUoMCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CisgICAgdm9p
ZCBjbGVhclZhcmlhYmxlc0F0SGVhZEFuZFRhaWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKAor
ICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemVGb3I8b3BlcmFuZEtpbmQ+
KCkKKyAgICAgICAgICAgID09IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zaXplRm9yPG9wZXJh
bmRLaW5kPigpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5zaXplRm9yPG9wZXJhbmRLaW5kPigpOyBpLS07KSB7CisgICAgICAg
ICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXRGb3I8b3BlcmFuZEtpbmQ+KGkpID0gMDsK
KyAgICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4o
aSkgPSAwOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgTm9kZSog
YWRkUGhpU2lsZW50bHkoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IENvZGVPcmlnaW4mIGNvZGVP
cmlnaW4sIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCisgICAgeworICAgICAgICBOb2Rl
KiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIFBoaSwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSk7CisgICAgICAgIGJs
b2NrLT5waGlzLmFwcGVuZChyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBBTFdBWVNf
SU5MSU5FIE5vZGUqIGFkZFBoaShCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgQ29kZU9yaWdpbiYg
Y29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgc2l6ZV90IGluZGV4KQor
ICAgIHsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkUGhpU2lsZW50bHkoYmxvY2ssIGNvZGVP
cmlnaW4sIHZhcmlhYmxlKTsKKyAgICAgICAgcGhpU3RhY2tGb3I8b3BlcmFuZEtpbmQ+KCkuYXBw
ZW5kKFBoaVN0YWNrRW50cnkoYmxvY2ssIGluZGV4LCByZXN1bHQpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtp
bmQ+CisgICAgQUxXQVlTX0lOTElORSBOb2RlKiBhZGRQaGkoY29uc3QgQ29kZU9yaWdpbiYgY29k
ZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgc2l6ZV90IGluZGV4KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkZFBoaTxvcGVyYW5kS2luZD4obV9ibG9jaywgY29kZU9yaWdp
biwgdmFyaWFibGUsIGluZGV4KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtp
bmQgb3BlcmFuZEtpbmQ+CisgICAgdm9pZCBjYW5vbmljYWxpemVHZXRMb2NhbEZvcihOb2RlKiBu
b2RlLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBzaXplX3QgaWR4KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoTm9k
ZSogb3RoZXJOb2RlID0gbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRLaW5k
PihpZHgpKSB7CisgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSA9PSB2YXJpYWJsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAob3Ro
ZXJOb2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgY2Fz
ZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgb3RoZXJOb2RlID0gb3RoZXJOb2RlLT5j
aGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBQ
aGkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBoYXZlIGEgR2V0TG9jYWws
IHNvIHRoaXMgbWlnaHQgYXMgd2VsbCBiZSB0aGUgb25lLgorICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhlck5vZGUpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRLaW5kPihpZHgpID0g
bm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgpID09IFNldExvY2Fs
IHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgp
ID09IFNldExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCB8fCBvdGhlck5v
ZGUtPm9wKCkgPT0gR2V0TG9jYWwpOworICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAob3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2RlKSk7CisgICAgICAgICAgICAg
ICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRLaW5kPihpZHgpID0gbm9k
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG90aGVyTm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAg
b3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgpID09IFNldExv
Y2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBQaGkgfHwgb3RoZXJO
b2RlLT5vcCgpID09IFNldExvY2FsIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gS2VlcCB0aGlzIEdldExvY2Fs
IGJ1dCBsaW5rIGl0IHRvIHRoZSBwcmlvciBvbmVzLgorICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9kZSkpOworICAgICAgICAgICAgICAgIG1fYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9IG5vZGU7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgICAgICAgICAg
Ly8gUmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIEdldExvY2FsIHdpdGggb3RoZXJOb2Rl
LgorICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gb3RoZXJOb2RlOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgQVNTRVJUKG90aGVyTm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICBub2Rl
LT5yZXBsYWNlbWVudCA9IG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2RlKiBwaGkgPSBhZGRQaGk8
b3BlcmFuZEtpbmQ+KG5vZGUtPmNvZGVPcmlnaW4sIHZhcmlhYmxlLCBpZHgpOworICAgICAgICBu
b2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShwaGkpKTsKKyAgICAgICAgbV9ibG9jay0+dmFy
aWFibGVzQXRIZWFkLmF0Rm9yPG9wZXJhbmRLaW5kPihpZHgpID0gcGhpOworICAgICAgICBtX2Js
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGlkeCkgPSBub2RlOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUdldExvY2FsKE5vZGUqIG5vZGUpCisgICAg
eworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudCh2YXJpYWJsZS0+bG9j
YWwoKSkpCisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1bWVudE9wZXJh
bmQ+KG5vZGUsIHZhcmlhYmxlLCBvcGVyYW5kVG9Bcmd1bWVudCh2YXJpYWJsZS0+bG9jYWwoKSkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2Nh
bE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY2Fub25pY2FsaXplU2V0TG9jYWwoTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKG5vZGUtPmxvY2FsKCksIG5v
ZGUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZSwgT3BlcmFu
ZEtpbmQgb3BlcmFuZEtpbmQ+CisgICAgdm9pZCBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxv
Y2FsRm9yKE5vZGUqIG5vZGUsIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUsIHNpemVfdCBp
ZHgpCisgICAgeworICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChOb2RlKiBvdGhlck5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRG
b3I8b3BlcmFuZEtpbmQ+KGlkeCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgc3dpdGNoIChvdGhlck5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6Cisg
ICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
CisgICAgICAgICAgICAgICAgb3RoZXJOb2RlID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBB
U1NFUlQob3RoZXJOb2RlLT5vcCgpID09IFBoaSB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9j
YWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKG5vZGVUeXBlID09IFBoYW50b21Mb2NhbCAmJiBvdGhlck5vZGUtPm9wKCkg
PT0gU2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAvLyBQaGFudG9tTG9jYWwoU2V0TG9jYWwp
IGRvZXNuJ3QgbWFrZSBzZW5zZS4gUGhhbnRvbUxvY2FsIG1lYW5zOiBhdCB0aGlzCisgICAgICAg
ICAgICAgICAgLy8gcG9pbnQgSSBrbm93IEkgd291bGQgaGF2ZSBiZWVuIGludGVyZXN0ZWQgaW4g
dGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIHB1
cnBvc2Ugb2YgT1NSLiBQaGFudG9tTG9jYWwoU2V0TG9jYWwpIG1lYW5zOiBhdCB0aGlzIHBvaW50
IEkKKyAgICAgICAgICAgICAgICAvLyBrbm93IHRoYXQgSSB3b3VsZCBoYXZlIHJlYWQgdGhlIHZh
bHVlIHdyaXR0ZW4gYnkgdGhhdCBTZXRMb2NhbC4gVGhpcyBpcworICAgICAgICAgICAgICAgIC8v
IHJlZHVuZGFudCBhbmQgaW5lZmZpY2llbnQsIHNpbmNlIHJlYWxseSBpdCBqdXN0IG1lYW5zIHRo
YXQgd2Ugd2FudCB0bworICAgICAgICAgICAgICAgIC8vIGJlIGtlZXBpbmcgdGhlIG9wZXJhbmQg
dG8gdGhlIFNldExvY2FsIGFsaXZlLiBUaGUgU2V0TG9jYWwgbWF5IGRpZSwgYW5kCisgICAgICAg
ICAgICAgICAgLy8gd2UnbGwgYmUgZmluZSBiZWNhdXNlIE9TUiB0cmFja3MgZGVhZCBTZXRMb2Nh
bHMuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gU28gd2UgdHVybiB0aGlz
IGludG8gYSBQaGFudG9tIG9uIHRoZSBjaGlsZCBvZiB0aGUgU2V0TG9jYWwuCisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRv
bSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKG90aGVyTm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm90aGluZyB3cm9uZyB3aXRoIGhhdmlu
ZyByZWR1bmRhbnQgRmx1c2gncy4gSXQganVzdCBuZWVkcyB0bworICAgICAgICAgICAgLy8gYmUg
bGlua2VkIGFwcHJvcHJpYXRlbHkuIE5vdGUgdGhhdCBpZiB0aGVyZSBoYWQgYWxyZWFkeSBiZWVu
IGEgcHJldmlvdXMKKyAgICAgICAgICAgIC8vIHVzZSBhdCB0YWlsIHRoZW4gd2UgZG9uJ3Qgb3Zl
cnJpZGUgaXQuIEl0J3MgZmluZSBmb3IgdmFyaWFibGVzQXRUYWlsIHRvCisgICAgICAgICAgICAv
LyBvbWl0IEZsdXNoZXMgYW5kIFBoYW50b21Mb2NhbHMuIE9uIHRoZSBvdGhlciBoYW5kLCBoYXZp
bmcgaXQgcmVmZXIgdG8gYQorICAgICAgICAgICAgLy8gRmx1c2ggb3IgYSBQaGFudG9tTG9jYWwg
aWYganVzdCBiZWZvcmUgaXQgdGhlIGxhc3QgdXNlIHdhcyBhIEdldExvY2FsIHdvdWxkCisgICAg
ICAgICAgICAvLyBzZXJpb3VzbHkgY29uZnVzZSB0aGUgQ0ZBLgorICAgICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2RlKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShF
ZGdlKGFkZFBoaTxvcGVyYW5kS2luZD4obm9kZS0+Y29kZU9yaWdpbiwgdmFyaWFibGUsIGlkeCkp
KTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9wZXJhbmRLaW5kPihp
ZHgpID0gbm9kZTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJh
bmRLaW5kPihpZHgpID0gbm9kZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2Rl
VHlwZT4KKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWwoTm9kZSogbm9k
ZSkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KHZhcmlh
YmxlLT5sb2NhbCgpKSkKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9j
YWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIG9wZXJhbmRU
b0FyZ3VtZW50KHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIExvY2FsT3BlcmFu
ZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjYW5vbmljYWxpemVTZXRBcmd1bWVudChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
aW50IGxvY2FsID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgQVNTRVJUKG9wZXJhbmRJc0FyZ3Vt
ZW50KGxvY2FsKSk7CisgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmRUb0FyZ3VtZW50KGxv
Y2FsKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RU
aW1lKGFyZ3VtZW50LCBub2RlKTsKKyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNl
dEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKCkKKyAgICB7CisgICAgICAgIGlmICghbV9ibG9j
aykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKG1fYmxvY2stPmlzUmVhY2hh
YmxlKTsKKyAgICAgICAgCisgICAgICAgIGNsZWFyVmFyaWFibGVzQXRIZWFkQW5kVGFpbDxBcmd1
bWVudE9wZXJhbmQ+KCk7CisgICAgICAgIGNsZWFyVmFyaWFibGVzQXRIZWFkQW5kVGFpbDxMb2Nh
bE9wZXJhbmQ+KCk7CisgICAgICAgIAorICAgICAgICAvLyBBc3N1bWVzIHRoYXQgYWxsIHBoaSBy
ZWZlcmVuY2VzIGhhdmUgYmVlbiByZW1vdmVkLiBBc3N1bWVzIHRoYXQgdGhpbmdzIHRoYXQKKyAg
ICAgICAgLy8gc2hvdWxkIGJlIGxpdmUgaGF2ZSBhIG5vbi16ZXJvIHJlZiBjb3VudCwgYnV0IGRv
ZXNuJ3QgYXNzdW1lIHRoYXQgdGhlIHJlZgorICAgICAgICAvLyBjb3VudHMgYXJlIGNvcnJlY3Qg
YmV5b25kIHRoYXQgKG1vcmUgZm9ybWFsbHkgISFsb2dpY2FsUmVmQ291bnQgPT0gISFhY3R1YWxS
ZWZDb3VudAorICAgICAgICAvLyBidXQgbm90IGxvZ2ljYWxSZWZDb3VudCA9PSBhY3R1YWxSZWZD
b3VudCkuIEFzc3VtZXMgdGhhdCBpdCBjYW4gYnJlYWsgcmVmCisgICAgICAgIC8vIGNvdW50cy4K
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgbV9ibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
Z3JhcGgucGVyZm9ybVN1YnN0aXR1dGlvbihub2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gVGhlIHJ1bGVzIGZvciB0aHJlYWRlZCBDUFMgZm9ybToKKyAgICAgICAgICAgIC8vIAor
ICAgICAgICAgICAgLy8gSGVhZCB2YXJpYWJsZTogZGVzY3JpYmVzIHdoYXQgaXMgbGl2ZSBhdCB0
aGUgaGVhZCBvZiB0aGUgYmFzaWMgYmxvY2suCisgICAgICAgICAgICAvLyBIZWFkIHZhcmlhYmxl
IGxpbmtzIG1heSByZWZlciB0byBGbHVzaCwgUGhhbnRvbUxvY2FsLCBQaGksIG9yIFNldEFyZ3Vt
ZW50LgorICAgICAgICAgICAgLy8gU2V0QXJndW1lbnQgbWF5IG9ubHkgYXBwZWFyIGluIHRoZSBy
b290IGJsb2NrLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRhaWwgdmFyaWFibGU6
IHRoZSBsYXN0IHRoaW5nIHRoYXQgaGFwcGVuZWQgdG8gdGhlIHZhcmlhYmxlIGluIHRoZSBibG9j
ay4KKyAgICAgICAgICAgIC8vIEl0IG1heSBiZSBhIEZsdXNoLCBQaGFudG9tTG9jYWwsIEdldExv
Y2FsLCBTZXRMb2NhbCwgb3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLyBTZXRBcmd1bWVu
dCBtYXkgb25seSBhcHBlYXIgaW4gdGhlIHJvb3QgYmxvY2suIE5vdGUgdGhhdCBpZiB0aGVyZSBl
dmVyCisgICAgICAgICAgICAvLyB3YXMgYSBHZXRMb2NhbCB0byB0aGUgdmFyaWFibGUsIGFuZCBp
dCB3YXMgZm9sbG93ZWQgYnkgUGhhbnRvbUxvY2FscyBhbmQKKyAgICAgICAgICAgIC8vIEZsdXNo
ZXMgYnV0IG5vdCBTZXRMb2NhbHMsIHRoZW4gdGhlIHRhaWwgdmFyaWFibGUgd2lsbCBiZSB0aGUg
R2V0TG9jYWwuCisgICAgICAgICAgICAvLyBUaGlzIHJlZmxlY3RzIHRoZSBmYWN0IHRoYXQgeW91
IG9ubHkgY2FyZSB0aGF0IHRoZSB0YWlsIHZhcmlhYmxlIGlzIGEKKyAgICAgICAgICAgIC8vIEZs
dXNoIG9yIFBoYW50b21Mb2NhbCBpZiBub3RoaW5nIGVsc2UgaW50ZXJlc3RpbmcgaGFwcGVuZWQu
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2hpbGQgb2YgR2V0TG9jYWw6IHRoZSBv
cGVyYXRpb24gdGhhdCB0aGUgR2V0TG9jYWwga2VlcHMgYWxpdmUuIEZvcgorICAgICAgICAgICAg
Ly8gdW5jYXB0dXJlZCBsb2NhbHMsIGl0IG1heSBiZSBhIFBoaSBmcm9tIHRoZSBjdXJyZW50IGJs
b2NrLiBGb3IgYXJndW1lbnRzLAorICAgICAgICAgICAgLy8gaXQgbWF5IGJlIGEgU2V0QXJndW1l
bnQuIEZvciBjYXB0dXJlZCBsb2NhbHMgYW5kIGFyZ3VtZW50cyBpdCBtYXkgYWxzbyBiZQorICAg
ICAgICAgICAgLy8gYSBTZXRMb2NhbC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBD
aGlsZCBvZiBTZXRMb2NhbDogbXVzdCBiZSBhIHZhbHVlIHByb2R1Y2luZyBub2RlLgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIENoaWxkIG9mIEZsdXNoOiBpdCBtYXkgYmUgYSBQaGkg
ZnJvbSB0aGUgY3VycmVudCBibG9jayBvciBhIFNldExvY2FsLiBGb3IKKyAgICAgICAgICAgIC8v
IGFyZ3VtZW50cyBpdCBtYXkgYWxzbyBiZSBhIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIENoaWxkIG9mIFBoYW50b21Mb2NhbDogaXQgbWF5IGJlIGEgUGhpIGZy
b20gdGhlIGN1cnJlbnQgYmxvY2suIEZvcgorICAgICAgICAgICAgLy8gYXJndW1lbnRzIGl0IG1h
eSBhbHNvIGJlIGEgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
Q2hpbGRyZW4gb2YgUGhpOiBvdGhlciBQaGlzIGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrLCBvciBh
bnkgb2YgdGhlCisgICAgICAgICAgICAvLyBmb2xsb3dpbmcgZnJvbSBmcm9tIHByZWRlY2Vzc29y
IGJsb2NrczogU2V0TG9jYWwsIFBoaSwgb3IgU2V0QXJndW1lbnQuCisgICAgICAgICAgICAvLyBU
aGVzZSBhcmUgY29tcHV0ZWQgYnkgbG9va2luZyBhdCB0aGUgdGFpbCB2YXJpYWJsZXMgb2YgdGhl
IHByZWRlY2Vzc29yCisgICAgICAgICAgICAvLyBibG9ja3MgYW5kIGVpdGhlciB1c2luZyBpdCBk
aXJlY3RseSAoaWYgaXQncyBhIFNldExvY2FsLCBQaGksIG9yCisgICAgICAgICAgICAvLyBTZXRB
cmd1bWVudCkgb3IgbG9hZGluZyB0aGF0IG5vZGVzIGNoaWxkIChpZiBpdCdzIGEgR2V0TG9jYWws
IFBoYW5vbUxvY2FsLAorICAgICAgICAgICAgLy8gb3IgRmx1c2ggLSBhbGwgb2YgdGhlc2Ugd2ls
bCBoYXZlIGNoaWxkcmVuIHRoYXQgYXJlIFNldExvY2FsLCBQaGksIG9yCisgICAgICAgICAgICAv
LyBTZXRBcmd1bWVudCkuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYW5v
bmljYWxpemVHZXRMb2NhbChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2Fu
b25pY2FsaXplU2V0TG9jYWwobm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNhbm9u
aWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWw8Rmx1c2g+KG5vZGUpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6
CisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbDxQaGFudG9t
Pihub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAgY2Fub25pY2FsaXplU2V0
QXJndW1lbnQobm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY2Fub25pY2FsaXplTG9jYWxz
SW5CbG9ja3MoKQorICAgIHsKKyAgICAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBDUFMgUmV0aHJlYWRpbmc6IGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzIik7CisgICAg
ICAgIAorICAgICAgICBmb3IgKG1fYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OyBtX2Jsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW21fYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJ
bkJsb2NrKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtp
bmQgb3BlcmFuZEtpbmQ+CisgICAgdm9pZCBwcm9wYWdhdGVQaGlzKCkKKyAgICB7CisgICAgICAg
IFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBwaGlTdGFjayA9IG9wZXJhbmRLaW5kID09IEFy
Z3VtZW50T3BlcmFuZCA/IG1fYXJndW1lbnRQaGlTdGFjayA6IG1fbG9jYWxQaGlTdGFjazsKKyAg
ICAgICAgCisgICAgICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ1BTIFJl
dGhyZWFkaW5nOiBwcm9wYWdhdGVQaGlzIik7CisgICAgICAgIAorICAgICAgICAvLyBFbnN1cmUg
dGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KKyAgICAgICAgbV9ibG9j
ayA9IDA7CisgICAgICAgIG1fYmxvY2tJbmRleCA9IE5vQmxvY2s7CisgICAgICAgIAorICAgICAg
ICB3aGlsZSAoIXBoaVN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgUGhpU3RhY2tFbnRy
eSBlbnRyeSA9IHBoaVN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgIHBoaVN0YWNrLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBlbnRy
eS5tX2Jsb2NrOworICAgICAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBi
bG9jay0+bV9wcmVkZWNlc3NvcnM7CisgICAgICAgICAgICBOb2RlKiBjdXJyZW50UGhpID0gZW50
cnkubV9waGk7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY3Vy
cmVudFBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBzaXplX3QgaW5kZXgg
PSBlbnRyeS5tX2luZGV4OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gcHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0u
Z2V0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogdmFyaWFibGVJ
blByZXZpb3VzID0gcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJh
bmRLaW5kPihpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZUluUHJldmlvdXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJblByZXZpb3VzID0gYWRkUGhpPG9wZXJh
bmRLaW5kPihwcmVkZWNlc3NvckJsb2NrLCBjdXJyZW50UGhpLT5jb2RlT3JpZ2luLCB2YXJpYWJs
ZSwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGluZGV4KSA9IHZhcmlhYmxlSW5QcmV2aW91czsK
KyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLmF0
Rm9yPG9wZXJhbmRLaW5kPihpbmRleCkgPSB2YXJpYWJsZUluUHJldmlvdXM7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJsZUluUHJl
dmlvdXMtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgRmx1c2g6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFibGVJblByZXZp
b3VzLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUluUHJldmlvdXMtPmNoaWxkMSgp
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJs
ZUluUHJldmlvdXMgPSB2YXJpYWJsZUluUHJldmlvdXMtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJU
KAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluUHJldmlvdXMtPm9wKCkgPT0gU2V0TG9j
YWwKKyAgICAgICAgICAgICAgICAgICAgfHwgdmFyaWFibGVJblByZXZpb3VzLT5vcCgpID09IFBo
aQorICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUluUHJldmlvdXMtPm9wKCkgPT0gU2V0
QXJndW1lbnQpOworICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghY3VycmVudFBoaS0+
Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBoaS0+Y2hpbGRyZW4uc2V0
Q2hpbGQxKEVkZ2UodmFyaWFibGVJblByZXZpb3VzKSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRQ
aGktPmNoaWxkMigpKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQaGktPmNoaWxkcmVu
LnNldENoaWxkMihFZGdlKHZhcmlhYmxlSW5QcmV2aW91cykpOworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFjdXJy
ZW50UGhpLT5jaGlsZDMoKSkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGhpLT5jaGls
ZHJlbi5zZXRDaGlsZDMoRWRnZSh2YXJpYWJsZUluUHJldmlvdXMpKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIE5vZGUqIG5ld1BoaSA9IGFkZFBoaVNpbGVudGx5KGJsb2NrLCBjdXJyZW50
UGhpLT5jb2RlT3JpZ2luLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgbmV3UGhpLT5jaGls
ZHJlbiA9IGN1cnJlbnRQaGktPmNoaWxkcmVuOworICAgICAgICAgICAgICAgIGN1cnJlbnRQaGkt
PmNoaWxkcmVuLmluaXRpYWxpemUobmV3UGhpLCB2YXJpYWJsZUluUHJldmlvdXMsIDApOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0cnVjdCBQaGlTdGFja0Vu
dHJ5IHsKKyAgICAgICAgUGhpU3RhY2tFbnRyeShCYXNpY0Jsb2NrKiBibG9jaywgc2l6ZV90IGlu
ZGV4LCBOb2RlKiBwaGkpCisgICAgICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgICAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgICAg
ICBzaXplX3QgbV9pbmRleDsKKyAgICAgICAgTm9kZSogbV9waGk7CisgICAgfTsKKyAgICAKKyAg
ICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICBWZWN0b3I8UGhpU3RhY2tF
bnRyeSwgMTI4PiYgcGhpU3RhY2tGb3IoKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRLaW5k
ID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50UGhpU3Rh
Y2s7CisgICAgICAgIHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CisgICAgfQorICAgIAorICAgIEJs
b2NrSW5kZXggbV9ibG9ja0luZGV4OworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgVmVj
dG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOworICAgIFZlY3RvcjxQ
aGlTdGFja0VudHJ5LCAxMjg+IG1fbG9jYWxQaGlTdGFjazsKK307CisKK2Jvb2wgcGVyZm9ybUNQ
U1JldGhyZWFkaW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIENQUyBSZXRocmVhZGluZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFz
ZTxDUFNSZXRocmVhZGluZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ1BTUmV0aHJlYWRpbmdQaGFzZV9oCisj
ZGVmaW5lIERGR0NQU1JldGhyZWFkaW5nUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gQ1BTIFJldGhyZWFkaW5nOgorLy8KKy8vIFRha2Vz
IGEgZ3JhcGggaW4gd2hpY2ggdGhlcmUgYXJlIGFyYml0cmFyeSBHZXRMb2NhbHMvU2V0TG9jYWxz
IHdpdGggbm8gY29ubmVjdGlvbnMKKy8vIGJldHdlZW4gdGhlbS4gUmVtb3ZlcyByZWR1bmRhbnQg
b25lcyBpbiB0aGUgY2FzZSBvZiB1bmNhcHR1cmVkIHZhcmlhYmxlcy4gQ29ubmVjdHMKKy8vIGFs
bCBvZiB0aGVtIHdpdGggUGhpIGZ1bmN0aW9ucyB0byByZXByZXNlbnQgbGl2ZSByYW5nZXMuCisK
K2Jvb2wgcGVyZm9ybUNQU1JldGhyZWFkaW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ1BT
UmV0aHJlYWRpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc0LDI3ICs5NzQsNiBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIHBl
cmZvcm1TdWJzdGl0dXRpb24oRWRnZSYgY2hpbGQsIGJvb2wgYWRkUmVmID0gdHJ1ZSkKLSAgICB7
Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCi0g
ICAgICAgIGlmICghY2hpbGQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAg
ICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCi0gICAgICAgIE5vZGUqIHJl
cGxhY2VtZW50ID0gY2hpbGQtPnJlcGxhY2VtZW50OwotICAgICAgICBpZiAoIXJlcGxhY2VtZW50
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgY2hpbGQuc2V0Tm9kZShy
ZXBsYWNlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGVyZSBpcyBkZWZpbml0ZWx5IGEg
cmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBkb2VzIG5vdAotICAgICAg
ICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCi0gICAgICAgIEFTU0VSVCghY2hpbGQtPnJlcGxhY2Vt
ZW50KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChhZGRSZWYpCi0gICAgICAgICAgICBtX2dyYXBo
LnJlZihjaGlsZCk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBo
YW50b21DaGlsZHJlbihOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gUGhhbnRvbSk7CkBAIC0xMDcyLDIxICsxMDUxLDEyIEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBwZXJmb3JtTm9kZUNTRShOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgYm9vbCBz
aG91bGRHZW5lcmF0ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Ci0KLSAgICAgICAgaWYgKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENo
aWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAg
IHBlcmZvcm1TdWJzdGl0dXRpb24obV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwg
c2hvdWxkR2VuZXJhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9ybVN1
YnN0aXR1dGlvbihub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAg
ICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgc2hv
dWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLT5jaGls
ZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICB9CisgICAgICAgIG1fZ3Jh
cGgucGVyZm9ybVN1YnN0aXR1dGlvbihub2RlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2Rl
LT5vcCgpID09IFNldExvY2FsKQogICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxh
Z3MoTm9kZVJlbGV2YW50VG9PU1IpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFzaG91bGRHZW5l
cmF0ZSkKKyAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCkBAIC0xMTYyLDI2ICsxMTMyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBw
aGkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICBpZiAoIXNldFJlcGxhY2Vt
ZW50KHBvc3NpYmxlUmVwbGFjZW1lbnQpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgLy8gSWYgdGhlIEdldExvY2FsIHdlIHJlcGxhY2VkIHVzZWQgdG8gcmVmZXIgdG8gYSBT
ZXRMb2NhbCwgdGhlbiBpdCBub3cKLSAgICAgICAgICAgIC8vIHNob3VsZCByZWZlciB0byB0aGUg
Y2hpbGQgb2YgdGhlIFNldExvY2FsIGluc3RlYWQuCi0gICAgICAgICAgICBpZiAocGhpLT5vcCgp
ID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpID09
IHBoaSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVu
LmNoaWxkMSgpLCBwaGktPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5v
ZGUqIG9sZFRhaWwgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQoCi0g
ICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKLSAgICAgICAgICAg
IGlmIChvbGRUYWlsID09IG5vZGUpIHsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKSA9Ci0g
ICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcDsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAvLyBNYWludGFpbiBncmFwaCBpbnRlZ3JpdHk6IHNpbmNlIHdlJ3JlIHJl
cGxhY2luZyBhIEdldExvY2FsIHdpdGggYSBHZXRMb2NhbFVubGlua2VkLAotICAgICAgICAgICAg
ICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBHZXRMb2NhbFVubGlua2VkIGlzIG5vdyBsaW5rZWQu
Ci0gICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRMb2NhbFVu
bGlua2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+c2V0T3AoR2V0
TG9jYWwpOwotICAgICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNoaWxkcmVuLmNo
aWxkMSgpID0gRWRnZShwaGkpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGkp
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC5k
ZXRocmVhZCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSByZXBsYWNlIGEg
R2V0TG9jYWwgd2l0aCBhIEdldExvY2FsVW5saW5rZWQsIHRoZW4gdHVybiB0aGUgR2V0TG9jYWxV
bmxpbmtlZAorICAgICAgICAgICAgLy8gaW50byBhIEdldExvY2FsLgorICAgICAgICAgICAgaWYg
KHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKSB7CisgICAgICAgICAg
ICAgICAgcmVsZXZhbnRMb2NhbE9wLT5jb252ZXJ0VG9HZXRMb2NhbCh2YXJpYWJsZUFjY2Vzc0Rh
dGEsIHBoaSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYocGhpKTsKICAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0xMjM1LDkgKzExOTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9n
cmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKG5vZGUpOwogICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uY2hpbGQxKCkgPSBFZGdlKGRhdGFOb2RlKTsKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGRh
dGFOb2RlKTsKLSAgICAgICAgICAgIE5vZGUqIG9sZFRhaWwgPSBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwotICAgICAgICAgICAgaWYgKG9sZFRhaWwgPT0g
bm9kZSkKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQobG9jYWwpID0gcmVwbGFjZW1lbnQ7CisgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFk
KCk7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJl
dmlzaW9uIDE0MjE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNSArMzksNTcgQEAgdm9pZCBOb2RlUG9pbnRlclRyYWl0
czo6ZHVtcChOb2RlKiB2YWx1ZQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKK25hbWVz
cGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpE
Rkc6Ok9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0
ZSkgeworICAgIGNhc2UgSlNDOjpERkc6OkJlZm9yZUZpeHBvaW50OgorICAgICAgICBvdXQucHJp
bnQoIkJlZm9yZUZpeHBvaW50Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpERkc6
OkZpeHBvaW50Tm90Q29udmVyZ2VkOgorICAgICAgICBvdXQucHJpbnQoIkZpeHBvaW50Tm90Q29u
dmVyZ2VkIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpERkc6OkZpeHBvaW50Q29u
dmVyZ2VkOgorICAgICAgICBvdXQucHJpbnQoIkZpeHBvaW50Q29udmVyZ2VkIik7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEpTQzo6REZHOjpHcmFwaEZvcm0gZm9ybSkKK3sKKyAgICBzd2l0Y2ggKGZv
cm0pIHsKKyAgICBjYXNlIEpTQzo6REZHOjpMb2FkU3RvcmU6CisgICAgICAgIG91dC5wcmludCgi
TG9hZFN0b3JlIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpERkc6OlRocmVhZGVk
Q1BTOgorICAgICAgICBvdXQucHJpbnQoIlRocmVhZGVkQ1BTIik7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEpTQzo6REZHOjpVbmlmaWNhdGlvblN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3Rh
dGUpIHsKKyAgICBjYXNlIEpTQzo6REZHOjpMb2NhbGx5VW5pZmllZDoKKyAgICAgICAgb3V0LnBy
aW50KCJMb2NhbGx5VW5pZmllZCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpTQzo6REZH
OjpHbG9iYWxseVVuaWZpZWQ6CisgICAgICAgIG91dC5wcmludCgiR2xvYmFsbHlVbmlmaWVkIik7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiArMTQ2LDE1IEBA
IGlubGluZSBib29sIHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKQogI2VuZGlmCiB9CiAKK2lu
bGluZSBib29sIGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpCit7CisjaWYgREZHX0VOQUJMRShERUJV
R19WRVJCT1NFKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gdmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpIHx8IE9wdGlvbnM6OmxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpOwor
I2VuZGlmCit9CisKIGlubGluZSBib29sIHNob3VsZER1bXBHcmFwaEF0RWFjaFBoYXNlKCkKIHsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0xNjYsOCArMTc1
LDczIEBAIGVudW0gTm9SZXN1bHRUYWcgeyBOb1Jlc3VsdCB9OwogCiBlbnVtIE9wdGltaXphdGlv
bkZpeHBvaW50U3RhdGUgeyBCZWZvcmVGaXhwb2ludCwgRml4cG9pbnROb3RDb252ZXJnZWQsIEZp
eHBvaW50Q29udmVyZ2VkIH07CiAKKy8vIERlc2NyaWJlcyB0aGUgZm9ybSB5b3UgY2FuIGV4cGVj
dCB0aGUgZW50aXJlIGdyYXBoIHRvIGJlIGluLgorZW51bSBHcmFwaEZvcm0geworICAgIC8vIExv
YWRTdG9yZSBmb3JtIG1lYW5zIHRoYXQgYmFzaWMgYmxvY2tzIG1heSBmcmVlbHkgdXNlIEdldExv
Y2FsLCBTZXRMb2NhbCwKKyAgICAvLyBHZXRMb2NhbFVubGlua2VkLCBhbmQgRmx1c2ggZm9yIGFj
Y2Vzc2luZyBsb2NhbCB2YXJpYWJsZXMgYW5kIGluZGljYXRpbmcKKyAgICAvLyB3aGVyZSB0aGVp
ciBsaXZlIHJhbmdlcyBvdWdodCB0byBiZS4gRGF0YSBmbG93IGJldHdlZW4gbG9jYWwgYWNjZXNz
ZXMgaXMKKyAgICAvLyBpbXBsaWNpdC4gTGl2ZW5lc3MgaXMgb25seSBleHBsaWNpdCBhdCBibG9j
ayBoZWFkcyAodmFyaWFibGVzQXRIZWFkKS4KKyAgICAvLyBUaGlzIGlzIG9ubHkgdXNlZCBieSB0
aGUgREZHIHNpbXBsaWZpZXIgYW5kIGlzIG9ubHkgcHJlc2VydmVkIGJ5IHNhbWUuCisgICAgLy8K
KyAgICAvLyBGb3IgZXhhbXBsZSwgTG9hZFN0b3JlIGZvcm0gZ2l2ZXMgbm8gZWFzeSB3YXkgdG8g
ZGV0ZXJtaW5lIHdoaWNoIFNldExvY2FsJ3MKKyAgICAvLyBmbG93IGludG8gYSBHZXRMb2NhbC4g
QXMgd2VsbCwgTG9hZFN0b3JlIGZvcm0gaW1wbGllcyBubyByZXN0cmljdGlvbnMgb24KKyAgICAv
LyByZWR1bmRhbmN5OiB5b3UgY2FuIGZyZWVseSBlbWl0IG11bHRpcGxlIEdldExvY2Fscywgb3Ig
bXVsdGlwbGUgU2V0TG9jYWxzCisgICAgLy8gKG9yIGFueSBjb21iaW5hdGlvbiB0aGVyZW9mKSB0
byB0aGUgc2FtZSBsb2NhbCBpbiB0aGUgc2FtZSBibG9jay4gTG9hZFN0b3JlCisgICAgLy8gZm9y
bSBkb2VzIG5vdCByZXF1aXJlIGJhc2ljIGJsb2NrcyB0byBkZWNsYXJlIGhvdyB0aGV5IGFmZmVj
dCBvciB1c2UgbG9jYWxzLAorICAgIC8vIG90aGVyIHRoYW4gaW1wbGljaXRseSBieSB1c2luZyB0
aGUgbG9jYWwgb3BzIGFuZCBieSBwcmVzZXJ2aW5nCisgICAgLy8gdmFyaWFibGVzQXRIZWFkLiBG
aW5hbGx5LCBMb2FkU3RvcmUgYWxsb3dzIGZsZXhpYmlsaXR5IGluIGhvdyBsaXZlbmVzcyBvZgor
ICAgIC8vIGxvY2FscyBpcyBleHRlbmRlZDsgZm9yIGV4YW1wbGUgeW91IGNhbiByZXBsYWNlIGEg
R2V0TG9jYWwgd2l0aCBhIFBoYW50b20KKyAgICAvLyBhbmQgc28gbG9uZyBhcyB0aGUgUGhhbnRv
bSByZXRhaW5zIHRoZSBHZXRMb2NhbCdzIGNoaWxkcmVuIChpLmUuIHRoZSBQaGkKKyAgICAvLyBt
b3N0IGxpa2VseSkgdGhlbiBpdCBpbXBsaWVzIHRoYXQgdGhlIGxvY2FsIGlzIHN0aWxsIGxpdmUg
YnV0IHRoYXQgaXQgbmVlZAorICAgIC8vIG5vdCBiZSBzdG9yZWQgdG8gdGhlIHN0YWNrIG5lY2Vz
c2FyaWx5LiBUaGlzIGltcGxpZXMgdGhhdCBQaGFudG9tIGNhbgorICAgIC8vIHJlZmVyZW5jZSBu
b2RlcyB0aGF0IGhhdmUgbm8gcmVzdWx0LCBhcyBsb25nIGFzIHRob3NlIG5vZGVzIGFyZSB2YWxp
ZAorICAgIC8vIEdldExvY2FsIGNoaWxkcmVuIChpLmUuIFBoaSwgU2V0TG9jYWwsIFNldEFyZ3Vt
ZW50KS4KKyAgICAvLworICAgIC8vIExvYWRTdG9yZSBmb3JtIGFsc28gaW1wbGllcyB0aGF0IFBo
aXMgbmVlZCBub3QgaGF2ZSBjaGlsZHJlbi4gQnkgZGVmYXVsdCwKKyAgICAvLyB0aGV5IGVuZCB1
cCBoYXZpbmcgbm8gY2hpbGRyZW4gaWYgeW91IGVudGVyIExvYWRTdG9yZSB1c2luZyB0aGUgY2Fu
b25pY2FsCisgICAgLy8gd2F5IChjYWxsIEdyYXBoOjpkZXRocmVhZCkuCisgICAgLy8KKyAgICAv
LyBMb2FkU3RvcmUgZm9ybSBpcyBzdWl0YWJsZSBmb3IgQ0ZHIHRyYW5zZm9ybWF0aW9ucywgYXMg
d2VsbCBhcyBzdHJlbmd0aAorICAgIC8vIHJlZHVjdGlvbiwgZm9sZGluZywgYW5kIENTRS4KKyAg
ICBMb2FkU3RvcmUsCisgICAgCisgICAgLy8gVGhyZWFkZWRDUFMgZm9ybSBtZWFucyB0aGF0IGJh
c2ljIGJsb2NrcyBsaXN0IHVwLWZyb250IHdoaWNoIGxvY2FscyB0aGV5CisgICAgLy8gZXhwZWN0
IHRvIGJlIGxpdmUgYXQgdGhlIGhlYWQsIGFuZCB3aGljaCBsb2NhbHMgdGhleSBtYWtlIGF2YWls
YWJsZSBhdCB0aGUKKyAgICAvLyB0YWlsLiBUaHJlYWRlZENQUyBmb3JtIGFsc28gaW1wbGllcyB0
aGF0OgorICAgIC8vCisgICAgLy8gLSBHZXRMb2NhbHMgYW5kIFNldExvY2FscyB0byB1bmNhcHR1
cmVkIHZhcmlhYmxlcyBhcmUgbm90IHJlZHVuZGFudCB3aXRoaW4KKyAgICAvLyAgIGEgYmFzaWMg
YmxvY2suCisgICAgLy8KKyAgICAvLyAtIEFsbCBHZXRMb2NhbHMgYW5kIEZsdXNoZXMgYXJlIGxp
bmtlZCBkaXJlY3RseSB0byB0aGUgbGFzdCBhY2Nlc3MgcG9pbnQKKyAgICAvLyAgIG9mIHRoZSB2
YXJpYWJsZSwgd2hpY2ggbXVzdCBub3QgYmUgYW5vdGhlciBHZXRMb2NhbCBpZiB0aGUgdmFyaWFi
bGUgaXMKKyAgICAvLyAgIHVuY2FwdHVyZWQuCisgICAgLy8KKyAgICAvLyAtIFBoYW50b20oUGhp
KSBpcyBub3QgbGVnYWwsIGJ1dCBQaGFudG9tTG9jYWwgaXMuCisgICAgLy8KKyAgICAvLyBUaHJl
YWRlZENQUyBmb3JtIGlzIHN1aXRhYmxlIGZvciBkYXRhIGZsb3cgYW5hbHlzaXMgKENGQSwgcHJl
ZGljdGlvbgorICAgIC8vIHByb3BhZ2F0aW9uKSwgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgYW5kIGNv
ZGUgZ2VuZXJhdGlvbi4KKyAgICBUaHJlYWRlZENQUworfTsKKworLy8gRGVzY3JpYmVzIHRoZSBz
dGF0ZSBvZiB0aGUgVW5pb25GaW5kIHN0cnVjdHVyZSBvZiBWYXJpYWJsZUFjY2Vzc0RhdGEncy4K
K2VudW0gVW5pZmljYXRpb25TdGF0ZSB7CisgICAgLy8gQmFzaWNCbG9jay1sb2NhbCBhY2Nlc3Nl
cyB0byB2YXJpYWJsZXMgYXJlIGFwcHJvcHJpYXRlbHkgdW5pZmllZCB3aXRoIGVhY2ggb3RoZXIu
CisgICAgTG9jYWxseVVuaWZpZWQsCisgICAgCisgICAgLy8gVW5pZmljYXRpb24gaGFzIGJlZW4g
cGVyZm9ybWVkIGdsb2JhbGx5LgorICAgIEdsb2JhbGx5VW5pZmllZAorfTsKKwogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwogCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpERkc6Ok9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUpOwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkdyYXBoRm9ybSk7Cit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6VW5pZmljYXRpb25TdGF0ZSk7
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAx
NDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDYzICszMjMsOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKSB7Ci0gICAg
ICAgICAgICAgICAgTm9kZSogcHJldmlvdXNMb2NhbEFjY2VzcyA9IDA7Ci0gICAgICAgICAgICAg
ICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBu
b2RlCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoaSkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBleHBlY3QgdGhpcyB0byBiZSB0aGUgY29tbW9u
IGNhc2UuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNJblBoaXMobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nl
c3MgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IHByZXZpb3VzTG9jYWxBY2Nl
c3M7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGluZGV4SW5CbG9jayA+IDApOwotICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IHNlYXJjaCBm
b3IgdGhlIHByZXZpb3VzIGFjY2VzcyB0byB0aGlzIGxvY2FsLgotICAgICAgICAgICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggc3ViSW5kZXhJbkJsb2NrID0gaW5kZXhJbkJsb2NrOyBzdWJJbmRl
eEluQmxvY2stLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN1Yk5vZGUgPSBi
bG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
c3ViTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3ViTm9kZS0+aGFzVmFyaWFi
bGVBY2Nlc3NEYXRhKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+bG9jYWwoKSAhPSBub2RlLT5sb2Nh
bCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVGhlIHR3byBtdXN0IGhhdmUgYmVlbiB1bmlmaWVkLgotICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHN1Yk5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZp
b3VzTG9jYWxBY2Nlc3MgPSBzdWJOb2RlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91
c0xvY2FsQWNjZXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMg
YWNjZXNzIG11c3QgaGF2ZSBiZWVuIGEgUGhpLgotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChCbG9ja0luZGV4IHBoaUluZGV4SW5CbG9jayA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5k
ZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9k
ZSA9IGJsb2NrLT5waGlzW3BoaUluZGV4SW5CbG9ja107Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cGhpTm9kZS0+bG9jYWwoKSAhPSBub2RlLT5sb2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUg
dHdvIG11c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHBoaU5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xvY2FsQWNj
ZXNzID0gcGhpTm9kZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcmV2
aW91c0xvY2FsQWNjZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQVNTRVJUKHByZXZpb3Vz
TG9jYWxBY2Nlc3MpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIHRh
aWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOwot
ICAgICAgICAgICAgICAgIGlmICh0YWlsTm9kZSA9PSBub2RlKQotICAgICAgICAgICAgICAgICAg
ICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBwcmV2aW91
c0xvY2FsQWNjZXNzOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoCi0gICAgICAgICAgICAgICAgICAgICAgICB0YWlsTm9kZS0+b3AoKSA9PSBGbHVz
aAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGFpbE5vZGUtPm9wKCkgPT0gU2V0TG9jYWwK
LSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzQ2FwdHVyZWRBdE9yQWZ0ZXIoYmxvY2ssIGlu
ZGV4SW5CbG9jaywgbm9kZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
bm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBu
b2RlLT5jaGlsZHJlbjsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1ZSk7CiAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
RG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmln
aW4sIGNoaWxkcmVuKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5j
cHAJKHJldmlzaW9uIDE0MjE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE1IEBACiAjaW5jbHVkZSAiREZH
Qnl0ZUNvZGVQYXJzZXIuaCIKICNpbmNsdWRlICJERkdDRkFQaGFzZS5oIgogI2luY2x1ZGUgIkRG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmgiCiAjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKICNpbmNsdWRlICJERkdK
SVRDb21waWxlci5oIgorI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgog
I2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZH
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHVW5pZmljYXRpb25Q
aGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtNzIs
NyArNzUsNyBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAg
aWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgaWYgKGxvZ0NvbXBpbGF0
aW9uQ2hhbmdlcygpKQogICAgICAgICBkYXRhTG9nKCJERkcgY29tcGlsaW5nICIsICpjb2RlQmxv
Y2ssICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9u
Q291bnQoKSwgIlxuIik7CiAgICAgCiAgICAgLy8gRGVyaXZlIG91ciBzZXQgb2YgbXVzdC1oYW5k
bGUgdmFsdWVzLiBUaGUgY29tcGlsYXRpb24gbXVzdCBiZSBhdCBsZWFzdCBjb25zZXJ2YXRpdmUK
QEAgLTEwMiw5ICsxMDUsNiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBp
bGVNCiAgICAgaWYgKCFwYXJzZShleGVjLCBkZmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgaWYgKGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbikKLSAgICAgICAgZGZn
LnByZWRpY3RBcmd1bWVudFR5cGVzKCk7Ci0gICAgCiAgICAgLy8gQnkgdGhpcyBwb2ludCB0aGUg
REZHIGJ5dGVjb2RlIHBhcnNlciB3aWxsIGhhdmUgcG90ZW50aWFsbHkgbXV0YXRlZCB2YXJpb3Vz
IHRhYmxlcwogICAgIC8vIGluIHRoZSBDb2RlQmxvY2suIFRoaXMgaXMgYSBnb29kIHRpbWUgdG8g
cGVyZm9ybSBhbiBlYXJseSBzaHJpbmssIHdoaWNoIGlzIG1vcmUKICAgICAvLyBwb3dlcmZ1bCB0
aGFuIGEgbGF0ZSBvbmUuIEl0J3Mgc2FmZSB0byBkbyBzbyBiZWNhdXNlIHdlIGhhdmVuJ3QgZ2Vu
ZXJhdGVkIGFueSBjb2RlCkBAIC0xMTMsMjggKzExMyw0MyBAQCBpbmxpbmUgYm9vbCBjb21waWxl
KENvbXBpbGVNb2RlIGNvbXBpbGVNCiAKICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAg
ICAgICAgdmFsaWRhdGUoZGZnKTsKKyAgICAKKyAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZn
KTsKKyAgICBwZXJmb3JtVW5pZmljYXRpb24oZGZnKTsKKyAgICBwZXJmb3JtUHJlZGljdGlvbklu
amVjdGlvbihkZmcpOworICAgIAorICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQorICAgICAg
ICB2YWxpZGF0ZShkZmcpOworICAgIAogICAgIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24o
ZGZnKTsKICAgICBwZXJmb3JtRml4dXAoZGZnKTsKICAgICBwZXJmb3JtU3RydWN0dXJlQ2hlY2tI
b2lzdGluZyhkZmcpOworICAgIAogICAgIHVuc2lnbmVkIGNudCA9IDE7CiAgICAgZGZnLm1fZml4
cG9pbnRTdGF0ZSA9IEZpeHBvaW50Tm90Q29udmVyZ2VkOwogICAgIGZvciAoOzsgKytjbnQpIHsK
LSAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgaWYgKGxv
Z0NvbXBpbGF0aW9uQ2hhbmdlcygpKQogICAgICAgICAgICAgZGF0YUxvZ0YoIkRGRyBiZWdpbm5p
bmcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGl0ZXJhdGlvbiAjJXUuXG4iLCBjbnQpOwogICAgICAg
ICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIHBlcmZvcm1DRkEoZGZn
KTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7CiAgICAg
ICAgIGNoYW5nZWQgfD0gcGVyZm9ybUFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uKGRmZyk7CiAgICAg
ICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKGRmZyk7CiAgICAgICAgIGNo
YW5nZWQgfD0gcGVyZm9ybUNTRShkZmcpOworICAgICAgICAKICAgICAgICAgaWYgKCFjaGFuZ2Vk
KQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAogICAgICAgICBkZmcucmVzZXRFeGl0U3Rh
dGVzKCk7CiAgICAgICAgIHBlcmZvcm1GaXh1cChkZmcpOworICAgICAgICBwZXJmb3JtQ1BTUmV0
aHJlYWRpbmcoZGZnKTsKICAgICB9CisgICAgCiAgICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZp
eHBvaW50Q29udmVyZ2VkOwogICAgIHBlcmZvcm1DU0UoZGZnKTsKLSAgICBpZiAodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpKQorICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOyAvLyBU
aGlzIHNob3VsZCB1c3VhbGx5IGJlIGEgbm8tb3Agc2luY2UgQ1NFIHJhcmVseSBkZXRocmVhZHMg
dGhlIGdyYXBoLgorICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKICAgICAgICAgZGF0
YUxvZ0YoIkRGRyBvcHRpbWl6YXRpb24gZml4cG9pbnQgY29udmVyZ2VkIGluICV1IGl0ZXJhdGlv
bnMuXG4iLCBjbnQpOwogICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRmZyk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAx
NDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2lu
Y2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKICNpbmNsdWRlICJGdW5jdGlvbkV4
ZWN1dGFibGVEdW1wLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtNTMsNiArNTQsOCBA
QCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDCiAgICAgLCBtX29zckVu
dHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBtX211c3RIYW5k
bGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKICAgICAsIG1fZml4cG9pbnRTdGF0ZShCZWZvcmVG
aXhwb2ludCkKKyAgICAsIG1fZm9ybShMb2FkU3RvcmUpCisgICAgLCBtX3VuaWZpY2F0aW9uU3Rh
dGUoTG9jYWxseVVuaWZpZWQpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiB9CkBA
IC0xOTUsOSArMTk4LDEzIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIobm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSksICIgLT4gIiwgUmF3
UG9pbnRlcihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksICIp
Iik7CiAgICAgaWYgKG5vZGUtPmhhc0Z1bmN0aW9uKCkpIHsKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiZnVuY3Rpb24oIiwgUmF3UG9pbnRlcihub2RlLT5mdW5jdGlvbigpKSwgIiwgIik7Ci0g
ICAgICAgIGlmIChub2RlLT5mdW5jdGlvbigpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZv
KSkKLSAgICAgICAgICAgIG91dC5wcmludChGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKGpzQ2FzdDxK
U0Z1bmN0aW9uKj4obm9kZS0+ZnVuY3Rpb24oKSktPmpzRXhlY3V0YWJsZSgpKSk7Ci0gICAgICAg
IGVsc2UKKyAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmluaGVyaXRzKCZKU0Z1bmN0aW9u
OjpzX2luZm8pKSB7CisgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4obm9kZS0+ZnVuY3Rpb24oKSk7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24t
PmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCI8aG9zdCBmdW5j
dGlvbj4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoRnVu
Y3Rpb25FeGVjdXRhYmxlRHVtcChmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCkpKTsKKyAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnQoIjxub3QgSlNGdW5jdGlvbj4iKTsKICAgICAg
ICAgb3V0LnByaW50KCIpIik7CiAgICAgfQpAQCAtMzA0LDYgKzMxMSw5IEBAIHZvaWQgR3JhcGg6
OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKIAogdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KQogeworICAgIGRhdGFMb2coIkRGRyBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5
cGUobV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksICI6XG4iKTsKKyAgICBkYXRhTG9nKCIg
IEZpeHBvaW50IHN0YXRlOiAiLCBtX2ZpeHBvaW50U3RhdGUsICI7IEZvcm06ICIsIG1fZm9ybSwg
IjsgVW5pZmljYXRpb24gc3RhdGU6ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwgIlxuIik7CisgICAg
CiAgICAgTm9kZSogbGFzdE5vZGUgPSAwOwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9i
bG9ja3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nr
c1tiXS5nZXQoKTsKQEAgLTM3NywyMiArMzg3LDI3IEBAIHZvaWQgR3JhcGg6OmRlcmVmQ2hpbGRy
ZW4oTm9kZSogb3ApCiAgICAgRE9fVE9fQ0hJTERSRU4ob3AsIGRlcmVmKTsKIH0KIAotdm9pZCBH
cmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoKQordm9pZCBHcmFwaDo6ZGV0aHJlYWQoKQogewot
ICAgIEFTU0VSVChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID49IDEpOwotICAgIGZvciAo
c2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4obV9jb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9
IG1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKLSAgICAgICAg
aWYgKCFwcm9maWxlKQorICAgIGlmIChtX2Zvcm0gPT0gTG9hZFN0b3JlKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQorICAgICAgICBkYXRh
TG9nKCJEZXRocmVhZGluZyBERkcgZ3JhcGguXG4iKTsKKyAgICAKKyAgICBTYW1wbGluZ1JlZ2lv
biBzYW1wbGluZ1JlZ2lvbigiREZHIERldGhyZWFkaW5nIik7CisgICAgCisgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAg
ICAgbV9hcmd1bWVudHNbYXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJvZmls
ZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkpOwotICAgICAgICAKLSNpZiBERkdfRU5BQkxF
KERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiQXJndW1lbnQg
WyIsIGFyZywgIl0gcHJlZGljdGlvbjogIiwKLSAgICAgICAgICAgIFNwZWN1bGF0aW9uRHVtcCht
X2FyZ3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSwgIlxu
Iik7Ci0jZW5kaWYKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlz
LnNpemUoKTsgcGhpSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJsb2NrLT5w
aGlzW3BoaUluZGV4XTsKKyAgICAgICAgICAgIHBoaS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAg
ICAgfQogICAgIH0KKyAgICAKKyAgICBtX2Zvcm0gPSBMb2FkU3RvcmU7CiB9CiAKIHZvaWQgR3Jh
cGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxv
Y2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KQpAQCAtNDA4LDYg
KzQyMyw4IEBAIHZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2sKIAogdm9p
ZCBHcmFwaDo6Y29sbGVjdEdhcmJhZ2UoKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKCJERkcgR2FyYmFnZSBDb2xsZWN0aW9uIik7CisgICAgCiAgICAgLy8gRmlyc3QgcmVz
ZXQgdGhlIGNvdW50cyB0byAwIGZvciBhbGwgbm9kZXMuCiAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0MjE2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtODAsNyArODAsNiBAQCBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAgICAgU3BlY3Vs
YXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3csCiAgICAgU3BlY3VsYXRlSW50ZWdlcgog
fTsKLSAgICAKIAogLy8KIC8vID09PSBHcmFwaCA9PT0KQEAgLTE2Nyw2ICsxNjYsNDAgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlKiBub2RlKSB7IGNsZWFyQW5k
RGVyZWZDaGlsZChub2RlLCAxKTsgfQogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMyhOb2Rl
KiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAyKTsgfQogICAgIAorICAgIHZvaWQg
cGVyZm9ybVN1YnN0aXR1dGlvbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgYm9vbCBzaG91
bGRHZW5lcmF0ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7CisgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgp
ICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgICAgICBwZXJm
b3JtU3Vic3RpdHV0aW9uRm9yRWRnZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxk
R2VuZXJhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1
dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHNob3VsZEdlbmVyYXRlKTsKKyAg
ICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxk
MigpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9y
RWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UoRWRnZSYg
Y2hpbGQsIGJvb2wgYWRkUmVmKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVy
YW5kIGlzIGFjdHVhbGx5IHVudXNlZC4KKyAgICAgICAgaWYgKCFjaGlsZCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBs
YWNlbWVudC4KKyAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFjZW1lbnQ7
CisgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBjaGlsZC5zZXROb2RlKHJlcGxhY2VtZW50KTsKKyAgICAgICAgCisgICAgICAg
IC8vIFRoZXJlIGlzIGRlZmluaXRlbHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQgdGhlIHJl
cGxhY2VtZW50IGRvZXMgbm90CisgICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4KKyAgICAg
ICAgQVNTRVJUKCFjaGlsZC0+cmVwbGFjZW1lbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKGFk
ZFJlZikKKyAgICAgICAgICAgIHJlZihjaGlsZCk7CisgICAgfQorICAgIAogI2RlZmluZSBERkdf
REVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZh
bHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKICAgICB0ZW1wbGF0ZVBy
ZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhZGROb2RlKFJlZkNoaWxkcmVuTW9kZSBy
ZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0
eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKQEAgLTE4Myw2ICsy
MTYsOCBAQCBwdWJsaWM6CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19E
RUZJTkVfQUREX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BRERfTk9ERQogCisgICAgdm9pZCBk
ZXRocmVhZCgpOworICAgIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3UndmUgbW9kaWZpZWQgdGhl
IHJlZmVyZW5jZSBjb3VudHMgb2Ygbm9kZXMgdGhhdCBkZWFsIHdpdGgKICAgICAvLyBsb2NhbCB2
YXJpYWJsZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgbG9jYWwgdmFyaWFibGUgcmVmZXJl
bmNlcyBjYW4gZm9ybQogICAgIC8vIGN5Y2xlcywgYW5kIGhlbmNlIHJlZmVyZW5jZSBjb3VudGlu
ZyBpcyBub3QgZW5vdWdoLiBUaGlzIHdpbGwgcmVzZXQgdGhlCkBAIC0xOTEsNiArMjI2LDEwIEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIHVu
c2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
R2V0TG9jYWwpCisgICAgICAgICAgICBkZXRocmVhZCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBBU1NFUlQoIW5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgbm9k
ZS0+Y29udmVydFRvQ29uc3RhbnQoY29uc3RhbnROdW1iZXIpOwogICAgIH0KICAgICAKQEAgLTM1
MSw4ICszOTAsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5v
ZGVUeXBlKTsKICAgICAKLSAgICB2b2lkIHByZWRpY3RBcmd1bWVudFR5cGVzKCk7Ci0gICAgCiAg
ICAgU3RydWN0dXJlU2V0KiBhZGRTdHJ1Y3R1cmVTZXQoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmVTZXQpCiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlU2V0LnNpemUoKSk7CkBA
IC03MTgsNiArNzU1LDggQEAgcHVibGljOgogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG1fbXVzdEhh
bmRsZVZhbHVlczsKICAgICAKICAgICBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1fZml4cG9p
bnRTdGF0ZTsKKyAgICBHcmFwaEZvcm0gbV9mb3JtOworICAgIFVuaWZpY2F0aW9uU3RhdGUgbV91
bmlmaWNhdGlvblN0YXRlOwogcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3Nv
cihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4
LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDYgKzMxNCwyMiBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAK
KyAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCisgICAgeworICAgICAgICBBU1NFUlQo
bV9vcCA9PSBQaGFudG9tICYmIChjaGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwgY2hpbGQxKCktPm9w
KCkgPT0gU2V0TG9jYWwgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnQpKTsKKyAgICAg
ICAgbV9vcCA9IFBoYW50b21Mb2NhbDsKKyAgICAgICAgbV9vcEluZm8gPSBjaGlsZDEoKS0+bV9v
cEluZm87IC8vIENvcHkgdGhlIHZhcmlhYmxlQWNjZXNzRGF0YS4KKyAgICAgICAgY2hpbGRyZW4u
c2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29udmVydFRvR2V0TG9j
YWwoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgTm9kZSogcGhpKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fb3AgPT0gR2V0TG9jYWxVbmxpbmtlZCk7CisgICAgICAgIG1fb3AgPSBHZXRM
b2NhbDsKKyAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YXJpYWJs
ZSk7CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShFZGdlKHBoaSkpOworICAgIH0KKyAgICAK
ICAgICBKU0NlbGwqIHdlYWtDb25zdGFudCgpCiAgICAgewogICAgICAgICBBU1NFUlQob3AoKSA9
PSBXZWFrSlNDb25zdGFudCk7CkBAIC0zNjgsNiArMzg0LDcgQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBG
bHVzaDoKKyAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0MjE2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNiArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFj
cm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGksIE5vZGVEb2VzTm90RXhp
dCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCiAgICAgbWFjcm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBtYWNybyhQaGFudG9tTG9jYWwsIE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBcCiAgICAgLyogR2V0IHRoZSB2YWx1
ZSBvZiBhIGxvY2FsIHZhcmlhYmxlLCB3aXRob3V0IGxpbmtpbmcgaW50byB0aGUgVmFyaWFibGVB
Y2Nlc3NEYXRhICovXAogICAgIC8qIG5ldHdvcmsuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IgdmFy
aWFibGUgYWNjZXNzZXMgd2hvc2UgcHJlZGljdGlvbnMgb3JpZ2luYXRlZCAqL1wKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCShyZXZpc2lvbiAxNDIxNjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsOCArMzYsOCBAQCB2b2lkIFBoYXNlOjpiZWdpblBoYXNlKCkKIHsKICAgICBpZiAoIXNob3Vs
ZER1bXBHcmFwaEF0RWFjaFBoYXNlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBkYXRhTG9nRigi
QmVnaW5uaW5nIERGRyBwaGFzZSAlcy5cbiIsIG1fbmFtZSk7Ci0gICAgZGF0YUxvZ0YoIkdyYXBo
IGJlZm9yZSAlczpcbiIsIG1fbmFtZSk7CisgICAgZGF0YUxvZygiQmVnaW5uaW5nIERGRyBwaGFz
ZSAiLCBtX25hbWUsICIuXG4iKTsKKyAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV9uYW1lLCAiOlxu
Iik7CiAgICAgbV9ncmFwaC5kdW1wKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BoYXNlLmgJKHJldmlzaW9uIDE0MjE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBQaGFzZVR5cGU+CiBib29sIHJ1bkFuZExvZyhQaGFzZVR5cGUmIHBoYXNlKQogewog
ICAgIGJvb2wgcmVzdWx0ID0gcGhhc2UucnVuKCk7Ci0gICAgaWYgKE9wdGlvbnM6OmR1bXBHcmFw
aEF0RWFjaFBoYXNlKCkpCisgICAgaWYgKHJlc3VsdCAmJiBsb2dDb21waWxhdGlvbkNoYW5nZXMo
KSkKICAgICAgICAgZGF0YUxvZ0YoIlBoYXNlICVzIGNoYW5nZWQgdGhlIElSLlxuIiwgcGhhc2Uu
bmFtZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQcmVkaWN0aW9u
SW5qZWN0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwcmVk
aWN0aW9uIGluamVjdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisg
ICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAg
ICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gR2xvYmFsbHlVbmlmaWVk
KTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
ID49IDEpOworICAgICAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAgICAgICAg
ICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gcHJvZmlsZWRCbG9jaygpLT52YWx1ZVByb2ZpbGVG
b3JBcmd1bWVudChhcmcpOworICAgICAgICAgICAgaWYgKCFwcm9maWxlKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1l
bnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIAorI2lmIERGR19FTkFCTEUoREVCVUdf
VkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgIkFyZ3VtZW50
IFsiLCBhcmcsICJdIHByZWRpY3Rpb246ICIsCisgICAgICAgICAgICAgICAgU3BlY3VsYXRpb25E
dW1wKG1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkp
LCAiXG4iKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JU
YXJnZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoYmxvY2st
PmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX29zckVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKAorICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSkp
OworICAgICAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0xvY2FsKCkpOworICAgICAgICAg
ICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KAorICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlc1tp
XSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9uKEdyYXBo
JiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFByZWRp
Y3Rpb24gSW5qZWN0aW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZV9oCisjZGVmaW5lIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZV9oCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQcmVkaWN0aW9uIElu
amVjdGlvbjoKKy8vCisvLyBUYWtlcyBtaXNjZWxsYW5lb3VzIGRhdGEgYWJvdXQgdmFyaWFibGUg
dHlwZSBwcmVkaWN0aW9ucyBhbmQgaW5qZWN0cyB0aGVtLgorLy8gVGhpcyBpbmNsdWRlcyBhcmd1
bWVudCBwcmVkaWN0aW9ucyBhbmQgT1NSIGVudHJ5IHByZWRpY3Rpb25zLgorCitib29sIHBlcmZv
cm1QcmVkaWN0aW9uSW5qZWN0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUHJlZGljdGlv
bkluamVjdGlvblBoYXNlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3Jt
ID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV91bmlmaWNhdGlvblN0
YXRlID09IEdsb2JhbGx5VW5pZmllZCk7CisgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgbV9jb3VudCA9IDA7CiAjZW5kaWYKQEAgLTgx
Miw2ICs4MTUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElubGluZVN0YXJ0OgogICAgICAg
ICBjYXNlIE5vcDoKICAgICAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICAgICAgY2FzZSBQ
aGFudG9tTG9jYWw6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIExhc3ROb2RlVHlwZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTQyMTYyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTE0Miw2ICs1MTQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUGhhbnRvbToKKyAgICBj
YXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wLgogICAgICAgICBu
b1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0MjE2MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwMDcsNiArNTAwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFBoYW50b206CisgICAgY2FzZSBQ
aGFudG9tTG9jYWw6CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcC4KICAgICAgICAgbm9SZXN1
bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMTQyMTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4IEBA
IHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAgeworICAgICAgICBBU1NFUlQobV9n
cmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7IGktLTspIHsKICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSAmbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YVtpXTsKICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlm
aWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHVW5pZmljYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVW5pZmljYXRpb25QaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgVW5pZmljYXRpb25QaGFzZShHcmFwaCYgZ3Jh
cGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ1bmlmaWNhdGlvbiIpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zv
cm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9u
U3RhdGUgPT0gTG9jYWxseVVuaWZpZWQpOworICAgICAgICAKKyAgICAgICAgLy8gRW5zdXJlIHRo
YXQgYWxsIFBoaSBmdW5jdGlvbnMgYXJlIHVuaWZpZWQuCisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNp
emUoKTsgcGhpSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+
cGhpc1twaGlJbmRleF07CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IDA7IGNoaWxkSWR4IDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytjaGlsZElkeCkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIXBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJZHgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT51bmlmeSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJZHgpLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBFbnN1cmUgdGhhdCBhbGwgcHJlZGljdGlvbnMgYXJlIGZpeGVk
IHVwIGJhc2VkIG9uIHRoZSB1bmlmaWNhdGlvbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nl
c3NEYXRhW2ldOworICAgICAgICAgICAgZGF0YS0+ZmluZCgpLT5wcmVkaWN0KGRhdGEtPm5vblVu
aWZpZWRQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgZGF0YS0+ZmluZCgpLT5tZXJnZUlzQ2Fw
dHVyZWQoZGF0YS0+aXNDYXB0dXJlZCgpKTsKKyAgICAgICAgICAgIGRhdGEtPmZpbmQoKS0+bWVy
Z2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGRhdGEtPnN0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdGYWlsZWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV91bmlm
aWNhdGlvblN0YXRlID0gR2xvYmFsbHlVbmlmaWVkOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9Cit9OworCitib29sIHBlcmZvcm1VbmlmaWNhdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAg
U2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBVbmlmaWNhdGlvbiBQaGFzZSIpOwor
ICAgIHJldHVybiBydW5QaGFzZTxVbmlmaWNhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25Q
aGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVW5pZmljYXRpb25QaGFzZV9o
CisjZGVmaW5lIERGR1VuaWZpY2F0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gVW5pZmljYXRpb246CisvLworLy8gRXhhbWluZXMg
YWxsIFBoaSBmdW5jdGlvbnMgYW5kIGVuc3VyZXMgdGhhdCB0aGUgdmFyaWFibGUgYWNjZXNzIGRh
dGFzIGFyZQorLy8gdW5pZmllZC4gVGhpcyBjcmVhdGVzIG91ciAibGl2ZS1yYW5nZSBzcGxpdCIg
dmlldyBvZiB2YXJpYWJsZXMuCisKK2Jvb2wgcGVyZm9ybVVuaWZpY2F0aW9uKEdyYXBoJik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHVW5pZmljYXRpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAw
LDYgKzEwMCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgKytq
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBjaGlsZHJlbiBpbiBMb2FkU3RvcmUgZm9y
bSBhcmUgaW52YWxpZC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09
IExvYWRTdG9yZSAmJiBibG9jay0+aXNQaGlJbmRleChpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
RWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xMDksMTAg
KzExMywyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBJJ20gYSBG
bHVzaCwgUGhhbnRvbSwgR2V0TG9jYWwsIG9yIFBoaSwgbXkgY2hpbGRyZW4gc2hvdWxkIGhhc1Jl
c3VsdCgpLgogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFu
dG9tOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAg
ICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlLCBlZGdlKSwgZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fdW5pZmlj
YXRpb25TdGF0ZSA9PSBMb2NhbGx5VW5pZmllZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwg
ZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgUGhhbnRvbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9
PSBMb2FkU3RvcmUgJiYgIWopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTMzLDcgKzE0NywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgbm9kZXNJblRoaXNCbG9jay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2Nr
LT5pc1BoaUluZGV4KGkpKQogICAgICAgICAgICAgICAgICAgICBwaGlzSW5UaGlzQmxvY2suYWRk
KG5vZGUpOwotICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBteVJlZkNvdW50cy5nZXQo
bm9kZSksIG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTIHx8ICFub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0Rh
dGEoKSkKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG15UmVmQ291bnRzLmdl
dChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbXlSZWZDb3VudHMuZ2V0KG5v
ZGUpID8gbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpIDogdHJ1ZSk7CiAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikg
ewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGop
OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCkBAIC0xNDgsNiArMTY1LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkgPT0gUGhp
KTsKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT5sb2NhbCgp
OwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNo
aWxkcmVuKG5vZGUpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUGhpIGNoaWxkcmVu
IGluIExvYWRTdG9yZSBmb3JtIGFyZSBpbnZhbGlkLgorICAgICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJsb2NrLT5pc1BoaUluZGV4KGkpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTE4MywxNyArMjA0LDI0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRvICp0aGlzKiBi
bG9jayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11
c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KICAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1tr
XSksIHByZXZOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZS0+b3Ao
KSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHJldk5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBw
cmV2Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10s
IHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1tr
XSwgcHJldk5vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUt
Pm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHBy
ZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2st
Pm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocHJldk5vZGUgPT0gZWRnZS5ub2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0yMTQsMTAgKzI0MiwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJn
dW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KGFyZ3VtZW50VG9PcGVyYW5kKGkpKSwgYmxvY2tJbmRleCksICFibG9j
ay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
YXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCisgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGFyZ3VtZW50VG9PcGVyYW5kKGkp
KSwgYmxvY2tJbmRleCksICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkpIHx8IGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgp
KTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5h
cmd1bWVudChpKSA9IG5vdFNldDsKICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5h
cmd1bWVudChpKSA9IG5vdFNldDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihpKSwgYmxvY2tJbmRleCksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpIHx8
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgp
KTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCisg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KGkpLCBibG9ja0luZGV4KSwgIWJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaSkgfHwgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOwor
CiAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMubG9jYWwoaSkgPSBub3RTZXQ7CiAg
ICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMubG9jYWwoaSkgPSBub3RTZXQ7CiAgICAg
ICAgICAgICB9CkBAIC0yMzEsNiArMjY3LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgbm9kZXNJblRoaXNCbG9jay5jb250
YWlucyhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBQaGFudG9tOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09
IExvYWRTdG9yZSAmJiAhaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlLCBlZGdlKSwgIXBoaXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQpAQCAtMjM5LDcgKzI4Nyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2tJ
bmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90U2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BT
KQorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrSW5kZXgpLCBn
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CiAgICAg
ICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNl
dExvY2FsOgpAQCAtMjU2LDYgKzMwNSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9y
bSA9PSBMb2FkU3RvcmUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjaGVja09wZXJh
bmQoCiAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIGdldExvY2FsUG9zaXRpb25zLCBz
ZXRMb2NhbFBvc2l0aW9ucywgYXJndW1lbnRUb09wZXJhbmQoaSkpOwpAQCAtMzQ0LDcgKzM5Niw3
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBpZiAobV9ncmFwaER1bXBNb2RlID09IERvbnRE
dW1wR3JhcGgpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRhdGFMb2coIkdyYXBoIG9m
ICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkRG
R0pJVCksICIgYXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFMb2coIkF0IHRp
bWUgb2YgZmFpbHVyZTpcbiIpOwogICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICB9CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQyMTYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMjAgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIG5lZWRzTmV3TGluZSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpIHx8IG5vZGUtPm9wKCkgPT0gUGhp
IHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91
bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBo
aToKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNhc2UgUGhh
bnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxk
MSgpLT5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGaXJzdCwgY2FsbCB1
c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhlbgogICAgICAgICAg
ICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRv
IHNvIGluIHRoaXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTQyMTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzMSw3ICsxNDMx
LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgICAgICAg
ICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+anNDb2RlRW50cnlGb3Ioa2luZCk7CiAg
ICAgfQogICAgIAotICAgIGlmIChjYWxsTGlua0luZm8pIHsKKyAgICBpZiAoIUxMSU5UX0FMV0FZ
U19BQ0NFU1NfU0xPVyAmJiBjYWxsTGlua0luZm8pIHsKICAgICAgICAgaWYgKGNhbGxMaW5rSW5m
by0+aXNPbkxpc3QoKSkKICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+cmVtb3ZlKCk7CiAgICAg
ICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlciA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2
aXNpb24gMTQyMTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsMTMgQEAgdm9pZCBKU1ZhbHVlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogICAgICAgICBvdXQucHJpbnRmKCJEb3VibGU6ICUw
OHg6JTA4eCwgJWxmIiwgdS5hc1R3b0ludDMyc1sxXSwgdS5hc1R3b0ludDMyc1swXSwgYXNEb3Vi
bGUoKSk7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGlzQ2VsbCgpKSB7Ci0gICAgICAgIGlmIChh
c0NlbGwoKS0+aW5oZXJpdHMoJlN0cnVjdHVyZTo6c19pbmZvKSkgeworICAgICAgICBpZiAoYXND
ZWxsKCktPmluaGVyaXRzKCZKU1N0cmluZzo6c19pbmZvKSkgeworICAgICAgICAgICAgSlNTdHJp
bmcqIHN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+KGFzQ2VsbCgpKTsKKyAgICAgICAgICAgIG91
dC5wcmludCgiU3RyaW5nOiAiKTsKKyAgICAgICAgICAgIGlmIChzdHJpbmctPmlzUm9wZSgpKQor
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiKHJvcGUpICIpOworICAgICAgICAgICAgb3V0LnBy
aW50KHN0cmluZy0+dHJ5R2V0VmFsdWUoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoYXNDZWxsKCkt
PmluaGVyaXRzKCZTdHJ1Y3R1cmU6OnNfaW5mbykpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0ganNDYXN0PFN0cnVjdHVyZSo+KGFzQ2VsbCgpKTsKICAgICAgICAgICAgIG91
dC5wcmludCgKICAgICAgICAgICAgICAgICAiU3RydWN0dXJlOiAiLCBSYXdQb2ludGVyKHN0cnVj
dHVyZSksICI6ICIsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTQyMTYyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMTY2LDYgKzE2Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBwcm90ZWN0ZWQ6
CisgICAgICAgIGZyaWVuZCBjbGFzcyBKU1ZhbHVlOworICAgICAgICAKICAgICAgICAgYm9vbCBp
c1JvcGUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmlzTnVsbCgpOyB9CiAgICAgICAgIGJvb2wg
aXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9mbGFncyAmIElzOEJpdDsgfQogICAgICAgICB2b2lk
IHNldElzOEJpdChib29sIGZsYWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCShyZXZpc2lvbiAxNDIxNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgdihib29sLCBkdW1wQnl0ZWNvZGVBdERGR1RpbWUsIGZhbHNlKSBcCiAgICAg
dihib29sLCBkdW1wR3JhcGhBdEVhY2hQaGFzZSwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHZlcmJv
c2VDb21waWxhdGlvbiwgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGxvZ0NvbXBpbGF0aW9uQ2hhbmdl
cywgZmFsc2UpIFwKICAgICB2KGJvb2wsIHByaW50RWFjaE9TUkV4aXQsIGZhbHNlKSBcCiAgICAg
dihib29sLCB2YWxpZGF0ZUdyYXBoLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdmFsaWRhdGVHcmFw
aEF0RWFjaFBoYXNlLCBmYWxzZSkgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187387</attachid>
            <date>2013-02-08 16:55:33 -0800</date>
            <delta_ts>2013-02-08 18:19:54 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>141560</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQyMzMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1OCBA
QAorMjAxMy0wMi0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgYWxsb3cgcGhhc2VzIHRvIGJyZWFrIFBoaSdzIGFuZCB0aGVuIGhhdmUgb25l
IHBoYXNlIHRvIHJlYnVpbGQgdGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA4NDE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBJbnRyb2R1Y2VzIHR3byBuZXcgREZHIGZvcm1zOiBMb2Fk
U3RvcmUgYW5kIFRocmVhZGVkQ1BTLiBUaGVzZSBhcmUgZGVzY3JpYmVkIGluCisgICAgICAgIGRl
dGFpbCBpbiBERkdDb21tb24uaC4KKyAgICAgICAgCisgICAgICAgIENvbnNlcXVlbnRseSwgREZH
IHBoYXNlcyBubyBsb25nZXIgaGF2ZSB0byB3b3JyeSBhYm91dCBwcmVzZXJ2aW5nIGRhdGEgZmxv
dworICAgICAgICBsaW5rcyBiZXR3ZWVuIGJhc2ljIGJsb2Nrcy4gSXQgaXMgZ2VuZXJhbGx5IGFs
d2F5cyBzYWZlIHRvIHJlcXVlc3QgdGhhdCB0aGUKKyAgICAgICAgZ3JhcGggYmUgZGV0aHJlYWRl
ZCAoR3JhcGg6OmRldGhyZWFkKSwgd2hpY2ggYnJpbmdzIGl0IGludG8gTG9hZFN0b3JlIGZvcm0s
IHdoZXJlCisgICAgICAgIHRoZSBkYXRhIGZsb3cgaXMgaW1wbGljaXQuIEluIHRoaXMgZm9ybSwg
b25seSBsaXZlbmVzcy1hdC1oZWFkIG5lZWRzIHRvIGJlCisgICAgICAgIHByZXNlcnZlZC4KKyAg
ICAgICAgCisgICAgICAgIEFsbCBvZiB0aGUgbWFjaGluZXJ5IGZvciAidGhyZWFkaW5nIiB0aGUg
Z3JhcGggdG8gaW50cm9kdWNlIGRhdGEgZmxvdyBiZXR3ZWVuCisgICAgICAgIGJsb2NrcyBpcyBu
b3cgbW92ZWQgb3V0IG9mIHRoZSBieXRlY29kZSBwYXJzZXIgYW5kIGludG8gdGhlIENQU1JldGhy
ZWFkaW5nUGhhc2UuCisgICAgICAgIEFsbCBwaGFzZXMgdGhhdCBwcmV2aW91c2x5IGRpZCB0aGlz
IG1haW50ZW5hbmNlIHRoZW1zZWx2ZXMgbm93IGp1c3QgcmVseSBvbgorICAgICAgICBiZWluZyBh
YmxlIHRvIGRldGhyZWFkIHRoZSBncmFwaC4gVGhlIG9uZSBleGNlcHRpb24gaXMgdGhlIHN0cnVj
dHVyZSBjaGVjaworICAgICAgICBob2lzaW5nIHBoYXNlLCB3aGljaCBvcGVyYXRlcyBvdmVyIGEg
dGhyZWFkZWQgZ3JhcGggYW5kIHByZXNlcnZlcyBpdCwgZm9yIHRoZQorICAgICAgICBzYWtlIG9m
IHBlcmZvcm1hbmNlLgorICAgICAgICAKKyAgICAgICAgQWxzbyBtb3ZlZCB0d28gb3RoZXIgdGhp
bmdzIGludG8gdGhlaXIgb3duIHBoYXNlczogdW5pZmljYXRpb24gKHByZXZpb3VzbHkgZm91bmQK
KyAgICAgICAgaW4gdGhlIHBhcnNlcikgYW5kIHByZWRpY3Rpb24gaW5qZWN0aW9uIChwcmV2aW91
c2x5IGZvdW5kIGluIHZhcmlvdXMgcGxhY2VzKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChPcGVyYW5kcyk6CisgICAgICAg
IChKU0M6Ok9wZXJhbmRzOjpzaXplRm9yKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0Rm9y
KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbCk6CisgICAgICAgICogZGZnL0RGR0FsbG9jYXRvci5oOgor
ICAgICAgICAoSlNDOjpERkc6Ojo6YWxsb2NhdGVTbG93KToKKyAgICAgICAgKiBkZmcvREZHQXJn
dW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9j
a0lubGluZXMuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoRGlyZWN0KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChERkcpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZp
Y2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25Q
aGFzZTo6a2lsbFVucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNh
dGlvblBoYXNlOjprZWVwT3BlcmFuZEFsaXZlKToKKyAgICAgICAgKENGR1NpbXBsaWZpY2F0aW9u
UGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OmZpeEpl
dHRpc29uZWRQcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0
aW9uUGhhc2U6Om1lcmdlQmxvY2tzKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKENQU1JldGhyZWFkaW5n
UGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OkNQU1JldGhy
ZWFkaW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6ZnJlZVVubmVjZXNz
YXJ5Tm9kZXMpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNsZWFy
VmFyaWFibGVzQXRIZWFkQW5kVGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRp
bmdQaGFzZTo6YWRkUGhpU2lsZW50bHkpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFk
aW5nUGhhc2U6OmFkZFBoaSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFz
ZTo6Y2Fub25pY2FsaXplR2V0TG9jYWxGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhy
ZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpD
UFNSZXRocmVhZGluZ1BoYXNlOjpjYW5vbmljYWxpemVTZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2Nh
bEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2Fs
aXplRmx1c2hPclBoYW50b21Mb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRp
bmdQaGFzZTo6Y2Fub25pY2FsaXplU2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkNQ
U1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2spOgorICAgICAgICAo
SlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tz
KToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpwcm9wYWdhdGVQaGlz
KToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNlOjpQaGlTdGFja0VudHJ5
OjpQaGlTdGFja0VudHJ5KToKKyAgICAgICAgKFBoaVN0YWNrRW50cnkpOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnBoaVN0YWNrRm9yKToKKyAgICAgICAgKEpTQzo6
REZHOjpwZXJmb3JtQ1BTUmV0aHJlYWRpbmcpOgorICAgICAgICAqIGRmZy9ERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHQ1NF
UGhhc2UuY3BwOgorICAgICAgICAoQ1NFUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5jcHA6CisgICAg
ICAgIChXVEYpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcv
REZHQ29tbW9uLmg6CisgICAgICAgIChKU0M6OkRGRzo6bG9nQ29tcGlsYXRpb25DaGFuZ2VzKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgIChXVEYpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhh
c2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRldGhyZWFkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6Y29sbGVjdEdhcmJhZ2UpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5o
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwZXJmb3JtU3Vic3RpdHV0aW9uKToKKyAgICAg
ICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cGVyZm9ybVN1YnN0aXR1dGlv
bkZvckVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb252ZXJ0VG9Db25zdGFudCk6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252
ZXJ0VG9QaGFudG9tTG9jYWwpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6Y29udmVydFRvR2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1Zh
cmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAqIGRmZy9ERkdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UGhhc2U6OmJlZ2luUGhhc2UpOgorICAgICAgICAqIGRmZy9ERkdQaGFzZS5oOgorICAgICAgICAo
SlNDOjpERkc6OnJ1bkFuZExvZyk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKFByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBo
YXNlOjpQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtUHJl
ZGljdGlvbkluamVjdGlvbik6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUNo
ZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQ2hlY2tI
b2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNw
cDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoVW5pZmljYXRpb25QaGFzZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VW5pZmljYXRpb25QaGFzZTo6VW5pZmljYXRpb25QaGFzZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VW5pZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpwZXJmb3JtVW5pZmljYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdVbmlmaWNhdGlvblBo
YXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFsaWRhdGU6OmR1bXBHcmFwaElmQXBwcm9wcmlhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6
OmR1bXApOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTU3RyaW5n
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKEpTQyk6CisKIDIwMTMt
MDItMDggIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgQnJpbmcg
V2ViS2l0IHVwIHRvIHNwZWVkIHdpdGggbGF0ZXN0IEVuY3J5cHRlZCBNZWRpYSBzcGVjLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTQyMzIxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04
Miw2ICs4Miw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0NvbW1v
bi5jcHAKICAgICBkZmcvREZHQ0ZBUGhhc2UuY3BwCiAgICAgZGZnL0RGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCiAgICAgZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdDU0VQaGFzZS5jcHAKICAg
ICBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcApAQCAtMTA0LDEyICsxMDUsMTQgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHT3BlcmF0aW9ucy5jcHAKICAgICBkZmcvREZH
UGhhc2UuY3BwCiAgICAgZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorICAg
IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1JlcGF0Y2gu
Y3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAogICAgIGRmZy9E
RkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1RodW5rcy5jcHAK
KyAgICBkZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHVmFsdWVTb3VyY2Uu
Y3BwCiAgICAgZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwCiAgICAgZGZnL0RGR1Zh
cmlhYmxlRXZlbnQuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkocmV2aXNpb24gMTQyMzIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE5NSw2ICsxOTUsOCBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFi
aWxpdGllcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcCBcCkBAIC0yNDksNiArMjUxLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5o
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJCYW5rLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVnaXN0ZXJTZXQuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcCBcCkBAIC0yNjYsNiArMjcwLDggQEAg
amF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTQyMzIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBkZmcvREZHQ29tbW9uLmNwcCBcCiAgICAgZGZnL0RGR0NGQVBoYXNlLmNwcCBcCiAgICAg
ZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIFwKKyAgICBkZmcvREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5jcHAgXAogICAgIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgXAog
ICAgIGRmZy9ERkdDU0VQaGFzZS5jcHAgXAogICAgIGRmZy9ERkdEaXNhc3NlbWJsZXIuY3BwIFwK
QEAgLTE0MCwxMiArMTQxLDE0IEBAIFNPVVJDRVMgKz0gXAogICAgIGRmZy9ERkdPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyLmNwcCBcCiAgICAgZGZnL0RGR1BoYXNlLmNwcCBcCiAgICAgZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBcCisgICAgZGZnL0RGR1ByZWRpY3Rpb25Jbmpl
Y3Rpb25QaGFzZS5jcHAgXAogICAgIGRmZy9ERkdSZXBhdGNoLmNwcCBcCiAgICAgZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcCBcCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIFwK
ICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgXAogICAgIGRmZy9ERkdTdHJ1Y3R1cmVD
aGVja0hvaXN0aW5nUGhhc2UuY3BwIFwKICAgICBkZmcvREZHVGh1bmtzLmNwcCBcCisgICAgZGZn
L0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIFwKICAgICBkZmcvREZHVmFsdWVTb3VyY2UuY3BwIFwK
ICAgICBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgXAogICAgIGRmZy9ERkdWYXJp
YWJsZUV2ZW50LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTQyMzIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQAog
CQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTZFQkIxMTY2NzZF
RjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTc0OTcxMTY4N0FERTQwMEE0RkY2QSAv
KiBKU0NlbGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTgyMDYwMTZC
RkUzODEwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8q
IFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi87IH07Ci0JCTBGOTgyMDYxMTZCRkUzODMwMDI0MEQw
MiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTgyMDVFMTZCRkUzN0YwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRh
cmdldHMuaCAqLzsgfTsKKyAgICAgICAgICAgICAgICAwRjk4MjA2MTE2QkZFMzgzMDAyNDBEMDIg
LyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjk4MjA1RTE2QkZFMzdGMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJn
ZXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY5RDMzNzAxNjVEQkI5MDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM2RTE2NURCQjhEMDA1QUQz
ODcgLyogRGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEY5RkM4QzMxNEUxQjVGRTAwRDUyQUUw
IC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RkM4QkYxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3Jw
aGljUHV0QnlJZExpc3QuY3BwICovOyB9OwogCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyog
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5RkM4QzAxNEUxQjVGQjAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0
QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjM0LDYgKzIzNCwxMiBAQAogCQkwRkJDMEFFNzE0OTZDN0M0MDBENEZCREQgLyogREZH
RXhpdFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZCQzBBRTQxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCAqLzsg
fTsKIAkJMEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNTE0OTZDN0Mx
MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9y
aWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
RDdFNjcxNDQ3OTk4RjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkJFMEY3MjE2QzFEQjAzMDA4MkM1RTgg
LyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJFMEY2QjE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5jcHAgKi87IH07CisJCTBGQkUwRjczMTZDMURCMDUwMDgyQzVFOCAvKiBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRp
bmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGQkUwRjc0MTZDMURCMDkwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
RTBGNkQxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAg
Ki87IH07CisJCTBGQkUwRjc1MTZDMURCMEIwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQkUwRjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkJF
MEY3NjE2QzFEQjBGMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJFMEY2RjE2QzFEQjAxMDA4
MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgKi87IH07CisJCTBGQkUwRjc3MTZDMURC
MTIwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJFMEY3MDE2QzFEQjAxMDA4MkM1RTggLyogREZH
VW5pZmljYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2ODE0NjhB
NkVGMDBDRjI0NDIgLyogREZHT1NSRXhpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQzA5NzZEMTQ2OEFCNEUwMENGMjQ0MiAvKiBERkdBc3Nl
bWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzA5NzZDMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkMwOTc2RTE0
NjhBQjUxMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovOyB9OwpAQCAtMTExOSw2ICsxMTI1LDEyIEBACiAJ
CTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0
UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdFeGl0UHJvZmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEz
MTUgLyogQ29kZU9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2Rl
T3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQkUwRjZCMTZDMURCMDEw
MDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmg7
IHBhdGggPSBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVj
dGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHUHJlZGljdGlvbkluamVj
dGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCRTBGNkUxNkMx
REIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZCRTBGNkYxNkMxREIwMTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVW5pZmljYXRp
b25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQkUwRjcwMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlm
aWNhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VuaWZp
Y2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JF
eGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXQuaDsgcGF0
aCA9IGRmZy9ERkdPU1JFeGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5
NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXNzZW1ibHlIZWxwZXJzLmNwcDsgcGF0aCA9
IGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fzc2VtYmx5SGVscGVycy5oOyBwYXRoID0g
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjYwNCw2ICsyNjE2LDggQEAKIAkJCQkwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZHQ29t
bW9uLmggKi8sCiAJCQkJMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcCAqLywKIAkJCQkwRjNCM0ExODE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuaCAqLywKKwkJCQkwRkJFMEY2QjE2QzFEQjAxMDA4MkM1RTggLyog
REZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgKi8sCisJCQkJMEZCRTBGNkMxNkMxREIwMTAwODJD
NUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCAqLywKIAkJCQkwRkZGQzk0RDE0RUY5MDk1
MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3
MjUzMiAvKiBERkdDU0VQaGFzZS5oICovLAogCQkJCTBGRjQyNzYxMTU5MUExQzkwMDRDQjlGRiAv
KiBERkdEaXNhc3NlbWJsZXIuY3BwICovLApAQCAtMjY1Miw2ICsyNjY2LDggQEAKIAkJCQkwRkVG
QzlBODE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oICovLAog
CQkJCTBGRkZDOTRGMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgKi8sCiAJCQkJMEZG
RkM5NTAxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmggKi8sCisJCQkJMEZCRTBGNkQxNkMx
REIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgKi8sCisJCQkJ
MEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5o
ICovLAogCQkJCTBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTIxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJCQkJODZFQzlEQzExMzI4REY4MjAwMkIy
QUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oICovLApAQCAtMjY3MSw2ICsyNjg3LDggQEAKIAkJCQkw
RjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNl
LmggKi8sCiAJCQkJMEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi8s
CiAJCQkJMEZDMDk3QTAxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oICovLAorCQkJCTBG
QkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCAqLywKKwkJ
CQkwRkJFMEY3MDE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5oICovLAog
CQkJCTBGM0IzQTI5MTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAgKi8sCiAJCQkJ
MEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8sCiAJCQkJMEYyQkRD
M0YxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oICovLApAQCAt
MzMzMCw2ICszMzQ4LDkgQEAKIAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBh
dHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjQzMTJEQjhBODEwMEE5RkU3QiAvKiBZ
YXJyU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4MzAw
MjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCRTBG
NzMxNkMxREIwNTAwODJDNUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGQkUwRjc1MTZDMURCMEIwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQkUwRjc3MTZDMURCMTIwMDgyQzVFOCAv
KiBERkdVbmlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM5NjUsNiArMzk4Niw5
IEBACiAJCQkJODY3MDRCODkxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2NzA0QjQyMTJEQjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hl
Y2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyog
UHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQkUwRjcyMTZDMURC
MDMwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGQkUwRjc0MTZDMURCMDkwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERG
R1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMTQyMzIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDggQEAgc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0cyB7CiAgICAgc3RhdGljIHZvaWQg
ZHVtcChjb25zdCBUJiB2YWx1ZSwgUHJpbnRTdHJlYW0mIG91dCkgeyB2YWx1ZS5kdW1wKG91dCk7
IH0KIH07CiAKK2VudW0gT3BlcmFuZEtpbmQgeyBBcmd1bWVudE9wZXJhbmQsIExvY2FsT3BlcmFu
ZCB9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHMgPSBPcGVyYW5kVmFs
dWVUcmFpdHM8VD4gPgogY2xhc3MgT3BlcmFuZHMgewogcHVibGljOgpAQCAtNjYsNiArNjgsMjgg
QEAgcHVibGljOgogICAgIFQmIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fbG9jYWxzW2lk
eF07IH0KICAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX2xv
Y2Fsc1tpZHhdOyB9CiAgICAgCisgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+
CisgICAgc2l6ZV90IHNpemVGb3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRL
aW5kID09IEFyZ3VtZW50T3BlcmFuZCkKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3Vt
ZW50cygpOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICB9CisgICAgdGVt
cGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+CisgICAgVCYgYXRGb3Ioc2l6ZV90IGlkeCkK
KyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBBcmd1bWVudE9wZXJhbmQpCisgICAg
ICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4KTsKKyAgICAgICAgcmV0dXJuIGxvY2FsKGlkeCk7
CisgICAgfQorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIGNvbnN0
IFQmIGF0Rm9yKHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAob3BlcmFuZEtp
bmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KGlkeCk7
CisgICAgICAgIHJldHVybiBsb2NhbChpZHgpOworICAgIH0KKyAgICAKICAgICB2b2lkIGVuc3Vy
ZUxvY2FscyhzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChzaXplIDw9IG1fbG9jYWxz
LnNpemUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFN0YXRlLmNwcAkocmV2aXNpb24gMTQyMzIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4Nyw2ICsxNzg3LDcg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAg
CiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBGbHVzaDoKKyAgICBjYXNlIFBoYW50b21Mb2NhbDoK
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCkBAIC0xOTEzLDYgKzE5MTQsNyBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjpt
ZXJnZVN0YXRlQXRUCiAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBjYXNl
IFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6CiAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICAvLyBUaGUgYmxvY2sgdHJhbnNm
ZXJzIHRoZSB2YWx1ZSBmcm9tIGhlYWQgdG8gdGFpbC4KICAgICAgICAgICAgIHNvdXJjZSA9IGlu
VmFyaWFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJ
KHJldmlzaW9uIDE0MjMyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lmIEVOQUJMRShERkdf
SklUKQogCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSA8d3RmL1BhZ2VBbGxvY2F0
aW9uQWxpZ25lZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMTk3LDYg
KzE5OCw5IEBAIHZvaWQqIEFsbG9jYXRvcjxUPjo6YWxsb2NhdGVTbG93KCkKICAgICBBU1NFUlQo
IW1fZnJlZUxpc3RIZWFkKTsKICAgICBBU1NFUlQoIW1fYnVtcFJlbWFpbmluZyk7CiAgICAgCisg
ICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQorICAgICAgICBkYXRhTG9nKCJBbGxvY2F0
aW5nIGFub3RoZXIgYWxsb2NhdG9yIHJlZ2lvbi5cbiIpOworICAgIAogICAgIFBhZ2VBbGxvY2F0
aW9uQWxpZ25lZCBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRpb25BbGlnbmVkOjphbGxvY2F0ZShS
ZWdpb246OnNpemUoKSwgUmVnaW9uOjpzaXplKCksIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2Vz
KTsKICAgICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGFsbG9jYXRpb24pKQogICAgICAgICBDUkFT
SCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDIzMjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBH
ZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjYXNlIFBoaTogeworICAgICAgICAgICAgICAgIGNh
c2UgUGhpOiAvKiBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwODU1NSAqLyB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTA3LDYgKzUwNyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50c0xlbmd0aCk7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlZigpOyAvLyBUaGlzIGlzIGEgbXVzdC1nZW5l
cmF0ZSBub2RlLgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0
aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNMZW5ndGguCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNjM1LDggKzYzNiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmIChjaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaC5jb2xsZWN0R2FyYmFnZSgpOwor
ICAgICAgICBpZiAoY2hhbmdlZCkgeworICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwor
ICAgICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBMb2FkU3RvcmU7CisgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE0MjMy
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRl
bXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZh
bHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUq
IEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZDaGlsZHJlbk1vZGUgcmVm
Q2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBh
cmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3Jh
cGgmIGdyYXBoLCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSBy
ZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFy
YW1zKSBcCiAgICAgeyBcCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUocmVm
Q2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJn
cyk7IFwKICAgICAgICAgYXBwZW5kKHJlc3VsdCk7IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDIzMjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjg5LDY0ICsyODksMzMgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCk7CiAgICAg
ICAgIGJvb2wgaXNDYXB0dXJlZCA9IG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKG9wZXJhbmQsIGlu
bGluZUNhbGxGcmFtZSgpKTsKICAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaGFzIHR3byBnb2Fs
czogMSkgbGluayB0b2dldGhlciB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMsIGFuZCAyKQorICAgICAg
ICAvLyB0cnkgdG8gYXZvaWQgY3JlYXRpbmcgcmVkdW5kYW50IEdldExvY2Fscy4gKDEpIGlzIHJl
cXVpcmVkIGZvcgorICAgICAgICAvLyBjb3JyZWN0bmVzcyAtIG5vIG90aGVyIHBoYXNlIHdpbGwg
ZW5zdXJlIHRoYXQgYmxvY2stbG9jYWwgdmFyaWFibGUKKyAgICAgICAgLy8gYWNjZXNzIGRhdGEg
dW5pZmljYXRpb24gaXMgZG9uZSBjb3JyZWN0bHkuICgyKSBpcyBwdXJlbHkgb3Bwb3J0dW5pc3Rp
YworICAgICAgICAvLyBhbmQgaXMgbWVhbnQgYXMgYW4gY29tcGlsZS10aW1lIG9wdGltaXphdGlv
biBvbmx5LgorICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsK
KyAgICAgICAgCiAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBGbHVzaCkgewotICAgICAgICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRo
ZXIgdGhlIGJsb2NrIHdhbnRzIHRoZSBsb2NhbCB0byBiZSBsaXZlCi0gICAgICAgICAgICAgICAg
Ly8gYnV0IGhhcyBub3QgbG9hZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFs
dWUsIGluCi0gICAgICAgICAgICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgotICAgICAg
ICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0NhcHR1cmVk
KGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJh
bmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NE
YXRhKSwgbm9kZSkpOwotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFT
U0VSVChub2RlLT5vcCgpID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB2YXJp
YWJsZS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBGbHVzaCk7Ci0KLSAgICAgICAgICAgIG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5tZXJnZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNDYXB0dXJlZCkgewotICAgICAgICAgICAgICAg
IC8vIFdlIHdpc2ggdG8gdXNlIHRoZSBzYW1lIHZhcmlhYmxlIGFjY2VzcyBkYXRhIGFzIHRoZSBw
cmV2aW91cyBhY2Nlc3MsCi0gICAgICAgICAgICAgICAgLy8gYnV0IGZvciBhbGwgb3RoZXIgcHVy
cG9zZXMgd2Ugd2FudCB0byBpc3N1ZSBhIGxvYWQgc2luY2UgZm9yIGFsbCB3ZQotICAgICAgICAg
ICAgICAgIC8vIGtub3csIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24sIHRoZSBsb2NhbCBo
YXMgYmVlbiBjbG9iYmVyZWQuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHdlIGxpbmsgdG8gdGhlIFBoaSBub2RlLCBub3QgdG8gdGhlIEdldExvY2FsLgot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAg
ICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNl
dExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gUGhpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBOb2RlKiBuZXdHZXRMb2NhbCA9IGluamVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24o
Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGUpKTsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbmV3R2V0TG9jYWw7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG5ld0dldExvY2FsOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09
IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Cisg
ICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5j
aGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9wcmVz
ZXJ2ZWRWYXJzLnNldChvcGVyYW5kKTsKKyAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBvcmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLAotICAg
ICAgICAvLyBleHBhbmQgbV9wcmVzZXJ2ZWRWYXJzIHRvIGNvdmVyIHRoZXNlLgotICAgICAgICBt
X3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOwotICAgICAgICAKLSAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3Bl
cmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBwaGkgPSBhZGRUb0dy
YXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwotICAgICAgICBtX2xvY2FsUGhp
U3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgb3BlcmFuZCkp
OwotICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBo
KEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKSk7CisgICAgICAgIG5v
ZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyh2YXJpYWJsZSkpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChvcGVyYW5kKSA9IG5vZGU7Ci0gICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKG9wZXJhbmQsIG5vZGUpOwotICAg
ICAgICAKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIHZvaWQgc2V0TG9jYWwodW5z
aWduZWQgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkK
QEAgLTM3NSw2MSArMzQ0LDI1IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAg
Ym9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCk7CiAKKyAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZTsKKyAgICAgICAgCiAgICAgICAgIGlm
IChub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBGbHVzaCkgewotICAgICAg
ICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRzIHRo
ZSBsb2NhbCB0byBiZSBsaXZlCi0gICAgICAgICAgICAgICAgLy8gYnV0IGhhcyBub3QgbG9hZGVk
IGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGluCi0gICAgICAgICAgICAg
ICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgotICAgICAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAg
ICAgICAgICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dy
YXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSkpOwotICAgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFy
Z3VtZW50KSA9IG5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9
PSBTZXRMb2NhbCB8fCBub2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2gpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bWVy
Z2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCkgewotICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdl
dHRpbmcgYW4gYXJndW1lbnQgaW4gdGhlIGZpcnN0IGJhc2ljIGJsb2NrOyBsaW5rCi0gICAgICAg
ICAgICAgICAgLy8gdGhlIEdldExvY2FsIHRvIHRoZSBTZXRBcmd1bWVudC4KLSAgICAgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KG9wZXJhbmQpKTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IGlu
amVjdExhenlPcGVyYW5kU3BlY3VsYXRpb24oYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZh
cmlhYmxlKSwgbm9kZSkpOwotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlz
Q2FwdHVyZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkK
LSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09
IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwotICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1l
bnQgfHwgbm9kZS0+b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAgIHJldHVybiBpbmplY3RM
YXp5T3BlcmFuZFNwZWN1bGF0aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGUpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICB2YXJp
YWJsZS0+bWVyZ2VJc0NhcHR1cmVkKGlzQ2FwdHVyZWQpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkg
PT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
LSAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBpc0NhcHR1cmVk
KTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwotCi0gICAg
ICAgIE5vZGUqIHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRh
KSk7Ci0gICAgICAgIG1fYXJndW1lbnRQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1
cnJlbnRCbG9jaywgcGhpLCBhcmd1bWVudCkpOwotICAgICAgICBub2RlID0gaW5qZWN0TGF6eU9w
ZXJhbmRTcGVjdWxhdGlvbihhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nl
c3NEYXRhKSwgcGhpKSk7CisgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0
aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKICAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlOwot
ICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1
bWVudEZpcnN0VGltZShhcmd1bWVudCwgbm9kZSk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9CiAgICAgdm9pZCBzZXRBcmd1bWVudChpbnQgb3BlcmFuZCwgTm9kZSogdmFs
dWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKQEAgLTQ5NSw2MyArNDI4LDI3IEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgdm9pZCBmbHVzaERpcmVjdChpbnQgb3BlcmFuZCwgQXJndW1lbnRQ
b3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbikKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBjaGVjayBpZiB0aGUgc2FtZSBvcGVyYW5kIGhhZCBhbHJlYWR5IGJlZW4gZmx1c2hl
ZCB0bwotICAgICAgICAvLyBzb21lIG90aGVyIGxvY2FsIHZhcmlhYmxlLgotICAgICAgICAKICAg
ICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQob3BlcmFuZCwg
aW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG9wZXJhbmQgPCBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBub2Rl
OwotICAgICAgICBpbnQgaW5kZXg7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVy
YW5kKSkgewotICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKTsK
LSAgICAgICAgICAgIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3Vt
ZW50KGluZGV4KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGluZGV4ID0gb3BlcmFu
ZDsKLSAgICAgICAgICAgIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxv
Y2FsKGluZGV4KTsKKyAgICAgICAgaWYgKCFvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKICAg
ICAgICAgICAgIG1fcHJlc2VydmVkVmFycy5zZXQob3BlcmFuZCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlOwogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAg
ICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBub2RlID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gRmx1c2ggJiYgbm9kZS0+b3Ao
KSAhPSBHZXRMb2NhbCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEVtaXQgYSBGbHVz
aCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgYWxyZWFkeSBmbHVzaGVkIGl0LgotICAgICAgICAg
ICAgLy8gVGhpcyBnaXZlcyB1cyBndWlkYW5jZSB0byBzZWUgdGhhdCB0aGUgdmFyaWFibGUgYWxz
byBuZWVkcyB0byBiZSBmbHVzaGVkCi0gICAgICAgICAgICAvLyBmb3IgYXJndW1lbnRzLCBldmVu
IGlmIGl0IGFscmVhZHkgaGFkIHRvIGJlIGZsdXNoZWQgZm9yIG90aGVyIHJlYXNvbnMuCi0gICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJn
ZUlzQ2FwdHVyZWQoaXNDYXB0dXJlZCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZSk7Ci0gICAgICAgICAgICBpZiAoYXJndW1l
bnRQb3NpdGlvbikKLSAgICAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJpYWJs
ZSh2YXJpYWJsZUFjY2Vzc0RhdGEpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Cisg
ICAgICAgICAgICB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgdmFyaWFibGUtPm1lcmdlSXNDYXB0dXJlZChpc0NhcHR1cmVkKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5k
LCBpc0NhcHR1cmVkKTsKICAgICAgICAgCi0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVy
ZWQpOwotICAgICAgICBOb2RlKiBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxl
QWNjZXNzRGF0YSkpOwotICAgICAgICBub2RlID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZh
cmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChv
cGVyYW5kKSkgewotICAgICAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFj
a0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7Ci0gICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KSA9IG5vZGU7Ci0gICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1l
KGluZGV4LCBub2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbG9jYWxQaGlT
dGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOwot
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpbmRleCkg
PSBub2RlOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRM
b2NhbEZpcnN0VGltZShpbmRleCwgbm9kZSk7Ci0gICAgICAgIH0KKyAgICAgICAgbm9kZSA9IGFk
ZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwogICAgICAgICBpZiAo
YXJndW1lbnRQb3NpdGlvbikKLSAgICAgICAgICAgIGFyZ3VtZW50UG9zaXRpb24tPmFkZFZhcmlh
YmxlKHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5h
ZGRWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZmx1c2hBcmd1bWVu
dHNBbmRDYXB0dXJlZFZhcmlhYmxlcygpCkBAIC0yMDQwLDcgKzE5MzcsNiBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2Fj
aGUpKTsKICAgICAgICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1
bWVudCwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRz
W2FyZ3VtZW50XSA9IHNldEFyZ3VtZW50OwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQp
OwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRBcmd1bWVu
dEZpcnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwogICAgICAgICB9CiAgICAgfQpAQCAt
Mjc5OSw2ICsyNjk1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gRmFsc2VUcmlTdGF0ZSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEgcGxhY2Vob2xkZXIgZm9yIHRoaXMgYnl0ZWNv
ZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBm
YWxsIHRocm91Z2guCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSk7CiAg
ICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2p0cnVlKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CkBAIC0yODE4LDYgKzI3MTUsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0
ZSA9PSBUcnVlVHJpU3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBsYWNl
aG9sZGVyIGZvciB0aGlzIGJ5dGVjb2RlIG9wZXJhdGlvbiBidXQgb3RoZXJ3aXNlCiAgICAgICAg
ICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgorICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20pOwogICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9q
ZmFsc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI4NTgsNiArMjc1
Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBw
bGFjZWhvbGRlciBmb3IgdGhpcyBieXRlY29kZSBvcGVyYXRpb24gYnV0IG90aGVyd2lzZQogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBmYWxsIHRocm91Z2guCisgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20pOwogICAgICAgICAgICAgICAgICAgICAgICAg
TkVYVF9PUENPREUob3Bfamxlc3MpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMjg4NCw2ICsyNzgzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0aGlzIGJ5dGVjb2RlIG9wZXJh
dGlvbiBidXQgb3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGZhbGwg
dGhyb3VnaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qbGVzc2VxKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTI5MTAsNiArMjgxMCw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBwbGFjZWhvbGRl
ciBmb3IgdGhpcyBieXRlY29kZSBvcGVyYXRpb24gYnV0IG90aGVyd2lzZQogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8ganVzdCBmYWxsIHRocm91Z2guCisgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFBoYW50b20pOwogICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfamdyZWF0ZXIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQpAQCAtMjkzNiw2ICsyODM3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0aGlzIGJ5dGVjb2RlIG9wZXJhdGlvbiBi
dXQgb3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGZhbGwgdGhyb3Vn
aC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qZ3JlYXRlcmVxKTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTI5NTgsNiArMjg2MCw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAg
aWYgKGEgPCBiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEgcGxhY2Vob2xk
ZXIgZm9yIHRoaXMgYnl0ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgorICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2pubGVzcyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJl
bGF0aXZlT2Zmc2V0KSk7CkBAIC0yOTgzLDYgKzI4ODYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIGlmIChhIDw9IGIpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBwbGFjZWhvbGRlciBmb3IgdGhpcyBi
eXRlY29kZSBvcGVyYXRpb24gYnV0IG90aGVyd2lzZQogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8ganVzdCBmYWxsIHRocm91Z2guCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFBoYW50b20pOwogICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfam5sZXNz
ZXEpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNl
dCkpOwpAQCAtMzAwOCw2ICsyOTEyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBpZiAoYSA+IGIpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEVtaXQgYSBwbGFjZWhvbGRlciBmb3IgdGhpcyBieXRlY29kZSBvcGVy
YXRpb24gYnV0IG90aGVyd2lzZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBmYWxs
IHRocm91Z2guCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfam5ncmVhdGVyKTsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsKQEAgLTMw
MzMsNiArMjkzOCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj0gYikgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0aGlzIGJ5dGVjb2RlIG9wZXJhdGlvbiBidXQg
b3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGZhbGwgdGhyb3VnaC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qbmdyZWF0ZXJlcSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAs
IE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CkBAIC0zNDA5LDE1MSAr
MzMxNSw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICB9
CiB9CiAKLXRlbXBsYXRlPEJ5dGVDb2RlUGFyc2VyOjpQaGlTdGFja1R5cGUgc3RhY2tUeXBlPgot
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKLXsKLSAgICBWZWN0b3I8UGhp
U3RhY2tFbnRyeSwgMTY+JiBwaGlTdGFjayA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFj
aykgPyBtX2FyZ3VtZW50UGhpU3RhY2sgOiBtX2xvY2FsUGhpU3RhY2s7Ci0gICAgCi0gICAgd2hp
bGUgKCFwaGlTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgUGhpU3RhY2tFbnRyeSBlbnRyeSA9
IHBoaVN0YWNrLmxhc3QoKTsKLSAgICAgICAgcGhpU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKCFlbnRyeS5tX2Jsb2NrLT5pc1JlYWNoYWJsZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3Nv
cnMgPSBlbnRyeS5tX2Jsb2NrLT5tX3ByZWRlY2Vzc29yczsKLSAgICAgICAgdW5zaWduZWQgdmFy
Tm8gPSBlbnRyeS5tX3Zhck5vOwotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQ
aGkgPSBlbnRyeS5tX3BoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0KLSNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICBIYW5kbGlu
ZyBwaGkgZW50cnkgZm9yIHZhciAldSwgcGhpIEAldS5cbiIsIGVudHJ5Lm1fdmFyTm8sIGVudHJ5
Lm1fcGhpKTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICBEZWFsaW5nIHdpdGgg
cHJlZGVjZXNzb3IgYmxvY2sgJXUuXG4iLCBwcmVkZWNlc3NvcnNbaV0pOwotI2VuZGlmCi0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7Ci0KLSAgICAgICAgICAgIE5vZGUq
JiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8gcHJlZGVjZXNzb3JCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KHZhck5vKSA6IHByZWRlY2Vzc29yQmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5sb2NhbCh2YXJObyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE5v
ZGUqIHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhcjsKLSAgICAgICAgICAgIGlmICghdmFsdWVJblBy
ZWRlY2Vzc29yKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBEaWQgbm90IGZpbmQgbm9kZSwgYWRkaW5n
IHBoaS5cbiIpOwotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3Ig
PSBpbnNlcnRQaGlOb2RlKE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoc3RhY2tUeXBlID09
IEFyZ3VtZW50UGhpU3RhY2sgPyBhcmd1bWVudFRvT3BlcmFuZCh2YXJObykgOiBzdGF0aWNfY2Fz
dDxpbnQ+KHZhck5vKSwgZmFsc2UpKSwgcHJlZGVjZXNzb3JCbG9jayk7Ci0gICAgICAgICAgICAg
ICAgdmFyID0gdmFsdWVJblByZWRlY2Vzc29yOwotICAgICAgICAgICAgICAgIGlmIChzdGFja1R5
cGUgPT0gQXJndW1lbnRQaGlTdGFjaykKLSAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JC
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKHZhck5vLCB2YWx1ZUlu
UHJlZGVjZXNzb3IpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
cHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKHZhck5v
LCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotICAgICAgICAgICAgICAgIHBoaVN0YWNrLmFwcGVuZChQ
aGlTdGFja0VudHJ5KHByZWRlY2Vzc29yQmxvY2ssIHZhbHVlSW5QcmVkZWNlc3NvciwgdmFyTm8p
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IEdl
dExvY2FsKSB7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBGb3VuZCBHZXRMb2NhbCBAJXUuXG4iLCB2YWx1
ZUluUHJlZGVjZXNzb3ItPmluZGV4KCkpOwotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICAvLyBX
ZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFyZSBpZGVudGlj
YWwgYmV0d2VlbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBHZXRMb2NhbCBhbmQgaXRzIGJsb2Nr
LWxvY2FsIFBoaS4gU3RyaWN0bHkgc3BlYWtpbmcgd2Ugb25seSBuZWVkIHRoZSB0d28KLSAgICAg
ICAgICAgICAgICAvLyB0byBiZSB1bmlmaWVkLiBCdXQgZm9yIGVmZmljaWVuY3ksIHdlIHdhbnQg
dGhlIGNvZGUgdGhhdCBjcmVhdGVzIEdldExvY2FscwotICAgICAgICAgICAgICAgIC8vIGFuZCBQ
aGlzIHRvIHRyeSB0byByZXVzZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFzIG11Y2ggYXMgcG9zc2li
bGUuCi0gICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlSW5QcmVkZWNlc3Nvci0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCkgPT0gdmFsdWVJblByZWRlY2Vzc29yLT5jaGlsZDEoKS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVk
ZWNlc3NvciA9IHZhbHVlSW5QcmVkZWNlc3Nvci0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIEZvdW5kIEAldS5cbiIsIHZhbHVlSW5QcmVk
ZWNlc3Nvci0+aW5kZXgoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFT
U0VSVCgKLSAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gU2V0TG9j
YWwKLSAgICAgICAgICAgICAgICB8fCB2YWx1ZUluUHJlZGVjZXNzb3ItPm9wKCkgPT0gUGhpCi0g
ICAgICAgICAgICAgICAgfHwgdmFsdWVJblByZWRlY2Vzc29yLT5vcCgpID09IEZsdXNoCi0gICAg
ICAgICAgICAgICAgfHwgKHZhbHVlSW5QcmVkZWNlc3Nvci0+b3AoKSA9PSBTZXRBcmd1bWVudCAm
JiBzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQcmVkZWNlc3NvciA9IHZhbHVlSW5QcmVk
ZWNlc3Nvci0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGRhdGFGb3JQcmVkZWNlc3Nvci0+dW5pZnkoZGF0YUZvclBoaSk7Ci0KLSAgICAgICAgICAgIE5v
ZGUqIHBoaU5vZGUgPSBlbnRyeS5tX3BoaTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgUmVmIGNvdW50IG9mIEAl
dSA9ICV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgcGhpTm9kZS0+cmVmQ291bnQoKSk7Ci0jZW5k
aWYKLSAgICAgICAgICAgIGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKSB7Ci0jaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIg
ICAgICBSZWZmaW5nIEAldS5cbiIsIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0jZW5kaWYKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLnJlZih2YWx1ZUluUHJlZGVjZXNzb3IpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoIXBoaU5vZGUtPmNoaWxkMSgpKSB7Ci0jaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIg
ICAgICBTZXR0aW5nIEAldS0+Y2hpbGQxID0gQCV1LlxuIiwgcGhpTm9kZS0+aW5kZXgoKSwgdmFs
dWVJblByZWRlY2Vzc29yKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHBoaU5vZGUtPmNoaWxk
cmVuLnNldENoaWxkMShFZGdlKHZhbHVlSW5QcmVkZWNlc3NvcikpOwotI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAg
ICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRleCgpKTsKLSAgICAgICAgICAgICAg
ICBwaGlOb2RlLT5kdW1wQ2hpbGRyZW4oV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcGhpTm9kZS0+Y2hpbGQyKCkpIHsKLSNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIiAgICAgIFNldHRpbmcgQCV1LT5jaGlsZDIgPSBAJXUuXG4iLCBwaGlOb2RlLT5pbmRl
eCgpLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgcGhpTm9k
ZS0+Y2hpbGRyZW4uc2V0Q2hpbGQyKEVkZ2UodmFsdWVJblByZWRlY2Vzc29yKSk7Ci0jaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCIgICAgICBDaGlsZHJlbiBvZiBAJXU6ICIsIHBoaU5vZGUtPmluZGV4KCkpOwotICAgICAg
ICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkpOwotICAgICAg
ICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDMoKSkg
ewotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAg
ICAgICBkYXRhTG9nRigiICAgICAgU2V0dGluZyBAJXUtPmNoaWxkMyA9IEAldS5cbiIsIHBoaU5v
ZGUtPmluZGV4KCksIHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAg
ICBwaGlOb2RlLT5jaGlsZHJlbi5zZXRDaGlsZDMoRWRnZSh2YWx1ZUluUHJlZGVjZXNzb3IpKTsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgcGhpTm9kZS0+aW5kZXgoKSk7
Ci0gICAgICAgICAgICAgICAgcGhpTm9kZS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZpbGUoKSk7
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE5v
ZGUqIG5ld1BoaSA9IGluc2VydFBoaU5vZGUoT3BJbmZvKGRhdGFGb3JQaGkpLCBlbnRyeS5tX2Js
b2NrKTsKLSAgICAgICAgICAgIAotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBTcGxpdHRpbmcgQCV1LCBjcmVhdGVk
IEAldS5cbiIsIHBoaU5vZGUtPmluZGV4KCksIG5ld1BoaS0+aW5kZXgoKSk7Ci0jZW5kaWYKLQot
ICAgICAgICAgICAgaWYgKHBoaU5vZGUtPnJlZkNvdW50KCkpCi0gICAgICAgICAgICAgICAgbV9n
cmFwaC5yZWYobmV3UGhpKTsKLQotICAgICAgICAgICAgbmV3UGhpLT5jaGlsZHJlbiA9IHBoaU5v
ZGUtPmNoaWxkcmVuOwotCi0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIENoaWxkcmVuIG9mIEAldTogIiwgbmV3UGhp
LT5pbmRleCgpKTsKLSAgICAgICAgICAgIG5ld1BoaS0+ZHVtcENoaWxkcmVuKFdURjo6ZGF0YUZp
bGUoKSk7Ci0gICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7Ci0jZW5kaWYKLQotICAgICAgICAg
ICAgcGhpTm9kZS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShuZXdQaGksIHZhbHVlSW5QcmVkZWNlc3Nv
ciwgMCk7Ci0KLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgICAgICBkYXRhTG9nRigiICAgICAgQ2hpbGRyZW4gb2YgQCV1OiAiLCBwaGlOb2RlLT5pbmRl
eCgpKTsKLSAgICAgICAgICAgIHBoaU5vZGUtPmR1bXBDaGlsZHJlbihXVEY6OmRhdGFGaWxlKCkp
OwotICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9
Ci19Ci0KIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmZpeFZhcmlhYmxlQWNjZXNzUHJlZGljdGlvbnMo
KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nl
c3NEYXRhLnNpemUoKTsgKytpKSB7CkBAIC0zOTM2LDQwICszNjk3LDI1IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlKCkKICAgICBkYXRhTG9nRigiUHJvY2Vzc2luZyBsb2NhbCB2YXJpYWJs
ZSBwaGlzLlxuIik7CiAjZW5kaWYKICAgICAKLSAgICBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCA9
IG1fY3VycmVudEluZGV4OworICAgIEFTU0VSVChtX3ByZXNlcnZlZFZhcnMuc2l6ZSgpKTsKKyAg
ICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBtX3ByZXNl
cnZlZFZhcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX3ByZXNlcnZlZFZhcnMucXVp
Y2tHZXQoaSkpIHsKKyAgICAgICAgICAgIG51bWJlck9mTG9jYWxzID0gaSArIDE7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KICAgICAKLSAgICBwcm9jZXNzUGhpU3RhY2s8
TG9jYWxQaGlTdGFjaz4oKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgZGF0YUxvZ0YoIlByb2Nlc3NpbmcgYXJndW1lbnQgcGhpcy5cbiIpOwotI2VuZGlm
Ci0gICAgcHJvY2Vzc1BoaVN0YWNrPEFyZ3VtZW50UGhpU3RhY2s+KCk7Ci0KICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSAg
ICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgIGlmICghYmxvY2stPmlzUmVh
Y2hhYmxlKSB7CiAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFy
KCk7Ci0gICAgfQotICAgIAotICAgIGZpeFZhcmlhYmxlQWNjZXNzUHJlZGljdGlvbnMoKTsKLSAg
ICAKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgaWYg
KCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWJsb2NrLT5pc09T
UlRhcmdldCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoYmxvY2stPmJ5dGVj
b2RlQmVnaW4gIT0gbV9ncmFwaC5tX29zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9tdXN0
SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9t
dXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKSk7Ci0gICAgICAgICAgICBpZiAoIW5v
ZGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS0+
aGFzTG9jYWwoKSk7Ci0gICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJl
ZGljdCgKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fbXVz
dEhhbmRsZVZhbHVlc1tpXSkpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBibG9jay0+
dmFyaWFibGVzQXRIZWFkLmVuc3VyZUxvY2FscyhudW1iZXJPZkxvY2Fscyk7CisgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG51bWJlck9mTG9jYWxzKTsKICAgICB9
CiAgICAgCiAgICAgbV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMgPSBtX3ByZXNlcnZlZFZhcnM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0MjMyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcyLDYgKzcyLDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5k
dW1wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nl
c3NvcihibG9jaywgMCksIE5vQmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJD
aGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTEzLDYgKzExNCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChleHRyZW1lTG9nZ2luZykKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxvY2tz
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9j
aywgY29uZGl0aW9uKSwKQEAgLTEyNiw2ICsxMjgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
bG9ja0luZGV4IHRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9u
KGJsb2NrLCBjb25kaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5k
ZXggbm90VGFrZW5CbG9ja0luZGV4ID0gbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxv
Y2ssICFjb25kaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0xNTQsNiArMTU3
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDRkdT
aW1wbGlmeTogQnJhbmNoIHRvIHNhbWUgc3VjY2Vzc29yIG1lcmdlIG9uIEJsb2NrICMldSB0byBC
bG9jayAjJXUuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJ
bmRleCwgdGFyZ2V0QmxvY2tJbmRleCk7CiAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVy
Z2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwgTm9CbG9jayk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKQEAgLTI1MCwxMDQgKzI1NCwyNiBAQCBwcml2YXRlOgogICAgICAgICBBU1NF
UlQoYmxvY2spOwogICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAg
IAotICAgICAgICAvLyAxKSBSZW1vdmUgcmVmZXJlbmNlcyBmcm9tIG90aGVyIGJsb2NrcyB0byB0
aGlzIGJsb2NrLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3Nv
cnMoYmxvY2spOyBpLS07KQotICAgICAgICAgICAgZml4UGhpcyhibG9ja0luZGV4LCBtX2dyYXBo
LnN1Y2Nlc3NvcihibG9jaywgaSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0g
YmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgICAgIG1fZ3JhcGgubV9h
bGxvY2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOworICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAg
IG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJlZShibG9jay0+YXQobm9kZUluZGV4KSk7CiAgICAgICAg
IAotICAgICAgICAvLyAyKSBLaWxsIHRoZSBibG9jawogICAgICAgICBtX2dyYXBoLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdLmNsZWFyKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQga2VlcE9wZXJhbmRB
bGl2ZShCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIGludCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgTm9kZSogbGl2
ZW5lc3NOb2RlID0gamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVy
YW5kKTsKLSAgICAgICAgTm9kZSogYXZhaWxhYmlsaXR5Tm9kZSA9IGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgaWYgKCFsaXZlbmVzc05vZGUpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChhdmFpbGFiaWxpdHlOb2RlKTsKICAgICAg
ICAgaWYgKGxpdmVuZXNzTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGF2YWlsYWJpbGl0eU5vZGUtPm9wKCkg
PT0gU2V0TG9jYWwpCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlOb2RlID0gYXZhaWxhYmlsaXR5
Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eU5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCisgICAgICAgIGlmICghbGl2ZW5lc3NOb2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoYXZhaWxhYmlsaXR5Tm9k
ZS0+b3AoKSAhPSBTZXRMb2NhbCk7CiAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAg
ICAgICAgbV9ncmFwaCwgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRv
bSwgY29kZU9yaWdpbiwgYXZhaWxhYmlsaXR5Tm9kZSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Zml4UG9zc2libGVHZXRMb2NhbChCYXNpY0Jsb2NrKiBibG9jaywgRWRnZSYgZWRnZSwgYm9vbCBj
aGFuZ2VSZWYpCi0gICAgewotICAgICAgICBOb2RlKiBjaGlsZCA9IGVkZ2Uubm9kZSgpOwotICAg
ICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCi0gICAgICAgICAgICByZXR1cm47Ci0j
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9n
RigiICAgIENvbnNpZGVyaW5nIEdldExvY2FsIGF0IEAldSwgbG9jYWwgciVkLlxuIiwgbm9kZS0+
aW5kZXgoKSwgY2hpbGQtPmxvY2FsKCkpOwotI2VuZGlmCi0gICAgICAgIGlmIChjaGlsZC0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewotI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3Mg
Y2FwdHVyZWQuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIE5vZGUqIG9yaWdpbmFsTm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZChjaGlsZC0+bG9jYWwoKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICBEZWFsaW5nIHdpdGggb3JpZ2luYWwgQCV1
LlxuIiwgb3JpZ2luYWxOb2RlLT5pbmRleCgpKTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQob3Jp
Z2luYWxOb2RlKTsKLSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0g
ICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE9yaWdpbmFsIGhhcyBsb2NhbCByJWQuXG4iLCBvcmln
aW5hbE5vZGUtPmxvY2FsKCkpOwotI2VuZGlmCi0gICAgICAgIEFTU0VSVChjaGlsZC0+bG9jYWwo
KSA9PSBvcmlnaW5hbE5vZGUtPmxvY2FsKCkpOwotICAgICAgICAvLyBQb3NzaWJpbGl0aWVzOgot
ICAgICAgICAvLyBTZXRMb2NhbCAtPiB0aGUgc2Vjb25kQmxvY2sgaXMgZ2V0dGluZyB0aGUgdmFs
dWUgb2Ygc29tZXRoaW5nIHRoYXQgaXMgaW1tZWRpYXRlbHkKLSAgICAgICAgLy8gICAgIGF2YWls
YWJsZSBpbiB0aGUgZmlyc3QgYmxvY2sgd2l0aCBhIGtub3duIE5vZGVJbmRleC4KLSAgICAgICAg
Ly8gR2V0TG9jYWwgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGdldHRpbmcgdGhlIHZhbHVlIG9mIHNv
bWV0aGluZyB0aGF0IHRoZSBmaXJzdAotICAgICAgICAvLyAgICAgYmxvY2sgYWxzbyBnZXRzLgot
ICAgICAgICAvLyBQaGkgLT4gdGhlIHNlY29uZEJsb2NrIGlzIGFza2luZyBmb3Iga2VlcC1hbGl2
ZSBvbiBhbiBvcGVyYW5kIHRoYXQgdGhlIGZpcnN0IGJsb2NrCi0gICAgICAgIC8vICAgICB3YXMg
YWxzbyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24uCi0gICAgICAgIC8vIFNldEFyZ3VtZW50IC0+
IHRoZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0
aGF0IHRoZQotICAgICAgICAvLyAgICAgZmlyc3QgYmxvY2sgd2FzIGtlZXBpbmcgYWxpdmUgYnkg
dmlydHVlIG9mIHRoZSBmaXJzdEJsb2NrIGJlaW5nIHRoZSByb290IGFuZAotICAgICAgICAvLyAg
ICAgdGhlIG9wZXJhbmQgYmVpbmcgYW4gYXJndW1lbnQuCi0gICAgICAgIC8vIEZsdXNoIC0+IHRo
ZSBzZWNvbmRCbG9jayBpcyBhc2tpbmcgZm9yIGtlZXAtYWxpdmUgb24gYW4gb3BlcmFuZCB0aGF0
IHRoZSBmaXJzdAotICAgICAgICAvLyAgICAgYmxvY2sgd2FzIGZvcmNpbmcgdG8gYmUgYWxpdmUs
IHNvIHRoZSBzZWNvbmQgYmxvY2sgc2hvdWxkIHJlZmVyIGNoaWxkIG9mCi0gICAgICAgIC8vICAg
ICB0aGUgZmx1c2guCi0gICAgICAgIGlmIChvcmlnaW5hbE5vZGUtPm9wKCkgPT0gRmx1c2gpCi0g
ICAgICAgICAgICBvcmlnaW5hbE5vZGUgPSBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
LSAgICAgICAgc3dpdGNoIChvcmlnaW5hbE5vZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBTZXRM
b2NhbDogewotICAgICAgICAgICAgaWYgKGNoYW5nZVJlZikKLSAgICAgICAgICAgICAgICBBU1NF
UlQob3JpZ2luYWxOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKLSNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICBJdCdz
IGEgU2V0TG9jYWwuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VDaGls
ZChlZGdlLCBvcmlnaW5hbE5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgY2hhbmdlUmVmKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9n
RigiICAgICAgICBJdCdzIGEgR2V0TG9jYWwuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYg
KG9yaWdpbmFsTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICBtX2dyYXBo
LmNoYW5nZUNoaWxkKGVkZ2UsIG9yaWdpbmFsTm9kZSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAg
IC8vIElmIHdlIGhhdmUgYSBHZXRMb2NhbCB0aGF0IHBvaW50cyB0byBhIGNoaWxkIEdldExvY2Fs
IHRoYXQgaXMgZGVhZCwgdGhlbgotICAgICAgICAgICAgLy8gd2UgaGF2ZSBubyBuZWVkIHRvIGRv
IGFueXRoaW5nOiB0aGlzIG9yaWdpbmFsIEdldExvY2FsIGlzIHN0aWxsIHZhbGlkLgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBQaGk6Ci0gICAgICAgIGNhc2Ug
U2V0QXJndW1lbnQ6IHsKLSAgICAgICAgaWYgKGNoYW5nZVJlZikKLSAgICAgICAgICAgIEFTU0VS
VChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotI2lmIERGR19FTkFCTEUoREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgIEl0J3Mg
UGhpL1NldEFyZ3VtZW50LlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgIC8vIEtlZXAgdGhlIEdl
dExvY2FsIQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaCwgRG9udFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b21Mb2NhbCwgY29kZU9yaWdpbiwKKyAgICAgICAg
ICAgIE9wSW5mbyhsaXZlbmVzc05vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgamV0dGlzb25CbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2Nr
SW5kZXggamV0dGlzb25lZEJsb2NrSW5kZXgsIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2lu
KQpAQCAtMzYzLDM4ICsyODksNiBAQCBwcml2YXRlOgogICAgICAgICBmaXhKZXR0aXNvbmVkUHJl
ZGVjZXNzb3JzKGJsb2NrSW5kZXgsIGpldHRpc29uZWRCbG9ja0luZGV4KTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBmaXhQaGlzKEJsb2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgQmxvY2tJbmRl
eCBkZXN0aW5hdGlvbkJsb2NrSW5kZXgpCi0gICAgewotICAgICAgICBCYXNpY0Jsb2NrKiBzb3Vy
Y2VCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nbc291cmNlQmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Rlc3Rp
bmF0aW9uQmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb25CbG9jaykg
ewotICAgICAgICAgICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRvIGtpbGwgb2ZmIHRoZSBzb3VyY2Ug
YmxvY2sgYW5kIHRoZSBkZXN0aW5hdGlvbiBibG9jayBpcyBhbHJlYWR5Ci0gICAgICAgICAgICAv
LyBkZWFkLCB0aGVuIHdlJ3JlIGRvbmUhCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbkJsb2NrLT5waGlzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gZGVzdGluYXRpb25CbG9j
ay0+cGhpc1tpXTsKLSAgICAgICAgICAgIE5vZGUqIG15Tm9kZSA9IHNvdXJjZUJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChwaGlOb2RlLT5sb2NhbCgpKTsKLSAgICAgICAgICAgIGlmICgh
bXlOb2RlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGhhcHBlbiBpZiB0aGVyZSBp
cyBhIHBoaSBpbiB0aGUgZGVzdGluYXRpb24gdGhhdCByZWZlcnMgaW50bwotICAgICAgICAgICAg
ICAgIC8vIHRoZSBkZXN0aW5hdGlvbiBpdHNlbGYuCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICAgICAgZGF0YUxvZ0YoCi0gICAgICAgICAgICAgICAgIkNvbnNpZGVyaW5nIHJl
bW92aW5nIHJlZmVyZW5jZSBmcm9tIHBoaSBAJXUgdG8gQCV1IG9uIGxvY2FsIHIlZDoiLAotICAg
ICAgICAgICAgICAgIHBoaU5vZGUtPmluZGV4KCksIG15Tm9kZS0+aW5kZXgoKSwgcGhpTm9kZS0+
bG9jYWwoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChteU5vZGUtPm9wKCkgPT0gR2V0TG9j
YWwpCi0gICAgICAgICAgICAgICAgbXlOb2RlID0gbXlOb2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsg
KytqKQotICAgICAgICAgICAgICAgIHJlbW92ZVBvdGVudGlhbGx5RGVhZFBoaVJlZmVyZW5jZSht
eU5vZGUsIHBoaU5vZGUsIGosIHNvdXJjZUJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0jaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoIlxu
Iik7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICB2b2lkIGZpeEpldHRpc29u
ZWRQcmVkZWNlc3NvcnMoQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29u
ZWRCbG9ja0luZGV4KQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCkBAIC00MDksOCArMzAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGpldHRpc29u
ZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZpeFBoaXMoYmxvY2tJbmRleCwgamV0dGlz
b25lZEJsb2NrSW5kZXgpOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlbW92ZVBvdGVudGlhbGx5
RGVhZFBoaVJlZmVyZW5jZShOb2RlKiBteU5vZGUsIE5vZGUqIHBoaU5vZGUsIHVuc2lnbmVkIGVk
Z2VJbmRleCwgYm9vbCBjaGFuZ2VSZWYpCkBAIC01ODMsODggKzQ3NSw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnBoaXMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgICAgICBmaXJzdEJsb2NrLT5waGlzLmFwcGVuZChzZWNvbmRCbG9jay0+cGhp
c1tpXSk7CiAKLSAgICAgICAgLy8gQmVmb3JlIHdlIHN0YXJ0IGNoYW5naW5nIHRoZSBzZWNvbmQg
YmxvY2sncyBncmFwaCwgcmVjb3JkIHdoYXQgbm9kZXMgd291bGQKLSAgICAgICAgLy8gYmUgcmVm
ZXJlbmNlZCBieSBzdWNjZXNzb3JzIG9mIHRoZSBzZWNvbmQgYmxvY2suCi0gICAgICAgIE9wZXJh
bmRzPE9wZXJhbmRTdWJzdGl0dXRpb24+IHN1YnN0aXR1dGlvbnMoCi0gICAgICAgICAgICBzZWNv
bmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAg
ICBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVt
YmVyT2ZBcmd1bWVudHMoKTsgKytpKQotICAgICAgICAgICAgcmVjb3JkUG9zc2libGVJbmNvbWlu
Z1JlZmVyZW5jZShzZWNvbmRCbG9jaywgc3Vic3RpdHV0aW9ucywgYXJndW1lbnRUb09wZXJhbmQo
aSkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29uZEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAgICAgICAgcmVjb3JkUG9zc2li
bGVJbmNvbWluZ1JlZmVyZW5jZShzZWNvbmRCbG9jaywgc3Vic3RpdHV0aW9ucywgaSk7Ci0KLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+c2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBzZWNvbmRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGJvb2wgY2hpbGRyZW5BbHJlYWR5Rml4ZWQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBj
YXNlIFBoYW50b206IHsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgICAgICAgICAgTm9kZSog
cG9zc2libGVMb2NhbE9wID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAg
IGlmIChwb3NzaWJsZUxvY2FsT3AtPm9wKCkgIT0gR2V0TG9jYWwKLSAgICAgICAgICAgICAgICAg
ICAgJiYgcG9zc2libGVMb2NhbE9wLT5oYXNMb2NhbCgpCi0gICAgICAgICAgICAgICAgICAgICYm
ICFwb3NzaWJsZUxvY2FsT3AtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBmaXJzdEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZChwb3NzaWJsZUxvY2FsT3AtPmxvY2FsKCkpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoc2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgc2V0
TG9jYWwtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+
Y2hpbGQyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDMo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbkFscmVhZHlGaXhlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YXNlIEZsdXNoOgotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICAgICAgICAg
IC8vIEEgRmx1c2ggY291bGQgdXNlIGEgR2V0TG9jYWwsIFNldExvY2FsLCBTZXRBcmd1bWVudCwg
b3IgYSBQaGkuCi0gICAgICAgICAgICAgICAgLy8gSWYgaXQgdXNlcyBhIEdldExvY2FsLCBpdCds
bCBiZSB0YWtlbiBjYXJlIG9mIGJlbG93LiBJZiBpdCB1c2VzIGEKLSAgICAgICAgICAgICAgICAv
LyBTZXRMb2NhbCBvciBTZXRBcmd1bWVudCwgdGhlbiBpdCBtdXN0IGJlIHVzaW5nIGEgbm9kZSBm
cm9tIHRoZQotICAgICAgICAgICAgICAgIC8vIHNhbWUgYmxvY2suIEJ1dCBpZiBpdCB1c2VzIGEg
UGhpLCB0aGVuIHdlIHNob3VsZCByZWRpcmVjdCBpdCB0bwotICAgICAgICAgICAgICAgIC8vIHVz
ZSB3aGF0ZXZlciB0aGUgZmlyc3QgYmxvY2sgYWR2ZXJ0aXNlZCBhcyBhIHRhaWwgb3BlcmFuZC4K
LSAgICAgICAgICAgICAgICAvLyBTaW1pbGFybHkgZm9yIEdldExvY2FsOyBpdCBjb3VsZCB1c2Ug
YW55IG9mIHRob3NlIGV4Y2VwdCBmb3IKLSAgICAgICAgICAgICAgICAvLyBHZXRMb2NhbC4gSWYg
aXQgdXNlcyBhIFBoaSB0aGVuIGl0IHNob3VsZCBiZSByZWRpcmVjdGVkIHRvIHVzZSBhCi0gICAg
ICAgICAgICAgICAgLy8gUGhpIGZyb20gdGhlIHRhaWwgb3BlcmFuZC4KLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgIT0gUGhpKQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBhdEZpcnN0ID0g
Zmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9jYWwoKSk7Ci0gICAg
ICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VFZGdlKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBF
ZGdlKHNraXBHZXRMb2NhbChhdEZpcnN0KSksIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAg
ICAgICAgICAgICAgIGNoaWxkcmVuQWxyZWFkeUZpeGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghY2hpbGRyZW5BbHJlYWR5Rml4ZWQpIHsKLSAgICAgICAgICAg
ICAgICBib29sIGNoYW5nZVJlZiA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBHZXRMb2NhbCwgdGhlbiB3
ZSBtaWdodCBsaWtlIHRvIGZpeCBpdC4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoISFtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoISFub2RlLT5jaGlsZDEoKSkgewotICAg
ICAgICAgICAgICAgICAgICBmaXhQb3NzaWJsZUdldExvY2FsKGZpcnN0QmxvY2ssIG5vZGUtPmNo
aWxkcmVuLmNoaWxkMSgpLCBjaGFuZ2VSZWYpOwotICAgICAgICAgICAgICAgICAgICBpZiAoISFu
b2RlLT5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZml4UG9zc2libGVHZXRM
b2NhbChmaXJzdEJsb2NrLCBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgY2hhbmdlUmVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghIW5vZGUtPmNoaWxkMygpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpeFBvc3NpYmxlR2V0TG9jYWwoZmlyc3RCbG9jaywgbm9kZS0+Y2hp
bGRyZW4uY2hpbGQzKCksIGNoYW5nZVJlZik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpcnN0QmxvY2stPmFw
cGVuZChub2RlKTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNl
Y29uZEJsb2NrLT5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGZpcnN0QmxvY2stPmFwcGVuZChz
ZWNvbmRCbG9jay0+YXQoaSkpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2st
Pmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKICAgICAgICAgCkBAIC02ODYsMzcgKzQ5OCw2IEBAIHBy
aXZhdGU6CiAgICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2tJbmRleCAhPSBOb0Jsb2NrKQogICAg
ICAgICAgICAgZml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhmaXJzdEJsb2NrSW5kZXgsIGpldHRp
c29uZWRCbG9ja0luZGV4KTsKICAgICAgICAgCi0gICAgICAgIC8vIEZpeCB1cCB0aGUgdmFyaWFi
bGVzIGF0IHRhaWwuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCi0gICAgICAgICAgICBm
aXhUYWlsT3BlcmFuZChmaXJzdEJsb2NrLCBzZWNvbmRCbG9jaywgYXJndW1lbnRUb09wZXJhbmQo
aSksIHN1YnN0aXR1dGlvbnMpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNlY29u
ZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQotICAgICAgICAg
ICAgZml4VGFpbE9wZXJhbmQoZmlyc3RCbG9jaywgc2Vjb25kQmxvY2ssIGksIHN1YnN0aXR1dGlv
bnMpOwotICAgICAgICAKLSAgICAgICAgLy8gRml4IHVwIHRoZSByZWZlcmVuY2VzIGZyb20gb3Vy
IG5ldyBzdWNjZXNzb3JzLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1
Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGktLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoZmlyc3RCbG9jaywg
aSldLmdldCgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nv
ci0+cGhpcy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBz
dWNjZXNzb3ItPnBoaXNbal07Ci0gICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2VSZWYgPSBwaGlO
b2RlLT5zaG91bGRHZW5lcmF0ZSgpOwotICAgICAgICAgICAgICAgIE9wZXJhbmRTdWJzdGl0dXRp
b24gc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5vcGVyYW5kKHBoaU5vZGUtPmxvY2FsKCkp
OwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgUGVyZm9ybWluZyBvcGVyYW5kIHN1YnN0aXR1dGlvbiAiLCBzdWJz
dGl0dXRpb24sICIuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZS0+
Y2hpbGQxKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IGlmIChwaGlOb2RlLT5jaGlsZDEoKSA9PSBzdWJzdGl0dXRpb24ub2xkQ2hpbGQpCi0gICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlQ2hpbGQocGhpTm9kZS0+Y2hpbGRyZW4uY2hpbGQx
KCksIHN1YnN0aXR1dGlvbi5uZXdDaGlsZCwgY2hhbmdlUmVmKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXBoaU5vZGUtPmNoaWxkMigpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQyKCkgPT0gc3Vic3RpdHV0aW9uLm9sZENo
aWxkKQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUNoaWxkKHBoaU5vZGUtPmNo
aWxkcmVuLmNoaWxkMigpLCBzdWJzdGl0dXRpb24ubmV3Q2hpbGQsIGNoYW5nZVJlZik7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5jaGlsZDMoKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMygpID09IHN1YnN0
aXR1dGlvbi5vbGRDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFuZ2VDaGls
ZChwaGlOb2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgc3Vic3RpdHV0aW9uLm5ld0NoaWxkLCBjaGFu
Z2VSZWYpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBmaXJz
dEJsb2NrLT52YWx1ZXNBdFRhaWwgPSBzZWNvbmRCbG9jay0+dmFsdWVzQXRUYWlsOwogICAgICAg
ICBmaXJzdEJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gPSBzZWNvbmRCbG9jay0+Y2ZhQnJhbmNo
RGlyZWN0aW9uOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2lj
QmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFz
ZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBDUFNSZXRocmVhZGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1
YmxpYzoKKyAgICBDUFNSZXRocmVhZGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQ
aGFzZShncmFwaCwgIkNQUyByZXRocmVhZGluZyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIHJ1bigpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRD
UFMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBmcmVlVW5u
ZWNlc3NhcnlOb2RlcygpOworICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrcygpOwor
ICAgICAgICBwcm9wYWdhdGVQaGlzPExvY2FsT3BlcmFuZD4oKTsKKyAgICAgICAgcHJvcGFnYXRl
UGhpczxBcmd1bWVudE9wZXJhbmQ+KCk7CisgICAgICAgIG1fZ3JhcGguY29sbGVjdEdhcmJhZ2Uo
KTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICAKKyAgICB2b2lkIGZyZWVV
bm5lY2Vzc2FyeU5vZGVzKCkKKyAgICB7CisgICAgICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKCJERkcgQ1BTIFJldGhyZWFkaW5nOiBmcmVlVW5uZWNlc3NhcnlOb2RlcyIpOworICAg
ICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChi
bG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBm
cm9tSW5kZXggPSAwOworICAgICAgICAgICAgdW5zaWduZWQgdG9JbmRleCA9IDA7CisgICAgICAg
ICAgICB3aGlsZSAoZnJvbUluZGV4IDwgYmxvY2stPnNpemUoKSkgeworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQoZnJvbUluZGV4KyspOworICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAg
ICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRv
bToKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgUGhpOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOgorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRv
bUxvY2FsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5jaGls
ZDEoKS0+aGFzUmVzdWx0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBOb3A6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IDA7IC8vIFJlc2V0IHRo
ZSByZXBsYWNlbWVudCBzaW5jZSB0aGUgbmV4dCBwaGFzZSB3aWxsIHVzZSBpdC4KKyAgICAgICAg
ICAgICAgICBibG9jay0+YXQodG9JbmRleCsrKSA9IG5vZGU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBibG9jay0+cmVzaXplKHRvSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0t
OykKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNb
cGhpSW5kZXhdKTsKKyAgICAgICAgICAgIGJsb2NrLT5waGlzLnJlc2l6ZSgwKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAg
ICB2b2lkIGNsZWFyVmFyaWFibGVzQXRIZWFkQW5kVGFpbCgpCisgICAgeworICAgICAgICBBU1NF
UlQoCisgICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZUZvcjxvcGVyYW5k
S2luZD4oKQorICAgICAgICAgICAgPT0gbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNpemVGb3I8
b3BlcmFuZEtpbmQ+KCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9i
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemVGb3I8b3BlcmFuZEtpbmQ+KCk7IGktLTspIHsKKyAg
ICAgICAgICAgIG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hdEZvcjxvcGVyYW5kS2luZD4oaSkg
PSAwOworICAgICAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRL
aW5kPihpKSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSBO
b2RlKiBhZGRQaGlTaWxlbnRseShCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgQ29kZU9yaWdpbiYg
Y29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKKyAgICB7CisgICAgICAg
IE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZShEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgUGhpLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAg
ICAgYmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIEFM
V0FZU19JTkxJTkUgTm9kZSogYWRkUGhpKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBDb2RlT3Jp
Z2luJiBjb2RlT3JpZ2luLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBzaXplX3QgaW5k
ZXgpCisgICAgeworICAgICAgICBOb2RlKiByZXN1bHQgPSBhZGRQaGlTaWxlbnRseShibG9jaywg
Y29kZU9yaWdpbiwgdmFyaWFibGUpOworICAgICAgICBwaGlTdGFja0ZvcjxvcGVyYW5kS2luZD4o
KS5hcHBlbmQoUGhpU3RhY2tFbnRyeShibG9jaywgaW5kZXgsIHJlc3VsdCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxPcGVyYW5kS2luZCBvcGVy
YW5kS2luZD4KKyAgICBBTFdBWVNfSU5MSU5FIE5vZGUqIGFkZFBoaShjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlLCBzaXplX3QgaW5kZXgp
CisgICAgeworICAgICAgICByZXR1cm4gYWRkUGhpPG9wZXJhbmRLaW5kPihtX2Jsb2NrLCBjb2Rl
T3JpZ2luLCB2YXJpYWJsZSwgaW5kZXgpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxPcGVy
YW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yKE5v
ZGUqIG5vZGUsIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUsIHNpemVfdCBpZHgpCisgICAg
eworICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChOb2RlKiBvdGhlck5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3BlcmFu
ZEtpbmQ+KGlkeCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpID09IHZhcmlhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNo
IChvdGhlck5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAg
ICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5v
ZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgp
ID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgYSBHZXRM
b2NhbCwgc28gdGhpcyBtaWdodCBhcyB3ZWxsIGJlIHRoZSBvbmUuCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKG90aGVyTm9kZSkpOworICAgICAgICAg
ICAgICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGlk
eCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gU2V0
TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUt
Pm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50IHx8IG90
aGVyTm9kZS0+b3AoKSA9PSBHZXRMb2NhbCk7CisgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpIHsKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhlck5vZGUpKTsKKyAgICAgICAg
ICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGlkeCkg
PSBub2RlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICAgICAgICAg
ICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgpID09IFBoaSB8fCBv
dGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgfHwgb3RoZXJOb2RlLT5vcCgpID09IFNldEFyZ3Vt
ZW50KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBLZWVwIHRoaXMgR2V0
TG9jYWwgYnV0IGxpbmsgaXQgdG8gdGhlIHByaW9yIG9uZXMuCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2Uob3RoZXJOb2RlKSk7CisgICAgICAgICAgICAgICAg
bV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRLaW5kPihpZHgpID0gbm9kZTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAg
ICAgICAvLyBSZXBsYWNlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgR2V0TG9jYWwgd2l0aCBvdGhl
ck5vZGUuCisgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBvdGhlck5vZGU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAg
IG5vZGUtPnJlcGxhY2VtZW50ID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGUqIHBoaSA9IGFk
ZFBoaTxvcGVyYW5kS2luZD4obm9kZS0+Y29kZU9yaWdpbiwgdmFyaWFibGUsIGlkeCk7CisgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKHBoaSkpOworICAgICAgICBtX2Jsb2Nr
LT52YXJpYWJsZXNBdEhlYWQuYXRGb3I8b3BlcmFuZEtpbmQ+KGlkeCkgPSBwaGk7CisgICAgICAg
IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSA9IG5vZGU7
CisgICAgfQorICAgIAorICAgIHZvaWQgY2Fub25pY2FsaXplR2V0TG9jYWwoTm9kZSogbm9kZSkK
KyAgICB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KHZhcmlhYmxl
LT5sb2NhbCgpKSkKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPEFyZ3VtZW50
T3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIG9wZXJhbmRUb0FyZ3VtZW50KHZhcmlhYmxlLT5sb2Nh
bCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUdldExvY2FsRm9y
PExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjYW5vbmljYWxpemVTZXRMb2NhbChOb2RlKiBub2RlKQorICAgIHsK
KyAgICAgICAgbV9ibG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQobm9kZS0+bG9jYWwo
KSwgbm9kZSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPE5vZGVUeXBlIG5vZGVUeXBlLCBP
cGVyYW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICB2b2lkIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFu
dG9tTG9jYWxGb3IoTm9kZSogbm9kZSwgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgc2l6
ZV90IGlkeCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKE5vZGUqIG90aGVyTm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5hdEZvcjxvcGVyYW5kS2luZD4oaWR4KSkgeworICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzd2l0Y2ggKG90aGVyTm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBGbHVz
aDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgY2FzZSBHZXRM
b2NhbDoKKyAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gUGhpIHx8IG90aGVyTm9kZS0+b3AoKSA9PSBT
ZXRMb2NhbCB8fCBvdGhlck5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT0gUGhhbnRvbUxvY2FsICYmIG90aGVyTm9kZS0+
b3AoKSA9PSBTZXRMb2NhbCkgeworICAgICAgICAgICAgICAgIC8vIFBoYW50b21Mb2NhbChTZXRM
b2NhbCkgZG9lc24ndCBtYWtlIHNlbnNlLiBQaGFudG9tTG9jYWwgbWVhbnM6IGF0IHRoaXMKKyAg
ICAgICAgICAgICAgICAvLyBwb2ludCBJIGtub3cgSSB3b3VsZCBoYXZlIGJlZW4gaW50ZXJlc3Rl
ZCBpbiB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZQorICAgICAgICAgICAgICAgIC8vIGZvciB0
aGUgcHVycG9zZSBvZiBPU1IuIFBoYW50b21Mb2NhbChTZXRMb2NhbCkgbWVhbnM6IGF0IHRoaXMg
cG9pbnQgSQorICAgICAgICAgICAgICAgIC8vIGtub3cgdGhhdCBJIHdvdWxkIGhhdmUgcmVhZCB0
aGUgdmFsdWUgd3JpdHRlbiBieSB0aGF0IFNldExvY2FsLiBUaGlzIGlzCisgICAgICAgICAgICAg
ICAgLy8gcmVkdW5kYW50IGFuZCBpbmVmZmljaWVudCwgc2luY2UgcmVhbGx5IGl0IGp1c3QgbWVh
bnMgdGhhdCB3ZSB3YW50IHRvCisgICAgICAgICAgICAgICAgLy8gYmUga2VlcGluZyB0aGUgb3Bl
cmFuZCB0byB0aGUgU2V0TG9jYWwgYWxpdmUuIFRoZSBTZXRMb2NhbCBtYXkgZGllLCBhbmQKKyAg
ICAgICAgICAgICAgICAvLyB3ZSdsbCBiZSBmaW5lIGJlY2F1c2UgT1NSIHRyYWNrcyBkZWFkIFNl
dExvY2Fscy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBTbyB3ZSB0dXJu
IHRoaXMgaW50byBhIFBoYW50b20gb24gdGhlIGNoaWxkIG9mIHRoZSBTZXRMb2NhbC4KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQ
aGFudG9tKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEob3RoZXJO
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBub3RoaW5nIHdyb25nIHdpdGgg
aGF2aW5nIHJlZHVuZGFudCBGbHVzaCdzLiBJdCBqdXN0IG5lZWRzIHRvCisgICAgICAgICAgICAv
LyBiZSBsaW5rZWQgYXBwcm9wcmlhdGVseS4gTm90ZSB0aGF0IGlmIHRoZXJlIGhhZCBhbHJlYWR5
IGJlZW4gYSBwcmV2aW91cworICAgICAgICAgICAgLy8gdXNlIGF0IHRhaWwgdGhlbiB3ZSBkb24n
dCBvdmVycmlkZSBpdC4gSXQncyBmaW5lIGZvciB2YXJpYWJsZXNBdFRhaWwgdG8KKyAgICAgICAg
ICAgIC8vIG9taXQgRmx1c2hlcyBhbmQgUGhhbnRvbUxvY2Fscy4gT24gdGhlIG90aGVyIGhhbmQs
IGhhdmluZyBpdCByZWZlciB0byBhCisgICAgICAgICAgICAvLyBGbHVzaCBvciBhIFBoYW50b21M
b2NhbCBpZiBqdXN0IGJlZm9yZSBpdCB0aGUgbGFzdCB1c2Ugd2FzIGEgR2V0TG9jYWwgd291bGQK
KyAgICAgICAgICAgIC8vIHNlcmlvdXNseSBjb25mdXNlIHRoZSBDRkEuCisgICAgICAgICAgICBu
b2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZShvdGhlck5vZGUpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hp
bGQxKEVkZ2UoYWRkUGhpPG9wZXJhbmRLaW5kPihub2RlLT5jb2RlT3JpZ2luLCB2YXJpYWJsZSwg
aWR4KSkpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXRGb3I8b3BlcmFuZEtp
bmQ+KGlkeCkgPSBub2RlOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8
b3BlcmFuZEtpbmQ+KGlkeCkgPSBub2RlOworICAgIH0KKworICAgIHRlbXBsYXRlPE5vZGVUeXBl
IG5vZGVUeXBlPgorICAgIHZvaWQgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbChOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQo
dmFyaWFibGUtPmxvY2FsKCkpKQorICAgICAgICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50
b21Mb2NhbEZvcjxub2RlVHlwZSwgQXJndW1lbnRPcGVyYW5kPihub2RlLCB2YXJpYWJsZSwgb3Bl
cmFuZFRvQXJndW1lbnQodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgTG9jYWxP
cGVyYW5kPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPmxvY2FsKCkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNhbm9uaWNhbGl6ZVNldEFyZ3VtZW50KE5vZGUqIG5vZGUpCisgICAgeworICAg
ICAgICBpbnQgbG9jYWwgPSBub2RlLT5sb2NhbCgpOworICAgICAgICBBU1NFUlQob3BlcmFuZElz
QXJndW1lbnQobG9jYWwpKTsKKyAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1l
bnQobG9jYWwpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRG
aXJzdFRpbWUoYXJndW1lbnQsIG5vZGUpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRh
aWwuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIG5vZGUpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2Jsb2NrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQobV9ibG9jay0+aXNS
ZWFjaGFibGUpOworICAgICAgICAKKyAgICAgICAgY2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWls
PEFyZ3VtZW50T3BlcmFuZD4oKTsKKyAgICAgICAgY2xlYXJWYXJpYWJsZXNBdEhlYWRBbmRUYWls
PExvY2FsT3BlcmFuZD4oKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzc3VtZXMgdGhhdCBhbGwg
cGhpIHJlZmVyZW5jZXMgaGF2ZSBiZWVuIHJlbW92ZWQuIEFzc3VtZXMgdGhhdCB0aGluZ3MgdGhh
dAorICAgICAgICAvLyBzaG91bGQgYmUgbGl2ZSBoYXZlIGEgbm9uLXplcm8gcmVmIGNvdW50LCBi
dXQgZG9lc24ndCBhc3N1bWUgdGhhdCB0aGUgcmVmCisgICAgICAgIC8vIGNvdW50cyBhcmUgY29y
cmVjdCBiZXlvbmQgdGhhdCAobW9yZSBmb3JtYWxseSAhIWxvZ2ljYWxSZWZDb3VudCA9PSAhIWFj
dHVhbFJlZkNvdW50CisgICAgICAgIC8vIGJ1dCBub3QgbG9naWNhbFJlZkNvdW50ID09IGFjdHVh
bFJlZkNvdW50KS4gQXNzdW1lcyB0aGF0IGl0IGNhbiBicmVhayByZWYKKyAgICAgICAgLy8gY291
bnRzLgorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2Rl
SW5kZXggPCBtX2Jsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV9ibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBUaGUgcnVsZXMgZm9yIHRocmVhZGVkIENQUyBmb3JtOgorICAgICAgICAgICAg
Ly8gCisgICAgICAgICAgICAvLyBIZWFkIHZhcmlhYmxlOiBkZXNjcmliZXMgd2hhdCBpcyBsaXZl
IGF0IHRoZSBoZWFkIG9mIHRoZSBiYXNpYyBibG9jay4KKyAgICAgICAgICAgIC8vIEhlYWQgdmFy
aWFibGUgbGlua3MgbWF5IHJlZmVyIHRvIEZsdXNoLCBQaGFudG9tTG9jYWwsIFBoaSwgb3IgU2V0
QXJndW1lbnQuCisgICAgICAgICAgICAvLyBTZXRBcmd1bWVudCBtYXkgb25seSBhcHBlYXIgaW4g
dGhlIHJvb3QgYmxvY2suCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGFpbCB2YXJp
YWJsZTogdGhlIGxhc3QgdGhpbmcgdGhhdCBoYXBwZW5lZCB0byB0aGUgdmFyaWFibGUgaW4gdGhl
IGJsb2NrLgorICAgICAgICAgICAgLy8gSXQgbWF5IGJlIGEgRmx1c2gsIFBoYW50b21Mb2NhbCwg
R2V0TG9jYWwsIFNldExvY2FsLCBvciBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgIC8vIFNldEFy
Z3VtZW50IG1heSBvbmx5IGFwcGVhciBpbiB0aGUgcm9vdCBibG9jay4gTm90ZSB0aGF0IGlmIHRo
ZXJlIGV2ZXIKKyAgICAgICAgICAgIC8vIHdhcyBhIEdldExvY2FsIHRvIHRoZSB2YXJpYWJsZSwg
YW5kIGl0IHdhcyBmb2xsb3dlZCBieSBQaGFudG9tTG9jYWxzIGFuZAorICAgICAgICAgICAgLy8g
Rmx1c2hlcyBidXQgbm90IFNldExvY2FscywgdGhlbiB0aGUgdGFpbCB2YXJpYWJsZSB3aWxsIGJl
IHRoZSBHZXRMb2NhbC4KKyAgICAgICAgICAgIC8vIFRoaXMgcmVmbGVjdHMgdGhlIGZhY3QgdGhh
dCB5b3Ugb25seSBjYXJlIHRoYXQgdGhlIHRhaWwgdmFyaWFibGUgaXMgYQorICAgICAgICAgICAg
Ly8gRmx1c2ggb3IgUGhhbnRvbUxvY2FsIGlmIG5vdGhpbmcgZWxzZSBpbnRlcmVzdGluZyBoYXBw
ZW5lZC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBDaGlsZCBvZiBHZXRMb2NhbDog
dGhlIG9wZXJhdGlvbiB0aGF0IHRoZSBHZXRMb2NhbCBrZWVwcyBhbGl2ZS4gRm9yCisgICAgICAg
ICAgICAvLyB1bmNhcHR1cmVkIGxvY2FscywgaXQgbWF5IGJlIGEgUGhpIGZyb20gdGhlIGN1cnJl
bnQgYmxvY2suIEZvciBhcmd1bWVudHMsCisgICAgICAgICAgICAvLyBpdCBtYXkgYmUgYSBTZXRB
cmd1bWVudC4gRm9yIGNhcHR1cmVkIGxvY2FscyBhbmQgYXJndW1lbnRzIGl0IG1heSBhbHNvIGJl
CisgICAgICAgICAgICAvLyBhIFNldExvY2FsLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIENoaWxkIG9mIFNldExvY2FsOiBtdXN0IGJlIGEgdmFsdWUgcHJvZHVjaW5nIG5vZGUuCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQ2hpbGQgb2YgRmx1c2g6IGl0IG1heSBiZSBh
IFBoaSBmcm9tIHRoZSBjdXJyZW50IGJsb2NrIG9yIGEgU2V0TG9jYWwuIEZvcgorICAgICAgICAg
ICAgLy8gYXJndW1lbnRzIGl0IG1heSBhbHNvIGJlIGEgU2V0QXJndW1lbnQuCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gQ2hpbGQgb2YgUGhhbnRvbUxvY2FsOiBpdCBtYXkgYmUgYSBQ
aGkgZnJvbSB0aGUgY3VycmVudCBibG9jay4gRm9yCisgICAgICAgICAgICAvLyBhcmd1bWVudHMg
aXQgbWF5IGFsc28gYmUgYSBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyBDaGlsZHJlbiBvZiBQaGk6IG90aGVyIFBoaXMgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2ss
IG9yIGFueSBvZiB0aGUKKyAgICAgICAgICAgIC8vIGZvbGxvd2luZyBmcm9tIGZyb20gcHJlZGVj
ZXNzb3IgYmxvY2tzOiBTZXRMb2NhbCwgUGhpLCBvciBTZXRBcmd1bWVudC4KKyAgICAgICAgICAg
IC8vIFRoZXNlIGFyZSBjb21wdXRlZCBieSBsb29raW5nIGF0IHRoZSB0YWlsIHZhcmlhYmxlcyBv
ZiB0aGUgcHJlZGVjZXNzb3IKKyAgICAgICAgICAgIC8vIGJsb2NrcyBhbmQgZWl0aGVyIHVzaW5n
IGl0IGRpcmVjdGx5IChpZiBpdCdzIGEgU2V0TG9jYWwsIFBoaSwgb3IKKyAgICAgICAgICAgIC8v
IFNldEFyZ3VtZW50KSBvciBsb2FkaW5nIHRoYXQgbm9kZXMgY2hpbGQgKGlmIGl0J3MgYSBHZXRM
b2NhbCwgUGhhbm9tTG9jYWwsCisgICAgICAgICAgICAvLyBvciBGbHVzaCAtIGFsbCBvZiB0aGVz
ZSB3aWxsIGhhdmUgY2hpbGRyZW4gdGhhdCBhcmUgU2V0TG9jYWwsIFBoaSwgb3IKKyAgICAgICAg
ICAgIC8vIFNldEFyZ3VtZW50KS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgICAg
IGNhbm9uaWNhbGl6ZUdldExvY2FsKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAg
ICBjYW5vbmljYWxpemVTZXRMb2NhbChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAg
Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbDxGbHVzaD4obm9kZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFBoYW50b21M
b2NhbDoKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsPFBo
YW50b20+KG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxp
emVTZXRBcmd1bWVudChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjYW5vbmljYWxpemVM
b2NhbHNJbkJsb2NrcygpCisgICAgeworICAgICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1Jl
Z2lvbigiREZHIENQUyBSZXRocmVhZGluZzogY2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MiKTsK
KyAgICAgICAgCisgICAgICAgIGZvciAobV9ibG9ja0luZGV4ID0gbV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCk7IG1fYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgbV9ibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbbV9ibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUxv
Y2Fsc0luQmxvY2soKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxPcGVy
YW5kS2luZCBvcGVyYW5kS2luZD4KKyAgICB2b2lkIHByb3BhZ2F0ZVBoaXMoKQorICAgIHsKKyAg
ICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDEyOD4mIHBoaVN0YWNrID0gb3BlcmFuZEtpbmQg
PT0gQXJndW1lbnRPcGVyYW5kID8gbV9hcmd1bWVudFBoaVN0YWNrIDogbV9sb2NhbFBoaVN0YWNr
OworICAgICAgICAKKyAgICAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBD
UFMgUmV0aHJlYWRpbmc6IHByb3BhZ2F0ZVBoaXMiKTsKKyAgICAgICAgCisgICAgICAgIC8vIEVu
c3VyZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIGZhaWwgaW5zdGFudGx5LgorICAgICAgICBt
X2Jsb2NrID0gMDsKKyAgICAgICAgbV9ibG9ja0luZGV4ID0gTm9CbG9jazsKKyAgICAgICAgCisg
ICAgICAgIHdoaWxlICghcGhpU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBQaGlTdGFj
a0VudHJ5IGVudHJ5ID0gcGhpU3RhY2subGFzdCgpOworICAgICAgICAgICAgcGhpU3RhY2sucmVt
b3ZlTGFzdCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IGVudHJ5Lm1fYmxvY2s7CisgICAgICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29y
cyA9IGJsb2NrLT5tX3ByZWRlY2Vzc29yczsKKyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnRQaGkg
PSBlbnRyeS5tX3BoaTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBjdXJyZW50UGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIHNpemVfdCBp
bmRleCA9IGVudHJ5Lm1faW5kZXg7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBwcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogcHJlZGVjZXNzb3JCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVjZXNzb3Jz
W2ldXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiB2YXJp
YWJsZUluUHJldmlvdXMgPSBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8
b3BlcmFuZEtpbmQ+KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlSW5QcmV2
aW91cykgeworICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluUHJldmlvdXMgPSBhZGRQaGk8
b3BlcmFuZEtpbmQ+KHByZWRlY2Vzc29yQmxvY2ssIGN1cnJlbnRQaGktPmNvZGVPcmlnaW4sIHZh
cmlhYmxlLCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaW5kZXgpID0gdmFyaWFibGVJblByZXZp
b3VzOworICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhl
YWQuYXRGb3I8b3BlcmFuZEtpbmQ+KGluZGV4KSA9IHZhcmlhYmxlSW5QcmV2aW91czsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxl
SW5QcmV2aW91cy0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZUlu
UHJldmlvdXMtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlSW5QcmV2aW91cy0+Y2hp
bGQxKCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlSW5QcmV2aW91cyA9IHZhcmlhYmxlSW5QcmV2aW91cy0+Y2hpbGQxKCkubm9kZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBB
U1NFUlQoCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5QcmV2aW91cy0+b3AoKSA9PSBT
ZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUluUHJldmlvdXMtPm9wKCkg
PT0gUGhpCisgICAgICAgICAgICAgICAgICAgIHx8IHZhcmlhYmxlSW5QcmV2aW91cy0+b3AoKSA9
PSBTZXRBcmd1bWVudCk7CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50
UGhpLT5jaGlsZDEoKSkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGhpLT5jaGlsZHJl
bi5zZXRDaGlsZDEoRWRnZSh2YXJpYWJsZUluUHJldmlvdXMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghY3Vy
cmVudFBoaS0+Y2hpbGQyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBoaS0+Y2hp
bGRyZW4uc2V0Q2hpbGQyKEVkZ2UodmFyaWFibGVJblByZXZpb3VzKSk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
IWN1cnJlbnRQaGktPmNoaWxkMygpKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQaGkt
PmNoaWxkcmVuLnNldENoaWxkMyhFZGdlKHZhcmlhYmxlSW5QcmV2aW91cykpOworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgTm9kZSogbmV3UGhpID0gYWRkUGhpU2lsZW50bHkoYmxvY2ssIGN1
cnJlbnRQaGktPmNvZGVPcmlnaW4sIHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICBuZXdQaGkt
PmNoaWxkcmVuID0gY3VycmVudFBoaS0+Y2hpbGRyZW47CisgICAgICAgICAgICAgICAgY3VycmVu
dFBoaS0+Y2hpbGRyZW4uaW5pdGlhbGl6ZShuZXdQaGksIHZhcmlhYmxlSW5QcmV2aW91cywgMCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RydWN0IFBoaVN0
YWNrRW50cnkgeworICAgICAgICBQaGlTdGFja0VudHJ5KEJhc2ljQmxvY2sqIGJsb2NrLCBzaXpl
X3QgaW5kZXgsIE5vZGUqIHBoaSkKKyAgICAgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAg
ICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgICwgbV9waGkocGhpKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cisg
ICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICBOb2RlKiBtX3BoaTsKKyAgICB9OworICAg
IAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIFZlY3RvcjxQaGlT
dGFja0VudHJ5LCAxMjg+JiBwaGlTdGFja0ZvcigpCisgICAgeworICAgICAgICBpZiAob3BlcmFu
ZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRQ
aGlTdGFjazsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKKyAgICB9CisgICAgCisg
ICAgQmxvY2tJbmRleCBtX2Jsb2NrSW5kZXg7CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAg
ICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3VtZW50UGhpU3RhY2s7CisgICAgVmVj
dG9yPFBoaVN0YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0YWNrOworfTsKKworYm9vbCBwZXJm
b3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgQ1BTIFJldGhyZWFkaW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1
blBoYXNlPENQU1JldGhyZWFkaW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDUFNSZXRocmVhZGluZ1BoYXNl
X2gKKyNkZWZpbmUgREZHQ1BTUmV0aHJlYWRpbmdQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBDUFMgUmV0aHJlYWRpbmc6CisvLworLy8g
VGFrZXMgYSBncmFwaCBpbiB3aGljaCB0aGVyZSBhcmUgYXJiaXRyYXJ5IEdldExvY2Fscy9TZXRM
b2NhbHMgd2l0aCBubyBjb25uZWN0aW9ucworLy8gYmV0d2VlbiB0aGVtLiBSZW1vdmVzIHJlZHVu
ZGFudCBvbmVzIGluIHRoZSBjYXNlIG9mIHVuY2FwdHVyZWQgdmFyaWFibGVzLiBDb25uZWN0cwor
Ly8gYWxsIG9mIHRoZW0gd2l0aCBQaGkgZnVuY3Rpb25zIHRvIHJlcHJlc2VudCBsaXZlIHJhbmdl
cy4KKworYm9vbCBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdDUFNSZXRocmVhZGluZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MjMyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzQsMjcgKzk3NCw2
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIHZv
aWQgcGVyZm9ybVN1YnN0aXR1dGlvbihFZGdlJiBjaGlsZCwgYm9vbCBhZGRSZWYgPSB0cnVlKQot
ICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVudXNl
ZC4KLSAgICAgICAgaWYgKCFjaGlsZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBsYWNlbWVudC4KLSAgICAgICAgTm9k
ZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFjZW1lbnQ7Ci0gICAgICAgIGlmICghcmVwbGFj
ZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBjaGlsZC5zZXRO
b2RlKHJlcGxhY2VtZW50KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZXJlIGlzIGRlZmluaXRl
bHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQgdGhlIHJlcGxhY2VtZW50IGRvZXMgbm90Ci0g
ICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4KLSAgICAgICAgQVNTRVJUKCFjaGlsZC0+cmVw
bGFjZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgaWYgKGFkZFJlZikKLSAgICAgICAgICAgIG1f
Z3JhcGgucmVmKGNoaWxkKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2
YW50UGhhbnRvbUNoaWxkcmVuKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSA9PSBQaGFudG9tKTsKQEAgLTEwNzIsMjEgKzEwNTEsMTIgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBi
b29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKLQotICAgICAgICBp
ZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZp
cnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAgICAg
ICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwZXJm
b3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7
Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigp
LCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUt
PmNoaWxkcmVuLmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgIH0KKyAgICAgICAg
bV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUpOwogICAgICAgICAKICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCiAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+bWVy
Z2VGbGFncyhOb2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAgIAotICAgICAgICBpZiAoIXNob3Vs
ZEdlbmVyYXRlKQorICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKQEAgLTExNjIsMjYgKzExMzIsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5v
ZGUqIHBoaSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgIGlmICghc2V0UmVw
bGFjZW1lbnQocG9zc2libGVSZXBsYWNlbWVudCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAvLyBJZiB0aGUgR2V0TG9jYWwgd2UgcmVwbGFjZWQgdXNlZCB0byByZWZlciB0
byBhIFNldExvY2FsLCB0aGVuIGl0IG5vdwotICAgICAgICAgICAgLy8gc2hvdWxkIHJlZmVyIHRv
IHRoZSBjaGlsZCBvZiB0aGUgU2V0TG9jYWwgaW5zdGVhZC4KLSAgICAgICAgICAgIGlmIChwaGkt
Pm9wKCkgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQx
KCkgPT0gcGhpKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS0+Y2hp
bGRyZW4uY2hpbGQxKCksIHBoaS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgTm9kZSogb2xkVGFpbCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFu
ZCgKLSAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkpOwotICAgICAg
ICAgICAgaWYgKG9sZFRhaWwgPT0gbm9kZSkgewotICAgICAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkp
ID0KLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIC8vIE1haW50YWluIGdyYXBoIGludGVncml0eTogc2luY2Ugd2Un
cmUgcmVwbGFjaW5nIGEgR2V0TG9jYWwgd2l0aCBhIEdldExvY2FsVW5saW5rZWQsCi0gICAgICAg
ICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIEdldExvY2FsVW5saW5rZWQgaXMgbm93IGxp
bmtlZC4KLSAgICAgICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpID09IEdldExv
Y2FsVW5saW5rZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wLT5zZXRP
cChHZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+Y2hpbGRy
ZW4uY2hpbGQxKCkgPSBFZGdlKHBoaSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVm
KHBoaSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dy
YXBoLmRldGhyZWFkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHdlIHJlcGxh
Y2UgYSBHZXRMb2NhbCB3aXRoIGEgR2V0TG9jYWxVbmxpbmtlZCwgdGhlbiB0dXJuIHRoZSBHZXRM
b2NhbFVubGlua2VkCisgICAgICAgICAgICAvLyBpbnRvIGEgR2V0TG9jYWwuCisgICAgICAgICAg
ICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpID09IEdldExvY2FsVW5saW5rZWQpIHsKKyAgICAg
ICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNvbnZlcnRUb0dldExvY2FsKHZhcmlhYmxlQWNj
ZXNzRGF0YSwgcGhpKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGkpOwogICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTEyMzUsOSArMTE5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAgICAgICAgICBub2RlLT5j
aGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoZGF0YU5vZGUpOwogICAgICAgICAgICAgbV9ncmFwaC5y
ZWYoZGF0YU5vZGUpOwotICAgICAgICAgICAgTm9kZSogb2xkVGFpbCA9IG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7Ci0gICAgICAgICAgICBpZiAob2xkVGFp
bCA9PSBub2RlKQotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChsb2NhbCkgPSByZXBsYWNlbWVudDsKKyAgICAgICAgICAgIG1fZ3JhcGguZGV0
aHJlYWQoKTsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNw
cAkocmV2aXNpb24gMTQyMzIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw1ICszOSw1NyBAQCB2b2lkIE5vZGVQb2ludGVy
VHJhaXRzOjpkdW1wKE5vZGUqIHZhbHVlCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAor
bmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBK
U0M6OkRGRzo6T3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2gg
KHN0YXRlKSB7CisgICAgY2FzZSBKU0M6OkRGRzo6QmVmb3JlRml4cG9pbnQ6CisgICAgICAgIG91
dC5wcmludCgiQmVmb3JlRml4cG9pbnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6
OkRGRzo6Rml4cG9pbnROb3RDb252ZXJnZWQ6CisgICAgICAgIG91dC5wcmludCgiRml4cG9pbnRO
b3RDb252ZXJnZWQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6OkRGRzo6Rml4cG9p
bnRDb252ZXJnZWQ6CisgICAgICAgIG91dC5wcmludCgiRml4cG9pbnRDb252ZXJnZWQiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgSlNDOjpERkc6OkdyYXBoRm9ybSBmb3JtKQoreworICAgIHN3aXRj
aCAoZm9ybSkgeworICAgIGNhc2UgSlNDOjpERkc6OkxvYWRTdG9yZToKKyAgICAgICAgb3V0LnBy
aW50KCJMb2FkU3RvcmUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6OkRGRzo6VGhy
ZWFkZWRDUFM6CisgICAgICAgIG91dC5wcmludCgiVGhyZWFkZWRDUFMiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgSlNDOjpERkc6OlVuaWZpY2F0aW9uU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNo
IChzdGF0ZSkgeworICAgIGNhc2UgSlNDOjpERkc6OkxvY2FsbHlVbmlmaWVkOgorICAgICAgICBv
dXQucHJpbnQoIkxvY2FsbHlVbmlmaWVkIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlND
OjpERkc6Okdsb2JhbGx5VW5pZmllZDoKKyAgICAgICAgb3V0LnByaW50KCJHbG9iYWxseVVuaWZp
ZWQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0MjMyMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw2ICsxNDYs
MTUgQEAgaW5saW5lIGJvb2wgdmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpCiAjZW5kaWYKIH0K
IAoraW5saW5lIGJvb2wgbG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkKK3sKKyNpZiBERkdfRU5BQkxF
KERFQlVHX1ZFUkJPU0UpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiB2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkgfHwgT3B0aW9uczo6bG9nQ29tcGlsYXRpb25DaGFuZ2Vz
KCk7CisjZW5kaWYKK30KKwogaW5saW5lIGJvb2wgc2hvdWxkRHVtcEdyYXBoQXRFYWNoUGhhc2Uo
KQogewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTE2Niw4
ICsxNzUsNzMgQEAgZW51bSBOb1Jlc3VsdFRhZyB7IE5vUmVzdWx0IH07CiAKIGVudW0gT3B0aW1p
emF0aW9uRml4cG9pbnRTdGF0ZSB7IEJlZm9yZUZpeHBvaW50LCBGaXhwb2ludE5vdENvbnZlcmdl
ZCwgRml4cG9pbnRDb252ZXJnZWQgfTsKIAorLy8gRGVzY3JpYmVzIHRoZSBmb3JtIHlvdSBjYW4g
ZXhwZWN0IHRoZSBlbnRpcmUgZ3JhcGggdG8gYmUgaW4uCitlbnVtIEdyYXBoRm9ybSB7CisgICAg
Ly8gTG9hZFN0b3JlIGZvcm0gbWVhbnMgdGhhdCBiYXNpYyBibG9ja3MgbWF5IGZyZWVseSB1c2Ug
R2V0TG9jYWwsIFNldExvY2FsLAorICAgIC8vIEdldExvY2FsVW5saW5rZWQsIGFuZCBGbHVzaCBm
b3IgYWNjZXNzaW5nIGxvY2FsIHZhcmlhYmxlcyBhbmQgaW5kaWNhdGluZworICAgIC8vIHdoZXJl
IHRoZWlyIGxpdmUgcmFuZ2VzIG91Z2h0IHRvIGJlLiBEYXRhIGZsb3cgYmV0d2VlbiBsb2NhbCBh
Y2Nlc3NlcyBpcworICAgIC8vIGltcGxpY2l0LiBMaXZlbmVzcyBpcyBvbmx5IGV4cGxpY2l0IGF0
IGJsb2NrIGhlYWRzICh2YXJpYWJsZXNBdEhlYWQpLgorICAgIC8vIFRoaXMgaXMgb25seSB1c2Vk
IGJ5IHRoZSBERkcgc2ltcGxpZmllciBhbmQgaXMgb25seSBwcmVzZXJ2ZWQgYnkgc2FtZS4KKyAg
ICAvLworICAgIC8vIEZvciBleGFtcGxlLCBMb2FkU3RvcmUgZm9ybSBnaXZlcyBubyBlYXN5IHdh
eSB0byBkZXRlcm1pbmUgd2hpY2ggU2V0TG9jYWwncworICAgIC8vIGZsb3cgaW50byBhIEdldExv
Y2FsLiBBcyB3ZWxsLCBMb2FkU3RvcmUgZm9ybSBpbXBsaWVzIG5vIHJlc3RyaWN0aW9ucyBvbgor
ICAgIC8vIHJlZHVuZGFuY3k6IHlvdSBjYW4gZnJlZWx5IGVtaXQgbXVsdGlwbGUgR2V0TG9jYWxz
LCBvciBtdWx0aXBsZSBTZXRMb2NhbHMKKyAgICAvLyAob3IgYW55IGNvbWJpbmF0aW9uIHRoZXJl
b2YpIHRvIHRoZSBzYW1lIGxvY2FsIGluIHRoZSBzYW1lIGJsb2NrLiBMb2FkU3RvcmUKKyAgICAv
LyBmb3JtIGRvZXMgbm90IHJlcXVpcmUgYmFzaWMgYmxvY2tzIHRvIGRlY2xhcmUgaG93IHRoZXkg
YWZmZWN0IG9yIHVzZSBsb2NhbHMsCisgICAgLy8gb3RoZXIgdGhhbiBpbXBsaWNpdGx5IGJ5IHVz
aW5nIHRoZSBsb2NhbCBvcHMgYW5kIGJ5IHByZXNlcnZpbmcKKyAgICAvLyB2YXJpYWJsZXNBdEhl
YWQuIEZpbmFsbHksIExvYWRTdG9yZSBhbGxvd3MgZmxleGliaWxpdHkgaW4gaG93IGxpdmVuZXNz
IG9mCisgICAgLy8gbG9jYWxzIGlzIGV4dGVuZGVkOyBmb3IgZXhhbXBsZSB5b3UgY2FuIHJlcGxh
Y2UgYSBHZXRMb2NhbCB3aXRoIGEgUGhhbnRvbQorICAgIC8vIGFuZCBzbyBsb25nIGFzIHRoZSBQ
aGFudG9tIHJldGFpbnMgdGhlIEdldExvY2FsJ3MgY2hpbGRyZW4gKGkuZS4gdGhlIFBoaQorICAg
IC8vIG1vc3QgbGlrZWx5KSB0aGVuIGl0IGltcGxpZXMgdGhhdCB0aGUgbG9jYWwgaXMgc3RpbGwg
bGl2ZSBidXQgdGhhdCBpdCBuZWVkCisgICAgLy8gbm90IGJlIHN0b3JlZCB0byB0aGUgc3RhY2sg
bmVjZXNzYXJpbHkuIFRoaXMgaW1wbGllcyB0aGF0IFBoYW50b20gY2FuCisgICAgLy8gcmVmZXJl
bmNlIG5vZGVzIHRoYXQgaGF2ZSBubyByZXN1bHQsIGFzIGxvbmcgYXMgdGhvc2Ugbm9kZXMgYXJl
IHZhbGlkCisgICAgLy8gR2V0TG9jYWwgY2hpbGRyZW4gKGkuZS4gUGhpLCBTZXRMb2NhbCwgU2V0
QXJndW1lbnQpLgorICAgIC8vCisgICAgLy8gTG9hZFN0b3JlIGZvcm0gYWxzbyBpbXBsaWVzIHRo
YXQgUGhpcyBuZWVkIG5vdCBoYXZlIGNoaWxkcmVuLiBCeSBkZWZhdWx0LAorICAgIC8vIHRoZXkg
ZW5kIHVwIGhhdmluZyBubyBjaGlsZHJlbiBpZiB5b3UgZW50ZXIgTG9hZFN0b3JlIHVzaW5nIHRo
ZSBjYW5vbmljYWwKKyAgICAvLyB3YXkgKGNhbGwgR3JhcGg6OmRldGhyZWFkKS4KKyAgICAvLwor
ICAgIC8vIExvYWRTdG9yZSBmb3JtIGlzIHN1aXRhYmxlIGZvciBDRkcgdHJhbnNmb3JtYXRpb25z
LCBhcyB3ZWxsIGFzIHN0cmVuZ3RoCisgICAgLy8gcmVkdWN0aW9uLCBmb2xkaW5nLCBhbmQgQ1NF
LgorICAgIExvYWRTdG9yZSwKKyAgICAKKyAgICAvLyBUaHJlYWRlZENQUyBmb3JtIG1lYW5zIHRo
YXQgYmFzaWMgYmxvY2tzIGxpc3QgdXAtZnJvbnQgd2hpY2ggbG9jYWxzIHRoZXkKKyAgICAvLyBl
eHBlY3QgdG8gYmUgbGl2ZSBhdCB0aGUgaGVhZCwgYW5kIHdoaWNoIGxvY2FscyB0aGV5IG1ha2Ug
YXZhaWxhYmxlIGF0IHRoZQorICAgIC8vIHRhaWwuIFRocmVhZGVkQ1BTIGZvcm0gYWxzbyBpbXBs
aWVzIHRoYXQ6CisgICAgLy8KKyAgICAvLyAtIEdldExvY2FscyBhbmQgU2V0TG9jYWxzIHRvIHVu
Y2FwdHVyZWQgdmFyaWFibGVzIGFyZSBub3QgcmVkdW5kYW50IHdpdGhpbgorICAgIC8vICAgYSBi
YXNpYyBibG9jay4KKyAgICAvLworICAgIC8vIC0gQWxsIEdldExvY2FscyBhbmQgRmx1c2hlcyBh
cmUgbGlua2VkIGRpcmVjdGx5IHRvIHRoZSBsYXN0IGFjY2VzcyBwb2ludAorICAgIC8vICAgb2Yg
dGhlIHZhcmlhYmxlLCB3aGljaCBtdXN0IG5vdCBiZSBhbm90aGVyIEdldExvY2FsIGlmIHRoZSB2
YXJpYWJsZSBpcworICAgIC8vICAgdW5jYXB0dXJlZC4KKyAgICAvLworICAgIC8vIC0gUGhhbnRv
bShQaGkpIGlzIG5vdCBsZWdhbCwgYnV0IFBoYW50b21Mb2NhbCBpcy4KKyAgICAvLworICAgIC8v
IFRocmVhZGVkQ1BTIGZvcm0gaXMgc3VpdGFibGUgZm9yIGRhdGEgZmxvdyBhbmFseXNpcyAoQ0ZB
LCBwcmVkaWN0aW9uCisgICAgLy8gcHJvcGFnYXRpb24pLCByZWdpc3RlciBhbGxvY2F0aW9uLCBh
bmQgY29kZSBnZW5lcmF0aW9uLgorICAgIFRocmVhZGVkQ1BTCit9OworCisvLyBEZXNjcmliZXMg
dGhlIHN0YXRlIG9mIHRoZSBVbmlvbkZpbmQgc3RydWN0dXJlIG9mIFZhcmlhYmxlQWNjZXNzRGF0
YSdzLgorZW51bSBVbmlmaWNhdGlvblN0YXRlIHsKKyAgICAvLyBCYXNpY0Jsb2NrLWxvY2FsIGFj
Y2Vzc2VzIHRvIHZhcmlhYmxlcyBhcmUgYXBwcm9wcmlhdGVseSB1bmlmaWVkIHdpdGggZWFjaCBv
dGhlci4KKyAgICBMb2NhbGx5VW5pZmllZCwKKyAgICAKKyAgICAvLyBVbmlmaWNhdGlvbiBoYXMg
YmVlbiBwZXJmb3JtZWQgZ2xvYmFsbHkuCisgICAgR2xvYmFsbHlVbmlmaWVkCit9OworCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6T3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSk7
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6R3JhcGhGb3JtKTsK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpVbmlmaWNhdGlvblN0
YXRlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlz
aW9uIDE0MjMyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsNjMgKzMyMywzNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUt
PmNvZGVPcmlnaW47CisgICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+
Y2hpbGRyZW47CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdl
dExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogcHJldmlvdXNMb2NhbEFjY2VzcyA9IDA7
Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9PSBub2RlCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMSgp
LT5vcCgpID09IFBoaSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBleHBlY3QgdGhpcyB0
byBiZSB0aGUgY29tbW9uIGNhc2UuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+
aXNJblBoaXMobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBy
ZXZpb3VzTG9jYWxBY2Nlc3MgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IHBy
ZXZpb3VzTG9jYWxBY2Nlc3M7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGluZGV4SW5CbG9jayA+IDApOwotICAgICAgICAgICAgICAgICAgICAv
LyBNdXN0IHNlYXJjaCBmb3IgdGhlIHByZXZpb3VzIGFjY2VzcyB0byB0aGlzIGxvY2FsLgotICAg
ICAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggc3ViSW5kZXhJbkJsb2NrID0gaW5kZXhJ
bkJsb2NrOyBzdWJJbmRleEluQmxvY2stLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHN1Yk5vZGUgPSBibG9jay0+YXQoc3ViSW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghc3ViTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Vi
Tm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+bG9jYWwo
KSAhPSBub2RlLT5sb2NhbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHR3byBtdXN0IGhhdmUgYmVlbiB1bmlm
aWVkLgotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN1Yk5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpID09IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHByZXZpb3VzTG9jYWxBY2Nlc3MgPSBzdWJOb2RlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFwcmV2aW91c0xvY2FsQWNjZXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgcHJldmlvdXMgYWNjZXNzIG11c3QgaGF2ZSBiZWVuIGEgUGhpLgotICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHBoaUluZGV4SW5CbG9jayA9IGJsb2NrLT5waGlz
LnNpemUoKTsgcGhpSW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogcGhpTm9kZSA9IGJsb2NrLT5waGlzW3BoaUluZGV4SW5CbG9ja107Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocGhpTm9kZS0+bG9jYWwoKSAhPSBub2RlLT5sb2NhbCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGUgdHdvIG11c3QgaGF2ZSBiZWVuIHVuaWZpZWQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHBoaU5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmV2aW91c0xvY2FsQWNjZXNzID0gcGhpTm9kZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChwcmV2aW91c0xvY2FsQWNjZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
QVNTRVJUKHByZXZpb3VzTG9jYWxBY2Nlc3MpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIE5vZGUqIHRhaWxOb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIGlmICh0YWlsTm9kZSA9PSBub2RlKQotICAg
ICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobm9kZS0+bG9j
YWwoKSkgPSBwcmV2aW91c0xvY2FsQWNjZXNzOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoCi0gICAgICAgICAgICAgICAgICAgICAgICB0YWlsTm9k
ZS0+b3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGFpbE5vZGUtPm9w
KCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzQ2FwdHVyZWRBdE9y
QWZ0ZXIoYmxvY2ssIGluZGV4SW5CbG9jaywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm1fZm9ybSAhPSBMb2FkU3RvcmUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwaGktPm9wKCkgPT0gUGhpCisgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID09IHBoaQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9PSBub2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGdy
YXBoIHRocmVhZGVkIGZvciBlYXN5IGNhc2VzLiBUaGlzIGlzIGltcHJvdmVzIGNvbXBpbGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRpbWVzLiBJdCB3b3VsZCBiZSBjb3JyZWN0IHRvIGp1
c3QgZGV0aHJlYWQgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGFudG9tID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZD
aGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tTG9jYWwsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIHBoaSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gcGhhbnRvbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGFudG9tOwor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwotICAgICAgICAgICAgQWRqYWNl
bmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkcmVuOwotICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1ZSk7CiAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNv
ZGVPcmlnaW4sIGNoaWxkcmVuKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5jcHAJKHJldmlzaW9uIDE0MjMyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE1IEBACiAjaW5jbHVk
ZSAiREZHQnl0ZUNvZGVQYXJzZXIuaCIKICNpbmNsdWRlICJERkdDRkFQaGFzZS5oIgogI2luY2x1
ZGUgIkRGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdKSVRDb21waWxlci5oIgorI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCiAjaW5jbHVk
ZSAiREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHVW5pZmlj
YXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpA
QCAtNzIsNyArNzUsNyBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVN
CiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgaWYgKGxvZ0Nv
bXBpbGF0aW9uQ2hhbmdlcygpKQogICAgICAgICBkYXRhTG9nKCJERkcgY29tcGlsaW5nICIsICpj
b2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3Ry
dWN0aW9uQ291bnQoKSwgIlxuIik7CiAgICAgCiAgICAgLy8gRGVyaXZlIG91ciBzZXQgb2YgbXVz
dC1oYW5kbGUgdmFsdWVzLiBUaGUgY29tcGlsYXRpb24gbXVzdCBiZSBhdCBsZWFzdCBjb25zZXJ2
YXRpdmUKQEAgLTEwMiw5ICsxMDUsNiBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2Rl
IGNvbXBpbGVNCiAgICAgaWYgKCFwYXJzZShleGVjLCBkZmcpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCi0gICAgaWYgKGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbikKLSAgICAg
ICAgZGZnLnByZWRpY3RBcmd1bWVudFR5cGVzKCk7Ci0gICAgCiAgICAgLy8gQnkgdGhpcyBwb2lu
dCB0aGUgREZHIGJ5dGVjb2RlIHBhcnNlciB3aWxsIGhhdmUgcG90ZW50aWFsbHkgbXV0YXRlZCB2
YXJpb3VzIHRhYmxlcwogICAgIC8vIGluIHRoZSBDb2RlQmxvY2suIFRoaXMgaXMgYSBnb29kIHRp
bWUgdG8gcGVyZm9ybSBhbiBlYXJseSBzaHJpbmssIHdoaWNoIGlzIG1vcmUKICAgICAvLyBwb3dl
cmZ1bCB0aGFuIGEgbGF0ZSBvbmUuIEl0J3Mgc2FmZSB0byBkbyBzbyBiZWNhdXNlIHdlIGhhdmVu
J3QgZ2VuZXJhdGVkIGFueSBjb2RlCkBAIC0xMTMsMjggKzExMyw0MyBAQCBpbmxpbmUgYm9vbCBj
b21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAKICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQo
KSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsKKyAgICAKKyAgICBwZXJmb3JtQ1BTUmV0aHJlYWRp
bmcoZGZnKTsKKyAgICBwZXJmb3JtVW5pZmljYXRpb24oZGZnKTsKKyAgICBwZXJmb3JtUHJlZGlj
dGlvbkluamVjdGlvbihkZmcpOworICAgIAorICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQor
ICAgICAgICB2YWxpZGF0ZShkZmcpOworICAgIAogICAgIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFn
YXRpb24oZGZnKTsKICAgICBwZXJmb3JtRml4dXAoZGZnKTsKICAgICBwZXJmb3JtU3RydWN0dXJl
Q2hlY2tIb2lzdGluZyhkZmcpOworICAgIAogICAgIHVuc2lnbmVkIGNudCA9IDE7CiAgICAgZGZn
Lm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50Tm90Q29udmVyZ2VkOwogICAgIGZvciAoOzsgKytj
bnQpIHsKLSAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAg
aWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQogICAgICAgICAgICAgZGF0YUxvZ0YoIkRGRyBi
ZWdpbm5pbmcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGl0ZXJhdGlvbiAjJXUuXG4iLCBjbnQpOwog
ICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCiAgICAgICAgIHBlcmZvcm1D
RkEoZGZnKTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7
CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uKGRmZyk7
CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1NpbXBsaWZpY2F0aW9uKGRmZyk7CiAgICAg
ICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNTRShkZmcpOworICAgICAgICAKICAgICAgICAgaWYgKCFj
aGFuZ2VkKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAogICAgICAgICBkZmcucmVzZXRF
eGl0U3RhdGVzKCk7CiAgICAgICAgIHBlcmZvcm1GaXh1cChkZmcpOworICAgICAgICBwZXJmb3Jt
Q1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICB9CisgICAgCiAgICAgZGZnLm1fZml4cG9pbnRTdGF0
ZSA9IEZpeHBvaW50Q29udmVyZ2VkOwogICAgIHBlcmZvcm1DU0UoZGZnKTsKLSAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQorICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcp
OyAvLyBUaGlzIHNob3VsZCB1c3VhbGx5IGJlIGEgbm8tb3Agc2luY2UgQ1NFIHJhcmVseSBkZXRo
cmVhZHMgdGhlIGdyYXBoLgorICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKICAgICAg
ICAgZGF0YUxvZ0YoIkRGRyBvcHRpbWl6YXRpb24gZml4cG9pbnQgY29udmVyZ2VkIGluICV1IGl0
ZXJhdGlvbnMuXG4iLCBjbnQpOwogICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
KGRmZyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZp
c2lvbiAxNDIzMjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAK
ICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5o
IgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKICNpbmNsdWRlICJGdW5j
dGlvbkV4ZWN1dGFibGVEdW1wLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtNTMsNiAr
NTQsOCBAQCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDCiAgICAgLCBt
X29zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBtX211
c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKICAgICAsIG1fZml4cG9pbnRTdGF0ZShC
ZWZvcmVGaXhwb2ludCkKKyAgICAsIG1fZm9ybShMb2FkU3RvcmUpCisgICAgLCBtX3VuaWZpY2F0
aW9uU3RhdGUoTG9jYWxseVVuaWZpZWQpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7
CiB9CkBAIC0xOTUsOSArMTk4LDEzIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic3RydWN0KCIsIFJhd1BvaW50ZXIo
bm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSksICIgLT4g
IiwgUmF3UG9pbnRlcihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVy
ZSksICIpIik7CiAgICAgaWYgKG5vZGUtPmhhc0Z1bmN0aW9uKCkpIHsKICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiZnVuY3Rpb24oIiwgUmF3UG9pbnRlcihub2RlLT5mdW5jdGlvbigpKSwgIiwg
Iik7Ci0gICAgICAgIGlmIChub2RlLT5mdW5jdGlvbigpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6
c19pbmZvKSkKLSAgICAgICAgICAgIG91dC5wcmludChGdW5jdGlvbkV4ZWN1dGFibGVEdW1wKGpz
Q2FzdDxKU0Z1bmN0aW9uKj4obm9kZS0+ZnVuY3Rpb24oKSktPmpzRXhlY3V0YWJsZSgpKSk7Ci0g
ICAgICAgIGVsc2UKKyAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmluaGVyaXRzKCZKU0Z1
bmN0aW9uOjpzX2luZm8pKSB7CisgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpz
Q2FzdDxKU0Z1bmN0aW9uKj4obm9kZS0+ZnVuY3Rpb24oKSk7CisgICAgICAgICAgICBpZiAoZnVu
Y3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCI8aG9z
dCBmdW5jdGlvbj4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJp
bnQoRnVuY3Rpb25FeGVjdXRhYmxlRHVtcChmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCkpKTsKKyAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnQoIjxub3QgSlNGdW5jdGlvbj4iKTsK
ICAgICAgICAgb3V0LnByaW50KCIpIik7CiAgICAgfQpAQCAtMzA0LDYgKzMxMSw5IEBAIHZvaWQg
R3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKIAogdm9pZCBHcmFwaDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KQogeworICAgIGRhdGFMb2coIkRGRyBmb3IgIiwgQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksICI6XG4iKTsKKyAgICBkYXRh
TG9nKCIgIEZpeHBvaW50IHN0YXRlOiAiLCBtX2ZpeHBvaW50U3RhdGUsICI7IEZvcm06ICIsIG1f
Zm9ybSwgIjsgVW5pZmljYXRpb24gc3RhdGU6ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwgIlxuIik7
CisgICAgCiAgICAgTm9kZSogbGFzdE5vZGUgPSAwOwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBi
IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2Jsb2Nrc1tiXS5nZXQoKTsKQEAgLTM3NywyMiArMzg3LDI3IEBAIHZvaWQgR3JhcGg6OmRlcmVm
Q2hpbGRyZW4oTm9kZSogb3ApCiAgICAgRE9fVE9fQ0hJTERSRU4ob3AsIGRlcmVmKTsKIH0KIAot
dm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoKQordm9pZCBHcmFwaDo6ZGV0aHJlYWQo
KQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID49IDEpOwotICAg
IGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4obV9jb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcHJv
ZmlsZSA9IG1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKLSAg
ICAgICAgaWYgKCFwcm9maWxlKQorICAgIGlmIChtX2Zvcm0gPT0gTG9hZFN0b3JlKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQorICAgICAg
ICBkYXRhTG9nKCJEZXRocmVhZGluZyBERkcgZ3JhcGguXG4iKTsKKyAgICAKKyAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIERldGhyZWFkaW5nIik7CisgICAgCisgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKKyAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAK
LSAgICAgICAgbV9hcmd1bWVudHNbYXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Qo
cHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkpOwotICAgICAgICAKLSNpZiBERkdf
RU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiQXJn
dW1lbnQgWyIsIGFyZywgIl0gcHJlZGljdGlvbjogIiwKLSAgICAgICAgICAgIFNwZWN1bGF0aW9u
RHVtcChtX2FyZ3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigp
KSwgIlxuIik7Ci0jZW5kaWYKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2Nr
LT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJs
b2NrLT5waGlzW3BoaUluZGV4XTsKKyAgICAgICAgICAgIHBoaS0+Y2hpbGRyZW4ucmVzZXQoKTsK
KyAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBtX2Zvcm0gPSBMb2FkU3RvcmU7CiB9CiAKIHZv
aWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlz
dCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KQpAQCAt
NDA4LDYgKzQyMyw4IEBAIHZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2sK
IAogdm9pZCBHcmFwaDo6Y29sbGVjdEdhcmJhZ2UoKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgR2FyYmFnZSBDb2xsZWN0aW9uIik7CisgICAgCiAgICAgLy8gRmly
c3QgcmVzZXQgdGhlIGNvdW50cyB0byAwIGZvciBhbGwgbm9kZXMuCiAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2Nr
SW5kZXgpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4
XS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9u
IDE0MjMyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNyArODAsNiBAQCBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAgICAg
U3BlY3VsYXRlSW50ZWdlckJ1dEFsd2F5c1dhdGNoT3ZlcmZsb3csCiAgICAgU3BlY3VsYXRlSW50
ZWdlcgogfTsKLSAgICAKIAogLy8KIC8vID09PSBHcmFwaCA9PT0KQEAgLTE2Nyw2ICsxNjYsNDAg
QEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMihOb2RlKiBub2RlKSB7IGNs
ZWFyQW5kRGVyZWZDaGlsZChub2RlLCAxKTsgfQogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxk
MyhOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAyKTsgfQogICAgIAorICAg
IHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgYm9v
bCBzaG91bGRHZW5lcmF0ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7CisgICAgICAgIGlmIChu
b2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RD
aGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgICAg
ICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwg
c2hvdWxkR2VuZXJhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGVyZm9ybVN1
YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIHNob3VsZEdlbmVyYXRl
KTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkcmVu
LmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0
aW9uRm9yRWRnZShub2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uo
RWRnZSYgY2hpbGQsIGJvb2wgYWRkUmVmKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhp
cyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVudXNlZC4KKyAgICAgICAgaWYgKCFjaGlsZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFu
eSByZXBsYWNlbWVudC4KKyAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+cmVwbGFj
ZW1lbnQ7CisgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBjaGlsZC5zZXROb2RlKHJlcGxhY2VtZW50KTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRoZXJlIGlzIGRlZmluaXRlbHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQg
dGhlIHJlcGxhY2VtZW50IGRvZXMgbm90CisgICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4K
KyAgICAgICAgQVNTRVJUKCFjaGlsZC0+cmVwbGFjZW1lbnQpOworICAgICAgICAKKyAgICAgICAg
aWYgKGFkZFJlZikKKyAgICAgICAgICAgIHJlZihjaGlsZCk7CisgICAgfQorICAgIAogI2RlZmlu
ZSBERkdfREVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJh
bXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKICAgICB0ZW1w
bGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhZGROb2RlKFJlZkNoaWxkcmVu
TW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVk
VHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKQEAgLTE4
Myw2ICsyMTYsOCBAQCBwdWJsaWM6CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9O
KERGR19ERUZJTkVfQUREX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BRERfTk9ERQogCisgICAg
dm9pZCBkZXRocmVhZCgpOworICAgIAogICAgIC8vIENhbGwgdGhpcyBpZiB5b3UndmUgbW9kaWZp
ZWQgdGhlIHJlZmVyZW5jZSBjb3VudHMgb2Ygbm9kZXMgdGhhdCBkZWFsIHdpdGgKICAgICAvLyBs
b2NhbCB2YXJpYWJsZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgbG9jYWwgdmFyaWFibGUg
cmVmZXJlbmNlcyBjYW4gZm9ybQogICAgIC8vIGN5Y2xlcywgYW5kIGhlbmNlIHJlZmVyZW5jZSBj
b3VudGluZyBpcyBub3QgZW5vdWdoLiBUaGlzIHdpbGwgcmVzZXQgdGhlCkBAIC0xOTEsNiArMjI2
LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5v
ZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBkZXRocmVhZCgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAg
ICAgbm9kZS0+Y29udmVydFRvQ29uc3RhbnQoY29uc3RhbnROdW1iZXIpOwogICAgIH0KICAgICAK
QEAgLTM1MSw4ICszOTAsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BO
YW1lKE5vZGVUeXBlKTsKICAgICAKLSAgICB2b2lkIHByZWRpY3RBcmd1bWVudFR5cGVzKCk7Ci0g
ICAgCiAgICAgU3RydWN0dXJlU2V0KiBhZGRTdHJ1Y3R1cmVTZXQoY29uc3QgU3RydWN0dXJlU2V0
JiBzdHJ1Y3R1cmVTZXQpCiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlU2V0LnNpemUo
KSk7CkBAIC03MTgsNiArNzU1LDggQEAgcHVibGljOgogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG1f
bXVzdEhhbmRsZVZhbHVlczsKICAgICAKICAgICBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1f
Zml4cG9pbnRTdGF0ZTsKKyAgICBHcmFwaEZvcm0gbV9mb3JtOworICAgIFVuaWZpY2F0aW9uU3Rh
dGUgbV91bmlmaWNhdGlvblN0YXRlOwogcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZVN1
Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9j
a0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDIzMjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDYgKzMxNCwyMiBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0K
ICAgICAKKyAgICB2b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCisgICAgeworICAgICAgICBB
U1NFUlQobV9vcCA9PSBQaGFudG9tICYmIChjaGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwgY2hpbGQx
KCktPm9wKCkgPT0gU2V0TG9jYWwgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnQpKTsK
KyAgICAgICAgbV9vcCA9IFBoYW50b21Mb2NhbDsKKyAgICAgICAgbV9vcEluZm8gPSBjaGlsZDEo
KS0+bV9vcEluZm87IC8vIENvcHkgdGhlIHZhcmlhYmxlQWNjZXNzRGF0YS4KKyAgICAgICAgY2hp
bGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29udmVydFRv
R2V0TG9jYWwoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgTm9kZSogcGhpKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0TG9jYWxVbmxpbmtlZCk7CisgICAgICAgIG1fb3Ag
PSBHZXRMb2NhbDsKKyAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2
YXJpYWJsZSk7CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShFZGdlKHBoaSkpOworICAgIH0K
KyAgICAKICAgICBKU0NlbGwqIHdlYWtDb25zdGFudCgpCiAgICAgewogICAgICAgICBBU1NFUlQo
b3AoKSA9PSBXZWFrSlNDb25zdGFudCk7CkBAIC0zNjgsNiArMzg0LDcgQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAg
Y2FzZSBGbHVzaDoKKyAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0MjMy
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNiArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAg
ICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGksIE5vZGVEb2Vz
Tm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCiAgICAgbWFjcm8oRmx1c2gsIE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBtYWNybyhQaGFudG9tTG9jYWwsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBcCiAgICAgLyogR2V0IHRo
ZSB2YWx1ZSBvZiBhIGxvY2FsIHZhcmlhYmxlLCB3aXRob3V0IGxpbmtpbmcgaW50byB0aGUgVmFy
aWFibGVBY2Nlc3NEYXRhICovXAogICAgIC8qIG5ldHdvcmsuIFRoaXMgaXMgb25seSB2YWxpZCBm
b3IgdmFyaWFibGUgYWNjZXNzZXMgd2hvc2UgcHJlZGljdGlvbnMgb3JpZ2luYXRlZCAqL1wKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCShyZXZpc2lvbiAxNDIzMjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsOCArMzYsOCBAQCB2b2lkIFBoYXNlOjpiZWdpblBoYXNlKCkKIHsKICAgICBpZiAo
IXNob3VsZER1bXBHcmFwaEF0RWFjaFBoYXNlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBkYXRh
TG9nRigiQmVnaW5uaW5nIERGRyBwaGFzZSAlcy5cbiIsIG1fbmFtZSk7Ci0gICAgZGF0YUxvZ0Yo
IkdyYXBoIGJlZm9yZSAlczpcbiIsIG1fbmFtZSk7CisgICAgZGF0YUxvZygiQmVnaW5uaW5nIERG
RyBwaGFzZSAiLCBtX25hbWUsICIuXG4iKTsKKyAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV9uYW1l
LCAiOlxuIik7CiAgICAgbV9ncmFwaC5kdW1wKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BoYXNlLmgJKHJldmlzaW9uIDE0MjMyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBQaGFzZVR5cGU+CiBib29sIHJ1bkFuZExvZyhQaGFzZVR5cGUmIHBoYXNl
KQogewogICAgIGJvb2wgcmVzdWx0ID0gcGhhc2UucnVuKCk7Ci0gICAgaWYgKE9wdGlvbnM6OmR1
bXBHcmFwaEF0RWFjaFBoYXNlKCkpCisgICAgaWYgKHJlc3VsdCAmJiBsb2dDb21waWxhdGlvbkNo
YW5nZXMoKSkKICAgICAgICAgZGF0YUxvZ0YoIlBoYXNlICVzIGNoYW5nZWQgdGhlIElSLlxuIiwg
cGhhc2UubmFtZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvbkluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5j
bHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBQcmVk
aWN0aW9uSW5qZWN0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgs
ICJwcmVkaWN0aW9uIGluamVjdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1
bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMp
OworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gR2xvYmFsbHlV
bmlmaWVkKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChjb2RlQmxvY2soKS0+bnVtUGFyYW1l
dGVycygpID49IDEpOworICAgICAgICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgeworICAg
ICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gcHJvZmlsZWRCbG9jaygpLT52YWx1ZVBy
b2ZpbGVGb3JBcmd1bWVudChhcmcpOworICAgICAgICAgICAgaWYgKCFwcm9maWxlKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBoLm1f
YXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByb2ZpbGUtPmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIAorI2lmIERGR19FTkFCTEUo
REVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgIkFy
Z3VtZW50IFsiLCBhcmcsICJdIHByZWRpY3Rpb246ICIsCisgICAgICAgICAgICAgICAgU3BlY3Vs
YXRpb25EdW1wKG1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0
aW9uKCkpLCAiXG4iKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFibG9jay0+
aXNPU1JUYXJnZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAo
YmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX29zckVudHJ5Qnl0ZWNvZGVJbmRleCkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9ncmFwaC5tX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKAorICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5k
ZXgoaSkpOworICAgICAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0xvY2FsKCkpOworICAg
ICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KAorICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLm1fbXVzdEhhbmRsZVZh
bHVlc1tpXSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9u
KEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZH
IFByZWRpY3Rpb24gSW5qZWN0aW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5q
ZWN0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1ByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZV9oCisjZGVmaW5lIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZV9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBQcmVkaWN0
aW9uIEluamVjdGlvbjoKKy8vCisvLyBUYWtlcyBtaXNjZWxsYW5lb3VzIGRhdGEgYWJvdXQgdmFy
aWFibGUgdHlwZSBwcmVkaWN0aW9ucyBhbmQgaW5qZWN0cyB0aGVtLgorLy8gVGhpcyBpbmNsdWRl
cyBhcmd1bWVudCBwcmVkaWN0aW9ucyBhbmQgT1NSIGVudHJ5IHByZWRpY3Rpb25zLgorCitib29s
IHBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUHJl
ZGljdGlvbkluamVjdGlvblBoYXNlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxNDIzMjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQCBwdWJs
aWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgu
bV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV91bmlmaWNh
dGlvblN0YXRlID09IEdsb2JhbGx5VW5pZmllZCk7CisgICAgICAgIAogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgbV9jb3VudCA9IDA7CiAjZW5kaWYK
QEAgLTgxMiw2ICs4MTUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElubGluZVN0YXJ0Ogog
ICAgICAgICBjYXNlIE5vcDoKICAgICAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICAgICAg
Y2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIExhc3ROb2RlVHlwZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTQyMzIxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTE0Miw2ICs1MTQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUGhhbnRvbToK
KyAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wLgogICAg
ICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0
MjMyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMDcsNiArNTAwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFBoYW50b206CisgICAg
Y2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcC4KICAgICAgICAg
bm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTQyMzIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0
OSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAgeworICAgICAgICBBU1NF
UlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSAmbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzUm9v
dCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVbmlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHVW5pZmljYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVW5pZmljYXRpb25Q
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgVW5pZmljYXRpb25QaGFzZShHcmFw
aCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ1bmlmaWNhdGlvbiIpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncmFw
aC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZp
Y2F0aW9uU3RhdGUgPT0gTG9jYWxseVVuaWZpZWQpOworICAgICAgICAKKyAgICAgICAgLy8gRW5z
dXJlIHRoYXQgYWxsIFBoaSBmdW5jdGlvbnMgYXJlIHVuaWZpZWQuCisgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgt
LTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5w
aGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBi
bG9jay0+cGhpc1twaGlJbmRleF07CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGls
ZElkeCA9IDA7IGNoaWxkSWR4IDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytjaGlsZElkeCkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJZHgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBwaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT51bmlmeSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJZHgpLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBFbnN1cmUgdGhhdCBhbGwgcHJlZGljdGlvbnMgYXJl
IGZpeGVkIHVwIGJhc2VkIG9uIHRoZSB1bmlmaWNhdGlvbi4KKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YSA9ICZtX2dyYXBoLm1fdmFyaWFi
bGVBY2Nlc3NEYXRhW2ldOworICAgICAgICAgICAgZGF0YS0+ZmluZCgpLT5wcmVkaWN0KGRhdGEt
Pm5vblVuaWZpZWRQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgZGF0YS0+ZmluZCgpLT5tZXJn
ZUlzQ2FwdHVyZWQoZGF0YS0+aXNDYXB0dXJlZCgpKTsKKyAgICAgICAgICAgIGRhdGEtPmZpbmQo
KS0+bWVyZ2VTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGRhdGEtPnN0cnVjdHVyZUNoZWNr
SG9pc3RpbmdGYWlsZWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgu
bV91bmlmaWNhdGlvblN0YXRlID0gR2xvYmFsbHlVbmlmaWVkOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1VbmlmaWNhdGlvbihHcmFwaCYgZ3JhcGgpCit7
CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBVbmlmaWNhdGlvbiBQaGFz
ZSIpOworICAgIHJldHVybiBydW5QaGFzZTxVbmlmaWNhdGlvblBoYXNlPihncmFwaCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhh
c2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmlj
YXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVW5pZmljYXRpb25Q
aGFzZV9oCisjZGVmaW5lIERGR1VuaWZpY2F0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gVW5pZmljYXRpb246CisvLworLy8gRXhh
bWluZXMgYWxsIFBoaSBmdW5jdGlvbnMgYW5kIGVuc3VyZXMgdGhhdCB0aGUgdmFyaWFibGUgYWNj
ZXNzIGRhdGFzIGFyZQorLy8gdW5pZmllZC4gVGhpcyBjcmVhdGVzIG91ciAibGl2ZS1yYW5nZSBz
cGxpdCIgdmlldyBvZiB2YXJpYWJsZXMuCisKK2Jvb2wgcGVyZm9ybVVuaWZpY2F0aW9uKEdyYXBo
Jik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHVW5pZmljYXRpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDIzMjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDYgKzEwMCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbV9ncmFwaC5udW1DaGlsZHJlbihub2Rl
KTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFBoaSBjaGlsZHJlbiBpbiBMb2FkU3Rv
cmUgZm9ybSBhcmUgaW52YWxpZC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9m
b3JtID09IExvYWRTdG9yZSAmJiBibG9jay0+aXNQaGlJbmRleChpKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0x
MDksMTAgKzExMywyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBJ
J20gYSBGbHVzaCwgUGhhbnRvbSwgR2V0TG9jYWwsIG9yIFBoaSwgbXkgY2hpbGRyZW4gc2hvdWxk
IGhhc1Jlc3VsdCgpLgogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBQaGFudG9tOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlLCBlZGdlKSwgZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBlZGdlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSA9PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGk6CisgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1Zhcmlh
YmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
dW5pZmljYXRpb25TdGF0ZSA9PSBMb2NhbGx5VW5pZmllZCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBl
ZGdlKSwgZWRnZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
Zm9ybSA9PSBMb2FkU3RvcmUgJiYgIWopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSwgZWRnZSksIGVkZ2UtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMzLDcgKzE0NywxMCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgaWYg
KGJsb2NrLT5pc1BoaUluZGV4KGkpKQogICAgICAgICAgICAgICAgICAgICBwaGlzSW5UaGlzQmxv
Y2suYWRkKG5vZGUpOwotICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBteVJlZkNvdW50
cy5nZXQobm9kZSksIG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7CisgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTIHx8ICFub2RlLT5oYXNWYXJpYWJsZUFj
Y2Vzc0RhdGEoKSkKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG15UmVmQ291
bnRzLmdldChub2RlKSwgbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbXlSZWZDb3VudHMu
Z2V0KG5vZGUpID8gbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpIDogdHJ1ZSk7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7
ICsraikgewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5v
ZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCkBAIC0xNDgsNiArMTY1LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9wKCkg
PT0gUGhpKTsKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT5s
b2NhbCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBo
Lm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUGhpIGNo
aWxkcmVuIGluIExvYWRTdG9yZSBmb3JtIGFyZSBpbnZhbGlkLgorICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJsb2NrLT5pc1BoaUluZGV4KGkp
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGop
OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTE4MywxNyArMjA0LDI0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRvICp0
aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KICAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vz
c29yc1trXSksIHByZXZOb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9k
ZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHJl
dk5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5v
ZGUgPSBwcmV2Tm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3Nv
cnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vz
c29yc1trXSwgcHJldk5vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
dk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBGbHVzaAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwg
YmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IFBoaSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocHJldk5vZGUgPT0gZWRnZS5ub2RlKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0yMTQsMTAgKzI0MiwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGFyZ3VtZW50VG9PcGVyYW5kKGkpKSwgYmxvY2tJbmRleCks
ICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQuYXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCisgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGFyZ3VtZW50VG9PcGVy
YW5kKGkpKSwgYmxvY2tJbmRleCksICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkp
IHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNz
RGF0YSgpKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0
aW9ucy5hcmd1bWVudChpKSA9IG5vdFNldDsKICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0
aW9ucy5hcmd1bWVudChpKSA9IG5vdFNldDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fs
cygpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihpKSwgYmxvY2tJbmRleCksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2Fs
KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNz
RGF0YSgpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRD
UFMpCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KGkpLCBibG9ja0luZGV4KSwgIWJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaSkg
fHwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRh
KCkpOworCiAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMubG9jYWwoaSkgPSBub3RT
ZXQ7CiAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMubG9jYWwoaSkgPSBub3RTZXQ7
CiAgICAgICAgICAgICB9CkBAIC0yMzEsNiArMjY3LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgbm9kZXNJblRoaXNCbG9j
ay5jb250YWlucyhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Rmx1c2g6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9m
b3JtID09IExvYWRTdG9yZSAmJiAhaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlLCBlZGdlKSwgIXBoaXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5v
ZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQpAQCAtMjM5LDcgKzI4Nyw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwg
YmxvY2tJbmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0g
bm90U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVh
ZGVkQ1BTKQorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrSW5k
ZXgpLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7
CiAgICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9j
YWwoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBj
YXNlIFNldExvY2FsOgpAQCAtMjU2LDYgKzMwNSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZm9ybSA9PSBMb2FkU3RvcmUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjaGVj
a09wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIGdldExvY2FsUG9zaXRp
b25zLCBzZXRMb2NhbFBvc2l0aW9ucywgYXJndW1lbnRUb09wZXJhbmQoaSkpOwpAQCAtMzQ0LDcg
KzM5Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBpZiAobV9ncmFwaER1bXBNb2RlID09
IERvbnREdW1wR3JhcGgpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRhdGFMb2coIkdy
YXBoIG9mICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENv
ZGU6OkRGR0pJVCksICIgYXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFMb2co
IkF0IHRpbWUgb2YgZmFpbHVyZTpcbiIpOwogICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICB9
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQyMzIx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgsMjAgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIG5lZWRzTmV3TGluZSA9IHRydWU7CiAjZW5kaWYKICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpIHx8IG5vZGUtPm9wKCkg
PT0gUGhpIHx8IG5vZGUtPm9wKCkgPT0gRmx1c2gpCisgICAgICAgICAgICAgICAgaWYgKCFub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFBoaToKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNh
c2UgUGhhbnRvbUxvY2FsOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUt
PmNoaWxkMSgpLT5oYXNSZXN1bHQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBGaXJzdCwg
Y2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhlbgogICAg
ICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUu
IFdlIGRvIHNvIGluIHRoaXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTQyMzIxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzMSw3
ICsxNDMxLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAg
ICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+anNDb2RlRW50cnlGb3Ioa2lu
ZCk7CiAgICAgfQogICAgIAotICAgIGlmIChjYWxsTGlua0luZm8pIHsKKyAgICBpZiAoIUxMSU5U
X0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBjYWxsTGlua0luZm8pIHsKICAgICAgICAgaWYgKGNhbGxM
aW5rSW5mby0+aXNPbkxpc3QoKSkKICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+cmVtb3ZlKCk7
CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlciA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1l
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNw
cAkocmV2aXNpb24gMTQyMzIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
SlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsMTMgQEAgdm9pZCBKU1Zh
bHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogICAgICAgICBvdXQucHJpbnRmKCJEb3Vi
bGU6ICUwOHg6JTA4eCwgJWxmIiwgdS5hc1R3b0ludDMyc1sxXSwgdS5hc1R3b0ludDMyc1swXSwg
YXNEb3VibGUoKSk7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGlzQ2VsbCgpKSB7Ci0gICAgICAg
IGlmIChhc0NlbGwoKS0+aW5oZXJpdHMoJlN0cnVjdHVyZTo6c19pbmZvKSkgeworICAgICAgICBp
ZiAoYXNDZWxsKCktPmluaGVyaXRzKCZKU1N0cmluZzo6c19pbmZvKSkgeworICAgICAgICAgICAg
SlNTdHJpbmcqIHN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+KGFzQ2VsbCgpKTsKKyAgICAgICAg
ICAgIG91dC5wcmludCgiU3RyaW5nOiAiKTsKKyAgICAgICAgICAgIGlmIChzdHJpbmctPmlzUm9w
ZSgpKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiKHJvcGUpICIpOworICAgICAgICAgICAg
b3V0LnByaW50KHN0cmluZy0+dHJ5R2V0VmFsdWUoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoYXND
ZWxsKCktPmluaGVyaXRzKCZTdHJ1Y3R1cmU6OnNfaW5mbykpIHsKICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0ganNDYXN0PFN0cnVjdHVyZSo+KGFzQ2VsbCgpKTsKICAgICAgICAg
ICAgIG91dC5wcmludCgKICAgICAgICAgICAgICAgICAiU3RydWN0dXJlOiAiLCBSYXdQb2ludGVy
KHN0cnVjdHVyZSksICI6ICIsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTQy
MzIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY2LDYgKzE2Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIGZyaWVuZCBjbGFzcyBKU1ZhbHVlOworICAgICAgICAKICAgICAgICAg
Ym9vbCBpc1JvcGUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmlzTnVsbCgpOyB9CiAgICAgICAg
IGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9mbGFncyAmIElzOEJpdDsgfQogICAgICAg
ICB2b2lkIHNldElzOEJpdChib29sIGZsYWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNDIzMjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgdihib29sLCBkdW1wQnl0ZWNvZGVBdERGR1RpbWUsIGZhbHNlKSBc
CiAgICAgdihib29sLCBkdW1wR3JhcGhBdEVhY2hQaGFzZSwgZmFsc2UpIFwKICAgICB2KGJvb2ws
IHZlcmJvc2VDb21waWxhdGlvbiwgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGxvZ0NvbXBpbGF0aW9u
Q2hhbmdlcywgZmFsc2UpIFwKICAgICB2KGJvb2wsIHByaW50RWFjaE9TUkV4aXQsIGZhbHNlKSBc
CiAgICAgdihib29sLCB2YWxpZGF0ZUdyYXBoLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdmFsaWRh
dGVHcmFwaEF0RWFjaFBoYXNlLCBmYWxzZSkgXAo=
</data>
<flag name="review"
          id="207182"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>