<?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>124464</bug_id>
          
          <creation_ts>2013-11-16 21:34:57 -0800</creation_ts>
          <short_desc>Infer constant global variables</short_desc>
          <delta_ts>2013-11-20 10:56:02 -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>124465</dependson>
    
    <dependson>124539</dependson>
    
    <dependson>124609</dependson>
          <blocked>124630</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>atrick</cc>
    
    <cc>barraclough</cc>
    
    <cc>dino</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>951408</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-16 21:34:57 -0800</bug_when>
    <thetext>We currently infer constant globals if they are functions, but fail to do so in the general case.  No good reason for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951504</commentid>
    <comment_count>1</comment_count>
      <attachid>217173</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-17 23:55:32 -0800</bug_when>
    <thetext>Created attachment 217173
sort of a beginning</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951507</commentid>
    <comment_count>2</comment_count>
      <attachid>217174</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-18 00:00:51 -0800</bug_when>
    <thetext>Created attachment 217174
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951908</commentid>
    <comment_count>3</comment_count>
      <attachid>217258</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-18 17:48:37 -0800</bug_when>
    <thetext>Created attachment 217258
slowly...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951960</commentid>
    <comment_count>4</comment_count>
      <attachid>217271</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-18 22:14:24 -0800</bug_when>
    <thetext>Created attachment 217271
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951975</commentid>
    <comment_count>5</comment_count>
      <attachid>217271</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-18 22:57:57 -0800</bug_when>
    <thetext>Comment on attachment 217271
the patch

Attachment 217271 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/26978022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952134</commentid>
    <comment_count>6</comment_count>
      <attachid>217311</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-19 10:29:56 -0800</bug_when>
    <thetext>Created attachment 217311
thingy

Backing up before I rationalize something a bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952140</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-19 11:10:04 -0800</bug_when>
    <thetext>It looks like I&apos;ll need to make some LLVM changes to expose CreateFence().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952199</commentid>
    <comment_count>8</comment_count>
      <attachid>217321</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-19 13:03:01 -0800</bug_when>
    <thetext>Created attachment 217321
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952233</commentid>
    <comment_count>9</comment_count>
      <attachid>217331</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-19 14:17:45 -0800</bug_when>
    <thetext>Created attachment 217331
llvm patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952251</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-19 14:48:37 -0800</bug_when>
    <thetext>Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;Old&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159352)
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r159462)
&quot;ConstInfer&quot; at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159462)

Collected 10 samples per benchmark/VM, with 10 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.

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
SunSpider:
   3d-cube                                            7.5813+-0.0837            7.5099+-0.0311     !      8.0305+-0.0473        ! definitely 1.0593x slower
   3d-morph                                           8.9693+-0.0773     ?      9.0832+-0.0468     ^      8.8333+-0.0716          might be 1.0154x faster
   3d-raytrace                                        9.3453+-0.1951            9.3084+-0.2097            9.2695+-0.1789        
   access-binary-trees                                2.0006+-0.0151     ?      2.0066+-0.0088     ?      2.0191+-0.0160        ?
   access-fannkuch                                    7.9737+-0.1271     ?      7.9968+-0.0505     ?      8.0239+-0.0523        ?
   access-nbody                                       4.2408+-0.0152     ?      4.2599+-0.0158            4.2448+-0.0077        ?
   access-nsieve                                      5.0098+-0.0427     ?      5.0181+-0.0657            5.0146+-0.0393        ?
   bitops-3bit-bits-in-byte                           1.8453+-0.0204            1.8403+-0.0065     ?      1.8439+-0.0036        
   bitops-bits-in-byte                                7.2328+-0.0973     ?      7.2968+-0.0873     ?      7.3406+-0.0594        ? might be 1.0149x slower
   bitops-bitwise-and                                 2.9072+-0.0579     ?      2.9211+-0.0444     ?      2.9477+-0.0186        ? might be 1.0139x slower
   bitops-nsieve-bits                                 4.6191+-0.0317            4.5737+-0.0568     ?      4.6064+-0.0060        
   controlflow-recursive                              3.1574+-0.0176            3.1478+-0.0491     ?      3.1495+-0.0435        
   crypto-aes                                         5.5183+-0.0647            5.4801+-0.0254     ?      5.5083+-0.0861        
   crypto-md5                                         3.1918+-0.0427            3.1348+-0.0207     ?      3.2146+-0.0775        ?
   crypto-sha1                                        3.0005+-0.0786            2.9676+-0.0145     ?      2.9740+-0.0120        
   date-format-tofte                                 11.5722+-0.1942           11.4873+-0.1753           11.3636+-0.1770          might be 1.0184x faster
   date-format-xparb                                  8.6253+-0.0927            8.6029+-0.0709            8.5321+-0.0821          might be 1.0109x faster
   math-cordic                                        4.6024+-0.0415     ?      4.6132+-0.0826     ^      3.8967+-0.0121        ^ definitely 1.1811x faster
   math-partial-sums                                 10.2597+-0.0483     ?     10.2802+-0.0635     ?     10.3371+-0.0742        ?
   math-spectral-norm                                 2.7435+-0.0104            2.7283+-0.0116     ?      2.7320+-0.0075        
   regexp-dna                                        12.9838+-0.1186     ?     13.0205+-0.1752           12.9385+-0.1526        
   string-base64                                      5.5151+-0.0479            5.4973+-0.0372     ?      5.5889+-0.2107        ? might be 1.0134x slower
   string-fasta                                      10.6524+-0.1175           10.5616+-0.0848           10.5153+-0.1090          might be 1.0130x faster
   string-tagcloud                                   14.9815+-0.1459     ?     15.1071+-0.1295           15.0956+-0.0787        ?
   string-unpack-code                                30.2962+-0.0994           30.1338+-0.3907     ?     30.3429+-0.5461        ?
   string-validate-input                              6.8886+-0.0420     ?      6.9186+-0.0404            6.9142+-0.0520        ?

   &lt;arithmetic&gt; *                                     7.5275+-0.0222            7.5191+-0.0283            7.5107+-0.0268          might be 1.0022x faster
   &lt;geometric&gt;                                        6.0345+-0.0145            6.0255+-0.0184            6.0085+-0.0167          might be 1.0043x faster
   &lt;harmonic&gt;                                         4.9277+-0.0134            4.9171+-0.0147            4.9031+-0.0139          might be 1.0050x faster

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
LongSpider:
   3d-cube                                         2208.5469+-10.1600        2207.7935+-8.1583     !   2769.1203+-30.4995       ! definitely 1.2538x slower
   3d-morph                                        1546.5802+-6.5961         1543.5007+-1.0351     ^   1519.0914+-5.9873        ^ definitely 1.0181x faster
   3d-raytrace                                     1503.7377+-5.3149     ?   1504.7897+-11.1490    ?   1513.4263+-19.8767       ?
   access-binary-trees                             2215.9966+-14.9400        2209.4778+-10.7930        2209.2583+-8.5827        
   access-fannkuch                                  653.9927+-0.4076     ?    654.2470+-3.6295     ?    659.2461+-8.8497        ?
   access-nbody                                    1505.8125+-3.4616     ?   1512.2844+-18.8562        1504.7269+-1.6181        
   access-nsieve                                   1561.2185+-6.2901         1557.5055+-3.7414     ?   1563.1943+-4.0083        ?
   bitops-3bit-bits-in-byte                         121.7315+-0.1725          121.7066+-0.4761     ?    121.9833+-1.0209        ?
   bitops-bits-in-byte                              635.8265+-3.1425     ?    638.8021+-1.7354     ?    638.8499+-2.9275        ?
   bitops-nsieve-bits                              1051.2815+-4.8944     ?   1052.2355+-2.7466     ^   1048.1606+-0.9262        
   controlflow-recursive                           1452.7735+-4.7519     !   1464.9510+-2.5374         1464.4229+-1.7238        ! definitely 1.0080x slower
   crypto-aes                                      1665.1899+-8.3563     ?   1682.7131+-19.1745    ^   1647.7121+-2.8481        ^ definitely 1.0106x faster
   crypto-md5                                      1200.9325+-2.5537         1197.4833+-2.2498     ^   1186.1542+-1.5801        ^ definitely 1.0125x faster
   crypto-sha1                                     1663.0278+-5.5067     ?   1667.5052+-8.9946     ^   1613.5453+-4.7960        ^ definitely 1.0307x faster
   date-format-tofte                               1187.3284+-16.8142        1161.6964+-10.9893        1157.6568+-9.2259        ^ definitely 1.0256x faster
   date-format-xparb                               1512.9535+-51.5596        1501.5062+-52.5362        1485.5623+-15.0973         might be 1.0184x faster
   math-cordic                                     1808.6301+-12.5379        1804.8007+-9.9435     ^   1469.4609+-53.3881       ^ definitely 1.2308x faster
   math-partial-sums                               1309.2595+-5.1149     ?   1310.7026+-1.4511         1309.5820+-2.5635        ?
   math-spectral-norm                              1828.2603+-2.3347     ?   1831.1875+-6.4539         1827.5618+-1.3406        
   string-base64                                    513.6710+-1.4356          512.7414+-1.6932     ^    508.0153+-1.6576        ^ definitely 1.0111x faster
   string-fasta                                    1035.2658+-4.8885     ?   1037.3973+-3.9902         1032.8390+-6.1095        
   string-tagcloud                                  381.2720+-2.4586     ?    383.9449+-2.0300          382.6807+-1.0434        ?

   &lt;arithmetic&gt;                                    1298.3313+-2.5344         1298.1351+-2.5999     ?   1301.4659+-3.3516        ? might be 1.0024x slower
   &lt;geometric&gt; *                                   1114.3807+-1.7775         1114.3791+-1.6315     ^   1110.2069+-2.4871          might be 1.0038x faster
   &lt;harmonic&gt;                                       802.4670+-0.8326     ?    802.7785+-0.6887          799.8547+-2.3720          might be 1.0033x faster

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
V8Spider:
   crypto                                            79.3744+-0.2632           79.2608+-0.2209     ?     79.5256+-0.2844        ?
   deltablue                                        100.8797+-0.5382     ?    101.0357+-0.4396     ^     98.5235+-0.3692        ^ definitely 1.0239x faster
   earley-boyer                                      71.4267+-0.4203     ?     71.5787+-0.5025           70.9482+-0.3267        
   raytrace                                          40.4904+-0.1631     ?     40.9313+-0.6841           40.2924+-0.2402        
   regexp                                            99.0975+-0.3517     ?     99.5562+-0.7468     ^     98.3817+-0.2380        ^ definitely 1.0073x faster
   richards                                         113.8366+-0.4246     ?    114.4113+-1.0426     ^    109.0323+-1.5296        ^ definitely 1.0441x faster
   splay                                             45.9952+-0.3511           45.8373+-0.4730     ?     46.7443+-1.0395        ? might be 1.0163x slower

   &lt;arithmetic&gt;                                      78.7286+-0.1475     ?     78.9445+-0.1767     ^     77.6354+-0.3407        ^ definitely 1.0141x faster
   &lt;geometric&gt; *                                     73.8801+-0.1265     ?     74.0804+-0.2001     ^     73.1665+-0.3721        ^ definitely 1.0098x faster
   &lt;harmonic&gt;                                        68.7419+-0.1296     ?     68.9426+-0.2819           68.3704+-0.4320          might be 1.0054x faster

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
Octane and V8v7:
   encrypt                                           0.46902+-0.00046          0.46806+-0.00059          0.46792+-0.00505       
   decrypt                                           8.60616+-0.00626          8.59894+-0.00786    ?     8.64715+-0.11283       ?
   deltablue                                x2       0.58615+-0.00501          0.58236+-0.00305    ^     0.56392+-0.00403       ^ definitely 1.0394x faster
   earley                                            0.87403+-0.00909          0.86953+-0.00715          0.86162+-0.00475         might be 1.0144x faster
   boyer                                            12.56312+-0.06080    ?    12.70696+-0.24141         12.53532+-0.09966       
   raytrace                                 x2       4.44842+-0.06187    ?     4.53637+-0.09862          4.43155+-0.09923       
   regexp                                   x2      33.63696+-0.16438         33.51237+-0.09800         33.39958+-0.07642       
   richards                                 x2       0.31403+-0.00635          0.31118+-0.00390    ^     0.29358+-0.00309       ^ definitely 1.0697x faster
   splay                                    x2       0.64415+-0.00503          0.64315+-0.00874          0.63162+-0.00327       ^ definitely 1.0198x faster
   navier-stokes                            x2      10.93590+-0.00572    ?    10.94940+-0.01488         10.94629+-0.00590       ?
   closure                                           0.42789+-0.00235          0.42606+-0.00052    ?     0.42676+-0.00104       
   jquery                                            6.14190+-0.04089          6.11014+-0.00842    ?     6.11918+-0.01048       
   gbemu                                    x2      71.19315+-0.95637    ?    71.64433+-0.31485    ?    72.47514+-0.54996       ? might be 1.0180x slower
   mandreel                                 x2     182.77830+-0.26305    ^   181.49099+-0.66291    ^   145.13108+-0.50201       ^ definitely 1.2594x faster
   pdfjs                                    x2     101.86309+-0.26855        101.52660+-0.40274        101.48690+-0.36967       
   box2d                                    x2      34.84515+-0.16878    ?    34.85743+-0.25357         34.53703+-0.22502       

V8v7:
   &lt;arithmetic&gt;                                      7.72772+-0.02293    ?     7.73207+-0.02275    ^     7.69032+-0.01526         might be 1.0049x faster
   &lt;geometric&gt; *                                     2.44827+-0.00726    ?     2.44869+-0.00556    ^     2.40499+-0.00681       ^ definitely 1.0180x faster
   &lt;harmonic&gt;                                        0.93820+-0.00646          0.93356+-0.00395    ^     0.90321+-0.00410       ^ definitely 1.0387x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                     35.06049+-0.08146         34.97262+-0.06440    ^    32.18659+-0.04976       ^ definitely 1.0893x faster
   &lt;geometric&gt; *                                     6.99855+-0.01221          6.99482+-0.00952    ^     6.80158+-0.01376       ^ definitely 1.0290x faster
   &lt;harmonic&gt;                                        1.32181+-0.00817          1.31542+-0.00487    ^     1.27824+-0.00527       ^ definitely 1.0341x faster

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
Kraken:
   ai-astar                                          493.555+-0.803            493.079+-0.678      ?     496.481+-4.734         ?
   audio-beat-detection                              236.974+-1.660            236.352+-1.442      ?     237.680+-1.282         ?
   audio-dft                                         300.754+-9.631            296.825+-3.154      ?     298.421+-3.875         
   audio-fft                                         144.772+-0.348            144.446+-0.149      ^     143.160+-0.185         ^ definitely 1.0113x faster
   audio-oscillator                                  245.129+-0.457            244.730+-0.364            244.720+-0.538         
   imaging-darkroom                                  289.926+-0.598            289.726+-0.542            289.652+-0.556         
   imaging-desaturate                                158.437+-0.198      ?     158.633+-0.580            158.540+-0.203         ?
   imaging-gaussian-blur                             430.918+-1.207      ^     417.353+-0.287      ^     366.696+-0.580         ^ definitely 1.1751x faster
   json-parse-financial                               79.861+-0.290      !      80.649+-0.285             80.114+-0.562         ?
   json-stringify-tinderbox                          106.614+-0.972            105.990+-0.430      !     109.098+-0.297         ! definitely 1.0233x slower
   stanford-crypto-aes                                90.734+-0.746             90.059+-0.455      ?      90.062+-0.692         
   stanford-crypto-ccm                               101.463+-0.902            100.082+-1.085      ?     100.494+-1.456         
   stanford-crypto-pbkdf2                            262.603+-9.591            261.817+-3.564      ?     265.266+-1.668         ? might be 1.0101x slower
   stanford-crypto-sha256-iterative                  115.328+-0.548      ?     115.616+-0.414      ?     116.147+-0.428         ?

   &lt;arithmetic&gt; *                                    218.362+-1.025      ^     216.811+-0.269      ^     214.038+-0.385         ^ definitely 1.0202x faster
   &lt;geometric&gt;                                       185.824+-0.652      ^     184.921+-0.227      ^     183.901+-0.254         ^ definitely 1.0105x faster
   &lt;harmonic&gt;                                        159.246+-0.417            158.743+-0.238            158.693+-0.275           might be 1.0035x faster

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
JSRegress:
   adapt-to-double-divide                            22.8095+-0.1505     ?     22.8709+-0.0898           22.7246+-0.0576        
   aliased-arguments-getbyval                         0.9569+-0.0035     ?      0.9583+-0.0040     ?      0.9610+-0.0056        ?
   allocate-big-object                                2.6257+-0.0122     ?      2.6355+-0.0203     ?      2.6505+-0.0197        ?
   arity-mismatch-inlining                            0.9014+-0.0051     !      0.9143+-0.0045     ?      0.9195+-0.0037        ! definitely 1.0200x slower
   array-access-polymorphic-structure                 9.8793+-0.1233            9.7956+-0.0976            9.6965+-0.0683          might be 1.0188x faster
   array-nonarray-polymorhpic-access                 56.5963+-0.3435           56.5801+-0.2845           56.5191+-0.5028        
   array-with-double-add                              5.7004+-0.0203     ?      5.7645+-0.0450            5.7307+-0.0645        ?
   array-with-double-increment                        4.3179+-0.0080     ?      4.3217+-0.0067            4.3144+-0.0445        
   array-with-double-mul-add                          6.8268+-0.0732     ?      6.8446+-0.0989     ?      6.8777+-0.0278        ?
   array-with-double-sum                              8.0709+-0.0841            8.0460+-0.0683     ?      8.0838+-0.0964        ?
   array-with-int32-add-sub                          10.4845+-0.0753     ?     10.4955+-0.1392           10.3888+-0.0766        
   array-with-int32-or-double-sum                     8.0293+-0.0650     ?      8.0713+-0.0390     ?      8.1021+-0.0548        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    121.6957+-1.4001     ?    123.3762+-2.2197          121.0325+-0.9226        
   ArrayBuffer-DataView-alloc-long-lived             32.6782+-1.1266     ?     35.0164+-1.5221     ^     31.3492+-0.3938          might be 1.0424x faster
   ArrayBuffer-Int32Array-byteOffset                  8.9970+-0.0554            8.9814+-0.0882     ^      7.0346+-0.0562        ^ definitely 1.2790x faster
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    217.8981+-2.6617     ?    218.3701+-1.7238          218.1214+-1.0683        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    168.5089+-1.1312     ^    164.7660+-0.6732     !    170.2658+-1.4974        ? might be 1.0104x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    123.4058+-1.3980          122.0156+-1.8775     ?    123.2818+-1.6288        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     51.2541+-1.2028           50.9293+-0.2759           50.8625+-0.3620        
   ArrayBuffer-Int8Array-alloc-long-lived            31.0486+-0.8730           30.2025+-0.7521     !     31.4497+-0.2337        ? might be 1.0129x slower
   ArrayBuffer-Int8Array-alloc                       28.5149+-1.2063     ^     26.3635+-0.1041     !     28.4125+-0.2348        
   asmjs_bool_bug                                    11.4874+-0.1621     ^     11.1345+-0.1208     ^     10.1571+-0.0441        ^ definitely 1.1310x faster
   basic-set                                         21.4774+-0.1140     ?     21.5328+-0.1828           21.2973+-0.1971        
   big-int-mul                                        5.6153+-0.0685     ?      5.6580+-0.0600            5.6548+-0.0148        ?
   boolean-test                                       4.4679+-0.0143     ?      4.4759+-0.0308            4.4206+-0.0250        ^ definitely 1.0107x faster
   branch-fold                                        4.9567+-0.0230     ?      4.9804+-0.0379     ?      4.9953+-0.0376        ?
   cast-int-to-double                                14.2670+-0.1114     ?     14.4006+-0.0822     ^     12.4316+-0.0916        ^ definitely 1.1476x faster
   cell-argument                                     16.5912+-0.0568           16.5591+-0.1752     ?     16.6917+-0.1536        ?
   cfg-simplify                                       3.9697+-0.0101     ?      3.9732+-0.0088            3.9713+-0.0063        ?
   cmpeq-obj-to-obj-other                            14.0770+-0.5360           13.8792+-0.3308     ^     12.6677+-0.5365        ^ definitely 1.1113x faster
   constant-test                                      8.8220+-0.1096     ?      8.8606+-0.0727     ?      8.9553+-0.0678        ? might be 1.0151x slower
   DataView-custom-properties                       127.5100+-1.1530     ?    128.9706+-0.7854     ^    126.8262+-0.9501        
   delay-tear-off-arguments-strictmode                3.4911+-0.0175     ?      3.5350+-0.0519            3.5147+-0.0117        ?
   destructuring-arguments-length                   173.6541+-1.5129          171.3948+-1.8163     ?    175.2503+-2.6126        ?
   destructuring-arguments                            8.6912+-0.0485            8.6900+-0.1071     ?      8.7288+-0.0675        ?
   destructuring-swap                                 8.5404+-0.0830            8.5171+-0.0959     ?      8.5532+-0.1127        ?
   direct-arguments-getbyval                          0.8414+-0.0136            0.8344+-0.0068     ?      0.8534+-0.0128        ? might be 1.0144x slower
   double-pollution-getbyval                         11.1453+-0.1562           11.1355+-0.1023           11.1254+-0.0258        
   double-pollution-putbyoffset                       6.9511+-0.3597            6.8221+-0.0334     ?      6.8831+-0.0419        
   empty-string-plus-int                             11.1772+-0.1071     ^     10.8731+-0.0647     !     11.2000+-0.1055        ?
   emscripten-cube2hash                              52.3148+-0.7171           52.2263+-0.7355     ?     52.3375+-0.2488        ?
   emscripten-memops                               9272.6123+-24.9598        9237.0210+-24.3818    ?   9248.2187+-27.3342       
   external-arguments-getbyval                        2.0097+-0.0191            2.0077+-0.0169            2.0010+-0.0115        
   external-arguments-putbyval                        3.0306+-0.0193            3.0273+-0.0189     ?      3.0323+-0.0209        ?
   Float32Array-matrix-mult                           6.4246+-0.0876            6.4085+-0.0754     ?      6.4744+-0.1234        ?
   Float32Array-to-Float64Array-set                  95.2276+-0.6756     !     96.4917+-0.4695     !     98.5679+-0.7311        ! definitely 1.0351x slower
   Float64Array-alloc-long-lived                    110.3066+-0.7219          110.0045+-0.5300     ^    108.2763+-0.4682        ^ definitely 1.0188x faster
   Float64Array-to-Int16Array-set                   119.0735+-0.8367     ?    119.2173+-1.8576          116.9845+-1.2677          might be 1.0179x faster
   fold-double-to-int                                25.7797+-0.4649           25.6166+-0.2934           25.5552+-0.1057        
   for-of-iterate-array-entries                       8.5379+-0.0940     ?      8.6966+-0.1614            8.5934+-0.1708        ?
   for-of-iterate-array-keys                          3.5554+-0.0740            3.5348+-0.0272            3.5260+-0.0560        
   for-of-iterate-array-values                        3.0051+-0.0523     ?      3.0397+-0.0345            3.0097+-0.0528        ?
   function-dot-apply                                 3.1955+-0.0098     ?      3.1972+-0.0068     ?      3.2227+-0.0477        ?
   function-test                                      5.0523+-0.0641     ^      4.9176+-0.0453     !      5.0526+-0.0227        ?
   get-by-id-chain-from-try-block                     7.5673+-0.0823     ?      7.6058+-0.0605     ?      7.6149+-0.0410        ?
   get-by-id-proto-or-self                           23.4803+-0.3637           23.4063+-0.2953           23.2544+-0.2471        
   get-by-id-self-or-proto                           23.5496+-0.9241           23.4492+-1.0060     ?     24.2684+-0.7142        ? might be 1.0305x slower
   get_callee_monomorphic                             4.7384+-0.0339     ?      4.7886+-0.0647     ?      4.8417+-0.0300        ! definitely 1.0218x slower
   get_callee_polymorphic                             4.5383+-0.0136     ?      4.5824+-0.0440     ^      4.4976+-0.0113        ^ definitely 1.0091x faster
   HashMap-put-get-iterate-keys                      43.7997+-0.2355     ?     43.9359+-0.4241     !     47.0016+-0.6132        ! definitely 1.0731x slower
   HashMap-put-get-iterate                           59.8639+-0.3147     ?     60.3349+-0.2163     !     63.1178+-0.2390        ! definitely 1.0544x slower
   HashMap-string-put-get-iterate                    54.7833+-0.3399     ^     53.5820+-0.3141     !     55.1113+-0.1943        ?
   imul-double-only                                  17.7650+-0.0972     ?     18.2058+-0.8810           17.8960+-0.1375        ?
   imul-int-only                                     14.9201+-0.1461     ?     15.0726+-0.2349           15.0074+-0.1686        ?
   imul-mixed                                        22.2164+-0.0787           22.2125+-0.1353     ?     22.2378+-0.0952        ?
   in-four-cases                                     25.8585+-0.0996     ?     25.9142+-0.0835     ?     25.9268+-0.0613        ?
   in-one-case-false                                 12.2129+-0.0762     ?     12.3918+-0.1434           12.1671+-0.0902        
   in-one-case-true                                  12.2912+-0.1580           12.1615+-0.1118     ?     12.3350+-0.1530        ?
   in-two-cases                                      12.9584+-0.1227           12.9274+-0.1040     ?     13.0456+-0.1616        ?
   indexed-properties-in-objects                      4.6775+-0.0326            4.6458+-0.0552            4.6285+-0.0210          might be 1.0106x faster
   inline-arguments-access                            1.5420+-0.0306            1.5110+-0.0750     ?      1.5503+-0.0052        ?
   inline-arguments-local-escape                     22.4794+-0.0924           22.4316+-0.1565     !     22.9300+-0.2251        ! definitely 1.0200x slower
   inline-get-scoped-var                              6.9817+-0.1300     ?      7.1031+-0.0804            7.0540+-0.0898        ? might be 1.0104x slower
   inlined-put-by-id-transition                      15.1604+-0.2362     ?     15.3648+-0.2632           15.3573+-0.1664        ? might be 1.0130x slower
   int-or-other-abs-then-get-by-val                   9.8535+-0.1187     ?      9.8729+-0.0968     ^      9.3529+-0.0588        ^ definitely 1.0535x faster
   int-or-other-abs-zero-then-get-by-val             41.8238+-0.0771     ^     40.8356+-0.5288     !     41.9303+-0.1342        ?
   int-or-other-add-then-get-by-val                  10.8766+-0.0970           10.8547+-0.1525     ^      9.7009+-0.0782        ^ definitely 1.1212x faster
   int-or-other-add                                  11.1181+-0.0733     ?     11.1306+-0.0815           11.0026+-0.1055          might be 1.0105x faster
   int-or-other-div-then-get-by-val                   6.7571+-0.0298     ?      6.7624+-0.0332     ^      6.4475+-0.0244        ^ definitely 1.0480x faster
   int-or-other-max-then-get-by-val                   8.8592+-0.1091     ?      9.0039+-0.1708            8.9536+-0.1759        ? might be 1.0107x slower
   int-or-other-min-then-get-by-val                   7.7983+-0.0361     ?      7.8221+-0.0470     ^      7.1710+-0.0311        ^ definitely 1.0875x faster
   int-or-other-mod-then-get-by-val                   6.1808+-0.0999     ?      6.2244+-0.0917            6.0950+-0.0808          might be 1.0141x faster
   int-or-other-mul-then-get-by-val                   6.6563+-0.0667     ?      6.6813+-0.0714     ^      6.4414+-0.0213        ^ definitely 1.0334x faster
   int-or-other-neg-then-get-by-val                   8.4598+-0.0637            8.3860+-0.0962     ^      7.9227+-0.0761        ^ definitely 1.0678x faster
   int-or-other-neg-zero-then-get-by-val             42.0075+-0.1510     ^     40.3923+-0.8565     ?     46.9566+-11.2554       ? might be 1.1178x slower
   int-or-other-sub-then-get-by-val                  10.8664+-0.0825     ?     10.9820+-0.1399     ^     10.1188+-0.1351        ^ definitely 1.0739x faster
   int-or-other-sub                                   8.9281+-0.0765            8.8818+-0.0609     ^      8.0830+-0.0792        ^ definitely 1.1046x faster
   int-overflow-local                                 6.5183+-0.0940            6.4631+-0.0973     !      6.7037+-0.0804        ! definitely 1.0284x slower
   Int16Array-alloc-long-lived                       75.4744+-0.7306           75.3618+-0.4057     ^     72.7459+-0.2952        ^ definitely 1.0375x faster
   Int16Array-bubble-sort-with-byteLength            48.6752+-0.1248     ?     48.7386+-0.1274     !     49.0732+-0.1037        ! definitely 1.0082x slower
   Int16Array-bubble-sort                            48.1737+-0.1441           48.1617+-0.1452     !     48.5731+-0.1434        ! definitely 1.0083x slower
   Int16Array-load-int-mul                            2.0468+-0.0081     ?      2.0742+-0.0632            2.0624+-0.0064        ! definitely 1.0076x slower
   Int16Array-to-Int32Array-set                      95.0097+-0.7633     !     96.2925+-0.2024     ^     86.1640+-1.8124        ^ definitely 1.1027x faster
   Int32Array-alloc-huge-long-lived                 711.5034+-2.4485          709.2382+-2.7370     ?    709.3981+-2.6997        
   Int32Array-alloc-huge                            818.5805+-6.4183          815.7407+-6.3050     ?    819.4341+-7.2667        ?
   Int32Array-alloc-large-long-lived                971.9801+-8.8105          970.2190+-6.0441     ?    972.8456+-6.3963        ?
   Int32Array-alloc-large                            45.3736+-0.8574     ?     45.7057+-0.9674     ?     46.3219+-0.8697        ? might be 1.0209x slower
   Int32Array-alloc-long-lived                       83.7577+-0.5173     ?     84.1006+-0.4842     ^     80.9317+-0.8971        ^ definitely 1.0349x faster
   Int32Array-alloc                                   4.5118+-0.0145            4.5107+-0.0126     ?      4.5530+-0.0507        ?
   Int32Array-Int8Array-view-alloc                   15.0046+-0.0763           14.8880+-0.1027     !     15.1614+-0.0945        ? might be 1.0105x slower
   int52-spill                                       12.1899+-0.1115           12.0739+-0.1616           12.0577+-0.1328          might be 1.0110x faster
   Int8Array-alloc-long-lived                        71.9219+-0.4762           71.2560+-0.7434     ^     67.9194+-0.5820        ^ definitely 1.0589x faster
   Int8Array-load-with-byteLength                     5.0308+-0.0147     ?      5.0432+-0.0192     ?      5.0573+-0.0072        ! definitely 1.0053x slower
   Int8Array-load                                     5.0389+-0.0085     ?      5.0422+-0.0164     ?      5.0453+-0.0408        ?
   integer-divide                                    15.5134+-0.0828           15.5109+-0.1052     ?     15.6443+-0.1717        ?
   integer-modulo                                     1.9830+-0.0155     ?      1.9884+-0.0112     !      2.1223+-0.0189        ! definitely 1.0703x slower
   large-int-captured                                 9.1565+-0.1413            9.0936+-0.2129     ?      9.3506+-0.1847        ? might be 1.0212x slower
   large-int-neg                                     25.9457+-0.0932           25.9073+-0.1399     ?     25.9642+-0.2328        ?
   large-int                                         23.4918+-0.3344           23.3021+-0.1392           23.2450+-0.1887          might be 1.0106x faster
   lots-of-fields                                    11.1841+-0.0466     ^     10.9684+-0.0465     ?     10.9898+-0.0694        ^ definitely 1.0177x faster
   make-indexed-storage                               4.2448+-0.0381            4.2182+-0.0277            4.2048+-0.0927        
   make-rope-cse                                      5.9127+-0.0785     ?      6.0364+-0.1633            5.9099+-0.0787        
   marsaglia-larger-ints                            119.5746+-0.2439          119.4272+-0.3135          119.3517+-0.1495        
   marsaglia-osr-entry                               52.6655+-0.1362     ?     52.7665+-0.1263           52.7596+-0.1339        ?
   marsaglia                                        519.9486+-0.3890     ?    520.1472+-0.4219          520.0290+-0.8336        ?
   method-on-number                                  31.3616+-0.2276     !     33.0326+-0.5318           32.3031+-0.7358        ? might be 1.0300x slower
   negative-zero-divide                               0.4014+-0.0017     ?      0.4039+-0.0025     ?      0.4078+-0.0034        ! definitely 1.0159x slower
   negative-zero-modulo                               0.3864+-0.0058            0.3845+-0.0022     !      0.3883+-0.0014        ?
   negative-zero-negate                               0.3711+-0.0035            0.3701+-0.0028     ?      0.3861+-0.0266        ? might be 1.0404x slower
   nested-function-parsing-random                   394.2936+-2.2065     ^    382.4261+-0.9052     !    387.0992+-1.7549        ^ definitely 1.0186x faster
   nested-function-parsing                           48.0641+-0.1292     ?     48.1419+-0.6865     ?     48.6539+-0.9856        ? might be 1.0123x slower
   new-array-buffer-dead                              3.7805+-0.0159     ?      3.7904+-0.0185     ?      3.8066+-0.0122        ?
   new-array-buffer-push                             10.6692+-0.1125           10.6630+-0.0856           10.6608+-0.1611        
   new-array-dead                                    28.6384+-0.0571           28.5724+-0.0978     ?     28.7558+-0.3010        ?
   new-array-push                                     6.9297+-0.0737     ?      6.9979+-0.1872            6.9046+-0.0638        
   number-test                                        4.3827+-0.0093     ?      4.4104+-0.0230     ^      4.3152+-0.0360        ^ definitely 1.0157x faster
   object-closure-call                               13.2244+-0.0352     ?     13.3235+-0.0918     ?     13.3578+-0.0728        ! definitely 1.0101x slower
   object-test                                        4.8301+-0.0483     ?      4.8823+-0.0808     ^      4.7536+-0.0266        ^ definitely 1.0161x faster
   poly-stricteq                                     91.4213+-1.9449           90.5640+-1.4715     ^     80.0481+-0.1473        ^ definitely 1.1421x faster
   polymorphic-structure                             21.0641+-0.3284     ?     21.5131+-0.2462           21.2325+-0.2929        ?
   polyvariant-monomorphic-get-by-id                 11.9946+-0.0679     ?     12.0978+-0.0688           12.0496+-0.0444        ?
   put-by-id                                         19.2300+-0.3155     ?     19.8659+-0.3537           19.5487+-0.3045        ? might be 1.0166x slower
   put-by-val-large-index-blank-indexing-type   
                                                     11.1557+-0.2064           11.0030+-0.2285     ?     11.0335+-0.1093          might be 1.0111x faster
   rare-osr-exit-on-local                            20.3186+-0.0982     ?     20.3220+-0.1131           20.2770+-0.0823        
   register-pressure-from-osr                        31.3731+-0.2330     ?     31.6402+-0.1230     !     32.1539+-0.0923        ! definitely 1.0249x slower
   simple-activation-demo                            35.1986+-0.0749     ?     35.4050+-0.4254           35.1165+-0.1751        
   slow-array-profile-convergence                     3.9881+-0.0170     !      4.0482+-0.0174     ?      4.1407+-0.2274        ? might be 1.0383x slower
   slow-convergence                                   3.4239+-0.0147     ?      3.4753+-0.0691            3.4566+-0.0195        ?
   sparse-conditional                                 1.3478+-0.0128     ?      1.3496+-0.0097            1.3493+-0.0035        ?
   splice-to-remove                                  77.7670+-0.3664           77.2725+-0.2259     !     78.0687+-0.4646        ?
   stepanov_container                             11672.0730+-17.3851    ?  11876.1768+-283.0485      11669.5101+-26.4594       
   string-concat-object                               2.9955+-0.0198            2.9888+-0.0133     ?      3.0198+-0.0349        ?
   string-concat-pair-object                          2.9266+-0.0180     ?      2.9417+-0.0360            2.9052+-0.0238        
   string-concat-pair-simple                         17.4830+-0.3026           17.4476+-0.2843           17.2484+-0.2723          might be 1.0136x faster
   string-concat-simple                              17.1912+-0.3554     ?     17.5383+-0.3965           17.3712+-0.2868        ? might be 1.0105x slower
   string-cons-repeat                                10.4967+-0.0368     ?     10.5149+-0.0443           10.4768+-0.0551        
   string-cons-tower                                 10.9854+-0.0702     ?     11.0376+-0.0275           10.9743+-0.0464        
   string-equality                                   43.6187+-0.7293           43.5188+-0.4497     ?     43.6642+-0.4313        ?
   string-get-by-val-big-char                        13.6582+-0.0942           13.5103+-0.0766     !     13.7061+-0.0864        ?
   string-get-by-val-out-of-bounds-insane             5.9432+-0.1378     ?      6.0419+-0.0985     ?      6.0465+-0.1903        ? might be 1.0174x slower
   string-get-by-val-out-of-bounds                    5.3602+-0.0219            5.3499+-0.0094            5.3332+-0.0457        
   string-get-by-val                                  4.9161+-0.0171            4.9149+-0.0414            4.9079+-0.0190        
   string-hash                                        2.7689+-0.0077     ?      2.7837+-0.0311     ?      2.7851+-0.0224        ?
   string-long-ident-equality                        38.5721+-0.5298     ?     39.1669+-0.6131           38.8598+-0.6125        ?
   string-repeat-arith                               47.8751+-0.3645     ?     48.4335+-0.2590           48.1551+-0.1584        ?
   string-sub                                        96.3876+-0.3512     !     98.2543+-1.2782           97.9476+-0.5947        ! definitely 1.0162x slower
   string-test                                        4.3067+-0.0051     ?      4.3300+-0.0331            4.3106+-0.0224        ?
   string-var-equality                               71.4104+-0.4600           71.0679+-0.5971     !     86.6200+-2.0061        ! definitely 1.2130x slower
   structure-hoist-over-transitions                   3.4273+-0.0395            3.4067+-0.0169     ?      3.4085+-0.0142        
   switch-char-constant                               3.5009+-0.0163     ?      3.5265+-0.0462            3.5023+-0.0137        ?
   switch-char                                        8.2287+-0.0586            8.1844+-0.0332            8.1554+-0.0993        
   switch-constant                                    9.2414+-0.0707     ?      9.2938+-0.1167     ?      9.3430+-0.0889        ? might be 1.0110x slower
   switch-string-basic-big-var                       21.5836+-0.3059           21.2087+-0.0777     ^     20.3483+-0.1323        ^ definitely 1.0607x faster
   switch-string-basic-big                           21.6347+-0.0839     ?     21.6808+-0.0813           21.5644+-0.1032        
   switch-string-basic-var                           21.2091+-0.1139           21.1673+-0.3029     ^     20.2085+-0.0757        ^ definitely 1.0495x faster
   switch-string-basic                               22.9189+-0.7718     ?     23.4817+-0.4436     ^     22.3744+-0.4742          might be 1.0243x faster
   switch-string-big-length-tower-var                29.7823+-0.0485           29.7547+-0.1100     !     29.9882+-0.1151        ! definitely 1.0069x slower
   switch-string-length-tower-var                    23.5469+-0.0977     ?     23.5547+-0.1466     ^     21.6857+-0.1381        ^ definitely 1.0858x faster
   switch-string-length-tower                        17.4343+-0.1022           17.3812+-0.0517     ^     17.0125+-0.0733        ^ definitely 1.0248x faster
   switch-string-short                               17.4451+-0.1267           17.4094+-0.1002     ^     17.0320+-0.2299        ^ definitely 1.0243x faster
   switch                                            16.0402+-0.0932     ?     16.1979+-0.2580           16.0075+-0.1125        
   tear-off-arguments-simple                          2.1946+-0.0078     !      2.2119+-0.0076     ?      2.2132+-0.0143        ?
   tear-off-arguments                                 3.5564+-0.0615     ?      3.5693+-0.0662            3.5551+-0.0198        
   temporal-structure                                20.8821+-0.0995     ?     21.3279+-0.6023     ^     17.0827+-0.1299        ^ definitely 1.2224x faster
   to-int32-boolean                                  22.2426+-0.1258     ?     22.3091+-0.1139     ?     22.3962+-0.2149        ?
   undefined-test                                     4.5781+-0.0438            4.5747+-0.0055     ^      4.5161+-0.0440          might be 1.0137x faster
   weird-inlining-const-prop                          2.3110+-0.0615     ?      2.3185+-0.0396            2.2991+-0.0078        

   &lt;arithmetic&gt;                                     162.0756+-0.1220     ?    162.9221+-1.6519          161.7980+-0.2469          might be 1.0017x faster
   &lt;geometric&gt; *                                     14.7970+-0.0114     ?     14.8109+-0.0134     ^     14.7021+-0.0143        ^ definitely 1.0065x faster
   &lt;harmonic&gt;                                         5.6123+-0.0095     ?      5.6185+-0.0092     ?      5.6313+-0.0272        ? might be 1.0034x slower

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
All benchmarks:
   &lt;arithmetic&gt;                                     227.8166+-0.2694     ?    228.2682+-1.0498          227.3625+-0.3214          might be 1.0020x faster
   &lt;geometric&gt;                                       21.2910+-0.0124     ?     21.2961+-0.0158     ^     21.1125+-0.0131        ^ definitely 1.0085x faster
   &lt;harmonic&gt;                                         4.7970+-0.0113            4.7909+-0.0084     ^      4.7475+-0.0140        ^ definitely 1.0104x faster

                                                           Old                    TipOfTree                 ConstInfer              ConstInfer v. Old     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   49.1013+-0.0476           49.0594+-0.0500     ^     48.5262+-0.0442        ^ definitely 1.0119x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952285</commentid>
    <comment_count>11</comment_count>
      <attachid>217347</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-19 15:49:38 -0800</bug_when>
    <thetext>Created attachment 217347
the patch

Rebased and made some things a bit better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952420</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-19 21:47:03 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/159545</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952671</commentid>
    <comment_count>13</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-11-20 10:41:22 -0800</bug_when>
    <thetext>This has caused a couple of test breakages on WK1 release (at least)
e.g.
http://build.webkit.org/results/Apple%20Mavericks%20Release%20WK1%20(Tests)/r159568%20(1047)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952683</commentid>
    <comment_count>14</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-11-20 10:56:02 -0800</bug_when>
    <thetext>Hopefully fixed in r159573</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217173</attachid>
            <date>2013-11-17 23:55:32 -0800</date>
            <delta_ts>2013-11-18 00:00:51 -0800</delta_ts>
            <desc>sort of a beginning</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>7109</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShy
ZXZpc2lvbiAxNTkzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsOSBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgIAorICAgIC8vIEF0IHNvbWUgcG9pbnQsIEkgdGhpbmsgd2Ugc2hvdWxkIGNoYW5nZSB0aGlz
LgorICAgIGJvb2wgc2hvdWxkQXR0ZW1wdFRvV2F0Y2hWYXJpYWJsZXNPblB1dCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9u
IDE1OTM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDIwICsyMTAsMjAgQEAgYm9vbCBKU0dsb2JhbE9i
amVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSgogICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9w
ZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRo
cm93KTsKIH0KIAotaW50IEpTR2xvYmFsT2JqZWN0OjphZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIEZ1bmN0aW9uTW9kZSBmdW5j
dGlvbk1vZGUpCitpbnQgSlNHbG9iYWxPYmplY3Q6OmFkZEdsb2JhbFZhcihjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgVmFyQWRkTW9kZSB2YXJBZGRN
b2RlKQogewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCktPm1f
bG9jayk7CiAgICAgaW50IGluZGV4ID0gc3ltYm9sVGFibGUoKS0+c2l6ZShsb2NrZXIpOwogICAg
IFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkoaW5kZXgsIChjb25zdGFudE1vZGUgPT0gSXNDb25z
dGFudCkgPyBSZWFkT25seSA6IDApOwotICAgIGlmIChmdW5jdGlvbk1vZGUgPT0gSXNGdW5jdGlv
blRvU3BlY2lhbGl6ZSkKLSAgICAgICAgbmV3RW50cnkuYXR0ZW1wdFRvV2F0Y2goKTsKKyAgICBp
ZiAoY29uc3RhbnRNb2RlID09IElzVmFyaWFibGUpCisgICAgICAgIG5ld0VudHJ5LnByZXBhcmVU
b1dhdGNoKFN5bWJvbFRhYmxlRW50cnk6Ok5vdEluaXRpYWxpemVkKTsKICAgICBTeW1ib2xUYWJs
ZTo6TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFibGUoKS0+YWRkKGxvY2tlciwgaWRl
bnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQogICAgICAg
ICBhZGRSZWdpc3RlcnMoMSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUubm90aWZ5V3JpdGUoKTsKKyAgICBlbHNlCiAgICAgICAgIGluZGV4ID0gcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5nZXRJbmRleCgpOwotICAgIH0KKyAgICBpZiAoY29uc3RhbnRNb2RlID09
IElzVmFyaWFibGUpCisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubm90aWZ5V3JpdGUo
KTsKICAgICByZXR1cm4gaW5kZXg7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTU5Mzk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMjg5LDggKzI4OSw4IEBAIHByb3RlY3RlZDoKICAgICB9CiAKICAgICBlbnVtIENvbnN0YW50
TW9kZSB7IElzQ29uc3RhbnQsIElzVmFyaWFibGUgfTsKLSAgICBlbnVtIEZ1bmN0aW9uTW9kZSB7
IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUsIE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlIH07
Ci0gICAgaW50IGFkZEdsb2JhbFZhcihjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBG
dW5jdGlvbk1vZGUpOworICAgIGVudW0gVmFyQWRkTW9kZSB7IEFkZFVuaW5pdGlhbGl6ZWQsIEFk
ZFRvSW5pdGlhbGl6ZSB9OworICAgIGludCBhZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYs
IENvbnN0YW50TW9kZSwgVmFyQWRkTW9kZSk7CiAKIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB+SlNHbG9iYWxPYmplY3QoKTsKQEAgLTMxMiwyMCArMzEyLDIzIEBAIHB1YmxpYzoKICAg
ICAvLyBsb29rdXBzIHByaW9yIHRvIGluaXRpYWxpemluZyB0aGUgcHJvcGVydGllcwogICAgIGJv
b2wgc3ltYm9sVGFibGVIYXNQcm9wZXJ0eShQcm9wZXJ0eU5hbWUpOwogCisgICAgLy8gQXQgc29t
ZSBwb2ludCwgSSB0aGluayB3ZSBzaG91bGQgY2hhbmdlIHRoaXMuCisgICAgYm9vbCBzaG91bGRB
dHRlbXB0VG9XYXRjaFZhcmlhYmxlc09uUHV0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwog
ICAgIHZvaWQgYWRkVmFyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQogICAgIHsKICAgICAgICAgaWYgKCFoYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5h
bWUpKQotICAgICAgICAgICAgYWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSwg
Tm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUpOworICAgICAgICAgICAgYWRkR2xvYmFsVmFy
KHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSwgQWRkVW5pbml0aWFsaXplZCk7CiAgICAgfQogICAg
IHZvaWQgYWRkQ29uc3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCiAgICAgewogICAgICAgICBpZiAoIWhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZSkpCi0gICAgICAgICAgICBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc0NvbnN0YW50LCBO
b3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6YWJsZSk7CisgICAgICAgICAgICBhZGRHbG9iYWxWYXIo
cHJvcGVydHlOYW1lLCBJc0NvbnN0YW50LCBBZGRVbmluaXRpYWxpemVkKTsKICAgICB9CiAgICAg
dm9pZCBhZGRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIGJvb2wgcHJvcGVydHlEaWRF
eGlzdCA9IHJlbW92ZURpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpOyAvLyBOZXdseSBk
ZWNsYXJlZCBmdW5jdGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMuCi0gICAgICAg
IGludCBpbmRleCA9IGFkZEdsb2JhbFZhcihwcm9wZXJ0eU5hbWUsIElzVmFyaWFibGUsICFwcm9w
ZXJ0eURpZEV4aXN0ID8gSXNGdW5jdGlvblRvU3BlY2lhbGl6ZSA6IE5vdEZ1bmN0aW9uT3JOb3RT
cGVjaWFsaXphYmxlKTsKKyAgICAgICAgaW50IGluZGV4ID0gYWRkR2xvYmFsVmFyKHByb3BlcnR5
TmFtZSwgSXNWYXJpYWJsZSwgQWRkVG9Jbml0aWFsaXplKTsKICAgICAgICAgcmVnaXN0ZXJBdChp
bmRleCkuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHZhbHVlKTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkocmV2aXNpb24gMTU5Mzk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90bywgVHlwZUluZm8oTmFtZVNjb3BlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOyB9CiAKKyAgICBib29sIHNob3VsZEF0dGVtcHRUb1dhdGNoVmFyaWFibGVzT25QdXQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgREVDTEFSRV9JTkZPOwogCiBwcm90ZWN0
ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUu
Y3BwCShyZXZpc2lvbiAxNTkzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDE0ICs2NSwxNyBAQCBib29sIFN5
bWJvbFRhYmxlRW50cnk6OmNvdWxkQmVXYXRjaGVkKCkKICAgICBXYXRjaHBvaW50U2V0KiB3YXRj
aHBvaW50cyA9IGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMuZ2V0KCk7CiAgICAgaWYgKCF3YXRj
aHBvaW50cykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghd2F0Y2hwb2ludHMtPmlz
V2F0Y2hlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHdhdGNocG9pbnRz
LT5pc1N0aWxsVmFsaWQoKTsKIH0KIAotdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjphdHRlbXB0VG9X
YXRjaCgpCit2b2lkIFN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKFdhdGNoU3RhdGUg
c3RhdGUpCiB7CiAgICAgRmF0RW50cnkqIGVudHJ5ID0gaW5mbGF0ZSgpOwotICAgIGlmICghZW50
cnktPm1fd2F0Y2hwb2ludHMpCi0gICAgICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0gYWRvcHRS
ZWYobmV3IFdhdGNocG9pbnRTZXQoSXNXYXRjaGVkKSk7CisgICAgQVNTRVJUKCFlbnRyeS0+bV93
YXRjaHBvaW50cyk7CisgICAgZW50cnktPm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZigKKyAgICAg
ICAgbmV3IFdhdGNocG9pbnRTZXQoc3RhdGUgPT0gQWxyZWFkeUluaXRpYWxpemVkID8gSXNXYXRj
aGVkIDogQ2xlYXJXYXRjaHBvaW50KSk7CiB9CiAKIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6YWRk
V2F0Y2hwb2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQpAQCAtODYsNiArODksMTIgQEAgdm9p
ZCBTeW1ib2xUYWJsZUVudHJ5Ojpub3RpZnlXcml0ZVNsb3coKQogICAgIFdhdGNocG9pbnRTZXQq
IHdhdGNocG9pbnRzID0gZmF0RW50cnkoKS0+bV93YXRjaHBvaW50cy5nZXQoKTsKICAgICBpZiAo
IXdhdGNocG9pbnRzKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHdhdGNocG9pbnRz
LT5zdGF0ZSgpID09IENsZWFyV2F0Y2hwb2ludCkgeworICAgICAgICB3YXRjaHBvaW50cy0+c3Rh
cnRXYXRjaGluZygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIHdhdGNocG9p
bnRzLT5ub3RpZnlXcml0ZSgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE1OTM5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMCwxNSAr
MjIwLDggQEAgc3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewogICAgIAogICAgIGJvb2wgY291bGRC
ZVdhdGNoZWQoKTsKICAgICAKLSAgICAvLyBOb3RpZnkgYW4gb3Bwb3J0dW5pdHkgdG8gY3JlYXRl
IGEgd2F0Y2hwb2ludCBmb3IgYSB2YXJpYWJsZS4gVGhpcyBpcwotICAgIC8vIGlkZW1wb3RlbnQg
YW5kIGZhaWwtc2lsZW50LiBJdCBpcyBpZGVtcG90ZW50IGluIHRoZSBzZW5zZSB0aGF0IGlmCi0g
ICAgLy8gYSB3YXRjaHBvaW50IHNldCBoYWQgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsIHRoZW4gYW5v
dGhlciBvbmUgd2lsbCBub3QKLSAgICAvLyBiZSBjcmVhdGVkLiBIZW5jZSB0d28gY2FsbHMgdG8g
dGhpcyBtZXRob2QgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMKLSAgICAvLyBvbmUgY2FsbC4gSXQg
aXMgYWxzbyBmYWlsLXNpbGVudCwgaW4gdGhlIHNlbnNlIHRoYXQgaWYgYSB3YXRjaHBvaW50Ci0g
ICAgLy8gc2V0IGhhZCBiZWVuIGNyZWF0ZWQgYW5kIGhhZCBhbHJlYWR5IGJlZW4gaW52YWxpZGF0
ZWQsIHRoZW4gdGhpcyB3aWxsCi0gICAgLy8ganVzdCByZXR1cm4uIFRoaXMgbWVhbnMgdGhhdCBj
b3VsZEJlV2F0Y2hlZCgpIG1heSByZXR1cm4gZmFsc2UgZXZlbgotICAgIC8vIGltbWVkaWF0ZWx5
IGFmdGVyIGEgY2FsbCB0byBhdHRlbXB0VG9XYXRjaCgpLgotICAgIHZvaWQgYXR0ZW1wdFRvV2F0
Y2goKTsKKyAgICBlbnVtIFdhdGNoU3RhdGUgeyBOb3RJbml0aWFsaXplZCwgQWxyZWFkeUluaXRp
YWxpemVkIH07CisgICAgdm9pZCBwcmVwYXJlVG9XYXRjaChXYXRjaFN0YXRlKTsKICAgICAKICAg
ICB2b2lkIGFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCopOwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217174</attachid>
            <date>2013-11-18 00:00:51 -0800</date>
            <delta_ts>2013-11-18 17:48:37 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah2.patch</filename>
            <type>text/plain</type>
            <size>8205</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAJ
KHJldmlzaW9uIDE1OTM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRj
aHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBXYXRjaHBvaW50Ojp+
V2F0Y2hwb2ludCgpCiAKIFdhdGNocG9pbnRTZXQ6OldhdGNocG9pbnRTZXQoV2F0Y2hwb2ludFN0
YXRlIHN0YXRlKQogICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICAsIG1fc2V0SXNOb3RFbXRweShm
YWxzZSkKIHsKIH0KIApAQCAtNjAsNiArNjEsNyBAQCB2b2lkIFdhdGNocG9pbnRTZXQ6OmFkZChX
YXRjaHBvaW50KiB3YXRjCiAgICAgaWYgKCF3YXRjaHBvaW50KQogICAgICAgICByZXR1cm47CiAg
ICAgbV9zZXQucHVzaCh3YXRjaHBvaW50KTsKKyAgICBtX3NldElzTm90RW1wdHkgPSB0cnVlOwog
ICAgIG1fc3RhdGUgPSBJc1dhdGNoZWQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTU5Mzk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5
LDYgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgU2VudGluZWxMaW5rZWRMaXN0PFdhdGNo
cG9pbnQsIEJhc2ljUmF3U2VudGluZWxOb2RlPFdhdGNocG9pbnQ+PiBtX3NldDsKICAgICBpbnQ4
X3QgbV9zdGF0ZTsKKyAgICBpbnQ4X3QgbV9zZXRJc05vdEVtcHR5OwogfTsKIAogLy8gSW5saW5l
V2F0Y2hwb2ludFNldCBpcyBhIGxvdy1vdmVyaGVhZCwgbm9uLWNvcHlhYmxlIHdhdGNocG9pbnQg
c2V0IGluIHdoaWNoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fj
dGl2YXRpb24uaAkocmV2aXNpb24gMTU5Mzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDkgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICAKKyAgICAvLyBBdCBzb21lIHBvaW50LCBJIHRoaW5rIHdlIHNob3Vs
ZCBjaGFuZ2UgdGhpcy4KKyAgICBib29sIHNob3VsZEF0dGVtcHRUb1dhdGNoVmFyaWFibGVzT25Q
dXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNTkzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCwyMCArMjEwLDIwIEBAIGJv
b2wgSlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEoKICAgICByZXR1cm4gQmFzZTo6
ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yLCBzaG91bGRUaHJvdyk7CiB9CiAKLWludCBKU0dsb2JhbE9iamVjdDo6YWRkR2xvYmFsVmFy
KGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBGdW5j
dGlvbk1vZGUgZnVuY3Rpb25Nb2RlKQoraW50IEpTR2xvYmFsT2JqZWN0OjphZGRHbG9iYWxWYXIo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFZhckFk
ZE1vZGUgdmFyQWRkTW9kZSkKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1i
b2xUYWJsZSgpLT5tX2xvY2spOwogICAgIGludCBpbmRleCA9IHN5bWJvbFRhYmxlKCktPnNpemUo
bG9ja2VyKTsKICAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCAoY29uc3RhbnRN
b2RlID09IElzQ29uc3RhbnQpID8gUmVhZE9ubHkgOiAwKTsKLSAgICBpZiAoZnVuY3Rpb25Nb2Rl
ID09IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUpCi0gICAgICAgIG5ld0VudHJ5LmF0dGVtcHRUb1dh
dGNoKCk7CisgICAgaWYgKGNvbnN0YW50TW9kZSA9PSBJc1ZhcmlhYmxlKQorICAgICAgICBuZXdF
bnRyeS5wcmVwYXJlVG9XYXRjaChTeW1ib2xUYWJsZUVudHJ5OjpOb3RJbml0aWFsaXplZCk7CiAg
ICAgU3ltYm9sVGFibGU6Ok1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCktPmFk
ZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkKICAgICAgICAgYWRkUmVnaXN0ZXJzKDEpOwotICAgIGVsc2UgewotICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLm5vdGlmeVdyaXRlKCk7CisgICAgZWxzZQogICAgICAgICBpbmRl
eCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKTsKLSAgICB9CisgICAgaWYgKGNv
bnN0YW50TW9kZSA9PSBJc1ZhcmlhYmxlKQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
Lm5vdGlmeVdyaXRlKCk7CiAgICAgcmV0dXJuIGluZGV4OwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE1OTM5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4OSw4ICsyODksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogCiAgICAg
ZW51bSBDb25zdGFudE1vZGUgeyBJc0NvbnN0YW50LCBJc1ZhcmlhYmxlIH07Ci0gICAgZW51bSBG
dW5jdGlvbk1vZGUgeyBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplLCBOb3RGdW5jdGlvbk9yTm90U3Bl
Y2lhbGl6YWJsZSB9OwotICAgIGludCBhZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYsIENv
bnN0YW50TW9kZSwgRnVuY3Rpb25Nb2RlKTsKKyAgICBlbnVtIFZhckFkZE1vZGUgeyBBZGRVbmlu
aXRpYWxpemVkLCBBZGRUb0luaXRpYWxpemUgfTsKKyAgICBpbnQgYWRkR2xvYmFsVmFyKGNvbnN0
IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUsIFZhckFkZE1vZGUpOwogCiBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CkBAIC0zMTIsMjAgKzMxMiwyMyBA
QCBwdWJsaWM6CiAgICAgLy8gbG9va3VwcyBwcmlvciB0byBpbml0aWFsaXppbmcgdGhlIHByb3Bl
cnRpZXMKICAgICBib29sIHN5bWJvbFRhYmxlSGFzUHJvcGVydHkoUHJvcGVydHlOYW1lKTsKIAor
ICAgIC8vIEF0IHNvbWUgcG9pbnQsIEkgdGhpbmsgd2Ugc2hvdWxkIGNoYW5nZSB0aGlzLgorICAg
IGJvb2wgc2hvdWxkQXR0ZW1wdFRvV2F0Y2hWYXJpYWJsZXNPblB1dCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisKICAgICB2b2lkIGFkZFZhcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSkKICAgICB7CiAgICAgICAgIGlmICghaGFzUHJvcGVydHkoZXhl
YywgcHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAgIGFkZEdsb2JhbFZhcihwcm9wZXJ0eU5hbWUs
IElzVmFyaWFibGUsIE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlKTsKKyAgICAgICAgICAg
IGFkZEdsb2JhbFZhcihwcm9wZXJ0eU5hbWUsIElzVmFyaWFibGUsIEFkZFVuaW5pdGlhbGl6ZWQp
OwogICAgIH0KICAgICB2b2lkIGFkZENvbnN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKQogICAgIHsKICAgICAgICAgaWYgKCFoYXNQcm9wZXJ0eShleGVj
LCBwcm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAgYWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwg
SXNDb25zdGFudCwgTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUpOworICAgICAgICAgICAg
YWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwgSXNDb25zdGFudCwgQWRkVW5pbml0aWFsaXplZCk7
CiAgICAgfQogICAgIHZvaWQgYWRkRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBib29s
IHByb3BlcnR5RGlkRXhpc3QgPSByZW1vdmVEaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1l
KTsgLy8gTmV3bHkgZGVjbGFyZWQgZnVuY3Rpb25zIG92ZXJ3cml0ZSBleGlzdGluZyBwcm9wZXJ0
aWVzLgotICAgICAgICBpbnQgaW5kZXggPSBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc1Zh
cmlhYmxlLCAhcHJvcGVydHlEaWRFeGlzdCA/IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUgOiBOb3RG
dW5jdGlvbk9yTm90U3BlY2lhbGl6YWJsZSk7CisgICAgICAgIGludCBpbmRleCA9IGFkZEdsb2Jh
bFZhcihwcm9wZXJ0eU5hbWUsIElzVmFyaWFibGUsIEFkZFRvSW5pdGlhbGl6ZSk7CiAgICAgICAg
IHJlZ2lzdGVyQXQoaW5kZXgpLnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1ZSk7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmgJKHJl
dmlzaW9uIDE1OTM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNj
b3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKE5hbWVTY29wZU9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsgfQogCisgICAgYm9vbCBzaG91bGRBdHRlbXB0VG9XYXRjaFZh
cmlhYmxlc09uUHV0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIERFQ0xBUkVfSU5G
TzsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTU5Mzk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxNCArNjUs
MTcgQEAgYm9vbCBTeW1ib2xUYWJsZUVudHJ5Ojpjb3VsZEJlV2F0Y2hlZCgpCiAgICAgV2F0Y2hw
b2ludFNldCogd2F0Y2hwb2ludHMgPSBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLmdldCgpOwog
ICAgIGlmICghd2F0Y2hwb2ludHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXdh
dGNocG9pbnRzLT5pc1dhdGNoZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biB3YXRjaHBvaW50cy0+aXNTdGlsbFZhbGlkKCk7CiB9CiAKLXZvaWQgU3ltYm9sVGFibGVFbnRy
eTo6YXR0ZW1wdFRvV2F0Y2goKQordm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRj
aChXYXRjaFN0YXRlIHN0YXRlKQogewogICAgIEZhdEVudHJ5KiBlbnRyeSA9IGluZmxhdGUoKTsK
LSAgICBpZiAoIWVudHJ5LT5tX3dhdGNocG9pbnRzKQotICAgICAgICBlbnRyeS0+bV93YXRjaHBv
aW50cyA9IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkpOworICAgIEFTU0VS
VCghZW50cnktPm1fd2F0Y2hwb2ludHMpOworICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0gYWRv
cHRSZWYoCisgICAgICAgIG5ldyBXYXRjaHBvaW50U2V0KHN0YXRlID09IEFscmVhZHlJbml0aWFs
aXplZCA/IElzV2F0Y2hlZCA6IENsZWFyV2F0Y2hwb2ludCkpOwogfQogCiB2b2lkIFN5bWJvbFRh
YmxlRW50cnk6OmFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKQEAgLTg2LDYg
Kzg5LDEyIEBAIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGVTbG93KCkKICAgICBX
YXRjaHBvaW50U2V0KiB3YXRjaHBvaW50cyA9IGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMuZ2V0
KCk7CiAgICAgaWYgKCF3YXRjaHBvaW50cykKICAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlm
ICh3YXRjaHBvaW50cy0+c3RhdGUoKSA9PSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAgd2F0
Y2hwb2ludHMtPnN0YXJ0V2F0Y2hpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
ICAgICB3YXRjaHBvaW50cy0+bm90aWZ5V3JpdGUoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNTkzOTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjAsMTUgKzIyMCw4IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKICAgICAKICAg
ICBib29sIGNvdWxkQmVXYXRjaGVkKCk7CiAgICAgCi0gICAgLy8gTm90aWZ5IGFuIG9wcG9ydHVu
aXR5IHRvIGNyZWF0ZSBhIHdhdGNocG9pbnQgZm9yIGEgdmFyaWFibGUuIFRoaXMgaXMKLSAgICAv
LyBpZGVtcG90ZW50IGFuZCBmYWlsLXNpbGVudC4gSXQgaXMgaWRlbXBvdGVudCBpbiB0aGUgc2Vu
c2UgdGhhdCBpZgotICAgIC8vIGEgd2F0Y2hwb2ludCBzZXQgaGFkIGFscmVhZHkgYmVlbiBjcmVh
dGVkLCB0aGVuIGFub3RoZXIgb25lIHdpbGwgbm90Ci0gICAgLy8gYmUgY3JlYXRlZC4gSGVuY2Ug
dHdvIGNhbGxzIHRvIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzCi0gICAgLy8g
b25lIGNhbGwuIEl0IGlzIGFsc28gZmFpbC1zaWxlbnQsIGluIHRoZSBzZW5zZSB0aGF0IGlmIGEg
d2F0Y2hwb2ludAotICAgIC8vIHNldCBoYWQgYmVlbiBjcmVhdGVkIGFuZCBoYWQgYWxyZWFkeSBi
ZWVuIGludmFsaWRhdGVkLCB0aGVuIHRoaXMgd2lsbAotICAgIC8vIGp1c3QgcmV0dXJuLiBUaGlz
IG1lYW5zIHRoYXQgY291bGRCZVdhdGNoZWQoKSBtYXkgcmV0dXJuIGZhbHNlIGV2ZW4KLSAgICAv
LyBpbW1lZGlhdGVseSBhZnRlciBhIGNhbGwgdG8gYXR0ZW1wdFRvV2F0Y2goKS4KLSAgICB2b2lk
IGF0dGVtcHRUb1dhdGNoKCk7CisgICAgZW51bSBXYXRjaFN0YXRlIHsgTm90SW5pdGlhbGl6ZWQs
IEFscmVhZHlJbml0aWFsaXplZCB9OworICAgIHZvaWQgcHJlcGFyZVRvV2F0Y2goV2F0Y2hTdGF0
ZSk7CiAgICAgCiAgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqKTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217258</attachid>
            <date>2013-11-18 17:48:37 -0800</date>
            <delta_ts>2013-11-18 22:14:24 -0800</delta_ts>
            <desc>slowly...</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15817</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNiArNDcsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246
OmJyYW5jaEFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjMyOwog
ICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzdWIzMjsKKyAgICB1c2luZyBNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZDg7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZD
b21tb246OmxvYWQzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6c3RvcmUz
MjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6c3RvcmU4OwpAQCAtOTEsNiAr
OTIsMTIgQEAgcHVibGljOgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0
ciksIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAgICAgIHN1YjMyKGltbSwgQWRkcmVzcyhzY3JhdGNo
UmVnaXN0ZXIpKTsKICAgICB9CisgICAgCisgICAgdm9pZCBsb2FkOChjb25zdCB2b2lkKiBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
YWRkcmVzcyksIGRlc3QpOworICAgICAgICBsb2FkOChkZXN0LCBkZXN0KTsKKyAgICB9CiAKICAg
ICB2b2lkIGxvYWQzMihjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODM3LDkgKzE4MzcsNiBAQCBDb2RlQmxvY2s6
OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpZiAoZW50cnkuaXNO
dWxsKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIC8vIEl0J3MgbGlr
ZWx5IHRoYXQgd2UnbGwgd3JpdGUgdG8gdGhpcyB2YXIsIHNvIG5vdGlmeSBub3cgYW5kIGF2b2lk
IHRoZSBvdmVyaGVhZCBvZiBkb2luZyBzbyBhdCBydW50aW1lLgotICAgICAgICAgICAgZW50cnku
bm90aWZ5V3JpdGUoKTsKLQogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAwXSA9IHZtKCkt
PmludGVycHJldGVyLT5nZXRPcGNvZGUob3BfaW5pdF9nbG9iYWxfY29uc3QpOwogICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyAxXSA9ICZtX2dsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRy
eS5nZXRJbmRleCgpKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTU5NDYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw2ICs0MCw3IEBAIFdhdGNocG9pbnQ6On5XYXRjaHBvaW50KCkKIAogV2F0Y2hw
b2ludFNldDo6V2F0Y2hwb2ludFNldChXYXRjaHBvaW50U3RhdGUgc3RhdGUpCiAgICAgOiBtX3N0
YXRlKHN0YXRlKQorICAgICwgbV9zZXRJc05vdEVtcHR5KGZhbHNlKQogewogfQogCkBAIC02MCw2
ICs2MSw3IEBAIHZvaWQgV2F0Y2hwb2ludFNldDo6YWRkKFdhdGNocG9pbnQqIHdhdGMKICAgICBp
ZiAoIXdhdGNocG9pbnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NldC5wdXNoKHdhdGNocG9p
bnQpOworICAgIG1fc2V0SXNOb3RFbXB0eSA9IHRydWU7CiAgICAgbV9zdGF0ZSA9IElzV2F0Y2hl
ZDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2lu
dC5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
V2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICBpbnQ4X3QqIGFkZHJlc3NPZlN0YXRlKCkgeyByZXR1cm4gJm1fc3RhdGU7IH0K
KyAgICBpbnQ4X3QqIGFkZHJlc3NPZlNldElzTm90RW1wdHkoKSB7IHJldHVybiAmbV9zZXRJc05v
dEVtcHR5OyB9CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpZnlXcml0ZVNs
b3coKTsgLy8gQ2FsbCBvbmx5IGlmIHlvdSd2ZSBjaGVja2VkIGlzV2F0Y2hlZC4KICAgICAKQEAg
LTEwOSw2ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIAogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxX
YXRjaHBvaW50LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxXYXRjaHBvaW50Pj4gbV9zZXQ7CiAgICAg
aW50OF90IG1fc3RhdGU7CisgICAgaW50OF90IG1fc2V0SXNOb3RFbXB0eTsKIH07CiAKIC8vIElu
bGluZVdhdGNocG9pbnRTZXQgaXMgYSBsb3ctb3ZlcmhlYWQsIG5vbi1jb3B5YWJsZSB3YXRjaHBv
aW50IHNldCBpbiB3aGljaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDkz
LDcgKzMwOTMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUp
KSk7CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVj
dC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFlbnRyeS5j
b3VsZEJlV2F0Y2hlZCgpIHx8ICFtX2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKGVu
dHJ5LndhdGNocG9pbnRTZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodHJ1ZSB8fCAhZW50
cnkuY291bGRCZVdhdGNoZWQoKSB8fCAhbV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxp
ZChlbnRyeS53YXRjaHBvaW50U2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5k
KSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTMxNTUsNyArMzE1NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0
KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoIWVudHJ5LmNvdWxkQmVXYXRjaGVkKCkgfHwgIW1fZ3JhcGgud2F0
Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoZW50cnkud2F0Y2hwb2ludFNldCgpKSk7CisgICAgICAg
ICAgICAgICAgLy9BU1NFUlQoIWVudHJ5LmNvdWxkQmVXYXRjaGVkKCkgfHwgIW1fZ3JhcGgud2F0
Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoZW50cnkud2F0Y2hwb2ludFNldCgpKSk7CiAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgZ2V0KFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKICAgICAgICAgICAgICAgICAvLyBLZWVwIHNjb3BlIGFs
aXZlIHVudGlsIGFmdGVyIHB1dC4KICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20s
IGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxMyw3ICs2MTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0R2V0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9p
ZCBlbWl0R2V0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl90KiBvcGVyYW5kU2xvdCwgaW50
IHZhbHVlKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5k
LCBpbnQgdmFsdWUpOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9w
ZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogICAgICAgICB2b2lkIGVtaXRQdXRD
bG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSk7CiAKICAg
ICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKGludCBkc3QpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE1OTQ2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NzEsOCArNzcxLDMwIEBAIHZvaWQgSklUOjplbWl0UHV0R2xvYmFs
UHJvcGVydHkodWludHB0cl8KICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJf
dCBvcGVyYW5kLCBpbnQgdmFsdWUpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcih1aW50cHRy
X3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CisgICAgaWYgKHNl
dC0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKSB7CisgICAgICAgIGxvYWQ4KHNldC0+YWRkcmVz
c09mU3RhdGUoKSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcExpc3QgcmVhZHk7Cisg
ICAgICAgIAorICAgICAgICByZWFkeS5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzZXQtPnN0
YXRlKCkgPT0gQ2xlYXJXYXRjaHBvaW50KSB7CisgICAgICAgICAgICBKdW1wIGlzV2F0Y2hlZCA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKENsZWFyV2F0Y2hwb2ludCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKElzV2F0Y2hl
ZCksIHNldC0+YWRkcmVzc09mU3RhdGUoKSk7CisgICAgICAgICAgICByZWFkeS5hcHBlbmQoanVt
cCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXNXYXRjaGVkLmxpbmsodGhpcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblpl
cm8sIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlNldElzTm90RW1wdHkoKSkpKTsKKyAg
ICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSwgc2V0LT5hZGRyZXNzT2ZT
dGF0ZSgpKTsKKyAgICAgICAgCisgICAgICAgIHJlYWR5LmxpbmsodGhpcyk7CisgICAgfQorICAg
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBzdG9yZVB0
cihyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3BlcmFuZCkpOwogfQpAQCAtODAyLDcg
KzgyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICBj
YXNlIEdsb2JhbFZhcjoKICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CiAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0UHV0R2xvYmFsVmFyKCpvcGVyYW5kU2xvdCwgdmFs
dWUpOworICAgICAgICBlbWl0UHV0R2xvYmFsVmFyKCpvcGVyYW5kU2xvdCwgdmFsdWUsIGN1cnJl
bnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIENsb3N1cmVWYXI6CiAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKQEAgLTgxOCwxMCArODQwLDE2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJ
bnN0cnVjdGkKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKS50eXBlKCk7Ci0gICAgaWYgKHJlc29sdmVU
eXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyKQorICAgIHVuc2ln
bmVkIGxpbmtDb3VudCA9IDA7CisgICAgaWYgKHJlc29sdmVUeXBlICE9IEdsb2JhbFZhciAmJiBy
ZXNvbHZlVHlwZSAhPSBDbG9zdXJlVmFyKQorICAgICAgICBsaW5rQ291bnQrKzsKKyAgICBpZiAo
KHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAmJiBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53
YXRjaHBvaW50U2V0LT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpCisgICAgICAgIGxpbmtDb3Vu
dCsrOworICAgIGlmICghbGlua0NvdW50KQogICAgICAgICByZXR1cm47Ci0KLSAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7CisgICAgd2hpbGUgKGxpbmtDb3VudC0tKQorICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTU5NDYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTE5NTUsNiArMTk1NSwxNiBAQCBtYWNybyBwdXRQcm9wZXJ0eSgpCiBl
bmQKIAogbWFjcm8gcHV0R2xvYmFsVmFyKCkKKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig1LCB0
MCkKKyAgICBsb2FkYiBXYXRjaHBvaW50U2V0OjptX3N0YXRlW3QwXSwgdDEKKyAgICBiaWVxIHQx
LCBJc0ludmFsaWRhdGVkLCAucmVhZHkKKyAgICBiaW5lcSB0MSwgQ2xlYXJXYXRjaHBvaW50LCAu
bmVlZFRvSW52YWxpZGF0ZQorICAgIHN0b3JlYiBJc1dhdGNoZWQsIFdhdGNocG9pbnRTZXQ6Om1f
c3RhdGVbdDBdCisgICAgam1wIC5yZWFkeQorLm5lZWRUb0ludmFsaWRhdGU6CisgICAgYnRibnog
V2F0Y2hwb2ludFNldDo6bV9zZXRJc05vdEVtcHR5W3QwXSwgLnBEeW5hbWljCisgICAgc3RvcmVi
IElzSW52YWxpZGF0ZWQsIFdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbdDBdCisucmVhZHk6CiAgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
dDAsIHQxKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDYsIHQwKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24g
MTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsMjAgKzIxMCwyMCBAQCBib29sIEpTR2xvYmFsT2Jq
ZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKCiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3Bl
cnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhy
b3cpOwogfQogCi1pbnQgSlNHbG9iYWxPYmplY3Q6OmFkZEdsb2JhbFZhcihjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgRnVuY3Rpb25Nb2RlIGZ1bmN0
aW9uTW9kZSkKK2ludCBKU0dsb2JhbE9iamVjdDo6YWRkR2xvYmFsVmFyKGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBWYXJBZGRNb2RlIHZhckFkZE1v
ZGUpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS0+bV9s
b2NrKTsKICAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZSgpLT5zaXplKGxvY2tlcik7CiAgICAg
U3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgKGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0
YW50KSA/IFJlYWRPbmx5IDogMCk7Ci0gICAgaWYgKGZ1bmN0aW9uTW9kZSA9PSBJc0Z1bmN0aW9u
VG9TcGVjaWFsaXplKQotICAgICAgICBuZXdFbnRyeS5hdHRlbXB0VG9XYXRjaCgpOworICAgIGlm
IChjb25zdGFudE1vZGUgPT0gSXNWYXJpYWJsZSkKKyAgICAgICAgbmV3RW50cnkucHJlcGFyZVRv
V2F0Y2goU3ltYm9sVGFibGVFbnRyeTo6Tm90SW5pdGlhbGl6ZWQpOwogICAgIFN5bWJvbFRhYmxl
OjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLT5hZGQobG9ja2VyLCBpZGVu
dC5pbXBsKCksIG5ld0VudHJ5KTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAg
IGFkZFJlZ2lzdGVycygxKTsKLSAgICBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5ub3RpZnlXcml0ZSgpOworICAgIGVsc2UKICAgICAgICAgaW5kZXggPSByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmdldEluZGV4KCk7Ci0gICAgfQorICAgIGlmIChjb25zdGFudE1vZGUgPT0g
SXNWYXJpYWJsZSAmJiB2YXJBZGRNb2RlID09IEFkZFRvSW5pdGlhbGl6ZSkKKyAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5ub3RpZnlXcml0ZSgpOwogICAgIHJldHVybiBpbmRleDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksOCArMjg5LDggQEAgcHJvdGVj
dGVkOgogICAgIH0KIAogICAgIGVudW0gQ29uc3RhbnRNb2RlIHsgSXNDb25zdGFudCwgSXNWYXJp
YWJsZSB9OwotICAgIGVudW0gRnVuY3Rpb25Nb2RlIHsgSXNGdW5jdGlvblRvU3BlY2lhbGl6ZSwg
Tm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUgfTsKLSAgICBpbnQgYWRkR2xvYmFsVmFyKGNv
bnN0IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUsIEZ1bmN0aW9uTW9kZSk7CisgICAgZW51bSBW
YXJBZGRNb2RlIHsgQWRkVW5pbml0aWFsaXplZCwgQWRkVG9Jbml0aWFsaXplIH07CisgICAgaW50
IGFkZEdsb2JhbFZhcihjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBWYXJBZGRNb2Rl
KTsKIAogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0dsb2JhbE9iamVjdCgpOwpA
QCAtMzE1LDE3ICszMTUsMTcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVmFyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogICAgIHsKICAgICAgICAgaWYg
KCFoYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAgYWRkR2xvYmFs
VmFyKHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSwgTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFi
bGUpOworICAgICAgICAgICAgYWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSwg
QWRkVW5pbml0aWFsaXplZCk7CiAgICAgfQogICAgIHZvaWQgYWRkQ29uc3QoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiAgICAgewogICAgICAgICBpZiAo
IWhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCi0gICAgICAgICAgICBhZGRHbG9iYWxW
YXIocHJvcGVydHlOYW1lLCBJc0NvbnN0YW50LCBOb3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6YWJs
ZSk7CisgICAgICAgICAgICBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc0NvbnN0YW50LCBB
ZGRVbmluaXRpYWxpemVkKTsKICAgICB9CiAgICAgdm9pZCBhZGRGdW5jdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKICAg
ICB7Ci0gICAgICAgIGJvb2wgcHJvcGVydHlEaWRFeGlzdCA9IHJlbW92ZURpcmVjdChleGVjLT52
bSgpLCBwcm9wZXJ0eU5hbWUpOyAvLyBOZXdseSBkZWNsYXJlZCBmdW5jdGlvbnMgb3ZlcndyaXRl
IGV4aXN0aW5nIHByb3BlcnRpZXMuCi0gICAgICAgIGludCBpbmRleCA9IGFkZEdsb2JhbFZhcihw
cm9wZXJ0eU5hbWUsIElzVmFyaWFibGUsICFwcm9wZXJ0eURpZEV4aXN0ID8gSXNGdW5jdGlvblRv
U3BlY2lhbGl6ZSA6IE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlKTsKKyAgICAgICAgcmVt
b3ZlRGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSk7IC8vIE5ld2x5IGRlY2xhcmVkIGZ1
bmN0aW9ucyBvdmVyd3JpdGUgZXhpc3RpbmcgcHJvcGVydGllcy4KKyAgICAgICAgaW50IGluZGV4
ID0gYWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSwgQWRkVG9Jbml0aWFsaXpl
KTsKICAgICAgICAgcmVnaXN0ZXJBdChpbmRleCkuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHZhbHVl
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUu
Y3BwCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTUgKzc3LDEwIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhFeGVjU3QKICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihzY29wZSkpIHsKICAg
ICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUo
KS0+Z2V0KGlkZW50LmltcGwoKSk7CiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIGlmIChnZXRPclB1dCA9PSBQdXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoZW50
cnkuaXNSZWFkT25seSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHBy
b3BlcnR5IHdpbGwgYmUgYXQgZ2xvYmFsIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBob3cgdG8g
Y2FjaGUgaXQuCi0gICAgICAgICAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAs
IDAsIDAsIDApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IHdlJ2xsIHdyaXRl
IHRvIHRoaXMgdmFyLCBzbyBub3RpZnkgbm93IGFuZCBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgZG9p
bmcgc28gYXQgcnVudGltZS4KLSAgICAgICAgICAgICAgICBlbnRyeS5ub3RpZnlXcml0ZSgpOwor
ICAgICAgICAgICAgaWYgKGdldE9yUHV0ID09IFB1dCAmJiBlbnRyeS5pc1JlYWRPbmx5KCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGF0IGdsb2Jh
bCBzY29wZSwgYnV0IHdlIGRvbid0IGtub3cgaG93IHRvIGNhY2hlIGl0LgorICAgICAgICAgICAg
ICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDApOworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBvcCA9IFJlc29sdmVP
cCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5j
cHAJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5
bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTQgKzY1LDE1IEBAIGJvb2wgU3lt
Ym9sVGFibGVFbnRyeTo6Y291bGRCZVdhdGNoZWQoKQogICAgIFdhdGNocG9pbnRTZXQqIHdhdGNo
cG9pbnRzID0gZmF0RW50cnkoKS0+bV93YXRjaHBvaW50cy5nZXQoKTsKICAgICBpZiAoIXdhdGNo
cG9pbnRzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHdhdGNocG9pbnRzLT5p
c1N0aWxsVmFsaWQoKTsKKyAgICByZXR1cm4gd2F0Y2hwb2ludHMtPnN0YXRlKCkgPT0gSXNXYXRj
aGVkOwogfQogCi12b2lkIFN5bWJvbFRhYmxlRW50cnk6OmF0dGVtcHRUb1dhdGNoKCkKK3ZvaWQg
U3ltYm9sVGFibGVFbnRyeTo6cHJlcGFyZVRvV2F0Y2goV2F0Y2hTdGF0ZSBzdGF0ZSkKIHsKICAg
ICBGYXRFbnRyeSogZW50cnkgPSBpbmZsYXRlKCk7Ci0gICAgaWYgKCFlbnRyeS0+bV93YXRjaHBv
aW50cykKLSAgICAgICAgZW50cnktPm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZihuZXcgV2F0Y2hw
b2ludFNldChJc1dhdGNoZWQpKTsKKyAgICBBU1NFUlQoIWVudHJ5LT5tX3dhdGNocG9pbnRzKTsK
KyAgICBlbnRyeS0+bV93YXRjaHBvaW50cyA9IGFkb3B0UmVmKAorICAgICAgICBuZXcgV2F0Y2hw
b2ludFNldChzdGF0ZSA9PSBBbHJlYWR5SW5pdGlhbGl6ZWQgPyBJc1dhdGNoZWQgOiBDbGVhcldh
dGNocG9pbnQpKTsKIH0KIAogdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjphZGRXYXRjaHBvaW50KFdh
dGNocG9pbnQqIHdhdGNocG9pbnQpCkBAIC04Niw2ICs4NywxMiBAQCB2b2lkIFN5bWJvbFRhYmxl
RW50cnk6Om5vdGlmeVdyaXRlU2xvdygpCiAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludHMg
PSBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLmdldCgpOwogICAgIGlmICghd2F0Y2hwb2ludHMp
CiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAod2F0Y2hwb2ludHMtPnN0YXRlKCkgPT0g
Q2xlYXJXYXRjaHBvaW50KSB7CisgICAgICAgIHdhdGNocG9pbnRzLT5zdGFydFdhdGNoaW5nKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgd2F0Y2hwb2ludHMtPm5vdGlmeVdy
aXRlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
VGFibGUuaAkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDE1ICsyMjAsOCBAQCBzdHJ1
Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgCiAgICAgYm9vbCBjb3VsZEJlV2F0Y2hlZCgpOwog
ICAgIAotICAgIC8vIE5vdGlmeSBhbiBvcHBvcnR1bml0eSB0byBjcmVhdGUgYSB3YXRjaHBvaW50
IGZvciBhIHZhcmlhYmxlLiBUaGlzIGlzCi0gICAgLy8gaWRlbXBvdGVudCBhbmQgZmFpbC1zaWxl
bnQuIEl0IGlzIGlkZW1wb3RlbnQgaW4gdGhlIHNlbnNlIHRoYXQgaWYKLSAgICAvLyBhIHdhdGNo
cG9pbnQgc2V0IGhhZCBhbHJlYWR5IGJlZW4gY3JlYXRlZCwgdGhlbiBhbm90aGVyIG9uZSB3aWxs
IG5vdAotICAgIC8vIGJlIGNyZWF0ZWQuIEhlbmNlIHR3byBjYWxscyB0byB0aGlzIG1ldGhvZCBo
YXZlIHRoZSBzYW1lIGVmZmVjdCBhcwotICAgIC8vIG9uZSBjYWxsLiBJdCBpcyBhbHNvIGZhaWwt
c2lsZW50LCBpbiB0aGUgc2Vuc2UgdGhhdCBpZiBhIHdhdGNocG9pbnQKLSAgICAvLyBzZXQgaGFk
IGJlZW4gY3JlYXRlZCBhbmQgaGFkIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZCwgdGhlbiB0aGlz
IHdpbGwKLSAgICAvLyBqdXN0IHJldHVybi4gVGhpcyBtZWFucyB0aGF0IGNvdWxkQmVXYXRjaGVk
KCkgbWF5IHJldHVybiBmYWxzZSBldmVuCi0gICAgLy8gaW1tZWRpYXRlbHkgYWZ0ZXIgYSBjYWxs
IHRvIGF0dGVtcHRUb1dhdGNoKCkuCi0gICAgdm9pZCBhdHRlbXB0VG9XYXRjaCgpOworICAgIGVu
dW0gV2F0Y2hTdGF0ZSB7IE5vdEluaXRpYWxpemVkLCBBbHJlYWR5SW5pdGlhbGl6ZWQgfTsKKyAg
ICB2b2lkIHByZXBhcmVUb1dhdGNoKFdhdGNoU3RhdGUpOwogICAgIAogICAgIHZvaWQgYWRkV2F0
Y2hwb2ludChXYXRjaHBvaW50Kik7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217271</attachid>
            <date>2013-11-18 22:14:24 -0800</date>
            <delta_ts>2013-11-19 10:29:56 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>52166</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5NDc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2OCBA
QAorMjAxMy0xMS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEluZmVyIGNvbnN0YW50IGdsb2JhbCB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWxsIGdsb2JhbCB2YXJpYWJsZXMgdGhh
dCBhcmUgY2FuZGlkYXRlcyBmb3Igd2F0Y2hwb2ludC1iYXNlZCBjb25zdGFudCBpbmZlcmVuY2Ug
KGkuZS4KKyAgICAgICAgbm90ICdjb25zdCcgdmFyaWFibGVzKSB3aWxsIG5vdyBoYXZlIFdhdGNo
cG9pbnRTZXQncyBhc3NvY2lhdGVkIHdpdGggdGhlbSBhbmQgdGhvc2UKKyAgICAgICAgYXJlIHVz
ZWQgdG8gZHJpdmUgdGhlIGluZmVyZW5jZSBieSB0cmFja2luZyB0aHJlZSBzdGF0ZXMgb2YgZWFj
aCB2YXJpYWJsZToKKyAgICAgICAgCisgICAgICAgIFVuaW5pdGlhbGl6ZWQ6IHRoZSB2YXJpYWJs
ZSdzIHZhbHVlIGlzIFVuZGVmaW5lZCBhbmQgdGhlIFdhdGNocG9pbnRTZXQgc3RhdGUgaXMKKyAg
ICAgICAgICAgIENsZWFyV2F0Y2hwb2ludC4KKyAgICAgICAgCisgICAgICAgIEluaXRpYWxpemVk
OiB0aGUgdmFyaWFibGUncyB2YWx1ZSB3YXMgc2V0IHRvIHNvbWV0aGluZyAoY291bGQgZXZlbiBi
ZSBleHBsaWNpdGx5IHNldAorICAgICAgICAgICAgdG8gVW5kZWZpbmVkKSBhbmQgdGhlIFdhdGNo
cG9pbnRTZXQgc3RhdGUgaXMgSXNXYXRjaGluZy4KKyAgICAgICAgCisgICAgICAgIEludmFsaWRh
dGVkOiB0aGUgdmFyaWFibGUncyB2YWx1ZSB3YXMgc2V0IHRvIHNvbWV0aGluZyBlbHNlIChjb3Vs
ZCBldmVuIGJlIHRoZSBzYW1lCisgICAgICAgICAgICB0aGluZyBhcyBiZWZvcmUgYnV0IHRoZSBw
b2ludCBpcyB0aGF0IGEgcHV0IG9wZXJhdGlvbiBkaWQgZXhlY3V0ZSBhZ2FpbikgYW5kIHRoZQor
ICAgICAgICAgICAgV2F0Y2hwb2ludFNldCBpcyBJc0ludmFsaWRhdGVkLgorICAgICAgICAKKyAg
ICAgICAgSWYgdGhlIGNvbXBpbGVyIHRyaWVzIHRvIGNvbXBpbGUgYSBHZXRHbG9iYWxWYXIgYW5k
IHRoZSBXYXRjaHBvaW50U2V0IHN0YXRlIGlzCisgICAgICAgIElzV2F0Y2hpbmcsIHRoZW4gdGhl
IGN1cnJlbnQgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGNhbiBiZSBmb2xkZWQgaW4gcGxhY2Ugb2Yg
dGhlIGdldCwKKyAgICAgICAgYW5kIGEgd2F0Y2hwb2ludCBvbiB0aGUgdmFyaWFibGUgY2FuIGJl
IHJlZ2lzdGVyZWQuCisgICAgICAgIAorICAgICAgICBXZSBoYW5kbGUgcmFjZSBjb25kaXRpb25z
IGJldHdlZW4gdGhlIG11dGF0b3IgYW5kIGNvbXBpbGVyIGJ5IG1hbmRhdGluZyB0aGF0OgorICAg
ICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBjaGFuZ2VzIHRoZSBXYXRjaHBvaW50U2V0IHN0
YXRlIGFmdGVyIGV4ZWN1dGluZyB0aGUgcHV0LgorICAgICAgICAKKyAgICAgICAgLSBUaGUgY29t
cGlsZXIgY2hlY2tzIHRoZSBXYXRjaHBvaW50U2V0IHN0YXRlIHByaW9yIHRvIHJlYWRpbmcgdGhl
IHZhbHVlLgorICAgICAgICAKKyAgICAgICAgVGhlIGNvbmNyZXRlIGFsZ29yaXRobSB1c2VkIGJ5
IHRoZSBtdXRhdG9yIGlzOgorICAgICAgICAKKyAgICAgICAgICAgIDEuIFN0b3JlIHRoZSBuZXcg
dmFsdWUgaW50byB0aGUgdmFyaWFibGUuCisgICAgICAgICAgICAtLS0gRXhlY3V0ZSBhIHN0b3Jl
LXN0b3JlIGZlbmNlLgorICAgICAgICAgICAgMi4gQnVtcCB0aGUgc3RhdGUgKENsZWFyV2F0Y2hw
b2luZyBiZWNvbWVzIElzV2F0Y2hpbmcsIElzV2F0Y2hpbmcgYmVjb21lcworICAgICAgICAgICAg
ICAgSXNJbnZhbGlkYXRlZCkKKyAgICAgICAgCisgICAgICAgIFRoZSBjb25jcmV0ZSBhbGdvcml0
aG0gdGhhdCB0aGUgY29tcGlsZXIgdXNlcyBpczoKKyAgICAgICAgCisgICAgICAgICAgICAxLiBM
b2FkIHRoZSBzdGF0ZS4gSWYgaXQncyAqbm90KiBJc1dhdGNoaW5nLCB0aGVuIGdpdmUgdXAgb24g
Y29uc3RhbnQgaW5mZXJlbmNlLgorICAgICAgICAgICAgLS0tIEV4ZWN1dGUgYSBsb2FkLWxvYWQg
ZmVuY2UuCisgICAgICAgICAgICAyLiBMb2FkIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgYW5k
IHVzZSB0aGF0IGZvciBmb2xkaW5nLCB3aGlsZSBhbHNvIHJlZ2lzdGVyaW5nCisgICAgICAgICAg
ICAgICBhIERlc2lyZWRXYXRjaHBvaW50LiBUaGUgdmFyaW91cyBwYXJ0cyBvZiB0aGlzIHN0ZXAg
Y2FuIGJlIGRvbmUgaW4gYW55IG9yZGVyLgorICAgICAgICAKKyAgICAgICAgVGhlIGRlc2lyZWQg
d2F0Y2hwb2ludCByZWdpc3RyYXRpb24gd2lsbCBmYWlsIGlmIHRoZSB3YXRjaHBvaW50IHNldCBp
cyBhbHJlYWR5CisgICAgICAgIGludmFsaWRhdGVkLiBOb3cgY29uc2lkZXIgdGhlIGZvbGxvd2lu
ZyBpbnRlcmVzdGluZyBpbnRlcmxlYXZpbmdzOyBub3RlIHRoYXQgdGhlCisgICAgICAgIGZlbmNl
cyBhcmUgb21pdHRlZCBzaW5jZSB0aGV5IGFyZSBqdXN0IHRoZXJlIHRvIGVuc3VyZSBzZXF1ZW50
aWFsIGNvbnNpc3RlbmN5OgorICAgICAgICAKKyAgICAgICAgVW5pbml0aWFsaXplZC0+TTEtPk0y
LT5DMS0+QzI6IENvbXBpbGVyIHNlZXMgSXNXYXRjaGluZyBiZWNhdXNlIG9mIHRoZSBtdXRhdG9y
J3Mgc3RvcmUKKyAgICAgICAgICAgIG9wZXJhdGlvbiwgYW5kIHRoZSB2YXJpYWJsZSBpcyBmb2xk
ZWQuIFRoZSBmZW5jaW5nIGVuc3VyZXMgdGhhdCBDMiBzZWVzIHRoZSB2YWx1ZQorICAgICAgICAg
ICAgc3RvcmVkIGluIE0xIC0gaS5lLiB3ZSBmb2xkIG9uIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYWN0
dWFsbHkgYmUgd2F0Y2hwb2ludGVkLiBJZgorICAgICAgICAgICAgYmVmb3JlIHRoZSBjb21waWxh
dGlvbiBpcyBpbnN0YWxsZWQgdGhlIG11dGF0b3IgZXhlY3V0ZXMgYW5vdGhlciBzdG9yZSB0aGVu
IHdlCisgICAgICAgICAgICB3aWxsIGJlIHN1cmUgdGhhdCBpdCB3aWxsIGJlIGEgY29tcGxldGUg
c2VxdWVuY2Ugb2YgTTErTTIgc2luY2UgY29tcGlsYXRpb25zIGdldAorICAgICAgICAgICAgaW5z
dGFsbGVkIGF0IHNhZmVwb2ludHMgYW5kIG5ldmVyICJpbiB0aGUgbWlkZGxlIiBvZiBhIHB1dF90
b19zY29wZS4gSGVuY2UgdGhhdAorICAgICAgICAgICAgY29tcGlsYXRpb24gaW5zdGFsbGF0aW9u
IHdpbGwgYmUgaW52YWxpZGF0ZWQuIElmIHRoZSBNMStNMiBzZXF1ZW5jZSBoYXBwZW5zIGFmdGVy
CisgICAgICAgICAgICB0aGUgY29kZSBpcyBpbnN0YWxsZWQsIHRoZW4gdGhlIGNvZGUgd2lsbCBi
ZSBpbnZhbGlkYXRlZCBieSB0cmlnZ2VyaW5nIGEgamV0dGlzb24uCisgICAgICAgIAorICAgICAg
ICBVbmluaXRpYWxpemVkLT5NMS0+QzEtPkMyLT5NMjogQ29tcGlsZXIgc2VlcyBVbmluaXRpYWxp
emVkIGFuZCB3aWxsIG5vdCBmb2xkLiBUaGlzIGlzCisgICAgICAgICAgICBhIHNlbnNpYmxlIG91
dGNvbWUgc2luY2UgaWYgdGhlIGNvbXBpbGVyIHJlYWQgdGhlIHZhcmlhYmxlJ3MgdmFsdWUsIGl0
IHdvdWxkIGhhdmUKKyAgICAgICAgICAgIHNlZW4gVW5kZWZpbmVkLgorICAgICAgICAKKyAgICAg
ICAgVW5pbml0aWFsaXplZC0+QzEtPkMyLT5NMS0+TTI6IENvbXBpbGVyIHNlZXMgVW5pbml0aWFs
aXplZCBhbmQgd2lsbCBub3QgZm9sZC4KKyAgICAgICAgVW5pbml0aWFsaXplZC0+QzEtPk0xLT5D
Mi0+TTI6IENvbXBpbGVyIHNlZXMgVW5pbml0aWFsaXplZCBhbmQgd2lsbCBub3QgZm9sZC4KKyAg
ICAgICAgVW5pbml0aWFsaXplZC0+QzEtPk0xLT5NMi0+QzI6IENvbXBpbGVyIHNlZXMgVW5pbml0
aWFsaXplZCBhbmQgd2lsbCBub3QgZm9sZC4KKyAgICAgICAgVW5pbml0aWFsaXplZC0+TTEtPkMx
LT5NMi0+QzI6IENvbXBpbGVyIHNlZXMgVW5pbml0aWFsaXplZCBhbmQgd2lsbCBub3QgZm9sZC4K
KyAgICAgICAgCisgICAgICAgIElzV2F0Y2hlZC0+TTEtPk0yLT5DMS0+QzI6IENvbXBpbGVyIHNl
ZXMgSXNJbnZhbGlkYXRlZCBhbmQgd2lsbCBub3QgZm9sZC4KKyAgICAgICAgCisgICAgICAgIElz
V2F0Y2hlZC0+TTEtPkMxLT5DMi0+TTI6IENvbXBpbGVyIHdpbGwgZm9sZCwgYnV0IHdpbGwgYWxz
byByZWdpc3RlciBhIGRlc2lyZWQKKyAgICAgICAgICAgIHdhdGNocG9pbnQsIGFuZCB0aGF0IHdh
dGNocG9pbnQgd2lsbCBnZXQgaW52YWxpZGF0ZWQgYmVmb3JlIHRoZSBjb2RlIGlzIGluc3RhbGxl
ZC4KKyAgICAgICAgCisgICAgICAgIElzV2F0Y2hlZC0+TTEtPkMxLT5NMi0+QzI6IEFzIGFib3Zl
LCB3aWxsIGZvbGQgYnV0IHRoZSBjb2RlIHdpbGwgZ2V0IGludmFsaWRhdGVkLgorICAgICAgICBJ
c1dhdGNoZWQtPkMxLT5DMi0+TTEtPk0yOiBBcyBhYm92ZSwgd2lsbCBmb2xkIGJ1dCB0aGUgY29k
ZSB3aWxsIGdldCBpbnZhbGlkYXRlZC4KKyAgICAgICAgSXNXYXRjaGVkLT5DMS0+TTEtPkMyLT5N
MjogQXMgYWJvdmUsIHdpbGwgZm9sZCBidXQgdGhlIGNvZGUgd2lsbCBnZXQgaW52YWxpZGF0ZWQu
CisgICAgICAgIElzV2F0Y2hlZC0+QzEtPk0xLT5NMi0+QzI6IEFzIGFib3ZlLCB3aWxsIGZvbGQg
YnV0IHRoZSBjb2RlIHdpbGwgZ2V0IGludmFsaWRhdGVkLgorICAgICAgICAKKyAgICAgICAgTm90
ZSB0aGF0IHRoaXMga2luZCBvZiByZWFzb25pbmcgc2hvd3Mgd2h5IGhhdmluZyB0aGUgbXV0YXRv
ciBmaXJzdCBidW1wIHRoZSBzdGF0ZSBhbmQKKyAgICAgICAgdGhlbiBzdG9yZSB0aGUgbmV3IHZh
bHVlIHdvdWxkIGJlIHdyb25nLiBJZiB3ZSBoYWQgZG9uZSB0aGF0IChNMSA9IGJ1bXAgc3RhdGUs
IE0yID0KKyAgICAgICAgZXhlY3V0ZSBwdXQpIHRoZW4gd2UgY291bGQgaGF2ZSB0aGUgZm9sbG93
aW5nIGRlYWRseSBpbnRlcmxlYXZpbmdzOgorICAgICAgICAKKyAgICAgICAgVW5pbml0aWFsaXpl
ZC0+TTEtPkMxLT5DMi0+TTI6CisgICAgICAgIFVuaW5pdGlhbGl6ZWQtPk0xLT5DMS0+TTItPkMy
OiBNdXRhdG9yIGJ1bXBzIHRoZSBzdGF0ZSB0byBJc1dhdGNoZWQgYW5kIHRoZW4gdGhlCisgICAg
ICAgICAgICBjb21waWxlciBmb2xkcyBVbmRlZmluZWQsIHNpbmNlIE0yIGhhc24ndCBleGVjdXRl
ZCB5ZXQuIEFsdGhvdWdoIEMyIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgd2F0Y2hwb2ludCwg
TTEgZGlkbid0IG5vdGlmeSBpdCAtIGl0IG1lYXJseSBpbml0aWF0ZWQgd2F0Y2hpbmcuIE0yIHRo
ZW4gc3RvcmVzIGEKKyAgICAgICAgICAgIHZhbHVlIG90aGVyIHRoYW4gVW5kZWZpbmVkLCBhbmQg
eW91J3JlIHRvYXN0LgorICAgICAgICAKKyAgICAgICAgWW91IGNvdWxkIGZpeCB0aGlzIHNvcnQg
b2YgdGhpbmcgYnkgbWFraW5nIHRoZSBEZXNpcmVkIFdhdGNocG9pbnRzIG1hY2hpbmVyeSBtb3Jl
CisgICAgICAgIHNvcGhpc3RpY2F0ZWQsIGZvciBleGFtcGxlIGhhdmluZyBpdCB0cmFjayB0aGUg
dmFsdWUgdGhhdCB3YXMgZm9sZGVkOyBpZiB0aGUgZ2xvYmFsCisgICAgICAgIHZhcmlhYmxlJ3Mg
dmFsdWUgd2FzIGxhdGVyIGZvdW5kIHRvIGJlIGRpZmZlcmVudCB0aGVuIHdlIGNvdWxkIGludmFs
aWRhdGUgdGhlCisgICAgICAgIGNvbXBpbGF0aW9uLiBJIGRlY2lkZWQgdG8gaW5zdGVhZCBqdXN0
IHVzZSB0aGUgcmlnaHQgaW50ZXJsZWF2aW5nLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdGls
bCBuZWVkcyBzb21lIHBvcnRpbmcgYW5kIGJ1aWxkIGxvdmUsIGJ1dCBvdGhlcndpc2UgaXQncyBy
ZWFkeSB0byByZXZpZXcuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om1lbW9yeUZl
bmNlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmxvYWQ4KToKKyAgICAgICAgKiBhc3NlbWJs
ZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6bWZlbmNlKToK
KyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpYODZJbnN0cnVjdGlvbkZvcm1hdHRlcjo6dGhy
ZWVCeXRlT3ApOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50
LmNwcDoKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6V2F0Y2hwb2ludFNldCk6CisgICAg
ICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRT
ZXQ6Om5vdGlmeVdyaXRlU2xvdyk6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5oOgor
ICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjpzdGF0ZSk6CisgICAgICAgIChKU0M6OldhdGNo
cG9pbnRTZXQ6OmlzU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OmFk
ZHJlc3NPZlNldElzTm90RW1wdHkpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmdldEpTQ29uc3RhbnRGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmdldEpTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNTdHJvbmds
eVByb3ZlZENvbnN0YW50SW4pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0lkZW50aWZp
ZXJOdW1iZXJGb3JDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzUmVnaXN0ZXJQ
b2ludGVyKToKKyAgICAgICAgKiBkZmcvREZHTm9kZUZsYWdzLmg6CisgICAgICAgICogZGZnL0RG
R05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAg
ICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVO
b3RpZnlQdXRHbG9iYWxWYXIpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBq
aXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X3B1dF90b19zY29wZSk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bToKKyAgICAgICAgKiBvZmZsaW5lYXNtL2FybS5yYjoKKyAgICAgICAgKiBvZmZsaW5lYXNtL2Fy
bTY0LnJiOgorICAgICAgICAqIG9mZmxpbmVhc20vY2xvb3AucmI6CisgICAgICAgICogb2ZmbGlu
ZWFzbS9pbnN0cnVjdGlvbnMucmI6CisgICAgICAgICogb2ZmbGluZWFzbS94ODYucmI6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjphZGRHbG9iYWxWYXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFkZFZhcik6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjphZGRDb25zdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjphZGRGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9KU1Njb3BlLmNwcDoKKyAgICAgICAg
KEpTQzo6YWJzdHJhY3RBY2Nlc3MpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3Bw
OgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5Ojpjb3VsZEJlV2F0Y2hlZCk6CisgICAg
ICAgIChKU0M6OlN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKToKKyAgICAgICAgKEpT
Qzo6U3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGVTbG93KToKKyAgICAgICAgKiBydW50aW1l
L1N5bWJvbFRhYmxlLmg6CisKIDIwMTMtMTEtMTggIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBh
cHBsZS5jb20+CiAKICAgICAgICAgQVJNNjQgQ1JBU0g6IERlYnVnIGJ1aWxkcyBjcmFzaCBpbiBl
bWl0UG9pbnRlclZhbGlkYXRpb24oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24g
MTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MjQsNiArNjI0LDI1IEBAIHB1YmxpYzoK
ICNlbmRpZgogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX3JtKHNyYywgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQorICAg
IAorICAgIHZvaWQgc3RvcmU4KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworI2lmIENQVShYODYpCisgICAgICAgIC8vIE9uIDMyLWJpdCB4ODYgd2UgY2FuIG9ubHkgc3Rv
cmUgZnJvbSB0aGUgZmlyc3QgNCByZWdpc3RlcnM7CisgICAgICAgIC8vIGVzcC4uZWRpIGFyZSBt
YXBwZWQgdG8gdGhlICdoJyByZWdpc3RlcnMhCisgICAgICAgIGlmIChzcmMgPj0gNCkgeworICAg
ICAgICAgICAgLy8gUGljayBhIHRlbXBvcmFyeSByZWdpc3Rlci4KKyAgICAgICAgICAgIFJlZ2lz
dGVySUQgdGVtcCA9IGdldFVudXNlZFJlZ2lzdGVyKGFkZHJlc3MpOworCisgICAgICAgICAgICAv
LyBTd2FwIHRvIHRoZSB0ZW1wb3JhcnkgcmVnaXN0ZXIgdG8gcGVyZm9ybSB0aGUgc3RvcmUuCisg
ICAgICAgICAgICBzd2FwKHNyYywgdGVtcCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Zi
X3JtKHRlbXAsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgc3dh
cChzcmMsIHRlbXApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjZW5kaWYKKyAg
ICAgICAgbV9hc3NlbWJsZXIubW92Yl9ybShzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UpOworICAgIH0KIAogICAgIHZvaWQgc3RvcmUxNihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4
IGFkZHJlc3MpCiAgICAgewpAQCAtMTQxOSw2ICsxNDM4LDExIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIG1lbW9yeUZl
bmNlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1mZW5jZSgpOworICAgIH0KIAogICAg
IHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlv
blN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcg
QEAgcHVibGljOgogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpicmFuY2hBZGQz
MjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6b3IzMjsKICAgICB1c2luZyBN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6c3ViMzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246OmxvYWQ4OwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpsb2Fk
MzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN0b3JlMzI7CiAgICAgdXNp
bmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN0b3JlODsKQEAgLTkxLDYgKzkyLDEyIEBAIHB1
YmxpYzoKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBzY3JhdGNo
UmVnaXN0ZXIpOwogICAgICAgICBzdWIzMihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7
CiAgICAgfQorICAgIAorICAgIHZvaWQgbG9hZDgoY29uc3Qgdm9pZCogYWRkcmVzcywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MpLCBk
ZXN0KTsKKyAgICAgICAgbG9hZDgoZGVzdCwgZGVzdCk7CisgICAgfQogCiAgICAgdm9pZCBsb2Fk
MzIoY29uc3Qgdm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKQEAgLTEyNiw2
ICsxMzMsMTIgQEAgcHVibGljOgogICAgICAgICBzdG9yZTgoaW1tLCBBZGRyZXNzKHNjcmF0Y2hS
ZWdpc3RlcikpOwogICAgIH0KIAorICAgIHZvaWQgc3RvcmU4KFJlZ2lzdGVySUQgcmVnLCB2b2lk
KiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MpLCBz
Y3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBzdG9yZTgocmVnLCBBZGRyZXNzKHNjcmF0Y2hSZWdp
c3RlcikpOworICAgIH0KKwogICAgIENhbGwgY2FsbCgpCiAgICAgewogICAgICAgICBEYXRhTGFi
ZWxQdHIgbGFiZWwgPSBtb3ZlV2l0aFBhdGNoKFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hSZWdp
c3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Nyw2ICsyNjcsNyBAQCBw
cml2YXRlOgogICAgICAgICBPUDJfTU9WRF9FZFZkICAgICAgID0gMHg3RSwKICAgICAgICAgT1Ay
X0pDQ19yZWwzMiAgICAgICA9IDB4ODAsCiAgICAgICAgIE9QX1NFVENDICAgICAgICAgICAgPSAw
eDkwLAorICAgICAgICBPUDJfM0JZVEVfRVNDQVBFICAgID0gMHhBRSwKICAgICAgICAgT1AyX0lN
VUxfR3ZFdiAgICAgICA9IDB4QUYsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkViICAgICAgPSAweEI2
LAogICAgICAgICBPUDJfTU9WU1hfR3ZFYiAgICAgID0gMHhCRSwKQEAgLTI3Nyw2ICsyNzgsMTAg
QEAgcHJpdmF0ZToKICAgICAgICAgT1AyX1BTUkxRX1VkcUliICAgICA9IDB4NzMsCiAgICAgICAg
IE9QMl9QT1JfVmRxV2RxICAgICAgPSAwWEVCLAogICAgIH0gVHdvQnl0ZU9wY29kZUlEOworICAg
IAorICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIE9QM19NRkVOQ0UgICAgICAgICAgPSAweEYw
LAorICAgIH0gVGhyZWVCeXRlT3Bjb2RlSUQ7CiAKICAgICBUd29CeXRlT3Bjb2RlSUQgamNjUmVs
MzIoQ29uZGl0aW9uIGNvbmQpCiAgICAgewpAQCAtMTMwMyw2ICsxMzA4LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOwogICAgIH0KICAgICAKKyAgICB2
b2lkIG1vdmJfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDgoT1BfTU9WX0ViR2IsIHNyYywg
YmFzZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBtb3ZiX3JtKFJlZ2lzdGVySUQg
c3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDgoT1BfTU9WX0ViR2Is
IHNyYywgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpOwpAQCAtMTg3Myw3ICsxODgzLDcgQEAg
cHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX1NTRV9GMik7CiAgICAgICAg
IG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfU1FSVFNEX1ZzZFdzZCwgKFJlZ2lzdGVySUQpZHN0
LCAoUmVnaXN0ZXJJRClzcmMpOwogICAgIH0KLQorICAgIAogICAgIC8vIE1pc2MgaW5zdHJ1Y3Rp
b25zOgogCiAgICAgdm9pZCBpbnQzKCkKQEAgLTE4OTAsNiArMTkwMCwxMSBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBtX2Zvcm1hdHRlci5wcmVmaXgoUFJFX1BSRURJQ1RfQlJBTkNIX05PVF9U
QUtFTik7CiAgICAgfQorICAgIAorICAgIHZvaWQgbWZlbmNlKCkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLnRocmVlQnl0ZU9wKE9QM19NRkVOQ0UpOworICAgIH0KIAogICAgIC8vIEFzc2Vt
YmxlciBhZG1pbiBtZXRob2RzOgogCkBAIC0yMzAxLDYgKzIzMTYsMTQgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgdm9pZCB0aHJlZUJ5dGVPcChUaHJlZUJ5dGVPcGNv
ZGVJRCBvcGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNl
KG1heEluc3RydWN0aW9uU2l6ZSk7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRCeXRlVW5jaGVj
a2VkKE9QXzJCWVRFX0VTQ0FQRSk7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRCeXRlVW5jaGVj
a2VkKE9QMl8zQllURV9FU0NBUEUpOworICAgICAgICAgICAgbV9idWZmZXIucHV0Qnl0ZVVuY2hl
Y2tlZChvcGNvZGUpOworICAgICAgICB9CisKICNpZiBDUFUoWDg2XzY0KQogICAgICAgICAvLyBR
dWFkLXdvcmQtc2l6ZWQgb3BlcmFuZHM6CiAgICAgICAgIC8vCkBAIC0yNDEzLDYgKzI0MzYsMTQg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJlZ2lzdGVyTW9kUk0ocmVnLCBybSk7CiAgICAgICAg
IH0KIAorICAgICAgICB2b2lkIG9uZUJ5dGVPcDgoT25lQnl0ZU9wY29kZUlEIG9wY29kZSwgaW50
IHJlZywgUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUpOworICAgICAgICAgICAg
ZW1pdFJleElmKGJ5dGVSZWdSZXF1aXJlc1JleChyZWcpIHx8IGJ5dGVSZWdSZXF1aXJlc1JleChi
YXNlKSwgcmVnLCAwLCBiYXNlKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEJ5dGVVbmNoZWNr
ZWQob3Bjb2RlKTsKKyAgICAgICAgICAgIG1lbW9yeU1vZFJNKHJlZywgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgb25lQnl0ZU9wOChPbmVCeXRlT3Bjb2RlSUQgb3Bj
b2RlLCBpbnQgcmVnLCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2Fs
ZSwgaW50IG9mZnNldCkKICAgICAgICAgewogICAgICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3Bh
Y2UobWF4SW5zdHJ1Y3Rpb25TaXplKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzNyw5
ICsxODM3LDYgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAg
ICAgICAgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IHdlJ2xsIHdyaXRlIHRvIHRoaXMgdmFyLCBz
byBub3RpZnkgbm93IGFuZCBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgZG9pbmcgc28gYXQgcnVudGlt
ZS4KLSAgICAgICAgICAgIGVudHJ5Lm5vdGlmeVdyaXRlKCk7Ci0KICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgMF0gPSB2bSgpLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2luaXRfZ2xv
YmFsX2NvbnN0KTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMV0gPSAmbV9nbG9iYWxP
YmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSk7CiAgICAgICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAJ
KHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRj
aHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBXYXRjaHBvaW50Ojp+
V2F0Y2hwb2ludCgpCiAKIFdhdGNocG9pbnRTZXQ6OldhdGNocG9pbnRTZXQoV2F0Y2hwb2ludFN0
YXRlIHN0YXRlKQogICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICAsIG1fc2V0SXNOb3RFbXB0eShm
YWxzZSkKIHsKIH0KIApAQCAtNjAsNiArNjEsNyBAQCB2b2lkIFdhdGNocG9pbnRTZXQ6OmFkZChX
YXRjaHBvaW50KiB3YXRjCiAgICAgaWYgKCF3YXRjaHBvaW50KQogICAgICAgICByZXR1cm47CiAg
ICAgbV9zZXQucHVzaCh3YXRjaHBvaW50KTsKKyAgICBtX3NldElzTm90RW1wdHkgPSB0cnVlOwog
ICAgIG1fc3RhdGUgPSBJc1dhdGNoZWQ7CiB9CiAKQEAgLTY3LDYgKzY5LDcgQEAgdm9pZCBXYXRj
aHBvaW50U2V0Ojpub3RpZnlXcml0ZVNsb3coKQogewogICAgIEFTU0VSVChzdGF0ZSgpID09IElz
V2F0Y2hlZCk7CiAgICAgCisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBmaXJlQWxs
V2F0Y2hwb2ludHMoKTsKICAgICBtX3N0YXRlID0gSXNJbnZhbGlkYXRlZDsKICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dh
dGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
V2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSwxOCBAQCBw
dWJsaWM6CiAgICAgV2F0Y2hwb2ludFNldChXYXRjaHBvaW50U3RhdGUpOwogICAgIH5XYXRjaHBv
aW50U2V0KCk7IC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgbm90IGZpcmUgYW55IG9mIHRoZSB3YXRj
aHBvaW50czsgaWYgeW91IG5lZWQgdG8ga25vdyB3aGVuIGEgV2F0Y2hwb2ludFNldCBkaWVzIHRo
ZW4geW91IG5lZWQgYSBzZXBhcmF0ZSBtZWNoYW5pc20gZm9yIHRoaXMuCiAgICAgCi0gICAgV2F0
Y2hwb2ludFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8V2F0Y2hwb2lu
dFN0YXRlPihtX3N0YXRlKTsgfQorICAgIC8vIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZyb20g
YW5vdGhlciB0aHJlYWQuIEl0IG1heSByZXR1cm4gYW4gb2xkCisgICAgLy8gc3RhdGUuIEd1YXJh
bnRlZXMgdGhhdCBpZiAqZmlyc3QqIHJlYWQgdGhlIHN0YXRlKCkgb2YgdGhlIHRoaW5nIGJlaW5n
CisgICAgLy8gd2F0Y2hlZCBhbmQgaXQgcmV0dXJuZWQgSXNXYXRjaGVkIGFuZCAqc2Vjb25kKiB5
b3UgYWN0dWFsbHkgcmVhZCBpdHMKKyAgICAvLyB2YWx1ZSB0aGVuIGl0J3Mgc2FmZSB0byBhc3N1
bWUgdGhhdCBpZiB0aGUgc3RhdGUgYmVpbmcgd2F0Y2hlZCBjaGFuZ2VzCisgICAgLy8gdGhlbiBh
bHNvIHRoZSB3YXRjaHBvaW50IHN0YXRlKCkgd2lsbCBjaGFuZ2UgdG8gSXNJbnZhbGlkYXRlZC4K
KyAgICBXYXRjaHBvaW50U3RhdGUgc3RhdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgV1RGOjps
b2FkTG9hZEZlbmNlKCk7CisgICAgICAgIFdhdGNocG9pbnRTdGF0ZSByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxXYXRjaHBvaW50U3RhdGU+KG1fc3RhdGUpOworICAgICAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgLy8gSXQgaXMg
c2FmZSB0byBjYWxsIHRoaXMgZnJvbSBhbm90aGVyIHRocmVhZC4gIEl0IG1heSByZXR1cm4gdHJ1
ZQogICAgIC8vIGV2ZW4gaWYgdGhlIHNldCBhY3R1YWxseSBoYWQgYmVlbiBpbnZhbGlkYXRlZCwg
YnV0IHRoYXQgb3VnaHQgdG8gaGFwcGVuCkBAIC02OSw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICAv
LyBpc3N1aW5nIGEgbG9hZC1sb2FkIGZlbmNlIHByaW9yIHRvIHF1ZXJ5aW5nIHRoZSBzdGF0ZS4K
ICAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0CiAgICAgewotICAgICAgICBXVEY6OmxvYWRM
b2FkRmVuY2UoKTsKICAgICAgICAgcmV0dXJuIHN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZDsKICAg
ICB9CiAgICAgLy8gTGlrZSBpc1N0aWxsVmFsaWQoKSwgbWF5IGJlIGNhbGxlZCBmcm9tIGFub3Ro
ZXIgdGhyZWFkLgpAQCAtOTksNiArMTA5LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIGludDhf
dCogYWRkcmVzc09mU3RhdGUoKSB7IHJldHVybiAmbV9zdGF0ZTsgfQorICAgIGludDhfdCogYWRk
cmVzc09mU2V0SXNOb3RFbXB0eSgpIHsgcmV0dXJuICZtX3NldElzTm90RW1wdHk7IH0KICAgICAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG5vdGlmeVdyaXRlU2xvdygpOyAvLyBDYWxsIG9u
bHkgaWYgeW91J3ZlIGNoZWNrZWQgaXNXYXRjaGVkLgogICAgIApAQCAtMTA5LDYgKzEyMCw3IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgU2VudGluZWxMaW5rZWRMaXN0PFdhdGNocG9pbnQsIEJhc2lj
UmF3U2VudGluZWxOb2RlPFdhdGNocG9pbnQ+PiBtX3NldDsKICAgICBpbnQ4X3QgbV9zdGF0ZTsK
KyAgICBpbnQ4X3QgbV9zZXRJc05vdEVtcHR5OwogfTsKIAogLy8gSW5saW5lV2F0Y2hwb2ludFNl
dCBpcyBhIGxvdy1vdmVyaGVhZCwgbm9uLWNvcHlhYmxlIHdhdGNocG9pbnQgc2V0IGluIHdoaWNo
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1MTEsNiArMTUxMSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dEds
b2JhbFZhcjoKKyAgICBjYXNlIE5vdGlmeVB1dEdsb2JhbFZhcjoKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTU5
NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxNiw3ICs1MTYsNyBAQCBwcml2YXRlOgogICAgIC8vIGNvbnN0
YW50IGZvbGRpbmcuIEkuZS4gY3JlYXRpbmcgY29uc3RhbnRzIHVzaW5nIHRoaXMgaWYgd2UgaGFk
IGNvbnN0YW50CiAgICAgLy8gZmllbGQgaW5mZXJlbmNlIHdvdWxkIGJlIGEgYmFkIGlkZWEsIHNp
bmNlIHRoZSBieXRlY29kZSBwYXJzZXIncyBmb2xkaW5nCiAgICAgLy8gZG9lc24ndCBoYW5kbGUg
bGl2ZW5lc3MgcHJlc2VydmF0aW9uLgotICAgIE5vZGUqIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShK
U1ZhbHVlIGNvbnN0YW50VmFsdWUpCisgICAgTm9kZSogZ2V0SlNDb25zdGFudEZvclZhbHVlKEpT
VmFsdWUgY29uc3RhbnRWYWx1ZSwgTm9kZUZsYWdzIGZsYWdzID0gTm9kZUlzU3RhdGljQ29uc3Rh
bnQpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBjb25zdGFudEluZGV4OwogICAgICAgICBpZiAo
IW1fY29kZUJsb2NrLT5maW5kQ29uc3RhbnQoY29uc3RhbnRWYWx1ZSwgY29uc3RhbnRJbmRleCkp
IHsKQEAgLTUyNiwxNiArNTI2LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBBU1NF
UlQobV9jb25zdGFudHMuc2l6ZSgpID09IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVn
aXN0ZXJzKCkpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQoY29uc3Rh
bnRJbmRleCk7CisgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KGNvbnN0YW50SW5kZXgsIGZs
YWdzKTsKICAgICB9CiAKLSAgICBOb2RlKiBnZXRKU0NvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50
KQorICAgIE5vZGUqIGdldEpTQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnQsIE5vZGVGbGFncyBm
bGFncyA9IE5vZGVJc1N0YXRpY0NvbnN0YW50KQogICAgIHsKICAgICAgICAgTm9kZSogbm9kZSA9
IG1fY29uc3RhbnRzW2NvbnN0YW50XS5hc0pTVmFsdWU7CiAgICAgICAgIGlmIChub2RlKQogICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7CiAKICAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFw
aChKU0NvbnN0YW50LCBPcEluZm8oY29uc3RhbnQpKTsKKyAgICAgICAgcmVzdWx0LT5tZXJnZUZs
YWdzKGZsYWdzKTsKICAgICAgICAgbV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNWYWx1ZSA9IHJl
c3VsdDsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0zMTAwLDcgKzMxMDEsMTAg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChHbG9iYWxWYXJXYXRjaHBvaW50LCBPcEluZm8ob3BlcmFuZCksIE9w
SW5mbyhpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBzcGVjaWZp
Y1ZhbHVlID0gZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgp
OwotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgY2VsbENvbnN0YW50
KHNwZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3BlY2lmaWNW
YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihk
c3QpLCBjZWxsQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZS5hc0NlbGwoKSkpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBn
ZXRKU0NvbnN0YW50Rm9yVmFsdWUoc3BlY2lmaWNWYWx1ZSwgMCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAt
MzEyMywxMiArMzEyNywxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IFJlc29sdmVNb2RlQW5k
VHlwZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKS50eXBlKCk7CiAgICAgICAgICAg
ICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJl
cl07CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOworICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hw
b2ludHMgPSAwOwogICAgICAgICAgICAgdWludHB0cl90IG9wZXJhbmQ7CiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgd2F0Y2hwb2ludHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRj
aHBvaW50U2V0OwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUuc3RydWN0dXJlLmdldCgpOwogICAgICAg
ICAgICAgICAgIG9wZXJhbmQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY3VycmVudElu
c3RydWN0aW9uWzZdLnUucG9pbnRlcik7CkBAIC0zMTUzLDEwICszMTU4LDExIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQo
VmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50
cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVCghZW50cnkuY291bGRCZVdhdGNoZWQoKSB8fCAhbV9ncmFwaC53YXRj
aHBvaW50cygpLmlzU3RpbGxWYWxpZChlbnRyeS53YXRjaHBvaW50U2V0KCkpKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQod2F0Y2hwb2ludHMgPT0gZW50cnkud2F0Y2hwb2ludFNldCgpKTsKICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBn
ZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOworICAgICAgICAgICAgICAgIGlmICh3YXRjaHBv
aW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKQorICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKE5vdGlmeVB1dEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8oaWRlbnRp
Zmllck51bWJlcikpOwogICAgICAgICAgICAgICAgIC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50aWwg
YWZ0ZXIgcHV0LgogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1
YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNTk0NjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTQyLDYgKzE0MiwxMCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAgd3JpdGUoU2lkZVN0
YXRlKTsKICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIE5vdGlmeVB1dEdsb2Jh
bFZhcjoKKyAgICAgICAgd3JpdGUoV2F0Y2hwb2ludF9maXJlKTsKKyAgICAgICAgcmV0dXJuOwog
CiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZp
c2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDMsNiArOTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAg
Y2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgTm90aWZ5UHV0R2xvYmFsVmFyOgogICAg
ICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgVmFySW5qZWN0aW9u
V2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTU5NDYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
OSw3ICszNTksOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBpc1N0cm9uZ2x5UHJv
dmVkQ29uc3RhbnRJbihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUg
PT0gaW5saW5lQ2FsbEZyYW1lOworICAgICAgICByZXR1cm4gISEoZmxhZ3MoKSAmIE5vZGVJc1N0
YXRpY0NvbnN0YW50KQorICAgICAgICAgICAgJiYgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUg
PT0gaW5saW5lQ2FsbEZyYW1lOwogICAgIH0KICAgICAKICAgICBib29sIGlzU3Ryb25nbHlQcm92
ZWRDb25zdGFudEluKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCkBAIC03NDksNyArNzUw
LDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIGJvb2wgaGFzSWRlbnRpZmllck51bWJlckZv
ckNoZWNrKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IEdsb2JhbFZhcldhdGNocG9p
bnQ7CisgICAgICAgIHJldHVybiBvcCgpID09IEdsb2JhbFZhcldhdGNocG9pbnQgfHwgb3AoKSA9
PSBOb3RpZnlQdXRHbG9iYWxWYXI7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXJGb3JDaGVjaygpCkBAIC03NjAsNyArNzYxLDcgQEAgc3RydWN0IE5vZGUgewogICAg
IAogICAgIGJvb2wgaGFzUmVnaXN0ZXJQb2ludGVyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBv
cCgpID09IEdldEdsb2JhbFZhciB8fCBvcCgpID09IFB1dEdsb2JhbFZhciB8fCBvcCgpID09IEds
b2JhbFZhcldhdGNocG9pbnQ7CisgICAgICAgIHJldHVybiBvcCgpID09IEdldEdsb2JhbFZhciB8
fCBvcCgpID09IFB1dEdsb2JhbFZhciB8fCBvcCgpID09IEdsb2JhbFZhcldhdGNocG9pbnQgfHwg
b3AoKSA9PSBOb3RpZnlQdXRHbG9iYWxWYXI7CiAgICAgfQogICAgIAogICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgTm9kZUV4aXRzRm9y
d2FyZCAgICAgICAgICAgICAgICAgMHg4MDAwCiAKKyNkZWZpbmUgTm9kZUlzU3RhdGljQ29uc3Rh
bnQgICAgICAgICAgICAweDEwMDAwIC8vIFVzZWQgb25seSBieSB0aGUgcGFyc2VyLCB0byBkZXRl
cm1pbmUgaWYgYSBjb25zdGFudCBhcm9zZSBzdGF0aWNhbGx5IGFuZCBoZW5jZSBjb3VsZCBiZSBm
b2xkZWQgYXQgcGFyc2UtdGltZS4KKwogdHlwZWRlZiB1aW50MzJfdCBOb2RlRmxhZ3M7CiAKIHN0
YXRpYyBpbmxpbmUgYm9vbCBieXRlY29kZVVzZXNBc051bWJlcihOb2RlRmxhZ3MgZmxhZ3MpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTk0
NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NCw2ICsxODQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgbWFjcm8oUHV0Q2xvc3VyZVZhciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KEdldEdsb2JhbFZhciwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUHV0R2xvYmFsVmFyLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oTm90aWZ5UHV0R2xvYmFsVmFyLCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2xvYmFsVmFyV2F0Y2hwb2ludCwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKFZhckluamVjdGlvbldhdGNocG9pbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhDaGVja0Z1bmN0aW9uLCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk5OCw2ICs5OTgsMTQgQEAgY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25Td2l0Y2hTdHJpbgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oZXhlYy0+
Y29kZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlGb3JWYWx1
ZShzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqIGV4ZWMs
IFdhdGNocG9pbnRTZXQqIHNldCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIHNldC0+bm90aWZ5
V3JpdGUoKTsKK30KKwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhp
bnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICByZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTk0NjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTI1LDYgKzEyNSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25N
YWtlUm9wZTIKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0
YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7CiBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmlu
ZyopOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSos
IFdhdGNocG9pbnRTZXQqKTsKIAogI2lmIEVOQUJMRShGVExfSklUKQogLy8gRklYTUU6IE1ha2Ug
Y2FsbHMgd29yayB3ZWxsLiBDdXJyZW50bHkgdGhleSdyZSBhIHB1cmUgcmVncmVzc2lvbi4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTE1LDcgKzUxNSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tU
aWVyVXBJbkxvb3A6CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICAgICAg
Y2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgotICAgICAgICBjYXNlIEludmFsaWRhdGlvblBv
aW50OiB7CisgICAgICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CisgICAgICAgIGNhc2UgSW50
NTJUb1ZhbHVlOgorICAgICAgICBjYXNlIEludDUyVG9Eb3VibGU6IHsKICAgICAgICAgICAgIC8v
IFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBp
bGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2gg
Zm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTU4MCw4ICs1ODIsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrV2F0
Y2hkb2dUaW1lcjoKICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgY2FzZSBMb29w
SGludDoKLSAgICAgICAgY2FzZSBJbnQ1MlRvVmFsdWU6Ci0gICAgICAgIGNhc2UgSW50NTJUb0Rv
dWJsZToKKyAgICAgICAgY2FzZSBOb3RpZnlQdXRHbG9iYWxWYXI6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0
IGFscmVhZHkgaGFzIGEgcHJlZGljdGlvbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQy
LDYgKzI0Miw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAg
ICBjYXNlIEludDUyVG9Eb3VibGU6CiAgICAgY2FzZSBJbnQ1MlRvVmFsdWU6CiAgICAgY2FzZSBJ
bnZhbGlkYXRpb25Qb2ludDoKKyAgICBjYXNlIE5vdGlmeVB1dEdsb2JhbFZhcjoKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNjgsNiArNDM2OCwxMSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgTm90aWZ5UHV0R2xvYmFs
VmFyOiB7CisgICAgICAgIGNvbXBpbGVOb3RpZnlQdXRHbG9iYWxWYXIobm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDogewogICAg
ICAgICBub1Jlc3VsdChub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYwMSw2ICs1NjAxLDQ0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2goTm9kZSog
bm8KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTm90aWZ5UHV0R2xvYmFsVmFyKE5vZGUqIG5vZGUpCit7CisgICAgV2F0
Y2hwb2ludFNldCogc2V0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4p
LT5zeW1ib2xUYWJsZSgpLT5nZXQoCisgICAgICAgIG1faml0LmdyYXBoKCkuaWRlbnRpZmllcnMo
KVtub2RlLT5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKV0pLndhdGNocG9pbnRTZXQoKTsKKyAg
ICAKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRl
bXAuZ3ByKCk7CisgICAgCisgICAgbV9qaXQubG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCB0
ZW1wR1BSKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgcmVhZHk7CisgICAgCisg
ICAgcmVhZHkuYXBwZW5kKG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGVtcEdQ
UiwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgCisgICAgaWYgKHNldC0+c3Rh
dGUoKSA9PSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNX
YXRjaGVkID0KKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVh
bCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKENsZWFyV2F0Y2hwb2ludCkpOworICAgICAgICAKKyAg
ICAgICAgbV9qaXQuc3RvcmU4KFRydXN0ZWRJbW0zMihJc1dhdGNoZWQpLCBzZXQtPmFkZHJlc3NP
ZlN0YXRlKCkpOworICAgICAgICByZWFkeS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAg
CisgICAgICAgIGlzV2F0Y2hlZC5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgIEpJVENv
bXBpbGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVz
c09mU2V0SXNOb3RFbXB0eSgpKSk7CisgICAgbV9qaXQuc3RvcmU4KFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSwgc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKTsKKworICAgIHJlYWR5LmxpbmsoJm1f
aml0KTsKKyAgICAKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgc2xvd1BhdGhD
YWxsKHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25Ob3RpZnlXcml0ZSwgTm9SZXN1bHQsIHNldCkp
OworICAgIAorICAgIG1faml0Lm1lbW9yeUZlbmNlKCk7CisKKyAgICBub1Jlc3VsdChub2RlKTsK
K30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYganVtcCwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0ganVtcC5qdW1wcygpLnNpemUoKTsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1OTQ2MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4NCw5ICsxMDg0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fVyBvcGVyYXRpb24sIFdh
dGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FVyBvcGVyYXRpb24sIFdhdGNocG9pbnRTZXQqIHdhdGNo
cG9pbnRTZXQpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhUcnVzdGVkSW1t
UHRyKHdhdGNocG9pbnRTZXQpKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW1QdHIod2F0Y2hwb2ludFNldCkpOwogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIApAQCAtMjA0NSw2ICsyMDQ1LDggQEAgcHVibGlj
OgogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihOb2RlKik7CiAgICAgYm9v
bCBjb21waWxlUmVnRXhwRXhlYyhOb2RlKik7CiAgICAgCisgICAgdm9pZCBjb21waWxlTm90aWZ5
UHV0R2xvYmFsVmFyKE5vZGUqKTsKKyAgICAKICAgICAvLyBzaXplIGNhbiBiZSBhbiBpbW1lZGlh
dGUgb3IgYSByZWdpc3RlciwgYW5kIG11c3QgYmUgaW4gYnl0ZXMuIElmIHNpemUgaXMgYSByZWdp
c3RlciwKICAgICAvLyBpdCBtdXN0IGJlIGEgZGlmZmVyZW50IHJlZ2lzdGVyIHRoYW4gcmVzdWx0
R1BSLiBFbWl0cyBjb2RlIHRoYXQgcGxhY2UgYSBwb2ludGVyIHRvCiAgICAgLy8gdGhlIGVuZCBv
ZiB0aGUgYWxsb2NhdGlvbi4gVGhlIHJldHVybmVkIGp1bXAgaXMgdGhlIGp1bXAgdG8gdGhlIHNs
b3cgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTU5NDYyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEz
LDcgKzYxMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRHbG9iYWxW
YXIodWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGlu
dCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxQ
cm9wZXJ0eSh1aW50cHRyX3QqIG9wZXJhbmRTbG90LCBpbnQgdmFsdWUpOwotICAgICAgICB2b2lk
IGVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSk7CisgICAgICAg
IHZvaWQgZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRj
aHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1
aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlKTsKIAogICAgICAgICB2b2lkIGVtaXRJbml0UmVn
aXN0ZXIoaW50IGRzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCB0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVmIHZvaWQgSklUX09QRVJB
VElPTiAoKlZfSklUT3BlcmF0aW9uX0VQYykoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qKTsKIHR5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRl
Kiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BF
UkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVNzaUpKSSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1
YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKTsKLXR5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fVykoV2F0Y2hwb2ludFNl
dCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVykoRXhl
Y1N0YXRlKiwgV2F0Y2hwb2ludFNldCopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpW
X0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWbSkoRXhlY1N0YXRlKiwgVk0qKTsKIHR5cGVk
ZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzEsMTAgKzc3MSwzNiBAQCB2b2lk
IEpJVDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5KHVpbnRwdHJfCiAgICAgc3RvcmVQdHIocmVnVDIs
IEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNl
dCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1
dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlKQordm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCog
c2V0KQogeworICAgIGlmIChzZXQgJiYgc2V0LT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpIHsK
KyAgICAgICAgbG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCByZWdUMSk7CisgICAgICAgIAor
ICAgICAgICBKdW1wTGlzdCByZWFkeTsKKyAgICAgICAgCisgICAgICAgIHJlYWR5LmFwcGVuZChi
cmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAg
ICAgICAKKyAgICAgICAgaWYgKHNldC0+c3RhdGUoKSA9PSBDbGVhcldhdGNocG9pbnQpIHsKKyAg
ICAgICAgICAgIEp1bXAgaXNXYXRjaGVkID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoQ2xlYXJXYXRjaHBvaW50KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKElzV2F0Y2hlZCksIHJlZ1QxKTsKKyAgICAgICAgICAgIHJlYWR5LmFw
cGVuZChqdW1wKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc1dhdGNoZWQubGluayh0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVz
dDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU2V0SXNOb3RFbXB0eSgp
KSkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSwgcmVnVDEpOwor
ICAgICAgICByZWFkeS5saW5rKHRoaXMpOworICAgIH0KKyAgICAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KG9wZXJhbmQpKTsKKyAgICAKKyAgICBpZiAoc2V0ICYmIHNldC0+c3RhdGUo
KSAhPSBJc0ludmFsaWRhdGVkKSB7CisgICAgICAgIG1lbW9yeUZlbmNlKCk7CisgICAgICAgIHN0
b3JlOChyZWdUMSwgc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklU
OjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFs
dWUpCkBAIC04MDIsNyArODI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKElu
c3RydWN0aQogICAgIGNhc2UgR2xvYmFsVmFyOgogICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRQdXRHbG9iYWxWYXIoKm9w
ZXJhbmRTbG90LCB2YWx1ZSk7CisgICAgICAgIGVtaXRQdXRHbG9iYWxWYXIoKm9wZXJhbmRTbG90
LCB2YWx1ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgpAQCAtODE4LDEwICs4NDQsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29w
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gUmVzb2x2
ZU1vZGVBbmRUeXBlKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpLnR5cGUoKTsKLSAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IENsb3N1cmVW
YXIpCisgICAgdW5zaWduZWQgbGlua0NvdW50ID0gMDsKKyAgICBpZiAocmVzb2x2ZVR5cGUgIT0g
R2xvYmFsVmFyICYmIHJlc29sdmVUeXBlICE9IENsb3N1cmVWYXIpCisgICAgICAgIGxpbmtDb3Vu
dCsrOworICAgIGlmICgocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICYmIGN1cnJlbnRJbnN0
cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkKKyAg
ICAgICAgbGlua0NvdW50Kys7CisgICAgaWYgKCFsaW5rQ291bnQpCiAgICAgICAgIHJldHVybjsK
LQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAgICB3aGlsZSAobGlua0NvdW50LS0pCisgICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRv
U2NvcGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lv
biAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTk1NSwxMCArMTk1NSwyMiBAQCBtYWNybyBw
dXRQcm9wZXJ0eSgpCiBlbmQKIAogbWFjcm8gcHV0R2xvYmFsVmFyKCkKKyAgICBsb2FkcEZyb21J
bnN0cnVjdGlvbig1LCB0MikKKyAgICBsb2FkYiBXYXRjaHBvaW50U2V0OjptX3N0YXRlW3QyXSwg
dDMKKyAgICBiaWVxIHQzLCBJc0ludmFsaWRhdGVkLCAucmVhZHkKKyAgICBiaW5lcSB0MywgQ2xl
YXJXYXRjaHBvaW50LCAubmVlZFRvSW52YWxpZGF0ZQorICAgIG1vdmUgSXNXYXRjaGVkLCB0Mwor
ICAgIGptcCAucmVhZHkKKy5uZWVkVG9JbnZhbGlkYXRlOgorICAgIGJ0Ym56IFdhdGNocG9pbnRT
ZXQ6Om1fc2V0SXNOb3RFbXB0eVt0Ml0sIC5wRHluYW1pYworICAgIG1vdmUgSXNJbnZhbGlkYXRl
ZCwgdDMKKy5yZWFkeToKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDEpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwg
dDApCiAgICAgc3RvcmVxIHQxLCBbdDBdCisgICAgbWVtZmVuY2UKKyAgICBzdG9yZWIgdDMsIFdh
dGNocG9pbnRTZXQ6Om1fc3RhdGVbdDJdCiBlbmQKIAogbWFjcm8gcHV0Q2xvc3VyZVZhcigpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9hcm02NC5yYgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9hcm02NC5yYgkocmV2aXNpb24g
MTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vYXJtNjQucmIJKHdv
cmtpbmcgY29weSkKQEAgLTgwNyw2ICs4MDcsOCBAQCBjbGFzcyBJbnN0cnVjdGlvbgogICAgICAg
ICAgICAgb3BlcmFuZHNbMF0uYXJtNjRFbWl0TGVhKG9wZXJhbmRzWzFdLCA6cHRyKQogICAgICAg
ICB3aGVuICJzbXVsbGkiCiAgICAgICAgICAgICAkYXNtLnB1dHMgInNtYWRkbCAje29wZXJhbmRz
WzJdLmFybTY0T3BlcmFuZCg6cHRyKX0sICN7b3BlcmFuZHNbMF0uYXJtNjRPcGVyYW5kKDppbnQp
fSwgI3tvcGVyYW5kc1sxXS5hcm02NE9wZXJhbmQoOmludCl9LCB4enIiCisgICAgICAgIHdoZW4g
Im1lbWZlbmNlIgorICAgICAgICAgICAgJGFzbS5wdXRzICJkbWIgc3kiCiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIGxvd2VyRGVmYXVsdAogICAgICAgICBlbmQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9vZmZsaW5lYXNtL2FybS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvb2ZmbGluZWFzbS9hcm0ucmIJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2FybS5yYgkod29ya2luZyBjb3B5KQpAQCAtNTk3LDYg
KzU5Nyw4IEBAIGNsYXNzIEluc3RydWN0aW9uCiAgICAgICAgIHdoZW4gInNtdWxsaSIKICAgICAg
ICAgICAgIHJhaXNlICJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNtdWxsIGluICN7c2Vs
Zi5pbnNwZWN0fSBhdCAje2NvZGVPcmlnaW5TdHJpbmd9IiB1bmxlc3Mgb3BlcmFuZHMubGVuZ3Ro
ID09IDQKICAgICAgICAgICAgICRhc20ucHV0cyAic211bGwgI3tvcGVyYW5kc1syXS5hcm1PcGVy
YW5kfSwgI3tvcGVyYW5kc1szXS5hcm1PcGVyYW5kfSwgI3tvcGVyYW5kc1swXS5hcm1PcGVyYW5k
fSwgI3tvcGVyYW5kc1sxXS5hcm1PcGVyYW5kfSIKKyAgICAgICAgd2hlbiAibWVtZmVuY2UiCisg
ICAgICAgICAgICAkYXNtLnB1dHMgImRtYiBzeSIKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bG93ZXJEZWZhdWx0CiAgICAgICAgIGVuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL29m
ZmxpbmVhc20vY2xvb3AucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29m
ZmxpbmVhc20vY2xvb3AucmIJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9vZmZsaW5lYXNtL2Nsb29wLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xMDkxLDcgKzEwOTEs
OCBAQCBjbGFzcyBJbnN0cnVjdGlvbgogICAgICAgICAgICAgY2xvb3BFbWl0T3BBbmRCcmFuY2go
b3BlcmFuZHMsICJ8IiwgOmludDMyLCAiPT0gMCIpCiAgICAgICAgIHdoZW4gImJvcnJpbnoiCiAg
ICAgICAgICAgICBjbG9vcEVtaXRPcEFuZEJyYW5jaChvcGVyYW5kcywgInwiLCA6aW50MzIsICIh
PSAwIikKLQorICAgICAgICAgICAgCisgICAgICAgIHdoZW4gIm1lbWZlbmNlIgogICAgICAgICB3
aGVuICJwdXNoQ2FsbGVlU2F2ZXMiCiAgICAgICAgIHdoZW4gInBvcENhbGxlZVNhdmVzIgogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25z
LnJiCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS9pbnN0cnVjdGlvbnMucmIJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw3ICsyNTAsOCBAQCBNQUNS
T19JTlNUUlVDVElPTlMgPQogICAgICAibGVhaSIsCiAgICAgICJsZWFwIiwKICAgICAgInB1c2hD
YWxsZWVTYXZlcyIsCi0gICAgICJwb3BDYWxsZWVTYXZlcyIKKyAgICAgInBvcENhbGxlZVNhdmVz
IiwKKyAgICAgIm1lbWZlbmNlIgogICAgIF0KIAogWDg2X0lOU1RSVUNUSU9OUyA9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20veDg2LnJiCShyZXZpc2lvbiAxNTk0NjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHdvcmtpbmcgY29weSkK
QEAgLTEzNjMsNiArMTM2Myw4IEBAIGNsYXNzIEluc3RydWN0aW9uCiAgICAgICAgICAgICAkYXNt
LnB1dHMgImxlYWwgI3tvcGVyYW5kc1swXS54ODZBZGRyZXNzT3BlcmFuZCg6aW50KX0sICN7b3Bl
cmFuZHNbMV0ueDg2T3BlcmFuZCg6aW50KX0iCiAgICAgICAgIHdoZW4gImxlYXAiCiAgICAgICAg
ICAgICAkYXNtLnB1dHMgImxlYSN7eDg2U3VmZml4KDpwdHIpfSAje29wZXJhbmRzWzBdLng4NkFk
ZHJlc3NPcGVyYW5kKDpwdHIpfSwgI3tvcGVyYW5kc1sxXS54ODZPcGVyYW5kKDpwdHIpfSIKKyAg
ICAgICAgd2hlbiAibWVtZmVuY2UiCisgICAgICAgICAgICAkYXNtLnB1dHMgIm1mZW5jZSIKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgbG93ZXJEZWZhdWx0CiAgICAgICAgIGVuZApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAko
cmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsMjAgKzIxMCwyMCBAQCBib29sIEpT
R2xvYmFsT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKCiAgICAgcmV0dXJuIEJhc2U6OmRlZmlu
ZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
c2hvdWxkVGhyb3cpOwogfQogCi1pbnQgSlNHbG9iYWxPYmplY3Q6OmFkZEdsb2JhbFZhcihjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgRnVuY3Rpb25N
b2RlIGZ1bmN0aW9uTW9kZSkKK2ludCBKU0dsb2JhbE9iamVjdDo6YWRkR2xvYmFsVmFyKGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBWYXJBZGRNb2Rl
IHZhckFkZE1vZGUpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFi
bGUoKS0+bV9sb2NrKTsKICAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZSgpLT5zaXplKGxvY2tl
cik7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgKGNvbnN0YW50TW9kZSA9
PSBJc0NvbnN0YW50KSA/IFJlYWRPbmx5IDogMCk7Ci0gICAgaWYgKGZ1bmN0aW9uTW9kZSA9PSBJ
c0Z1bmN0aW9uVG9TcGVjaWFsaXplKQotICAgICAgICBuZXdFbnRyeS5hdHRlbXB0VG9XYXRjaCgp
OworICAgIGlmIChjb25zdGFudE1vZGUgPT0gSXNWYXJpYWJsZSkKKyAgICAgICAgbmV3RW50cnku
cHJlcGFyZVRvV2F0Y2goU3ltYm9sVGFibGVFbnRyeTo6Tm90SW5pdGlhbGl6ZWQpOwogICAgIFN5
bWJvbFRhYmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLT5hZGQobG9j
a2VyLCBpZGVudC5pbXBsKCksIG5ld0VudHJ5KTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkp
CiAgICAgICAgIGFkZFJlZ2lzdGVycygxKTsKLSAgICBlbHNlIHsKLSAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5ub3RpZnlXcml0ZSgpOworICAgIGVsc2UKICAgICAgICAgaW5kZXggPSBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCk7Ci0gICAgfQorICAgIGlmIChjb25zdGFu
dE1vZGUgPT0gSXNWYXJpYWJsZSAmJiB2YXJBZGRNb2RlID09IEFkZFRvSW5pdGlhbGl6ZSkKKyAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5ub3RpZnlXcml0ZSgpOwogICAgIHJldHVybiBp
bmRleDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksOCArMjg5LDgg
QEAgcHJvdGVjdGVkOgogICAgIH0KIAogICAgIGVudW0gQ29uc3RhbnRNb2RlIHsgSXNDb25zdGFu
dCwgSXNWYXJpYWJsZSB9OwotICAgIGVudW0gRnVuY3Rpb25Nb2RlIHsgSXNGdW5jdGlvblRvU3Bl
Y2lhbGl6ZSwgTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUgfTsKLSAgICBpbnQgYWRkR2xv
YmFsVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUsIEZ1bmN0aW9uTW9kZSk7Cisg
ICAgZW51bSBWYXJBZGRNb2RlIHsgQWRkVW5pbml0aWFsaXplZCwgQWRkVG9Jbml0aWFsaXplIH07
CisgICAgaW50IGFkZEdsb2JhbFZhcihjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBW
YXJBZGRNb2RlKTsKIAogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5KU0dsb2JhbE9i
amVjdCgpOwpAQCAtMzE1LDE3ICszMTUsMTcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkVmFyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogICAgIHsKICAg
ICAgICAgaWYgKCFoYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAg
YWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSwgTm90RnVuY3Rpb25Pck5vdFNw
ZWNpYWxpemFibGUpOworICAgICAgICAgICAgYWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwgSXNW
YXJpYWJsZSwgQWRkVW5pbml0aWFsaXplZCk7CiAgICAgfQogICAgIHZvaWQgYWRkQ29uc3QoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiAgICAgewogICAg
ICAgICBpZiAoIWhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCi0gICAgICAgICAgICBh
ZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc0NvbnN0YW50LCBOb3RGdW5jdGlvbk9yTm90U3Bl
Y2lhbGl6YWJsZSk7CisgICAgICAgICAgICBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc0Nv
bnN0YW50LCBBZGRVbmluaXRpYWxpemVkKTsKICAgICB9CiAgICAgdm9pZCBhZGRGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGJvb2wgcHJvcGVydHlEaWRFeGlzdCA9IHJlbW92ZURpcmVj
dChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpOyAvLyBOZXdseSBkZWNsYXJlZCBmdW5jdGlvbnMg
b3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMuCi0gICAgICAgIGludCBpbmRleCA9IGFkZEds
b2JhbFZhcihwcm9wZXJ0eU5hbWUsIElzVmFyaWFibGUsICFwcm9wZXJ0eURpZEV4aXN0ID8gSXNG
dW5jdGlvblRvU3BlY2lhbGl6ZSA6IE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlKTsKKyAg
ICAgICAgcmVtb3ZlRGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSk7IC8vIE5ld2x5IGRl
Y2xhcmVkIGZ1bmN0aW9ucyBvdmVyd3JpdGUgZXhpc3RpbmcgcHJvcGVydGllcy4KKyAgICAgICAg
aW50IGluZGV4ID0gYWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSwgQWRkVG9J
bml0aWFsaXplKTsKICAgICAgICAgcmVnaXN0ZXJBdChpbmRleCkuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIHZhbHVlKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTUgKzc3LDEwIEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhFeGVjU3QKICAgICBpZiAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihzY29w
ZSkpIHsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3lt
Ym9sVGFibGUoKS0+Z2V0KGlkZW50LmltcGwoKSk7CiAgICAgICAgIGlmICghZW50cnkuaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgIGlmIChnZXRPclB1dCA9PSBQdXQpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZW50cnkuaXNSZWFkT25seSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGtu
b3cgdGhlIHByb3BlcnR5IHdpbGwgYmUgYXQgZ2xvYmFsIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25v
dyBob3cgdG8gY2FjaGUgaXQuCi0gICAgICAgICAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKER5
bmFtaWMsIDAsIDAsIDAsIDApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IHdl
J2xsIHdyaXRlIHRvIHRoaXMgdmFyLCBzbyBub3RpZnkgbm93IGFuZCBhdm9pZCB0aGUgb3Zlcmhl
YWQgb2YgZG9pbmcgc28gYXQgcnVudGltZS4KLSAgICAgICAgICAgICAgICBlbnRyeS5ub3RpZnlX
cml0ZSgpOworICAgICAgICAgICAgaWYgKGdldE9yUHV0ID09IFB1dCAmJiBlbnRyeS5pc1JlYWRP
bmx5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBwcm9wZXJ0eSB3aWxsIGJl
IGF0IGdsb2JhbCBzY29wZSwgYnV0IHdlIGRvbid0IGtub3cgaG93IHRvIGNhY2hlIGl0LgorICAg
ICAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDApOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBvcCA9
IFJlc29sdmVPcCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMTIzLDYgKzEyMyw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAgIEFTU0VS
VCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcChv
YmplY3QpKTsKICAgICAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWc7CisgICAg
V2F0Y2hwb2ludFNldCogc2V0ID0gMDsKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSA9ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIEdDU2FmZUNvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsK
QEAgLTEzNywxNCArMTM4LDE1IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAgICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAg
ICBpZiAoVU5MSUtFTFkod2FzRmF0KSkKLSAgICAgICAgICAgIGl0ZXItPnZhbHVlLm5vdGlmeVdy
aXRlKCk7CisgICAgICAgIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKTsKICAgICAg
ICAgcmVnID0gJm9iamVjdC0+cmVnaXN0ZXJBdChmYXN0RW50cnkuZ2V0SW5kZXgoKSk7CiAgICAg
fQogICAgIC8vIEknZCBwcmVmZXIgd2Ugbm90IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFy
cmllcnMsIHNpbmNlIEkgcHJlZmVyIHRvIHJlc2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJh
cnJpZXJzIHRvIGJlIGFibGUgdG8gdHJpZ2dlciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xk
IFZNCiAgICAgLy8gbG9ja3Mgd2hpbGUgR0MnaW5nLgogICAgIHJlZy0+c2V0KHZtLCBvYmplY3Qs
IHZhbHVlKTsKKyAgICBpZiAoc2V0KQorICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKCk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Niw2ICsxNTgsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBI
ZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkpOwogCiAgICAgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IDA7CiAgICAg
ewogICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xUYWJs
ZSgpOwogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS5tX2xv
Y2spOwpAQCAtMTY0LDExICsxNjcsMTMgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRo
QXR0cmlidXRlcwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBTeW1ib2xUYWJs
ZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVs
bCgpKTsKLSAgICAgICAgZW50cnkubm90aWZ5V3JpdGUoKTsKKyAgICAgICAgc2V0ID0gZW50cnku
d2F0Y2hwb2ludFNldCgpOwogICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMp
OwogICAgICAgICByZWcgPSAmb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOwog
ICAgIH0KICAgICByZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CisgICAgaWYgKHNldCkKKyAg
ICAgICAgc2V0LT5ub3RpZnlXcml0ZSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lv
biAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDE0ICs2NSwxNSBAQCBib29sIFN5bWJvbFRhYmxlRW50
cnk6OmNvdWxkQmVXYXRjaGVkKCkKICAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50cyA9IGZh
dEVudHJ5KCktPm1fd2F0Y2hwb2ludHMuZ2V0KCk7CiAgICAgaWYgKCF3YXRjaHBvaW50cykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB3YXRjaHBvaW50cy0+aXNTdGlsbFZhbGlk
KCk7CisgICAgcmV0dXJuIHdhdGNocG9pbnRzLT5zdGF0ZSgpID09IElzV2F0Y2hlZDsKIH0KIAot
dm9pZCBTeW1ib2xUYWJsZUVudHJ5OjphdHRlbXB0VG9XYXRjaCgpCit2b2lkIFN5bWJvbFRhYmxl
RW50cnk6OnByZXBhcmVUb1dhdGNoKFdhdGNoU3RhdGUgc3RhdGUpCiB7CiAgICAgRmF0RW50cnkq
IGVudHJ5ID0gaW5mbGF0ZSgpOwotICAgIGlmICghZW50cnktPm1fd2F0Y2hwb2ludHMpCi0gICAg
ICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoSXNX
YXRjaGVkKSk7CisgICAgQVNTRVJUKCFlbnRyeS0+bV93YXRjaHBvaW50cyk7CisgICAgZW50cnkt
Pm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZigKKyAgICAgICAgbmV3IFdhdGNocG9pbnRTZXQoc3Rh
dGUgPT0gQWxyZWFkeUluaXRpYWxpemVkID8gSXNXYXRjaGVkIDogQ2xlYXJXYXRjaHBvaW50KSk7
CiB9CiAKIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50KiB3
YXRjaHBvaW50KQpAQCAtODYsNiArODcsMTIgQEAgdm9pZCBTeW1ib2xUYWJsZUVudHJ5Ojpub3Rp
ZnlXcml0ZVNsb3coKQogICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRzID0gZmF0RW50cnko
KS0+bV93YXRjaHBvaW50cy5nZXQoKTsKICAgICBpZiAoIXdhdGNocG9pbnRzKQogICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgaWYgKHdhdGNocG9pbnRzLT5zdGF0ZSgpID09IENsZWFyV2F0Y2hw
b2ludCkgeworICAgICAgICB3YXRjaHBvaW50cy0+c3RhcnRXYXRjaGluZygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAogICAgIHdhdGNocG9pbnRzLT5ub3RpZnlXcml0ZSgpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJl
dmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMCwxNSArMjIwLDggQEAgc3RydWN0IFN5bWJvbFRh
YmxlRW50cnkgewogICAgIAogICAgIGJvb2wgY291bGRCZVdhdGNoZWQoKTsKICAgICAKLSAgICAv
LyBOb3RpZnkgYW4gb3Bwb3J0dW5pdHkgdG8gY3JlYXRlIGEgd2F0Y2hwb2ludCBmb3IgYSB2YXJp
YWJsZS4gVGhpcyBpcwotICAgIC8vIGlkZW1wb3RlbnQgYW5kIGZhaWwtc2lsZW50LiBJdCBpcyBp
ZGVtcG90ZW50IGluIHRoZSBzZW5zZSB0aGF0IGlmCi0gICAgLy8gYSB3YXRjaHBvaW50IHNldCBo
YWQgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsIHRoZW4gYW5vdGhlciBvbmUgd2lsbCBub3QKLSAgICAv
LyBiZSBjcmVhdGVkLiBIZW5jZSB0d28gY2FsbHMgdG8gdGhpcyBtZXRob2QgaGF2ZSB0aGUgc2Ft
ZSBlZmZlY3QgYXMKLSAgICAvLyBvbmUgY2FsbC4gSXQgaXMgYWxzbyBmYWlsLXNpbGVudCwgaW4g
dGhlIHNlbnNlIHRoYXQgaWYgYSB3YXRjaHBvaW50Ci0gICAgLy8gc2V0IGhhZCBiZWVuIGNyZWF0
ZWQgYW5kIGhhZCBhbHJlYWR5IGJlZW4gaW52YWxpZGF0ZWQsIHRoZW4gdGhpcyB3aWxsCi0gICAg
Ly8ganVzdCByZXR1cm4uIFRoaXMgbWVhbnMgdGhhdCBjb3VsZEJlV2F0Y2hlZCgpIG1heSByZXR1
cm4gZmFsc2UgZXZlbgotICAgIC8vIGltbWVkaWF0ZWx5IGFmdGVyIGEgY2FsbCB0byBhdHRlbXB0
VG9XYXRjaCgpLgotICAgIHZvaWQgYXR0ZW1wdFRvV2F0Y2goKTsKKyAgICBlbnVtIFdhdGNoU3Rh
dGUgeyBOb3RJbml0aWFsaXplZCwgQWxyZWFkeUluaXRpYWxpemVkIH07CisgICAgdm9pZCBwcmVw
YXJlVG9XYXRjaChXYXRjaFN0YXRlKTsKICAgICAKICAgICB2b2lkIGFkZFdhdGNocG9pbnQoV2F0
Y2hwb2ludCopOwogICAgIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5NDc5KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMTEtMTgg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBJbmZlciBjb25zdGFu
dCBnbG9iYWwgdmFyaWFibGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjQ0NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2xvYmFsLXZhci1jb25zdC1pbmZlci1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2xvYmFsLXZhci1jb25zdC1pbmZlci5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nbG9iYWwtdmFy
LWNvbnN0LWluZmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChjaGVjayk6
CisKIDIwMTMtMTEtMTggIFN1bi13b28gTmFtICA8c3VubnkubmFtQHNhbXN1bmcuY29tPgogCiAg
ICAgICAgIFtFRkxdIExheW91dCB0ZXN0cyBuZWVkIHRvIGJlIHJlYmFzZWxpbmVkLgpJbmRleDog
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3Qt
aW5mZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZ2xvYmFsLXZhci1jb25zdC1pbmZlcgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5m
ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ds
b2JhbC12YXItY29uc3QtaW5mZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvZ2xvYmFsLXZhci1jb25zdC1pbmZlci5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dsb2JhbC12YXItY29uc3Qt
aW5mZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNyBAQAorZnVuY3Rpb24gZm9vKCkg
eworICAgIHJldHVybiBhICsgYjsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFyIGEgPSA0Owor
dmFyIGIgPSA1OworCitmdW5jdGlvbiBjaGVjayhhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYg
KGFjdHVhbCA9PSBleHBlY3RlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHRocm93ICJFcnJvcjog
ZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIiBidXQgZ290ICIgKyBhY3R1YWw7Cit9CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgY2hlY2soZm9vKCksIDkpOworCithID0gNjsK
KworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpCisgICAgY2hlY2soZm9vKCksIDExKTsK
KworYiA9IDc7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkKKyAgICBjaGVjayhm
b28oKSwgMTMpOwo=
</data>
<flag name="commit-queue"
          id="240381"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217311</attachid>
            <date>2013-11-19 10:29:56 -0800</date>
            <delta_ts>2013-11-19 13:03:01 -0800</delta_ts>
            <desc>thingy</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>53185</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5NDc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MCBA
QAorMjAxMy0xMS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEluZmVyIGNvbnN0YW50IGdsb2JhbCB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWxsIGdsb2JhbCB2YXJpYWJsZXMgdGhh
dCBhcmUgY2FuZGlkYXRlcyBmb3Igd2F0Y2hwb2ludC1iYXNlZCBjb25zdGFudCBpbmZlcmVuY2Ug
KGkuZS4KKyAgICAgICAgbm90ICdjb25zdCcgdmFyaWFibGVzKSB3aWxsIG5vdyBoYXZlIFdhdGNo
cG9pbnRTZXQncyBhc3NvY2lhdGVkIHdpdGggdGhlbSBhbmQgdGhvc2UKKyAgICAgICAgYXJlIHVz
ZWQgdG8gZHJpdmUgdGhlIGluZmVyZW5jZSBieSB0cmFja2luZyB0aHJlZSBzdGF0ZXMgb2YgZWFj
aCB2YXJpYWJsZToKKyAgICAgICAgCisgICAgICAgIFVuaW5pdGlhbGl6ZWQ6IHRoZSB2YXJpYWJs
ZSdzIHZhbHVlIGlzIFVuZGVmaW5lZCBhbmQgdGhlIFdhdGNocG9pbnRTZXQgc3RhdGUgaXMKKyAg
ICAgICAgICAgIENsZWFyV2F0Y2hwb2ludC4KKyAgICAgICAgCisgICAgICAgIEluaXRpYWxpemVk
OiB0aGUgdmFyaWFibGUncyB2YWx1ZSB3YXMgc2V0IHRvIHNvbWV0aGluZyAoY291bGQgZXZlbiBi
ZSBleHBsaWNpdGx5IHNldAorICAgICAgICAgICAgdG8gVW5kZWZpbmVkKSBhbmQgdGhlIFdhdGNo
cG9pbnRTZXQgc3RhdGUgaXMgSXNXYXRjaGluZy4KKyAgICAgICAgCisgICAgICAgIEludmFsaWRh
dGVkOiB0aGUgdmFyaWFibGUncyB2YWx1ZSB3YXMgc2V0IHRvIHNvbWV0aGluZyBlbHNlIChjb3Vs
ZCBldmVuIGJlIHRoZSBzYW1lCisgICAgICAgICAgICB0aGluZyBhcyBiZWZvcmUgYnV0IHRoZSBw
b2ludCBpcyB0aGF0IGEgcHV0IG9wZXJhdGlvbiBkaWQgZXhlY3V0ZSBhZ2FpbikgYW5kIHRoZQor
ICAgICAgICAgICAgV2F0Y2hwb2ludFNldCBpcyBJc0ludmFsaWRhdGVkLgorICAgICAgICAKKyAg
ICAgICAgSWYgdGhlIGNvbXBpbGVyIHRyaWVzIHRvIGNvbXBpbGUgYSBHZXRHbG9iYWxWYXIgYW5k
IHRoZSBXYXRjaHBvaW50U2V0IHN0YXRlIGlzCisgICAgICAgIElzV2F0Y2hpbmcsIHRoZW4gdGhl
IGN1cnJlbnQgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGNhbiBiZSBmb2xkZWQgaW4gcGxhY2Ugb2Yg
dGhlIGdldCwKKyAgICAgICAgYW5kIGEgd2F0Y2hwb2ludCBvbiB0aGUgdmFyaWFibGUgY2FuIGJl
IHJlZ2lzdGVyZWQuCisgICAgICAgIAorICAgICAgICBXZSBoYW5kbGUgcmFjZSBjb25kaXRpb25z
IGJldHdlZW4gdGhlIG11dGF0b3IgYW5kIGNvbXBpbGVyIGJ5IG1hbmRhdGluZyB0aGF0OgorICAg
ICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBjaGFuZ2VzIHRoZSBXYXRjaHBvaW50U2V0IHN0
YXRlIGFmdGVyIGV4ZWN1dGluZyB0aGUgcHV0LgorICAgICAgICAKKyAgICAgICAgLSBUaGUgY29t
cGlsZXIgY2hlY2tzIHRoZSBXYXRjaHBvaW50U2V0IHN0YXRlIHByaW9yIHRvIHJlYWRpbmcgdGhl
IHZhbHVlLgorICAgICAgICAKKyAgICAgICAgVGhlIGNvbmNyZXRlIGFsZ29yaXRobSB1c2VkIGJ5
IHRoZSBtdXRhdG9yIGlzOgorICAgICAgICAKKyAgICAgICAgICAgIDEuIFN0b3JlIHRoZSBuZXcg
dmFsdWUgaW50byB0aGUgdmFyaWFibGUuCisgICAgICAgICAgICAtLS0gRXhlY3V0ZSBhIHN0b3Jl
LXN0b3JlIGZlbmNlLgorICAgICAgICAgICAgMi4gQnVtcCB0aGUgc3RhdGUgKENsZWFyV2F0Y2hw
b2luZyBiZWNvbWVzIElzV2F0Y2hpbmcsIElzV2F0Y2hpbmcgYmVjb21lcworICAgICAgICAgICAg
ICAgSXNJbnZhbGlkYXRlZCkKKyAgICAgICAgCisgICAgICAgIFRoZSBjb25jcmV0ZSBhbGdvcml0
aG0gdGhhdCB0aGUgY29tcGlsZXIgdXNlcyBpczoKKyAgICAgICAgCisgICAgICAgICAgICAxLiBM
b2FkIHRoZSBzdGF0ZS4gSWYgaXQncyAqbm90KiBJc1dhdGNoaW5nLCB0aGVuIGdpdmUgdXAgb24g
Y29uc3RhbnQgaW5mZXJlbmNlLgorICAgICAgICAgICAgLS0tIEV4ZWN1dGUgYSBsb2FkLWxvYWQg
ZmVuY2UuCisgICAgICAgICAgICAyLiBMb2FkIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgYW5k
IHVzZSB0aGF0IGZvciBmb2xkaW5nLCB3aGlsZSBhbHNvIHJlZ2lzdGVyaW5nCisgICAgICAgICAg
ICAgICBhIERlc2lyZWRXYXRjaHBvaW50LiBUaGUgdmFyaW91cyBwYXJ0cyBvZiB0aGlzIHN0ZXAg
Y2FuIGJlIGRvbmUgaW4gYW55IG9yZGVyLgorICAgICAgICAKKyAgICAgICAgVGhlIGRlc2lyZWQg
d2F0Y2hwb2ludCByZWdpc3RyYXRpb24gd2lsbCBmYWlsIGlmIHRoZSB3YXRjaHBvaW50IHNldCBp
cyBhbHJlYWR5CisgICAgICAgIGludmFsaWRhdGVkLiBOb3cgY29uc2lkZXIgdGhlIGZvbGxvd2lu
ZyBpbnRlcmVzdGluZyBpbnRlcmxlYXZpbmdzOyBub3RlIHRoYXQgdGhlCisgICAgICAgIGZlbmNl
cyBhcmUgb21pdHRlZCBzaW5jZSB0aGV5IGFyZSBqdXN0IHRoZXJlIHRvIGVuc3VyZSBzZXF1ZW50
aWFsIGNvbnNpc3RlbmN5OgorICAgICAgICAKKyAgICAgICAgVW5pbml0aWFsaXplZC0+TTEtPk0y
LT5DMS0+QzI6IENvbXBpbGVyIHNlZXMgSXNXYXRjaGluZyBiZWNhdXNlIG9mIHRoZSBtdXRhdG9y
J3Mgc3RvcmUKKyAgICAgICAgICAgIG9wZXJhdGlvbiwgYW5kIHRoZSB2YXJpYWJsZSBpcyBmb2xk
ZWQuIFRoZSBmZW5jaW5nIGVuc3VyZXMgdGhhdCBDMiBzZWVzIHRoZSB2YWx1ZQorICAgICAgICAg
ICAgc3RvcmVkIGluIE0xIC0gaS5lLiB3ZSBmb2xkIG9uIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYWN0
dWFsbHkgYmUgd2F0Y2hwb2ludGVkLiBJZgorICAgICAgICAgICAgYmVmb3JlIHRoZSBjb21waWxh
dGlvbiBpcyBpbnN0YWxsZWQgdGhlIG11dGF0b3IgZXhlY3V0ZXMgYW5vdGhlciBzdG9yZSB0aGVu
IHdlCisgICAgICAgICAgICB3aWxsIGJlIHN1cmUgdGhhdCBpdCB3aWxsIGJlIGEgY29tcGxldGUg
c2VxdWVuY2Ugb2YgTTErTTIgc2luY2UgY29tcGlsYXRpb25zIGdldAorICAgICAgICAgICAgaW5z
dGFsbGVkIGF0IHNhZmVwb2ludHMgYW5kIG5ldmVyICJpbiB0aGUgbWlkZGxlIiBvZiBhIHB1dF90
b19zY29wZS4gSGVuY2UgdGhhdAorICAgICAgICAgICAgY29tcGlsYXRpb24gaW5zdGFsbGF0aW9u
IHdpbGwgYmUgaW52YWxpZGF0ZWQuIElmIHRoZSBNMStNMiBzZXF1ZW5jZSBoYXBwZW5zIGFmdGVy
CisgICAgICAgICAgICB0aGUgY29kZSBpcyBpbnN0YWxsZWQsIHRoZW4gdGhlIGNvZGUgd2lsbCBi
ZSBpbnZhbGlkYXRlZCBieSB0cmlnZ2VyaW5nIGEgamV0dGlzb24uCisgICAgICAgIAorICAgICAg
ICBVbmluaXRpYWxpemVkLT5NMS0+QzEtPkMyLT5NMjogQ29tcGlsZXIgc2VlcyBVbmluaXRpYWxp
emVkIGFuZCB3aWxsIG5vdCBmb2xkLiBUaGlzIGlzCisgICAgICAgICAgICBhIHNlbnNpYmxlIG91
dGNvbWUgc2luY2UgaWYgdGhlIGNvbXBpbGVyIHJlYWQgdGhlIHZhcmlhYmxlJ3MgdmFsdWUsIGl0
IHdvdWxkIGhhdmUKKyAgICAgICAgICAgIHNlZW4gVW5kZWZpbmVkLgorICAgICAgICAKKyAgICAg
ICAgVW5pbml0aWFsaXplZC0+QzEtPkMyLT5NMS0+TTI6IENvbXBpbGVyIHNlZXMgVW5pbml0aWFs
aXplZCBhbmQgd2lsbCBub3QgZm9sZC4KKyAgICAgICAgVW5pbml0aWFsaXplZC0+QzEtPk0xLT5D
Mi0+TTI6IENvbXBpbGVyIHNlZXMgVW5pbml0aWFsaXplZCBhbmQgd2lsbCBub3QgZm9sZC4KKyAg
ICAgICAgVW5pbml0aWFsaXplZC0+QzEtPk0xLT5NMi0+QzI6IENvbXBpbGVyIHNlZXMgVW5pbml0
aWFsaXplZCBhbmQgd2lsbCBub3QgZm9sZC4KKyAgICAgICAgVW5pbml0aWFsaXplZC0+TTEtPkMx
LT5NMi0+QzI6IENvbXBpbGVyIHNlZXMgVW5pbml0aWFsaXplZCBhbmQgd2lsbCBub3QgZm9sZC4K
KyAgICAgICAgCisgICAgICAgIElzV2F0Y2hlZC0+TTEtPk0yLT5DMS0+QzI6IENvbXBpbGVyIHNl
ZXMgSXNJbnZhbGlkYXRlZCBhbmQgd2lsbCBub3QgZm9sZC4KKyAgICAgICAgCisgICAgICAgIElz
V2F0Y2hlZC0+TTEtPkMxLT5DMi0+TTI6IENvbXBpbGVyIHdpbGwgZm9sZCwgYnV0IHdpbGwgYWxz
byByZWdpc3RlciBhIGRlc2lyZWQKKyAgICAgICAgICAgIHdhdGNocG9pbnQsIGFuZCB0aGF0IHdh
dGNocG9pbnQgd2lsbCBnZXQgaW52YWxpZGF0ZWQgYmVmb3JlIHRoZSBjb2RlIGlzIGluc3RhbGxl
ZC4KKyAgICAgICAgCisgICAgICAgIElzV2F0Y2hlZC0+TTEtPkMxLT5NMi0+QzI6IEFzIGFib3Zl
LCB3aWxsIGZvbGQgYnV0IHRoZSBjb2RlIHdpbGwgZ2V0IGludmFsaWRhdGVkLgorICAgICAgICBJ
c1dhdGNoZWQtPkMxLT5DMi0+TTEtPk0yOiBBcyBhYm92ZSwgd2lsbCBmb2xkIGJ1dCB0aGUgY29k
ZSB3aWxsIGdldCBpbnZhbGlkYXRlZC4KKyAgICAgICAgSXNXYXRjaGVkLT5DMS0+TTEtPkMyLT5N
MjogQXMgYWJvdmUsIHdpbGwgZm9sZCBidXQgdGhlIGNvZGUgd2lsbCBnZXQgaW52YWxpZGF0ZWQu
CisgICAgICAgIElzV2F0Y2hlZC0+QzEtPk0xLT5NMi0+QzI6IEFzIGFib3ZlLCB3aWxsIGZvbGQg
YnV0IHRoZSBjb2RlIHdpbGwgZ2V0IGludmFsaWRhdGVkLgorICAgICAgICAKKyAgICAgICAgTm90
ZSB0aGF0IHRoaXMga2luZCBvZiByZWFzb25pbmcgc2hvd3Mgd2h5IGhhdmluZyB0aGUgbXV0YXRv
ciBmaXJzdCBidW1wIHRoZSBzdGF0ZSBhbmQKKyAgICAgICAgdGhlbiBzdG9yZSB0aGUgbmV3IHZh
bHVlIHdvdWxkIGJlIHdyb25nLiBJZiB3ZSBoYWQgZG9uZSB0aGF0IChNMSA9IGJ1bXAgc3RhdGUs
IE0yID0KKyAgICAgICAgZXhlY3V0ZSBwdXQpIHRoZW4gd2UgY291bGQgaGF2ZSB0aGUgZm9sbG93
aW5nIGRlYWRseSBpbnRlcmxlYXZpbmdzOgorICAgICAgICAKKyAgICAgICAgVW5pbml0aWFsaXpl
ZC0+TTEtPkMxLT5DMi0+TTI6CisgICAgICAgIFVuaW5pdGlhbGl6ZWQtPk0xLT5DMS0+TTItPkMy
OiBNdXRhdG9yIGJ1bXBzIHRoZSBzdGF0ZSB0byBJc1dhdGNoZWQgYW5kIHRoZW4gdGhlCisgICAg
ICAgICAgICBjb21waWxlciBmb2xkcyBVbmRlZmluZWQsIHNpbmNlIE0yIGhhc24ndCBleGVjdXRl
ZCB5ZXQuIEFsdGhvdWdoIEMyIHdpbGwgc2V0IHRoZQorICAgICAgICAgICAgd2F0Y2hwb2ludCwg
TTEgZGlkbid0IG5vdGlmeSBpdCAtIGl0IG1lYXJseSBpbml0aWF0ZWQgd2F0Y2hpbmcuIE0yIHRo
ZW4gc3RvcmVzIGEKKyAgICAgICAgICAgIHZhbHVlIG90aGVyIHRoYW4gVW5kZWZpbmVkLCBhbmQg
eW91J3JlIHRvYXN0LgorICAgICAgICAKKyAgICAgICAgWW91IGNvdWxkIGZpeCB0aGlzIHNvcnQg
b2YgdGhpbmcgYnkgbWFraW5nIHRoZSBEZXNpcmVkIFdhdGNocG9pbnRzIG1hY2hpbmVyeSBtb3Jl
CisgICAgICAgIHNvcGhpc3RpY2F0ZWQsIGZvciBleGFtcGxlIGhhdmluZyBpdCB0cmFjayB0aGUg
dmFsdWUgdGhhdCB3YXMgZm9sZGVkOyBpZiB0aGUgZ2xvYmFsCisgICAgICAgIHZhcmlhYmxlJ3Mg
dmFsdWUgd2FzIGxhdGVyIGZvdW5kIHRvIGJlIGRpZmZlcmVudCB0aGVuIHdlIGNvdWxkIGludmFs
aWRhdGUgdGhlCisgICAgICAgIGNvbXBpbGF0aW9uLiBJIGRlY2lkZWQgdG8gaW5zdGVhZCBqdXN0
IHVzZSB0aGUgcmlnaHQgaW50ZXJsZWF2aW5nLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBh
IDAuNSUgc3BlZWQtdXAgb24gU3VuU3BpZGVyLCBtb3N0bHkgZHVlIHRvIGEgMjAlIHNwZWVkLXVw
IG9uIG1hdGgtY29yZGljLgorICAgICAgICBJdCdzIGEgMC42JSBzbG93LWRvd24gb24gTG9uZ1Nw
aWRlciwgbW9zdGx5IGR1ZSB0byBhIDI1JSBzbG93LWRvd24gb24gM2QtY3ViZS4gVGhpcyBpcwor
ICAgICAgICBiZWNhdXNlIDNkLWN1YmUgdGFrZXMgZ2xvYmFsIHZhcmlhYmxlIGFzc2lnbm1lbnQg
c2xvdyBwYXRocyB2ZXJ5IG9mdGVuLiBOb3RlIHRoYXQgdGhpcworICAgICAgICAzZC1jdWJlIHNs
b3ctZG93biBkb2Vzbid0IG1hbmlmZXN0IGFzIG11Y2ggaW4gU3VuU3BpZGVyIChvbmx5IDYlIHRo
ZXJlKS4gVGhpcyBwYXRjaCBpcworICAgICAgICBhbHNvIGEgMS41JSBzcGVlZC11cCBvbiBWOHY3
IGFuZCBhIDIuOCUgc3BlZWQtdXAgb24gT2N0YW5lIHYxLCBtb3N0bHkgZHVlIHRvIGRlbHRhYmx1
ZQorICAgICAgICAoMy43JSksIHJpY2hhcmRzICg0JSksIGFuZCBtYW5kcmVlbCAoMjYlKS4gVGhp
cyBpcyBhIDIlIHNwZWVkLXVwIG9uIEtyYWtlbiwgbW9zdGx5IGR1ZQorICAgICAgICB0byBhIDE3
LjUlIHNwZWVkLXVwIG9uIGltYWdpbmctZ2F1c3NpYW4tYmx1ci4gU29tZXRoaW5nIHRoYXQgcmVh
bGx5IGlsbHVzdHJhdGVzIHRoZQorICAgICAgICBzbGFtLWR1bmstaXR1ZGUgb2YgdGhpcyBwYXRj
aCBpcyB0aGUgd2lkZSByYW5nZSBvZiBzcGVlZC11cHMgb24gSlNSZWdyZXNzLiBDYXN1YWwgSlMK
KyAgICAgICAgcHJvZ3JhbW1pbmcgb2Z0ZW4gbGVhZHMgdG8gZ2xvYmFsLXZhci1iYXNlZCBpZGlv
bXMgYW5kIHRob3NlIHZhcmlhYmxlcyB0ZW5kIHRvIGJlCisgICAgICAgIGFzc2lnbmVkIG9uY2Us
IGxlYWRpbmcgdG8gZXhjZWxsZW50IGNvbnN0YW50IGZvbGRpbmcgb3Bwb3J0dW5pdGllcyBpbiBh
biBvcHRpbWl6aW5nCisgICAgICAgIEpJVC4gVGhpcyBpcyB2ZXJ5IGV2aWRlbnQgaW4gdGhlIHNw
ZWVkLXVwcyBvbiBKU1JlZ3Jlc3MuCisgICAgICAgIAorICAgICAgICBUaGlzIHN0aWxsIG5lZWRz
IHNvbWUgcG9ydGluZyBhbmQgYnVpbGQgbG92ZSwgYnV0IG90aGVyd2lzZSBpdCdzIHJlYWR5IHRv
IHJldmlldy4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5o
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bWVtb3J5RmVuY2UpOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bG9hZDgpOgorICAgICAgICAqIGFzc2VtYmxlci9YODZB
c3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjptZmVuY2UpOgorICAgICAg
ICAoSlNDOjpYODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0dGVyOjp0aHJlZUJ5dGVP
cCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1dhdGNocG9pbnQuY3BwOgor
ICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjpXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpT
Qzo6V2F0Y2hwb2ludFNldDo6YWRkKToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6bm90
aWZ5V3JpdGVTbG93KToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAg
IChKU0M6OldhdGNocG9pbnRTZXQ6OnN0YXRlKToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludFNl
dDo6aXNTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6YWRkcmVzc09m
U2V0SXNOb3RFbXB0eSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0SlNDb25zdGFudEZvclZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6Z2V0SlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICog
ZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc1N0cm9uZ2x5UHJvdmVk
Q29uc3RhbnRJbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSWRlbnRpZmllck51bWJl
ckZvckNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNSZWdpc3RlclBvaW50ZXIp
OgorICAgICAgICAqIGRmZy9ERkdOb2RlRmxhZ3MuaDoKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5
cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpw
cm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vdGlmeVB1
dEdsb2JhbFZhcik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAg
ICAgICAqIG9mZmxpbmVhc20vYXJtLnJiOgorICAgICAgICAqIG9mZmxpbmVhc20vYXJtNjQucmI6
CisgICAgICAgICogb2ZmbGluZWFzbS9jbG9vcC5yYjoKKyAgICAgICAgKiBvZmZsaW5lYXNtL2lu
c3RydWN0aW9ucy5yYjoKKyAgICAgICAgKiBvZmZsaW5lYXNtL3g4Ni5yYjoKKyAgICAgICAgKiBy
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6
OmFkZEdsb2JhbFZhcik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6YWRkVmFyKToKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OmFkZENvbnN0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFkZEZ1
bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjph
YnN0cmFjdEFjY2Vzcyk6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5jcHA6CisgICAg
ICAgIChKU0M6OlN5bWJvbFRhYmxlRW50cnk6OmNvdWxkQmVXYXRjaGVkKToKKyAgICAgICAgKEpT
Qzo6U3ltYm9sVGFibGVFbnRyeTo6cHJlcGFyZVRvV2F0Y2gpOgorICAgICAgICAoSlNDOjpTeW1i
b2xUYWJsZUVudHJ5Ojpub3RpZnlXcml0ZVNsb3cpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9s
VGFibGUuaDoKKwogMjAxMy0xMS0xOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNv
bT4KIAogICAgICAgICBBUk02NCBDUkFTSDogRGVidWcgYnVpbGRzIGNyYXNoIGluIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxNTk0NjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyNCw2ICs2MjQsMjUgQEAgcHVibGljOgogI2VuZGlm
CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJfcm0oc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKICAgICB9CisgICAgCisgICAg
dm9pZCBzdG9yZTgoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisjaWYg
Q1BVKFg4NikKKyAgICAgICAgLy8gT24gMzItYml0IHg4NiB3ZSBjYW4gb25seSBzdG9yZSBmcm9t
IHRoZSBmaXJzdCA0IHJlZ2lzdGVyczsKKyAgICAgICAgLy8gZXNwLi5lZGkgYXJlIG1hcHBlZCB0
byB0aGUgJ2gnIHJlZ2lzdGVycyEKKyAgICAgICAgaWYgKHNyYyA+PSA0KSB7CisgICAgICAgICAg
ICAvLyBQaWNrIGEgdGVtcG9yYXJ5IHJlZ2lzdGVyLgorICAgICAgICAgICAgUmVnaXN0ZXJJRCB0
ZW1wID0gZ2V0VW51c2VkUmVnaXN0ZXIoYWRkcmVzcyk7CisKKyAgICAgICAgICAgIC8vIFN3YXAg
dG8gdGhlIHRlbXBvcmFyeSByZWdpc3RlciB0byBwZXJmb3JtIHRoZSBzdG9yZS4KKyAgICAgICAg
ICAgIHN3YXAoc3JjLCB0ZW1wKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJfcm0odGVt
cCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBzd2FwKHNyYywg
dGVtcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZiX3JtKHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7Cisg
ICAgfQogCiAgICAgdm9pZCBzdG9yZTE2KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVz
cykKICAgICB7CkBAIC0xNDE5LDYgKzE0MzgsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIubm9wKCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgbWVtb3J5RmVuY2UoKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubWZlbmNlKCk7CisgICAgfQogCiAgICAgc3RhdGlj
IHZvaWQgcmVwbGFjZVdpdGhKdW1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQs
IENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJ
KHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwdWJs
aWM6CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmJyYW5jaEFkZDMyOwogICAg
IHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjMyOwogICAgIHVzaW5nIE1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uOjpzdWIzMjsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bjo6bG9hZDg7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmxvYWQzMjsKICAg
ICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6c3RvcmUzMjsKICAgICB1c2luZyBNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbjo6c3RvcmU4OwpAQCAtOTEsNiArOTIsMTIgQEAgcHVibGljOgog
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rl
cik7CiAgICAgICAgIHN1YjMyKGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIpKTsKICAgICB9
CisgICAgCisgICAgdm9pZCBsb2FkOChjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcyksIGRlc3QpOwor
ICAgICAgICBsb2FkOChkZXN0LCBkZXN0KTsKKyAgICB9CiAKICAgICB2b2lkIGxvYWQzMihjb25z
dCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewpAQCAtMTI2LDYgKzEzMywx
MiBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlOChpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVy
KSk7CiAgICAgfQogCisgICAgdm9pZCBzdG9yZTgoUmVnaXN0ZXJJRCByZWcsIHZvaWQqIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcyksIHNjcmF0Y2hS
ZWdpc3Rlcik7CisgICAgICAgIHN0b3JlOChyZWcsIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7
CisgICAgfQorCiAgICAgQ2FsbCBjYWxsKCkKICAgICB7CiAgICAgICAgIERhdGFMYWJlbFB0ciBs
YWJlbCA9IG1vdmVXaXRoUGF0Y2goVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaFJlZ2lzdGVyKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIu
aAkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Y
ODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDYgKzI2Nyw3IEBAIHByaXZhdGU6
CiAgICAgICAgIE9QMl9NT1ZEX0VkVmQgICAgICAgPSAweDdFLAogICAgICAgICBPUDJfSkNDX3Jl
bDMyICAgICAgID0gMHg4MCwKICAgICAgICAgT1BfU0VUQ0MgICAgICAgICAgICA9IDB4OTAsCisg
ICAgICAgIE9QMl8zQllURV9FU0NBUEUgICAgPSAweEFFLAogICAgICAgICBPUDJfSU1VTF9HdkV2
ICAgICAgID0gMHhBRiwKICAgICAgICAgT1AyX01PVlpYX0d2RWIgICAgICA9IDB4QjYsCiAgICAg
ICAgIE9QMl9NT1ZTWF9HdkViICAgICAgPSAweEJFLApAQCAtMjc3LDYgKzI3OCwxMCBAQCBwcml2
YXRlOgogICAgICAgICBPUDJfUFNSTFFfVWRxSWIgICAgID0gMHg3MywKICAgICAgICAgT1AyX1BP
Ul9WZHFXZHEgICAgICA9IDBYRUIsCiAgICAgfSBUd29CeXRlT3Bjb2RlSUQ7CisgICAgCisgICAg
dHlwZWRlZiBlbnVtIHsKKyAgICAgICAgT1AzX01GRU5DRSAgICAgICAgICA9IDB4RjAsCisgICAg
fSBUaHJlZUJ5dGVPcGNvZGVJRDsKIAogICAgIFR3b0J5dGVPcGNvZGVJRCBqY2NSZWwzMihDb25k
aXRpb24gY29uZCkKICAgICB7CkBAIC0xMzAzLDYgKzEzMDgsMTEgQEAgcHVibGljOgogICAgICAg
ICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgbW92
Yl9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsK
KyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wOChPUF9NT1ZfRWJHYiwgc3JjLCBiYXNlLCBv
ZmZzZXQpOworICAgIH0KKyAgICAKICAgICB2b2lkIG1vdmJfcm0oUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQog
ICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wOChPUF9NT1ZfRWJHYiwgc3JjLCBi
YXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CkBAIC0xODczLDcgKzE4ODMsNyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfU1NFX0YyKTsKICAgICAgICAgbV9mb3Jt
YXR0ZXIudHdvQnl0ZU9wKE9QMl9TUVJUU0RfVnNkV3NkLCAoUmVnaXN0ZXJJRClkc3QsIChSZWdp
c3RlcklEKXNyYyk7CiAgICAgfQotCisgICAgCiAgICAgLy8gTWlzYyBpbnN0cnVjdGlvbnM6CiAK
ICAgICB2b2lkIGludDMoKQpAQCAtMTg5MCw2ICsxOTAwLDExIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLnByZWZpeChQUkVfUFJFRElDVF9CUkFOQ0hfTk9UX1RBS0VOKTsK
ICAgICB9CisgICAgCisgICAgdm9pZCBtZmVuY2UoKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0
ZXIudGhyZWVCeXRlT3AoT1AzX01GRU5DRSk7CisgICAgfQogCiAgICAgLy8gQXNzZW1ibGVyIGFk
bWluIG1ldGhvZHM6CiAKQEAgLTIzMDEsNiArMjMxNiwxNCBAQCBwcml2YXRlOgogICAgICAgICB9
CiAjZW5kaWYKIAorICAgICAgICB2b2lkIHRocmVlQnl0ZU9wKFRocmVlQnl0ZU9wY29kZUlEIG9w
Y29kZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5z
dHJ1Y3Rpb25TaXplKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEJ5dGVVbmNoZWNrZWQoT1Bf
MkJZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEJ5dGVVbmNoZWNrZWQoT1Ay
XzNCWVRFX0VTQ0FQRSk7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRCeXRlVW5jaGVja2VkKG9w
Y29kZSk7CisgICAgICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgICAgIC8vIFF1YWQtd29y
ZC1zaXplZCBvcGVyYW5kczoKICAgICAgICAgLy8KQEAgLTI0MTMsNiArMjQzNiwxNCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgcmVnaXN0ZXJNb2RSTShyZWcsIHJtKTsKICAgICAgICAgfQogCisg
ICAgICAgIHZvaWQgb25lQnl0ZU9wOChPbmVCeXRlT3Bjb2RlSUQgb3Bjb2RlLCBpbnQgcmVnLCBS
ZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVm
ZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSk7CisgICAgICAgICAgICBlbWl0UmV4
SWYoYnl0ZVJlZ1JlcXVpcmVzUmV4KHJlZykgfHwgYnl0ZVJlZ1JlcXVpcmVzUmV4KGJhc2UpLCBy
ZWcsIDAsIGJhc2UpOworICAgICAgICAgICAgbV9idWZmZXIucHV0Qnl0ZVVuY2hlY2tlZChvcGNv
ZGUpOworICAgICAgICAgICAgbWVtb3J5TW9kUk0ocmVnLCBiYXNlLCBvZmZzZXQpOworICAgICAg
ICB9CisKICAgICAgICAgdm9pZCBvbmVCeXRlT3A4KE9uZUJ5dGVPcGNvZGVJRCBvcGNvZGUsIGlu
dCByZWcsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBpbnQg
b2Zmc2V0KQogICAgICAgICB7CiAgICAgICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJ
bnN0cnVjdGlvblNpemUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODM3LDkgKzE4Mzcs
NiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAg
ICBpZiAoZW50cnkuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgIC8vIEl0J3MgbGlrZWx5IHRoYXQgd2UnbGwgd3JpdGUgdG8gdGhpcyB2YXIsIHNvIG5vdGlm
eSBub3cgYW5kIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBkb2luZyBzbyBhdCBydW50aW1lLgotICAg
ICAgICAgICAgZW50cnkubm90aWZ5V3JpdGUoKTsKLQogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyAwXSA9IHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUob3BfaW5pdF9nbG9iYWxfY29u
c3QpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAxXSA9ICZtX2dsb2JhbE9iamVjdC0+
cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAkocmV2aXNp
b24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIFdhdGNocG9pbnQ6On5XYXRjaHBv
aW50KCkKIAogV2F0Y2hwb2ludFNldDo6V2F0Y2hwb2ludFNldChXYXRjaHBvaW50U3RhdGUgc3Rh
dGUpCiAgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgICwgbV9zZXRJc05vdEVtcHR5KGZhbHNlKQog
ewogfQogCkBAIC02MCw2ICs2MSw3IEBAIHZvaWQgV2F0Y2hwb2ludFNldDo6YWRkKFdhdGNocG9p
bnQqIHdhdGMKICAgICBpZiAoIXdhdGNocG9pbnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Nl
dC5wdXNoKHdhdGNocG9pbnQpOworICAgIG1fc2V0SXNOb3RFbXB0eSA9IHRydWU7CiAgICAgbV9z
dGF0ZSA9IElzV2F0Y2hlZDsKIH0KIApAQCAtNjcsNiArNjksNyBAQCB2b2lkIFdhdGNocG9pbnRT
ZXQ6Om5vdGlmeVdyaXRlU2xvdygpCiB7CiAgICAgQVNTRVJUKHN0YXRlKCkgPT0gSXNXYXRjaGVk
KTsKICAgICAKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIGZpcmVBbGxXYXRjaHBv
aW50cygpOwogICAgIG1fc3RhdGUgPSBJc0ludmFsaWRhdGVkOwogICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2lu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBv
aW50LmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDE4IEBAIHB1YmxpYzoK
ICAgICBXYXRjaHBvaW50U2V0KFdhdGNocG9pbnRTdGF0ZSk7CiAgICAgfldhdGNocG9pbnRTZXQo
KTsgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBub3QgZmlyZSBhbnkgb2YgdGhlIHdhdGNocG9pbnRz
OyBpZiB5b3UgbmVlZCB0byBrbm93IHdoZW4gYSBXYXRjaHBvaW50U2V0IGRpZXMgdGhlbiB5b3Ug
bmVlZCBhIHNlcGFyYXRlIG1lY2hhbmlzbSBmb3IgdGhpcy4KICAgICAKLSAgICBXYXRjaHBvaW50
U3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxXYXRjaHBvaW50U3RhdGU+
KG1fc3RhdGUpOyB9CisgICAgLy8gSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgZnJvbSBhbm90aGVy
IHRocmVhZC4gSXQgbWF5IHJldHVybiBhbiBvbGQKKyAgICAvLyBzdGF0ZS4gR3VhcmFudGVlcyB0
aGF0IGlmICpmaXJzdCogcmVhZCB0aGUgc3RhdGUoKSBvZiB0aGUgdGhpbmcgYmVpbmcKKyAgICAv
LyB3YXRjaGVkIGFuZCBpdCByZXR1cm5lZCBJc1dhdGNoZWQgYW5kICpzZWNvbmQqIHlvdSBhY3R1
YWxseSByZWFkIGl0cworICAgIC8vIHZhbHVlIHRoZW4gaXQncyBzYWZlIHRvIGFzc3VtZSB0aGF0
IGlmIHRoZSBzdGF0ZSBiZWluZyB3YXRjaGVkIGNoYW5nZXMKKyAgICAvLyB0aGVuIGFsc28gdGhl
IHdhdGNocG9pbnQgc3RhdGUoKSB3aWxsIGNoYW5nZSB0byBJc0ludmFsaWRhdGVkLgorICAgIFdh
dGNocG9pbnRTdGF0ZSBzdGF0ZSgpIGNvbnN0CisgICAgeworICAgICAgICBXVEY6OmxvYWRMb2Fk
RmVuY2UoKTsKKyAgICAgICAgV2F0Y2hwb2ludFN0YXRlIHJlc3VsdCA9IHN0YXRpY19jYXN0PFdh
dGNocG9pbnRTdGF0ZT4obV9zdGF0ZSk7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KICAgICAKICAgICAvLyBJdCBpcyBzYWZlIHRv
IGNhbGwgdGhpcyBmcm9tIGFub3RoZXIgdGhyZWFkLiAgSXQgbWF5IHJldHVybiB0cnVlCiAgICAg
Ly8gZXZlbiBpZiB0aGUgc2V0IGFjdHVhbGx5IGhhZCBiZWVuIGludmFsaWRhdGVkLCBidXQgdGhh
dCBvdWdodCB0byBoYXBwZW4KQEAgLTY5LDcgKzgwLDYgQEAgcHVibGljOgogICAgIC8vIGlzc3Vp
bmcgYSBsb2FkLWxvYWQgZmVuY2UgcHJpb3IgdG8gcXVlcnlpbmcgdGhlIHN0YXRlLgogICAgIGJv
b2wgaXNTdGlsbFZhbGlkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5j
ZSgpOwogICAgICAgICByZXR1cm4gc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkOwogICAgIH0KICAg
ICAvLyBMaWtlIGlzU3RpbGxWYWxpZCgpLCBtYXkgYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0aHJl
YWQuCkBAIC05OSw2ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgaW50OF90KiBhZGRy
ZXNzT2ZTdGF0ZSgpIHsgcmV0dXJuICZtX3N0YXRlOyB9CisgICAgaW50OF90KiBhZGRyZXNzT2ZT
ZXRJc05vdEVtcHR5KCkgeyByZXR1cm4gJm1fc2V0SXNOb3RFbXB0eTsgfQogICAgIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgbm90aWZ5V3JpdGVTbG93KCk7IC8vIENhbGwgb25seSBpZiB5
b3UndmUgY2hlY2tlZCBpc1dhdGNoZWQuCiAgICAgCkBAIC0xMDksNiArMTIwLDcgQEAgcHJpdmF0
ZToKICAgICAKICAgICBTZW50aW5lbExpbmtlZExpc3Q8V2F0Y2hwb2ludCwgQmFzaWNSYXdTZW50
aW5lbE5vZGU8V2F0Y2hwb2ludD4+IG1fc2V0OwogICAgIGludDhfdCBtX3N0YXRlOworICAgIGlu
dDhfdCBtX3NldElzTm90RW1wdHk7CiB9OwogCiAvLyBJbmxpbmVXYXRjaHBvaW50U2V0IGlzIGEg
bG93LW92ZXJoZWFkLCBub24tY29weWFibGUgd2F0Y2hwb2ludCBzZXQgaW4gd2hpY2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTUxMSw2ICsxNTExLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0R2xvYmFsVmFy
OgorICAgIGNhc2UgTm90aWZ5UHV0R2xvYmFsVmFyOgogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTk0NjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTE2LDcgKzUxNiw3IEBAIHByaXZhdGU6CiAgICAgLy8gY29uc3RhbnQgZm9s
ZGluZy4gSS5lLiBjcmVhdGluZyBjb25zdGFudHMgdXNpbmcgdGhpcyBpZiB3ZSBoYWQgY29uc3Rh
bnQKICAgICAvLyBmaWVsZCBpbmZlcmVuY2Ugd291bGQgYmUgYSBiYWQgaWRlYSwgc2luY2UgdGhl
IGJ5dGVjb2RlIHBhcnNlcidzIGZvbGRpbmcKICAgICAvLyBkb2Vzbid0IGhhbmRsZSBsaXZlbmVz
cyBwcmVzZXJ2YXRpb24uCi0gICAgTm9kZSogZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUg
Y29uc3RhbnRWYWx1ZSkKKyAgICBOb2RlKiBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoSlNWYWx1ZSBj
b25zdGFudFZhbHVlLCBOb2RlRmxhZ3MgZmxhZ3MgPSBOb2RlSXNTdGF0aWNDb25zdGFudCkKICAg
ICB7CiAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXg7CiAgICAgICAgIGlmICghbV9jb2Rl
QmxvY2stPmZpbmRDb25zdGFudChjb25zdGFudFZhbHVlLCBjb25zdGFudEluZGV4KSkgewpAQCAt
NTI2LDE2ICs1MjYsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChtX2Nv
bnN0YW50cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMo
KSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChjb25zdGFudEluZGV4
KTsKKyAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQoY29uc3RhbnRJbmRleCwgZmxhZ3MpOwog
ICAgIH0KIAotICAgIE5vZGUqIGdldEpTQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnQpCisgICAg
Tm9kZSogZ2V0SlNDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudCwgTm9kZUZsYWdzIGZsYWdzID0g
Tm9kZUlzU3RhdGljQ29uc3RhbnQpCiAgICAgewogICAgICAgICBOb2RlKiBub2RlID0gbV9jb25z
dGFudHNbY29uc3RhbnRdLmFzSlNWYWx1ZTsKICAgICAgICAgaWYgKG5vZGUpCiAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKIAogICAgICAgICBOb2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKEpTQ29u
c3RhbnQsIE9wSW5mbyhjb25zdGFudCkpOworICAgICAgICByZXN1bHQtPm1lcmdlRmxhZ3MoZmxh
Z3MpOwogICAgICAgICBtX2NvbnN0YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlID0gcmVzdWx0Owog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTMxMDAsNyArMzEwMSwxMCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKEdsb2JhbFZhcldhdGNocG9pbnQsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKGlk
ZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUg
PSBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCk7Ci0gICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQoc3BlY2lm
aWNWYWx1ZS5hc0NlbGwoKSkpOworICAgICAgICAgICAgICAgIGlmIChzcGVjaWZpY1ZhbHVlLmlz
Q2VsbCgpKQorICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNl
bGxDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGdldEpTQ29u
c3RhbnRGb3JWYWx1ZShzcGVjaWZpY1ZhbHVlLCAwKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0zMTIzLDEy
ICszMTI3LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKGN1
cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpLnR5cGUoKTsKICAgICAgICAgICAgIFN0cmlu
Z0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKIAot
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IDA7CisgICAgICAgICAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50cyA9
IDA7CiAgICAgICAgICAgICB1aW50cHRyX3Qgb3BlcmFuZDsKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKQotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAg
ICAgICAgICB3YXRjaHBvaW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRT
ZXQ7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgICAgICAg
ICAgb3BlcmFuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjdXJyZW50SW5zdHJ1Y3Rp
b25bNl0udS5wb2ludGVyKTsKQEAgLTMxNTMsMTAgKzMxNTgsMTEgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2Fz
ZSBHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRy
eSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKCFlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpIHx8ICFtX2dyYXBoLndhdGNocG9pbnRz
KCkuaXNTdGlsbFZhbGlkKGVudHJ5LndhdGNocG9pbnRTZXQoKSkpOworICAgICAgICAgICAgICAg
IEFTU0VSVCh3YXRjaHBvaW50cyA9PSBlbnRyeS53YXRjaHBvaW50U2V0KCkpOwogICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUHV0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIGdldChWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUpKSk7CisgICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRzLT5z
dGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Tm90aWZ5UHV0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhpZGVudGlmaWVyTnVt
YmVyKSk7CiAgICAgICAgICAgICAgICAgLy8gS2VlcCBzY29wZSBhbGl2ZSB1bnRpbCBhZnRlciBw
dXQuCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lz
dGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIsNiArMTQyLDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwog
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTm90aWZ5UHV0R2xvYmFsVmFyOgor
ICAgICAgICB3cml0ZShXYXRjaHBvaW50X2ZpcmUpOworICAgICAgICByZXR1cm47CiAKICAgICBj
YXNlIENyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1
OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkwMyw2ICs5MDMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdl
dENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAgICBjYXNlIFB1
dEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBOb3RpZnlQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNh
c2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBv
aW50OgogICAgICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDcgKzM1
OSw4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGlzU3Ryb25nbHlQcm92ZWRDb25z
dGFudEluKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA9PSBpbmxp
bmVDYWxsRnJhbWU7CisgICAgICAgIHJldHVybiAhIShmbGFncygpICYgTm9kZUlzU3RhdGljQ29u
c3RhbnQpCisgICAgICAgICAgICAmJiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA9PSBpbmxp
bmVDYWxsRnJhbWU7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNTdHJvbmdseVByb3ZlZENvbnN0
YW50SW4oY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKQEAgLTc0OSw3ICs3NTAsNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNJZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2so
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2xvYmFsVmFyV2F0Y2hwb2ludDsKKyAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gR2xvYmFsVmFyV2F0Y2hwb2ludCB8fCBvcCgpID09IE5vdGlm
eVB1dEdsb2JhbFZhcjsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ckZvckNoZWNrKCkKQEAgLTc2MCw3ICs3NjEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAg
Ym9vbCBoYXNSZWdpc3RlclBvaW50ZXIoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0g
R2V0R2xvYmFsVmFyIHx8IG9wKCkgPT0gUHV0R2xvYmFsVmFyIHx8IG9wKCkgPT0gR2xvYmFsVmFy
V2F0Y2hwb2ludDsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0R2xvYmFsVmFyIHx8IG9wKCkg
PT0gUHV0R2xvYmFsVmFyIHx8IG9wKCkgPT0gR2xvYmFsVmFyV2F0Y2hwb2ludCB8fCBvcCgpID09
IE5vdGlmeVB1dEdsb2JhbFZhcjsKICAgICB9CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiByZWdpc3RlclBvaW50ZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVGbGFncy5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVGbGFncy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2RlZmluZSBOb2RlRXhpdHNGb3J3YXJkICAg
ICAgICAgICAgICAgICAweDgwMDAKIAorI2RlZmluZSBOb2RlSXNTdGF0aWNDb25zdGFudCAgICAg
ICAgICAgIDB4MTAwMDAgLy8gVXNlZCBvbmx5IGJ5IHRoZSBwYXJzZXIsIHRvIGRldGVybWluZSBp
ZiBhIGNvbnN0YW50IGFyb3NlIHN0YXRpY2FsbHkgYW5kIGhlbmNlIGNvdWxkIGJlIGZvbGRlZCBh
dCBwYXJzZS10aW1lLgorCiB0eXBlZGVmIHVpbnQzMl90IE5vZGVGbGFnczsKIAogc3RhdGljIGlu
bGluZSBib29sIGJ5dGVjb2RlVXNlc0FzTnVtYmVyKE5vZGVGbGFncyBmbGFncykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1OTQ2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTg0LDYgKzE4NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBt
YWNybyhQdXRDbG9zdXJlVmFyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0R2xv
YmFsVmFyLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQdXRHbG9iYWxWYXIsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKKyAgICBtYWNybyhOb3RpZnlQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhHbG9iYWxWYXJXYXRjaHBvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oVmFySW5qZWN0aW9uV2F0Y2hwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKENoZWNrRnVuY3Rpb24sIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU5NDYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTk4LDYgKzk5OCwxNCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blN3aXRjaFN0cmluCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihleGVjLT5jb2RlQmxv
Y2soKS0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHN0cmlu
Zy0+dmFsdWUoZXhlYykuaW1wbCgpKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgV2F0Y2hw
b2ludFNldCogc2V0KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgc2V0LT5ub3RpZnlXcml0ZSgp
OworfQorCiBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3Qg
YSwgaW50MzJfdCBiKQogewogICAgIHJldHVybiBmbW9kKGEsIGIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjUsNiArMTI1LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3Bl
MgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBK
U1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25T
d2l0Y2hTdHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgV2F0Y2hw
b2ludFNldCopOwogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAvLyBGSVhNRTogTWFrZSBjYWxscyB3
b3JrIHdlbGwuIEN1cnJlbnRseSB0aGV5J3JlIGEgcHVyZSByZWdyZXNzaW9uLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MTUsNyArNTE1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcElu
TG9vcDoKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgICAgICBjYXNlIENo
ZWNrVGllclVwQW5kT1NSRW50ZXI6Ci0gICAgICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6IHsK
KyAgICAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKKyAgICAgICAgY2FzZSBJbnQ1MlRvVmFs
dWU6CisgICAgICAgIGNhc2UgSW50NTJUb0RvdWJsZTogewogICAgICAgICAgICAgLy8gVGhpcyBu
b2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24u
IEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dz
IHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtNTgwLDggKzU4Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1Rp
bWVyOgogICAgICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgICAgICBjYXNlIExvb3BIaW50Ogot
ICAgICAgICBjYXNlIEludDUyVG9WYWx1ZToKLSAgICAgICAgY2FzZSBJbnQ1MlRvRG91YmxlOgor
ICAgICAgICBjYXNlIE5vdGlmeVB1dEdsb2JhbFZhcjoKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgYWxyZWFk
eSBoYXMgYSBwcmVkaWN0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNiArMjQy
LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2Ug
SW50NTJUb0RvdWJsZToKICAgICBjYXNlIEludDUyVG9WYWx1ZToKICAgICBjYXNlIEludmFsaWRh
dGlvblBvaW50OgorICAgIGNhc2UgTm90aWZ5UHV0R2xvYmFsVmFyOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU5
NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDM2OCw2ICs0MzY4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBOb3RpZnlQdXRHbG9iYWxWYXI6IHsK
KyAgICAgICAgY29tcGlsZU5vdGlmeVB1dEdsb2JhbFZhcihub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQogCiAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OiB7CiAgICAgICAgIG5v
UmVzdWx0KG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjAxLDYg
KzU2MDEsNDQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaChOb2RlKiBubwogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVOb3RpZnlQdXRHbG9iYWxWYXIoTm9kZSogbm9kZSkKK3sKKyAgICBXYXRjaHBvaW50
U2V0KiBzZXQgPSBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnN5bWJv
bFRhYmxlKCktPmdldCgKKyAgICAgICAgbV9qaXQuZ3JhcGgoKS5pZGVudGlmaWVycygpW25vZGUt
PmlkZW50aWZpZXJOdW1iZXJGb3JDaGVjaygpXSkud2F0Y2hwb2ludFNldCgpOworICAgIAorICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIo
KTsKKyAgICAKKyAgICBtX2ppdC5sb2FkOChzZXQtPmFkZHJlc3NPZlN0YXRlKCksIHRlbXBHUFIp
OworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCByZWFkeTsKKyAgICAKKyAgICByZWFk
eS5hcHBlbmQobV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1wR1BSLCBUcnVz
dGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAKKyAgICBpZiAoc2V0LT5zdGF0ZSgpID09
IENsZWFyV2F0Y2hwb2ludCkgeworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc1dhdGNoZWQg
PQorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB0ZW1w
R1BSLCBUcnVzdGVkSW1tMzIoQ2xlYXJXYXRjaHBvaW50KSk7CisgICAgICAgIAorICAgICAgICBt
X2ppdC5zdG9yZTgoVHJ1c3RlZEltbTMyKElzV2F0Y2hlZCksIHNldC0+YWRkcmVzc09mU3RhdGUo
KSk7CisgICAgICAgIHJlYWR5LmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAKKyAgICAg
ICAgaXNXYXRjaGVkLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAgSklUQ29tcGlsZXI6
Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAgICAgSklUQ29tcGlsZXI6
Ok5vblplcm8sIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTZXRJ
c05vdEVtcHR5KCkpKTsKKyAgICBtX2ppdC5zdG9yZTgoVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpLCBzZXQtPmFkZHJlc3NPZlN0YXRlKCkpOworCisgICAgcmVhZHkubGluaygmbV9qaXQpOwor
ICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENhbGwoc2xv
d0Nhc2UsIHRoaXMsIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBOb1Jlc3VsdCwgc2V0KSk7CisgICAg
CisgICAgbV9qaXQubWVtb3J5RmVuY2UoKTsKKworICAgIG5vUmVzdWx0KG5vZGUpOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjphZGRCcmFuY2goY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBqdW1wLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBqdW1wLmp1bXBzKCkuc2l6ZSgpOyBpLS07KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTU5NDYyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDg0LDkgKzEwODQsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9XIG9wZXJhdGlvbiwgV2F0Y2hwb2lu
dFNldCogd2F0Y2hwb2ludFNldCkKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfSklUT3BlcmF0aW9uX0VXIG9wZXJhdGlvbiwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNl
dCkKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKFRydXN0ZWRJbW1QdHIod2F0
Y2hwb2ludFNldCkpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cih3YXRjaHBvaW50U2V0KSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
KG9wZXJhdGlvbik7CiAgICAgfQogCkBAIC0yMDQ1LDYgKzIwNDUsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUqKTsKICAgICBib29sIGNvbXBp
bGVSZWdFeHBFeGVjKE5vZGUqKTsKICAgICAKKyAgICB2b2lkIGNvbXBpbGVOb3RpZnlQdXRHbG9i
YWxWYXIoTm9kZSopOworICAgIAogICAgIC8vIHNpemUgY2FuIGJlIGFuIGltbWVkaWF0ZSBvciBh
IHJlZ2lzdGVyLCBhbmQgbXVzdCBiZSBpbiBieXRlcy4gSWYgc2l6ZSBpcyBhIHJlZ2lzdGVyLAog
ICAgIC8vIGl0IG11c3QgYmUgYSBkaWZmZXJlbnQgcmVnaXN0ZXIgdGhhbiByZXN1bHRHUFIuIEVt
aXRzIGNvZGUgdGhhdCBwbGFjZSBhIHBvaW50ZXIgdG8KICAgICAvLyB0aGUgZW5kIG9mIHRoZSBh
bGxvY2F0aW9uLiBUaGUgcmV0dXJuZWQganVtcCBpcyB0aGUganVtcCB0byB0aGUgc2xvdyBwYXRo
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNyArNjEz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEdldEdsb2JhbFZhcih1aW50
cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFByb3BlcnR5
KHVpbnRwdHJfdCogb3BlcmFuZFNsb3QsIGludCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1
dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlKTsKKyAgICAgICAgdm9pZCBl
bWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kLCBpbnQgdmFsdWUpOwogCiAgICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3Rlcihp
bnQgZHN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
CShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIHR5cGVkZWYgdm9pZCBK
SVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fRVBjKShFeGVjU3RhdGUqLCBJbnN0cnVjdGlvbiopOwogdHlwZWRlZiB2
b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FUFpKKShFeGVjU3RhdGUqLCB2b2lk
KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04g
KCpWX0pJVE9wZXJhdGlvbl9FU3NpSkpJKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopOwotdHlwZWRlZiB2
b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9XKShXYXRjaHBvaW50U2V0Kik7Cit0
eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VXKShFeGVjU3RhdGUq
LCBXYXRjaHBvaW50U2V0Kik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3Bl
cmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXRpb25fRVZtKShFeGVjU3RhdGUqLCBWTSopOwogdHlwZWRlZiBjaGFy
KiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2
aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3MSwxMCArNzcxLDM2IEBAIHZvaWQgSklUOjpl
bWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl8KICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFs
VmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7
CisgICAgaWYgKHNldCAmJiBzZXQtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkgeworICAgICAg
ICBsb2FkOChzZXQtPmFkZHJlc3NPZlN0YXRlKCksIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAg
IEp1bXBMaXN0IHJlYWR5OworICAgICAgICAKKyAgICAgICAgcmVhZHkuYXBwZW5kKGJyYW5jaDMy
KEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIAor
ICAgICAgICBpZiAoc2V0LT5zdGF0ZSgpID09IENsZWFyV2F0Y2hwb2ludCkgeworICAgICAgICAg
ICAgSnVtcCBpc1dhdGNoZWQgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0z
MihDbGVhcldhdGNocG9pbnQpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSXNXYXRjaGVkKSwgcmVnVDEpOworICAgICAgICAgICAgcmVhZHkuYXBwZW5kKGp1
bXAoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlzV2F0Y2hlZC5saW5rKHRoaXMpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25a
ZXJvLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkpKSk7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpLCByZWdUMSk7CisgICAgICAg
IHJlYWR5LmxpbmsodGhpcyk7CisgICAgfQorICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBzdG9yZVB0cihyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ob3BlcmFuZCkpOworICAgIAorICAgIGlmIChzZXQgJiYgc2V0LT5zdGF0ZSgpICE9IElz
SW52YWxpZGF0ZWQpIHsKKyAgICAgICAgbWVtb3J5RmVuY2UoKTsKKyAgICAgICAgc3RvcmU4KHJl
Z1QxLCBzZXQtPmFkZHJlc3NPZlN0YXRlKCkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRQ
dXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSkKQEAg
LTgwMiw3ICs4MjgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rp
CiAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgogICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdFB1dEdsb2JhbFZhcigqb3BlcmFuZFNs
b3QsIHZhbHVlKTsKKyAgICAgICAgZW1pdFB1dEdsb2JhbFZhcigqb3BlcmFuZFNsb3QsIHZhbHVl
LCBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6CkBAIC04MTgsMTAgKzg0NCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBSZXNvbHZlTW9kZUFu
ZFR5cGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkudHlwZSgpOwotICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAg
ICB1bnNpZ25lZCBsaW5rQ291bnQgPSAwOworICAgIGlmIChyZXNvbHZlVHlwZSAhPSBHbG9iYWxW
YXIgJiYgcmVzb2x2ZVR5cGUgIT0gQ2xvc3VyZVZhcikKKyAgICAgICAgbGlua0NvdW50Kys7Cisg
ICAgaWYgKChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgJiYgY3VycmVudEluc3RydWN0aW9u
WzVdLnUud2F0Y2hwb2ludFNldC0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKQorICAgICAgICBs
aW5rQ291bnQrKzsKKyAgICBpZiAoIWxpbmtDb3VudCkKICAgICAgICAgcmV0dXJuOwotCi0gICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIHdoaWxlIChsaW5rQ291bnQtLSkKKyAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwg
Y3VycmVudEluc3RydWN0aW9uKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE1OTQ2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTU1LDEwICsxOTU1LDIyIEBAIG1hY3JvIHB1dFByb3Bl
cnR5KCkKIGVuZAogCiBtYWNybyBwdXRHbG9iYWxWYXIoKQorICAgIGxvYWRwRnJvbUluc3RydWN0
aW9uKDUsIHQyKQorICAgIGxvYWRiIFdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbdDJdLCB0MworICAg
IGJpZXEgdDMsIElzSW52YWxpZGF0ZWQsIC5yZWFkeQorICAgIGJpbmVxIHQzLCBDbGVhcldhdGNo
cG9pbnQsIC5uZWVkVG9JbnZhbGlkYXRlCisgICAgbW92ZSBJc1dhdGNoZWQsIHQzCisgICAgam1w
IC5yZWFkeQorLm5lZWRUb0ludmFsaWRhdGU6CisgICAgYnRibnogV2F0Y2hwb2ludFNldDo6bV9z
ZXRJc05vdEVtcHR5W3QyXSwgLnBEeW5hbWljCisgICAgbW92ZSBJc0ludmFsaWRhdGVkLCB0Mwor
LnJlYWR5OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MCkKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHQwLCB0MSkKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig2LCB0MCkKICAg
ICBzdG9yZXEgdDEsIFt0MF0KKyAgICBtZW1mZW5jZQorICAgIHN0b3JlYiB0MywgV2F0Y2hwb2lu
dFNldDo6bV9zdGF0ZVt0Ml0KIGVuZAogCiBtYWNybyBwdXRDbG9zdXJlVmFyKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2FybTY0LnJiCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2FybTY0LnJiCShyZXZpc2lvbiAxNTk0NjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9hcm02NC5yYgkod29ya2luZyBj
b3B5KQpAQCAtODA3LDYgKzgwNyw4IEBAIGNsYXNzIEluc3RydWN0aW9uCiAgICAgICAgICAgICBv
cGVyYW5kc1swXS5hcm02NEVtaXRMZWEob3BlcmFuZHNbMV0sIDpwdHIpCiAgICAgICAgIHdoZW4g
InNtdWxsaSIKICAgICAgICAgICAgICRhc20ucHV0cyAic21hZGRsICN7b3BlcmFuZHNbMl0uYXJt
NjRPcGVyYW5kKDpwdHIpfSwgI3tvcGVyYW5kc1swXS5hcm02NE9wZXJhbmQoOmludCl9LCAje29w
ZXJhbmRzWzFdLmFybTY0T3BlcmFuZCg6aW50KX0sIHh6ciIKKyAgICAgICAgd2hlbiAibWVtZmVu
Y2UiCisgICAgICAgICAgICAkYXNtLnB1dHMgImRtYiBzeSIKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbG93ZXJEZWZhdWx0CiAgICAgICAgIGVuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL29mZmxpbmVhc20vYXJtLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9vZmZsaW5lYXNtL2FybS5yYgkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL29mZmxpbmVhc20vYXJtLnJiCSh3b3JraW5nIGNvcHkpCkBAIC01OTcsNiArNTk3LDgg
QEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAgICAgd2hlbiAic211bGxpIgogICAgICAgICAgICAg
cmFpc2UgIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gc211bGwgaW4gI3tzZWxmLmluc3Bl
Y3R9IGF0ICN7Y29kZU9yaWdpblN0cmluZ30iIHVubGVzcyBvcGVyYW5kcy5sZW5ndGggPT0gNAog
ICAgICAgICAgICAgJGFzbS5wdXRzICJzbXVsbCAje29wZXJhbmRzWzJdLmFybU9wZXJhbmR9LCAj
e29wZXJhbmRzWzNdLmFybU9wZXJhbmR9LCAje29wZXJhbmRzWzBdLmFybU9wZXJhbmR9LCAje29w
ZXJhbmRzWzFdLmFybU9wZXJhbmR9IgorICAgICAgICB3aGVuICJtZW1mZW5jZSIKKyAgICAgICAg
ICAgICRhc20ucHV0cyAiZG1iIHN5IgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb3dlckRl
ZmF1bHQKICAgICAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS9jbG9vcC5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS9jbG9vcC5yYgkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL29m
ZmxpbmVhc20vY2xvb3AucmIJKHdvcmtpbmcgY29weSkKQEAgLTEwOTEsNyArMTA5MSw4IEBAIGNs
YXNzIEluc3RydWN0aW9uCiAgICAgICAgICAgICBjbG9vcEVtaXRPcEFuZEJyYW5jaChvcGVyYW5k
cywgInwiLCA6aW50MzIsICI9PSAwIikKICAgICAgICAgd2hlbiAiYm9ycmlueiIKICAgICAgICAg
ICAgIGNsb29wRW1pdE9wQW5kQnJhbmNoKG9wZXJhbmRzLCAifCIsIDppbnQzMiwgIiE9IDAiKQot
CisgICAgICAgICAgICAKKyAgICAgICAgd2hlbiAibWVtZmVuY2UiCiAgICAgICAgIHdoZW4gInB1
c2hDYWxsZWVTYXZlcyIKICAgICAgICAgd2hlbiAicG9wQ2FsbGVlU2F2ZXMiCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIJKHJl
dmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3Ry
dWN0aW9ucy5yYgkod29ya2luZyBjb3B5KQpAQCAtMjUwLDcgKzI1MCw4IEBAIE1BQ1JPX0lOU1RS
VUNUSU9OUyA9CiAgICAgICJsZWFpIiwKICAgICAgImxlYXAiLAogICAgICAicHVzaENhbGxlZVNh
dmVzIiwKLSAgICAgInBvcENhbGxlZVNhdmVzIgorICAgICAicG9wQ2FsbGVlU2F2ZXMiLAorICAg
ICAibWVtZmVuY2UiCiAgICAgXQogCiBYODZfSU5TVFJVQ1RJT05TID0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkod29ya2luZyBjb3B5KQpAQCAtMTM2
Myw2ICsxMzYzLDggQEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAgICAgICAgICRhc20ucHV0cyAi
bGVhbCAje29wZXJhbmRzWzBdLng4NkFkZHJlc3NPcGVyYW5kKDppbnQpfSwgI3tvcGVyYW5kc1sx
XS54ODZPcGVyYW5kKDppbnQpfSIKICAgICAgICAgd2hlbiAibGVhcCIKICAgICAgICAgICAgICRh
c20ucHV0cyAibGVhI3t4ODZTdWZmaXgoOnB0cil9ICN7b3BlcmFuZHNbMF0ueDg2QWRkcmVzc09w
ZXJhbmQoOnB0cil9LCAje29wZXJhbmRzWzFdLng4Nk9wZXJhbmQoOnB0cil9IgorICAgICAgICB3
aGVuICJtZW1mZW5jZSIKKyAgICAgICAgICAgICRhc20ucHV0cyAibWZlbmNlIgogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBsb3dlckRlZmF1bHQKICAgICAgICAgZW5kCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lv
biAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCwyMCArMjEwLDIwIEBAIGJvb2wgSlNHbG9iYWxP
YmplY3Q6OmRlZmluZU93blByb3BlcnR5KEoKICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJv
cGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRU
aHJvdyk7CiB9CiAKLWludCBKU0dsb2JhbE9iamVjdDo6YWRkR2xvYmFsVmFyKGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBGdW5jdGlvbk1vZGUgZnVu
Y3Rpb25Nb2RlKQoraW50IEpTR2xvYmFsT2JqZWN0OjphZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFZhckFkZE1vZGUgdmFyQWRk
TW9kZSkKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZSgpLT5t
X2xvY2spOwogICAgIGludCBpbmRleCA9IHN5bWJvbFRhYmxlKCktPnNpemUobG9ja2VyKTsKICAg
ICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCAoY29uc3RhbnRNb2RlID09IElzQ29u
c3RhbnQpID8gUmVhZE9ubHkgOiAwKTsKLSAgICBpZiAoZnVuY3Rpb25Nb2RlID09IElzRnVuY3Rp
b25Ub1NwZWNpYWxpemUpCi0gICAgICAgIG5ld0VudHJ5LmF0dGVtcHRUb1dhdGNoKCk7CisgICAg
aWYgKGNvbnN0YW50TW9kZSA9PSBJc1ZhcmlhYmxlKQorICAgICAgICBuZXdFbnRyeS5wcmVwYXJl
VG9XYXRjaChTeW1ib2xUYWJsZUVudHJ5OjpOb3RJbml0aWFsaXplZCk7CiAgICAgU3ltYm9sVGFi
bGU6Ok1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCktPmFkZChsb2NrZXIsIGlk
ZW50LmltcGwoKSwgbmV3RW50cnkpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAg
ICAgYWRkUmVnaXN0ZXJzKDEpOwotICAgIGVsc2UgewotICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLm5vdGlmeVdyaXRlKCk7CisgICAgZWxzZQogICAgICAgICBpbmRleCA9IHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKTsKLSAgICB9CisgICAgaWYgKGNvbnN0YW50TW9kZSA9
PSBJc1ZhcmlhYmxlICYmIHZhckFkZE1vZGUgPT0gQWRkVG9Jbml0aWFsaXplKQorICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm5vdGlmeVdyaXRlKCk7CiAgICAgcmV0dXJuIGluZGV4Owog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw4ICsyODksOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgfQogCiAgICAgZW51bSBDb25zdGFudE1vZGUgeyBJc0NvbnN0YW50LCBJc1Zh
cmlhYmxlIH07Ci0gICAgZW51bSBGdW5jdGlvbk1vZGUgeyBJc0Z1bmN0aW9uVG9TcGVjaWFsaXpl
LCBOb3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6YWJsZSB9OwotICAgIGludCBhZGRHbG9iYWxWYXIo
Y29uc3QgSWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwgRnVuY3Rpb25Nb2RlKTsKKyAgICBlbnVt
IFZhckFkZE1vZGUgeyBBZGRVbmluaXRpYWxpemVkLCBBZGRUb0luaXRpYWxpemUgfTsKKyAgICBp
bnQgYWRkR2xvYmFsVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUsIFZhckFkZE1v
ZGUpOwogCiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7
CkBAIC0zMTUsMTcgKzMxNSwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRWYXIoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiAgICAgewogICAgICAgICBp
ZiAoIWhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCi0gICAgICAgICAgICBhZGRHbG9i
YWxWYXIocHJvcGVydHlOYW1lLCBJc1ZhcmlhYmxlLCBOb3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6
YWJsZSk7CisgICAgICAgICAgICBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc1ZhcmlhYmxl
LCBBZGRVbmluaXRpYWxpemVkKTsKICAgICB9CiAgICAgdm9pZCBhZGRDb25zdChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKICAgICB7CiAgICAgICAgIGlm
ICghaGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAgIGFkZEdsb2Jh
bFZhcihwcm9wZXJ0eU5hbWUsIElzQ29uc3RhbnQsIE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXph
YmxlKTsKKyAgICAgICAgICAgIGFkZEdsb2JhbFZhcihwcm9wZXJ0eU5hbWUsIElzQ29uc3RhbnQs
IEFkZFVuaW5pdGlhbGl6ZWQpOwogICAgIH0KICAgICB2b2lkIGFkZEZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgYm9vbCBwcm9wZXJ0eURpZEV4aXN0ID0gcmVtb3ZlRGlyZWN0KGV4ZWMt
PnZtKCksIHByb3BlcnR5TmFtZSk7IC8vIE5ld2x5IGRlY2xhcmVkIGZ1bmN0aW9ucyBvdmVyd3Jp
dGUgZXhpc3RpbmcgcHJvcGVydGllcy4KLSAgICAgICAgaW50IGluZGV4ID0gYWRkR2xvYmFsVmFy
KHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSwgIXByb3BlcnR5RGlkRXhpc3QgPyBJc0Z1bmN0aW9u
VG9TcGVjaWFsaXplIDogTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUpOworICAgICAgICBy
ZW1vdmVEaXJlY3QoZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKTsgLy8gTmV3bHkgZGVjbGFyZWQg
ZnVuY3Rpb25zIG92ZXJ3cml0ZSBleGlzdGluZyBwcm9wZXJ0aWVzLgorICAgICAgICBpbnQgaW5k
ZXggPSBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc1ZhcmlhYmxlLCBBZGRUb0luaXRpYWxp
emUpOwogICAgICAgICByZWdpc3RlckF0KGluZGV4KS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgdmFs
dWUpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxNSArNzcsMTAgQEAgc3RhdGljIGlu
bGluZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdAogICAgIGlmIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU0dsb2JhbE9iamVjdCo+KHNjb3BlKSkgewog
ICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLT5nZXQoaWRlbnQuaW1wbCgpKTsKICAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewot
ICAgICAgICAgICAgaWYgKGdldE9yUHV0ID09IFB1dCkgewotICAgICAgICAgICAgICAgIGlmIChl
bnRyeS5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUg
cHJvcGVydHkgd2lsbCBiZSBhdCBnbG9iYWwgc2NvcGUsIGJ1dCB3ZSBkb24ndCBrbm93IGhvdyB0
byBjYWNoZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywg
MCwgMCwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEl0J3MgbGlrZWx5IHRoYXQgd2UnbGwgd3Jp
dGUgdG8gdGhpcyB2YXIsIHNvIG5vdGlmeSBub3cgYW5kIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBk
b2luZyBzbyBhdCBydW50aW1lLgotICAgICAgICAgICAgICAgIGVudHJ5Lm5vdGlmeVdyaXRlKCk7
CisgICAgICAgICAgICBpZiAoZ2V0T3JQdXQgPT0gUHV0ICYmIGVudHJ5LmlzUmVhZE9ubHkoKSkg
eworICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHByb3BlcnR5IHdpbGwgYmUgYXQgZ2xv
YmFsIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBob3cgdG8gY2FjaGUgaXQuCisgICAgICAgICAg
ICAgICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywgMCwgMCwgMCwgMCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG9wID0gUmVzb2x2
ZU9wKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMs
NiArMTIzLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgQVNTRVJUKCFIZWFw
OjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkp
OwogICAgIAogICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZzsKKyAgICBXYXRjaHBv
aW50U2V0KiBzZXQgPSAwOwogICAgIHsKICAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
ID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsKICAgICAgICAgR0NTYWZlQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIoc3ltYm9sVGFibGUubV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwpAQCAtMTM3
LDE0ICsxMzgsMTUgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVy
cm9yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChV
TkxJS0VMWSh3YXNGYXQpKQotICAgICAgICAgICAgaXRlci0+dmFsdWUubm90aWZ5V3JpdGUoKTsK
KyAgICAgICAgc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwogICAgICAgICByZWcg
PSAmb2JqZWN0LT5yZWdpc3RlckF0KGZhc3RFbnRyeS5nZXRJbmRleCgpKTsKICAgICB9CiAgICAg
Ly8gSSdkIHByZWZlciB3ZSBub3QgaG9sZCBsb2NrIHdoaWxlIGV4ZWN1dGluZyBiYXJyaWVycywg
c2luY2UgSSBwcmVmZXIgdG8gcmVzZXJ2ZQogICAgIC8vIHRoZSByaWdodCBmb3IgYmFycmllcnMg
dG8gYmUgYWJsZSB0byB0cmlnZ2VyIEdDLiBBbmQgSSBkb24ndCB3YW50IHRvIGhvbGQgVk0KICAg
ICAvLyBsb2NrcyB3aGlsZSBHQydpbmcuCiAgICAgcmVnLT5zZXQodm0sIG9iamVjdCwgdmFsdWUp
OworICAgIGlmIChzZXQpCisgICAgICAgIHNldC0+bm90aWZ5V3JpdGUoKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTU2LDYgKzE1OCw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0
V2l0aEF0dHJpYnV0ZXMKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6Omhl
YXAodmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CiAKICAgICBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KiByZWc7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gMDsKICAgICB7CiAgICAg
ICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7CiAg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLm1fbG9jayk7CkBA
IC0xNjQsMTEgKzE2NywxMyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1
dGVzCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkm
IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwot
ICAgICAgICBlbnRyeS5ub3RpZnlXcml0ZSgpOworICAgICAgICBzZXQgPSBlbnRyeS53YXRjaHBv
aW50U2V0KCk7CiAgICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAg
ICAgIHJlZyA9ICZvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSk7CiAgICAgfQog
ICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKKyAgICBpZiAoc2V0KQorICAgICAgICBz
ZXQtPm5vdGlmeVdyaXRlKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE1OTQ2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjUsMTQgKzY1LDE1IEBAIGJvb2wgU3ltYm9sVGFibGVFbnRyeTo6Y291
bGRCZVdhdGNoZWQoKQogICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRzID0gZmF0RW50cnko
KS0+bV93YXRjaHBvaW50cy5nZXQoKTsKICAgICBpZiAoIXdhdGNocG9pbnRzKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHdhdGNocG9pbnRzLT5pc1N0aWxsVmFsaWQoKTsKKyAg
ICByZXR1cm4gd2F0Y2hwb2ludHMtPnN0YXRlKCkgPT0gSXNXYXRjaGVkOwogfQogCi12b2lkIFN5
bWJvbFRhYmxlRW50cnk6OmF0dGVtcHRUb1dhdGNoKCkKK3ZvaWQgU3ltYm9sVGFibGVFbnRyeTo6
cHJlcGFyZVRvV2F0Y2goV2F0Y2hTdGF0ZSBzdGF0ZSkKIHsKICAgICBGYXRFbnRyeSogZW50cnkg
PSBpbmZsYXRlKCk7Ci0gICAgaWYgKCFlbnRyeS0+bV93YXRjaHBvaW50cykKLSAgICAgICAgZW50
cnktPm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNldChJc1dhdGNoZWQp
KTsKKyAgICBBU1NFUlQoIWVudHJ5LT5tX3dhdGNocG9pbnRzKTsKKyAgICBlbnRyeS0+bV93YXRj
aHBvaW50cyA9IGFkb3B0UmVmKAorICAgICAgICBuZXcgV2F0Y2hwb2ludFNldChzdGF0ZSA9PSBB
bHJlYWR5SW5pdGlhbGl6ZWQgPyBJc1dhdGNoZWQgOiBDbGVhcldhdGNocG9pbnQpKTsKIH0KIAog
dm9pZCBTeW1ib2xUYWJsZUVudHJ5OjphZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqIHdhdGNocG9p
bnQpCkBAIC04Niw2ICs4NywxMiBAQCB2b2lkIFN5bWJvbFRhYmxlRW50cnk6Om5vdGlmeVdyaXRl
U2xvdygpCiAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludHMgPSBmYXRFbnRyeSgpLT5tX3dh
dGNocG9pbnRzLmdldCgpOwogICAgIGlmICghd2F0Y2hwb2ludHMpCiAgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBpZiAod2F0Y2hwb2ludHMtPnN0YXRlKCkgPT0gQ2xlYXJXYXRjaHBvaW50KSB7
CisgICAgICAgIHdhdGNocG9pbnRzLT5zdGFydFdhdGNoaW5nKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCiAgICAgd2F0Y2hwb2ludHMtPm5vdGlmeVdyaXRlKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24g
MTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjIwLDE1ICsyMjAsOCBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRy
eSB7CiAgICAgCiAgICAgYm9vbCBjb3VsZEJlV2F0Y2hlZCgpOwogICAgIAotICAgIC8vIE5vdGlm
eSBhbiBvcHBvcnR1bml0eSB0byBjcmVhdGUgYSB3YXRjaHBvaW50IGZvciBhIHZhcmlhYmxlLiBU
aGlzIGlzCi0gICAgLy8gaWRlbXBvdGVudCBhbmQgZmFpbC1zaWxlbnQuIEl0IGlzIGlkZW1wb3Rl
bnQgaW4gdGhlIHNlbnNlIHRoYXQgaWYKLSAgICAvLyBhIHdhdGNocG9pbnQgc2V0IGhhZCBhbHJl
YWR5IGJlZW4gY3JlYXRlZCwgdGhlbiBhbm90aGVyIG9uZSB3aWxsIG5vdAotICAgIC8vIGJlIGNy
ZWF0ZWQuIEhlbmNlIHR3byBjYWxscyB0byB0aGlzIG1ldGhvZCBoYXZlIHRoZSBzYW1lIGVmZmVj
dCBhcwotICAgIC8vIG9uZSBjYWxsLiBJdCBpcyBhbHNvIGZhaWwtc2lsZW50LCBpbiB0aGUgc2Vu
c2UgdGhhdCBpZiBhIHdhdGNocG9pbnQKLSAgICAvLyBzZXQgaGFkIGJlZW4gY3JlYXRlZCBhbmQg
aGFkIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZCwgdGhlbiB0aGlzIHdpbGwKLSAgICAvLyBqdXN0
IHJldHVybi4gVGhpcyBtZWFucyB0aGF0IGNvdWxkQmVXYXRjaGVkKCkgbWF5IHJldHVybiBmYWxz
ZSBldmVuCi0gICAgLy8gaW1tZWRpYXRlbHkgYWZ0ZXIgYSBjYWxsIHRvIGF0dGVtcHRUb1dhdGNo
KCkuCi0gICAgdm9pZCBhdHRlbXB0VG9XYXRjaCgpOworICAgIGVudW0gV2F0Y2hTdGF0ZSB7IE5v
dEluaXRpYWxpemVkLCBBbHJlYWR5SW5pdGlhbGl6ZWQgfTsKKyAgICB2b2lkIHByZXBhcmVUb1dh
dGNoKFdhdGNoU3RhdGUpOwogICAgIAogICAgIHZvaWQgYWRkV2F0Y2hwb2ludChXYXRjaHBvaW50
Kik7CiAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTk0NzkpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0xMS0xOCAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEluZmVyIGNvbnN0YW50IGdsb2Jh
bCB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNDQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICoganMvcmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICoganMvcmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dsb2JhbC12YXItY29uc3Qt
aW5mZXIuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGNoZWNrKToKKwogMjAx
My0xMS0xOCAgU3VuLXdvbyBOYW0gIDxzdW5ueS5uYW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAg
W0VGTF0gTGF5b3V0IHRlc3RzIG5lZWQgdG8gYmUgcmViYXNlbGluZWQuCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5mZXItZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLXZhci1jb25zdC1pbmZlci1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dsb2Jh
bC12YXItY29uc3QtaW5mZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAgQEAKK0pTUmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5mZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5mZXIuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLXZhci1jb25zdC1pbmZlci5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi
LS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0ic2NyaXB0LXRlc3RzL2dsb2JhbC12YXItY29uc3QtaW5mZXIuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2xvYmFsLXZh
ci1jb25zdC1pbmZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2xvYmFsLXZhci1jb25zdC1pbmZlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3IEBACitmdW5jdGlvbiBmb28oKSB7CisgICAg
cmV0dXJuIGEgKyBiOworfQorCitub0lubGluZShmb28pOworCit2YXIgYSA9IDQ7Cit2YXIgYiA9
IDU7CisKK2Z1bmN0aW9uIGNoZWNrKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFs
ID09IGV4cGVjdGVkKQorICAgICAgICByZXR1cm47CisgICAgdGhyb3cgIkVycm9yOiBleHBlY3Rl
ZCAiICsgZXhwZWN0ZWQgKyAiIGJ1dCBnb3QgIiArIGFjdHVhbDsKK30KKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDA7ICsraSkKKyAgICBjaGVjayhmb28oKSwgOSk7CisKK2EgPSA2OworCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICBjaGVjayhmb28oKSwgMTEpOworCitiID0g
NzsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAgIGNoZWNrKGZvbygpLCAx
Myk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217321</attachid>
            <date>2013-11-19 13:03:01 -0800</date>
            <delta_ts>2013-11-19 15:49:38 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>76236</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5NTE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNCBA
QAorMjAxMy0xMS0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEluZmVyIGNvbnN0YW50IGdsb2JhbCB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWxsIGdsb2JhbCB2YXJpYWJsZXMgdGhh
dCBhcmUgY2FuZGlkYXRlcyBmb3Igd2F0Y2hwb2ludC1iYXNlZCBjb25zdGFudCBpbmZlcmVuY2Ug
KGkuZS4KKyAgICAgICAgbm90ICdjb25zdCcgdmFyaWFibGVzKSB3aWxsIG5vdyBoYXZlIFdhdGNo
cG9pbnRTZXQncyBhc3NvY2lhdGVkIHdpdGggdGhlbSBhbmQgdGhvc2UKKyAgICAgICAgYXJlIHVz
ZWQgdG8gZHJpdmUgdGhlIGluZmVyZW5jZSBieSB0cmFja2luZyB0aHJlZSBzdGF0ZXMgb2YgZWFj
aCB2YXJpYWJsZToKKyAgICAgICAgCisgICAgICAgIFVuaW5pdGlhbGl6ZWQ6IHRoZSB2YXJpYWJs
ZSdzIHZhbHVlIGlzIFVuZGVmaW5lZCBhbmQgdGhlIFdhdGNocG9pbnRTZXQgc3RhdGUgaXMKKyAg
ICAgICAgICAgIENsZWFyV2F0Y2hwb2ludC4KKyAgICAgICAgCisgICAgICAgIEluaXRpYWxpemVk
OiB0aGUgdmFyaWFibGUncyB2YWx1ZSB3YXMgc2V0IHRvIHNvbWV0aGluZyAoY291bGQgZXZlbiBi
ZSBleHBsaWNpdGx5IHNldAorICAgICAgICAgICAgdG8gVW5kZWZpbmVkKSBhbmQgdGhlIFdhdGNo
cG9pbnRTZXQgc3RhdGUgaXMgSXNXYXRjaGluZy4KKyAgICAgICAgCisgICAgICAgIEludmFsaWRh
dGVkOiB0aGUgdmFyaWFibGUncyB2YWx1ZSB3YXMgc2V0IHRvIHNvbWV0aGluZyBlbHNlIChjb3Vs
ZCBldmVuIGJlIHRoZSBzYW1lCisgICAgICAgICAgICB0aGluZyBhcyBiZWZvcmUgYnV0IHRoZSBw
b2ludCBpcyB0aGF0IGEgcHV0IG9wZXJhdGlvbiBkaWQgZXhlY3V0ZSBhZ2FpbikgYW5kIHRoZQor
ICAgICAgICAgICAgV2F0Y2hwb2ludFNldCBpcyBJc0ludmFsaWRhdGVkLgorICAgICAgICAKKyAg
ICAgICAgSWYgdGhlIGNvbXBpbGVyIHRyaWVzIHRvIGNvbXBpbGUgYSBHZXRHbG9iYWxWYXIgYW5k
IHRoZSBXYXRjaHBvaW50U2V0IHN0YXRlIGlzCisgICAgICAgIElzV2F0Y2hpbmcsIHRoZW4gdGhl
IGN1cnJlbnQgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGNhbiBiZSBmb2xkZWQgaW4gcGxhY2Ugb2Yg
dGhlIGdldCwKKyAgICAgICAgYW5kIGEgd2F0Y2hwb2ludCBvbiB0aGUgdmFyaWFibGUgY2FuIGJl
IHJlZ2lzdGVyZWQuCisgICAgICAgIAorICAgICAgICBXZSBoYW5kbGUgcmFjZSBjb25kaXRpb25z
IGJldHdlZW4gdGhlIG11dGF0b3IgYW5kIGNvbXBpbGVyIGJ5IG1hbmRhdGluZyB0aGF0OgorICAg
ICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBjaGFuZ2VzIHRoZSBXYXRjaHBvaW50U2V0IHN0
YXRlIGFmdGVyIGV4ZWN1dGluZyB0aGUgcHV0LgorICAgICAgICAKKyAgICAgICAgLSBUaGVyZSBp
cyBubyBvcHBvcnR1bml0eSB0byBpbnN0YWxsIGNvZGUgb3IgY2FsbCBmdW5jdGlvbnMgYmV0d2Vl
biB3aGVuIHRoZSBtdXRhdG9yCisgICAgICAgICAgZXhlY3V0ZXMgYSBwdXQgYW5kIGNoYW5nZXMg
dGhlIFdhdGNocG9pbnRTZXQgc3RhdGUuCisgICAgICAgIAorICAgICAgICAtIFRoZSBjb21waWxl
ciBjaGVja3MgdGhlIFdhdGNocG9pbnRTZXQgc3RhdGUgcHJpb3IgdG8gcmVhZGluZyB0aGUgdmFs
dWUuCisgICAgICAgIAorICAgICAgICBUaGUgY29uY3JldGUgYWxnb3JpdGhtIHVzZWQgYnkgdGhl
IG11dGF0b3IgaXM6CisgICAgICAgIAorICAgICAgICAgICAgMS4gU3RvcmUgdGhlIG5ldyB2YWx1
ZSBpbnRvIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAgIC0tLSBFeGVjdXRlIGEgc3RvcmUtc3Rv
cmUgZmVuY2UuCisgICAgICAgICAgICAyLiBCdW1wIHRoZSBzdGF0ZSAoQ2xlYXJXYXRjaHBvaW5n
IGJlY29tZXMgSXNXYXRjaGluZywgSXNXYXRjaGluZyBiZWNvbWVzCisgICAgICAgICAgICAgICBJ
c0ludmFsaWRhdGVkKTsgdGhlIElzV2F0Y2hpbmctPklzSW52YWxpZGF0ZWQgdHJhbnNpdGlvbiBt
YXkgZW5kIHVwIGZpcmluZworICAgICAgICAgICAgICAgd2F0Y2hwb2ludHMuCisgICAgICAgIAor
ICAgICAgICBUaGUgY29uY3JldGUgYWxnb3JpdGhtIHRoYXQgdGhlIGNvbXBpbGVyIHVzZXMgaXM6
CisgICAgICAgIAorICAgICAgICAgICAgMS4gTG9hZCB0aGUgc3RhdGUuIElmIGl0J3MgKm5vdCog
SXNXYXRjaGluZywgdGhlbiBnaXZlIHVwIG9uIGNvbnN0YW50IGluZmVyZW5jZS4KKyAgICAgICAg
ICAgIC0tLSBFeGVjdXRlIGEgbG9hZC1sb2FkIGZlbmNlLgorICAgICAgICAgICAgMi4gTG9hZCB0
aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGFuZCB1c2UgdGhhdCBmb3IgZm9sZGluZywgd2hpbGUg
YWxzbyByZWdpc3RlcmluZworICAgICAgICAgICAgICAgYSBEZXNpcmVkV2F0Y2hwb2ludC4gVGhl
IHZhcmlvdXMgcGFydHMgb2YgdGhpcyBzdGVwIGNhbiBiZSBkb25lIGluIGFueSBvcmRlci4KKyAg
ICAgICAgCisgICAgICAgIFRoZSBkZXNpcmVkIHdhdGNocG9pbnQgcmVnaXN0cmF0aW9uIHdpbGwg
ZmFpbCBpZiB0aGUgd2F0Y2hwb2ludCBzZXQgaXMgYWxyZWFkeQorICAgICAgICBpbnZhbGlkYXRl
ZC4gTm93IGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgaW50ZXJlc3RpbmcgaW50ZXJsZWF2aW5nczoK
KyAgICAgICAgCisgICAgICAgIFVuaW5pdGlhbGl6ZWQtPk0xLT5NMi0+QzEtPkMyOiBDb21waWxl
ciBzZWVzIElzV2F0Y2hpbmcgYmVjYXVzZSBvZiB0aGUgbXV0YXRvcidzIHN0b3JlCisgICAgICAg
ICAgICBvcGVyYXRpb24sIGFuZCB0aGUgdmFyaWFibGUgaXMgZm9sZGVkLiBUaGUgZmVuY2luZyBl
bnN1cmVzIHRoYXQgQzIgc2VlcyB0aGUgdmFsdWUKKyAgICAgICAgICAgIHN0b3JlZCBpbiBNMSAt
IGkuZS4gd2UgZm9sZCBvbiB0aGUgdmFsdWUgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIHdhdGNocG9p
bnRlZC4gSWYKKyAgICAgICAgICAgIGJlZm9yZSB0aGUgY29tcGlsYXRpb24gaXMgaW5zdGFsbGVk
IHRoZSBtdXRhdG9yIGV4ZWN1dGVzIGFub3RoZXIgc3RvcmUgdGhlbiB3ZQorICAgICAgICAgICAg
d2lsbCBiZSBzdXJlIHRoYXQgaXQgd2lsbCBiZSBhIGNvbXBsZXRlIHNlcXVlbmNlIG9mIE0xK00y
IHNpbmNlIGNvbXBpbGF0aW9ucyBnZXQKKyAgICAgICAgICAgIGluc3RhbGxlZCBhdCBzYWZlcG9p
bnRzIGFuZCBuZXZlciAiaW4gdGhlIG1pZGRsZSIgb2YgYSBwdXRfdG9fc2NvcGUuIEhlbmNlIHRo
YXQKKyAgICAgICAgICAgIGNvbXBpbGF0aW9uIGluc3RhbGxhdGlvbiB3aWxsIGJlIGludmFsaWRh
dGVkLiBJZiB0aGUgTTErTTIgc2VxdWVuY2UgaGFwcGVucyBhZnRlcgorICAgICAgICAgICAgdGhl
IGNvZGUgaXMgaW5zdGFsbGVkLCB0aGVuIHRoZSBjb2RlIHdpbGwgYmUgaW52YWxpZGF0ZWQgYnkg
dHJpZ2dlcmluZyBhIGpldHRpc29uLgorICAgICAgICAKKyAgICAgICAgVW5pbml0aWFsaXplZC0+
TTEtPkMxLT5DMi0+TTI6IENvbXBpbGVyIHNlZXMgVW5pbml0aWFsaXplZCBhbmQgd2lsbCBub3Qg
Zm9sZC4gVGhpcyBpcworICAgICAgICAgICAgYSBzZW5zaWJsZSBvdXRjb21lIHNpbmNlIGlmIHRo
ZSBjb21waWxlciByZWFkIHRoZSB2YXJpYWJsZSdzIHZhbHVlLCBpdCB3b3VsZCBoYXZlCisgICAg
ICAgICAgICBzZWVuIFVuZGVmaW5lZC4KKyAgICAgICAgCisgICAgICAgIFVuaW5pdGlhbGl6ZWQt
PkMxLT5DMi0+TTEtPk0yOiBDb21waWxlciBzZWVzIFVuaW5pdGlhbGl6ZWQgYW5kIHdpbGwgbm90
IGZvbGQuCisgICAgICAgIFVuaW5pdGlhbGl6ZWQtPkMxLT5NMS0+QzItPk0yOiBDb21waWxlciBz
ZWVzIFVuaW5pdGlhbGl6ZWQgYW5kIHdpbGwgbm90IGZvbGQuCisgICAgICAgIFVuaW5pdGlhbGl6
ZWQtPkMxLT5NMS0+TTItPkMyOiBDb21waWxlciBzZWVzIFVuaW5pdGlhbGl6ZWQgYW5kIHdpbGwg
bm90IGZvbGQuCisgICAgICAgIFVuaW5pdGlhbGl6ZWQtPk0xLT5DMS0+TTItPkMyOiBDb21waWxl
ciBzZWVzIFVuaW5pdGlhbGl6ZWQgYW5kIHdpbGwgbm90IGZvbGQuCisgICAgICAgIAorICAgICAg
ICBJc1dhdGNoZWQtPk0xLT5NMi0+QzEtPkMyOiBDb21waWxlciBzZWVzIElzSW52YWxpZGF0ZWQg
YW5kIHdpbGwgbm90IGZvbGQuCisgICAgICAgIAorICAgICAgICBJc1dhdGNoZWQtPk0xLT5DMS0+
QzItPk0yOiBDb21waWxlciB3aWxsIGZvbGQsIGJ1dCB3aWxsIGFsc28gcmVnaXN0ZXIgYSBkZXNp
cmVkCisgICAgICAgICAgICB3YXRjaHBvaW50LCBhbmQgdGhhdCB3YXRjaHBvaW50IHdpbGwgZ2V0
IGludmFsaWRhdGVkIGJlZm9yZSB0aGUgY29kZSBpcyBpbnN0YWxsZWQuCisgICAgICAgIAorICAg
ICAgICBJc1dhdGNoZWQtPk0xLT5DMS0+TTItPkMyOiBBcyBhYm92ZSwgd2lsbCBmb2xkIGJ1dCB0
aGUgY29kZSB3aWxsIGdldCBpbnZhbGlkYXRlZC4KKyAgICAgICAgSXNXYXRjaGVkLT5DMS0+QzIt
Pk0xLT5NMjogQXMgYWJvdmUsIHdpbGwgZm9sZCBidXQgdGhlIGNvZGUgd2lsbCBnZXQgaW52YWxp
ZGF0ZWQuCisgICAgICAgIElzV2F0Y2hlZC0+QzEtPk0xLT5DMi0+TTI6IEFzIGFib3ZlLCB3aWxs
IGZvbGQgYnV0IHRoZSBjb2RlIHdpbGwgZ2V0IGludmFsaWRhdGVkLgorICAgICAgICBJc1dhdGNo
ZWQtPkMxLT5NMS0+TTItPkMyOiBBcyBhYm92ZSwgd2lsbCBmb2xkIGJ1dCB0aGUgY29kZSB3aWxs
IGdldCBpbnZhbGlkYXRlZC4KKyAgICAgICAgCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGtpbmQg
b2YgcmVhc29uaW5nIHNob3dzIHdoeSBoYXZpbmcgdGhlIG11dGF0b3IgZmlyc3QgYnVtcCB0aGUg
c3RhdGUgYW5kCisgICAgICAgIHRoZW4gc3RvcmUgdGhlIG5ldyB2YWx1ZSB3b3VsZCBiZSB3cm9u
Zy4gSWYgd2UgaGFkIGRvbmUgdGhhdCAoTTEgPSBidW1wIHN0YXRlLCBNMiA9CisgICAgICAgIGV4
ZWN1dGUgcHV0KSB0aGVuIHdlIGNvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBkZWFkbHkgaW50ZXJs
ZWF2aW5nczoKKyAgICAgICAgCisgICAgICAgIFVuaW5pdGlhbGl6ZWQtPk0xLT5DMS0+QzItPk0y
OgorICAgICAgICBVbmluaXRpYWxpemVkLT5NMS0+QzEtPk0yLT5DMjogTXV0YXRvciBidW1wcyB0
aGUgc3RhdGUgdG8gSXNXYXRjaGVkIGFuZCB0aGVuIHRoZQorICAgICAgICAgICAgY29tcGlsZXIg
Zm9sZHMgVW5kZWZpbmVkLCBzaW5jZSBNMiBoYXNuJ3QgZXhlY3V0ZWQgeWV0LiBBbHRob3VnaCBD
MiB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgIHdhdGNocG9pbnQsIE0xIGRpZG4ndCBub3RpZnkg
aXQgLSBpdCBtZWFybHkgaW5pdGlhdGVkIHdhdGNoaW5nLiBNMiB0aGVuIHN0b3JlcyBhCisgICAg
ICAgICAgICB2YWx1ZSBvdGhlciB0aGFuIFVuZGVmaW5lZCwgYW5kIHlvdSdyZSB0b2FzdC4KKyAg
ICAgICAgCisgICAgICAgIFlvdSBjb3VsZCBmaXggdGhpcyBzb3J0IG9mIHRoaW5nIGJ5IG1ha2lu
ZyB0aGUgRGVzaXJlZCBXYXRjaHBvaW50cyBtYWNoaW5lcnkgbW9yZQorICAgICAgICBzb3BoaXN0
aWNhdGVkLCBmb3IgZXhhbXBsZSBoYXZpbmcgaXQgdHJhY2sgdGhlIHZhbHVlIHRoYXQgd2FzIGZv
bGRlZDsgaWYgdGhlIGdsb2JhbAorICAgICAgICB2YXJpYWJsZSdzIHZhbHVlIHdhcyBsYXRlciBm
b3VuZCB0byBiZSBkaWZmZXJlbnQgdGhlbiB3ZSBjb3VsZCBpbnZhbGlkYXRlIHRoZQorICAgICAg
ICBjb21waWxhdGlvbi4gWW91IGNvdWxkIGFsc28gZml4IGl0IGJ5IGhhdmluZyB0aGUgY29tcGls
ZXIgYWxzbyBjaGVjayB0aGF0IHRoZSB2YWx1ZSBvZgorICAgICAgICB0aGUgdmFyaWFibGUgaXMg
bm90IFVuZGVmaW5lZCBiZWZvcmUgZm9sZGluZy4gV2hpbGUgdGhvc2UgYWxsIHNvdW5kIGdyZWF0
LCBJIGRlY2lkZWQKKyAgICAgICAgdG8gaW5zdGVhZCBqdXN0IHVzZSB0aGUgcmlnaHQgaW50ZXJs
ZWF2aW5nIHNpbmNlIHRoYXQgcmVzdWx0cyBpbiBsZXNzIGNvZGUgYW5kIGZlZWxzCisgICAgICAg
IG1vcmUgaW50dWl0aXZlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIDAuNSUgc3BlZWQt
dXAgb24gU3VuU3BpZGVyLCBtb3N0bHkgZHVlIHRvIGEgMjAlIHNwZWVkLXVwIG9uIG1hdGgtY29y
ZGljLgorICAgICAgICBJdCdzIGEgMC42JSBzbG93LWRvd24gb24gTG9uZ1NwaWRlciwgbW9zdGx5
IGR1ZSB0byBhIDI1JSBzbG93LWRvd24gb24gM2QtY3ViZS4gVGhpcyBpcworICAgICAgICBiZWNh
dXNlIDNkLWN1YmUgdGFrZXMgZ2xvYmFsIHZhcmlhYmxlIGFzc2lnbm1lbnQgc2xvdyBwYXRocyB2
ZXJ5IG9mdGVuLiBOb3RlIHRoYXQgdGhpcworICAgICAgICAzZC1jdWJlIHNsb3ctZG93biBkb2Vz
bid0IG1hbmlmZXN0IGFzIG11Y2ggaW4gU3VuU3BpZGVyIChvbmx5IDYlIHRoZXJlKS4gVGhpcyBw
YXRjaCBpcworICAgICAgICBhbHNvIGEgMS41JSBzcGVlZC11cCBvbiBWOHY3IGFuZCBhIDIuOCUg
c3BlZWQtdXAgb24gT2N0YW5lIHYxLCBtb3N0bHkgZHVlIHRvIGRlbHRhYmx1ZQorICAgICAgICAo
My43JSksIHJpY2hhcmRzICg0JSksIGFuZCBtYW5kcmVlbCAoMjYlKS4gVGhpcyBpcyBhIDIlIHNw
ZWVkLXVwIG9uIEtyYWtlbiwgbW9zdGx5IGR1ZQorICAgICAgICB0byBhIDE3LjUlIHNwZWVkLXVw
IG9uIGltYWdpbmctZ2F1c3NpYW4tYmx1ci4gU29tZXRoaW5nIHRoYXQgcmVhbGx5IGlsbHVzdHJh
dGVzIHRoZQorICAgICAgICBzbGFtLWR1bmstaXR1ZGUgb2YgdGhpcyBwYXRjaCBpcyB0aGUgd2lk
ZSByYW5nZSBvZiBzcGVlZC11cHMgb24gSlNSZWdyZXNzLiBDYXN1YWwgSlMKKyAgICAgICAgcHJv
Z3JhbW1pbmcgb2Z0ZW4gbGVhZHMgdG8gZ2xvYmFsLXZhci1iYXNlZCBpZGlvbXMgYW5kIHRob3Nl
IHZhcmlhYmxlcyB0ZW5kIHRvIGJlCisgICAgICAgIGFzc2lnbmVkIG9uY2UsIGxlYWRpbmcgdG8g
ZXhjZWxsZW50IGNvbnN0YW50IGZvbGRpbmcgb3Bwb3J0dW5pdGllcyBpbiBhbiBvcHRpbWl6aW5n
CisgICAgICAgIEpJVC4gVGhpcyBpcyB2ZXJ5IGV2aWRlbnQgaW4gdGhlIHNwZWVkLXVwcyBvbiBK
U1JlZ3Jlc3MuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAgICAg
ICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmRtYlNZKToKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJN
djdBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmRtYlNZKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTY0OjptZW1mZW5jZSk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNdjcuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6bG9h
ZDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjptZW1mZW5jZSk6CisgICAg
ICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Lmg6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Ojpsb2FkOCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Ojpz
dG9yZTgpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6Z2V0VW51c2VkUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6c3RvcmU4KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om1lbW9yeUZlbmNlKToKKyAgICAgICAg
KiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6OmxvYWQ4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OnN0b3JlOCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpYODZBc3NlbWJsZXI6Om1vdmJfcm0pOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJs
ZXI6Om1vdnpibF9tcik6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6bWZlbmNlKToKKyAg
ICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpYODZJbnN0cnVjdGlvbkZvcm1hdHRlcjo6dGhyZWVC
eXRlT3ApOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0
dGVyOjpvbmVCeXRlT3A4KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvV2F0
Y2hwb2ludC5jcHA6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OldhdGNocG9pbnRTZXQp
OgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjphZGQpOgorICAgICAgICAoSlNDOjpXYXRj
aHBvaW50U2V0Ojpub3RpZnlXcml0ZVNsb3cpOgorICAgICAgICAqIGJ5dGVjb2RlL1dhdGNocG9p
bnQuaDoKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6c3RhdGUpOgorICAgICAgICAoSlND
OjpXYXRjaHBvaW50U2V0Ojppc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50
U2V0OjphZGRyZXNzT2ZTZXRJc05vdEVtcHR5KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjo6OmV4ZWN1dGVFZmZlY3Rz
KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRKU0NvbnN0YW50Rm9yVmFsdWUpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Rml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2Rl
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omlz
U3Ryb25nbHlQcm92ZWRDb25zdGFudEluKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNJ
ZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1Jl
Z2lzdGVyUG9pbnRlcik6CisgICAgICAgICogZGZnL0RGR05vZGVGbGFncy5oOgorICAgICAgICAq
IGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlTm90aWZ5UHV0R2xvYmFsVmFyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExBYmJyZXZpYXRlZFR5cGVzLmg6CisgICAgICAgICogZnRs
L0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpidWlsZEZlbmNlKToKKyAg
ICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5D
b21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oOgorICAgICAg
ICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZU5vdGlmeVB1dEdsb2JhbFZhcik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5o
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZmVuY2UpOgorICAgICAgICAqIGppdC9KSVQu
aDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXIpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbToKKyAgICAgICAgKiBsbHZtL0xMVk1BUElGdW5jdGlvbnMuaDoKKyAgICAgICAgKiBv
ZmZsaW5lYXNtL2FybS5yYjoKKyAgICAgICAgKiBvZmZsaW5lYXNtL2FybTY0LnJiOgorICAgICAg
ICAqIG9mZmxpbmVhc20vY2xvb3AucmI6CisgICAgICAgICogb2ZmbGluZWFzbS9pbnN0cnVjdGlv
bnMucmI6CisgICAgICAgICogb2ZmbGluZWFzbS94ODYucmI6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjphZGRHbG9i
YWxWYXIpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6YWRkRnVuY3Rpb24pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OmFkZFZhcik6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjphZGRDb25zdCk6
CisgICAgICAgICogcnVudGltZS9KU1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6YWJzdHJhY3RB
Y2Nlc3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAg
ICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0
aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwOgorICAgICAg
ICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5Ojpjb3VsZEJlV2F0Y2hlZCk6CisgICAgICAgIChKU0M6
OlN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKToKKyAgICAgICAgKEpTQzo6U3ltYm9s
VGFibGVFbnRyeTo6bm90aWZ5V3JpdGVTbG93KToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRh
YmxlLmg6CisKIDIwMTMtMTEtMTkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxl
LmNvbT4KIAogICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIgbmVlZHMgdG8gdXNlIERlbGF5ZWRS
ZWxlYXNlU2NvcGUgdG9vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FS
TTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk02NEFzc2VtYmxlci5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1
OTUsNiArMTU5NSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnNuKG5vcFBzZXVkbygp
KTsKICAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRtYlNZKCkKKyAgICB7Cisg
ICAgICAgIGluc24oMHhkNTAzM2ZiZik7CisgICAgfQogCiAgICAgdGVtcGxhdGU8aW50IGRhdGFz
aXplPgogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBvcm4oUmVnaXN0ZXJJRCByZCwgUmVnaXN0ZXJJ
RCBybiwgUmVnaXN0ZXJJRCBybSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQVJNdjdBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNzEzLDYgKzcxMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIE9QX01PVlQgICAgICAgICA9IDB4
RjJDMCwKICAgICAgICAgT1BfVUJGWF9UMSAgICAgID0gMHhGM0MwLAogICAgICAgICBPUF9OT1Bf
VDJhICAgICAgPSAweEYzQUYsCisgICAgICAgIE9QX0RNQl9TWV9UMmEgICA9IDB4RjNCRiwKICAg
ICAgICAgT1BfU1RSQl9pbW1fVDMgID0gMHhGODAwLAogICAgICAgICBPUF9TVFJCX3JlZ19UMiAg
PSAweEY4MDAsCiAgICAgICAgIE9QX0xEUkJfaW1tX1QzICA9IDB4RjgxMCwKQEAgLTc2OSw2ICs3
NzAsNyBAQCBwcml2YXRlOgogICAgICAgICBPUF9WQ1ZUU0RfVDFiICAgPSAweDBBNDAsCiAgICAg
ICAgIE9QX1ZDVlREU19UMWIgICA9IDB4MEE0MCwKICAgICAgICAgT1BfTk9QX1QyYiAgICAgID0g
MHg4MDAwLAorICAgICAgICBPUF9ETUJfU1lfVDJhICAgPSAweDhGNUYsCiAgICAgICAgIE9QX0Jf
VDNiICAgICAgICA9IDB4ODAwMCwKICAgICAgICAgT1BfQl9UNGIgICAgICAgID0gMHg5MDAwLAog
ICAgIH0gT3Bjb2RlSUQyOwpAQCAtMTk4MCw2ICsxOTgyLDExIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDE2T3AxNihPUF9OT1BfVDJhLCBPUF9OT1BfVDJi
KTsKICAgICB9CisgICAgCisgICAgdm9pZCBkbWJTWSgpCisgICAgeworICAgICAgICBtX2Zvcm1h
dHRlci50d29Xb3JkT3AxNk9wMTYoT1BfRE1CX1NZX1QyYSwgT1BfRE1CX1NZX1QyYik7CisgICAg
fQogCiAgICAgQXNzZW1ibGVyTGFiZWwgbGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkKICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIy
NTUsNiArMjI1NSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5ub3Ao
KTsKICAgICB9CisgICAgCisgICAgdm9pZCBtZW1mZW5jZSgpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5kbWJTWSgpOworICAgIH0KIAogCiAgICAgLy8gTWlzYyBoZWxwZXIgZnVuY3Rpb25z
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TXY3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NTIsNiArNjUyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgbG9hZDhTaWduZWQoc2V0dXBBcm1BZGRy
ZXNzKGFkZHJlc3MpLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIGxvYWQ4KGNvbnN0IHZvaWQq
IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihhZGRyZXNzKSwgZGVzdCk7CisgICAgICAgIGxvYWQ4KGRlc3QsIGRlc3QpOworICAgIH0K
KwogICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBh
ZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBEYXRhTGFiZWwzMiBsYWJl
bCA9IG1vdmVXaXRoUGF0Y2goVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgZGF0YVRlbXBS
ZWdpc3Rlcik7CkBAIC0xMjMxLDYgKzEyMzcsMTEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBtZW1mZW5jZSgpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5kbWJTWSgpOworICAgIH0KKyAgICAKICAgICBzdGF0aWMgdm9pZCBy
ZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxv
Y2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBUk12N0Fzc2VtYmxlcjo6
cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0
aW9uLmRhdGFMb2NhdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OnN1YjMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpv
cjMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpsb2FkMzI7CisgICAgdXNp
bmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmxvYWQ4OwogICAgIHVzaW5nIE1hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uOjpzdG9yZTMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
OjpzdG9yZTg7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmJyYW5jaDMyOwpA
QCAtMTA0LDYgKzEwNSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZsX21yKGFkZHJlc3MsIGRlc3QpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQ4KGNvbnN0
IHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1vdnpibF9tcihhZGRyZXNzLCBkZXN0KTsKKyAgICB9CiAKICAgICBDb252ZXJ0aWJsZUxv
YWRMYWJlbCBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewpAQCAtMTM4LDYgKzE0NCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZsX3JtKHNyYywgYWRkcmVzcyk7CiAgICAgfQorICAgIAorICAgIHZvaWQg
c3RvcmU4KFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubW92Yl9ybShzcmMsIGFkZHJlc3MpOworICAgIH0KIAogICAgIHZvaWQgc3RvcmU4
KFRydXN0ZWRJbW0zMiBpbW0sIHZvaWQqIGFkZHJlc3MpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDYsNiAr
NjA2LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWN4OwogICAg
IH0KIAorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVySUQgZ2V0VW51c2VkUmVnaXN0
ZXIoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgaWYgKGFkZHJlc3MuYmFzZSAhPSBY
ODZSZWdpc3RlcnM6OmVheCkKKyAgICAgICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6OmVheDsK
KworICAgICAgICBBU1NFUlQoYWRkcmVzcy5iYXNlICE9IFg4NlJlZ2lzdGVyczo6ZWR4KTsKKyAg
ICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWR4OworICAgIH0KKwogICAgIHZvaWQgc3RvcmU4
KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7CiAjaWYgQ1BVKFg4NikK
QEAgLTYyNCw2ICs2MzMsMjUgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmJfcm0oc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4
LCBhZGRyZXNzLnNjYWxlKTsKICAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZTgoUmVnaXN0ZXJJ
RCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisjaWYgQ1BVKFg4NikKKyAgICAgICAgLy8g
T24gMzItYml0IHg4NiB3ZSBjYW4gb25seSBzdG9yZSBmcm9tIHRoZSBmaXJzdCA0IHJlZ2lzdGVy
czsKKyAgICAgICAgLy8gZXNwLi5lZGkgYXJlIG1hcHBlZCB0byB0aGUgJ2gnIHJlZ2lzdGVycyEK
KyAgICAgICAgaWYgKHNyYyA+PSA0KSB7CisgICAgICAgICAgICAvLyBQaWNrIGEgdGVtcG9yYXJ5
IHJlZ2lzdGVyLgorICAgICAgICAgICAgUmVnaXN0ZXJJRCB0ZW1wID0gZ2V0VW51c2VkUmVnaXN0
ZXIoYWRkcmVzcyk7CisKKyAgICAgICAgICAgIC8vIFN3YXAgdG8gdGhlIHRlbXBvcmFyeSByZWdp
c3RlciB0byBwZXJmb3JtIHRoZSBzdG9yZS4KKyAgICAgICAgICAgIHN3YXAoc3JjLCB0ZW1wKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJfcm0odGVtcCwgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBzd2FwKHNyYywgdGVtcCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX3JtKHNy
YywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQogCiAgICAgdm9pZCBzdG9y
ZTE2KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7CkBAIC0xNDE5LDYg
KzE0NDcsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CiAg
ICAgfQorICAgIAorICAgIHZvaWQgbWVtb3J5RmVuY2UoKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubWZlbmNlKCk7CisgICAgfQogCiAgICAgc3RhdGljIHZvaWQgcmVwbGFjZVdpdGhKdW1w
KENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQsIENvZGVMb2NhdGlvbkxhYmVsIGRl
c3RpbmF0aW9uKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDE1OTQ2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXJYODZDb21tb246OmJyYW5jaEFkZDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uOjpvcjMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzdWIz
MjsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZDg7CiAgICAgdXNpbmcg
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmxvYWQzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6c3RvcmUzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6
c3RvcmU4OwpAQCAtOTEsNiArOTIsMTIgQEAgcHVibGljOgogICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAgICAgIHN1YjMyKGlt
bSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIpKTsKICAgICB9CisgICAgCisgICAgdm9pZCBsb2Fk
OChjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcyksIGRlc3QpOworICAgICAgICBsb2FkOChkZXN0LCBk
ZXN0KTsKKyAgICB9CiAKICAgICB2b2lkIGxvYWQzMihjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewpAQCAtMTI2LDYgKzEzMywxMiBAQCBwdWJsaWM6CiAgICAgICAg
IHN0b3JlOChpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7CiAgICAgfQogCisgICAgdm9p
ZCBzdG9yZTgoUmVnaXN0ZXJJRCByZWcsIHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcyksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHN0
b3JlOChyZWcsIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7CisgICAgfQorCiAgICAgQ2FsbCBj
YWxsKCkKICAgICB7CiAgICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCA9IG1vdmVXaXRoUGF0Y2go
VHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaFJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMTU5NDYyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjY3LDYgKzI2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIE9QMl9NT1ZEX0Vk
VmQgICAgICAgPSAweDdFLAogICAgICAgICBPUDJfSkNDX3JlbDMyICAgICAgID0gMHg4MCwKICAg
ICAgICAgT1BfU0VUQ0MgICAgICAgICAgICA9IDB4OTAsCisgICAgICAgIE9QMl8zQllURV9FU0NB
UEUgICAgPSAweEFFLAogICAgICAgICBPUDJfSU1VTF9HdkV2ICAgICAgID0gMHhBRiwKICAgICAg
ICAgT1AyX01PVlpYX0d2RWIgICAgICA9IDB4QjYsCiAgICAgICAgIE9QMl9NT1ZTWF9HdkViICAg
ICAgPSAweEJFLApAQCAtMjc3LDYgKzI3OCwxMCBAQCBwcml2YXRlOgogICAgICAgICBPUDJfUFNS
TFFfVWRxSWIgICAgID0gMHg3MywKICAgICAgICAgT1AyX1BPUl9WZHFXZHEgICAgICA9IDBYRUIs
CiAgICAgfSBUd29CeXRlT3Bjb2RlSUQ7CisgICAgCisgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAg
ICAgT1AzX01GRU5DRSAgICAgICAgICA9IDB4RjAsCisgICAgfSBUaHJlZUJ5dGVPcGNvZGVJRDsK
IAogICAgIFR3b0J5dGVPcGNvZGVJRCBqY2NSZWwzMihDb25kaXRpb24gY29uZCkKICAgICB7CkBA
IC0xMzAyLDYgKzEzMDcsMTggQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3AoT1BfR1JPVVAxMV9FdkliLCBHUk9VUDExX01PViwgYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZz
ZXQpOwogICAgICAgICBtX2Zvcm1hdHRlci5pbW1lZGlhdGU4KGltbSk7CiAgICAgfQorCisjaWYg
IUNQVShYODZfNjQpCisgICAgdm9pZCBtb3ZiX3JtKFJlZ2lzdGVySUQgc3JjLCBjb25zdCB2b2lk
KiBhZGRyKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX01PVl9FYkdi
LCBzcmMsIGFkZHIpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIHZvaWQgbW92Yl9ybShSZWdp
c3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAg
bV9mb3JtYXR0ZXIub25lQnl0ZU9wOChPUF9NT1ZfRWJHYiwgc3JjLCBiYXNlLCBvZmZzZXQpOwor
ICAgIH0KICAgICAKICAgICB2b2lkIG1vdmJfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlKQogICAgIHsKQEAg
LTE0NDksNiArMTQ2NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVP
cChPUDJfTU9WWlhfR3ZFYiwgZHN0LCBiYXNlLCBpbmRleCwgc2NhbGUsIG9mZnNldCk7CiAgICAg
fQogCisjaWYgIUNQVShYODZfNjQpCisgICAgdm9pZCBtb3Z6YmxfbXIoY29uc3Qgdm9pZCogYWRk
cmVzcywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRl
T3AoT1AyX01PVlpYX0d2RWIsIGRzdCwgYWRkcmVzcyk7CisgICAgfQorI2VuZGlmCisKICAgICB2
b2lkIG1vdnNibF9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0
KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9NT1ZTWF9HdkViLCBk
c3QsIGJhc2UsIG9mZnNldCk7CkBAIC0xODczLDcgKzE4OTcsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fZm9ybWF0dGVyLnByZWZpeChQUkVfU1NFX0YyKTsKICAgICAgICAgbV9mb3JtYXR0ZXIudHdv
Qnl0ZU9wKE9QMl9TUVJUU0RfVnNkV3NkLCAoUmVnaXN0ZXJJRClkc3QsIChSZWdpc3RlcklEKXNy
Yyk7CiAgICAgfQotCisgICAgCiAgICAgLy8gTWlzYyBpbnN0cnVjdGlvbnM6CiAKICAgICB2b2lk
IGludDMoKQpAQCAtMTg5MCw2ICsxOTE0LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1f
Zm9ybWF0dGVyLnByZWZpeChQUkVfUFJFRElDVF9CUkFOQ0hfTk9UX1RBS0VOKTsKICAgICB9Cisg
ICAgCisgICAgdm9pZCBtZmVuY2UoKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudGhyZWVC
eXRlT3AoT1AzX01GRU5DRSk7CisgICAgfQogCiAgICAgLy8gQXNzZW1ibGVyIGFkbWluIG1ldGhv
ZHM6CiAKQEAgLTIzMDEsNiArMjMzMCwxNCBAQCBwcml2YXRlOgogICAgICAgICB9CiAjZW5kaWYK
IAorICAgICAgICB2b2lkIHRocmVlQnl0ZU9wKFRocmVlQnl0ZU9wY29kZUlEIG9wY29kZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25T
aXplKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEJ5dGVVbmNoZWNrZWQoT1BfMkJZVEVfRVND
QVBFKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEJ5dGVVbmNoZWNrZWQoT1AyXzNCWVRFX0VT
Q0FQRSk7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRCeXRlVW5jaGVja2VkKG9wY29kZSk7Cisg
ICAgICAgIH0KKwogI2lmIENQVShYODZfNjQpCiAgICAgICAgIC8vIFF1YWQtd29yZC1zaXplZCBv
cGVyYW5kczoKICAgICAgICAgLy8KQEAgLTI0MTMsNiArMjQ1MCwxNCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgcmVnaXN0ZXJNb2RSTShyZWcsIHJtKTsKICAgICAgICAgfQogCisgICAgICAgIHZv
aWQgb25lQnl0ZU9wOChPbmVCeXRlT3Bjb2RlSUQgb3Bjb2RlLCBpbnQgcmVnLCBSZWdpc3RlcklE
IGJhc2UsIGludCBvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVmZmVyLmVuc3Vy
ZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSk7CisgICAgICAgICAgICBlbWl0UmV4SWYoYnl0ZVJl
Z1JlcXVpcmVzUmV4KHJlZykgfHwgYnl0ZVJlZ1JlcXVpcmVzUmV4KGJhc2UpLCByZWcsIDAsIGJh
c2UpOworICAgICAgICAgICAgbV9idWZmZXIucHV0Qnl0ZVVuY2hlY2tlZChvcGNvZGUpOworICAg
ICAgICAgICAgbWVtb3J5TW9kUk0ocmVnLCBiYXNlLCBvZmZzZXQpOworICAgICAgICB9CisKICAg
ICAgICAgdm9pZCBvbmVCeXRlT3A4KE9uZUJ5dGVPcGNvZGVJRCBvcGNvZGUsIGludCByZWcsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBpbnQgb2Zmc2V0KQog
ICAgICAgICB7CiAgICAgICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlv
blNpemUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODM3LDkgKzE4MzcsNiBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpZiAoZW50
cnkuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIC8vIEl0
J3MgbGlrZWx5IHRoYXQgd2UnbGwgd3JpdGUgdG8gdGhpcyB2YXIsIHNvIG5vdGlmeSBub3cgYW5k
IGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBkb2luZyBzbyBhdCBydW50aW1lLgotICAgICAgICAgICAg
ZW50cnkubm90aWZ5V3JpdGUoKTsKLQogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAwXSA9
IHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUob3BfaW5pdF9nbG9iYWxfY29uc3QpOwogICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAxXSA9ICZtX2dsb2JhbE9iamVjdC0+cmVnaXN0ZXJB
dChlbnRyeS5nZXRJbmRleCgpKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTU5NDYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIFdhdGNocG9pbnQ6On5XYXRjaHBvaW50KCkKIAog
V2F0Y2hwb2ludFNldDo6V2F0Y2hwb2ludFNldChXYXRjaHBvaW50U3RhdGUgc3RhdGUpCiAgICAg
OiBtX3N0YXRlKHN0YXRlKQorICAgICwgbV9zZXRJc05vdEVtcHR5KGZhbHNlKQogewogfQogCkBA
IC02MCw2ICs2MSw3IEBAIHZvaWQgV2F0Y2hwb2ludFNldDo6YWRkKFdhdGNocG9pbnQqIHdhdGMK
ICAgICBpZiAoIXdhdGNocG9pbnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3NldC5wdXNoKHdh
dGNocG9pbnQpOworICAgIG1fc2V0SXNOb3RFbXB0eSA9IHRydWU7CiAgICAgbV9zdGF0ZSA9IElz
V2F0Y2hlZDsKIH0KIApAQCAtNjcsNiArNjksNyBAQCB2b2lkIFdhdGNocG9pbnRTZXQ6Om5vdGlm
eVdyaXRlU2xvdygpCiB7CiAgICAgQVNTRVJUKHN0YXRlKCkgPT0gSXNXYXRjaGVkKTsKICAgICAK
KyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIGZpcmVBbGxXYXRjaHBvaW50cygpOwog
ICAgIG1fc3RhdGUgPSBJc0ludmFsaWRhdGVkOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJl
dmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBv
aW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDE4IEBAIHB1YmxpYzoKICAgICBXYXRj
aHBvaW50U2V0KFdhdGNocG9pbnRTdGF0ZSk7CiAgICAgfldhdGNocG9pbnRTZXQoKTsgLy8gTm90
ZSB0aGF0IHRoaXMgd2lsbCBub3QgZmlyZSBhbnkgb2YgdGhlIHdhdGNocG9pbnRzOyBpZiB5b3Ug
bmVlZCB0byBrbm93IHdoZW4gYSBXYXRjaHBvaW50U2V0IGRpZXMgdGhlbiB5b3UgbmVlZCBhIHNl
cGFyYXRlIG1lY2hhbmlzbSBmb3IgdGhpcy4KICAgICAKLSAgICBXYXRjaHBvaW50U3RhdGUgc3Rh
dGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxXYXRjaHBvaW50U3RhdGU+KG1fc3RhdGUp
OyB9CisgICAgLy8gSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgZnJvbSBhbm90aGVyIHRocmVhZC4g
SXQgbWF5IHJldHVybiBhbiBvbGQKKyAgICAvLyBzdGF0ZS4gR3VhcmFudGVlcyB0aGF0IGlmICpm
aXJzdCogcmVhZCB0aGUgc3RhdGUoKSBvZiB0aGUgdGhpbmcgYmVpbmcKKyAgICAvLyB3YXRjaGVk
IGFuZCBpdCByZXR1cm5lZCBJc1dhdGNoZWQgYW5kICpzZWNvbmQqIHlvdSBhY3R1YWxseSByZWFk
IGl0cworICAgIC8vIHZhbHVlIHRoZW4gaXQncyBzYWZlIHRvIGFzc3VtZSB0aGF0IGlmIHRoZSBz
dGF0ZSBiZWluZyB3YXRjaGVkIGNoYW5nZXMKKyAgICAvLyB0aGVuIGFsc28gdGhlIHdhdGNocG9p
bnQgc3RhdGUoKSB3aWxsIGNoYW5nZSB0byBJc0ludmFsaWRhdGVkLgorICAgIFdhdGNocG9pbnRT
dGF0ZSBzdGF0ZSgpIGNvbnN0CisgICAgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsK
KyAgICAgICAgV2F0Y2hwb2ludFN0YXRlIHJlc3VsdCA9IHN0YXRpY19jYXN0PFdhdGNocG9pbnRT
dGF0ZT4obV9zdGF0ZSk7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KICAgICAKICAgICAvLyBJdCBpcyBzYWZlIHRvIGNhbGwgdGhp
cyBmcm9tIGFub3RoZXIgdGhyZWFkLiAgSXQgbWF5IHJldHVybiB0cnVlCiAgICAgLy8gZXZlbiBp
ZiB0aGUgc2V0IGFjdHVhbGx5IGhhZCBiZWVuIGludmFsaWRhdGVkLCBidXQgdGhhdCBvdWdodCB0
byBoYXBwZW4KQEAgLTY5LDcgKzgwLDYgQEAgcHVibGljOgogICAgIC8vIGlzc3VpbmcgYSBsb2Fk
LWxvYWQgZmVuY2UgcHJpb3IgdG8gcXVlcnlpbmcgdGhlIHN0YXRlLgogICAgIGJvb2wgaXNTdGls
bFZhbGlkKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwogICAg
ICAgICByZXR1cm4gc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkOwogICAgIH0KICAgICAvLyBMaWtl
IGlzU3RpbGxWYWxpZCgpLCBtYXkgYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQuCkBAIC05
OSw2ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgaW50OF90KiBhZGRyZXNzT2ZTdGF0
ZSgpIHsgcmV0dXJuICZtX3N0YXRlOyB9CisgICAgaW50OF90KiBhZGRyZXNzT2ZTZXRJc05vdEVt
cHR5KCkgeyByZXR1cm4gJm1fc2V0SXNOb3RFbXB0eTsgfQogICAgIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgbm90aWZ5V3JpdGVTbG93KCk7IC8vIENhbGwgb25seSBpZiB5b3UndmUgY2hl
Y2tlZCBpc1dhdGNoZWQuCiAgICAgCkBAIC0xMDksNiArMTIwLDcgQEAgcHJpdmF0ZToKICAgICAK
ICAgICBTZW50aW5lbExpbmtlZExpc3Q8V2F0Y2hwb2ludCwgQmFzaWNSYXdTZW50aW5lbE5vZGU8
V2F0Y2hwb2ludD4+IG1fc2V0OwogICAgIGludDhfdCBtX3N0YXRlOworICAgIGludDhfdCBtX3Nl
dElzTm90RW1wdHk7CiB9OwogCiAvLyBJbmxpbmVXYXRjaHBvaW50U2V0IGlzIGEgbG93LW92ZXJo
ZWFkLCBub24tY29weWFibGUgd2F0Y2hwb2ludCBzZXQgaW4gd2hpY2gKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUxMSw2
ICsxNTExLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgorICAgIGNh
c2UgTm90aWZ5UHV0R2xvYmFsVmFyOgogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTE2LDcgKzUxNiw3IEBAIHByaXZhdGU6CiAgICAgLy8gY29uc3RhbnQgZm9sZGluZy4gSS5l
LiBjcmVhdGluZyBjb25zdGFudHMgdXNpbmcgdGhpcyBpZiB3ZSBoYWQgY29uc3RhbnQKICAgICAv
LyBmaWVsZCBpbmZlcmVuY2Ugd291bGQgYmUgYSBiYWQgaWRlYSwgc2luY2UgdGhlIGJ5dGVjb2Rl
IHBhcnNlcidzIGZvbGRpbmcKICAgICAvLyBkb2Vzbid0IGhhbmRsZSBsaXZlbmVzcyBwcmVzZXJ2
YXRpb24uCi0gICAgTm9kZSogZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUgY29uc3RhbnRW
YWx1ZSkKKyAgICBOb2RlKiBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoSlNWYWx1ZSBjb25zdGFudFZh
bHVlLCBOb2RlRmxhZ3MgZmxhZ3MgPSBOb2RlSXNTdGF0aWNDb25zdGFudCkKICAgICB7CiAgICAg
ICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXg7CiAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmZp
bmRDb25zdGFudChjb25zdGFudFZhbHVlLCBjb25zdGFudEluZGV4KSkgewpAQCAtNTI2LDE2ICs1
MjYsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5z
aXplKCkgPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7CiAgICAg
ICAgIAotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChjb25zdGFudEluZGV4KTsKKyAgICAg
ICAgcmV0dXJuIGdldEpTQ29uc3RhbnQoY29uc3RhbnRJbmRleCwgZmxhZ3MpOwogICAgIH0KIAot
ICAgIE5vZGUqIGdldEpTQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnQpCisgICAgTm9kZSogZ2V0
SlNDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudCwgTm9kZUZsYWdzIGZsYWdzID0gTm9kZUlzU3Rh
dGljQ29uc3RhbnQpCiAgICAgewogICAgICAgICBOb2RlKiBub2RlID0gbV9jb25zdGFudHNbY29u
c3RhbnRdLmFzSlNWYWx1ZTsKICAgICAgICAgaWYgKG5vZGUpCiAgICAgICAgICAgICByZXR1cm4g
bm9kZTsKIAogICAgICAgICBOb2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9w
SW5mbyhjb25zdGFudCkpOworICAgICAgICByZXN1bHQtPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAg
ICAgICBtX2NvbnN0YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlID0gcmVzdWx0OwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTMxMDAsNyArMzEwMSwxMCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KEdsb2JhbFZhcldhdGNocG9pbnQsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKGlkZW50aWZpZXJO
dW1iZXIpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBnbG9iYWxP
YmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCk7Ci0gICAgICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZS5h
c0NlbGwoKSkpOworICAgICAgICAgICAgICAgIGlmIChzcGVjaWZpY1ZhbHVlLmlzQ2VsbCgpKQor
ICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxDb25zdGFu
dChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGdldEpTQ29uc3RhbnRGb3JW
YWx1ZShzcGVjaWZpY1ZhbHVlLCAwKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0zMTIzLDEyICszMTI3LDEz
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQpLnR5cGUoKTsKICAgICAgICAgICAgIFN0cmluZ0ltcGwqIHVp
ZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKIAotICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IDA7CisgICAgICAgICAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50cyA9IDA7CiAgICAg
ICAgICAgICB1aW50cHRyX3Qgb3BlcmFuZDsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2Jh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQot
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgICAgICAgICB3
YXRjaHBvaW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQ7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgb3BlcmFu
ZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5w
b2ludGVyKTsKQEAgLTMxNTMsMTAgKzMxNTgsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBHbG9iYWxW
YXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUpKSk7CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2Jh
bE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KCFlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpIHx8ICFtX2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGls
bFZhbGlkKGVudHJ5LndhdGNocG9pbnRTZXQoKSkpOworICAgICAgICAgICAgICAgIEFTU0VSVCh3
YXRjaHBvaW50cyA9PSBlbnRyeS53YXRjaHBvaW50U2V0KCkpOwogICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUHV0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIGdldChWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUpKSk7CisgICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRzLT5zdGF0ZSgpICE9
IElzSW52YWxpZGF0ZWQpCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5UHV0
R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSk7CiAg
ICAgICAgICAgICAgICAgLy8gS2VlcCBzY29wZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQuCiAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3Bl
KSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQy
LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNl
IEludmFsaWRhdGlvblBvaW50OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTm90aWZ5UHV0R2xvYmFsVmFyOgorICAgICAgICB3
cml0ZShXYXRjaHBvaW50X2ZpcmUpOworICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIENyZWF0
ZUFjdGl2YXRpb246CiAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1OTQ2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkwMyw2ICs5MDMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAgICBjYXNlIFB1dEdsb2JhbFZh
cjoKKyAgICAgICAgY2FzZSBOb3RpZnlQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFs
VmFyV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgogICAg
ICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzU5LDcgKzM1OSw4IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGlzU3Ryb25nbHlQcm92ZWRDb25zdGFudEluKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlz
Q29uc3RhbnQoKSAmJiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA9PSBpbmxpbmVDYWxsRnJh
bWU7CisgICAgICAgIHJldHVybiAhIShmbGFncygpICYgTm9kZUlzU3RhdGljQ29uc3RhbnQpCisg
ICAgICAgICAgICAmJiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA9PSBpbmxpbmVDYWxsRnJh
bWU7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNTdHJvbmdseVByb3ZlZENvbnN0YW50SW4oY29u
c3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKQEAgLTc0OSw3ICs3NTAsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgCiAgICAgYm9vbCBoYXNJZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2xvYmFsVmFyV2F0Y2hwb2ludDsKKyAgICAgICAgcmV0
dXJuIG9wKCkgPT0gR2xvYmFsVmFyV2F0Y2hwb2ludCB8fCBvcCgpID09IE5vdGlmeVB1dEdsb2Jh
bFZhcjsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlckZvckNoZWNr
KCkKQEAgLTc2MCw3ICs3NjEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNS
ZWdpc3RlclBvaW50ZXIoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0R2xvYmFs
VmFyIHx8IG9wKCkgPT0gUHV0R2xvYmFsVmFyIHx8IG9wKCkgPT0gR2xvYmFsVmFyV2F0Y2hwb2lu
dDsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0R2xvYmFsVmFyIHx8IG9wKCkgPT0gUHV0R2xv
YmFsVmFyIHx8IG9wKCkgPT0gR2xvYmFsVmFyV2F0Y2hwb2ludCB8fCBvcCgpID09IE5vdGlmeVB1
dEdsb2JhbFZhcjsKICAgICB9CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdp
c3RlclBvaW50ZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxh
Z3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFn
cy5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVGbGFncy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogI2RlZmluZSBOb2RlRXhpdHNGb3J3YXJkICAgICAgICAgICAg
ICAgICAweDgwMDAKIAorI2RlZmluZSBOb2RlSXNTdGF0aWNDb25zdGFudCAgICAgICAgICAgIDB4
MTAwMDAgLy8gVXNlZCBvbmx5IGJ5IHRoZSBwYXJzZXIsIHRvIGRldGVybWluZSBpZiBhIGNvbnN0
YW50IGFyb3NlIHN0YXRpY2FsbHkgYW5kIGhlbmNlIGNvdWxkIGJlIGZvbGRlZCBhdCBwYXJzZS10
aW1lLgorCiB0eXBlZGVmIHVpbnQzMl90IE5vZGVGbGFnczsKIAogc3RhdGljIGlubGluZSBib29s
IGJ5dGVjb2RlVXNlc0FzTnVtYmVyKE5vZGVGbGFncyBmbGFncykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYg
KzE4NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhQdXRD
bG9zdXJlVmFyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0R2xvYmFsVmFyLCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUp
IFwKKyAgICBtYWNybyhOb3RpZnlQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhHbG9iYWxWYXJXYXRjaHBvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oVmFySW5qZWN0aW9uV2F0Y2hwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KENoZWNrRnVuY3Rpb24sIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU5NDYyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTk4LDYgKzk5OCwxNCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0
cmluCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihleGVjLT5jb2RlQmxvY2soKS0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHN0cmluZy0+dmFsdWUo
ZXhlYykuaW1wbCgpKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAordm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgV2F0Y2hwb2ludFNldCog
c2V0KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgc2V0LT5ub3RpZnlXcml0ZSgpOworfQorCiBk
b3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJf
dCBiKQogewogICAgIHJldHVybiBmbW9kKGEsIGIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiAr
MTI1LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMgogSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBKU1N0cmluZyos
IEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmlu
ZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6
ZV90IHRhYmxlSW5kZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJp
bmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7Cit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgV2F0Y2hwb2ludFNldCop
OwogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAvLyBGSVhNRTogTWFrZSBjYWxscyB3b3JrIHdlbGwu
IEN1cnJlbnRseSB0aGV5J3JlIGEgcHVyZSByZWdyZXNzaW9uLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTUs
NyArNTE1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKICAg
ICAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgICAgICBjYXNlIENoZWNrVGllclVw
QW5kT1NSRW50ZXI6Ci0gICAgICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6IHsKKyAgICAgICAg
Y2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKKyAgICAgICAgY2FzZSBJbnQ1MlRvVmFsdWU6CisgICAg
ICAgIGNhc2UgSW50NTJUb0RvdWJsZTogewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3Vs
ZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAg
ICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhh
c2UuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTgwLDgg
KzU4Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAg
ICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgICAgICBjYXNlIExvb3BIaW50OgotICAgICAgICBj
YXNlIEludDUyVG9WYWx1ZToKLSAgICAgICAgY2FzZSBJbnQ1MlRvRG91YmxlOgorICAgICAgICBj
YXNlIE5vdGlmeVB1dEdsb2JhbFZhcjoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgYWxyZWFkeSBoYXMgYSBw
cmVkaWN0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNiArMjQyLDcgQEAgYm9v
bCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgSW50NTJUb0Rv
dWJsZToKICAgICBjYXNlIEludDUyVG9WYWx1ZToKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50
OgorICAgIGNhc2UgTm90aWZ5UHV0R2xvYmFsVmFyOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU5NDYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDA5Miw2ICs0MDkyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2Fz
ZSBOb3RpZnlQdXRHbG9iYWxWYXI6IHsKKyAgICAgICAgY29tcGlsZU5vdGlmeVB1dEdsb2JhbFZh
cihub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBWYXJJbmplY3Rpb25X
YXRjaHBvaW50OiB7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM2OCw2ICs0MzY4LDExIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbm9SZXN1
bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBOb3Rp
ZnlQdXRHbG9iYWxWYXI6IHsKKyAgICAgICAgY29tcGlsZU5vdGlmeVB1dEdsb2JhbFZhcihub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBv
aW50OiB7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1OTQ2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NjAxLDYgKzU2MDEsNDQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3
aXRjaChOb2RlKiBubwogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb3RpZnlQdXRHbG9iYWxWYXIoTm9kZSogbm9kZSkK
K3sKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgKKyAgICAgICAgbV9qaXQuZ3JhcGgoKS5p
ZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXJGb3JDaGVjaygpXSkud2F0Y2hwb2lu
dFNldCgpOworICAgIAorICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyB0
ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkOChzZXQtPmFkZHJlc3NP
ZlN0YXRlKCksIHRlbXBHUFIpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCByZWFk
eTsKKyAgICAKKyAgICByZWFkeS5hcHBlbmQobV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVx
dWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAKKyAgICBt
X2ppdC5tZW1vcnlGZW5jZSgpOworCisgICAgaWYgKHNldC0+c3RhdGUoKSA9PSBDbGVhcldhdGNo
cG9pbnQpIHsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNXYXRjaGVkID0KKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwgVHJ1c3Rl
ZEltbTMyKENsZWFyV2F0Y2hwb2ludCkpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmU4
KFRydXN0ZWRJbW0zMihJc1dhdGNoZWQpLCBzZXQtPmFkZHJlc3NPZlN0YXRlKCkpOworICAgICAg
ICByZWFkeS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgCisgICAgICAgIGlzV2F0Y2hl
ZC5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dD
YXNlID0gbV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLCBK
SVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU2V0SXNOb3RFbXB0eSgp
KSk7CisgICAgbV9qaXQuc3RvcmU4KFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSwgc2V0LT5h
ZGRyZXNzT2ZTdGF0ZSgpKTsKKworICAgIHJlYWR5LmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlz
LCBvcGVyYXRpb25Ob3RpZnlXcml0ZSwgTm9SZXN1bHQsIHNldCkpOworICAgIAorICAgIG5vUmVz
dWx0KG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjphZGRCcmFuY2goY29uc3QgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBqdW1wLmp1bXBzKCkuc2l6ZSgpOyBpLS07KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg0LDkgKzEwODQsOSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQog
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9XIG9w
ZXJhdGlvbiwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCkKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VXIG9wZXJhdGlvbiwgV2F0Y2hwb2lu
dFNldCogd2F0Y2hwb2ludFNldCkKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
KFRydXN0ZWRJbW1QdHIod2F0Y2hwb2ludFNldCkpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cih3YXRjaHBvaW50U2V0KSk7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgfQogCkBAIC0yMDQ1LDYgKzIwNDUs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUq
KTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKICAgICAKKyAgICB2b2lkIGNv
bXBpbGVOb3RpZnlQdXRHbG9iYWxWYXIoTm9kZSopOworICAgIAogICAgIC8vIHNpemUgY2FuIGJl
IGFuIGltbWVkaWF0ZSBvciBhIHJlZ2lzdGVyLCBhbmQgbXVzdCBiZSBpbiBieXRlcy4gSWYgc2l6
ZSBpcyBhIHJlZ2lzdGVyLAogICAgIC8vIGl0IG11c3QgYmUgYSBkaWZmZXJlbnQgcmVnaXN0ZXIg
dGhhbiByZXN1bHRHUFIuIEVtaXRzIGNvZGUgdGhhdCBwbGFjZSBhIHBvaW50ZXIgdG8KICAgICAv
LyB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0aW9uLiBUaGUgcmV0dXJuZWQganVtcCBpcyB0aGUganVt
cCB0byB0aGUgc2xvdyBwYXRoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YmJyZXZpYXRlZFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYmJyZXZpYXRlZFR5cGVzLmgJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0ZWRUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAordHlwZWRl
ZiBMTFZNQXRvbWljT3JkZXJpbmcgTEF0b21pY09yZGVyaW5nOwogdHlwZWRlZiBMTFZNQmFzaWNC
bG9ja1JlZiBMQmFzaWNCbG9jazsKIHR5cGVkZWYgTExWTUJ1aWxkZXJSZWYgTEJ1aWxkZXI7CiB0
eXBlZGVmIExMVk1DYWxsQ29udiBMQ2FsbENvbnY7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIxNyw2ICsyMTcsMTMgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRQdHJUb0ludChMQnVp
bAogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRCaXRDYXN0KExCdWlsZGVyIGJ1aWxkZXIsIExW
YWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+QnVpbGRCaXRDYXN0KGJ1aWxk
ZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkSUNtcChM
QnVpbGRlciBidWlsZGVyLCBMSW50UHJlZGljYXRlIGNvbmQsIExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkSUNtcChidWlsZGVyLCBjb25kLCBsZWZ0LCByaWdo
dCwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEZDbXAoTEJ1aWxkZXIgYnVpbGRl
ciwgTFJlYWxQcmVkaWNhdGUgY29uZCwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1
cm4gbGx2bS0+QnVpbGRGQ21wKGJ1aWxkZXIsIGNvbmQsIGxlZnQsIHJpZ2h0LCAiIik7IH0KKwor
ZW51bSBTeW5jaHJvbml6YXRpb25TY29wZSB7IFNpbmdsZVRocmVhZCwgQ3Jvc3NUaHJlYWQgfTsK
K3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRmVuY2UoTEJ1aWxkZXIgYnVpbGRlciwgTEF0b21p
Y09yZGVyaW5nIG9yZGVyaW5nLCBTeW5jaHJvbml6YXRpb25TY29wZSBzY29wZSA9IENyb3NzVGhy
ZWFkKQoreworICAgIHJldHVybiBsbHZtLT5CdWlsZEZlbmNlKGJ1aWxkZXIsIG9yZGVyaW5nLCBz
Y29wZSA9PSBTaW5nbGVUaHJlYWQsICIiKTsKK30KKwogc3RhdGljIGlubGluZSBMVmFsdWUgYnVp
bGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgTFZhbHVlKiBh
cmdzLCB1bnNpZ25lZCBudW1BcmdzKQogewogICAgIHJldHVybiBsbHZtLT5CdWlsZENhbGwoYnVp
bGRlciwgZnVuY3Rpb24sIGNvbnN0X2Nhc3Q8TFZhbHVlKj4oYXJncyksIG51bUFyZ3MsICIiKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBpbmxpbmUgQ2FwYWJp
bGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBj
YXNlIEdldEdsb2JhbFZhcjoKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKKyAgICBjYXNlIE5vdGlm
eVB1dEdsb2JhbFZhcjoKICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6CiAg
ICAgY2FzZSBBcml0aFN1YjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50
cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtNjUsNiArNjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAg
bWFjcm8oUF9KSVRPcGVyYXRpb25fRVN0WiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBp
bnRQdHIsIGludDMyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VPWkQsIGZ1bmN0aW9u
VHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBkb3VibGVUeXBlKSkgXAogICAg
IG1hY3JvKFZfSklUT3BlcmF0aW9uX0VPWkosIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRy
LCBpbnRQdHIsIGludDMyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FVywg
ZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhaX0pJ
VE9wZXJhdGlvbl9ELCBmdW5jdGlvblR5cGUoaW50MzIsIGRvdWJsZVR5cGUpKQogCiBjbGFzcyBJ
bnRyaW5zaWNSZXBvc2l0b3J5IDogcHVibGljIENvbW1vblZhbHVlcyB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24g
MTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw2ICszOTQsOSBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNvbXBpbGVQdXRHbG9iYWxWYXIoKTsKICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vdGlmeVB1dEdsb2JhbFZhcjoKKyAgICAg
ICAgICAgIGNvbXBpbGVOb3RpZnlQdXRHbG9iYWxWYXIoKTsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6CiAgICAgICAgICAgICBjb21waWxlR2xv
YmFsVmFyV2F0Y2hwb2ludCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTE0LDYgKzIxMTcs
NTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSks
IG1fb3V0LmFic29sdXRlKG1fbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsKICAgICB9CiAgICAg
CisgICAgdm9pZCBjb21waWxlTm90aWZ5UHV0R2xvYmFsVmFyKCkKKyAgICB7CisgICAgICAgIFdh
dGNocG9pbnRTZXQqIHNldCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+Y29kZU9y
aWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgKKyAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmll
cnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXJGb3JDaGVjaygpXSkud2F0Y2hwb2ludFNldCgp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RJbnZhbGlkYXRlZCA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTm90aWZ5UHV0R2xvYmFsVmFyIG5vdCBpbnZhbGlkYXRlZCBjYXNl
IikpOworICAgICAgICBMQmFzaWNCbG9jayBpc0NsZWFyID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJOb3RpZnlQdXRHbG9iYWxWYXIgY2xlYXIgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
aXNXYXRjaGVkID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlQdXRHbG9iYWxWYXIgd2F0
Y2hlZCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBpc1dhdGNoZWRGYXN0ID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJOb3RpZnlQdXRHbG9iYWxWYXIgd2F0Y2hlZCBmYXN0IGNhc2UiKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGlzV2F0Y2hlZFNsb3cgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIk5vdGlmeVB1dEdsb2JhbFZhciB3YXRjaGVkIHNsb3cgY2FzZSIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlQdXRH
bG9iYWxWYXIgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHN0YXRl
ID0gbV9vdXQubG9hZDgobV9vdXQuYWJzb2x1dGUoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSk7Cisg
ICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5lcXVhbChz
dGF0ZSwgbV9vdXQuY29uc3RJbnQ4KElzSW52YWxpZGF0ZWQpKSwKKyAgICAgICAgICAgIGNvbnRp
bnVhdGlvbiwgaXNOb3RJbnZhbGlkYXRlZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTm90SW52YWxpZGF0ZWQsIGlzQ2xlYXIpOwor
CisgICAgICAgIG1fb3V0LmZlbmNlKCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgaXNDbGVh
clZhbHVlOworICAgICAgICBpZiAoc2V0LT5zdGF0ZSgpID09IENsZWFyV2F0Y2hwb2ludCkKKyAg
ICAgICAgICAgIGlzQ2xlYXJWYWx1ZSA9IG1fb3V0LmVxdWFsKHN0YXRlLCBtX291dC5jb25zdElu
dDgoQ2xlYXJXYXRjaHBvaW50KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlzQ2xlYXJW
YWx1ZSA9IG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2xlYXJW
YWx1ZSwgaXNDbGVhciwgaXNXYXRjaGVkKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGlzQ2xlYXIsIGlzV2F0Y2hlZCk7CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9yZTgo
bV9vdXQuY29uc3RJbnQ4KElzV2F0Y2hlZCksIG1fb3V0LmFic29sdXRlKHNldC0+YWRkcmVzc09m
U3RhdGUoKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhpc1dhdGNoZWQsIGlzV2F0Y2hlZEZhc3QpOworICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQubm90WmVybzgobV9v
dXQubG9hZDgobV9vdXQuYWJzb2x1dGUoc2V0LT5hZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkpKSks
CisgICAgICAgICAgICBpc1dhdGNoZWRTbG93LCBpc1dhdGNoZWRGYXN0KTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzV2F0Y2hlZEZhc3QsIGlzV2F0Y2hlZFNsb3cpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmU4KG1fb3V0LmNvbnN0SW50OChJc0ludmFsaWRhdGVk
KSwgbV9vdXQuYWJzb2x1dGUoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSk7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlz
V2F0Y2hlZFNsb3csIGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICB2bUNhbGwobV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbk5vdGlmeVdyaXRlKSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNv
bnN0SW50UHRyKHNldCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICB9CisgICAgCiAgICAgdm9pZCBjb21waWxlR2xvYmFsVmFyV2F0Y2hwb2ludCgpCiAgICAgewog
ICAgICAgICAvLyBGSVhNRTogSW4gZGVidWcgbW9kZSB3ZSBjb3VsZCBlbWl0IHNvbWUgYXNzZXJ0
aW9uIGNvZGUgaGVyZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAko
cmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQ0LDYgKzM0NCw4IEBAIHB1YmxpYzoKICAgICBMVmFsdWUg
c2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0
dXJuIGJ1aWxkU2VsZWN0KG1fYnVpbGRlciwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7IH0KICAg
ICBMVmFsdWUgZXh0cmFjdFZhbHVlKExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBidWlsZEV4dHJhY3RWYWx1ZShtX2J1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgpOyB9CiAgICAg
CisgICAgTFZhbHVlIGZlbmNlKExBdG9taWNPcmRlcmluZyBvcmRlcmluZyA9IExMVk1BdG9taWNP
cmRlcmluZ1NlcXVlbnRpYWxseUNvbnNpc3RlbnQsIFN5bmNocm9uaXphdGlvblNjb3BlIHNjb3Bl
ID0gQ3Jvc3NUaHJlYWQpIHsgcmV0dXJuIGJ1aWxkRmVuY2UobV9idWlsZGVyLCBvcmRlcmluZywg
c2NvcGUpOyB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KICAgICBM
VmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikgeyBy
ZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvcik7IH0KICAgICBMVmFs
dWUgY2FsbChMVmFsdWUgZnVuY3Rpb24pIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1
bmN0aW9uKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTk0NjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MTMsNyArNjEzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEdldEdsb2Jh
bFZhcih1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIo
aW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFByb3BlcnR5KHVpbnRwdHJfdCogb3BlcmFuZFNsb3QsIGludCB2YWx1ZSk7Ci0gICAgICAgIHZv
aWQgZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUpOwogCiAgICAgICAgIHZvaWQgZW1pdEluaXRS
ZWdpc3RlcihpbnQgZHN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BF
UkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVBjKShFeGVjU3RhdGUqLCBJbnN0cnVjdGlvbiopOwog
dHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FUFpKKShFeGVjU3Rh
dGUqLCB2b2lkKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9P
UEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FU3NpSkpJKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopOwot
dHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9XKShXYXRjaHBvaW50
U2V0Kik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VXKShF
eGVjU3RhdGUqLCBXYXRjaHBvaW50U2V0Kik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAo
KlZfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCBK
SVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVZtKShFeGVjU3RhdGUqLCBWTSopOwogdHlw
ZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwNywx
MSArODA3LDM3IEBAIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl8KICAg
ICBzdG9yZTMyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUp
Cit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVl
LCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CisgICAgaWYgKHNldCAmJiBzZXQtPnN0YXRlKCkgIT0g
SXNJbnZhbGlkYXRlZCkgeworICAgICAgICBsb2FkOChzZXQtPmFkZHJlc3NPZlN0YXRlKCksIHJl
Z1QyKTsKKyAgICAgICAgCisgICAgICAgIEp1bXBMaXN0IHJlYWR5OworICAgICAgICAKKyAgICAg
ICAgcmVhZHkuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CisgICAgICAgIAorICAgICAgICBpZiAoc2V0LT5zdGF0ZSgpID09IENsZWFy
V2F0Y2hwb2ludCkgeworICAgICAgICAgICAgSnVtcCBpc1dhdGNoZWQgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihDbGVhcldhdGNocG9pbnQpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSXNXYXRjaGVkKSwgcmVnVDIpOworICAg
ICAgICAgICAgcmVhZHkuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlzV2F0Y2hlZC5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNz
T2ZTZXRJc05vdEVtcHR5KCkpKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpLCByZWdUMik7CisgICAgICAgIHJlYWR5LmxpbmsodGhpcyk7CisgICAgfQorICAgIAog
ICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIHN0b3JlMzIocmVnVDEsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9wZXJhbmQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKICAgICBzdG9yZTMyKHJlZ1QwLCByZWludGVy
cHJldF9jYXN0PGNoYXIqPihvcGVyYW5kKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOworICAgIAorICAgIGlmIChzZXQgJiYgc2V0LT5z
dGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpIHsKKyAgICAgICAgbWVtb3J5RmVuY2UoKTsKKyAgICAg
ICAgc3RvcmU4KHJlZ1QxLCBzZXQtPmFkZHJlc3NPZlN0YXRlKCkpOworICAgIH0KIH0KIAogdm9p
ZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGlu
dCB2YWx1ZSkKQEAgLTg0MCw3ICs4NjYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoSW5zdHJ1Y3RpCiAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgY2FzZSBHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdFB1dEdsb2JhbFZh
cigqb3BlcmFuZFNsb3QsIHZhbHVlKTsKKyAgICAgICAgZW1pdFB1dEdsb2JhbFZhcigqb3BlcmFu
ZFNsb3QsIHZhbHVlLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgIGNhc2UgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6CkBAIC04NTYsMTEgKzg4MiwxNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBS
ZXNvbHZlTW9kZUFuZFR5cGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkudHlwZSgp
OwotCi0gICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyKQorICAgIHVuc2lnbmVkIGxpbmtDb3VudCA9IDA7CisgICAgaWYgKHJlc29sdmVU
eXBlICE9IEdsb2JhbFZhciAmJiByZXNvbHZlVHlwZSAhPSBDbG9zdXJlVmFyKQorICAgICAgICBs
aW5rQ291bnQrKzsKKyAgICBpZiAoKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZl
VHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAmJiBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0LT5zdGF0ZSgpICE9IElzSW52YWxpZGF0
ZWQpCisgICAgICAgIGxpbmtDb3VudCsrOworICAgIGlmICghbGlua0NvdW50KQogICAgICAgICBy
ZXR1cm47Ci0KLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgd2hpbGUgKGxpbmtDb3VudC0t
KQorICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRUb1Njb3BlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTU5
NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3MSwxMCArNzcxLDM2IEBAIHZvaWQgSklUOjplbWl0UHV0R2xv
YmFsUHJvcGVydHkodWludHB0cl8KICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRw
dHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcih1aW50
cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CisgICAgaWYg
KHNldCAmJiBzZXQtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkgeworICAgICAgICBsb2FkOChz
ZXQtPmFkZHJlc3NPZlN0YXRlKCksIHJlZ1QxKTsKKyAgICAgICAgCisgICAgICAgIEp1bXBMaXN0
IHJlYWR5OworICAgICAgICAKKyAgICAgICAgcmVhZHkuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoc2V0LT5zdGF0ZSgpID09IENsZWFyV2F0Y2hwb2ludCkgeworICAgICAgICAgICAgSnVtcCBp
c1dhdGNoZWQgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihDbGVhcldh
dGNocG9pbnQpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SXNXYXRjaGVkKSwgcmVnVDEpOworICAgICAgICAgICAgcmVhZHkuYXBwZW5kKGp1bXAoKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlzV2F0Y2hlZC5saW5rKHRoaXMpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBYnNv
bHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkpKSk7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpLCByZWdUMSk7CisgICAgICAgIHJlYWR5Lmxp
bmsodGhpcyk7CisgICAgfQorICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKICAgICBzdG9yZVB0cihyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3Bl
cmFuZCkpOworICAgIAorICAgIGlmIChzZXQgJiYgc2V0LT5zdGF0ZSgpICE9IElzSW52YWxpZGF0
ZWQpIHsKKyAgICAgICAgbWVtb3J5RmVuY2UoKTsKKyAgICAgICAgc3RvcmU4KHJlZ1QxLCBzZXQt
PmFkZHJlc3NPZlN0YXRlKCkpOworICAgIH0KIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJl
VmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSkKQEAgLTgwMiw3ICs4
MjgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgY2Fz
ZSBHbG9iYWxWYXI6CiAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgog
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdFB1dEdsb2JhbFZhcigqb3BlcmFuZFNsb3QsIHZhbHVl
KTsKKyAgICAgICAgZW1pdFB1dEdsb2JhbFZhcigqb3BlcmFuZFNsb3QsIHZhbHVlLCBjdXJyZW50
SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgogICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CkBAIC04MTgsMTAgKzg0NCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5z
dHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUoY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkudHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICB1bnNpZ25l
ZCBsaW5rQ291bnQgPSAwOworICAgIGlmIChyZXNvbHZlVHlwZSAhPSBHbG9iYWxWYXIgJiYgcmVz
b2x2ZVR5cGUgIT0gQ2xvc3VyZVZhcikKKyAgICAgICAgbGlua0NvdW50Kys7CisgICAgaWYgKChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgJiYgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0
Y2hwb2ludFNldC0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKQorICAgICAgICBsaW5rQ291bnQr
KzsKKyAgICBpZiAoIWxpbmtDb3VudCkKICAgICAgICAgcmV0dXJuOwotCi0gICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOworICAgIHdoaWxlIChsaW5rQ291bnQtLSkKKyAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgY3VycmVudElu
c3RydWN0aW9uKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE1OTQ2MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMzLDExICsyMTMzLDI0IEBAIG1hY3JvIHB1dFByb3Bl
cnR5KCkKIGVuZAogCiBtYWNybyBwdXRHbG9iYWxWYXIoKQorICAgIGxvYWRwRnJvbUluc3RydWN0
aW9uKDUsIHQyKQorICAgIGxvYWRiIFdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbdDJdLCB0MworICAg
IGJpZXEgdDMsIElzSW52YWxpZGF0ZWQsIC5yZWFkeQorICAgIGJpbmVxIHQzLCBDbGVhcldhdGNo
cG9pbnQsIC5uZWVkVG9JbnZhbGlkYXRlCisgICAgbW92ZSBJc1dhdGNoZWQsIHQzCisgICAgam1w
IC5yZWFkeQorLm5lZWRUb0ludmFsaWRhdGU6CisgICAgYnRibnogV2F0Y2hwb2ludFNldDo6bV9z
ZXRJc05vdEVtcHR5W3QyXSwgLnBEeW5hbWljCisgICAgbW92ZSBJc0ludmFsaWRhdGVkLCB0Mwor
LnJlYWR5OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MCkKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHQwLCB0MSwgdDIpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwgdDAp
CiAgICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbdDBdCiAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zm
c2V0W3QwXQorICAgIG1lbWZlbmNlCisgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNSwgdDIpCisg
ICAgc3RvcmViIHQzLCBXYXRjaHBvaW50U2V0OjptX3N0YXRlW3QyXQogZW5kCiAKIG1hY3JvIHB1
dENsb3N1cmVWYXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTU1LDEwICsxOTU1LDIyIEBAIG1hY3JvIHB1dFByb3BlcnR5KCkKIGVuZAog
CiBtYWNybyBwdXRHbG9iYWxWYXIoKQorICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDUsIHQyKQor
ICAgIGxvYWRiIFdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbdDJdLCB0MworICAgIGJpZXEgdDMsIElz
SW52YWxpZGF0ZWQsIC5yZWFkeQorICAgIGJpbmVxIHQzLCBDbGVhcldhdGNocG9pbnQsIC5uZWVk
VG9JbnZhbGlkYXRlCisgICAgbW92ZSBJc1dhdGNoZWQsIHQzCisgICAgam1wIC5yZWFkeQorLm5l
ZWRUb0ludmFsaWRhdGU6CisgICAgYnRibnogV2F0Y2hwb2ludFNldDo6bV9zZXRJc05vdEVtcHR5
W3QyXSwgLnBEeW5hbWljCisgICAgbW92ZSBJc0ludmFsaWRhdGVkLCB0MworLnJlYWR5OgogICAg
IGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHQwLCB0MSkKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig2LCB0MCkKICAgICBzdG9yZXEgdDEs
IFt0MF0KKyAgICBtZW1mZW5jZQorICAgIHN0b3JlYiB0MywgV2F0Y2hwb2ludFNldDo6bV9zdGF0
ZVt0Ml0KIGVuZAogCiBtYWNybyBwdXRDbG9zdXJlVmFyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbHZtL0xMVk1BUElGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGx2bS9MTFZNQVBJRnVuY3Rpb25zLmgJKHJldmlzaW9uIDE1OTQ2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUElGdW5jdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDg5LDYgKzQ4OSw3IEBACiAgICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZElz
TnVsbCwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBjb25zdCBjaGFyICpOYW1l
KSkgXAogICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRJc05vdE51bGwsIChMTFZNQnVpbGRl
clJlZiwgTExWTVZhbHVlUmVmIFZhbCwgY29uc3QgY2hhciAqTmFtZSkpIFwKICAgICBtYWNybyhM
TFZNVmFsdWVSZWYsIEJ1aWxkUHRyRGlmZiwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYg
TEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25zdCBjaGFyICpOYW1lKSkgXAorICAgIG1hY3JvKExM
Vk1WYWx1ZVJlZiwgQnVpbGRGZW5jZSwgKExMVk1CdWlsZGVyUmVmIEIsIExMVk1BdG9taWNPcmRl
cmluZyBPcmRlcmluZywgTExWTUJvb2wgaXNTaW5nbGVUaHJlYWQsIGNvbnN0IGNoYXIgKk5hbWUp
KSBcCiAgICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEF0b21pY1JNVywgKExMVk1CdWlsZGVy
UmVmIEIsIExMVk1BdG9taWNSTVdCaW5PcCBvcCwgTExWTVZhbHVlUmVmIFBUUiwgTExWTVZhbHVl
UmVmIFZhbCwgTExWTUF0b21pY09yZGVyaW5nIG9yZGVyaW5nLCBMTFZNQm9vbCBzaW5nbGVUaHJl
YWQpKSBcCiAgICAgbWFjcm8oTExWTU1vZHVsZVByb3ZpZGVyUmVmLCBDcmVhdGVNb2R1bGVQcm92
aWRlckZvckV4aXN0aW5nTW9kdWxlLCAoTExWTU1vZHVsZVJlZiBNKSkgXAogICAgIG1hY3JvKHZv
aWQsIERpc3Bvc2VNb2R1bGVQcm92aWRlciwgKExMVk1Nb2R1bGVQcm92aWRlclJlZiBNKSkgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vYXJtNjQucmIKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vYXJtNjQucmIJKHJldmlzaW9u
IDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2FybTY0LnJiCSh3
b3JraW5nIGNvcHkpCkBAIC04MDcsNiArODA3LDggQEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAg
ICAgICAgIG9wZXJhbmRzWzBdLmFybTY0RW1pdExlYShvcGVyYW5kc1sxXSwgOnB0cikKICAgICAg
ICAgd2hlbiAic211bGxpIgogICAgICAgICAgICAgJGFzbS5wdXRzICJzbWFkZGwgI3tvcGVyYW5k
c1syXS5hcm02NE9wZXJhbmQoOnB0cil9LCAje29wZXJhbmRzWzBdLmFybTY0T3BlcmFuZCg6aW50
KX0sICN7b3BlcmFuZHNbMV0uYXJtNjRPcGVyYW5kKDppbnQpfSwgeHpyIgorICAgICAgICB3aGVu
ICJtZW1mZW5jZSIKKyAgICAgICAgICAgICRhc20ucHV0cyAiZG1iIHN5IgogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBsb3dlckRlZmF1bHQKICAgICAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9hcm0ucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL29mZmxpbmVhc20vYXJtLnJiCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9hcm0ucmIJKHdvcmtpbmcgY29weSkKQEAgLTU5Nyw2
ICs1OTcsOCBAQCBjbGFzcyBJbnN0cnVjdGlvbgogICAgICAgICB3aGVuICJzbXVsbGkiCiAgICAg
ICAgICAgICByYWlzZSAiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBzbXVsbCBpbiAje3Nl
bGYuaW5zcGVjdH0gYXQgI3tjb2RlT3JpZ2luU3RyaW5nfSIgdW5sZXNzIG9wZXJhbmRzLmxlbmd0
aCA9PSA0CiAgICAgICAgICAgICAkYXNtLnB1dHMgInNtdWxsICN7b3BlcmFuZHNbMl0uYXJtT3Bl
cmFuZH0sICN7b3BlcmFuZHNbM10uYXJtT3BlcmFuZH0sICN7b3BlcmFuZHNbMF0uYXJtT3BlcmFu
ZH0sICN7b3BlcmFuZHNbMV0uYXJtT3BlcmFuZH0iCisgICAgICAgIHdoZW4gIm1lbWZlbmNlIgor
ICAgICAgICAgICAgJGFzbS5wdXRzICJkbWIgc3kiCiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGxvd2VyRGVmYXVsdAogICAgICAgICBlbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9v
ZmZsaW5lYXNtL2Nsb29wLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9v
ZmZsaW5lYXNtL2Nsb29wLnJiCShyZXZpc2lvbiAxNTk0NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgkod29ya2luZyBjb3B5KQpAQCAtMTA5MSw3ICsxMDkx
LDggQEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAgICAgICAgIGNsb29wRW1pdE9wQW5kQnJhbmNo
KG9wZXJhbmRzLCAifCIsIDppbnQzMiwgIj09IDAiKQogICAgICAgICB3aGVuICJib3JyaW56Igog
ICAgICAgICAgICAgY2xvb3BFbWl0T3BBbmRCcmFuY2gob3BlcmFuZHMsICJ8IiwgOmludDMyLCAi
IT0gMCIpCi0KKyAgICAgICAgICAgIAorICAgICAgICB3aGVuICJtZW1mZW5jZSIKICAgICAgICAg
d2hlbiAicHVzaENhbGxlZVNhdmVzIgogICAgICAgICB3aGVuICJwb3BDYWxsZWVTYXZlcyIKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9u
cy5yYgkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVh
c20vaW5zdHJ1Y3Rpb25zLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUwLDggQEAgTUFD
Uk9fSU5TVFJVQ1RJT05TID0KICAgICAgImxlYWkiLAogICAgICAibGVhcCIsCiAgICAgICJwdXNo
Q2FsbGVlU2F2ZXMiLAotICAgICAicG9wQ2FsbGVlU2F2ZXMiCisgICAgICJwb3BDYWxsZWVTYXZl
cyIsCisgICAgICJtZW1mZW5jZSIKICAgICBdCiAKIFg4Nl9JTlNUUlVDVElPTlMgPQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20veDg2LnJiCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkocmV2aXNpb24gMTU5NDYyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20veDg2LnJiCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzYzLDYgKzEzNjMsOCBAQCBjbGFzcyBJbnN0cnVjdGlvbgogICAgICAgICAgICAgJGFz
bS5wdXRzICJsZWFsICN7b3BlcmFuZHNbMF0ueDg2QWRkcmVzc09wZXJhbmQoOmludCl9LCAje29w
ZXJhbmRzWzFdLng4Nk9wZXJhbmQoOmludCl9IgogICAgICAgICB3aGVuICJsZWFwIgogICAgICAg
ICAgICAgJGFzbS5wdXRzICJsZWEje3g4NlN1ZmZpeCg6cHRyKX0gI3tvcGVyYW5kc1swXS54ODZB
ZGRyZXNzT3BlcmFuZCg6cHRyKX0sICN7b3BlcmFuZHNbMV0ueDg2T3BlcmFuZCg6cHRyKX0iCisg
ICAgICAgIHdoZW4gIm1lbWZlbmNlIgorICAgICAgICAgICAgJGFzbS5wdXRzICJtZmVuY2UiCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvd2VyRGVmYXVsdAogICAgICAgICBlbmQKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJ
KHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDIxICsyMTAsMzMgQEAgYm9vbCBK
U0dsb2JhbE9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSgogICAgIHJldHVybiBCYXNlOjpkZWZp
bmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IHNob3VsZFRocm93KTsKIH0KIAotaW50IEpTR2xvYmFsT2JqZWN0OjphZGRHbG9iYWxWYXIoY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIEZ1bmN0aW9u
TW9kZSBmdW5jdGlvbk1vZGUpCitKU0dsb2JhbE9iamVjdDo6TmV3R2xvYmFsVmFyIEpTR2xvYmFs
T2JqZWN0OjphZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9k
ZSBjb25zdGFudE1vZGUpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUoKS0+bV9sb2NrKTsKICAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZSgpLT5zaXplKGxv
Y2tlcik7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgKGNvbnN0YW50TW9k
ZSA9PSBJc0NvbnN0YW50KSA/IFJlYWRPbmx5IDogMCk7Ci0gICAgaWYgKGZ1bmN0aW9uTW9kZSA9
PSBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplKQotICAgICAgICBuZXdFbnRyeS5hdHRlbXB0VG9XYXRj
aCgpOworICAgIGlmIChjb25zdGFudE1vZGUgPT0gSXNWYXJpYWJsZSkKKyAgICAgICAgbmV3RW50
cnkucHJlcGFyZVRvV2F0Y2goU3ltYm9sVGFibGVFbnRyeTo6Tm90SW5pdGlhbGl6ZWQpOwogICAg
IFN5bWJvbFRhYmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLT5hZGQo
bG9ja2VyLCBpZGVudC5pbXBsKCksIG5ld0VudHJ5KTsKICAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpCiAgICAgICAgIGFkZFJlZ2lzdGVycygxKTsKLSAgICBlbHNlIHsKLSAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5ub3RpZnlXcml0ZSgpOworICAgIGVsc2UKICAgICAgICAgaW5kZXgg
PSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCk7CisgICAgTmV3R2xvYmFsVmFyIHZh
cjsKKyAgICB2YXIucmVnaXN0ZXJOdW1iZXIgPSBpbmRleDsKKyAgICB2YXIuc2V0ID0gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CisgICAgcmV0dXJuIHZhcjsKK30KKwor
dm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmVtb3ZlRGly
ZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSk7IC8vIE5ld2x5IGRlY2xhcmVkIGZ1bmN0aW9u
cyBvdmVyd3JpdGUgZXhpc3RpbmcgcHJvcGVydGllcy4KKyAgICBOZXdHbG9iYWxWYXIgdmFyID0g
YWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSk7CisgICAgcmVnaXN0ZXJBdCh2
YXIucmVnaXN0ZXJOdW1iZXIpLnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1ZSk7CisgICAgaWYg
KHZhci5zZXQpIHsKKyAgICAgICAgQVNTRVJUKHZhci5zZXQtPnN0YXRlKCkgPT0gQ2xlYXJXYXRj
aHBvaW50KCkpOworICAgICAgICB2YXIuc2V0LT5zdGFydFdhdGNoaW5nKCk7CiAgICAgfQotICAg
IHJldHVybiBpbmRleDsKIH0KIAogc3RhdGljIGlubGluZSBKU09iamVjdCogbGFzdEluUHJvdG90
eXBlQ2hhaW4oSlNPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMjg5LDggKzI4OSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogCiAgICAgZW51bSBDb25zdGFu
dE1vZGUgeyBJc0NvbnN0YW50LCBJc1ZhcmlhYmxlIH07Ci0gICAgZW51bSBGdW5jdGlvbk1vZGUg
eyBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplLCBOb3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6YWJsZSB9
OwotICAgIGludCBhZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwg
RnVuY3Rpb25Nb2RlKTsKKyAgICBzdHJ1Y3QgTmV3R2xvYmFsVmFyIHsKKyAgICAgICAgaW50IHJl
Z2lzdGVyTnVtYmVyOworICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQ7CisgICAgfTsKKyAgICBO
ZXdHbG9iYWxWYXIgYWRkR2xvYmFsVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUp
OwogCiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkpTR2xvYmFsT2JqZWN0KCk7CkBA
IC0zMTUsMTkgKzMxOCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRWYXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiAgICAgewogICAgICAgICBpZiAo
IWhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCi0gICAgICAgICAgICBhZGRHbG9iYWxW
YXIocHJvcGVydHlOYW1lLCBJc1ZhcmlhYmxlLCBOb3RGdW5jdGlvbk9yTm90U3BlY2lhbGl6YWJs
ZSk7CisgICAgICAgICAgICBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc1ZhcmlhYmxlKTsK
ICAgICB9CiAgICAgdm9pZCBhZGRDb25zdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSkKICAgICB7CiAgICAgICAgIGlmICghaGFzUHJvcGVydHkoZXhlYywg
cHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAgIGFkZEdsb2JhbFZhcihwcm9wZXJ0eU5hbWUsIElz
Q29uc3RhbnQsIE5vdEZ1bmN0aW9uT3JOb3RTcGVjaWFsaXphYmxlKTsKLSAgICB9Ci0gICAgdm9p
ZCBhZGRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGJvb2wgcHJvcGVydHlEaWRFeGlz
dCA9IHJlbW92ZURpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpOyAvLyBOZXdseSBkZWNs
YXJlZCBmdW5jdGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMuCi0gICAgICAgIGlu
dCBpbmRleCA9IGFkZEdsb2JhbFZhcihwcm9wZXJ0eU5hbWUsIElzVmFyaWFibGUsICFwcm9wZXJ0
eURpZEV4aXN0ID8gSXNGdW5jdGlvblRvU3BlY2lhbGl6ZSA6IE5vdEZ1bmN0aW9uT3JOb3RTcGVj
aWFsaXphYmxlKTsKLSAgICAgICAgcmVnaXN0ZXJBdChpbmRleCkuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIHZhbHVlKTsKKyAgICAgICAgICAgIGFkZEdsb2JhbFZhcihwcm9wZXJ0eU5hbWUsIElzQ29u
c3RhbnQpOwogICAgIH0KKyAgICB2b2lkIGFkZEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBKU1ZhbHVlKTsKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgYWNjZXNzb3JzIHJl
dHVybiBwcmlzdGluZSB2YWx1ZXMsIGV2ZW4gaWYgYSBzY3JpcHQgCiAgICAgLy8gcmVwbGFjZXMg
dGhlIGdsb2JhbCBvYmplY3QncyBhc3NvY2lhdGVkIHByb3BlcnR5LgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NywxNSArNzcsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNT
dAogICAgIGlmIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxK
U0dsb2JhbE9iamVjdCo+KHNjb3BlKSkgewogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQoaWRlbnQuaW1wbCgpKTsKICAgICAg
ICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewotICAgICAgICAgICAgaWYgKGdldE9yUHV0ID09IFB1
dCkgewotICAgICAgICAgICAgICAgIGlmIChlbnRyeS5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCBnbG9iYWwgc2Nv
cGUsIGJ1dCB3ZSBkb24ndCBrbm93IGhvdyB0byBjYWNoZSBpdC4KLSAgICAgICAgICAgICAgICAg
ICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywgMCwgMCwgMCwgMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IEl0J3MgbGlrZWx5IHRoYXQgd2UnbGwgd3JpdGUgdG8gdGhpcyB2YXIsIHNvIG5vdGlmeSBub3cg
YW5kIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBkb2luZyBzbyBhdCBydW50aW1lLgotICAgICAgICAg
ICAgICAgIGVudHJ5Lm5vdGlmeVdyaXRlKCk7CisgICAgICAgICAgICBpZiAoZ2V0T3JQdXQgPT0g
UHV0ICYmIGVudHJ5LmlzUmVhZE9ubHkoKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGtub3cg
dGhlIHByb3BlcnR5IHdpbGwgYmUgYXQgZ2xvYmFsIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBo
b3cgdG8gY2FjaGUgaXQuCisgICAgICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywg
MCwgMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMTU5
NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9s
VGFibGVQdXQoCiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZh
bHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkpOwogICAgIAogICAgIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4qIHJlZzsKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSAwOwogICAgIHsKICAgICAg
ICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsKICAg
ICAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUubV9sb2Nr
LCBleGVjLT52bSgpLmhlYXApOwpAQCAtMTM3LDE0ICsxMzgsMTUgQEAgaW5saW5lIGJvb2wgc3lt
Ym9sVGFibGVQdXQoCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0
TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChVTkxJS0VMWSh3YXNGYXQpKQotICAgICAgICAgICAg
aXRlci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKKyAgICAgICAgc2V0ID0gaXRlci0+dmFsdWUud2F0
Y2hwb2ludFNldCgpOwogICAgICAgICByZWcgPSAmb2JqZWN0LT5yZWdpc3RlckF0KGZhc3RFbnRy
eS5nZXRJbmRleCgpKTsKICAgICB9CiAgICAgLy8gSSdkIHByZWZlciB3ZSBub3QgaG9sZCBsb2Nr
IHdoaWxlIGV4ZWN1dGluZyBiYXJyaWVycywgc2luY2UgSSBwcmVmZXIgdG8gcmVzZXJ2ZQogICAg
IC8vIHRoZSByaWdodCBmb3IgYmFycmllcnMgdG8gYmUgYWJsZSB0byB0cmlnZ2VyIEdDLiBBbmQg
SSBkb24ndCB3YW50IHRvIGhvbGQgVk0KICAgICAvLyBsb2NrcyB3aGlsZSBHQydpbmcuCiAgICAg
cmVnLT5zZXQodm0sIG9iamVjdCwgdmFsdWUpOworICAgIGlmIChzZXQpCisgICAgICAgIHNldC0+
bm90aWZ5V3JpdGUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU2LDYgKzE1OCw3IEBA
IGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICBBU1NFUlQoIUhl
YXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0
KSk7CiAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWc7CisgICAgV2F0Y2hwb2lu
dFNldCogc2V0ID0gMDsKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9
ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKHN5bWJvbFRhYmxlLm1fbG9jayk7CkBAIC0xNjQsMTEgKzE2NywxMyBAQCBpbmxpbmUgYm9v
bCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgICAg
IEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgICAgICBlbnRyeS5ub3RpZnlXcml0ZSgpOwor
ICAgICAgICBzZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIGVudHJ5LnNldEF0
dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgICAgIHJlZyA9ICZvYmplY3QtPnJlZ2lzdGVyQXQo
ZW50cnkuZ2V0SW5kZXgoKSk7CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZhbHVl
KTsKKyAgICBpZiAoc2V0KQorICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5jcHAJKHJldmlzaW9uIDE1OTQ2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTQgKzY1LDE1IEBA
IGJvb2wgU3ltYm9sVGFibGVFbnRyeTo6Y291bGRCZVdhdGNoZWQoKQogICAgIFdhdGNocG9pbnRT
ZXQqIHdhdGNocG9pbnRzID0gZmF0RW50cnkoKS0+bV93YXRjaHBvaW50cy5nZXQoKTsKICAgICBp
ZiAoIXdhdGNocG9pbnRzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHdhdGNo
cG9pbnRzLT5pc1N0aWxsVmFsaWQoKTsKKyAgICByZXR1cm4gd2F0Y2hwb2ludHMtPnN0YXRlKCkg
PT0gSXNXYXRjaGVkOwogfQogCi12b2lkIFN5bWJvbFRhYmxlRW50cnk6OmF0dGVtcHRUb1dhdGNo
KCkKK3ZvaWQgU3ltYm9sVGFibGVFbnRyeTo6cHJlcGFyZVRvV2F0Y2goV2F0Y2hTdGF0ZSBzdGF0
ZSkKIHsKICAgICBGYXRFbnRyeSogZW50cnkgPSBpbmZsYXRlKCk7Ci0gICAgaWYgKCFlbnRyeS0+
bV93YXRjaHBvaW50cykKLSAgICAgICAgZW50cnktPm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZihu
ZXcgV2F0Y2hwb2ludFNldChJc1dhdGNoZWQpKTsKKyAgICBBU1NFUlQoIWVudHJ5LT5tX3dhdGNo
cG9pbnRzKTsKKyAgICBlbnRyeS0+bV93YXRjaHBvaW50cyA9IGFkb3B0UmVmKAorICAgICAgICBu
ZXcgV2F0Y2hwb2ludFNldChzdGF0ZSA9PSBBbHJlYWR5SW5pdGlhbGl6ZWQgPyBJc1dhdGNoZWQg
OiBDbGVhcldhdGNocG9pbnQpKTsKIH0KIAogdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjphZGRXYXRj
aHBvaW50KFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCkBAIC04Niw2ICs4NywxMiBAQCB2b2lkIFN5
bWJvbFRhYmxlRW50cnk6Om5vdGlmeVdyaXRlU2xvdygpCiAgICAgV2F0Y2hwb2ludFNldCogd2F0
Y2hwb2ludHMgPSBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLmdldCgpOwogICAgIGlmICghd2F0
Y2hwb2ludHMpCiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAod2F0Y2hwb2ludHMtPnN0
YXRlKCkgPT0gQ2xlYXJXYXRjaHBvaW50KSB7CisgICAgICAgIHdhdGNocG9pbnRzLT5zdGFydFdh
dGNoaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgd2F0Y2hwb2ludHMt
Pm5vdGlmeVdyaXRlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTU5NDYyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDE1ICsyMjAs
OCBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CiAgICAgCiAgICAgYm9vbCBjb3VsZEJlV2F0
Y2hlZCgpOwogICAgIAotICAgIC8vIE5vdGlmeSBhbiBvcHBvcnR1bml0eSB0byBjcmVhdGUgYSB3
YXRjaHBvaW50IGZvciBhIHZhcmlhYmxlLiBUaGlzIGlzCi0gICAgLy8gaWRlbXBvdGVudCBhbmQg
ZmFpbC1zaWxlbnQuIEl0IGlzIGlkZW1wb3RlbnQgaW4gdGhlIHNlbnNlIHRoYXQgaWYKLSAgICAv
LyBhIHdhdGNocG9pbnQgc2V0IGhhZCBhbHJlYWR5IGJlZW4gY3JlYXRlZCwgdGhlbiBhbm90aGVy
IG9uZSB3aWxsIG5vdAotICAgIC8vIGJlIGNyZWF0ZWQuIEhlbmNlIHR3byBjYWxscyB0byB0aGlz
IG1ldGhvZCBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcwotICAgIC8vIG9uZSBjYWxsLiBJdCBpcyBh
bHNvIGZhaWwtc2lsZW50LCBpbiB0aGUgc2Vuc2UgdGhhdCBpZiBhIHdhdGNocG9pbnQKLSAgICAv
LyBzZXQgaGFkIGJlZW4gY3JlYXRlZCBhbmQgaGFkIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZCwg
dGhlbiB0aGlzIHdpbGwKLSAgICAvLyBqdXN0IHJldHVybi4gVGhpcyBtZWFucyB0aGF0IGNvdWxk
QmVXYXRjaGVkKCkgbWF5IHJldHVybiBmYWxzZSBldmVuCi0gICAgLy8gaW1tZWRpYXRlbHkgYWZ0
ZXIgYSBjYWxsIHRvIGF0dGVtcHRUb1dhdGNoKCkuCi0gICAgdm9pZCBhdHRlbXB0VG9XYXRjaCgp
OworICAgIGVudW0gV2F0Y2hTdGF0ZSB7IE5vdEluaXRpYWxpemVkLCBBbHJlYWR5SW5pdGlhbGl6
ZWQgfTsKKyAgICB2b2lkIHByZXBhcmVUb1dhdGNoKFdhdGNoU3RhdGUpOwogICAgIAogICAgIHZv
aWQgYWRkV2F0Y2hwb2ludChXYXRjaHBvaW50Kik7CiAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NTk1MTQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMyBAQAorMjAxMy0xMS0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIEluZmVyIGNvbnN0YW50IGdsb2JhbCB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ2NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvcmVncmVzcy9nbG9iYWwtdmFyLWNv
bnN0LWluZmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nbG9i
YWwtdmFyLWNvbnN0LWluZmVyLWZpcmUtZnJvbS1vcHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5mZXItZmlyZS1mcm9tLW9wdC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5mZXIu
aHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2xvYmFsLXZh
ci1jb25zdC1pbmZlci1maXJlLWZyb20tb3B0LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6Cisg
ICAgICAgIChzZXRBKToKKyAgICAgICAgKHNldEIpOgorICAgICAgICAoY2hlY2spOgorICAgICAg
ICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dsb2JhbC12YXItY29uc3QtaW5mZXIuanM6IEFk
ZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGNoZWNrKToKKwogMjAxMy0xMS0xOSAgRGVh
biBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgZmFzdC9mb3Jtcy9mb3JtLWFz
c29jaWF0ZWQtZWxlbWVudC1jcmFzaC5odG1sIG9mdGVuIHRpbWVzIG91dCBvbiBNYXZlcmlja3Mg
V0sxCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5mZXIt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFs
LXZhci1jb25zdC1pbmZlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5mZXItZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVy
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5mZXItZmlyZS1m
cm9tLW9wdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLWZpcmUtZnJvbS1vcHQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVy
LWZpcmUtZnJvbS1vcHQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAg
QEAKK0pTUmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLWZpcmUtZnJvbS1vcHQKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLXZhci1jb25zdC1pbmZlci1maXJlLWZyb20tb3B0
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtdmFyLWNv
bnN0LWluZmVyLWZpcmUtZnJvbS1vcHQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZ2xvYmFsLXZhci1jb25zdC1pbmZlci1maXJlLWZyb20tb3B0Lmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvZ2xvYmFsLXZhci1jb25zdC1pbmZlci1maXJlLWZyb20tb3B0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLXZhci1j
b25zdC1pbmZlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xv
YmFsLXZhci1jb25zdC1pbmZlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2xvYmFs
LXZhci1jb25zdC1pbmZlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Jl
Z3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLWZpcmUtZnJv
bS1vcHQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvZ2xvYmFsLXZhci1jb25zdC1pbmZlci1maXJlLWZyb20tb3B0LmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2xvYmFsLXZhci1jb25zdC1p
bmZlci1maXJlLWZyb20tb3B0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKK2Z1
bmN0aW9uIGZvbygpIHsKKyAgICByZXR1cm4gYSArIGI7Cit9CisKK25vSW5saW5lKGZvbyk7CisK
K3ZhciBhOwordmFyIGI7CisKK2Z1bmN0aW9uIHNldEEocCwgdmFsdWUpIHsKKyAgICBpZiAocCkK
KyAgICAgICAgYSA9IHZhbHVlOworfQorCitmdW5jdGlvbiBzZXRCKHAsIHZhbHVlKSB7CisgICAg
aWYgKHApCisgICAgICAgIGIgPSB2YWx1ZTsKK30KKworbm9JbmxpbmUoc2V0QSk7Citub0lubGlu
ZShzZXRCKTsKKworc2V0QSh0cnVlLCA0KTsKK3NldEIodHJ1ZSwgNSk7CisKK2ZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgc2V0QShmYWxzZSwgNDIpOworICAgIHNldEIoZmFs
c2UsIDQyKTsKK30KKworZnVuY3Rpb24gY2hlY2soYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlm
IChhY3R1YWwgPT0gZXhwZWN0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICB0aHJvdyAiRXJyb3I6
IGV4cGVjdGVkICIgKyBleHBlY3RlZCArICIgYnV0IGdvdCAiICsgYWN0dWFsOworfQorCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgIGNoZWNrKGZvbygpLCA5KTsKKworc2V0QSh0
cnVlLCA2KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpCisgICAgY2hlY2soZm9v
KCksIDExKTsKKworc2V0Qih0cnVlLCA3KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsg
KytpKQorICAgIGNoZWNrKGZvbygpLCAxMyk7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dsb2JhbC12YXItY29uc3QtaW5mZXIu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9n
bG9iYWwtdmFyLWNvbnN0LWluZmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcgQEAK
K2Z1bmN0aW9uIGZvbygpIHsKKyAgICByZXR1cm4gYSArIGI7Cit9CisKK25vSW5saW5lKGZvbyk7
CisKK3ZhciBhID0gNDsKK3ZhciBiID0gNTsKKworZnVuY3Rpb24gY2hlY2soYWN0dWFsLCBleHBl
Y3RlZCkgeworICAgIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpCisgICAgICAgIHJldHVybjsKKyAg
ICB0aHJvdyAiRXJyb3I6IGV4cGVjdGVkICIgKyBleHBlY3RlZCArICIgYnV0IGdvdCAiICsgYWN0
dWFsOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgIGNoZWNrKGZvbygp
LCA5KTsKKworYSA9IDY7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKQorICAgIGNo
ZWNrKGZvbygpLCAxMSk7CisKK2IgPSA3OworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyAr
K2kpCisgICAgY2hlY2soZm9vKCksIDEzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217331</attachid>
            <date>2013-11-19 14:17:45 -0800</date>
            <delta_ts>2013-11-19 14:17:45 -0800</delta_ts>
            <desc>llvm patch</desc>
            <filename>build-fence.patch</filename>
            <type>text/plain</type>
            <size>4055</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IGluY2x1ZGUvbGx2bS9JUi9JUkJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRl
L2xsdm0vSVIvSVJCdWlsZGVyLmgJKHJldmlzaW9uIDE5NTE0MikKKysrIGluY2x1ZGUvbGx2bS9J
Ui9JUkJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTE1LDggKzkxNSw5IEBACiAgICAgcmV0
dXJuIFNJOwogICB9CiAgIEZlbmNlSW5zdCAqQ3JlYXRlRmVuY2UoQXRvbWljT3JkZXJpbmcgT3Jk
ZXJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uU2NvcGUgU3lu
Y2hTY29wZSA9IENyb3NzVGhyZWFkKSB7Ci0gICAgcmV0dXJuIEluc2VydChuZXcgRmVuY2VJbnN0
KENvbnRleHQsIE9yZGVyaW5nLCBTeW5jaFNjb3BlKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgU3luY2hyb25pemF0aW9uU2NvcGUgU3luY2hTY29wZSA9IENyb3NzVGhyZWFkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFR3aW5lICZOYW1lID0gIiIpIHsKKyAgICByZXR1cm4g
SW5zZXJ0KG5ldyBGZW5jZUluc3QoQ29udGV4dCwgT3JkZXJpbmcsIFN5bmNoU2NvcGUpLCBOYW1l
KTsKICAgfQogICBBdG9taWNDbXBYY2hnSW5zdCAqQ3JlYXRlQXRvbWljQ21wWGNoZyhWYWx1ZSAq
UHRyLCBWYWx1ZSAqQ21wLCBWYWx1ZSAqTmV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBdG9taWNPcmRlcmluZyBPcmRlcmluZywKSW5kZXg6IGluY2x1ZGUvbGx2
bS1jL0NvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL2xsdm0tYy9Db3JlLmgJKHJldmlzaW9u
IDE5NTE0MikKKysrIGluY2x1ZGUvbGx2bS1jL0NvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjY2
Myw3ICsyNjYzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqTmFtZSk7CiBMTFZNVmFsdWVSZWYgTExWTUJ1aWxkUHRyRGlmZihMTFZNQnVpbGRlclJlZiwg
TExWTVZhbHVlUmVmIExIUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMVk1WYWx1
ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpOwotTExWTVZhbHVlUmVmIExMVk1CdWlsZEF0b21p
Y1JNVyhMTFZNQnVpbGRlclJlZiBCLExMVk1BdG9taWNSTVdCaW5PcCBvcCwKK0xMVk1WYWx1ZVJl
ZiBMTFZNQnVpbGRGZW5jZShMTFZNQnVpbGRlclJlZiBCLCBMTFZNQXRvbWljT3JkZXJpbmcgb3Jk
ZXJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTExWTUJvb2wgc2luZ2xlVGhyZWFk
LCBjb25zdCBjaGFyICpOYW1lKTsKK0xMVk1WYWx1ZVJlZiBMTFZNQnVpbGRBdG9taWNSTVcoTExW
TUJ1aWxkZXJSZWYgQiwgTExWTUF0b21pY1JNV0Jpbk9wIG9wLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMTFZNVmFsdWVSZWYgUFRSLCBMTFZNVmFsdWVSZWYgVmFsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMTFZNQXRvbWljT3JkZXJpbmcgb3JkZXJpbmcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMVk1Cb29sIHNpbmdsZVRocmVhZCk7Cklu
ZGV4OiBsaWIvSVIvQ29yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGliL0lSL0NvcmUuY3BwCShyZXZp
c2lvbiAxOTUxNDIpCisrKyBsaWIvSVIvQ29yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMTks
NiArMjIxOSwyOSBAQAogICByZXR1cm4gd3JhcCh1bndyYXAoQiktPkNyZWF0ZVN0b3JlKHVud3Jh
cChWYWwpLCB1bndyYXAoUG9pbnRlclZhbCkpKTsKIH0KIAorc3RhdGljIEF0b21pY09yZGVyaW5n
IG1hcF9mcm9tX2xsdm1vcmRlcmluZyhMTFZNQXRvbWljT3JkZXJpbmcgT3JkZXJpbmcpIHsKKyAg
c3dpdGNoIChPcmRlcmluZykgeworICAgIGNhc2UgTExWTUF0b21pY09yZGVyaW5nTm90QXRvbWlj
OiByZXR1cm4gTm90QXRvbWljOworICAgIGNhc2UgTExWTUF0b21pY09yZGVyaW5nVW5vcmRlcmVk
OiByZXR1cm4gVW5vcmRlcmVkOworICAgIGNhc2UgTExWTUF0b21pY09yZGVyaW5nTW9ub3Rvbmlj
OiByZXR1cm4gTW9ub3RvbmljOworICAgIGNhc2UgTExWTUF0b21pY09yZGVyaW5nQWNxdWlyZTog
cmV0dXJuIEFjcXVpcmU7CisgICAgY2FzZSBMTFZNQXRvbWljT3JkZXJpbmdSZWxlYXNlOiByZXR1
cm4gUmVsZWFzZTsKKyAgICBjYXNlIExMVk1BdG9taWNPcmRlcmluZ0FjcXVpcmVSZWxlYXNlOiBy
ZXR1cm4gQWNxdWlyZVJlbGVhc2U7CisgICAgY2FzZSBMTFZNQXRvbWljT3JkZXJpbmdTZXF1ZW50
aWFsbHlDb25zaXN0ZW50OgorICAgICAgcmV0dXJuIFNlcXVlbnRpYWxseUNvbnNpc3RlbnQ7Cisg
IH0KKyAgCisgIGxsdm1fdW5yZWFjaGFibGUoIkludmFsaWQgTExWTUF0b21pY09yZGVyaW5nIHZh
bHVlISIpOworfQorCitMTFZNVmFsdWVSZWYgTExWTUJ1aWxkRmVuY2UoTExWTUJ1aWxkZXJSZWYg
QiwgTExWTUF0b21pY09yZGVyaW5nIE9yZGVyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIExMVk1Cb29sIGlzU2luZ2xlVGhyZWFkLCBjb25zdCBjaGFyICpOYW1lKSB7CisgIHJldHVy
biB3cmFwKAorICAgIHVud3JhcChCKS0+Q3JlYXRlRmVuY2UobWFwX2Zyb21fbGx2bW9yZGVyaW5n
KE9yZGVyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2luZ2xlVGhyZWFkID8g
U2luZ2xlVGhyZWFkIDogQ3Jvc3NUaHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBO
YW1lKSk7Cit9CisKIExMVk1WYWx1ZVJlZiBMTFZNQnVpbGRHRVAoTExWTUJ1aWxkZXJSZWYgQiwg
TExWTVZhbHVlUmVmIFBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIExMVk1WYWx1
ZVJlZiAqSW5kaWNlcywgdW5zaWduZWQgTnVtSW5kaWNlcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqTmFtZSkgewpAQCAtMjQ3NiwyMiArMjQ5OSw4IEBACiAgICAgY2Fz
ZSBMTFZNQXRvbWljUk1XQmluT3BVTWF4OiBpbnRvcCA9IEF0b21pY1JNV0luc3Q6OlVNYXg7IGJy
ZWFrOwogICAgIGNhc2UgTExWTUF0b21pY1JNV0Jpbk9wVU1pbjogaW50b3AgPSBBdG9taWNSTVdJ
bnN0OjpVTWluOyBicmVhazsKICAgfQotICBBdG9taWNPcmRlcmluZyBpbnRvcmRlcmluZzsKLSAg
c3dpdGNoIChvcmRlcmluZykgewotICAgIGNhc2UgTExWTUF0b21pY09yZGVyaW5nTm90QXRvbWlj
OiBpbnRvcmRlcmluZyA9IE5vdEF0b21pYzsgYnJlYWs7Ci0gICAgY2FzZSBMTFZNQXRvbWljT3Jk
ZXJpbmdVbm9yZGVyZWQ6IGludG9yZGVyaW5nID0gVW5vcmRlcmVkOyBicmVhazsKLSAgICBjYXNl
IExMVk1BdG9taWNPcmRlcmluZ01vbm90b25pYzogaW50b3JkZXJpbmcgPSBNb25vdG9uaWM7IGJy
ZWFrOwotICAgIGNhc2UgTExWTUF0b21pY09yZGVyaW5nQWNxdWlyZTogaW50b3JkZXJpbmcgPSBB
Y3F1aXJlOyBicmVhazsKLSAgICBjYXNlIExMVk1BdG9taWNPcmRlcmluZ1JlbGVhc2U6IGludG9y
ZGVyaW5nID0gUmVsZWFzZTsgYnJlYWs7Ci0gICAgY2FzZSBMTFZNQXRvbWljT3JkZXJpbmdBY3F1
aXJlUmVsZWFzZToKLSAgICAgIGludG9yZGVyaW5nID0gQWNxdWlyZVJlbGVhc2U7Ci0gICAgICBi
cmVhazsKLSAgICBjYXNlIExMVk1BdG9taWNPcmRlcmluZ1NlcXVlbnRpYWxseUNvbnNpc3RlbnQ6
Ci0gICAgICBpbnRvcmRlcmluZyA9IFNlcXVlbnRpYWxseUNvbnNpc3RlbnQ7Ci0gICAgICBicmVh
azsKLSAgfQogICByZXR1cm4gd3JhcCh1bndyYXAoQiktPkNyZWF0ZUF0b21pY1JNVyhpbnRvcCwg
dW53cmFwKFBUUiksIHVud3JhcChWYWwpLAotICAgIGludG9yZGVyaW5nLCBzaW5nbGVUaHJlYWQg
PyBTaW5nbGVUaHJlYWQgOiBDcm9zc1RocmVhZCkpOworICAgIG1hcF9mcm9tX2xsdm1vcmRlcmlu
ZyhvcmRlcmluZyksIHNpbmdsZVRocmVhZCA/IFNpbmdsZVRocmVhZCA6IENyb3NzVGhyZWFkKSk7
CiB9CiAKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217347</attachid>
            <date>2013-11-19 15:49:38 -0800</date>
            <delta_ts>2013-11-19 21:37:40 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>76469</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5NTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNCBA
QAorMjAxMy0xMS0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEluZmVyIGNvbnN0YW50IGdsb2JhbCB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWxsIGdsb2JhbCB2YXJpYWJsZXMgdGhh
dCBhcmUgY2FuZGlkYXRlcyBmb3Igd2F0Y2hwb2ludC1iYXNlZCBjb25zdGFudCBpbmZlcmVuY2Ug
KGkuZS4KKyAgICAgICAgbm90ICdjb25zdCcgdmFyaWFibGVzKSB3aWxsIG5vdyBoYXZlIFdhdGNo
cG9pbnRTZXQncyBhc3NvY2lhdGVkIHdpdGggdGhlbSBhbmQgdGhvc2UKKyAgICAgICAgYXJlIHVz
ZWQgdG8gZHJpdmUgdGhlIGluZmVyZW5jZSBieSB0cmFja2luZyB0aHJlZSBzdGF0ZXMgb2YgZWFj
aCB2YXJpYWJsZToKKyAgICAgICAgCisgICAgICAgIFVuaW5pdGlhbGl6ZWQ6IHRoZSB2YXJpYWJs
ZSdzIHZhbHVlIGlzIFVuZGVmaW5lZCBhbmQgdGhlIFdhdGNocG9pbnRTZXQgc3RhdGUgaXMKKyAg
ICAgICAgICAgIENsZWFyV2F0Y2hwb2ludC4KKyAgICAgICAgCisgICAgICAgIEluaXRpYWxpemVk
OiB0aGUgdmFyaWFibGUncyB2YWx1ZSB3YXMgc2V0IHRvIHNvbWV0aGluZyAoY291bGQgZXZlbiBi
ZSBleHBsaWNpdGx5IHNldAorICAgICAgICAgICAgdG8gVW5kZWZpbmVkKSBhbmQgdGhlIFdhdGNo
cG9pbnRTZXQgc3RhdGUgaXMgSXNXYXRjaGluZy4KKyAgICAgICAgCisgICAgICAgIEludmFsaWRh
dGVkOiB0aGUgdmFyaWFibGUncyB2YWx1ZSB3YXMgc2V0IHRvIHNvbWV0aGluZyBlbHNlIChjb3Vs
ZCBldmVuIGJlIHRoZSBzYW1lCisgICAgICAgICAgICB0aGluZyBhcyBiZWZvcmUgYnV0IHRoZSBw
b2ludCBpcyB0aGF0IGEgcHV0IG9wZXJhdGlvbiBkaWQgZXhlY3V0ZSBhZ2FpbikgYW5kIHRoZQor
ICAgICAgICAgICAgV2F0Y2hwb2ludFNldCBpcyBJc0ludmFsaWRhdGVkLgorICAgICAgICAKKyAg
ICAgICAgSWYgdGhlIGNvbXBpbGVyIHRyaWVzIHRvIGNvbXBpbGUgYSBHZXRHbG9iYWxWYXIgYW5k
IHRoZSBXYXRjaHBvaW50U2V0IHN0YXRlIGlzCisgICAgICAgIElzV2F0Y2hpbmcsIHRoZW4gdGhl
IGN1cnJlbnQgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGNhbiBiZSBmb2xkZWQgaW4gcGxhY2Ugb2Yg
dGhlIGdldCwKKyAgICAgICAgYW5kIGEgd2F0Y2hwb2ludCBvbiB0aGUgdmFyaWFibGUgY2FuIGJl
IHJlZ2lzdGVyZWQuCisgICAgICAgIAorICAgICAgICBXZSBoYW5kbGUgcmFjZSBjb25kaXRpb25z
IGJldHdlZW4gdGhlIG11dGF0b3IgYW5kIGNvbXBpbGVyIGJ5IG1hbmRhdGluZyB0aGF0OgorICAg
ICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBjaGFuZ2VzIHRoZSBXYXRjaHBvaW50U2V0IHN0
YXRlIGFmdGVyIGV4ZWN1dGluZyB0aGUgcHV0LgorICAgICAgICAKKyAgICAgICAgLSBUaGVyZSBp
cyBubyBvcHBvcnR1bml0eSB0byBpbnN0YWxsIGNvZGUgb3IgY2FsbCBmdW5jdGlvbnMgYmV0d2Vl
biB3aGVuIHRoZSBtdXRhdG9yCisgICAgICAgICAgZXhlY3V0ZXMgYSBwdXQgYW5kIGNoYW5nZXMg
dGhlIFdhdGNocG9pbnRTZXQgc3RhdGUuCisgICAgICAgIAorICAgICAgICAtIFRoZSBjb21waWxl
ciBjaGVja3MgdGhlIFdhdGNocG9pbnRTZXQgc3RhdGUgcHJpb3IgdG8gcmVhZGluZyB0aGUgdmFs
dWUuCisgICAgICAgIAorICAgICAgICBUaGUgY29uY3JldGUgYWxnb3JpdGhtIHVzZWQgYnkgdGhl
IG11dGF0b3IgaXM6CisgICAgICAgIAorICAgICAgICAgICAgMS4gU3RvcmUgdGhlIG5ldyB2YWx1
ZSBpbnRvIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAgIC0tLSBFeGVjdXRlIGEgc3RvcmUtc3Rv
cmUgZmVuY2UuCisgICAgICAgICAgICAyLiBCdW1wIHRoZSBzdGF0ZSAoQ2xlYXJXYXRjaHBvaW5n
IGJlY29tZXMgSXNXYXRjaGluZywgSXNXYXRjaGluZyBiZWNvbWVzCisgICAgICAgICAgICAgICBJ
c0ludmFsaWRhdGVkKTsgdGhlIElzV2F0Y2hpbmctPklzSW52YWxpZGF0ZWQgdHJhbnNpdGlvbiBt
YXkgZW5kIHVwIGZpcmluZworICAgICAgICAgICAgICAgd2F0Y2hwb2ludHMuCisgICAgICAgIAor
ICAgICAgICBUaGUgY29uY3JldGUgYWxnb3JpdGhtIHRoYXQgdGhlIGNvbXBpbGVyIHVzZXMgaXM6
CisgICAgICAgIAorICAgICAgICAgICAgMS4gTG9hZCB0aGUgc3RhdGUuIElmIGl0J3MgKm5vdCog
SXNXYXRjaGluZywgdGhlbiBnaXZlIHVwIG9uIGNvbnN0YW50IGluZmVyZW5jZS4KKyAgICAgICAg
ICAgIC0tLSBFeGVjdXRlIGEgbG9hZC1sb2FkIGZlbmNlLgorICAgICAgICAgICAgMi4gTG9hZCB0
aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGFuZCB1c2UgdGhhdCBmb3IgZm9sZGluZywgd2hpbGUg
YWxzbyByZWdpc3RlcmluZworICAgICAgICAgICAgICAgYSBEZXNpcmVkV2F0Y2hwb2ludC4gVGhl
IHZhcmlvdXMgcGFydHMgb2YgdGhpcyBzdGVwIGNhbiBiZSBkb25lIGluIGFueSBvcmRlci4KKyAg
ICAgICAgCisgICAgICAgIFRoZSBkZXNpcmVkIHdhdGNocG9pbnQgcmVnaXN0cmF0aW9uIHdpbGwg
ZmFpbCBpZiB0aGUgd2F0Y2hwb2ludCBzZXQgaXMgYWxyZWFkeQorICAgICAgICBpbnZhbGlkYXRl
ZC4gTm93IGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgaW50ZXJlc3RpbmcgaW50ZXJsZWF2aW5nczoK
KyAgICAgICAgCisgICAgICAgIFVuaW5pdGlhbGl6ZWQtPk0xLT5NMi0+QzEtPkMyOiBDb21waWxl
ciBzZWVzIElzV2F0Y2hpbmcgYmVjYXVzZSBvZiB0aGUgbXV0YXRvcidzIHN0b3JlCisgICAgICAg
ICAgICBvcGVyYXRpb24sIGFuZCB0aGUgdmFyaWFibGUgaXMgZm9sZGVkLiBUaGUgZmVuY2luZyBl
bnN1cmVzIHRoYXQgQzIgc2VlcyB0aGUgdmFsdWUKKyAgICAgICAgICAgIHN0b3JlZCBpbiBNMSAt
IGkuZS4gd2UgZm9sZCBvbiB0aGUgdmFsdWUgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIHdhdGNocG9p
bnRlZC4gSWYKKyAgICAgICAgICAgIGJlZm9yZSB0aGUgY29tcGlsYXRpb24gaXMgaW5zdGFsbGVk
IHRoZSBtdXRhdG9yIGV4ZWN1dGVzIGFub3RoZXIgc3RvcmUgdGhlbiB3ZQorICAgICAgICAgICAg
d2lsbCBiZSBzdXJlIHRoYXQgaXQgd2lsbCBiZSBhIGNvbXBsZXRlIHNlcXVlbmNlIG9mIE0xK00y
IHNpbmNlIGNvbXBpbGF0aW9ucyBnZXQKKyAgICAgICAgICAgIGluc3RhbGxlZCBhdCBzYWZlcG9p
bnRzIGFuZCBuZXZlciAiaW4gdGhlIG1pZGRsZSIgb2YgYSBwdXRfdG9fc2NvcGUuIEhlbmNlIHRo
YXQKKyAgICAgICAgICAgIGNvbXBpbGF0aW9uIGluc3RhbGxhdGlvbiB3aWxsIGJlIGludmFsaWRh
dGVkLiBJZiB0aGUgTTErTTIgc2VxdWVuY2UgaGFwcGVucyBhZnRlcgorICAgICAgICAgICAgdGhl
IGNvZGUgaXMgaW5zdGFsbGVkLCB0aGVuIHRoZSBjb2RlIHdpbGwgYmUgaW52YWxpZGF0ZWQgYnkg
dHJpZ2dlcmluZyBhIGpldHRpc29uLgorICAgICAgICAKKyAgICAgICAgVW5pbml0aWFsaXplZC0+
TTEtPkMxLT5DMi0+TTI6IENvbXBpbGVyIHNlZXMgVW5pbml0aWFsaXplZCBhbmQgd2lsbCBub3Qg
Zm9sZC4gVGhpcyBpcworICAgICAgICAgICAgYSBzZW5zaWJsZSBvdXRjb21lIHNpbmNlIGlmIHRo
ZSBjb21waWxlciByZWFkIHRoZSB2YXJpYWJsZSdzIHZhbHVlLCBpdCB3b3VsZCBoYXZlCisgICAg
ICAgICAgICBzZWVuIFVuZGVmaW5lZC4KKyAgICAgICAgCisgICAgICAgIFVuaW5pdGlhbGl6ZWQt
PkMxLT5DMi0+TTEtPk0yOiBDb21waWxlciBzZWVzIFVuaW5pdGlhbGl6ZWQgYW5kIHdpbGwgbm90
IGZvbGQuCisgICAgICAgIFVuaW5pdGlhbGl6ZWQtPkMxLT5NMS0+QzItPk0yOiBDb21waWxlciBz
ZWVzIFVuaW5pdGlhbGl6ZWQgYW5kIHdpbGwgbm90IGZvbGQuCisgICAgICAgIFVuaW5pdGlhbGl6
ZWQtPkMxLT5NMS0+TTItPkMyOiBDb21waWxlciBzZWVzIFVuaW5pdGlhbGl6ZWQgYW5kIHdpbGwg
bm90IGZvbGQuCisgICAgICAgIFVuaW5pdGlhbGl6ZWQtPk0xLT5DMS0+TTItPkMyOiBDb21waWxl
ciBzZWVzIFVuaW5pdGlhbGl6ZWQgYW5kIHdpbGwgbm90IGZvbGQuCisgICAgICAgIAorICAgICAg
ICBJc1dhdGNoZWQtPk0xLT5NMi0+QzEtPkMyOiBDb21waWxlciBzZWVzIElzSW52YWxpZGF0ZWQg
YW5kIHdpbGwgbm90IGZvbGQuCisgICAgICAgIAorICAgICAgICBJc1dhdGNoZWQtPk0xLT5DMS0+
QzItPk0yOiBDb21waWxlciB3aWxsIGZvbGQsIGJ1dCB3aWxsIGFsc28gcmVnaXN0ZXIgYSBkZXNp
cmVkCisgICAgICAgICAgICB3YXRjaHBvaW50LCBhbmQgdGhhdCB3YXRjaHBvaW50IHdpbGwgZ2V0
IGludmFsaWRhdGVkIGJlZm9yZSB0aGUgY29kZSBpcyBpbnN0YWxsZWQuCisgICAgICAgIAorICAg
ICAgICBJc1dhdGNoZWQtPk0xLT5DMS0+TTItPkMyOiBBcyBhYm92ZSwgd2lsbCBmb2xkIGJ1dCB0
aGUgY29kZSB3aWxsIGdldCBpbnZhbGlkYXRlZC4KKyAgICAgICAgSXNXYXRjaGVkLT5DMS0+QzIt
Pk0xLT5NMjogQXMgYWJvdmUsIHdpbGwgZm9sZCBidXQgdGhlIGNvZGUgd2lsbCBnZXQgaW52YWxp
ZGF0ZWQuCisgICAgICAgIElzV2F0Y2hlZC0+QzEtPk0xLT5DMi0+TTI6IEFzIGFib3ZlLCB3aWxs
IGZvbGQgYnV0IHRoZSBjb2RlIHdpbGwgZ2V0IGludmFsaWRhdGVkLgorICAgICAgICBJc1dhdGNo
ZWQtPkMxLT5NMS0+TTItPkMyOiBBcyBhYm92ZSwgd2lsbCBmb2xkIGJ1dCB0aGUgY29kZSB3aWxs
IGdldCBpbnZhbGlkYXRlZC4KKyAgICAgICAgCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGtpbmQg
b2YgcmVhc29uaW5nIHNob3dzIHdoeSBoYXZpbmcgdGhlIG11dGF0b3IgZmlyc3QgYnVtcCB0aGUg
c3RhdGUgYW5kCisgICAgICAgIHRoZW4gc3RvcmUgdGhlIG5ldyB2YWx1ZSB3b3VsZCBiZSB3cm9u
Zy4gSWYgd2UgaGFkIGRvbmUgdGhhdCAoTTEgPSBidW1wIHN0YXRlLCBNMiA9CisgICAgICAgIGV4
ZWN1dGUgcHV0KSB0aGVuIHdlIGNvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBkZWFkbHkgaW50ZXJs
ZWF2aW5nczoKKyAgICAgICAgCisgICAgICAgIFVuaW5pdGlhbGl6ZWQtPk0xLT5DMS0+QzItPk0y
OgorICAgICAgICBVbmluaXRpYWxpemVkLT5NMS0+QzEtPk0yLT5DMjogTXV0YXRvciBidW1wcyB0
aGUgc3RhdGUgdG8gSXNXYXRjaGVkIGFuZCB0aGVuIHRoZQorICAgICAgICAgICAgY29tcGlsZXIg
Zm9sZHMgVW5kZWZpbmVkLCBzaW5jZSBNMiBoYXNuJ3QgZXhlY3V0ZWQgeWV0LiBBbHRob3VnaCBD
MiB3aWxsIHNldCB0aGUKKyAgICAgICAgICAgIHdhdGNocG9pbnQsIE0xIGRpZG4ndCBub3RpZnkg
aXQgLSBpdCBtZWFybHkgaW5pdGlhdGVkIHdhdGNoaW5nLiBNMiB0aGVuIHN0b3JlcyBhCisgICAg
ICAgICAgICB2YWx1ZSBvdGhlciB0aGFuIFVuZGVmaW5lZCwgYW5kIHlvdSdyZSB0b2FzdC4KKyAg
ICAgICAgCisgICAgICAgIFlvdSBjb3VsZCBmaXggdGhpcyBzb3J0IG9mIHRoaW5nIGJ5IG1ha2lu
ZyB0aGUgRGVzaXJlZCBXYXRjaHBvaW50cyBtYWNoaW5lcnkgbW9yZQorICAgICAgICBzb3BoaXN0
aWNhdGVkLCBmb3IgZXhhbXBsZSBoYXZpbmcgaXQgdHJhY2sgdGhlIHZhbHVlIHRoYXQgd2FzIGZv
bGRlZDsgaWYgdGhlIGdsb2JhbAorICAgICAgICB2YXJpYWJsZSdzIHZhbHVlIHdhcyBsYXRlciBm
b3VuZCB0byBiZSBkaWZmZXJlbnQgdGhlbiB3ZSBjb3VsZCBpbnZhbGlkYXRlIHRoZQorICAgICAg
ICBjb21waWxhdGlvbi4gWW91IGNvdWxkIGFsc28gZml4IGl0IGJ5IGhhdmluZyB0aGUgY29tcGls
ZXIgYWxzbyBjaGVjayB0aGF0IHRoZSB2YWx1ZSBvZgorICAgICAgICB0aGUgdmFyaWFibGUgaXMg
bm90IFVuZGVmaW5lZCBiZWZvcmUgZm9sZGluZy4gV2hpbGUgdGhvc2UgYWxsIHNvdW5kIGdyZWF0
LCBJIGRlY2lkZWQKKyAgICAgICAgdG8gaW5zdGVhZCBqdXN0IHVzZSB0aGUgcmlnaHQgaW50ZXJs
ZWF2aW5nIHNpbmNlIHRoYXQgcmVzdWx0cyBpbiBsZXNzIGNvZGUgYW5kIGZlZWxzCisgICAgICAg
IG1vcmUgaW50dWl0aXZlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIDAuNSUgc3BlZWQt
dXAgb24gU3VuU3BpZGVyLCBtb3N0bHkgZHVlIHRvIGEgMjAlIHNwZWVkLXVwIG9uIG1hdGgtY29y
ZGljLgorICAgICAgICBJdCdzIGEgMC42JSBzbG93LWRvd24gb24gTG9uZ1NwaWRlciwgbW9zdGx5
IGR1ZSB0byBhIDI1JSBzbG93LWRvd24gb24gM2QtY3ViZS4gVGhpcyBpcworICAgICAgICBiZWNh
dXNlIDNkLWN1YmUgdGFrZXMgZ2xvYmFsIHZhcmlhYmxlIGFzc2lnbm1lbnQgc2xvdyBwYXRocyB2
ZXJ5IG9mdGVuLiBOb3RlIHRoYXQgdGhpcworICAgICAgICAzZC1jdWJlIHNsb3ctZG93biBkb2Vz
bid0IG1hbmlmZXN0IGFzIG11Y2ggaW4gU3VuU3BpZGVyIChvbmx5IDYlIHRoZXJlKS4gVGhpcyBw
YXRjaCBpcworICAgICAgICBhbHNvIGEgMS41JSBzcGVlZC11cCBvbiBWOHY3IGFuZCBhIDIuOCUg
c3BlZWQtdXAgb24gT2N0YW5lIHYxLCBtb3N0bHkgZHVlIHRvIGRlbHRhYmx1ZQorICAgICAgICAo
My43JSksIHJpY2hhcmRzICg0JSksIGFuZCBtYW5kcmVlbCAoMjYlKS4gVGhpcyBpcyBhIDIlIHNw
ZWVkLXVwIG9uIEtyYWtlbiwgbW9zdGx5IGR1ZQorICAgICAgICB0byBhIDE3LjUlIHNwZWVkLXVw
IG9uIGltYWdpbmctZ2F1c3NpYW4tYmx1ci4gU29tZXRoaW5nIHRoYXQgcmVhbGx5IGlsbHVzdHJh
dGVzIHRoZQorICAgICAgICBzbGFtLWR1bmstaXR1ZGUgb2YgdGhpcyBwYXRjaCBpcyB0aGUgd2lk
ZSByYW5nZSBvZiBzcGVlZC11cHMgb24gSlNSZWdyZXNzLiBDYXN1YWwgSlMKKyAgICAgICAgcHJv
Z3JhbW1pbmcgb2Z0ZW4gbGVhZHMgdG8gZ2xvYmFsLXZhci1iYXNlZCBpZGlvbXMgYW5kIHRob3Nl
IHZhcmlhYmxlcyB0ZW5kIHRvIGJlCisgICAgICAgIGFzc2lnbmVkIG9uY2UsIGxlYWRpbmcgdG8g
ZXhjZWxsZW50IGNvbnN0YW50IGZvbGRpbmcgb3Bwb3J0dW5pdGllcyBpbiBhbiBvcHRpbWl6aW5n
CisgICAgICAgIEpJVC4gVGhpcyBpcyB2ZXJ5IGV2aWRlbnQgaW4gdGhlIHNwZWVkLXVwcyBvbiBK
U1JlZ3Jlc3MuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAgICAg
ICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmRtYlNZKToKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJN
djdBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmRtYlNZKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTY0OjptZW1mZW5jZSk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNdjcuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6bG9h
ZDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjptZW1mZW5jZSk6CisgICAg
ICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Lmg6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Ojpsb2FkOCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Ojpz
dG9yZTgpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6Z2V0VW51c2VkUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6c3RvcmU4KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om1lbW9yeUZlbmNlKToKKyAgICAgICAg
KiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6OmxvYWQ4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OnN0b3JlOCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpYODZBc3NlbWJsZXI6Om1vdmJfcm0pOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJs
ZXI6Om1vdnpibF9tcik6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6bWZlbmNlKToKKyAg
ICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpYODZJbnN0cnVjdGlvbkZvcm1hdHRlcjo6dGhyZWVC
eXRlT3ApOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0
dGVyOjpvbmVCeXRlT3A4KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvV2F0
Y2hwb2ludC5jcHA6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OldhdGNocG9pbnRTZXQp
OgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjphZGQpOgorICAgICAgICAoSlNDOjpXYXRj
aHBvaW50U2V0Ojpub3RpZnlXcml0ZVNsb3cpOgorICAgICAgICAqIGJ5dGVjb2RlL1dhdGNocG9p
bnQuaDoKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6c3RhdGUpOgorICAgICAgICAoSlND
OjpXYXRjaHBvaW50U2V0Ojppc1N0aWxsVmFsaWQpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50
U2V0OjphZGRyZXNzT2ZTZXRJc05vdEVtcHR5KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjo6OmV4ZWN1dGVFZmZlY3Rz
KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRKU0NvbnN0YW50Rm9yVmFsdWUpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Rml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2Rl
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omlz
U3Ryb25nbHlQcm92ZWRDb25zdGFudEluKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNJ
ZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1Jl
Z2lzdGVyUG9pbnRlcik6CisgICAgICAgICogZGZnL0RGR05vZGVGbGFncy5oOgorICAgICAgICAq
IGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlTm90aWZ5UHV0R2xvYmFsVmFyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExBYmJyZXZpYXRlZFR5cGVzLmg6CisgICAgICAgICogZnRs
L0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpidWlsZEZlbmNlKToKKyAg
ICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5D
b21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oOgorICAgICAg
ICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZU5vdGlmeVB1dEdsb2JhbFZhcik6CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5o
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZmVuY2UpOgorICAgICAgICAqIGppdC9KSVQu
aDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxWYXIpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbToKKyAgICAgICAgKiBsbHZtL0xMVk1BUElGdW5jdGlvbnMuaDoKKyAgICAgICAgKiBv
ZmZsaW5lYXNtL2FybS5yYjoKKyAgICAgICAgKiBvZmZsaW5lYXNtL2FybTY0LnJiOgorICAgICAg
ICAqIG9mZmxpbmVhc20vY2xvb3AucmI6CisgICAgICAgICogb2ZmbGluZWFzbS9pbnN0cnVjdGlv
bnMucmI6CisgICAgICAgICogb2ZmbGluZWFzbS94ODYucmI6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjphZGRHbG9i
YWxWYXIpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6YWRkRnVuY3Rpb24pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OmFkZFZhcik6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjphZGRDb25zdCk6
CisgICAgICAgICogcnVudGltZS9KU1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6YWJzdHJhY3RB
Y2Nlc3MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAg
ICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0
aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwOgorICAgICAg
ICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5Ojpjb3VsZEJlV2F0Y2hlZCk6CisgICAgICAgIChKU0M6
OlN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKToKKyAgICAgICAgKEpTQzo6U3ltYm9s
VGFibGVFbnRyeTo6bm90aWZ5V3JpdGVTbG93KToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRh
YmxlLmg6CisKIDIwMTMtMTEtMTkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW5hbWUgV2F0Y2hwb2ludFNldDo6bm90aWZ5V3JpdGUoKSBzaG91bGQgYmUgcmVu
YW1lZCB0byBXYXRjaHBvaW50U2V0OjpmaXJlQWxsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE1OTUyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTU5NSw2ICsxNTk1LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IGluc24obm9wUHNldWRvKCkpOwogICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
ZG1iU1koKQorICAgIHsKKyAgICAgICAgaW5zbigweGQ1MDMzZmJmKTsKKyAgICB9CiAKICAgICB0
ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIG9ybihSZWdpc3Rl
cklEIHJkLCBSZWdpc3RlcklEIHJuLCBSZWdpc3RlcklEIHJtKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkocmV2aXNpb24gMTU5
NTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MTMsNiArNzEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgT1Bf
TU9WVCAgICAgICAgID0gMHhGMkMwLAogICAgICAgICBPUF9VQkZYX1QxICAgICAgPSAweEYzQzAs
CiAgICAgICAgIE9QX05PUF9UMmEgICAgICA9IDB4RjNBRiwKKyAgICAgICAgT1BfRE1CX1NZX1Qy
YSAgID0gMHhGM0JGLAogICAgICAgICBPUF9TVFJCX2ltbV9UMyAgPSAweEY4MDAsCiAgICAgICAg
IE9QX1NUUkJfcmVnX1QyICA9IDB4RjgwMCwKICAgICAgICAgT1BfTERSQl9pbW1fVDMgID0gMHhG
ODEwLApAQCAtNzY5LDYgKzc3MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIE9QX1ZDVlRTRF9UMWIg
ICA9IDB4MEE0MCwKICAgICAgICAgT1BfVkNWVERTX1QxYiAgID0gMHgwQTQwLAogICAgICAgICBP
UF9OT1BfVDJiICAgICAgPSAweDgwMDAsCisgICAgICAgIE9QX0RNQl9TWV9UMmEgICA9IDB4OEY1
RiwKICAgICAgICAgT1BfQl9UM2IgICAgICAgID0gMHg4MDAwLAogICAgICAgICBPUF9CX1Q0YiAg
ICAgICAgPSAweDkwMDAsCiAgICAgfSBPcGNvZGVJRDI7CkBAIC0xOTgwLDYgKzE5ODIsMTEgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTZPcDE2KE9QX05P
UF9UMmEsIE9QX05PUF9UMmIpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGRtYlNZKCkKKyAgICB7
CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b1dvcmRPcDE2T3AxNihPUF9ETUJfU1lfVDJhLCBPUF9E
TUJfU1lfVDJiKTsKKyAgICB9CiAKICAgICBBc3NlbWJsZXJMYWJlbCBsYWJlbElnbm9yaW5nV2F0
Y2hwb2ludHMoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAxNTk1MjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjI1NSw2ICsyMjU1LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm5vcCgpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIG1lbWZlbmNlKCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmRtYlNZKCk7CisgICAgfQogCiAKICAgICAvLyBNaXNj
IGhlbHBlciBmdW5jdGlvbnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gMTU5NTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY1Miw2ICs2NTIsMTIgQEAgcHVibGljOgogICAgICAgICBsb2FkOFNp
Z25lZChzZXR1cEFybUFkZHJlc3MoYWRkcmVzcyksIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQg
bG9hZDgoY29uc3Qgdm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MpLCBkZXN0KTsKKyAgICAgICAgbG9hZDgoZGVz
dCwgZGVzdCk7CisgICAgfQorCiAgICAgRGF0YUxhYmVsMzIgbG9hZDMyV2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IERhdGFMYWJlbDMyIGxhYmVsID0gbW92ZVdpdGhQYXRjaChUcnVzdGVkSW1tMzIoYWRkcmVzcy5v
ZmZzZXQpLCBkYXRhVGVtcFJlZ2lzdGVyKTsKQEAgLTEyMzEsNiArMTIzNywxMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwogICAgIH0KICAgICAKKyAgICB2b2lkIG1lbWZl
bmNlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmRtYlNZKCk7CisgICAgfQorICAgIAog
ICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVj
dGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAg
IEFSTXY3QXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoaW5zdHJ1Y3Rpb25TdGFydC5kYXRhTG9j
YXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAkocmV2aXNp
b24gMTU5NTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Ni5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB1
c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6c3ViMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb246Om9yMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246
OmxvYWQzMjsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZDg7CiAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN0b3JlMzI7CiAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXJYODZDb21tb246OnN0b3JlODsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbjo6YnJhbmNoMzI7CkBAIC0xMDQsNiArMTA1LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoYWRkcmVzcywgZGVzdCk7CiAgICAgfQorICAgIAorICAg
IHZvaWQgbG9hZDgoY29uc3Qgdm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX21yKGFkZHJlc3MsIGRlc3QpOworICAgIH0KIAog
ICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzIGFkZHJl
c3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CkBAIC0xMzgsNiArMTQ0LDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBhZGRyZXNzKTsKICAgICB9
CisgICAgCisgICAgdm9pZCBzdG9yZTgoUmVnaXN0ZXJJRCBzcmMsIHZvaWQqIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX3JtKHNyYywgYWRkcmVzcyk7CisgICAgfQog
CiAgICAgdm9pZCBzdG9yZTgoVHJ1c3RlZEltbTMyIGltbSwgdm9pZCogYWRkcmVzcykKICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYwNiw2ICs2MDYsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gWDg2UmVn
aXN0ZXJzOjplY3g7CiAgICAgfQogCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXJJ
RCBnZXRVbnVzZWRSZWdpc3RlcihBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBpZiAo
YWRkcmVzcy5iYXNlICE9IFg4NlJlZ2lzdGVyczo6ZWF4KQorICAgICAgICAgICAgcmV0dXJuIFg4
NlJlZ2lzdGVyczo6ZWF4OworCisgICAgICAgIEFTU0VSVChhZGRyZXNzLmJhc2UgIT0gWDg2UmVn
aXN0ZXJzOjplZHgpOworICAgICAgICByZXR1cm4gWDg2UmVnaXN0ZXJzOjplZHg7CisgICAgfQor
CiAgICAgdm9pZCBzdG9yZTgoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQogICAg
IHsKICNpZiBDUFUoWDg2KQpAQCAtNjI0LDYgKzYzMywyNSBAQCBwdWJsaWM6CiAjZW5kaWYKICAg
ICAgICAgbV9hc3NlbWJsZXIubW92Yl9ybShzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOwogICAgIH0KKyAgICAKKyAgICB2b2lk
IHN0b3JlOChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyNpZiBDUFUo
WDg2KQorICAgICAgICAvLyBPbiAzMi1iaXQgeDg2IHdlIGNhbiBvbmx5IHN0b3JlIGZyb20gdGhl
IGZpcnN0IDQgcmVnaXN0ZXJzOworICAgICAgICAvLyBlc3AuLmVkaSBhcmUgbWFwcGVkIHRvIHRo
ZSAnaCcgcmVnaXN0ZXJzIQorICAgICAgICBpZiAoc3JjID49IDQpIHsKKyAgICAgICAgICAgIC8v
IFBpY2sgYSB0ZW1wb3JhcnkgcmVnaXN0ZXIuCisgICAgICAgICAgICBSZWdpc3RlcklEIHRlbXAg
PSBnZXRVbnVzZWRSZWdpc3RlcihhZGRyZXNzKTsKKworICAgICAgICAgICAgLy8gU3dhcCB0byB0
aGUgdGVtcG9yYXJ5IHJlZ2lzdGVyIHRvIHBlcmZvcm0gdGhlIHN0b3JlLgorICAgICAgICAgICAg
c3dhcChzcmMsIHRlbXApOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92Yl9ybSh0ZW1wLCBh
ZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIHN3YXAoc3JjLCB0ZW1w
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmJfcm0oc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9
CiAKICAgICB2b2lkIHN0b3JlMTYoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQog
ICAgIHsKQEAgLTE0MTksNiArMTQ0NywxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Fz
c2VtYmxlci5ub3AoKTsKICAgICB9CisgICAgCisgICAgdm9pZCBtZW1vcnlGZW5jZSgpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5tZmVuY2UoKTsKKyAgICB9CiAKICAgICBzdGF0aWMgdm9p
ZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29k
ZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2
aXNpb24gMTU5NTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIHB1YmxpYzoK
ICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoQWRkMzI7CiAgICAgdXNp
bmcgTWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yMzI7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb246OnN1YjMyOworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjps
b2FkODsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZDMyOwogICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpzdG9yZTMyOwogICAgIHVzaW5nIE1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uOjpzdG9yZTg7CkBAIC05MSw2ICs5MiwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKTsK
ICAgICAgICAgc3ViMzIoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcikpOwogICAgIH0KKyAg
ICAKKyAgICB2b2lkIGxvYWQ4KGNvbnN0IHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgZGVzdCk7CisgICAg
ICAgIGxvYWQ4KGRlc3QsIGRlc3QpOworICAgIH0KIAogICAgIHZvaWQgbG9hZDMyKGNvbnN0IHZv
aWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CkBAIC0xMjYsNiArMTMzLDEyIEBA
IHB1YmxpYzoKICAgICAgICAgc3RvcmU4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIpKTsK
ICAgICB9CiAKKyAgICB2b2lkIHN0b3JlOChSZWdpc3RlcklEIHJlZywgdm9pZCogYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgc2NyYXRjaFJlZ2lz
dGVyKTsKKyAgICAgICAgc3RvcmU4KHJlZywgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIpKTsKKyAg
ICB9CisKICAgICBDYWxsIGNhbGwoKQogICAgIHsKICAgICAgICAgRGF0YUxhYmVsUHRyIGxhYmVs
ID0gbW92ZVdpdGhQYXRjaChUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoUmVnaXN0ZXIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShy
ZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFz
c2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNiArMjY3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgT1AyX01PVkRfRWRWZCAgICAgICA9IDB4N0UsCiAgICAgICAgIE9QMl9KQ0NfcmVsMzIg
ICAgICAgPSAweDgwLAogICAgICAgICBPUF9TRVRDQyAgICAgICAgICAgID0gMHg5MCwKKyAgICAg
ICAgT1AyXzNCWVRFX0VTQ0FQRSAgICA9IDB4QUUsCiAgICAgICAgIE9QMl9JTVVMX0d2RXYgICAg
ICAgPSAweEFGLAogICAgICAgICBPUDJfTU9WWlhfR3ZFYiAgICAgID0gMHhCNiwKICAgICAgICAg
T1AyX01PVlNYX0d2RWIgICAgICA9IDB4QkUsCkBAIC0yNzcsNiArMjc4LDEwIEBAIHByaXZhdGU6
CiAgICAgICAgIE9QMl9QU1JMUV9VZHFJYiAgICAgPSAweDczLAogICAgICAgICBPUDJfUE9SX1Zk
cVdkcSAgICAgID0gMFhFQiwKICAgICB9IFR3b0J5dGVPcGNvZGVJRDsKKyAgICAKKyAgICB0eXBl
ZGVmIGVudW0geworICAgICAgICBPUDNfTUZFTkNFICAgICAgICAgID0gMHhGMCwKKyAgICB9IFRo
cmVlQnl0ZU9wY29kZUlEOwogCiAgICAgVHdvQnl0ZU9wY29kZUlEIGpjY1JlbDMyKENvbmRpdGlv
biBjb25kKQogICAgIHsKQEAgLTEzMDIsNiArMTMwNywxOCBAQCBwdWJsaWM6CiAgICAgICAgIG1f
Zm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDExX0V2SWIsIEdST1VQMTFfTU9WLCBiYXNlLCBp
bmRleCwgc2NhbGUsIG9mZnNldCk7CiAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTgoaW1t
KTsKICAgICB9CisKKyNpZiAhQ1BVKFg4Nl82NCkKKyAgICB2b2lkIG1vdmJfcm0oUmVnaXN0ZXJJ
RCBzcmMsIGNvbnN0IHZvaWQqIGFkZHIpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVC
eXRlT3AoT1BfTU9WX0ViR2IsIHNyYywgYWRkcik7CisgICAgfQorI2VuZGlmCisgICAgCisgICAg
dm9pZCBtb3ZiX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Up
CisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A4KE9QX01PVl9FYkdiLCBzcmMs
IGJhc2UsIG9mZnNldCk7CisgICAgfQogICAgIAogICAgIHZvaWQgbW92Yl9ybShSZWdpc3RlcklE
IHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQg
c2NhbGUpCiAgICAgewpAQCAtMTQ0OSw2ICsxNDY2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9m
b3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9NT1ZaWF9HdkViLCBkc3QsIGJhc2UsIGluZGV4LCBzY2Fs
ZSwgb2Zmc2V0KTsKICAgICB9CiAKKyNpZiAhQ1BVKFg4Nl82NCkKKyAgICB2b2lkIG1vdnpibF9t
cihjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfTU9WWlhfR3ZFYiwgZHN0LCBhZGRyZXNzKTsKKyAgICB9
CisjZW5kaWYKKwogICAgIHZvaWQgbW92c2JsX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3Ao
T1AyX01PVlNYX0d2RWIsIGRzdCwgYmFzZSwgb2Zmc2V0KTsKQEAgLTE4NzMsNyArMTg5Nyw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9TU0VfRjIpOwogICAgICAg
ICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX1NRUlRTRF9Wc2RXc2QsIChSZWdpc3RlcklEKWRz
dCwgKFJlZ2lzdGVySUQpc3JjKTsKICAgICB9Ci0KKyAgICAKICAgICAvLyBNaXNjIGluc3RydWN0
aW9uczoKIAogICAgIHZvaWQgaW50MygpCkBAIC0xODkwLDYgKzE5MTQsMTEgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIucHJlZml4KFBSRV9QUkVESUNUX0JSQU5DSF9OT1Rf
VEFLRU4pOwogICAgIH0KKyAgICAKKyAgICB2b2lkIG1mZW5jZSgpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci50aHJlZUJ5dGVPcChPUDNfTUZFTkNFKTsKKyAgICB9CiAKICAgICAvLyBBc3Nl
bWJsZXIgYWRtaW4gbWV0aG9kczoKIApAQCAtMjMwMSw2ICsyMzMwLDE0IEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIHZvaWQgdGhyZWVCeXRlT3AoVGhyZWVCeXRlT3Bj
b2RlSUQgb3Bjb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFj
ZShtYXhJbnN0cnVjdGlvblNpemUpOworICAgICAgICAgICAgbV9idWZmZXIucHV0Qnl0ZVVuY2hl
Y2tlZChPUF8yQllURV9FU0NBUEUpOworICAgICAgICAgICAgbV9idWZmZXIucHV0Qnl0ZVVuY2hl
Y2tlZChPUDJfM0JZVEVfRVNDQVBFKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEJ5dGVVbmNo
ZWNrZWQob3Bjb2RlKTsKKyAgICAgICAgfQorCiAjaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgLy8g
UXVhZC13b3JkLXNpemVkIG9wZXJhbmRzOgogICAgICAgICAvLwpAQCAtMjQxMyw2ICsyNDUwLDE0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZWdpc3Rlck1vZFJNKHJlZywgcm0pOwogICAgICAg
ICB9CiAKKyAgICAgICAgdm9pZCBvbmVCeXRlT3A4KE9uZUJ5dGVPcGNvZGVJRCBvcGNvZGUsIGlu
dCByZWcsIFJlZ2lzdGVySUQgYmFzZSwgaW50IG9mZnNldCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplKTsKKyAgICAgICAgICAg
IGVtaXRSZXhJZihieXRlUmVnUmVxdWlyZXNSZXgocmVnKSB8fCBieXRlUmVnUmVxdWlyZXNSZXgo
YmFzZSksIHJlZywgMCwgYmFzZSk7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRCeXRlVW5jaGVj
a2VkKG9wY29kZSk7CisgICAgICAgICAgICBtZW1vcnlNb2RSTShyZWcsIGJhc2UsIG9mZnNldCk7
CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIG9uZUJ5dGVPcDgoT25lQnl0ZU9wY29kZUlEIG9w
Y29kZSwgaW50IHJlZywgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2Nh
bGUsIGludCBvZmZzZXQpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNw
YWNlKG1heEluc3RydWN0aW9uU2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU5NTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NDEs
OSArMTg0MSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAg
ICAgICAgICAgIGlmIChlbnRyeS5pc051bGwoKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAot
ICAgICAgICAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCB3ZSdsbCB3cml0ZSB0byB0aGlzIHZhciwg
c28gbm90aWZ5IG5vdyBhbmQgYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGRvaW5nIHNvIGF0IHJ1bnRp
bWUuCi0gICAgICAgICAgICBlbnRyeS5ub3RpZnlXcml0ZSgpOwotCiAgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDBdID0gdm0oKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9pbml0X2ds
b2JhbF9jb25zdCk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDFdID0gJm1fZ2xvYmFs
T2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOwogICAgICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3Bw
CShyZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0
Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgV2F0Y2hwb2ludDo6
fldhdGNocG9pbnQoKQogCiBXYXRjaHBvaW50U2V0OjpXYXRjaHBvaW50U2V0KFdhdGNocG9pbnRT
dGF0ZSBzdGF0ZSkKICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgLCBtX3NldElzTm90RW1wdHko
ZmFsc2UpCiB7CiB9CiAKQEAgLTYwLDYgKzYxLDcgQEAgdm9pZCBXYXRjaHBvaW50U2V0OjphZGQo
V2F0Y2hwb2ludCogd2F0YwogICAgIGlmICghd2F0Y2hwb2ludCkKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fc2V0LnB1c2god2F0Y2hwb2ludCk7CisgICAgbV9zZXRJc05vdEVtcHR5ID0gdHJ1ZTsK
ICAgICBtX3N0YXRlID0gSXNXYXRjaGVkOwogfQogCkBAIC02Nyw2ICs2OSw3IEBAIHZvaWQgV2F0
Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3coKQogewogICAgIEFTU0VSVChzdGF0ZSgpID09IElzV2F0
Y2hlZCk7CiAgICAgCisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBmaXJlQWxsV2F0
Y2hwb2ludHMoKTsKICAgICBtX3N0YXRlID0gSXNJbnZhbGlkYXRlZDsKICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNo
cG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0
Y2hwb2ludC5oCShyZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSwxOCBAQCBwdWJs
aWM6CiAgICAgV2F0Y2hwb2ludFNldChXYXRjaHBvaW50U3RhdGUpOwogICAgIH5XYXRjaHBvaW50
U2V0KCk7IC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgbm90IGZpcmUgYW55IG9mIHRoZSB3YXRjaHBv
aW50czsgaWYgeW91IG5lZWQgdG8ga25vdyB3aGVuIGEgV2F0Y2hwb2ludFNldCBkaWVzIHRoZW4g
eW91IG5lZWQgYSBzZXBhcmF0ZSBtZWNoYW5pc20gZm9yIHRoaXMuCiAgICAgCi0gICAgV2F0Y2hw
b2ludFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8V2F0Y2hwb2ludFN0
YXRlPihtX3N0YXRlKTsgfQorICAgIC8vIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZyb20gYW5v
dGhlciB0aHJlYWQuIEl0IG1heSByZXR1cm4gYW4gb2xkCisgICAgLy8gc3RhdGUuIEd1YXJhbnRl
ZXMgdGhhdCBpZiAqZmlyc3QqIHJlYWQgdGhlIHN0YXRlKCkgb2YgdGhlIHRoaW5nIGJlaW5nCisg
ICAgLy8gd2F0Y2hlZCBhbmQgaXQgcmV0dXJuZWQgSXNXYXRjaGVkIGFuZCAqc2Vjb25kKiB5b3Ug
YWN0dWFsbHkgcmVhZCBpdHMKKyAgICAvLyB2YWx1ZSB0aGVuIGl0J3Mgc2FmZSB0byBhc3N1bWUg
dGhhdCBpZiB0aGUgc3RhdGUgYmVpbmcgd2F0Y2hlZCBjaGFuZ2VzCisgICAgLy8gdGhlbiBhbHNv
IHRoZSB3YXRjaHBvaW50IHN0YXRlKCkgd2lsbCBjaGFuZ2UgdG8gSXNJbnZhbGlkYXRlZC4KKyAg
ICBXYXRjaHBvaW50U3RhdGUgc3RhdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgV1RGOjpsb2Fk
TG9hZEZlbmNlKCk7CisgICAgICAgIFdhdGNocG9pbnRTdGF0ZSByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxXYXRjaHBvaW50U3RhdGU+KG1fc3RhdGUpOworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2Uo
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgLy8gSXQgaXMgc2Fm
ZSB0byBjYWxsIHRoaXMgZnJvbSBhbm90aGVyIHRocmVhZC4gIEl0IG1heSByZXR1cm4gdHJ1ZQog
ICAgIC8vIGV2ZW4gaWYgdGhlIHNldCBhY3R1YWxseSBoYWQgYmVlbiBpbnZhbGlkYXRlZCwgYnV0
IHRoYXQgb3VnaHQgdG8gaGFwcGVuCkBAIC02OSw3ICs4MCw2IEBAIHB1YmxpYzoKICAgICAvLyBp
c3N1aW5nIGEgbG9hZC1sb2FkIGZlbmNlIHByaW9yIHRvIHF1ZXJ5aW5nIHRoZSBzdGF0ZS4KICAg
ICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0CiAgICAgewotICAgICAgICBXVEY6OmxvYWRMb2Fk
RmVuY2UoKTsKICAgICAgICAgcmV0dXJuIHN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZDsKICAgICB9
CiAgICAgLy8gTGlrZSBpc1N0aWxsVmFsaWQoKSwgbWF5IGJlIGNhbGxlZCBmcm9tIGFub3RoZXIg
dGhyZWFkLgpAQCAtOTcsOCArMTA3LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgZmlyZUFsbFNsb3coKTsKICAgICB9Ci0KKyAgICAKKyAgICB2b2lkIG5vdGlmeVdy
aXRlKCkKKyAgICB7CisgICAgICAgIGlmIChzdGF0ZSgpID09IENsZWFyV2F0Y2hwb2ludCkKKyAg
ICAgICAgICAgIHN0YXJ0V2F0Y2hpbmcoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmly
ZUFsbCgpOworICAgIH0KKyAgICAKICAgICBpbnQ4X3QqIGFkZHJlc3NPZlN0YXRlKCkgeyByZXR1
cm4gJm1fc3RhdGU7IH0KKyAgICBpbnQ4X3QqIGFkZHJlc3NPZlNldElzTm90RW1wdHkoKSB7IHJl
dHVybiAmbV9zZXRJc05vdEVtcHR5OyB9CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaXJlQWxsU2xvdygpOyAvLyBDYWxsIG9ubHkgaWYgeW91J3ZlIGNoZWNrZWQgaXNXYXRjaGVk
LgogICAgIApAQCAtMTA5LDYgKzEyOCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgU2VudGluZWxM
aW5rZWRMaXN0PFdhdGNocG9pbnQsIEJhc2ljUmF3U2VudGluZWxOb2RlPFdhdGNocG9pbnQ+PiBt
X3NldDsKICAgICBpbnQ4X3QgbV9zdGF0ZTsKKyAgICBpbnQ4X3QgbV9zZXRJc05vdEVtcHR5Owog
fTsKIAogLy8gSW5saW5lV2F0Y2hwb2ludFNldCBpcyBhIGxvdy1vdmVyaGVhZCwgbm9uLWNvcHlh
YmxlIHdhdGNocG9pbnQgc2V0IGluIHdoaWNoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZp
c2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MTEsNiArMTUxMSw3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKKyAgICBjYXNlIE5vdGlmeVB1dEds
b2JhbFZhcjoKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrSGFz
SW5zdGFuY2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTU5NTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNiw3ICs1MTYs
NyBAQCBwcml2YXRlOgogICAgIC8vIGNvbnN0YW50IGZvbGRpbmcuIEkuZS4gY3JlYXRpbmcgY29u
c3RhbnRzIHVzaW5nIHRoaXMgaWYgd2UgaGFkIGNvbnN0YW50CiAgICAgLy8gZmllbGQgaW5mZXJl
bmNlIHdvdWxkIGJlIGEgYmFkIGlkZWEsIHNpbmNlIHRoZSBieXRlY29kZSBwYXJzZXIncyBmb2xk
aW5nCiAgICAgLy8gZG9lc24ndCBoYW5kbGUgbGl2ZW5lc3MgcHJlc2VydmF0aW9uLgotICAgIE5v
ZGUqIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVlIGNvbnN0YW50VmFsdWUpCisgICAgTm9k
ZSogZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUgY29uc3RhbnRWYWx1ZSwgTm9kZUZsYWdz
IGZsYWdzID0gTm9kZUlzU3RhdGljQ29uc3RhbnQpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBj
b25zdGFudEluZGV4OwogICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5maW5kQ29uc3RhbnQoY29u
c3RhbnRWYWx1ZSwgY29uc3RhbnRJbmRleCkpIHsKQEAgLTUyNiwxNiArNTI2LDE3IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobV9jb25zdGFudHMuc2l6ZSgpID09IG1fY29k
ZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwogICAgICAgICAKLSAgICAgICAg
cmV0dXJuIGdldEpTQ29uc3RhbnQoY29uc3RhbnRJbmRleCk7CisgICAgICAgIHJldHVybiBnZXRK
U0NvbnN0YW50KGNvbnN0YW50SW5kZXgsIGZsYWdzKTsKICAgICB9CiAKLSAgICBOb2RlKiBnZXRK
U0NvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50KQorICAgIE5vZGUqIGdldEpTQ29uc3RhbnQodW5z
aWduZWQgY29uc3RhbnQsIE5vZGVGbGFncyBmbGFncyA9IE5vZGVJc1N0YXRpY0NvbnN0YW50KQog
ICAgIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fY29uc3RhbnRzW2NvbnN0YW50XS5hc0pTVmFs
dWU7CiAgICAgICAgIGlmIChub2RlKQogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAKICAgICAg
ICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8oY29uc3RhbnQp
KTsKKyAgICAgICAgcmVzdWx0LT5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgbV9jb25zdGFu
dHNbY29uc3RhbnRdLmFzSlNWYWx1ZSA9IHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CkBAIC0zMTAwLDcgKzMxMDEsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHbG9iYWxWYXJXYXRj
aHBvaW50LCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gZ2xvYmFsT2JqZWN0LT5yZWdpc3Rl
ckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpOwotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoZHN0KSwgY2VsbENvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoc3BlY2lmaWNWYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQoc3BlY2lmaWNWYWx1
ZS5hc0NlbGwoKSkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoc3BlY2lmaWNW
YWx1ZSwgMCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMzEyMywxMiArMzEyNywxMyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kKS50eXBlKCk7CiAgICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSAwOworICAgICAg
ICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludHMgPSAwOwogICAgICAgICAgICAgdWludHB0
cl90IG9wZXJhbmQ7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2sp
OwogICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2ludHMgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0OwogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzVd
LnUuc3RydWN0dXJlLmdldCgpOwogICAgICAgICAgICAgICAgIG9wZXJhbmQgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oY3VycmVudEluc3RydWN0aW9uWzZdLnUucG9pbnRlcik7CkBAIC0z
MTUzLDEwICszMTU4LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICAg
ICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAg
ICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJv
bFRhYmxlKCktPmdldCh1aWQpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghZW50cnkuY291bGRC
ZVdhdGNoZWQoKSB8fCAhbV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChlbnRyeS53
YXRjaHBvaW50U2V0KCkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQod2F0Y2hwb2ludHMgPT0g
ZW50cnkud2F0Y2hwb2ludFNldCgpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEds
b2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOwor
ICAgICAgICAgICAgICAgIGlmICh3YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVk
KQorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVB1dEdsb2JhbFZhciwgT3BJ
bmZvKG9wZXJhbmQpLCBPcEluZm8oaWRlbnRpZmllck51bWJlcikpOwogICAgICAgICAgICAgICAg
IC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50aWwgYWZ0ZXIgcHV0LgogICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCShyZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0MiwxMCBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBJbnZhbGlkYXRpb25Q
b2ludDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIE5vdGlmeVB1dEdsb2JhbFZhcjoKKyAgICAgICAgd3JpdGUoV2F0Y2hwb2lu
dF9maXJlKTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgog
ICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDMsNiAr
OTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICBj
YXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgIGNh
c2UgTm90aWZ5UHV0R2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6
CiAgICAgICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBBbGxv
Y2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gMTU5NTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1OSw3ICszNTksOCBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgCiAgICAgYm9vbCBpc1N0cm9uZ2x5UHJvdmVkQ29uc3RhbnRJbihJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYg
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gaW5saW5lQ2FsbEZyYW1lOworICAgICAgICBy
ZXR1cm4gISEoZmxhZ3MoKSAmIE5vZGVJc1N0YXRpY0NvbnN0YW50KQorICAgICAgICAgICAgJiYg
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gaW5saW5lQ2FsbEZyYW1lOwogICAgIH0KICAg
ICAKICAgICBib29sIGlzU3Ryb25nbHlQcm92ZWRDb25zdGFudEluKGNvbnN0IENvZGVPcmlnaW4m
IGNvZGVPcmlnaW4pCkBAIC03NDksNyArNzUwLDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAg
IGJvb2wgaGFzSWRlbnRpZmllck51bWJlckZvckNoZWNrKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBvcCgpID09IEdsb2JhbFZhcldhdGNocG9pbnQ7CisgICAgICAgIHJldHVybiBvcCgpID09IEds
b2JhbFZhcldhdGNocG9pbnQgfHwgb3AoKSA9PSBOb3RpZnlQdXRHbG9iYWxWYXI7CiAgICAgfQog
ICAgIAogICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXJGb3JDaGVjaygpCkBAIC03NjAsNyAr
NzYxLDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIGJvb2wgaGFzUmVnaXN0ZXJQb2ludGVy
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IEdldEdsb2JhbFZhciB8fCBvcCgpID09
IFB1dEdsb2JhbFZhciB8fCBvcCgpID09IEdsb2JhbFZhcldhdGNocG9pbnQ7CisgICAgICAgIHJl
dHVybiBvcCgpID09IEdldEdsb2JhbFZhciB8fCBvcCgpID09IFB1dEdsb2JhbFZhciB8fCBvcCgp
ID09IEdsb2JhbFZhcldhdGNocG9pbnQgfHwgb3AoKSA9PSBOb3RpZnlQdXRHbG9iYWxWYXI7CiAg
ICAgfQogICAgIAogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24g
MTU5NTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKICNkZWZpbmUgTm9kZUV4aXRzRm9yd2FyZCAgICAgICAgICAgICAgICAgMHg4MDAwCiAK
KyNkZWZpbmUgTm9kZUlzU3RhdGljQ29uc3RhbnQgICAgICAgICAgICAweDEwMDAwIC8vIFVzZWQg
b25seSBieSB0aGUgcGFyc2VyLCB0byBkZXRlcm1pbmUgaWYgYSBjb25zdGFudCBhcm9zZSBzdGF0
aWNhbGx5IGFuZCBoZW5jZSBjb3VsZCBiZSBmb2xkZWQgYXQgcGFyc2UtdGltZS4KKwogdHlwZWRl
ZiB1aW50MzJfdCBOb2RlRmxhZ3M7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBieXRlY29kZVVzZXNB
c051bWJlcihOb2RlRmxhZ3MgZmxhZ3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUHV0Q2xvc3VyZVZhciwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldEdsb2JhbFZhciwgTm9kZVJlc3VsdEpTKSBc
CiAgICAgbWFjcm8oUHV0R2xvYmFsVmFyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8o
Tm90aWZ5UHV0R2xvYmFsVmFyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2xvYmFs
VmFyV2F0Y2hwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFZhckluamVjdGlv
bldhdGNocG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDaGVja0Z1bmN0aW9u
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1OTUyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5OCw2ICs5OTgs
MTQgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbgogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjaGFyKj4oZXhlYy0+Y29kZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KS5jdGlGb3JWYWx1ZShzdHJpbmctPnZhbHVlKGV4ZWMpLmltcGwoKSku
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25O
b3RpZnlXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIFdhdGNocG9pbnRTZXQqIHNldCkKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKworICAgIHNldC0+bm90aWZ5V3JpdGUoKTsKK30KKwogZG91YmxlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKIHsKICAgICBy
ZXR1cm4gZm1vZChhLCBiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSw3IEBAIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIKIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyosIEpT
U3RyaW5nKik7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJn
ZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4
KTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSos
IHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSosIFdhdGNocG9pbnRTZXQqKTsKIAogI2lmIEVOQUJM
RShGVExfSklUKQogLy8gRklYTUU6IE1ha2UgY2FsbHMgd29yayB3ZWxsLiBDdXJyZW50bHkgdGhl
eSdyZSBhIHB1cmUgcmVncmVzc2lvbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE1LDcgKzUxNSw5IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CiAgICAgICAgIGNhc2UgQ2hl
Y2tUaWVyVXBBdFJldHVybjoKICAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgot
ICAgICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OiB7CisgICAgICAgIGNhc2UgSW52YWxpZGF0
aW9uUG9pbnQ6CisgICAgICAgIGNhc2UgSW50NTJUb1ZhbHVlOgorICAgICAgICBjYXNlIEludDUy
VG9Eb3VibGU6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlz
aWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8g
aW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTU4MCw4ICs1ODIsNyBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoKICAgICAgICAgY2FzZSBVbnJl
YWNoYWJsZToKICAgICAgICAgY2FzZSBMb29wSGludDoKLSAgICAgICAgY2FzZSBJbnQ1MlRvVmFs
dWU6Ci0gICAgICAgIGNhc2UgSW50NTJUb0RvdWJsZToKKyAgICAgICAgY2FzZSBOb3RpZnlQdXRH
bG9iYWxWYXI6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAvLyBU
aGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IGFscmVhZHkgaGFzIGEgcHJlZGljdGlvbi4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZp
c2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDYgKzI0Miw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0
ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEludDUyVG9Eb3VibGU6CiAgICAgY2Fz
ZSBJbnQ1MlRvVmFsdWU6CiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKKyAgICBjYXNlIE5v
dGlmeVB1dEdsb2JhbFZhcjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNh
c2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1OTUyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwOTIsNiArNDA5MiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgTm90aWZ5UHV0R2xv
YmFsVmFyOiB7CisgICAgICAgIGNvbXBpbGVOb3RpZnlQdXRHbG9iYWxWYXIobm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDogewog
ICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9u
IDE1OTUyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNjgsNiArNDM2OCwxMSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgTm90aWZ5UHV0R2xvYmFsVmFy
OiB7CisgICAgICAgIGNvbXBpbGVOb3RpZnlQdXRHbG9iYWxWYXIobm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KIAogICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDogewogICAgICAg
ICBub1Jlc3VsdChub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYw
MSw2ICs1NjAxLDQ0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2goTm9kZSogbm8K
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTm90aWZ5UHV0R2xvYmFsVmFyKE5vZGUqIG5vZGUpCit7CisgICAgV2F0Y2hw
b2ludFNldCogc2V0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5z
eW1ib2xUYWJsZSgpLT5nZXQoCisgICAgICAgIG1faml0LmdyYXBoKCkuaWRlbnRpZmllcnMoKVtu
b2RlLT5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKV0pLndhdGNocG9pbnRTZXQoKTsKKyAgICAK
KyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAu
Z3ByKCk7CisgICAgCisgICAgbV9qaXQubG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCB0ZW1w
R1BSKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgcmVhZHk7CisgICAgCisgICAg
cmVhZHkuYXBwZW5kKG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGVtcEdQUiwg
VHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgCisgICAgbV9qaXQubWVtb3J5RmVu
Y2UoKTsKKworICAgIGlmIChzZXQtPnN0YXRlKCkgPT0gQ2xlYXJXYXRjaHBvaW50KSB7CisgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzV2F0Y2hlZCA9CisgICAgICAgICAgICBtX2ppdC5icmFu
Y2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihDbGVhcldh
dGNocG9pbnQpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlOChUcnVzdGVkSW1tMzIo
SXNXYXRjaGVkKSwgc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKTsKKyAgICAgICAgcmVhZHkuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgIAorICAgICAgICBpc1dhdGNoZWQubGluaygmbV9qaXQp
OworICAgIH0KKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJy
YW5jaFRlc3Q4KAorICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywgSklUQ29tcGlsZXI6OkFi
c29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlNldElzTm90RW1wdHkoKSkpOworICAgIG1faml0
LnN0b3JlOChUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCksIHNldC0+YWRkcmVzc09mU3RhdGUo
KSk7CisKKyAgICByZWFkeS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uTm90
aWZ5V3JpdGUsIE5vUmVzdWx0LCBzZXQpKTsKKyAgICAKKyAgICBub1Jlc3VsdChub2RlKTsKK30K
Kwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYganVtcCwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0ganVtcC5qdW1wcygpLnNpemUoKTsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1OTUyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA4NCw5ICsxMDg0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fVyBvcGVyYXRpb24sIFdhdGNo
cG9pbnRTZXQqIHdhdGNocG9pbnRTZXQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0pJVE9wZXJhdGlvbl9FVyBvcGVyYXRpb24sIFdhdGNocG9pbnRTZXQqIHdhdGNocG9p
bnRTZXQpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhUcnVzdGVkSW1tUHRy
KHdhdGNocG9pbnRTZXQpKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW1QdHIod2F0Y2hwb2ludFNldCkpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbChvcGVyYXRpb24pOwogICAgIH0KIApAQCAtMjA0NSw2ICsyMDQ1LDggQEAgcHVibGljOgog
ICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihOb2RlKik7CiAgICAgYm9vbCBj
b21waWxlUmVnRXhwRXhlYyhOb2RlKik7CiAgICAgCisgICAgdm9pZCBjb21waWxlTm90aWZ5UHV0
R2xvYmFsVmFyKE5vZGUqKTsKKyAgICAKICAgICAvLyBzaXplIGNhbiBiZSBhbiBpbW1lZGlhdGUg
b3IgYSByZWdpc3RlciwgYW5kIG11c3QgYmUgaW4gYnl0ZXMuIElmIHNpemUgaXMgYSByZWdpc3Rl
ciwKICAgICAvLyBpdCBtdXN0IGJlIGEgZGlmZmVyZW50IHJlZ2lzdGVyIHRoYW4gcmVzdWx0R1BS
LiBFbWl0cyBjb2RlIHRoYXQgcGxhY2UgYSBwb2ludGVyIHRvCiAgICAgLy8gdGhlIGVuZCBvZiB0
aGUgYWxsb2NhdGlvbi4gVGhlIHJldHVybmVkIGp1bXAgaXMgdGhlIGp1bXAgdG8gdGhlIHNsb3cg
cGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0ZWRUeXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0
ZWRUeXBlcy5oCShyZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFiYnJldmlhdGVkVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK3R5cGVkZWYgTExWTUF0b21pY09y
ZGVyaW5nIExBdG9taWNPcmRlcmluZzsKIHR5cGVkZWYgTExWTUJhc2ljQmxvY2tSZWYgTEJhc2lj
QmxvY2s7CiB0eXBlZGVmIExMVk1CdWlsZGVyUmVmIExCdWlsZGVyOwogdHlwZWRlZiBMTFZNQ2Fs
bENvbnYgTENhbGxDb252OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJy
ZXZpYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YmJyZXZpYXRpb25zLmgJKHJldmlzaW9uIDE1OTUyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNiArMjE3LDEz
IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkUHRyVG9JbnQoTEJ1aWwKIHN0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkQml0Q2FzdChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExU
eXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkQml0Q2FzdChidWlsZGVyLCB2YWx1ZSwgdHlw
ZSwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZElDbXAoTEJ1aWxkZXIgYnVpbGRl
ciwgTEludFByZWRpY2F0ZSBjb25kLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVy
biBsbHZtLT5CdWlsZElDbXAoYnVpbGRlciwgY29uZCwgbGVmdCwgcmlnaHQsICIiKTsgfQogc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRGQ21wKExCdWlsZGVyIGJ1aWxkZXIsIExSZWFsUHJlZGlj
YXRlIGNvbmQsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxsdm0tPkJ1aWxk
RkNtcChidWlsZGVyLCBjb25kLCBsZWZ0LCByaWdodCwgIiIpOyB9CisKK2VudW0gU3luY2hyb25p
emF0aW9uU2NvcGUgeyBTaW5nbGVUaHJlYWQsIENyb3NzVGhyZWFkIH07CitzdGF0aWMgaW5saW5l
IExWYWx1ZSBidWlsZEZlbmNlKExCdWlsZGVyIGJ1aWxkZXIsIExBdG9taWNPcmRlcmluZyBvcmRl
cmluZywgU3luY2hyb25pemF0aW9uU2NvcGUgc2NvcGUgPSBDcm9zc1RocmVhZCkKK3sKKyAgICBy
ZXR1cm4gbGx2bS0+QnVpbGRGZW5jZShidWlsZGVyLCBvcmRlcmluZywgc2NvcGUgPT0gU2luZ2xl
VGhyZWFkLCAiIik7Cit9CisKIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRl
ciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IExWYWx1ZSogYXJncywgdW5zaWduZWQg
bnVtQXJncykKIHsKICAgICByZXR1cm4gbGx2bS0+QnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9u
LCBjb25zdF9jYXN0PExWYWx1ZSo+KGFyZ3MpLCBudW1BcmdzLCAiIik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTk1
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIAogICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgY2FzZSBHZXRHbG9iYWxW
YXI6CiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgY2FzZSBOb3RpZnlQdXRHbG9iYWxWYXI6
CiAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICBjYXNlIEFyaXRoQWRkOgogICAgIGNhc2UgQXJpdGhT
dWI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNp
Y1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTU5NTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFBfSklUT3Bl
cmF0aW9uX0VTdFosIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnQzMikp
IFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pELCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50UHRyLCBpbnQzMiwgZG91YmxlVHlwZSkpIFwKICAgICBtYWNybyhWX0pJVE9w
ZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQz
MiwgaW50NjQpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRVcsIGZ1bmN0aW9uVHlwZSh2
b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRCwg
ZnVuY3Rpb25UeXBlKGludDMyLCBkb3VibGVUeXBlKSkKIAogY2xhc3MgSW50cmluc2ljUmVwb3Np
dG9yeSA6IHB1YmxpYyBDb21tb25WYWx1ZXMgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1OTUyOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTQsNiArMzk0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRHbG9iYWxW
YXI6CiAgICAgICAgICAgICBjb21waWxlUHV0R2xvYmFsVmFyKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBOb3RpZnlQdXRHbG9iYWxWYXI6CisgICAgICAgICAgICBjb21waWxl
Tm90aWZ5UHV0R2xvYmFsVmFyKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBH
bG9iYWxWYXJXYXRjaHBvaW50OgogICAgICAgICAgICAgY29tcGlsZUdsb2JhbFZhcldhdGNocG9p
bnQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjExNCw2ICsyMTE3LDU5IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5hYnNvbHV0
ZShtX25vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29t
cGlsZU5vdGlmeVB1dEdsb2JhbFZhcigpCisgICAgeworICAgICAgICBXYXRjaHBvaW50U2V0KiBz
ZXQgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPmNvZGVPcmlnaW4pLT5zeW1ib2xU
YWJsZSgpLT5nZXQoCisgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5p
ZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKV0pLndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgCisg
ICAgICAgIExCYXNpY0Jsb2NrIGlzTm90SW52YWxpZGF0ZWQgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIk5vdGlmeVB1dEdsb2JhbFZhciBub3QgaW52YWxpZGF0ZWQgY2FzZSIpKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgaXNDbGVhciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTm90aWZ5UHV0R2xv
YmFsVmFyIGNsZWFyIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzV2F0Y2hlZCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiTm90aWZ5UHV0R2xvYmFsVmFyIHdhdGNoZWQgY2FzZSIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgaXNXYXRjaGVkRmFzdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiTm90aWZ5UHV0R2xvYmFsVmFyIHdhdGNoZWQgZmFzdCBjYXNlIikpOworICAgICAgICBMQmFz
aWNCbG9jayBpc1dhdGNoZWRTbG93ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlQdXRH
bG9iYWxWYXIgd2F0Y2hlZCBzbG93IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTm90aWZ5UHV0R2xvYmFsVmFyIGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdGF0ZSA9IG1fb3V0LmxvYWQ4
KG1fb3V0LmFic29sdXRlKHNldC0+YWRkcmVzc09mU3RhdGUoKSkpOworICAgICAgICAKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RhdGUsIG1fb3V0LmNv
bnN0SW50OChJc0ludmFsaWRhdGVkKSksCisgICAgICAgICAgICBjb250aW51YXRpb24sIGlzTm90
SW52YWxpZGF0ZWQpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhpc05vdEludmFsaWRhdGVkLCBpc0NsZWFyKTsKKworICAgICAgICBtX291
dC5mZW5jZUFjcVJlbCgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGlzQ2xlYXJWYWx1ZTsK
KyAgICAgICAgaWYgKHNldC0+c3RhdGUoKSA9PSBDbGVhcldhdGNocG9pbnQpCisgICAgICAgICAg
ICBpc0NsZWFyVmFsdWUgPSBtX291dC5lcXVhbChzdGF0ZSwgbV9vdXQuY29uc3RJbnQ4KENsZWFy
V2F0Y2hwb2ludCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpc0NsZWFyVmFsdWUgPSBt
X291dC5ib29sZWFuRmFsc2U7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NsZWFyVmFsdWUsIGlz
Q2xlYXIsIGlzV2F0Y2hlZCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhpc0Ns
ZWFyLCBpc1dhdGNoZWQpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmU4KG1fb3V0LmNv
bnN0SW50OChJc1dhdGNoZWQpLCBtX291dC5hYnNvbHV0ZShzZXQtPmFkZHJlc3NPZlN0YXRlKCkp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oaXNXYXRjaGVkLCBpc1dhdGNoZWRGYXN0KTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0Lm5vdFplcm84KG1fb3V0LmxvYWQ4
KG1fb3V0LmFic29sdXRlKHNldC0+YWRkcmVzc09mU2V0SXNOb3RFbXB0eSgpKSkpLAorICAgICAg
ICAgICAgaXNXYXRjaGVkU2xvdywgaXNXYXRjaGVkRmFzdCk7CisgICAgICAgIAorICAgICAgICBt
X291dC5hcHBlbmRUbyhpc1dhdGNoZWRGYXN0LCBpc1dhdGNoZWRTbG93KTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LnN0b3JlOChtX291dC5jb25zdEludDgoSXNJbnZhbGlkYXRlZCksIG1fb3V0
LmFic29sdXRlKHNldC0+YWRkcmVzc09mU3RhdGUoKSkpOworICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhpc1dhdGNoZWRT
bG93LCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25Ob3RpZnlXcml0ZSksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0
cihzZXQpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAg
IAogICAgIHZvaWQgY29tcGlsZUdsb2JhbFZhcldhdGNocG9pbnQoKQogICAgIHsKICAgICAgICAg
Ly8gRklYTUU6IEluIGRlYnVnIG1vZGUgd2UgY291bGQgZW1pdCBzb21lIGFzc2VydGlvbiBjb2Rl
IGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9u
IDE1OTUyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0NCw2ICszNDQsOSBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIHNlbGVjdChM
VmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVybiBidWls
ZFNlbGVjdChtX2J1aWxkZXIsIHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOyB9CiAgICAgTFZhbHVl
IGV4dHJhY3RWYWx1ZShMVmFsdWUgYWdnVmFsLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gYnVp
bGRFeHRyYWN0VmFsdWUobV9idWlsZGVyLCBhZ2dWYWwsIGluZGV4KTsgfQogICAgIAorICAgIExW
YWx1ZSBmZW5jZShMQXRvbWljT3JkZXJpbmcgb3JkZXJpbmcgPSBMTFZNQXRvbWljT3JkZXJpbmdT
ZXF1ZW50aWFsbHlDb25zaXN0ZW50LCBTeW5jaHJvbml6YXRpb25TY29wZSBzY29wZSA9IENyb3Nz
VGhyZWFkKSB7IHJldHVybiBidWlsZEZlbmNlKG1fYnVpbGRlciwgb3JkZXJpbmcsIHNjb3BlKTsg
fQorICAgIExWYWx1ZSBmZW5jZUFjcVJlbCgpIHsgcmV0dXJuIGZlbmNlKExMVk1BdG9taWNPcmRl
cmluZ0FjcXVpcmVSZWxlYXNlKTsgfQorICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3Rv
clR5cGU+CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBl
JiB2ZWN0b3IpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCB2ZWN0b3Ip
OyB9CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uKSB7IHJldHVybiBidWlsZENhbGwo
bV9idWlsZGVyLCBmdW5jdGlvbik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2
aXNpb24gMTU5NTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEzLDcgKzYxMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRHZXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXRH
ZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lk
IGVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyX3QqIG9wZXJhbmRTbG90LCBpbnQgdmFsdWUp
OwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2
YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwg
aW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVW
YXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlKTsKIAogICAgICAgICB2
b2lkIGVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU5NTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsx
NTQsNyBAQCB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VQYykoRXhlY1N0YXRlKiwgSW5z
dHJ1Y3Rpb24qKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
RVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVNzaUpKSSkoRXhlY1N0YXRl
KiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0
cmluZ0ltcGwqKTsKLXR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
VykoV2F0Y2hwb2ludFNldCopOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9w
ZXJhdGlvbl9FVykoRXhlY1N0YXRlKiwgV2F0Y2hwb2ludFNldCopOwogdHlwZWRlZiB2b2lkIEpJ
VF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0
eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWbSkoRXhlY1N0YXRl
KiwgVk0qKTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0Up
KEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MDcsMTEgKzgwNywzNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5
KHVpbnRwdHJfCiAgICAgc3RvcmUzMihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGlt
ZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFu
ZCwgaW50IHZhbHVlKQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJh
bmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogeworICAgIGlmIChzZXQgJiYgc2V0
LT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpIHsKKyAgICAgICAgbG9hZDgoc2V0LT5hZGRyZXNz
T2ZTdGF0ZSgpLCByZWdUMik7CisgICAgICAgIAorICAgICAgICBKdW1wTGlzdCByZWFkeTsKKyAg
ICAgICAgCisgICAgICAgIHJlYWR5LmFwcGVuZChicmFuY2gzMihFcXVhbCwgcmVnVDIsIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKHNldC0+c3Rh
dGUoKSA9PSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAgICAgICAgIEp1bXAgaXNXYXRjaGVkID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ2xlYXJXYXRjaHBvaW50KSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKElzV2F0Y2hlZCks
IHJlZ1QyKTsKKyAgICAgICAgICAgIHJlYWR5LmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpc1dhdGNoZWQubGluayh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNz
KHNldC0+YWRkcmVzc09mU2V0SXNOb3RFbXB0eSgpKSkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSwgcmVnVDIpOworICAgICAgICByZWFkeS5saW5rKHRoaXMpOwor
ICAgIH0KKyAgICAKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBzdG9y
ZTMyKHJlZ1QxLCByZWludGVycHJldF9jYXN0PGNoYXIqPihvcGVyYW5kKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CiAgICAgc3RvcmUzMihy
ZWdUMCwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob3BlcmFuZCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAKKyAgICBpZiAo
c2V0ICYmIHNldC0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKSB7CisgICAgICAgIG1lbW9yeUZl
bmNlKCk7CisgICAgICAgIHN0b3JlOChyZWdUMSwgc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKTsKKyAg
ICB9CiB9CiAKIHZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kLCBpbnQgdmFsdWUpCkBAIC04NDAsNyArODY2LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgIGNhc2UgR2xvYmFsVmFyOgogICAgIGNhc2Ug
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVt
aXRQdXRHbG9iYWxWYXIoKm9wZXJhbmRTbG90LCB2YWx1ZSk7CisgICAgICAgIGVtaXRQdXRHbG9i
YWxWYXIoKm9wZXJhbmRTbG90LCB2YWx1ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hw
b2ludFNldCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgpAQCAtODU2LDExICs4ODIsMTYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9w
ZXJhbmQpLnR5cGUoKTsKLQotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICB1bnNpZ25lZCBsaW5rQ291bnQgPSAwOworICAg
IGlmIChyZXNvbHZlVHlwZSAhPSBHbG9iYWxWYXIgJiYgcmVzb2x2ZVR5cGUgIT0gQ2xvc3VyZVZh
cikKKyAgICAgICAgbGlua0NvdW50Kys7CisgICAgaWYgKChyZXNvbHZlVHlwZSA9PSBHbG9iYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAg
ICAgICAgJiYgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldC0+c3RhdGUoKSAh
PSBJc0ludmFsaWRhdGVkKQorICAgICAgICBsaW5rQ291bnQrKzsKKyAgICBpZiAoIWxpbmtDb3Vu
dCkKICAgICAgICAgcmV0dXJuOwotCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIHdoaWxl
IChsaW5rQ291bnQtLSkKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHJldmlzaW9uIDE1OTUyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzEsMTAgKzc3MSwzNiBAQCB2b2lkIEpJ
VDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5KHVpbnRwdHJfCiAgICAgc3RvcmVQdHIocmVnVDIsIEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dEds
b2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlKQordm9pZCBKSVQ6OmVtaXRQdXRH
bG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0
KQogeworICAgIGlmIChzZXQgJiYgc2V0LT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpIHsKKyAg
ICAgICAgbG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCByZWdUMSk7CisgICAgICAgIAorICAg
ICAgICBKdW1wTGlzdCByZWFkeTsKKyAgICAgICAgCisgICAgICAgIHJlYWR5LmFwcGVuZChicmFu
Y2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKHNldC0+c3RhdGUoKSA9PSBDbGVhcldhdGNocG9pbnQpIHsKKyAgICAg
ICAgICAgIEp1bXAgaXNXYXRjaGVkID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoQ2xlYXJXYXRjaHBvaW50KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKElzV2F0Y2hlZCksIHJlZ1QxKTsKKyAgICAgICAgICAgIHJlYWR5LmFwcGVu
ZChqdW1wKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpc1dhdGNoZWQubGluayh0aGlz
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU2V0SXNOb3RFbXB0eSgpKSkp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSwgcmVnVDEpOworICAg
ICAgICByZWFkeS5saW5rKHRoaXMpOworICAgIH0KKyAgICAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KG9wZXJhbmQpKTsKKyAgICAKKyAgICBpZiAoc2V0ICYmIHNldC0+c3RhdGUoKSAh
PSBJc0ludmFsaWRhdGVkKSB7CisgICAgICAgIG1lbW9yeUZlbmNlKCk7CisgICAgICAgIHN0b3Jl
OChyZWdUMSwgc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKTsKKyAgICB9CiB9CiAKIHZvaWQgSklUOjpl
bWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUp
CkBAIC04MDIsNyArODI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3Ry
dWN0aQogICAgIGNhc2UgR2xvYmFsVmFyOgogICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRQdXRHbG9iYWxWYXIoKm9wZXJh
bmRTbG90LCB2YWx1ZSk7CisgICAgICAgIGVtaXRQdXRHbG9iYWxWYXIoKm9wZXJhbmRTbG90LCB2
YWx1ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgpAQCAtODE4LDEwICs4NDQsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gUmVzb2x2ZU1v
ZGVBbmRUeXBlKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpLnR5cGUoKTsKLSAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IENsb3N1cmVWYXIp
CisgICAgdW5zaWduZWQgbGlua0NvdW50ID0gMDsKKyAgICBpZiAocmVzb2x2ZVR5cGUgIT0gR2xv
YmFsVmFyICYmIHJlc29sdmVUeXBlICE9IENsb3N1cmVWYXIpCisgICAgICAgIGxpbmtDb3VudCsr
OworICAgIGlmICgocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICYmIGN1cnJlbnRJbnN0cnVj
dGlvbls1XS51LndhdGNocG9pbnRTZXQtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkKKyAgICAg
ICAgbGlua0NvdW50Kys7CisgICAgaWYgKCFsaW5rQ291bnQpCiAgICAgICAgIHJldHVybjsKLQot
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAgICB3aGlsZSAobGlua0NvdW50LS0pCisgICAgICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2Nv
cGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZp
c2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjEzMywxMSArMjEzMywyNCBAQCBt
YWNybyBwdXRQcm9wZXJ0eSgpCiBlbmQKIAogbWFjcm8gcHV0R2xvYmFsVmFyKCkKKyAgICBsb2Fk
cEZyb21JbnN0cnVjdGlvbig1LCB0MikKKyAgICBsb2FkYiBXYXRjaHBvaW50U2V0OjptX3N0YXRl
W3QyXSwgdDMKKyAgICBiaWVxIHQzLCBJc0ludmFsaWRhdGVkLCAucmVhZHkKKyAgICBiaW5lcSB0
MywgQ2xlYXJXYXRjaHBvaW50LCAubmVlZFRvSW52YWxpZGF0ZQorICAgIG1vdmUgSXNXYXRjaGVk
LCB0MworICAgIGptcCAucmVhZHkKKy5uZWVkVG9JbnZhbGlkYXRlOgorICAgIGJ0Ym56IFdhdGNo
cG9pbnRTZXQ6Om1fc2V0SXNOb3RFbXB0eVt0Ml0sIC5wRHluYW1pYworICAgIG1vdmUgSXNJbnZh
bGlkYXRlZCwgdDMKKy5yZWFkeToKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDEsIHQyKQogICAgIGxvYWRwRnJvbUluc3Ry
dWN0aW9uKDYsIHQwKQogICAgIHN0b3JlaSB0MSwgVGFnT2Zmc2V0W3QwXQogICAgIHN0b3JlaSB0
MiwgUGF5bG9hZE9mZnNldFt0MF0KKyAgICBtZW1mZW5jZQorICAgIGxvYWRwRnJvbUluc3RydWN0
aW9uKDUsIHQyKQorICAgIHN0b3JlYiB0MywgV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVt0Ml0KIGVu
ZAogCiBtYWNybyBwdXRDbG9zdXJlVmFyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxNTk1
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTk1NSwxMCArMTk1NSwyMiBAQCBtYWNybyBwdXRQcm9w
ZXJ0eSgpCiBlbmQKIAogbWFjcm8gcHV0R2xvYmFsVmFyKCkKKyAgICBsb2FkcEZyb21JbnN0cnVj
dGlvbig1LCB0MikKKyAgICBsb2FkYiBXYXRjaHBvaW50U2V0OjptX3N0YXRlW3QyXSwgdDMKKyAg
ICBiaWVxIHQzLCBJc0ludmFsaWRhdGVkLCAucmVhZHkKKyAgICBiaW5lcSB0MywgQ2xlYXJXYXRj
aHBvaW50LCAubmVlZFRvSW52YWxpZGF0ZQorICAgIG1vdmUgSXNXYXRjaGVkLCB0MworICAgIGpt
cCAucmVhZHkKKy5uZWVkVG9JbnZhbGlkYXRlOgorICAgIGJ0Ym56IFdhdGNocG9pbnRTZXQ6Om1f
c2V0SXNOb3RFbXB0eVt0Ml0sIC5wRHluYW1pYworICAgIG1vdmUgSXNJbnZhbGlkYXRlZCwgdDMK
Ky5yZWFkeToKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZSh0MCwgdDEpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwgdDApCiAg
ICAgc3RvcmVxIHQxLCBbdDBdCisgICAgbWVtZmVuY2UKKyAgICBzdG9yZWIgdDMsIFdhdGNocG9p
bnRTZXQ6Om1fc3RhdGVbdDJdCiBlbmQKIAogbWFjcm8gcHV0Q2xvc3VyZVZhcigpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNQVBJRnVuY3Rpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vTExWTUFQSUZ1bmN0aW9ucy5oCShyZXZpc2lv
biAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNQVBJRnVuY3Rpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSw2ICs0ODksNyBAQAogICAgIG1hY3JvKExMVk1WYWx1
ZVJlZiwgQnVpbGRJc051bGwsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIFZhbCwgY29u
c3QgY2hhciAqTmFtZSkpIFwKICAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkSXNOb3ROdWxs
LCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBWYWwsIGNvbnN0IGNoYXIgKk5hbWUpKSBc
CiAgICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFB0ckRpZmYsIChMTFZNQnVpbGRlclJlZiwg
TExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVlUmVmIFJIUywgY29uc3QgY2hhciAqTmFtZSkpIFwK
KyAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkRmVuY2UsIChMTFZNQnVpbGRlclJlZiBCLCBM
TFZNQXRvbWljT3JkZXJpbmcgT3JkZXJpbmcsIExMVk1Cb29sIGlzU2luZ2xlVGhyZWFkLCBjb25z
dCBjaGFyICpOYW1lKSkgXAogICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRBdG9taWNSTVcs
IChMTFZNQnVpbGRlclJlZiBCLCBMTFZNQXRvbWljUk1XQmluT3Agb3AsIExMVk1WYWx1ZVJlZiBQ
VFIsIExMVk1WYWx1ZVJlZiBWYWwsIExMVk1BdG9taWNPcmRlcmluZyBvcmRlcmluZywgTExWTUJv
b2wgc2luZ2xlVGhyZWFkKSkgXAogICAgIG1hY3JvKExMVk1Nb2R1bGVQcm92aWRlclJlZiwgQ3Jl
YXRlTW9kdWxlUHJvdmlkZXJGb3JFeGlzdGluZ01vZHVsZSwgKExMVk1Nb2R1bGVSZWYgTSkpIFwK
ICAgICBtYWNybyh2b2lkLCBEaXNwb3NlTW9kdWxlUHJvdmlkZXIsIChMTFZNTW9kdWxlUHJvdmlk
ZXJSZWYgTSkpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2FybTY0
LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2FybTY0
LnJiCShyZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS9hcm02NC5yYgkod29ya2luZyBjb3B5KQpAQCAtODA3LDYgKzgwNyw4IEBAIGNsYXNzIEluc3Ry
dWN0aW9uCiAgICAgICAgICAgICBvcGVyYW5kc1swXS5hcm02NEVtaXRMZWEob3BlcmFuZHNbMV0s
IDpwdHIpCiAgICAgICAgIHdoZW4gInNtdWxsaSIKICAgICAgICAgICAgICRhc20ucHV0cyAic21h
ZGRsICN7b3BlcmFuZHNbMl0uYXJtNjRPcGVyYW5kKDpwdHIpfSwgI3tvcGVyYW5kc1swXS5hcm02
NE9wZXJhbmQoOmludCl9LCAje29wZXJhbmRzWzFdLmFybTY0T3BlcmFuZCg6aW50KX0sIHh6ciIK
KyAgICAgICAgd2hlbiAibWVtZmVuY2UiCisgICAgICAgICAgICAkYXNtLnB1dHMgImRtYiBzeSIK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG93ZXJEZWZhdWx0CiAgICAgICAgIGVuZApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vYXJtLnJiCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2FybS5yYgkocmV2aXNpb24gMTU5NTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vYXJtLnJiCSh3b3JraW5nIGNv
cHkpCkBAIC01OTcsNiArNTk3LDggQEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAgICAgd2hlbiAi
c211bGxpIgogICAgICAgICAgICAgcmFpc2UgIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8g
c211bGwgaW4gI3tzZWxmLmluc3BlY3R9IGF0ICN7Y29kZU9yaWdpblN0cmluZ30iIHVubGVzcyBv
cGVyYW5kcy5sZW5ndGggPT0gNAogICAgICAgICAgICAgJGFzbS5wdXRzICJzbXVsbCAje29wZXJh
bmRzWzJdLmFybU9wZXJhbmR9LCAje29wZXJhbmRzWzNdLmFybU9wZXJhbmR9LCAje29wZXJhbmRz
WzBdLmFybU9wZXJhbmR9LCAje29wZXJhbmRzWzFdLmFybU9wZXJhbmR9IgorICAgICAgICB3aGVu
ICJtZW1mZW5jZSIKKyAgICAgICAgICAgICRhc20ucHV0cyAiZG1iIHN5IgogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBsb3dlckRlZmF1bHQKICAgICAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9jbG9vcC5yYgkocmV2aXNpb24gMTU5NTI4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vY2xvb3AucmIJKHdvcmtpbmcgY29weSkKQEAg
LTEwOTEsNyArMTA5MSw4IEBAIGNsYXNzIEluc3RydWN0aW9uCiAgICAgICAgICAgICBjbG9vcEVt
aXRPcEFuZEJyYW5jaChvcGVyYW5kcywgInwiLCA6aW50MzIsICI9PSAwIikKICAgICAgICAgd2hl
biAiYm9ycmlueiIKICAgICAgICAgICAgIGNsb29wRW1pdE9wQW5kQnJhbmNoKG9wZXJhbmRzLCAi
fCIsIDppbnQzMiwgIiE9IDAiKQotCisgICAgICAgICAgICAKKyAgICAgICAgd2hlbiAibWVtZmVu
Y2UiCiAgICAgICAgIHdoZW4gInB1c2hDYWxsZWVTYXZlcyIKICAgICAgICAgd2hlbiAicG9wQ2Fs
bGVlU2F2ZXMiCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3Ry
dWN0aW9ucy5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS9pbnN0cnVjdGlvbnMucmIJKHJldmlzaW9uIDE1OTUyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgkod29ya2luZyBjb3B5KQpAQCAtMjUwLDcg
KzI1MCw4IEBAIE1BQ1JPX0lOU1RSVUNUSU9OUyA9CiAgICAgICJsZWFpIiwKICAgICAgImxlYXAi
LAogICAgICAicHVzaENhbGxlZVNhdmVzIiwKLSAgICAgInBvcENhbGxlZVNhdmVzIgorICAgICAi
cG9wQ2FsbGVlU2F2ZXMiLAorICAgICAibWVtZmVuY2UiCiAgICAgXQogCiBYODZfSU5TVFJVQ1RJ
T05TID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHJldmlz
aW9uIDE1OTUyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgko
d29ya2luZyBjb3B5KQpAQCAtMTM2Myw2ICsxMzYzLDggQEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAg
ICAgICAgICAgICRhc20ucHV0cyAibGVhbCAje29wZXJhbmRzWzBdLng4NkFkZHJlc3NPcGVyYW5k
KDppbnQpfSwgI3tvcGVyYW5kc1sxXS54ODZPcGVyYW5kKDppbnQpfSIKICAgICAgICAgd2hlbiAi
bGVhcCIKICAgICAgICAgICAgICRhc20ucHV0cyAibGVhI3t4ODZTdWZmaXgoOnB0cil9ICN7b3Bl
cmFuZHNbMF0ueDg2QWRkcmVzc09wZXJhbmQoOnB0cil9LCAje29wZXJhbmRzWzFdLng4Nk9wZXJh
bmQoOnB0cil9IgorICAgICAgICB3aGVuICJtZW1mZW5jZSIKKyAgICAgICAgICAgICRhc20ucHV0
cyAibWZlbmNlIgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb3dlckRlZmF1bHQKICAgICAg
ICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCwyMSArMjEw
LDMzIEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEoKICAgICByZXR1
cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CiB9CiAKLWludCBKU0dsb2JhbE9iamVjdDo6YWRk
R2xvYmFsVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRN
b2RlLCBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKQorSlNHbG9iYWxPYmplY3Q6Ok5ld0dsb2Jh
bFZhciBKU0dsb2JhbE9iamVjdDo6YWRkR2xvYmFsVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlKQogewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKHN5bWJvbFRhYmxlKCktPm1fbG9jayk7CiAgICAgaW50IGluZGV4ID0gc3ltYm9sVGFi
bGUoKS0+c2l6ZShsb2NrZXIpOwogICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkoaW5kZXgs
IChjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCkgPyBSZWFkT25seSA6IDApOwotICAgIGlmIChm
dW5jdGlvbk1vZGUgPT0gSXNGdW5jdGlvblRvU3BlY2lhbGl6ZSkKLSAgICAgICAgbmV3RW50cnku
YXR0ZW1wdFRvV2F0Y2goKTsKKyAgICBpZiAoY29uc3RhbnRNb2RlID09IElzVmFyaWFibGUpCisg
ICAgICAgIG5ld0VudHJ5LnByZXBhcmVUb1dhdGNoKFN5bWJvbFRhYmxlRW50cnk6Ok5vdEluaXRp
YWxpemVkKTsKICAgICBTeW1ib2xUYWJsZTo6TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9s
VGFibGUoKS0+YWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KQogICAgICAgICBhZGRSZWdpc3RlcnMoMSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKKyAgICBlbHNlCiAg
ICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXRJbmRleCgpOworICAgIE5l
d0dsb2JhbFZhciB2YXI7CisgICAgdmFyLnJlZ2lzdGVyTnVtYmVyID0gaW5kZXg7CisgICAgdmFy
LnNldCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOworICAgIHJldHVy
biB2YXI7Cit9CisKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OmFkZEZ1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIHJlbW92ZURpcmVjdChleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpOyAvLyBOZXdseSBkZWNs
YXJlZCBmdW5jdGlvbnMgb3ZlcndyaXRlIGV4aXN0aW5nIHByb3BlcnRpZXMuCisgICAgTmV3R2xv
YmFsVmFyIHZhciA9IGFkZEdsb2JhbFZhcihwcm9wZXJ0eU5hbWUsIElzVmFyaWFibGUpOworICAg
IHJlZ2lzdGVyQXQodmFyLnJlZ2lzdGVyTnVtYmVyKS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgdmFs
dWUpOworICAgIGlmICh2YXIuc2V0KSB7CisgICAgICAgIEFTU0VSVCh2YXIuc2V0LT5zdGF0ZSgp
ID09IENsZWFyV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgdmFyLnNldC0+bm90aWZ5V3JpdGUoKTsK
ICAgICB9Ci0gICAgcmV0dXJuIGluZGV4OwogfQogCiBzdGF0aWMgaW5saW5lIEpTT2JqZWN0KiBs
YXN0SW5Qcm90b3R5cGVDaGFpbihKU09iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNTk1Mjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODksOCArMjg5LDExIEBAIHByb3RlY3RlZDoKICAgICB9CiAKICAgICBl
bnVtIENvbnN0YW50TW9kZSB7IElzQ29uc3RhbnQsIElzVmFyaWFibGUgfTsKLSAgICBlbnVtIEZ1
bmN0aW9uTW9kZSB7IElzRnVuY3Rpb25Ub1NwZWNpYWxpemUsIE5vdEZ1bmN0aW9uT3JOb3RTcGVj
aWFsaXphYmxlIH07Ci0gICAgaW50IGFkZEdsb2JhbFZhcihjb25zdCBJZGVudGlmaWVyJiwgQ29u
c3RhbnRNb2RlLCBGdW5jdGlvbk1vZGUpOworICAgIHN0cnVjdCBOZXdHbG9iYWxWYXIgeworICAg
ICAgICBpbnQgcmVnaXN0ZXJOdW1iZXI7CisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldDsKKyAg
ICB9OworICAgIE5ld0dsb2JhbFZhciBhZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYsIENv
bnN0YW50TW9kZSk7CiAKIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+SlNHbG9iYWxP
YmplY3QoKTsKQEAgLTMxNSwxOSArMzE4LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFZhcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKICAgICB7CiAg
ICAgICAgIGlmICghaGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAg
IGFkZEdsb2JhbFZhcihwcm9wZXJ0eU5hbWUsIElzVmFyaWFibGUsIE5vdEZ1bmN0aW9uT3JOb3RT
cGVjaWFsaXphYmxlKTsKKyAgICAgICAgICAgIGFkZEdsb2JhbFZhcihwcm9wZXJ0eU5hbWUsIElz
VmFyaWFibGUpOwogICAgIH0KICAgICB2b2lkIGFkZENvbnN0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogICAgIHsKICAgICAgICAgaWYgKCFoYXNQcm9w
ZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAgYWRkR2xvYmFsVmFyKHByb3Bl
cnR5TmFtZSwgSXNDb25zdGFudCwgTm90RnVuY3Rpb25Pck5vdFNwZWNpYWxpemFibGUpOwotICAg
IH0KLSAgICB2b2lkIGFkZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgYm9vbCBwcm9w
ZXJ0eURpZEV4aXN0ID0gcmVtb3ZlRGlyZWN0KGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSk7IC8v
IE5ld2x5IGRlY2xhcmVkIGZ1bmN0aW9ucyBvdmVyd3JpdGUgZXhpc3RpbmcgcHJvcGVydGllcy4K
LSAgICAgICAgaW50IGluZGV4ID0gYWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwgSXNWYXJpYWJs
ZSwgIXByb3BlcnR5RGlkRXhpc3QgPyBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplIDogTm90RnVuY3Rp
b25Pck5vdFNwZWNpYWxpemFibGUpOwotICAgICAgICByZWdpc3RlckF0KGluZGV4KS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgdmFsdWUpOworICAgICAgICAgICAgYWRkR2xvYmFsVmFyKHByb3BlcnR5
TmFtZSwgSXNDb25zdGFudCk7CiAgICAgfQorICAgIHZvaWQgYWRkRnVuY3Rpb24oRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUpOwogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBh
Y2Nlc3NvcnMgcmV0dXJuIHByaXN0aW5lIHZhbHVlcywgZXZlbiBpZiBhIHNjcmlwdCAKICAgICAv
LyByZXBsYWNlcyB0aGUgZ2xvYmFsIG9iamVjdCdzIGFzc29jaWF0ZWQgcHJvcGVydHkuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMTU5
NTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDE1ICs3NywxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RB
Y2Nlc3MoRXhlY1N0CiAgICAgaWYgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0R5
bmFtaWNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oc2NvcGUpKSB7CiAgICAgICAgIFN5bWJvbFRhYmxl
RW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChpZGVudC5pbXBs
KCkpOwogICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoZ2V0
T3JQdXQgPT0gUHV0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHkoKSkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGF0
IGdsb2JhbCBzY29wZSwgYnV0IHdlIGRvbid0IGtub3cgaG93IHRvIGNhY2hlIGl0LgotICAgICAg
ICAgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCB3ZSdsbCB3cml0ZSB0byB0aGlzIHZhciwgc28g
bm90aWZ5IG5vdyBhbmQgYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGRvaW5nIHNvIGF0IHJ1bnRpbWUu
Ci0gICAgICAgICAgICAgICAgZW50cnkubm90aWZ5V3JpdGUoKTsKKyAgICAgICAgICAgIGlmIChn
ZXRPclB1dCA9PSBQdXQgJiYgZW50cnkuaXNSZWFkT25seSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gV2Uga25vdyB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCBnbG9iYWwgc2NvcGUsIGJ1dCB3ZSBk
b24ndCBrbm93IGhvdyB0byBjYWNoZSBpdC4KKyAgICAgICAgICAgICAgICBvcCA9IFJlc29sdmVP
cChEeW5hbWljLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AoCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShy
ZXZpc2lvbiAxNTk1MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2ICsxMjMsNyBAQCBpbmxpbmUg
Ym9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhl
YXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CiAgICAgCiAgICAgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IDA7CiAg
ICAgewogICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xU
YWJsZSgpOwogICAgICAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xU
YWJsZS5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7CkBAIC0xMzcsMTQgKzEzOCwxNSBAQCBpbmxp
bmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFVOTElLRUxZKHdhc0ZhdCkpCi0g
ICAgICAgICAgICBpdGVyLT52YWx1ZS5ub3RpZnlXcml0ZSgpOworICAgICAgICBzZXQgPSBpdGVy
LT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIHJlZyA9ICZvYmplY3QtPnJlZ2lzdGVy
QXQoZmFzdEVudHJ5LmdldEluZGV4KCkpOwogICAgIH0KICAgICAvLyBJJ2QgcHJlZmVyIHdlIG5v
dCBob2xkIGxvY2sgd2hpbGUgZXhlY3V0aW5nIGJhcnJpZXJzLCBzaW5jZSBJIHByZWZlciB0byBy
ZXNlcnZlCiAgICAgLy8gdGhlIHJpZ2h0IGZvciBiYXJyaWVycyB0byBiZSBhYmxlIHRvIHRyaWdn
ZXIgR0MuIEFuZCBJIGRvbid0IHdhbnQgdG8gaG9sZCBWTQogICAgIC8vIGxvY2tzIHdoaWxlIEdD
J2luZy4KICAgICByZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CisgICAgaWYgKHNldCkKKyAg
ICAgICAgc2V0LT5ub3RpZnlXcml0ZSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNTYs
NiArMTU4LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwogICAg
IEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6
aGVhcChvYmplY3QpKTsKIAogICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZzsKKyAg
ICBXYXRjaHBvaW50U2V0KiBzZXQgPSAwOwogICAgIHsKICAgICAgICAgU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsKICAgICAgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUubV9sb2NrKTsKQEAgLTE2NCwxMSArMTY3LDEzIEBA
IGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1
ZTsKICAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgIGVudHJ5Lm5vdGlm
eVdyaXRlKCk7CisgICAgICAgIHNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsKICAgICAgICAg
ZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICAgICAgcmVnID0gJm9iamVjdC0+
cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKTsKICAgICB9CiAgICAgcmVnLT5zZXQodm0sIG9i
amVjdCwgdmFsdWUpOworICAgIGlmIChzZXQpCisgICAgICAgIHNldC0+bm90aWZ5V3JpdGUoKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTU5NTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwx
NCArNjUsMTUgQEAgYm9vbCBTeW1ib2xUYWJsZUVudHJ5Ojpjb3VsZEJlV2F0Y2hlZCgpCiAgICAg
V2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludHMgPSBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLmdl
dCgpOwogICAgIGlmICghd2F0Y2hwb2ludHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gd2F0Y2hwb2ludHMtPmlzU3RpbGxWYWxpZCgpOworICAgIHJldHVybiB3YXRjaHBvaW50
cy0+c3RhdGUoKSA9PSBJc1dhdGNoZWQ7CiB9CiAKLXZvaWQgU3ltYm9sVGFibGVFbnRyeTo6YXR0
ZW1wdFRvV2F0Y2goKQordm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRjaChXYXRj
aFN0YXRlIHN0YXRlKQogewogICAgIEZhdEVudHJ5KiBlbnRyeSA9IGluZmxhdGUoKTsKLSAgICBp
ZiAoIWVudHJ5LT5tX3dhdGNocG9pbnRzKQotICAgICAgICBlbnRyeS0+bV93YXRjaHBvaW50cyA9
IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkpOworICAgIEFTU0VSVCghZW50
cnktPm1fd2F0Y2hwb2ludHMpOworICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0gYWRvcHRSZWYo
CisgICAgICAgIG5ldyBXYXRjaHBvaW50U2V0KHN0YXRlID09IEFscmVhZHlJbml0aWFsaXplZCA/
IElzV2F0Y2hlZCA6IENsZWFyV2F0Y2hwb2ludCkpOwogfQogCiB2b2lkIFN5bWJvbFRhYmxlRW50
cnk6OmFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKQEAgLTg2LDcgKzg3LDgg
QEAgdm9pZCBTeW1ib2xUYWJsZUVudHJ5Ojpub3RpZnlXcml0ZVNsb3coKQogICAgIFdhdGNocG9p
bnRTZXQqIHdhdGNocG9pbnRzID0gZmF0RW50cnkoKS0+bV93YXRjaHBvaW50cy5nZXQoKTsKICAg
ICBpZiAoIXdhdGNocG9pbnRzKQogICAgICAgICByZXR1cm47Ci0gICAgd2F0Y2hwb2ludHMtPmZp
cmVBbGwoKTsKKyAgICAKKyAgICB3YXRjaHBvaW50cy0+bm90aWZ5V3JpdGUoKTsKIH0KIAogU3lt
Ym9sVGFibGVFbnRyeTo6RmF0RW50cnkqIFN5bWJvbFRhYmxlRW50cnk6OmluZmxhdGVTbG93KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2
aXNpb24gMTU5NTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDE1ICsyMjAsOCBAQCBzdHJ1Y3QgU3ltYm9sVGFi
bGVFbnRyeSB7CiAgICAgCiAgICAgYm9vbCBjb3VsZEJlV2F0Y2hlZCgpOwogICAgIAotICAgIC8v
IE5vdGlmeSBhbiBvcHBvcnR1bml0eSB0byBjcmVhdGUgYSB3YXRjaHBvaW50IGZvciBhIHZhcmlh
YmxlLiBUaGlzIGlzCi0gICAgLy8gaWRlbXBvdGVudCBhbmQgZmFpbC1zaWxlbnQuIEl0IGlzIGlk
ZW1wb3RlbnQgaW4gdGhlIHNlbnNlIHRoYXQgaWYKLSAgICAvLyBhIHdhdGNocG9pbnQgc2V0IGhh
ZCBhbHJlYWR5IGJlZW4gY3JlYXRlZCwgdGhlbiBhbm90aGVyIG9uZSB3aWxsIG5vdAotICAgIC8v
IGJlIGNyZWF0ZWQuIEhlbmNlIHR3byBjYWxscyB0byB0aGlzIG1ldGhvZCBoYXZlIHRoZSBzYW1l
IGVmZmVjdCBhcwotICAgIC8vIG9uZSBjYWxsLiBJdCBpcyBhbHNvIGZhaWwtc2lsZW50LCBpbiB0
aGUgc2Vuc2UgdGhhdCBpZiBhIHdhdGNocG9pbnQKLSAgICAvLyBzZXQgaGFkIGJlZW4gY3JlYXRl
ZCBhbmQgaGFkIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZCwgdGhlbiB0aGlzIHdpbGwKLSAgICAv
LyBqdXN0IHJldHVybi4gVGhpcyBtZWFucyB0aGF0IGNvdWxkQmVXYXRjaGVkKCkgbWF5IHJldHVy
biBmYWxzZSBldmVuCi0gICAgLy8gaW1tZWRpYXRlbHkgYWZ0ZXIgYSBjYWxsIHRvIGF0dGVtcHRU
b1dhdGNoKCkuCi0gICAgdm9pZCBhdHRlbXB0VG9XYXRjaCgpOworICAgIGVudW0gV2F0Y2hTdGF0
ZSB7IE5vdEluaXRpYWxpemVkLCBBbHJlYWR5SW5pdGlhbGl6ZWQgfTsKKyAgICB2b2lkIHByZXBh
cmVUb1dhdGNoKFdhdGNoU3RhdGUpOwogICAgIAogICAgIHZvaWQgYWRkV2F0Y2hwb2ludChXYXRj
aHBvaW50Kik7CiAgICAgCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTk1MjgpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMy0xMS0xOSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEluZmVyIGNvbnN0YW50
IGdsb2JhbCB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNDQ2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICoganMvcmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLWZp
cmUtZnJvbS1vcHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2ds
b2JhbC12YXItY29uc3QtaW5mZXItZmlyZS1mcm9tLW9wdC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBqcy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5mZXIuaHRtbDogQWRkZWQuCisgICAgICAg
ICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2xvYmFsLXZhci1jb25zdC1pbmZlci1maXJlLWZy
b20tb3B0LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChzZXRBKToKKyAgICAg
ICAgKHNldEIpOgorICAgICAgICAoY2hlY2spOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2dsb2JhbC12YXItY29uc3QtaW5mZXIuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToK
KyAgICAgICAgKGNoZWNrKToKKwogMjAxMy0xMS0xOSAgQmVhciBUcmF2aXMgIDxiZXRyYXZpc0Bh
ZG9iZS5jb20+CiAKICAgICAgICAgW0NTUyBTaGFwZXNdIFBhcnNlIFs8Ym94PiB8fCA8c2hhcGU+
XSB2YWx1ZXMKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLXZhci1jb25zdC1p
bmZlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9n
bG9iYWwtdmFyLWNvbnN0LWluZmVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLXZhci1jb25zdC1pbmZlci1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dsb2JhbC12YXItY29uc3Qt
aW5mZXIKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9u
IHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2xvYmFsLXZhci1jb25zdC1pbmZlci1m
aXJlLWZyb20tb3B0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5mZXItZmlyZS1mcm9tLW9wdC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3Qt
aW5mZXItZmlyZS1mcm9tLW9wdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMCBAQAorSlNSZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5mZXItZmlyZS1mcm9tLW9wdAor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3du
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLWZpcmUtZnJv
bS1vcHQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dsb2JhbC12
YXItY29uc3QtaW5mZXItZmlyZS1mcm9tLW9wdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLWZpcmUtZnJvbS1vcHQuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLWZpcmUtZnJvbS1vcHQuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nbG9iYWwt
dmFyLWNvbnN0LWluZmVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2dsb2JhbC12YXItY29uc3QtaW5mZXIuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9n
bG9iYWwtdmFyLWNvbnN0LWluZmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dsb2JhbC12YXItY29uc3QtaW5mZXItZmly
ZS1mcm9tLW9wdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9nbG9iYWwtdmFyLWNvbnN0LWluZmVyLWZpcmUtZnJvbS1vcHQuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nbG9iYWwtdmFyLWNv
bnN0LWluZmVyLWZpcmUtZnJvbS1vcHQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBA
QAorZnVuY3Rpb24gZm9vKCkgeworICAgIHJldHVybiBhICsgYjsKK30KKworbm9JbmxpbmUoZm9v
KTsKKwordmFyIGE7Cit2YXIgYjsKKworZnVuY3Rpb24gc2V0QShwLCB2YWx1ZSkgeworICAgIGlm
IChwKQorICAgICAgICBhID0gdmFsdWU7Cit9CisKK2Z1bmN0aW9uIHNldEIocCwgdmFsdWUpIHsK
KyAgICBpZiAocCkKKyAgICAgICAgYiA9IHZhbHVlOworfQorCitub0lubGluZShzZXRBKTsKK25v
SW5saW5lKHNldEIpOworCitzZXRBKHRydWUsIDQpOworc2V0Qih0cnVlLCA1KTsKKworZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICBzZXRBKGZhbHNlLCA0Mik7CisgICAgc2V0
QihmYWxzZSwgNDIpOworfQorCitmdW5jdGlvbiBjaGVjayhhY3R1YWwsIGV4cGVjdGVkKSB7Cisg
ICAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHRocm93ICJF
cnJvcjogZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIiBidXQgZ290ICIgKyBhY3R1YWw7Cit9CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgY2hlY2soZm9vKCksIDkpOworCitz
ZXRBKHRydWUsIDYpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICBjaGVj
ayhmb28oKSwgMTEpOworCitzZXRCKHRydWUsIDcpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpCisgICAgY2hlY2soZm9vKCksIDEzKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2dsb2JhbC12YXItY29uc3QtaW5mZXIuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2xvYmFsLXZhci1jb25zdC1p
bmZlci5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2dsb2JhbC12YXItY29uc3QtaW5mZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
NyBAQAorZnVuY3Rpb24gZm9vKCkgeworICAgIHJldHVybiBhICsgYjsKK30KKworbm9JbmxpbmUo
Zm9vKTsKKwordmFyIGEgPSA0OwordmFyIGIgPSA1OworCitmdW5jdGlvbiBjaGVjayhhY3R1YWws
IGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkKKyAgICAgICAgcmV0dXJu
OworICAgIHRocm93ICJFcnJvcjogZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIiBidXQgZ290ICIg
KyBhY3R1YWw7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgY2hlY2so
Zm9vKCksIDkpOworCithID0gNjsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpCisg
ICAgY2hlY2soZm9vKCksIDExKTsKKworYiA9IDc7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkKKyAgICBjaGVjayhmb28oKSwgMTMpOwo=
</data>
<flag name="review"
          id="240463"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>