<?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>150764</bug_id>
          
          <creation_ts>2015-10-31 19:28:51 -0700</creation_ts>
          <short_desc>Dominators should be factored out of the DFG</short_desc>
          <delta_ts>2015-11-01 16:49:23 -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>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150279</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1138253</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-31 19:28:51 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138254</commentid>
    <comment_count>1</comment_count>
      <attachid>264496</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-31 19:29:42 -0700</bug_when>
    <thetext>Created attachment 264496
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138260</commentid>
    <comment_count>2</comment_count>
      <attachid>264499</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-31 19:56:12 -0700</bug_when>
    <thetext>Created attachment 264499
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138329</commentid>
    <comment_count>3</comment_count>
      <attachid>264521</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-01 10:25:12 -0800</bug_when>
    <thetext>Created attachment 264521
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138330</commentid>
    <comment_count>4</comment_count>
      <attachid>264522</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-01 11:12:15 -0800</bug_when>
    <thetext>Created attachment 264522
maybe done

You know you have an epic template hack when you have to say &quot;typename Graph::template Map&lt;BlockData&gt; m_data;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138333</commentid>
    <comment_count>5</comment_count>
      <attachid>264524</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-01 11:21:04 -0800</bug_when>
    <thetext>Created attachment 264524
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138334</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-01 11:22:54 -0800</bug_when>
    <thetext>Attachment 264524 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/Dominators.h:26:  #ifndef header guard has wrong style, please use: WTF_Dominators_h  [build/header_guard] [5]
ERROR: Source/WTF/wtf/Dominators.h:172:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Dominators.h:183:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Dominators.h:194:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Dominators.h:205:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Dominators.h:218:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Dominators.h:229:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Dominators.h:698:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/Dominators.h:715:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 10 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138352</commentid>
    <comment_count>7</comment_count>
      <attachid>264524</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-01 12:47:59 -0800</bug_when>
    <thetext>Comment on attachment 264524
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138418</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-01 16:46:38 -0800</bug_when>
    <thetext>I measured performance since this changes some critical DFG code.


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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r191865)
&quot;NewDominators&quot; at /Volumes/Data/tertiary/OpenSource/WebKitBuild/Release/jsc (r191865)

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

                                                        TipOfTree               NewDominators                                   
SunSpider:
   3d-cube                                            4.7942+-0.3004            4.7093+-0.0275          might be 1.0180x faster
   3d-morph                                           5.4544+-0.4155            5.4364+-0.4456        
   3d-raytrace                                        5.2593+-0.0586     ?      5.3039+-0.1714        ?
   access-binary-trees                                2.1970+-0.0586     ?      2.2146+-0.0931        ?
   access-fannkuch                                    5.6673+-0.1740            5.6053+-0.1367          might be 1.0111x faster
   access-nbody                                       2.5105+-0.0352     ?      2.6901+-0.2662        ? might be 1.0716x slower
   access-nsieve                                      3.1183+-0.1267     ?      3.1383+-0.2008        ?
   bitops-3bit-bits-in-byte                           1.1943+-0.0583            1.1707+-0.0204          might be 1.0202x faster
   bitops-bits-in-byte                                3.2705+-0.1142     ?      3.2745+-0.0562        ?
   bitops-bitwise-and                                 2.1166+-0.2047            2.0716+-0.1043          might be 1.0217x faster
   bitops-nsieve-bits                                 3.0291+-0.0759     ?      3.0970+-0.1859        ? might be 1.0224x slower
   controlflow-recursive                              2.5468+-0.3009            2.3532+-0.0823          might be 1.0823x faster
   crypto-aes                                         4.0002+-0.2249     ?      4.1377+-0.3780        ? might be 1.0344x slower
   crypto-md5                                         2.5358+-0.0736            2.4915+-0.0706          might be 1.0178x faster
   crypto-sha1                                        2.6641+-0.4843            2.4823+-0.2295          might be 1.0732x faster
   date-format-tofte                                  7.2052+-0.5934            6.6750+-0.1289          might be 1.0794x faster
   date-format-xparb                                  4.7854+-0.5386     ?      4.8062+-0.1329        ?
   math-cordic                                        2.8476+-0.0613            2.8040+-0.0499          might be 1.0155x faster
   math-partial-sums                                  5.1900+-0.7467            5.0500+-0.4044          might be 1.0277x faster
   math-spectral-norm                                 2.1098+-0.2426            2.0016+-0.1228          might be 1.0541x faster
   regexp-dna                                         6.4207+-0.3015            6.3248+-0.2329          might be 1.0152x faster
   string-base64                                      4.2865+-0.0955     ?      4.8284+-0.5806        ? might be 1.1264x slower
   string-fasta                                       6.0084+-0.3892            6.0007+-0.4908        
   string-tagcloud                                    7.9706+-0.1185     ?      8.2413+-0.4544        ? might be 1.0340x slower
   string-unpack-code                                18.2850+-0.2767     ?     18.5766+-1.2562        ? might be 1.0160x slower
   string-validate-input                              4.5852+-0.2808            4.5001+-0.0997          might be 1.0189x faster

   &lt;arithmetic&gt;                                       4.6174+-0.0325            4.6148+-0.0554          might be 1.0006x faster

                                                        TipOfTree               NewDominators                                   
LongSpider:
   3d-cube                                          808.6731+-9.6157          800.3338+-3.9010          might be 1.0104x faster
   3d-morph                                        1497.0327+-9.5542         1493.9415+-6.4149        
   3d-raytrace                                      600.0495+-6.4337     ?    603.4837+-4.2969        ?
   access-binary-trees                              791.0000+-6.2937     ?    793.8326+-6.6751        ?
   access-fannkuch                                  297.4890+-8.1400          292.4995+-2.9757          might be 1.0171x faster
   access-nbody                                     515.1512+-4.3238          512.9065+-2.1502        
   access-nsieve                                    377.5390+-11.2133    ?    378.1431+-8.4741        ?
   bitops-3bit-bits-in-byte                          35.1072+-1.9422           34.5057+-0.9371          might be 1.0174x faster
   bitops-bits-in-byte                               84.4005+-8.6349           74.3743+-2.0924          might be 1.1348x faster
   bitops-nsieve-bits                               407.4003+-8.0419          404.2482+-4.0016        
   controlflow-recursive                            431.8653+-1.7970     ?    434.9288+-3.6719        ?
   crypto-aes                                       555.6210+-1.4644     ?    558.3564+-2.7159        ?
   crypto-md5                                       488.7450+-46.5033         453.7220+-7.8229          might be 1.0772x faster
   crypto-sha1                                      660.3729+-5.5502          657.4856+-9.5376        
   date-format-tofte                                510.3907+-9.9367          496.9327+-4.6185          might be 1.0271x faster
   date-format-xparb                                652.3452+-4.9792     ?    680.6318+-66.3275       ? might be 1.0434x slower
   hash-map                                         149.0639+-1.3029     ?    149.1311+-1.3785        ?
   math-cordic                                      483.0910+-1.0131     ?    485.4336+-5.5140        ?
   math-partial-sums                                459.8983+-4.7098          457.3901+-1.9776        
   math-spectral-norm                               549.4103+-2.1367     ?    551.9660+-4.8027        ?
   string-base64                                    372.3680+-4.6367     ?    376.2453+-7.2604        ? might be 1.0104x slower
   string-fasta                                     356.2719+-2.4097          355.7112+-1.8241        
   string-tagcloud                                  175.7301+-1.8011     ?    177.0043+-2.5909        ?

   &lt;geometric&gt;                                      391.7184+-2.9484          388.3214+-1.2537          might be 1.0087x faster

                                                        TipOfTree               NewDominators                                   
V8Spider:
   crypto                                            51.4524+-1.6432           51.3565+-2.9211        
   deltablue                                         76.4682+-3.8946     ?     76.9429+-2.0842        ?
   earley-boyer                                      42.5109+-2.1668           41.9975+-1.3585          might be 1.0122x faster
   raytrace                                          31.2417+-1.8931           30.6051+-2.0809          might be 1.0208x faster
   regexp                                            63.8658+-3.1333           63.6696+-1.1117        
   richards                                          53.5126+-0.9587     ?     53.9499+-2.9083        ?
   splay                                             37.3748+-2.3449     ?     37.4263+-2.0864        ?

   &lt;geometric&gt;                                       48.8554+-1.1782           48.6991+-0.8660          might be 1.0032x faster

                                                        TipOfTree               NewDominators                                   
Octane:
   encrypt                                           0.15681+-0.00518          0.15662+-0.00179       
   decrypt                                           2.94065+-0.10653    ?     3.16713+-0.72513       ? might be 1.0770x slower
   deltablue                                x2       0.13678+-0.00326          0.13566+-0.00365       
   earley                                            0.28420+-0.00280    ?     0.28519+-0.00349       ?
   boyer                                             4.29516+-0.04620    ?     4.30868+-0.04582       ?
   navier-stokes                            x2       4.82622+-0.03151    ?     4.85401+-0.03867       ?
   raytrace                                 x2       0.85342+-0.00473          0.85296+-0.00492       
   richards                                 x2       0.08776+-0.00143          0.08767+-0.00107       
   splay                                    x2       0.34777+-0.00350          0.34731+-0.00197       
   regexp                                   x2      24.60097+-0.35982    ?    24.64588+-0.32681       ?
   pdfjs                                    x2      37.31818+-0.20218         37.21262+-0.57483       
   mandreel                                 x2      42.48400+-0.18674    ?    42.55181+-0.55602       ?
   gbemu                                    x2      29.46081+-0.31095    ?    31.97657+-4.14169       ? might be 1.0854x slower
   closure                                           0.57935+-0.00407          0.57832+-0.00344       
   jquery                                            7.34296+-0.05538    ?     7.45724+-0.06325       ? might be 1.0156x slower
   box2d                                    x2       9.29930+-0.03545    ?     9.32227+-0.08342       ?
   zlib                                     x2     391.91303+-7.58255        369.88782+-20.98161        might be 1.0595x faster
   typescript                               x2     664.36674+-4.28079    ?   667.37113+-8.20911       ?

   &lt;geometric&gt;                                       5.30386+-0.00964    ?     5.32473+-0.06757       ? might be 1.0039x slower

                                                        TipOfTree               NewDominators                                   
Kraken:
   ai-astar                                          128.465+-2.617            128.043+-1.995         
   audio-beat-detection                               48.451+-0.545             48.374+-0.252         
   audio-dft                                          98.799+-2.197             96.378+-2.068           might be 1.0251x faster
   audio-fft                                          35.382+-0.635             35.308+-1.041         
   audio-oscillator                                   58.455+-0.915      ?      58.761+-2.580         ?
   imaging-darkroom                                   59.791+-0.148      ?      59.888+-0.340         ?
   imaging-desaturate                                 48.776+-0.677      ?      49.552+-2.363         ? might be 1.0159x slower
   imaging-gaussian-blur                              88.360+-0.944             87.816+-0.435         
   json-parse-financial                               37.710+-0.651             37.187+-0.704           might be 1.0141x faster
   json-stringify-tinderbox                           23.444+-1.540             21.978+-0.565           might be 1.0667x faster
   stanford-crypto-aes                                42.680+-1.800             42.556+-2.137         
   stanford-crypto-ccm                                35.822+-2.080      ?      37.336+-2.283         ? might be 1.0423x slower
   stanford-crypto-pbkdf2                             96.132+-0.720             95.784+-0.460         
   stanford-crypto-sha256-iterative                   37.193+-1.037             36.653+-1.106           might be 1.0147x faster

   &lt;arithmetic&gt;                                       59.961+-0.472             59.687+-0.396           might be 1.0046x faster

                                                        TipOfTree               NewDominators                                   
JSRegress:
   abc-forward-loop-equal                            30.3684+-1.0899           30.0641+-0.8931          might be 1.0101x faster
   abc-postfix-backward-loop                         29.5625+-0.4148     ?     29.7021+-0.5531        ?
   abc-simple-backward-loop                          29.7900+-0.8459           29.4898+-0.8699          might be 1.0102x faster
   abc-simple-forward-loop                           29.5802+-0.8916           29.4386+-0.6266        
   abc-skippy-loop                                   21.9625+-0.8377           21.7517+-0.4721        
   abs-boolean                                        2.4821+-0.0511     ?      2.4930+-0.0394        ?
   adapt-to-double-divide                            16.3820+-0.3849     ?     16.5263+-0.4503        ?
   aliased-arguments-getbyval                         1.1746+-0.0673     ?      1.2148+-0.0664        ? might be 1.0342x slower
   allocate-big-object                                2.5372+-0.1735     ?      2.5762+-0.1971        ? might be 1.0154x slower
   arguments-named-and-reflective                    10.8746+-0.3472     ?     11.8957+-2.0751        ? might be 1.0939x slower
   arguments-out-of-bounds                            9.3964+-0.1948            9.3929+-0.2042        
   arguments-strict-mode                              9.7798+-0.3765            9.5807+-0.2144          might be 1.0208x faster
   arguments                                          8.5535+-0.3189     ?      8.6433+-0.2174        ? might be 1.0105x slower
   arity-mismatch-inlining                            0.8623+-0.0129     ?      0.8962+-0.0595        ? might be 1.0394x slower
   array-access-polymorphic-structure                 7.3537+-0.6239            7.0866+-0.2121          might be 1.0377x faster
   array-nonarray-polymorhpic-access                 24.5958+-0.7237           24.4670+-0.3966        
   array-prototype-every                             78.7935+-2.7808     ?     78.8663+-2.7508        ?
   array-prototype-forEach                           76.0740+-1.3099     ?     76.8243+-3.8295        ?
   array-prototype-map                               83.3519+-3.1789     ?     83.8872+-2.5866        ?
   array-prototype-reduce                            72.9690+-2.2207     ?     73.4153+-2.2570        ?
   array-prototype-reduceRight                       75.1803+-5.8374           73.8857+-5.1022          might be 1.0175x faster
   array-prototype-some                              79.8455+-3.4136           76.8521+-2.7903          might be 1.0390x faster
   array-splice-contiguous                           23.4582+-0.2180     ?     23.9784+-0.5908        ? might be 1.0222x slower
   array-with-double-add                              3.6619+-0.1271            3.5881+-0.0507          might be 1.0206x faster
   array-with-double-increment                        3.1562+-0.0437     ?      3.2534+-0.2462        ? might be 1.0308x slower
   array-with-double-mul-add                          4.5542+-0.2110     ?      4.9555+-0.8361        ? might be 1.0881x slower
   array-with-double-sum                              3.2348+-0.0581            3.2214+-0.1035        
   array-with-int32-add-sub                           6.0512+-0.0971     !      6.4139+-0.2256        ! definitely 1.0599x slower
   array-with-int32-or-double-sum                     3.2812+-0.0870     ?      3.3591+-0.1997        ? might be 1.0237x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     26.3783+-1.1472     ?     26.6096+-1.1472        ?
   ArrayBuffer-DataView-alloc-long-lived             11.9980+-0.4239           11.8331+-0.4400          might be 1.0139x faster
   ArrayBuffer-Int32Array-byteOffset                  3.6012+-0.0869            3.5734+-0.0802        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     26.8974+-2.6765     ?     27.3274+-1.7108        ? might be 1.0160x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.4034+-0.3987           19.1882+-0.2497          might be 1.0112x faster
   ArrayBuffer-Int8Array-alloc-long-lived            11.0373+-0.2614     ?     11.3823+-0.3045        ? might be 1.0313x slower
   ArrayBuffer-Int8Array-alloc                        9.8351+-0.6080            9.4069+-0.1151          might be 1.0455x faster
   arrowfunction-call                                11.2618+-0.1657           11.2033+-0.3748        
   asmjs_bool_bug                                     8.2572+-0.6038            8.0839+-0.1273          might be 1.0214x faster
   assign-custom-setter-polymorphic                   2.4132+-0.0999     ?      2.4695+-0.1323        ? might be 1.0233x slower
   assign-custom-setter                               3.5190+-0.3364     ?      3.5469+-0.1047        ?
   basic-set                                          7.4199+-0.3984     ?      7.4919+-0.2921        ?
   big-int-mul                                        3.5497+-0.1768            3.5352+-0.1112        
   boolean-test                                       3.1573+-0.0977            3.0846+-0.0457          might be 1.0236x faster
   branch-fold                                        3.6142+-0.0623     ?      3.6466+-0.0198        ?
   branch-on-string-as-boolean                       17.0823+-0.7683     ?     17.4351+-1.0510        ? might be 1.0206x slower
   by-val-generic                                     2.5265+-0.1424            2.5170+-0.1665        
   call-spread-apply                                 28.3265+-1.9147           27.5744+-0.5710          might be 1.0273x faster
   call-spread-call                                  22.5217+-0.9993           22.0955+-0.7459          might be 1.0193x faster
   captured-assignments                               0.4407+-0.0079            0.4395+-0.0132        
   cast-int-to-double                                 5.2333+-0.2067     ?      5.3133+-0.4773        ? might be 1.0153x slower
   cell-argument                                      5.8899+-0.1948     ?      6.1407+-0.2203        ? might be 1.0426x slower
   cfg-simplify                                       2.9263+-0.0315     ?      2.9464+-0.0952        ?
   chain-getter-access                                8.3590+-0.2178            8.3237+-0.2171        
   cmpeq-obj-to-obj-other                            13.1571+-1.1256           11.4513+-1.3004          might be 1.1490x faster
   constant-test                                      4.7943+-0.0399     ?      4.8420+-0.0618        ?
   create-lots-of-functions                           9.7581+-0.7220            9.3689+-0.2571          might be 1.0415x faster
   cse-new-array-buffer                               2.3445+-0.0813            2.3265+-0.0808        
   cse-new-array                                      2.4134+-0.1911     ?      2.4237+-0.0554        ?
   custom-setter-getter-as-put-get-by-id              0.5309+-0.0493     ?      0.5377+-0.0380        ? might be 1.0128x slower
   DataView-custom-properties                        31.4282+-1.4336           30.9543+-0.7905          might be 1.0153x faster
   delay-tear-off-arguments-strictmode               13.2255+-0.6823           13.0847+-0.8415          might be 1.0108x faster
   deltablue-varargs                                161.9882+-2.1027     ?    163.4886+-1.7822        ?
   destructuring-arguments                          163.6762+-2.3484     ?    167.3318+-13.0434       ? might be 1.0223x slower
   destructuring-parameters-overridden-by-function   
                                                      0.4705+-0.0284            0.4611+-0.0137          might be 1.0202x faster
   destructuring-swap                                 4.7115+-0.0518     ?      4.8518+-0.1516        ? might be 1.0298x slower
   direct-arguments-getbyval                          1.2138+-0.0618            1.1635+-0.0329          might be 1.0432x faster
   div-boolean-double                                 5.4078+-0.3331            5.3382+-0.0638          might be 1.0130x faster
   div-boolean                                        8.1338+-0.1156     ?      8.1574+-0.0923        ?
   double-get-by-val-out-of-bounds                    4.4949+-0.1365     ?      4.6322+-0.4705        ? might be 1.0306x slower
   double-pollution-getbyval                          8.4250+-0.2461            8.3783+-0.0365        
   double-pollution-putbyoffset                       3.7149+-0.1826     ?      3.9279+-0.7532        ? might be 1.0573x slower
   double-real-use                                   24.2882+-0.5847     ?     24.8762+-1.6221        ? might be 1.0242x slower
   double-to-int32-typed-array-no-inline              2.3092+-0.1362            2.2188+-0.0318          might be 1.0407x faster
   double-to-int32-typed-array                        2.1234+-0.0600            2.0986+-0.0515          might be 1.0118x faster
   double-to-uint32-typed-array-no-inline             2.3034+-0.0220     ?      2.3100+-0.1236        ?
   double-to-uint32-typed-array                       2.1862+-0.2518            2.1437+-0.0540          might be 1.0198x faster
   elidable-new-object-dag                           33.7780+-0.1974     ?     34.0416+-1.1926        ?
   elidable-new-object-roflcopter                    32.3359+-1.3073     ?     32.4828+-1.4956        ?
   elidable-new-object-then-call                     32.1524+-0.8896     ?     33.0967+-1.1932        ? might be 1.0294x slower
   elidable-new-object-tree                          37.8713+-0.7024     ?     38.0247+-1.0275        ?
   empty-string-plus-int                              4.7479+-0.1279     ?      4.9110+-0.4375        ? might be 1.0343x slower
   emscripten-cube2hash                              27.8094+-1.3575           27.7102+-1.8025        
   exit-length-on-plain-object                       15.9297+-0.8247           15.3690+-0.3044          might be 1.0365x faster
   external-arguments-getbyval                        1.3042+-0.1946     ?      1.3569+-0.1899        ? might be 1.0404x slower
   external-arguments-putbyval                        2.3660+-0.1814            2.2198+-0.0718          might be 1.0658x faster
   fixed-typed-array-storage-var-index                1.3057+-0.1481            1.2703+-0.0488          might be 1.0278x faster
   fixed-typed-array-storage                          0.9309+-0.0217     ?      0.9531+-0.0770        ? might be 1.0238x slower
   Float32Array-matrix-mult                           4.3422+-0.1033            4.2948+-0.0641          might be 1.0110x faster
   Float32Array-to-Float64Array-set                  48.9306+-0.9285           48.7649+-1.0234        
   Float64Array-alloc-long-lived                     60.6993+-2.0410     ?     61.6008+-2.2199        ? might be 1.0149x slower
   Float64Array-to-Int16Array-set                    59.6123+-1.2345     ?     61.0754+-1.2374        ? might be 1.0245x slower
   fold-double-to-int                                12.5898+-0.5288           12.5300+-0.3970        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.3182+-1.1387     ?     10.6261+-1.4711        ? might be 1.0298x slower
   fold-get-by-id-to-multi-get-by-offset             10.7309+-1.9019           10.0417+-0.3918          might be 1.0686x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.7198+-1.8621     ?      9.7813+-0.9712        ? might be 1.1217x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.6427+-1.8549     ?      8.8925+-2.5053        ? might be 1.1635x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.1573+-1.8839     ?     10.4862+-0.7412        ? might be 1.0324x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                     11.0080+-1.0001     ?     12.3278+-1.5744        ? might be 1.1199x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.6926+-0.9524     ?      9.9409+-1.2723        ? might be 1.0256x slower
   fold-put-by-id-to-multi-put-by-offset             11.1350+-1.1426           10.8217+-0.5392          might be 1.0289x faster
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     11.5524+-1.2320           10.6248+-1.2004          might be 1.0873x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     11.0573+-1.5738           10.5537+-0.8605          might be 1.0477x faster
   fold-put-structure                                 7.7428+-1.1115            7.6760+-1.1246        
   for-of-iterate-array-entries                      10.8590+-0.3093     ?     11.3056+-1.0205        ? might be 1.0411x slower
   for-of-iterate-array-keys                          3.5943+-0.1686            3.4912+-0.1260          might be 1.0295x faster
   for-of-iterate-array-values                        3.4665+-0.1270            3.4125+-0.2132          might be 1.0158x faster
   fround                                            17.5626+-0.4741     ?     18.3669+-1.4777        ? might be 1.0458x slower
   ftl-library-inlining-dataview                     59.3232+-1.1469           57.7217+-0.9372          might be 1.0277x faster
   ftl-library-inlining                             102.3820+-2.2828          101.7398+-0.9351        
   ftl-object-sub                                   311.8869+-3.9323     ?    313.6951+-9.2538        ?
   function-call                                     11.4003+-0.7057     ?     11.7509+-1.2777        ? might be 1.0308x slower
   function-dot-apply                                 2.0217+-0.0366     ?      2.0567+-0.0904        ? might be 1.0173x slower
   function-test                                      2.7882+-0.0761            2.7413+-0.0105          might be 1.0171x faster
   function-with-eval                                83.0650+-1.5312           82.1724+-1.5355          might be 1.0109x faster
   gcse-poly-get-less-obvious                        22.4590+-1.0033           21.6906+-0.3040          might be 1.0354x faster
   gcse-poly-get                                     23.5898+-2.0420           23.2025+-2.7159          might be 1.0167x faster
   gcse                                               3.3577+-0.0462     ?      3.4037+-0.0449        ? might be 1.0137x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.6538+-0.0286     ?      2.6645+-0.1049        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      4.7977+-0.1616            4.7960+-0.1686        
   get-by-id-chain-from-try-block                     2.4403+-0.0418     ?      2.5977+-0.4854        ? might be 1.0645x slower
   get-by-id-check-structure-elimination              4.0203+-0.1107            3.8953+-0.0322          might be 1.0321x faster
   get-by-id-proto-or-self                           16.4386+-0.6416     ?     16.9929+-0.8115        ? might be 1.0337x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8814+-0.0270     ?      2.9339+-0.0575        ? might be 1.0182x slower
   get-by-id-self-or-proto                           17.2825+-1.3842     ?     17.5577+-1.1307        ? might be 1.0159x slower
   get-by-val-out-of-bounds                           4.4678+-0.3574            4.1814+-0.0828          might be 1.0685x faster
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7550+-0.0350            2.7028+-0.0602          might be 1.0193x faster
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.1388+-0.1471     ?      6.2144+-0.3383        ? might be 1.0123x slower
   get-by-val-with-string-chain-from-try-block   
                                                      2.5428+-0.2815            2.4476+-0.0545          might be 1.0389x faster
   get-by-val-with-string-check-structure-elimination   
                                                      5.6547+-0.0911            5.6211+-0.1643        
   get-by-val-with-string-proto-or-self              16.9736+-1.1498           16.5198+-0.3151          might be 1.0275x faster
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.1624+-0.0613     ?      3.2292+-0.1615        ? might be 1.0211x slower
   get-by-val-with-string-self-or-proto              16.8689+-0.4625     ?     17.2437+-1.5421        ? might be 1.0222x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.0393+-0.2807            2.9422+-0.0726          might be 1.0330x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.5095+-0.5101           12.3404+-0.0434          might be 1.0137x faster
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.4739+-0.0564     ?      2.5256+-0.2063        ? might be 1.0209x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.4075+-0.1360           11.3225+-0.1006        
   get-by-val-with-symbol-proto-or-self              17.7124+-1.8605     ?     18.0559+-1.7242        ? might be 1.0194x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.8066+-0.1612            3.7344+-0.1145          might be 1.0193x faster
   get-by-val-with-symbol-self-or-proto              16.6148+-0.4122     ?     16.9728+-1.4049        ? might be 1.0215x slower
   get_callee_monomorphic                             2.3713+-0.1118     ?      2.4407+-0.3167        ? might be 1.0292x slower
   get_callee_polymorphic                             3.3961+-0.2702            3.3908+-0.1364        
   getter-no-activation                               5.0022+-0.6423            5.0011+-0.2720        
   getter-prototype                                   8.1298+-0.4965            8.0985+-0.2299        
   getter-richards-try-catch                        983.8457+-11.6859         974.9596+-18.7392       
   getter-richards                                  114.1112+-5.9165          113.4360+-2.4533        
   getter                                             6.0414+-0.7974            5.8037+-0.7907          might be 1.0410x faster
   global-object-access-with-mutating-structure   
                                                      5.7620+-0.1739            5.6174+-0.3562          might be 1.0257x faster
   global-var-const-infer-fire-from-opt               0.7048+-0.0167     ?      0.7388+-0.0743        ? might be 1.0481x slower
   global-var-const-infer                             0.6290+-0.0177            0.6289+-0.0052        
   hard-overflow-check-equal                         26.7588+-0.2462     ?     26.7781+-0.4885        ?
   hard-overflow-check                               26.5957+-0.5347     ?     26.7638+-0.7759        ?
   HashMap-put-get-iterate-keys                      25.3435+-2.2335     ?     26.6818+-1.1489        ? might be 1.0528x slower
   HashMap-put-get-iterate                           29.1356+-1.7593           27.7753+-0.5130          might be 1.0490x faster
   HashMap-string-put-get-iterate                    23.8735+-1.6034     ?     24.0074+-1.5800        ?
   hoist-make-rope                                    8.2220+-0.7144     ?      8.4322+-1.4348        ? might be 1.0256x slower
   hoist-poly-check-structure-effectful-loop   
                                                      3.7193+-0.2056            3.5940+-0.0488          might be 1.0349x faster
   hoist-poly-check-structure                         3.0751+-0.0633     ?      3.0867+-0.0514        ?
   imul-double-only                                   7.6674+-0.1926     ?      7.9415+-0.2109        ? might be 1.0358x slower
   imul-int-only                                      9.6435+-0.3270            8.3942+-1.0370          might be 1.1488x faster
   imul-mixed                                         7.4834+-0.4813            7.0738+-0.4869          might be 1.0579x faster
   in-four-cases                                     18.9001+-0.5578     ?     18.9562+-0.4467        ?
   in-one-case-false                                 10.5175+-0.4541           10.1613+-0.2100          might be 1.0351x faster
   in-one-case-true                                  10.2601+-0.4903     ?     10.3661+-0.5672        ? might be 1.0103x slower
   in-two-cases                                      11.2514+-1.0200           10.4663+-0.1217          might be 1.0750x faster
   indexed-properties-in-objects                      2.8330+-0.1065            2.7987+-0.0639          might be 1.0122x faster
   infer-closure-const-then-mov-no-inline             3.6367+-0.0299            3.6158+-0.0457        
   infer-closure-const-then-mov                      16.9198+-0.9560           16.5359+-0.8449          might be 1.0232x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.0358+-0.4352     ?     11.0618+-0.3820        ?
   infer-closure-const-then-put-to-scope             22.9532+-0.2240     ?     23.2004+-0.6589        ? might be 1.0108x slower
   infer-closure-const-then-reenter-no-inline   
                                                     47.7644+-0.2422     !     49.3392+-1.2674        ! definitely 1.0330x slower
   infer-closure-const-then-reenter                  23.4256+-0.5891           23.0672+-0.3060          might be 1.0155x faster
   infer-constant-global-property                     3.4322+-0.0967     ?      3.4482+-0.0909        ?
   infer-constant-property                            2.6632+-0.0518            2.6391+-0.0706        
   infer-one-time-closure-ten-vars                    7.6168+-0.2587     ?      7.8624+-0.5505        ? might be 1.0322x slower
   infer-one-time-closure-two-vars                    7.3229+-0.2797     ?      7.5268+-0.5259        ? might be 1.0278x slower
   infer-one-time-closure                             7.6011+-0.5194            7.3530+-0.2966          might be 1.0337x faster
   infer-one-time-deep-closure                       10.9122+-0.4780     ?     11.0265+-0.7039        ? might be 1.0105x slower
   inline-arguments-access                            3.9200+-0.1711            3.6307+-0.2108          might be 1.0797x faster
   inline-arguments-aliased-access                    3.6637+-0.2012     ?      3.7531+-0.2327        ? might be 1.0244x slower
   inline-arguments-local-escape                      3.7363+-0.2871            3.5824+-0.0728          might be 1.0430x faster
   inline-get-scoped-var                              4.6140+-0.1749     ?      4.7094+-0.2325        ? might be 1.0207x slower
   inlined-put-by-id-transition                       9.4710+-0.7468     ?      9.5835+-0.4960        ? might be 1.0119x slower
   inlined-put-by-val-with-string-transition   
                                                     42.3989+-1.4305     ?     43.3282+-1.9742        ? might be 1.0219x slower
   inlined-put-by-val-with-symbol-transition   
                                                     41.5263+-1.1896     ?     43.5643+-2.2842        ? might be 1.0491x slower
   int-or-other-abs-then-get-by-val                   4.6398+-0.0827     ?      4.6424+-0.1435        ?
   int-or-other-abs-zero-then-get-by-val             15.9308+-0.4501     ?     16.0905+-1.0591        ? might be 1.0100x slower
   int-or-other-add-then-get-by-val                   4.2449+-0.1846     ?      4.3650+-0.2266        ? might be 1.0283x slower
   int-or-other-add                                   5.0564+-0.1998            4.9953+-0.0729          might be 1.0122x faster
   int-or-other-div-then-get-by-val                   3.9019+-0.1973            3.8759+-0.0974        
   int-or-other-max-then-get-by-val                   3.8673+-0.0795     ?      4.0321+-0.4595        ? might be 1.0426x slower
   int-or-other-min-then-get-by-val                   4.0137+-0.2414            3.8790+-0.1177          might be 1.0347x faster
   int-or-other-mod-then-get-by-val                   3.6718+-0.0883            3.6683+-0.1102        
   int-or-other-mul-then-get-by-val                   3.6961+-0.2818     ?      3.8153+-0.3303        ? might be 1.0323x slower
   int-or-other-neg-then-get-by-val                   4.1316+-0.0420     !      4.2343+-0.0475        ! definitely 1.0249x slower
   int-or-other-neg-zero-then-get-by-val             15.8280+-0.5219     ?     16.0218+-0.6227        ? might be 1.0122x slower
   int-or-other-sub-then-get-by-val                   4.1295+-0.0556     ?      4.4807+-0.4770        ? might be 1.0850x slower
   int-or-other-sub                                   3.5891+-0.1896     ?      3.6043+-0.2544        ?
   int-overflow-local                                 4.0784+-0.0509     ?      4.1615+-0.1051        ? might be 1.0204x slower
   Int16Array-alloc-long-lived                       44.5398+-1.3120     ?     44.9177+-2.3150        ?
   Int16Array-bubble-sort-with-byteLength            22.5297+-0.5307     ?     22.6108+-0.7097        ?
   Int16Array-bubble-sort                            21.0032+-0.6891     ?     21.4707+-1.4335        ? might be 1.0223x slower
   Int16Array-load-int-mul                            1.5130+-0.0680     ?      1.5335+-0.1014        ? might be 1.0136x slower
   Int16Array-to-Int32Array-set                      47.3388+-2.1031           46.8406+-2.3129          might be 1.0106x faster
   Int32Array-alloc-large                            12.6757+-0.4058           12.6433+-1.0956        
   Int32Array-alloc-long-lived                       50.4447+-1.2392           49.8046+-1.9820          might be 1.0129x faster
   Int32Array-alloc                                   3.0185+-0.4121            2.8089+-0.2410          might be 1.0746x faster
   Int32Array-Int8Array-view-alloc                    5.9158+-0.1834            5.8873+-0.0865        
   int52-spill                                        4.5806+-0.2625     ?      4.6546+-0.2439        ? might be 1.0162x slower
   Int8Array-alloc-long-lived                        38.3211+-0.5878     ?     38.5883+-0.9692        ?
   Int8Array-load-with-byteLength                     3.5589+-0.3413     ?      3.5817+-0.5223        ?
   Int8Array-load                                     3.4303+-0.1018            3.3945+-0.0481          might be 1.0105x faster
   integer-divide                                    10.5361+-0.4979     ?     10.7180+-0.1808        ? might be 1.0173x slower
   integer-modulo                                     1.6536+-0.0709            1.5878+-0.0110          might be 1.0414x faster
   is-boolean-fold-tricky                             3.8535+-0.1246     ?      4.1421+-0.7881        ? might be 1.0749x slower
   is-boolean-fold                                    2.7448+-0.1118            2.6784+-0.0653          might be 1.0248x faster
   is-function-fold-tricky-internal-function   
                                                     10.2584+-1.4803            9.4508+-0.1359          might be 1.0855x faster
   is-function-fold-tricky                            4.0717+-0.0762     ?      4.1085+-0.2010        ?
   is-function-fold                                   2.7450+-0.1636     ?      2.7732+-0.1549        ? might be 1.0103x slower
   is-number-fold-tricky                              4.1136+-0.3050            3.8881+-0.0780          might be 1.0580x faster
   is-number-fold                                     2.6676+-0.0364     ?      2.8046+-0.3332        ? might be 1.0513x slower
   is-object-or-null-fold-functions                   2.6941+-0.0509            2.6905+-0.0321        
   is-object-or-null-fold-less-tricky                 4.0935+-0.1025     ?      4.1043+-0.2950        ?
   is-object-or-null-fold-tricky                      4.9843+-0.5292            4.7477+-0.0472          might be 1.0498x faster
   is-object-or-null-fold                             2.6812+-0.0312     ?      2.7111+-0.0786        ? might be 1.0112x slower
   is-object-or-null-trickier-function                4.1401+-0.1455            4.0301+-0.0852          might be 1.0273x faster
   is-object-or-null-trickier-internal-function   
                                                     10.0440+-0.8565            9.9434+-0.4732          might be 1.0101x faster
   is-object-or-null-tricky-function                  4.1528+-0.1502            4.1329+-0.3306        
   is-object-or-null-tricky-internal-function   
                                                      7.1708+-0.0628     !      7.4602+-0.1963        ! definitely 1.0404x slower
   is-string-fold-tricky                              4.0190+-0.1112     ?      4.0861+-0.3064        ? might be 1.0167x slower
   is-string-fold                                     2.6474+-0.0662     ?      2.6608+-0.0643        ?
   is-undefined-fold-tricky                           3.5175+-0.4024            3.3426+-0.0536          might be 1.0523x faster
   is-undefined-fold                                  2.6658+-0.0618     ?      2.6703+-0.0650        ?
   JSONP-negative-0                                   0.2839+-0.0500     ?      0.2951+-0.0351        ? might be 1.0396x slower
   large-int-captured                                 4.2995+-0.2670            4.1391+-0.2859          might be 1.0387x faster
   large-int-neg                                     14.2090+-0.4948           14.1403+-0.2410        
   large-int                                         12.8461+-0.3021     ?     12.8982+-0.2720        ?
   load-varargs-elimination                          20.7907+-0.4388     ?     21.0639+-1.1859        ? might be 1.0131x slower
   logical-not-weird-types                            3.0846+-0.0634     ?      3.1150+-0.0912        ?
   logical-not                                        4.3043+-0.1027     ?      4.5093+-0.1338        ? might be 1.0476x slower
   lots-of-fields                                     9.3366+-0.2271     ?      9.4289+-0.3492        ?
   make-indexed-storage                               2.9442+-0.0517            2.9425+-0.1514        
   make-rope-cse                                      3.5860+-0.0732            3.5358+-0.0874          might be 1.0142x faster
   marsaglia-larger-ints                             31.8971+-0.5717     ?     32.9533+-1.7326        ? might be 1.0331x slower
   marsaglia-osr-entry                               22.1085+-0.6226           21.8477+-1.6587          might be 1.0119x faster
   math-with-out-of-bounds-array-values              21.5195+-0.5144     ?     21.7285+-0.2682        ?
   max-boolean                                        2.7150+-0.1096     ?      2.7655+-0.0757        ? might be 1.0186x slower
   method-on-number                                  16.7178+-0.4867     ?     17.3589+-1.0142        ? might be 1.0384x slower
   min-boolean                                        2.6559+-0.0350     ?      2.6868+-0.0396        ? might be 1.0116x slower
   minus-boolean-double                               3.1073+-0.0268     ?      3.2379+-0.2075        ? might be 1.0420x slower
   minus-boolean                                      2.3990+-0.1375            2.3774+-0.0660        
   misc-strict-eq                                    30.3593+-1.3375           30.2788+-1.5883        
   mod-boolean-double                                11.2806+-0.3645     ?     11.6497+-0.7586        ? might be 1.0327x slower
   mod-boolean                                        8.2531+-0.0633            8.2380+-0.0651        
   mul-boolean-double                                 3.5955+-0.0728            3.5844+-0.0372        
   mul-boolean                                        2.8800+-0.0559            2.8680+-0.0902        
   neg-boolean                                        3.1321+-0.1353     ?      3.1398+-0.0375        ?
   negative-zero-divide                               0.3685+-0.0267            0.3641+-0.0162          might be 1.0122x faster
   negative-zero-modulo                               0.3405+-0.0064     ?      0.3720+-0.0350        ? might be 1.0924x slower
   negative-zero-negate                               0.3572+-0.0455            0.3424+-0.0165          might be 1.0433x faster
   nested-function-parsing                           45.4867+-0.5959           44.8925+-0.7676          might be 1.0132x faster
   new-array-buffer-dead                             86.5376+-0.8553     ?     87.4205+-1.5188        ? might be 1.0102x slower
   new-array-buffer-push                              6.3105+-0.3844            6.2522+-0.3758        
   new-array-dead                                    14.8240+-1.1642           14.6733+-0.4087          might be 1.0103x faster
   new-array-push                                     4.1733+-0.6601            3.8802+-0.4957          might be 1.0756x faster
   no-inline-constructor                             31.1029+-1.2100     ?     31.4524+-1.1763        ? might be 1.0112x slower
   number-test                                        3.0686+-0.0807     ?      3.0794+-0.0241        ?
   object-closure-call                                4.8109+-0.0125     ?      4.9240+-0.2190        ? might be 1.0235x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.1071+-0.3265            4.0185+-0.1462          might be 1.0221x faster
   object-test                                        2.7266+-0.0426     ?      2.8108+-0.0979        ? might be 1.0309x slower
   obvious-sink-pathology-taken                      98.6497+-1.4329           96.6904+-0.8594          might be 1.0203x faster
   obvious-sink-pathology                            30.6201+-1.2609           29.7030+-0.2960          might be 1.0309x faster
   obviously-elidable-new-object                     29.1071+-1.2941           28.1034+-0.3317          might be 1.0357x faster
   plus-boolean-arith                                 2.4616+-0.0868            2.4238+-0.0531          might be 1.0156x faster
   plus-boolean-double                                3.1474+-0.0774     ?      3.2283+-0.2237        ? might be 1.0257x slower
   plus-boolean                                       2.4901+-0.0165     ?      2.5662+-0.0804        ? might be 1.0306x slower
   poly-chain-access-different-prototypes-simple   
                                                      2.6365+-0.1053            2.5760+-0.0471          might be 1.0235x faster
   poly-chain-access-different-prototypes             2.5845+-0.0446            2.5535+-0.0207          might be 1.0121x faster
   poly-chain-access-simpler                          2.6187+-0.0498     ?      2.6530+-0.0991        ? might be 1.0131x slower
   poly-chain-access                                  2.5374+-0.0367            2.5280+-0.0129        
   poly-stricteq                                     53.7667+-0.7260     ?     54.9659+-2.6382        ? might be 1.0223x slower
   polymorphic-array-call                             1.2743+-0.0687     ?      1.2979+-0.1011        ? might be 1.0185x slower
   polymorphic-get-by-id                              2.8896+-0.0478            2.8564+-0.0456          might be 1.0116x faster
   polymorphic-put-by-id                             27.2469+-1.1902     ?     28.3252+-1.2755        ? might be 1.0396x slower
   polymorphic-put-by-val-with-string                29.9105+-1.1990           28.3450+-0.6953          might be 1.0552x faster
   polymorphic-put-by-val-with-symbol                28.6330+-0.6627     ?     29.0069+-1.2627        ? might be 1.0131x slower
   polymorphic-structure                             12.5657+-0.3163           12.4304+-0.3439          might be 1.0109x faster
   polyvariant-monomorphic-get-by-id                  7.1891+-1.3694            6.3436+-0.8153          might be 1.1333x faster
   proto-getter-access                                8.5195+-0.6679            8.3015+-0.1321          might be 1.0263x faster
   prototype-access-with-mutating-prototype           5.8582+-0.5857            5.4668+-0.1556          might be 1.0716x faster
   put-by-id-replace-and-transition                   8.2560+-0.6574     ?      8.3359+-0.9548        ?
   put-by-id-slightly-polymorphic                     2.7175+-0.0734     ?      2.7642+-0.0636        ? might be 1.0172x slower
   put-by-id                                          9.9443+-0.6629     ?     10.1335+-1.0399        ? might be 1.0190x slower
   put-by-val-direct                                  0.3475+-0.0067            0.3442+-0.0070        
   put-by-val-large-index-blank-indexing-type   
                                                      5.2223+-0.2177     ?      5.4031+-0.3884        ? might be 1.0346x slower
   put-by-val-machine-int                             2.6501+-0.2189            2.5210+-0.0770          might be 1.0512x faster
   put-by-val-with-string-replace-and-transition   
                                                     10.3311+-0.4842     ?     10.4045+-0.4359        ?
   put-by-val-with-string-slightly-polymorphic   
                                                      3.1033+-0.3279            2.9940+-0.0731          might be 1.0365x faster
   put-by-val-with-string                            10.5880+-0.4029     ?     11.0111+-0.7442        ? might be 1.0400x slower
   put-by-val-with-symbol-replace-and-transition   
                                                     12.1357+-1.0935           12.0374+-0.8056        
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.2055+-0.0597            3.1869+-0.1329        
   put-by-val-with-symbol                            10.8293+-0.8864           10.3004+-0.6066          might be 1.0514x faster
   rare-osr-exit-on-local                            13.8617+-0.2932           13.8282+-0.2454        
   raytrace-with-empty-try-catch                      5.2255+-0.0951            5.1919+-0.0979        
   raytrace-with-try-catch                            9.9438+-0.3549     ?      9.9993+-0.4211        ?
   register-pressure-from-osr                        16.9943+-0.2869           16.8956+-0.7804        
   repeat-multi-get-by-offset                        21.9092+-0.4661     ?     22.3863+-0.9841        ? might be 1.0218x slower
   richards-empty-try-catch                          72.3633+-1.6981           71.2614+-1.4429          might be 1.0155x faster
   richards-try-catch                               238.1222+-1.4932     ?    240.7588+-4.2162        ? might be 1.0111x slower
   setter-prototype                                   7.8104+-0.1840            7.7300+-0.2227          might be 1.0104x faster
   setter                                             6.0621+-0.7662            5.7443+-0.6861          might be 1.0553x faster
   simple-activation-demo                            24.2598+-0.4136     ?     24.2963+-0.4458        ?
   simple-getter-access                              10.8940+-0.5429           10.7335+-0.2724          might be 1.0150x faster
   simple-poly-call-nested                            8.6242+-0.6577     ?      8.6556+-0.4443        ?
   simple-poly-call                                   1.2883+-0.0382            1.2740+-0.0367          might be 1.0112x faster
   sin-boolean                                       19.6708+-2.4510           19.4744+-2.5716          might be 1.0101x faster
   singleton-scope                                   62.9169+-2.3956           62.8811+-1.1362        
   sink-function                                      9.5434+-0.5339     ?      9.7332+-0.6088        ? might be 1.0199x slower
   sink-huge-activation                              16.5152+-1.7552           15.8017+-0.8378          might be 1.0452x faster
   sinkable-new-object-dag                           53.3141+-2.4315     ?     53.7754+-3.1723        ?
   sinkable-new-object-taken                         41.3283+-2.5089           41.2583+-1.5703        
   sinkable-new-object                               30.8825+-1.4349           29.7479+-0.6290          might be 1.0381x faster
   slow-array-profile-convergence                     2.5543+-0.1387     ?      2.5743+-0.1171        ?
   slow-convergence                                   2.4603+-0.1447            2.4045+-0.0398          might be 1.0232x faster
   slow-ternaries                                    18.8490+-2.4904           17.6541+-0.8220          might be 1.0677x faster
   sorting-benchmark                                 17.2112+-0.5385           17.1064+-0.3722        
   sparse-conditional                                 1.1995+-0.0405     ?      1.2884+-0.2826        ? might be 1.0741x slower
   splice-to-remove                                  12.3164+-0.6428     ?     12.5199+-0.6823        ? might be 1.0165x slower
   string-char-code-at                               13.2653+-0.4288     ?     13.5080+-0.7164        ? might be 1.0183x slower
   string-concat-object                               2.2413+-0.2005            2.1672+-0.0615          might be 1.0342x faster
   string-concat-pair-object                          2.3022+-0.3589            2.2242+-0.1961          might be 1.0351x faster
   string-concat-pair-simple                          9.5400+-0.9064     ?      9.8887+-1.1269        ? might be 1.0365x slower
   string-concat-simple                               9.4359+-0.4570     ?      9.8567+-0.6584        ? might be 1.0446x slower
   string-cons-repeat                                 6.4762+-0.1758     ?      6.9020+-0.9030        ? might be 1.0658x slower
   string-cons-tower                                  6.8558+-0.4001            6.7921+-0.4884        
   string-equality                                   18.4949+-0.1730           18.2375+-0.2313          might be 1.0141x faster
   string-get-by-val-big-char                         6.3567+-0.1065     ?      6.4920+-0.1850        ? might be 1.0213x slower
   string-get-by-val-out-of-bounds-insane             3.2708+-0.5357     ?      3.3620+-0.5400        ? might be 1.0279x slower
   string-get-by-val-out-of-bounds                    3.9401+-0.0699            3.9327+-0.0739        
   string-get-by-val                                  2.8233+-0.0295     ?      2.9546+-0.1763        ? might be 1.0465x slower
   string-hash                                        1.8894+-0.0205     ?      1.9512+-0.0756        ? might be 1.0327x slower
   string-long-ident-equality                        15.0712+-0.4439           14.8371+-0.1304          might be 1.0158x faster
   string-out-of-bounds                              10.3210+-0.3295           10.2336+-0.2870        
   string-repeat-arith                               27.0485+-0.4167           26.6710+-0.4574          might be 1.0142x faster
   string-sub                                        33.2005+-1.1017           31.9526+-0.8942          might be 1.0391x faster
   string-test                                        2.8951+-0.0478     ?      2.8982+-0.0659        ?
   string-var-equality                               27.7613+-1.1132           27.4795+-0.5161          might be 1.0103x faster
   structure-hoist-over-transitions                   2.3610+-0.0946     ?      2.5132+-0.6451        ? might be 1.0644x slower
   substring-concat-weird                            36.9986+-1.4485           35.9233+-1.1536          might be 1.0299x faster
   substring-concat                                  39.5609+-1.2283     ?     40.3029+-2.8964        ? might be 1.0188x slower
   substring                                         45.6064+-1.3212     ?     46.9231+-2.0144        ? might be 1.0289x slower
   switch-char-constant                               2.7728+-0.2491            2.7128+-0.0592          might be 1.0221x faster
   switch-char                                        5.2663+-0.0830     ?      5.8569+-0.6539        ? might be 1.1121x slower
   switch-constant                                    8.2541+-0.7611            8.1278+-0.4909          might be 1.0155x faster
   switch-string-basic-big-var                       15.5686+-1.2407           14.9179+-0.5532          might be 1.0436x faster
   switch-string-basic-big                           15.1331+-0.4168           14.9985+-0.2454        
   switch-string-basic-var                           13.6699+-0.4953           13.5677+-0.2052        
   switch-string-basic                               12.9603+-0.2257     ?     13.3691+-0.4812        ? might be 1.0315x slower
   switch-string-big-length-tower-var                18.3015+-1.2340     ?     19.2953+-3.4024        ? might be 1.0543x slower
   switch-string-length-tower-var                    13.6220+-0.4969           13.3240+-0.0995          might be 1.0224x faster
   switch-string-length-tower                        11.9558+-0.2761     ?     12.2077+-0.6684        ? might be 1.0211x slower
   switch-string-short                               12.1549+-0.5397           11.8635+-0.2226          might be 1.0246x faster
   switch                                            11.4986+-0.5984           10.9931+-0.3250          might be 1.0460x faster
   tear-off-arguments-simple                          3.1565+-0.0820            3.1181+-0.1434          might be 1.0123x faster
   tear-off-arguments                                 4.1142+-0.1826     ?      4.1322+-0.2588        ?
   temporal-structure                                12.1630+-0.5154           11.9309+-0.2603          might be 1.0195x faster
   to-int32-boolean                                  12.8903+-0.5832     ?     13.0327+-0.7969        ? might be 1.0111x slower
   try-catch-get-by-val-cloned-arguments              9.6115+-0.4567            9.5579+-0.7987        
   try-catch-get-by-val-direct-arguments              2.0658+-0.0811     ?      2.2406+-0.4069        ? might be 1.0846x slower
   try-catch-get-by-val-scoped-arguments              4.6080+-0.2316            4.4499+-0.2220          might be 1.0355x faster
   typed-array-get-set-by-val-profiling              27.4158+-0.5626     ?     27.8309+-0.6184        ? might be 1.0151x slower
   undefined-property-access                        214.6611+-1.8689     ?    214.8764+-1.8731        ?
   undefined-test                                     3.0994+-0.0958            3.0525+-0.0566          might be 1.0153x faster
   unprofiled-licm                                    9.3766+-0.2661            9.2440+-0.2344          might be 1.0143x faster
   v8-raytrace-with-empty-try-catch                  24.6860+-0.9082     ?     25.0119+-1.3069        ? might be 1.0132x slower
   v8-raytrace-with-try-catch                        62.3907+-2.4155     ?     63.0396+-1.8830        ? might be 1.0104x slower
   varargs-call                                      13.3937+-0.5590           13.1034+-0.2518          might be 1.0222x faster
   varargs-construct-inline                          21.8566+-0.8256           21.8475+-1.0024        
   varargs-construct                                 20.4637+-1.1211           19.8851+-0.1590          might be 1.0291x faster
   varargs-inline                                     8.7420+-0.0806     ?      8.8123+-0.1907        ?
   varargs-strict-mode                               10.1206+-0.3106     ?     10.1837+-0.6464        ?
   varargs                                           10.0839+-0.2681            9.8012+-0.1801          might be 1.0288x faster
   weird-inlining-const-prop                          2.2222+-0.0962            2.1648+-0.1904          might be 1.0265x faster

   &lt;geometric&gt;                                        8.1603+-0.0212     ?      8.1611+-0.0228        ? might be 1.0001x slower

                                                        TipOfTree               NewDominators                                   
AsmBench:
   bigfib.cpp                                       451.5435+-11.2508         448.0846+-9.1766        
   cray.c                                           391.7970+-1.5150          391.7334+-1.4458        
   dry.c                                            425.0862+-6.7041     ?    425.7143+-5.4655        ?
   FloatMM.c                                        744.7839+-150.6567        684.8712+-2.2893          might be 1.0875x faster
   gcc-loops.cpp                                   3444.3212+-21.5259        3426.4317+-5.4193        
   n-body.c                                         826.3824+-3.3746     ?    829.4751+-4.9826        ?
   Quicksort.c                                      406.2780+-5.4566     ?    411.6695+-6.6959        ? might be 1.0133x slower
   stepanov_container.cpp                          3561.0809+-37.3014        3529.1823+-20.9706       
   Towers.c                                         233.9718+-2.4748          232.1652+-2.0276        

   &lt;geometric&gt;                                      722.0098+-15.1554         715.3346+-1.6187          might be 1.0093x faster

                                                        TipOfTree               NewDominators                                   
CompressionBench:
   huffman                                           60.6407+-1.4842     ?     60.9710+-1.3013        ?
   arithmetic-simple                                278.7698+-1.8883          276.7524+-1.8807        
   arithmetic-precise                               249.2433+-2.5384     ?    252.2734+-10.8825       ? might be 1.0122x slower
   arithmetic-complex-precise                       248.5420+-2.5814     !    257.1169+-5.8317        ! definitely 1.0345x slower
   arithmetic-precise-order-0                       293.3110+-9.3772          288.2405+-3.6717          might be 1.0176x faster
   arithmetic-precise-order-1                       310.1847+-2.6331          308.8733+-3.8649        
   arithmetic-precise-order-2                       357.7827+-11.2350         354.2104+-5.5855          might be 1.0101x faster
   arithmetic-simple-order-1                        323.6185+-3.5539          322.3414+-1.4815        
   arithmetic-simple-order-2                        374.6207+-3.9164     ?    375.7801+-4.6381        ?
   lz-string                                        314.1019+-7.1368          312.7203+-5.6477        

   &lt;geometric&gt;                                      257.7951+-1.3518     ?    257.9794+-1.6055        ? might be 1.0007x slower

                                                        TipOfTree               NewDominators                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   50.5546+-0.1668           50.4193+-0.1337          might be 1.0027x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138420</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-01 16:49:23 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/191870</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264496</attachid>
            <date>2015-10-31 19:29:42 -0700</date>
            <delta_ts>2015-10-31 19:56:12 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35015</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR0NGR19oCisjZGVmaW5lIERGR0NGR19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMu
aCIKKyNpbmNsdWRlICJERkdCbG9ja1NldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQ0ZHIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEJhc2ljQmxvY2sqIE5vZGU7CisgICAgdHlwZWRlZiBCbG9ja1NldCBTZXQ7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgTWFwID0gQmxvY2tNYXA8VD47CisgICAgdHlw
ZWRlZiBCbG9ja0xpc3QgTGlzdDsKKworICAgIENGRyhHcmFwaCYgZ3JhcGgpCisgICAgICAgIDog
bV9ncmFwaChncmFwaCkKKyAgICB7CisgICAgfQorCisgICAgTm9kZSByb290KCkgeyByZXR1cm4g
bV9ncmFwaC5ibG9jaygwKTsgfQorCisgICAgU2V0IG5ld1NldCgpIHsgcmV0dXJuIFNldCgpOyB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIE1hcDxUPiBuZXdNYXA8VD4oKSB7IHJl
dHVybiBCbG9ja01hcDxUPihtX2dyYXBoKTsgfQorCisgICAgQmxvY2tMaXN0IG5ld0xpc3QoKSB7
IHJldHVybiBMaXN0KCk7IH0KKworICAgIERGRzo6Tm9kZTo6U3VjY2Vzc29yc0l0ZXJhYmxlIHN1
Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5zdWNjZXNzb3JzKCk7IH0KKyAgICBC
YXNpY0Jsb2NrOjpQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0
dXJuIG5vZGUtPnByZWRlY2Vzc29yczsgfQorCisgICAgdW5zaWduZWQgaW5kZXgoTm9kZSBub2Rl
KSB7IHJldHVybiBub2RlLT5pbmRleDsgfQorICAgIE5vZGUgbm9kZSh1bnNpZ25lZCBpbmRleCkg
eyByZXR1cm4gbV9ncmFwaC5ibG9jayhpbmRleCk7IH0KKyAgICB1bnNpZ25lZCBudW1Ob2Rlcygp
IHsgcmV0dXJuIG1fZ3JhcGgubnVtQmxvY2tzKCk7IH0KKworICAgIFBvaW50ZXJEdW1wPEJhc2lj
QmxvY2s+IGR1bXAoTm9kZSBub2RlKSB7IHJldHVybiBwb2ludGVyRHVtcChub2RlKTsgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBtX2dy
YXBoLmR1bXAob3V0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR0NGR19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTQgKzMzLDExIEBACiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHQXJndW1lbnRQb3NpdGlvbi5oIgogI2luY2x1ZGUg
IkRGR0Jhc2ljQmxvY2suaCIKLSNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAi
REZHRnJvemVuVmFsdWUuaCIKICNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgotI2luY2x1
ZGUgIkRGR05hdHVyYWxMb29wcy5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJE
RkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgotI2luY2x1ZGUgIkRGR1By
ZVBvc3ROdW1iZXJpbmcuaCIKICNpbmNsdWRlICJERkdQcm9wZXJ0eVR5cGVLZXkuaCIKICNpbmNs
dWRlICJERkdTY2FubmFibGUuaCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgpA
QCAtNTksNiArNTYsMTAgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAor
Y2xhc3MgRG9taW5hdG9yczsKK2NsYXNzIE5hdHVyYWxMb29wczsKK2NsYXNzIFByZVBvc3ROdW1i
ZXJpbmc7CisKICNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRo
aW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKICAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYg
KF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKQEAgLTg4NSw5ICs4ODYsOSBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sq
LCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVLaWxscz4+IG1fYnl0ZWNvZGVLaWxsczsKICAgICBI
YXNoU2V0PHN0ZDo6cGFpcjxKU09iamVjdCosIFByb3BlcnR5T2Zmc2V0Pj4gbV9zYWZlVG9Mb2Fk
OwogICAgIEhhc2hNYXA8UHJvcGVydHlUeXBlS2V5LCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3I+
IG1faW5mZXJyZWRUeXBlczsKLSAgICBEb21pbmF0b3JzIG1fZG9taW5hdG9yczsKLSAgICBQcmVQ
b3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKLSAgICBOYXR1cmFsTG9vcHMgbV9uYXR1
cmFsTG9vcHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPERvbWluYXRvcnM+IG1fZG9taW5hdG9yczsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJlUG9zdE51bWJlcmluZz4gbV9wcmVQb3N0TnVtYmVyaW5n
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxOYXR1cmFsTG9vcHM+IG1fbmF0dXJhbExvb3BzOwogICAg
IHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fbmV4dE1hY2hpbmVMb2NhbDsK
ICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjc5LDYgKzEyNzksMTAgQEAgc3RydWN0
IE5vZGUgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IobV90ZXJtaW5h
bCwgbV90ZXJtaW5hbC0+bnVtU3VjY2Vzc29ycygpKTsKICAgICAgICAgfQorCisgICAgICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXJtaW5hbC0+bnVtU3VjY2Vzc29ycygpOyB9
CisgICAgICAgIEJhc2ljQmxvY2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV90
ZXJtaW5hbC0+c3VjY2Vzc29yKGluZGV4KTsgfQorICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRv
cltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CiAgICAgICAgIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG1fdGVybWluYWw7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9Eb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRG9taW5hdG9y
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGRG9taW5hdG9yc19oCisjZGVm
aW5lIFdURkRvbWluYXRvcnNfaAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBpcyBhIHV0
aWxpdHkgZm9yIGZpbmRpbmcgdGhlIGRvbWluYXRvcnMgb2YgYSBncmFwaC4gRG9taW5hdG9ycyBh
cmUgYWxtb3N0IHVuaXZlcnNhbGx5IHVzZWQKKy8vIGZvciBjb250cm9sIGZsb3cgZ3JhcGggYW5h
bHlzaXMsIHNvIHRoaXMgY29kZSB3aWxsIHJlZmVyIHRvIHRoZSBncmFwaCdzICJub2RlcyIgYXMg
ImJsb2NrcyIuIEluCisvLyB0aGF0IHJlZ2FyZCB0aGlzIGNvZGUgaXMga2luZCBvZiBzcGVjaWFs
aXplZCBmb3IgdGhlIHZhcmlvdXMgSlNDIGNvbXBpbGVycywgYnV0IHlvdSBjb3VsZCB1c2UgaXQK
Ky8vIGZvciBub24tY29tcGlsZXIgdGhpbmdzIGlmIHlvdSBhcmUgT0sgd2l0aCByZWZlcnJpbmcg
dG8geW91ciAibm9kZXMiIGFzICJibG9ja3MiLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4K
K2NsYXNzIERvbWluYXRvcnMgeworcHVibGljOgorICAgIERvbWluYXRvcnMoR3JhcGgmIGdyYXBo
KQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgeworICAgIH0KKworICAgIHZvaWQgY29t
cHV0ZShib29sIHNlbGZDaGVjayA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgTGVuZ2F1ZXJUYXJq
YW4gbGVuZ2F1ZXJUYXJqYW4obV9ncmFwaCk7CisgICAgICAgIGxlbmdhdWVyVGFyamFuLmNvbXB1
dGUoKTsKKworICAgICAgICBtX2RhdGEgPSBtX2dyYXBoLm5ld01hcDxCbG9ja0RhdGE+KCk7Cisg
ICAgCisgICAgICAgIC8vIEZyb20gaGVyZSB3ZSB3YW50IHRvIGJ1aWxkIGEgc3Bhbm5pbmcgdHJl
ZSB3aXRoIGJvdGggdXB3YXJkIGFuZCBkb3dud2FyZCBsaW5rcyBhbmQgd2Ugd2FudAorICAgICAg
ICAvLyB0byBkbyBhIHNlYXJjaCBvdmVyIHRoaXMgdHJlZSB0byBjb21wdXRlIHByZSBhbmQgcG9z
dCBudW1iZXJzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRvbWluYW5jZQorICAgICAgICAvLyB0ZXN0
cy4KKyAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9k
ZXMoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgR3JhcGg6Ok5vZGUgYmxvY2sgPSBn
cmFwaC5ub2RlKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgICAgICBHcmFwaDo6Tm9kZSBpZG9t
QmxvY2sgPSBsZW5nYXVlclRhcmphbi5pbW1lZGlhdGVEb21pbmF0b3IoYmxvY2spOworICAgICAg
ICAgICAgbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50ID0gaWRvbUJsb2NrOworICAgICAgICAgICAg
aWYgKGlkb21CbG9jaykKKyAgICAgICAgICAgICAgICBtX2RhdGFbaWRvbUJsb2NrXS5pZG9tS2lk
cy5hcHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgCisgICAgICAgIHVuc2lnbmVkIG5leHRQ
cmVOdW1iZXIgPSAwOworICAgICAgICB1bnNpZ25lZCBuZXh0UG9zdE51bWJlciA9IDA7CisgICAg
CisgICAgICAgIC8vIFBsYWluIHN0YWNrLWJhc2VkIHdvcmtsaXN0IGJlY2F1c2Ugd2UgYXJlIGd1
YXJhbnRlZWQgdG8gc2VlIGVhY2ggYmxvY2sgZXhhY3RseSBvbmNlIGFueXdheS4KKyAgICAgICAg
VmVjdG9yPEdyYXBoTm9kZVdpdGhPcmRlcjxHcmFwaDo6Tm9kZT4+IHdvcmtsaXN0OworICAgICAg
ICB3b3JrbGlzdC5hcHBlbmQoR3JhcGhOb2RlV2l0aE9yZGVyPEdyYXBoOjpOb2RlPihncmFwaC5i
bG9jaygwKSwgR3JhcGhWaXNpdE9yZGVyOjpQcmUpKTsKKyAgICAgICAgd2hpbGUgKCF3b3JrbGlz
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEdyYXBoTm9kZVdpdGhPcmRlcjxHcmFwaDo6Tm9k
ZT4gaXRlbSA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBzd2l0Y2ggKGl0ZW0u
b3JkZXIpIHsKKyAgICAgICAgICAgIGNhc2UgR3JhcGhWaXNpdE9yZGVyOjpQcmU6CisgICAgICAg
ICAgICAgICAgbV9kYXRhW2l0ZW0ubm9kZV0ucHJlTnVtYmVyID0gbmV4dFByZU51bWJlcisrOwor
ICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChHcmFwaE5vZGVXaXRoT3JkZXI8R3JhcGg6
Ok5vZGU+KGl0ZW0ubm9kZSwgR3JhcGhWaXNpdE9yZGVyOjpQb3N0KSk7CisgICAgICAgICAgICAg
ICAgZm9yIChHcmFwaDo6Tm9kZSBraWQgOiBtX2RhdGFbaXRlbS5ub2RlXS5pZG9tS2lkcykKKyAg
ICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKEJsb2NrV2l0aE9yZGVyKGtpZCwgR3Jh
cGhWaXNpdE9yZGVyOjpQcmUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgR3JhcGg6OlZpc2l0T3JkZXI6OlBvc3Q6CisgICAgICAgICAgICAgICAgbV9kYXRhW2l0
ZW0ubm9kZV0ucG9zdE51bWJlciA9IG5leHRQb3N0TnVtYmVyKys7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKHNlbGZD
aGVjaykgeworICAgICAgICAgICAgLy8gQ2hlY2sgb3VyIGRvbWluYXRvciBjYWxjdWxhdGlvbjoK
KyAgICAgICAgICAgIC8vIDEpIENoZWNrIHRoYXQgb3VyIHJhbmdlLWJhc2VkIGFuY2VzdHJ5IHRl
c3QgaXMgdGhlIHNhbWUgYXMgYSBuYWl2ZSBhbmNlc3RyeSB0ZXN0LgorICAgICAgICAgICAgLy8g
MikgQ2hlY2sgdGhhdCBvdXIgbm90aW9uIG9mIHdobyBkb21pbmF0ZXMgd2hvbSBpcyBpZGVudGlj
YWwgdG8gYSBuYWl2ZSAobm90CisgICAgICAgICAgICAvLyAgICBMZW5nYXVlci1UYXJqYW4pIGRv
bWluYXRvciBjYWxjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgICAgICBWYWxpZGF0aW9uQ29u
dGV4dCBjb250ZXh0KG1fZ3JhcGgsICp0aGlzKTsKKyAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGZyb21CbG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgZnJvbUJsb2NrSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgICAgICBHcmFwaDo6Tm9kZSBmcm9tQmxvY2sgPSBncmFwaC5u
b2RlKGZyb21CbG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWZyb21CbG9jayB8fCBt
X2RhdGFbZnJvbUJsb2NrXS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdG9CbG9ja0luZGV4
ID0gZ3JhcGgubnVtTm9kZXMoKTsgdG9CbG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
ICAgIEdyYXBoOjpOb2RlIHRvQmxvY2sgPSBncmFwaC5ub2RlKHRvQmxvY2tJbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghdG9CbG9jayB8fCBtX2RhdGFbdG9CbG9ja10ucHJlTnVtYmVy
ID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChkb21pbmF0ZXMoZnJvbUJsb2NrLCB0
b0Jsb2NrKSAhPSBuYWl2ZURvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxvY2spKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRvQmxvY2ssICJS
YW5nZS1iYXNlZCBkb21pbmF0aW9uIGNoZWNrIGlzIGJyb2tlbiIpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoZG9taW5hdGVzKGZyb21CbG9jaywgdG9CbG9jaykgIT0gY29udGV4dC5uYWl2ZURv
bWluYXRvcnMuZG9taW5hdGVzKGZyb21CbG9jaywgdG9CbG9jaykpCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydEVycm9yKGZyb21CbG9jaywgdG9CbG9jaywgIkxlbmdhdWVy
LVRhcmphbiBkb21pbmF0aW9uIGlzIGJyb2tlbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBjb250ZXh0LmhhbmRsZUVycm9ycygpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBzdHJpY3RseURvbWluYXRlcyhHcmFwaDo6Tm9k
ZSBmcm9tLCBHcmFwaDo6Tm9kZSB0bykgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Zh
bGlkKCkpOworICAgICAgICByZXR1cm4gbV9kYXRhW3RvXS5wcmVOdW1iZXIgPiBtX2RhdGFbZnJv
bV0ucHJlTnVtYmVyCisgICAgICAgICAgICAmJiBtX2RhdGFbdG9dLnBvc3ROdW1iZXIgPCBtX2Rh
dGFbZnJvbV0ucG9zdE51bWJlcjsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb21pbmF0ZXMoR3Jh
cGg6Ok5vZGUgZnJvbSwgR3JhcGg6Ok5vZGUgdG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gZnJvbSA9PSB0byB8fCBzdHJpY3RseURvbWluYXRlcyhmcm9tLCB0byk7CisgICAgfQorICAg
IAorICAgIEdyYXBoOjpOb2RlIGltbWVkaWF0ZURvbWluYXRvck9mKEdyYXBoOjpOb2RlIGJsb2Nr
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVtibG9ja10uaWRvbVBhcmVudDsK
KyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZv
ckFsbFN0cmljdERvbWluYXRvcnNPZihHcmFwaDo6Tm9kZSB0bywgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoR3JhcGg6Ok5vZGUgYmxvY2sgPSBtX2Rh
dGFbdG9dLmlkb21QYXJlbnQ7IGJsb2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10uaWRvbVBhcmVu
dCkKKyAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsRG9taW5hdG9yc09mKEdyYXBoOjpO
b2RlIHRvLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9y
IChHcmFwaDo6Tm9kZSBibG9jayA9IHRvOyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmlk
b21QYXJlbnQpCisgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICB9CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEJsb2Nrc1N0cmljdGx5
RG9taW5hdGVkQnkoR3JhcGg6Ok5vZGUgZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29u
c3QKKyAgICB7CisgICAgICAgIFZlY3RvcjxHcmFwaDo6Tm9kZSwgMTY+IHdvcmtsaXN0OworICAg
ICAgICB3b3JrbGlzdC5hcHBlbmRWZWN0b3IobV9kYXRhW2Zyb21dLmlkb21LaWRzKTsKKyAgICAg
ICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEdyYXBoOjpOb2Rl
IGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2sp
OworICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtibG9ja10uaWRvbUtp
ZHMpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NEb21pbmF0ZWRCeShHcmFwaDo6Tm9kZSBmcm9tLCBj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgVmVjdG9yPEdyYXBo
OjpOb2RlLCAxNj4gd29ya2xpc3Q7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChmcm9tKTsKKyAg
ICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEdyYXBoOjpO
b2RlIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGZ1bmN0b3IoYmxv
Y2spOworICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtibG9ja10uaWRv
bUtpZHMpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEdyYXBoOjpTZXQgc3RyaWN0RG9t
aW5hdG9yc09mKEdyYXBoOjpOb2RlIHRvKSBjb25zdAorICAgIHsKKyAgICAgICAgR3JhcGg6OlNl
dCByZXN1bHQ7CisgICAgICAgIGZvckFsbFN0cmljdERvbWluYXRvcnNPZigKKyAgICAgICAgICAg
IHRvLAorICAgICAgICAgICAgWyZdIChHcmFwaDo6Tm9kZSBub2RlKSB7CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFkZChub2RlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICBHcmFwaDo6U2V0IGRvbWluYXRvcnNPZihHcmFwaDo6Tm9k
ZSB0bykgY29uc3QKKyAgICB7CisgICAgICAgIEdyYXBoOjpTZXQgcmVzdWx0OworICAgICAgICBm
b3JBbGxEb21pbmF0b3JzT2YoCisgICAgICAgICAgICB0bywKKyAgICAgICAgICAgIFsmXSAoR3Jh
cGg6Ok5vZGUgbm9kZSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQobm9kZSk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgR3Jh
cGg6OlNldCBibG9ja3NTdHJpY3RseURvbWluYXRlZEJ5KEdyYXBoOjpOb2RlIGZyb20pIGNvbnN0
CisgICAgeworICAgICAgICBHcmFwaDo6U2V0IHJlc3VsdDsKKyAgICAgICAgZm9yQWxsQmxvY2tz
U3RyaWN0bHlEb21pbmF0ZWRCeSgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0g
KEdyYXBoOjpOb2RlIG5vZGUpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKG5vZGUpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IEdyYXBoOjpTZXQgYmxvY2tzRG9taW5hdGVkQnkoR3JhcGg6Ok5vZGUgZnJvbSkgY29uc3QKKyAg
ICB7CisgICAgICAgIEdyYXBoOjpTZXQgcmVzdWx0OworICAgICAgICBmb3JBbGxCbG9ja3NEb21p
bmF0ZWRCeSgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKEdyYXBoOjpOb2Rl
IG5vZGUpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKG5vZGUpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVy
T2YoCisgICAgICAgIEdyYXBoOjpOb2RlIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNv
bnN0CisgICAgeworICAgICAgICBHcmFwaDo6U2V0IHNldDsKKyAgICAgICAgZm9yQWxsQmxvY2tz
SW5Eb21pbmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAg
ICBbJl0gKEdyYXBoOjpOb2RlIGJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKHNldC5hZGQo
YmxvY2spKQorICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAg
IH0pOworICAgIH0KKyAgICAKKyAgICBHcmFwaDo6U2V0IGRvbWluYW5jZUZyb250aWVyT2YoR3Jh
cGg6Ok5vZGUgZnJvbSkgY29uc3QKKyAgICB7CisgICAgICAgIEdyYXBoOjpTZXQgcmVzdWx0Owor
ICAgICAgICBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2YoCisgICAgICAgICAgICBm
cm9tLAorICAgICAgICAgICAgWyZdIChHcmFwaDo6Tm9kZSBub2RlKSB7CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFkZChub2RlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCisgICAgICAgIGNv
bnN0IEdyYXBoOjpMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAg
ICAgICAgZm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCisg
ICAgICAgICAgICBmcm9tLAorICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaykgLT4g
Ym9vbCB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihibG9jayk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBp
cyBhIGNsb3NlIHJlbGF0aXZlIG9mIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9u
dGllck9mKCksIHdoaWNoIGFsbG93cyB0aGUKKyAgICAvLyBnaXZlbiBmdW5jdG9yIHRvIHJldHVy
biBmYWxzZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGRvbid0IHdpc2ggdG8gY29uc2lkZXIgdGhlIGdp
dmVuIGJsb2NrLgorICAgIC8vIFVzZWZ1bCBmb3IgY29tcHV0aW5nIHBydW5lZCBTU0EgZm9ybS4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5Q
cnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCisgICAgICAgIGNvbnN0IEdyYXBoOjpM
aXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgR3JhcGg6
OlNldCBzZXQ7CisgICAgICAgIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGll
ck9mSW1wbCgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKEdyYXBoOjpMaXN0
IGJsb2NrKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNldC5hZGQoYmxvY2spKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0b3IoYmxvY2spOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIEdyYXBo
OjpTZXQgaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKGNvbnN0IEdyYXBoOjpMaXN0JiBmcm9t
KSBjb25zdAorICAgIHsKKyAgICAgICAgR3JhcGg6OlNldCByZXN1bHQ7CisgICAgICAgIGZvckFs
bEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgICAgIGZy
b20sCisgICAgICAgICAgICBbJl0gKEdyYXBoOjpOb2RlIG5vZGUpIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkKG5vZGUpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAg
ICAgIG91dC5wcmludCgiICAgIE5vdCBWYWxpZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9kYXRhLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAg
ICBpZiAobV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciA9PSBVSU5UX01BWCkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0LnByaW50KCIg
ICAgQmxvY2sgIyIsIGJsb2NrSW5kZXgsICI6IGlkb20gPSAiLCBwb2ludGVyRHVtcChtX2RhdGFb
YmxvY2tJbmRleF0uaWRvbVBhcmVudCksICIsIGlkb21LaWRzID0gWyIpOworICAgICAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICptX2RhdGFbYmxvY2tJbmRleF0uaWRvbUtpZHNbaV0pOworICAg
ICAgICAgICAgb3V0LnByaW50KCJdLCBwcmUvcG9zdCA9ICIsIG1fZGF0YVtibG9ja0luZGV4XS5w
cmVOdW1iZXIsICIvIiwgbV9kYXRhW2Jsb2NrSW5kZXhdLnBvc3ROdW1iZXIsICJcbiIpOworICAg
ICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICAvLyBUaGlzIGltcGxlbWVudHMgTGVu
Z2F1ZXIgYW5kIFRhcmphbidzICJBIEZhc3QgQWxnb3JpdGhtIGZvciBGaW5kaW5nIERvbWluYXRv
cnMgaW4gYSBGbG93Z3JhcGgiCisgICAgLy8gKFRPUExBUyAxOTc5KS4gSXQgdXNlcyB0aGUgInNp
bXBsZSIgaW1wbGVtZW50YXRpb24gb2YgTElOSyBhbmQgRVZBTCwgd2hpY2ggeWllbGRzIGFuIE8o
biBsb2cgbikKKyAgICAvLyBzb2x1dGlvbi4gVGhlIGZ1bGwgcGFwZXIgaXMgbGlua2VkIGJlbG93
OyB0aGlzIGNvZGUgYXR0ZW1wdHMgdG8gY2xvc2VseSBmb2xsb3cgdGhlIGFsZ29yaXRobSBhcwor
ICAgIC8vIGl0IGlzIHByZXNlbnRlZCBpbiB0aGUgcGFwZXI7IGluIHBhcnRpY3VsYXIgc2VjdGlv
bnMgMyBhbmQgNCBhcyB3ZWxsIGFzIGFwcGVuZGl4IEIuCisgICAgLy8gaHR0cHM6Ly93d3cuY3Mu
cHJpbmNldG9uLmVkdS9jb3Vyc2VzL2FyY2hpdmUvZmFsbDAzL2NzNTI4L2hhbmRvdXRzL2ElMjBm
YXN0JTIwYWxnb3JpdGhtJTIwZm9yJTIwZmluZGluZy5wZGYKKyAgICAvLworICAgIC8vIFRoaXMg
Y29kZSBpcyB2ZXJ5IHN1YnRsZS4gVGhlIExlbmdhdWVyLVRhcmphbiBhbGdvcml0aG0gaXMgaW5j
cmVkaWJseSBkZWVwIHRvIGJlZ2luIHdpdGguIFRoZQorICAgIC8vIGdvYWwgb2YgdGhpcyBjb2Rl
IGlzIHRvIGZvbGxvdyB0aGUgY29kZSBpbiB0aGUgcGFwZXIsIGhvd2V2ZXIgb3VyIGltcGxlbWVu
dGF0aW9uIG11c3QgZGV2aWF0ZQorICAgIC8vIGZyb20gdGhlIHBhcGVyIHdoZW4gaXQgY29tZXMg
dG8gcmVjdXJzaW9uLiBUaGUgYXV0aG9ycyBoYWQgdXNlZCByZWN1cnNpb24gdG8gaW1wbGVtZW50
IERGUywgYW5kCisgICAgLy8gYWxzbyB0byBpbXBsZW1lbnQgdGhlICJzaW1wbGUiIEVWQUwuIFdl
IGNvbnZlcnQgYm90aCBvZiB0aG9zZSBpbnRvIHdvcmtsaXN0LWJhc2VkIHNvbHV0aW9ucy4KKyAg
ICAvLyBGaW5hbGx5LCBvbmNlIHRoZSBhbGdvcml0aG0gZ2l2ZXMgdXMgaW1tZWRpYXRlIGRvbWlu
YXRvcnMsIHdlIGltcGxlbWVudCBkb21pbmFuY2UgdGVzdHMgYnkKKyAgICAvLyB3YWxraW5nIHRo
ZSBkb21pbmF0b3IgdHJlZSBhbmQgY29tcHV0aW5nIHByZSBhbmQgcG9zdCBudW1iZXJzLiBXZSB0
aGVuIHVzZSB0aGUgcmFuZ2UgaW5jbHVzaW9uCisgICAgLy8gY2hlY2sgdHJpY2sgdGhhdCB3YXMg
Zmlyc3QgZGlzY292ZXJlZCBieSBQYXVsIEYuIERpZXR6IGluIDE5ODIgaW4gIk1haW50YWluaW5n
IG9yZGVyIGluIGEgbGlua2VkCisgICAgLy8gbGlzdCIgKHNlZSBodHRwOi8vZGwuYWNtLm9yZy9j
aXRhdGlvbi5jZm0/aWQ9ODAyMTg0KS4KKworICAgIGNsYXNzIExlbmdhdWVyVGFyamFuIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIExlbmdhdWVyVGFyamFuKEdyYXBoJiBncmFwaCkKKyAgICAgICAg
ICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgICAgICwgbV9kYXRhKGdyYXBoKQorICAgICAg
ICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bU5v
ZGVzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBHcmFwaDo6Tm9kZSBibG9j
ayA9IG1fZ3JhcGgubm9kZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2Nr
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBtX2RhdGFb
YmxvY2tdLmxhYmVsID0gYmxvY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgdm9pZCBjb21wdXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29tcHV0ZURlcHRo
Rmlyc3RQcmVOdW1iZXJpbmcoKTsgLy8gU3RlcCAxLgorICAgICAgICAgICAgY29tcHV0ZVNlbWlE
b21pbmF0b3JzQW5kSW1wbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCk7IC8vIFN0ZXBzIDIgYW5k
IDMuCisgICAgICAgICAgICBjb21wdXRlRXhwbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCk7IC8v
IFN0ZXAgNC4KKyAgICAgICAgfQorICAgIAorICAgICAgICBHcmFwaDo6Tm9kZSBpbW1lZGlhdGVE
b21pbmF0b3IoR3JhcGg6Ok5vZGUgYmxvY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2RhdGFbYmxvY2tdLmRvbTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
dm9pZCBjb21wdXRlRGVwdGhGaXJzdFByZU51bWJlcmluZygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIFVzZSBhIGJsb2NrIHdvcmtsaXN0IHRoYXQgYWxzbyB0cmFja3MgdGhlIGluZGV4IGlu
c2lkZSB0aGUgc3VjY2Vzc29yIGxpc3QuIFRoaXMgaXMKKyAgICAgICAgICAgIC8vIG5lY2Vzc2Fy
eSBmb3IgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndCBhdHRlbXB0IHRvIHZpc2l0IGEgc3VjY2Vzc29y
IHVudGlsIHRoZSBwcmV2aW91cworICAgICAgICAgICAgLy8gc3VjY2Vzc29ycyB0aGF0IHdlIGhh
ZCB2aXNpdGVkIGFyZSBmdWxseSBwcm9jZXNzZWQuIFRoaXMgZW5kcyB1cCBiZWluZyByZXZlYWxl
ZCBpbiB0aGUKKyAgICAgICAgICAgIC8vIG91dHB1dCBvZiB0aGlzIG1ldGhvZCBiZWNhdXNlIHRo
ZSBmaXJzdCB0aW1lIHdlIHNlZSBhbiBlZGdlIHRvIGEgYmxvY2ssIHdlIHNldCB0aGUKKyAgICAg
ICAgICAgIC8vIGJsb2NrJ3MgcGFyZW50LiBTbywgaWYgd2UgaGF2ZToKKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAvLyBBIC0+IEIKKyAgICAgICAgICAgIC8vIEEgLT4gQworICAgICAgICAg
ICAgLy8gQiAtPiBDCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQW5kIHdlJ3JlIHBy
b2Nlc3NpbmcgQSwgdGhlbiB3ZSB3YW50IHRvIGVuc3VyZSB0aGF0IGlmIHdlIHNlZSBBLT5CIGZp
cnN0IChhbmQgaGVuY2Ugc2V0CisgICAgICAgICAgICAvLyBCJ3MgcHJlbnVtYmVyIGJlZm9yZSB3
ZSBzZXQgQydzKSB0aGVuIHdlIGFsc28gZW5kIHVwIHNldHRpbmcgQydzIHBhcmVudCB0byBCIGJ5
IHZpcnR1ZQorICAgICAgICAgICAgLy8gb2Ygbm90IG5vdGljaW5nIEEtPkMgdW50aWwgd2UncmUg
ZG9uZSBwcm9jZXNzaW5nIEIuCisKKyAgICAgICAgICAgIEV4dGVuZGVkR3JhcGhOb2RlV29ya2xp
c3Q8R3JhcGg6Ok5vZGUsIHVuc2lnbmVkLCBHcmFwaDo6U2V0PgorICAgICAgICAgICAgRXh0ZW5k
ZWRCbG9ja1dvcmtsaXN0PHVuc2lnbmVkPiB3b3JrbGlzdDsKKyAgICAgICAgICAgIHdvcmtsaXN0
LnB1c2gobV9ncmFwaC5ub2RlKDApLCAwKTsKKyAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAo
R3JhcGhOb2RlV2l0aDxHcmFwaDo6Tm9kZSwgdW5zaWduZWQ+IGl0ZW0gPSB3b3JrbGlzdC5wb3Ao
KSkgeworICAgICAgICAgICAgICAgIEdyYXBoOjpOb2RlIGJsb2NrID0gaXRlbS5ub2RlOworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gaXRlbS5kYXRhOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gV2UgaW5pdGlhbGx5IHB1c2ggd2l0aCBzdWNjZXNz
b3JJbmRleCA9IDAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGFueQorICAg
ICAgICAgICAgICAgIC8vIHN1Y2Nlc3NvcnMuIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gYXNzaWdu
IG91ciBwcmVudW1iZXIuIFN1YnNlcXVlbnRseSB3ZSBnZXQgcHVzaGVkCisgICAgICAgICAgICAg
ICAgLy8gd2l0aCBoaWdoZXIgc3VjY2Vzc29ySW5kZXggdmFsdWVzLCBidXQgb25seSBpZiB0aGV5
IGFyZSBpbiByYW5nZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN1Y2Nlc3NvckluZGV4IHx8
IHN1Y2Nlc3NvckluZGV4IDwgbV9ncmFwaC5zdWNjZXNzb3JzKGJsb2NrKS5zaXplKCkpOworCisg
ICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JJbmRleCkgeworICAgICAgICAgICAgICAgICAg
ICBtX2RhdGFbYmxvY2tdLnNlbWlOdW1iZXIgPSBtX2Jsb2NrQnlQcmVOdW1iZXIuc2l6ZSgpOwor
ICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrQnlQcmVOdW1iZXIuYXBwZW5kKGJsb2NrKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2Vz
c29ySW5kZXggPCBtX2dyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spLnNpemUoKSkgeworICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBuZXh0U3VjY2Vzc29ySW5kZXggPSBzdWNjZXNzb3JJbmRleCAr
IDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0U3VjY2Vzc29ySW5kZXggPCBtX2dyYXBo
LnN1Y2Nlc3NvcnMoYmxvY2spLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmts
aXN0LmZvcmNlUHVzaChibG9jaywgbmV4dFN1Y2Nlc3NvckluZGV4KTsKKworICAgICAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA9IG1fZ3JhcGguc3VjY2Vzc29ycyhi
bG9jaylbc3VjY2Vzc29ySW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAod29ya2xpc3Qu
cHVzaChzdWNjZXNzb3JCbG9jaywgMCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFb
c3VjY2Vzc29yQmxvY2tdLnBhcmVudCA9IGJsb2NrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIGNvbXB1dGVTZW1pRG9taW5h
dG9yc0FuZEltcGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY3VycmVudFByZU51bWJlciA9IG1fYmxvY2tCeVByZU51bWJlci5z
aXplKCk7IGN1cnJlbnRQcmVOdW1iZXItLSA+IDE7KSB7CisgICAgICAgICAgICAgICAgR3JhcGg6
Ok5vZGUgYmxvY2sgPSBtX2Jsb2NrQnlQcmVOdW1iZXJbY3VycmVudFByZU51bWJlcl07CisgICAg
ICAgICAgICAgICAgQmxvY2tEYXRhJiBibG9ja0RhdGEgPSBtX2RhdGFbYmxvY2tdOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gU3RlcCAyOgorICAgICAgICAgICAgICAgIGZvciAo
R3JhcGg6Ok5vZGUgcHJlZGVjZXNzb3JCbG9jayA6IG1fZ3JhcGgucHJlZGVjZXNzb3JzKGJsb2Nr
KSkgeworICAgICAgICAgICAgICAgICAgICBHcmFwaDo6Tm9kZSBpbnRlcm1lZGlhdGVCbG9jayA9
IGV2YWwocHJlZGVjZXNzb3JCbG9jayk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrRGF0YS5z
ZW1pTnVtYmVyID0gc3RkOjptaW4oCisgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGFbaW50
ZXJtZWRpYXRlQmxvY2tdLnNlbWlOdW1iZXIsIGJsb2NrRGF0YS5zZW1pTnVtYmVyKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYnVja2V0UHJlTnVtYmVyID0g
YmxvY2tEYXRhLnNlbWlOdW1iZXI7CisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1Y2tldFByZU51
bWJlciA8PSBjdXJyZW50UHJlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBtX2RhdGFbbV9ibG9j
a0J5UHJlTnVtYmVyW2J1Y2tldFByZU51bWJlcl1dLmJ1Y2tldC5hcHBlbmQoYmxvY2spOworICAg
ICAgICAgICAgICAgIGxpbmsoYmxvY2tEYXRhLnBhcmVudCwgYmxvY2spOworICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gU3RlcCAzOgorICAgICAgICAgICAgICAgIGZvciAoR3JhcGg6
Ok5vZGUgc2VtaURvbWluZWUgOiBtX2RhdGFbYmxvY2tEYXRhLnBhcmVudF0uYnVja2V0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIEdyYXBoOjpOb2RlIHBvc3NpYmxlRG9taW5hdG9yID0gZXZhbChz
ZW1pRG9taW5lZSk7CisgICAgICAgICAgICAgICAgICAgIEJsb2NrRGF0YSYgc2VtaURvbWluZWVE
YXRhID0gbV9kYXRhW3NlbWlEb21pbmVlXTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1f
YmxvY2tCeVByZU51bWJlcltzZW1pRG9taW5lZURhdGEuc2VtaU51bWJlcl0gPT0gYmxvY2tEYXRh
LnBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgIEJsb2NrRGF0YSYgcG9zc2libGVEb21pbmF0
b3JEYXRhID0gbV9kYXRhW3Bvc3NpYmxlRG9taW5hdG9yXTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHBvc3NpYmxlRG9taW5hdG9yRGF0YS5zZW1pTnVtYmVyIDwgc2VtaURvbWluZWVEYXRhLnNl
bWlOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZW1pRG9taW5lZURhdGEuZG9tID0g
cG9zc2libGVEb21pbmF0b3I7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbWlEb21pbmVlRGF0YS5kb20gPSBibG9ja0RhdGEucGFyZW50OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2RhdGFbYmxvY2tEYXRhLnBhcmVudF0u
YnVja2V0LmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAg
dm9pZCBjb21wdXRlRXhwbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjdXJyZW50UHJlTnVtYmVyID0gMTsgY3VycmVudFByZU51
bWJlciA8IG1fYmxvY2tCeVByZU51bWJlci5zaXplKCk7ICsrY3VycmVudFByZU51bWJlcikgewor
ICAgICAgICAgICAgICAgIEdyYXBoOjpOb2RlIGJsb2NrID0gbV9ibG9ja0J5UHJlTnVtYmVyW2N1
cnJlbnRQcmVOdW1iZXJdOworICAgICAgICAgICAgICAgIEJsb2NrRGF0YSYgYmxvY2tEYXRhID0g
bV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChibG9ja0Rh
dGEuZG9tICE9IG1fYmxvY2tCeVByZU51bWJlcltibG9ja0RhdGEuc2VtaU51bWJlcl0pCisgICAg
ICAgICAgICAgICAgICAgIGJsb2NrRGF0YS5kb20gPSBtX2RhdGFbYmxvY2tEYXRhLmRvbV0uZG9t
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgbGluayhHcmFw
aDo6Tm9kZSBmcm9tLCBHcmFwaDo6Tm9kZSB0bykKKyAgICAgICAgeworICAgICAgICAgICAgbV9k
YXRhW3RvXS5hbmNlc3RvciA9IGZyb207CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgR3JhcGg6
Ok5vZGUgZXZhbChHcmFwaDo6Tm9kZSBibG9jaykKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFtX2RhdGFbYmxvY2tdLmFuY2VzdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBibG9jazsK
KyAgICAgICAgCisgICAgICAgICAgICBjb21wcmVzcyhibG9jayk7CisgICAgICAgICAgICByZXR1
cm4gbV9kYXRhW2Jsb2NrXS5sYWJlbDsKKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIGNv
bXByZXNzKEdyYXBoOjpOb2RlIGluaXRpYWxCbG9jaykKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gVGhpcyB3YXMgbWVhbnQgdG8gYmUgYSByZWN1cnNpdmUgZnVuY3Rpb24sIGJ1dCB3ZSBkb24n
dCBsaWtlIHJlY3Vyc2lvbiBiZWNhdXNlIHdlIGRvbid0CisgICAgICAgICAgICAvLyB3YW50IHRv
IGJsb3cgdGhlIHN0YWNrLiBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gd2lsbCBjYWxsIGNvbXByZXNz
KCkgcmVjdXJzaXZlbHkgb24gdGhlCisgICAgICAgICAgICAvLyBhbmNlc3RvciBvZiBhbnl0aGlu
ZyB0aGF0IGhhcyBhbiBhbmNlc3Rvci4gU28sIHdlIHBvcHVsYXRlIG91ciB3b3JrbGlzdCB3aXRo
IHRoZQorICAgICAgICAgICAgLy8gcmVjdXJzaXZlIGFuY2VzdG9ycyBvZiBpbml0aWFsQmxvY2su
IFRoZW4gd2UgcHJvY2VzcyB0aGUgbGlzdCBzdGFydGluZyBmcm9tIHRoZSBibG9jaworICAgICAg
ICAgICAgLy8gdGhhdCBpcyBmdXJ0aGVzdCB1cCB0aGUgYW5jZXN0b3IgY2hhaW4uCisgICAgICAg
IAorICAgICAgICAgICAgR3JhcGg6Ok5vZGUgYW5jZXN0b3IgPSBtX2RhdGFbaW5pdGlhbEJsb2Nr
XS5hbmNlc3RvcjsKKyAgICAgICAgICAgIEFTU0VSVChhbmNlc3Rvcik7CisgICAgICAgICAgICBp
ZiAoIW1fZGF0YVthbmNlc3Rvcl0uYW5jZXN0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgICAgIFZlY3RvcjxHcmFwaDo6Tm9kZSwgMTY+IHN0YWNrOworICAg
ICAgICAgICAgZm9yIChHcmFwaDo6Tm9kZSBibG9jayA9IGluaXRpYWxCbG9jazsgYmxvY2s7IGJs
b2NrID0gbV9kYXRhW2Jsb2NrXS5hbmNlc3RvcikKKyAgICAgICAgICAgICAgICBzdGFjay5hcHBl
bmQoYmxvY2spOworICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBi
bG9ja3MgdGhhdCBoYXZlIGFuIGFuY2VzdG9yIHRoYXQgaGFzIGFuIGFuY2VzdG9yLiBUaGUgbGFz
dCB0d28KKyAgICAgICAgICAgIC8vIGVsZW1lbnRzIGluIHRoZSBzdGFjayB3b24ndCBzYXRpc2Z5
IHRoaXMgcHJvcGVydHkuCisgICAgICAgICAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOwor
ICAgICAgICAgICAgQVNTRVJUKCFtX2RhdGFbc3RhY2tbc3RhY2suc2l6ZSgpIC0gMV1dLmFuY2Vz
dG9yKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9kYXRhW21fZGF0YVtzdGFja1tzdGFjay5zaXpl
KCkgLSAyXV0uYW5jZXN0b3JdLmFuY2VzdG9yKTsKKyAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGFjay5zaXplKCkgLSAyOyBpLS07KSB7CisgICAgICAgICAgICAgICAg
R3JhcGg6Ok5vZGUgYmxvY2sgPSBzdGFja1tpXTsKKyAgICAgICAgICAgICAgICBHcmFwaDo6Tm9k
ZSYgbGFiZWxPZkJsb2NrID0gbV9kYXRhW2Jsb2NrXS5sYWJlbDsKKyAgICAgICAgICAgICAgICBH
cmFwaDo6Tm9kZSYgYW5jZXN0b3JPZkJsb2NrID0gbV9kYXRhW2Jsb2NrXS5hbmNlc3RvcjsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoYW5jZXN0b3JPZkJsb2NrKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQobV9kYXRhW2FuY2VzdG9yT2ZCbG9ja10uYW5jZXN0b3IpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgR3JhcGg6Ok5vZGUgbGFiZWxPZkFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0
YVthbmNlc3Rvck9mQmxvY2tdLmxhYmVsOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKG1fZGF0YVtsYWJlbE9mQW5jZXN0b3JPZkJsb2NrXS5zZW1pTnVtYmVyIDwgbV9kYXRhW2xh
YmVsT2ZCbG9ja10uc2VtaU51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgbGFiZWxPZkJsb2Nr
ID0gbGFiZWxPZkFuY2VzdG9yT2ZCbG9jazsKKyAgICAgICAgICAgICAgICBhbmNlc3Rvck9mQmxv
Y2sgPSBtX2RhdGFbYW5jZXN0b3JPZkJsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHN0cnVjdCBCbG9ja0RhdGEgeworICAgICAgICAgICAgQmxvY2tE
YXRhKCkKKyAgICAgICAgICAgICAgICA6IHBhcmVudChudWxscHRyKQorICAgICAgICAgICAgICAg
ICwgcHJlTnVtYmVyKFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICwgc2VtaU51bWJlcihVSU5U
X01BWCkKKyAgICAgICAgICAgICAgICAsIGFuY2VzdG9yKG51bGxwdHIpCisgICAgICAgICAgICAg
ICAgLCBsYWJlbChudWxscHRyKQorICAgICAgICAgICAgICAgICwgZG9tKG51bGxwdHIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgR3JhcGg6Ok5v
ZGUgcGFyZW50OworICAgICAgICAgICAgdW5zaWduZWQgcHJlTnVtYmVyOworICAgICAgICAgICAg
dW5zaWduZWQgc2VtaU51bWJlcjsKKyAgICAgICAgICAgIEdyYXBoOjpOb2RlIGFuY2VzdG9yOwor
ICAgICAgICAgICAgR3JhcGg6Ok5vZGUgbGFiZWw7CisgICAgICAgICAgICBWZWN0b3I8R3JhcGg6
Ok5vZGU+IGJ1Y2tldDsKKyAgICAgICAgICAgIEdyYXBoOjpOb2RlIGRvbTsKKyAgICAgICAgfTsK
KyAgICAKKyAgICAgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgICAgIEJsb2NrTWFwPEJsb2NrRGF0
YT4gbV9kYXRhOworICAgICAgICBWZWN0b3I8R3JhcGg6Ok5vZGU+IG1fYmxvY2tCeVByZU51bWJl
cjsKKyAgICB9OworCisgICAgY2xhc3MgTmFpdmVEb21pbmF0b3JzIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIE5haXZlRG9taW5hdG9ycyhHcmFwaCYgZ3JhcGgpCisgICAgICAgICAgICA6IG1fZ3Jh
cGgoZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIG5h
aXZlIGRvbWluYXRvciBzb2x2ZXIuCisKKyAgICAgICAgICAgIEFTU0VSVCghZ3JhcGgucHJlZGVj
ZXNzb3JzKGdyYXBoLnJvb3QoKSkuc2l6ZSgpKTsKKyAgICAKKyAgICAgICAgICAgIHVuc2lnbmVk
IG51bUJsb2NrcyA9IGdyYXBoLm51bU5vZGVzKCk7CisgICAgCisgICAgICAgICAgICAvLyBBbGxv
Y2F0ZSBzdG9yYWdlIGZvciB0aGUgZGVuc2UgZG9taW5hbmNlIG1hdHJpeC4gCisgICAgICAgICAg
ICBtX3Jlc3VsdHMuZ3JvdyhudW1Ob2Rlcyk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1Ob2RlczsgaS0tOykKKyAgICAgICAgICAgICAgICBtX3Jlc3VsdHNbaV0ucmVzaXplKG51
bU5vZGVzKTsKKyAgICAgICAgICAgIG1fc2NyYXRjaC5yZXNpemUobnVtTm9kZXMpOworCisgICAg
ICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhlIGVudHJ5IGJsb2NrIGlzIG9ubHkgZG9taW5hdGVk
IGJ5IGl0c2VsZi4KKyAgICAgICAgICAgIG1fcmVzdWx0c1swXS5jbGVhckFsbCgpOworICAgICAg
ICAgICAgbV9yZXN1bHRzWzBdLnNldCgwKTsKKworICAgICAgICAgICAgLy8gRmluZCBhbGwgb2Yg
dGhlIHZhbGlkIGJsb2Nrcy4KKyAgICAgICAgICAgIG1fc2NyYXRjaC5jbGVhckFsbCgpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtTm9kZXM7IGktLTspIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWdyYXBoLm5vZGUoaSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIG1fc2NyYXRjaC5zZXQoaSk7CisgICAgICAgICAgICB9CisgICAgCisg
ICAgICAgICAgICAvLyBNYXJrIGFsbCBub2RlcyBhcyBkb21pbmF0ZWQgYnkgZXZlcnl0aGluZy4K
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bU5vZGVzOyBpLS0gPiAxOykgeworICAg
ICAgICAgICAgICAgIGlmICghZ3JhcGgubm9kZShpKSB8fCAhZ3JhcGgucHJlZGVjZXNzb3JzKGdy
YXBoLm5vZGUoaSkpLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHRzW2ldLmNs
ZWFyQWxsKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX3Jl
c3VsdHNbaV0uc2V0KG1fc2NyYXRjaCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IEl0ZXJhdGl2ZWx5IGVsaW1pbmF0ZSBub2RlcyB0aGF0IGFyZSBub3QgZG9taW5hdG9yLgorICAg
ICAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAvLyBQcnVuZSBkb21pbmF0b3JzIGlu
IGFsbCBub24gZW50cnkgYmxvY2tzOiBmb3J3YXJkIHNjYW4uCisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bU5vZGVzOyArK2kpCisgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gcHJ1bmVEb21pbmF0b3JzKGkpOworCisgICAgICAgICAgICAgICAgaWYgKCFj
aGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8v
IFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBibG9ja3M6IGJhY2t3YXJkIHNjYW4u
CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bU5vZGVzOyBpLS0gPiAxOykKKyAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBwcnVuZURvbWluYXRvcnMoaSk7CisgICAgICAgICAgICB9IHdoaWxlIChjaGFuZ2Vk
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBkb21pbmF0ZXMoQmxvY2tJbmRl
eCBmcm9tLCBCbG9ja0luZGV4IHRvKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgYm9v
bCBkb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBkb21pbmF0ZXMoZnJvbS0+aW5kZXgsIHRvLT5pbmRl
eCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1Ob2RlcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBHcmFwaDo6Tm9kZSBibG9jayA9IGdyYXBoLm5vZGUoYmxvY2tJbmRleCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgQmxvY2sgIiwgbV9ncmFwaC5kdW1wKGJs
b2NrKSwgIjoiKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG90aGVySW5kZXggPSAw
OyBvdGhlckluZGV4IDwgZ3JhcGgubnVtTm9kZXMoKTsgKytvdGhlckluZGV4KSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghZG9taW5hdGVzKG1fZ3JhcGguaW5kZXgoYmxvY2spLCBvdGhlcklu
ZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoIiAiLCBtX2dyYXBoLmR1bXAobV9ncmFwaC5ub2RlKG90aGVySW5kZXgp
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGJv
b2wgcHJ1bmVEb21pbmF0b3JzKHVuc2lnbmVkIGlkeCkKKyAgICAgICAgeworICAgICAgICAgICAg
R3JhcGg6Ok5vZGUgYmxvY2sgPSBtX2dyYXBoLm5vZGUoaWR4KTsKKworICAgICAgICAgICAgaWYg
KCFibG9jayB8fCAhbV9ncmFwaC5wcmVkZWNlc3NvcnMoYmxvY2spLnNpemUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIEZpbmQgdGhlIGludGVyc2Vj
dGlvbiBvZiBkb20ocHJlZHMpLgorICAgICAgICAgICAgbV9zY3JhdGNoLnNldChtX3Jlc3VsdHNb
bV9ncmFwaC5pbmRleChtX2dyYXBoLnByZWRlY2Vzc29ycyhibG9jaylbMF0pXSk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2dyYXBoLnByZWRlY2Vzc29ycyhibG9jaykuc2l6ZSgp
OyBqLS0gPiAxOykKKyAgICAgICAgICAgICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVzdWx0c1tt
X2dyYXBoLmluZGV4KG1fZ3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKVtqXSldKTsKKworICAgICAg
ICAgICAgLy8gVGhlIGJsb2NrIGlzIGFsc28gZG9taW5hdGVkIGJ5IGl0c2VsZi4KKyAgICAgICAg
ICAgIG1fc2NyYXRjaC5zZXQoaWR4KTsKKworICAgICAgICAgICAgcmV0dXJuIG1fcmVzdWx0c1tp
ZHhdLnNldEFuZENoZWNrKG1fc2NyYXRjaCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgR3Jh
cGggbV9ncmFwaDsKKyAgICAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3I+IG1fcmVzdWx0czsgLy8g
Rm9yIGVhY2ggYmxvY2ssIHRoZSBiaXR2ZWN0b3Igb2YgYmxvY2tzIHRoYXQgZG9taW5hdGUgaXQu
CisgICAgICAgIEZhc3RCaXRWZWN0b3IgbV9zY3JhdGNoOyAvLyBBIHRlbXBvcmFyeSBiaXR2ZWN0
b3Igd2l0aCBiaXQgZm9yIGVhY2ggYmxvY2suIFdlIHJlY3ljbGUgdGhpcyB0byBzYXZlIG5ldy9k
ZWxldGVzLgorICAgIH07CisKKyAgICBzdHJ1Y3QgVmFsaWRhdGlvbkNvbnRleHQgeworICAgICAg
ICBWYWxpZGF0aW9uQ29udGV4dChHcmFwaCYgZ3JhcGgsIERvbWluYXRvcnMmIGRvbWluYXRvcnMp
CisgICAgICAgICAgICA6IGdyYXBoKGdyYXBoKQorICAgICAgICAgICAgLCBkb21pbmF0b3JzKGRv
bWluYXRvcnMpCisgICAgICAgICAgICAsIG5haXZlRG9taW5hdG9ycyhncmFwaCkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgcmVwb3J0RXJyb3IoR3JhcGg6Ok5vZGUg
ZnJvbSwgR3JhcGg6Ok5vZGUgdG8sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEVycm9yIGVycm9yOworICAgICAgICAgICAgZXJyb3IuZnJvbSA9IGZyb207Cisg
ICAgICAgICAgICBlcnJvci50byA9IHRvOworICAgICAgICAgICAgZXJyb3IubWVzc2FnZSA9IG1l
c3NhZ2U7CisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKGVycm9yKTsKKyAgICAgICAgfQorICAg
IAorICAgICAgICB2b2lkIGhhbmRsZUVycm9ycygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChlcnJvcnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgICAgICBkYXRhTG9nKCJERkcgRE9NSU5BVE9SIFZBTElEQVRJT04gRkFJTEVEOlxuIik7
CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiRm9yIGJs
b2NrIGRvbWluYXRpb24gcmVsYXRpb25zaGlwczpcbiIpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGVycm9ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGRh
dGFMb2coCisgICAgICAgICAgICAgICAgICAgICIgICAgIiwgZ3JhcGguZHVtcChlcnJvcnNbaV0u
ZnJvbSksICIgLT4gIiwgZ3JhcGguZHVtcChlcnJvcnNbaV0udG8pLAorICAgICAgICAgICAgICAg
ICAgICAiICgiLCBlcnJvcnNbaV0ubWVzc2FnZSwgIilcbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkNvbnRyb2wgZmxv
dyBncmFwaDpcbiIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IGdyYXBoLm51bU5vZGVzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAg
ICAgICAgIEdyYXBoOjpOb2RlIGJsb2NrID0gZ3JhcGgubm9kZShibG9ja0luZGV4KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQmxvY2sgIiwgZ3JhcGguZHVtcChncmFwaC5ub2Rl
KGJsb2NrSW5kZXgpKSwgIjogc3VjY2Vzc29ycyA9IFsiKTsKKyAgICAgICAgICAgICAgICBDb21t
YVByaW50ZXIgY29tbWE7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Zyhjb21tYSwgZ3JhcGguZHVtcChibG9jay0+c3VjY2Vzc29yKGkpKSk7CisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiXSwgcHJlZGVjZXNzb3JzID0gWyIpOworICAgICAgICAgICAgICAgIGNvbW1h
ID0gQ29tbWFQcmludGVyKCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coY29tbWEsIGdyYXBoLmR1bXAoYmxvY2stPnByZWRlY2Vzc29yc1tpXSkpOworICAg
ICAgICAgICAgICAgIGRhdGFMb2coIl1cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkxlbmdhdWVyLVRhcmphbiBEb21p
bmF0b3JzOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKGRvbWluYXRvcnMpOworICAgICAgICAg
ICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIk5haXZlIERvbWluYXRvcnM6
XG4iKTsKKyAgICAgICAgICAgIG5haXZlRG9taW5hdG9ycy5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7
CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiR3JhcGgg
YXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKGdyYXBoKTsKKyAg
ICAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJERkcgRE9NSU5B
VE9SIFZBTElEQVRJT04gRkFJTElFRCFcbiIpOworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAg
ICAgfQorICAgIAorICAgICAgICBHcmFwaCYgZ3JhcGg7CisgICAgICAgIERvbWluYXRvcnMmIGRv
bWluYXRvcnM7CisgICAgICAgIE5haXZlRG9taW5hdG9ycyBuYWl2ZURvbWluYXRvcnM7CisgICAg
CisgICAgICAgIHN0cnVjdCBFcnJvciB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tOwor
ICAgICAgICAgICAgQmFzaWNCbG9jayogdG87CisgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNz
YWdlOworICAgICAgICB9OworICAgIAorICAgICAgICBWZWN0b3I8RXJyb3I+IGVycm9yczsKKyAg
ICB9OworCisgICAgYm9vbCBuYWl2ZURvbWluYXRlcyhHcmFwaDo6TGlzdCBmcm9tLCBHcmFwaDo6
TGlzdCB0bykgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoR3JhcGg6Ok5vZGUgYmxvY2sgPSB0
bzsgYmxvY2s7IGJsb2NrID0gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50KSB7CisgICAgICAgICAg
ICBpZiAoYmxvY2sgPT0gZnJvbSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVy
T2ZJbXBsKAorICAgICAgICBHcmFwaDo6Tm9kZSBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gUGFyYXBocmFzaW5nIGZyb20gaHR0cDovL2VuLndp
a2lwZWRpYS5vcmcvd2lraS9Eb21pbmF0b3JfKGdyYXBoX3RoZW9yeSk6CisgICAgICAgIC8vICAg
ICAiVGhlIGRvbWluYW5jZSBmcm9udGllciBvZiBhIGJsb2NrICdmcm9tJyBpcyB0aGUgc2V0IG9m
IGFsbCBibG9ja3MgJ3RvJyBzdWNoIHRoYXQKKyAgICAgICAgLy8gICAgICdmcm9tJyBkb21pbmF0
ZXMgYW4gaW1tZWRpYXRlIHByZWRlY2Vzc29yIG9mICd0bycsIGJ1dCAnZnJvbScgZG9lcyBub3Qg
c3RyaWN0bHkKKyAgICAgICAgLy8gICAgIGRvbWluYXRlICd0bycuIgorICAgICAgICAvLworICAg
ICAgICAvLyBBIHVzZWZ1bCBjb3JuZXIgY2FzZSB0byByZW1lbWJlcjogYSBibG9jayBtYXkgYmUg
aW4gaXRzIG93biBkb21pbmFuY2UgZnJvbnRpZXIgaWYgaXQgaGFzCisgICAgICAgIC8vIGEgbG9v
cCBlZGdlIHRvIGl0c2VsZiwgc2luY2UgaXQgZG9taW5hdGVzIGl0c2VsZiBhbmQgc28gaXQgZG9t
aW5hdGVzIGl0cyBvd24gaW1tZWRpYXRlCisgICAgICAgIC8vIHByZWRlY2Vzc29yLCBhbmQgYSBi
bG9jayBuZXZlciBzdHJpY3RseSBkb21pbmF0ZXMgaXRzZWxmLgorICAgICAgICAKKyAgICAgICAg
Zm9yQWxsQmxvY2tzRG9taW5hdGVkQnkoCisgICAgICAgICAgICBmcm9tLAorICAgICAgICAgICAg
WyZdIChHcmFwaDo6TGlzdCBibG9jaykgeworICAgICAgICAgICAgICAgIGZvciAoR3JhcGg6Ok5v
ZGUgdG8gOiBtX2dyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghc3RyaWN0bHlEb21pbmF0ZXMoZnJvbSwgdG8pKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rvcih0byk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxC
bG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCisgICAgICAgIGNvbnN0IEdy
YXBoOjpMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAg
ICAgICAgR3JhcGg6Okxpc3Qgd29ya2xpc3QgPSBmcm9tOworICAgICAgICB3aGlsZSAoIXdvcmts
aXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgR3JhcGg6Ok5vZGUgYmxvY2sgPSB3b3JrbGlz
dC50YWtlTGFzdCgpOworICAgICAgICAgICAgZm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGll
ck9mSW1wbCgKKyAgICAgICAgICAgICAgICBibG9jaywKKyAgICAgICAgICAgICAgICBbJl0gKEdy
YXBoOjpOb2RlIG90aGVyQmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0b3Io
b3RoZXJCbG9jaykpCisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQob3Ro
ZXJCbG9jayk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgc3RydWN0IEJsb2NrRGF0YSB7CisgICAgICAgIEJsb2NrRGF0YSgpCisgICAgICAgICAgICA6
IGlkb21QYXJlbnQobnVsbHB0cikKKyAgICAgICAgICAgICwgcHJlTnVtYmVyKFVJTlRfTUFYKQor
ICAgICAgICAgICAgLCBwb3N0TnVtYmVyKFVJTlRfTUFYKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIFZlY3RvcjxHcmFwaDo6Tm9kZT4gaWRvbUtpZHM7CisgICAgICAg
IEdyYXBoOjpOb2RlIGlkb21QYXJlbnQ7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBwcmVO
dW1iZXI7CisgICAgICAgIHVuc2lnbmVkIHBvc3ROdW1iZXI7CisgICAgfTsKKyAgICAKKyAgICBH
cmFwaCYgbV9ncmFwaDsKKyAgICBCbG9ja01hcDxCbG9ja0RhdGE+IG1fZGF0YTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkRvbWluYXRvcnM7CisKKyNlbmRpZiAvLyBX
VEZEb21pbmF0b3JzX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264499</attachid>
            <date>2015-10-31 19:56:12 -0700</date>
            <delta_ts>2015-11-01 10:25:12 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>85957</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTE4MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTk5LDcgKzU5OSw2IEBACiAJCTBGRDNFNDBDMUI2MThC
NjYwMEM4MEUxRSAvKiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDYxQjYxOEI2NjAwQzgwRTFF
IC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFBy
b3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRDNFNDA3MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5j
cHAgKi87IH07CiAJCTBGRDNFNDBFMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0
MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZEODFBRDIxNTRGQjRFRTAwOTgz
RTcyIC8qIERGR0RvbWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMu
Y3BwICovOyB9OwogCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBRDAx
NTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCAqLzsgfTsKIAkJMEZEODJFMjExNDE3
MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZH
Q2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKIAkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENv
bXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTU4Niw3
ICsxNTg1LDYgQEAKIAkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3Rp
dmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzMwQjYxMDEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCAqLzsgfTsK
IAkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MzBCNjExMTI1
MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi87IH07CiAJCUE3MzFC
MjVBMTMwMDkzODgwMDQwQTdGQSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2
REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKLQkJQTczNzgxMEMxNzk5RUEyRTAw
ODE3NTMzIC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNzM3ODEwOTE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCAq
LzsgfTsKIAkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM3ODEwQTE3
OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCAqLzsgfTsKIAkJQTczNzgxMEUx
Nzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERG
R05hdHVyYWxMb29wcy5oICovOyB9OwogCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTczODY1NTExMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQu
aCAqLzsgfTsKQEAgLTI2MjYsNyArMjYyNCw2IEBACiAJCTBGRDNFNDA3MUI2MThCNjYwMEM4MEUx
RSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQcm9wZXJ0eUNvbmRpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRDNFNDA4MUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eUNvbmRpdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ1NjUyMjE2QUI3ODBBMDAxOTc2NTMgLyogREZHQmFz
aWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFz
aWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIgLyogREZH
RG9taW5hdG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdE
b21pbmF0b3JzLmNwcDsgcGF0aCA9IGRmZy9ERkdEb21pbmF0b3JzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODFBRDAxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRv
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRG9taW5hdG9ycy5oOyBw
YXRoID0gZGZnL0RGR0RvbWluYXRvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuY3BwOyBwYXRoID0g
ZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmg7IHBhdGggPSBkZmcvREZHQ2Fw
YWJpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNjQwLDcgKzM2Mzcs
NiBAQAogCQlBNzI5OURBNDE3RDEyODU4MDA1RjVGRjkgLyogU2V0Q29uc3RydWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0Q29uc3RydWN0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTczMEI2MTAxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2
YWxBY3RpdmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmljdEV2
YWxBY3RpdmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MzBCNjExMTI1
MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3Mzc4MTA5MTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFs
eXNpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBbmFseXNpcy5oOyBw
YXRoID0gZGZnL0RGR0FuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmNwcDsgcGF0aCA9IGRm
Zy9ERkdOYXR1cmFsTG9vcHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzM3
ODEwQjE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR05hdHVyYWxMb29wcy5oOyBwYXRoID0gZGZnL0RGR05hdHVy
YWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzM4NjU1MTExODY5N0I0
MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTcGVjaWFsaXplZFRodW5rSklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01NjY1LDcgKzU2NjEsNiBAQAogCQkJCTBGMThEM0NFMUI1NUE2RTAwMDJDNUM5RiAv
KiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLywKIAkJCQkwRjY2RTE2ODE0REYz
RjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovLAogCQkJCTBGQjRCNTE5MTZCNjI3
NzIwMDNGNjk2QiAvKiBERkdBbGxvY2F0b3IuaCAqLywKLQkJCQlBNzM3ODEwOTE3OTlFQTJFMDA4
MTc1MzMgLyogREZHQW5hbHlzaXMuaCAqLywKIAkJCQkwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYg
LyogREZHQXJndW1lbnRQb3NpdGlvbi5oICovLAogCQkJCTBGMkREODBDMUFCM0Q4QkUwMEJCQjhF
OCAvKiBERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjJERDgwRDFB
QjNEOEJFMDBCQkI4RTggLyogREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5oICovLApAQCAt
NTc1MSw3ICs1NzQ2LDYgQEAKIAkJCQkwRkY0Mjc2MjE1OTFBMUM5MDA0Q0I5RkYgLyogREZHRGlz
YXNzZW1ibGVyLmggKi8sCiAJCQkJMEY1QTEyNzExOTJEOUZERjAwODc2NEEzIC8qIERGR0RvZXNH
Qy5jcHAgKi8sCiAJCQkJMEY1QTEyNzIxOTJEOUZERjAwODc2NEEzIC8qIERGR0RvZXNHQy5oICov
LAotCQkJCTBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLywK
IAkJCQkwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICovLAogCQkJ
CTBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovLAog
CQkJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovLApAQCAtNjY1
OCw3ICs2NjUyLDYgQEAKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QjE0REYz
RjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
QjkyMTgxNkQwMkVCMjAwNTVBNURCIC8qIERGR0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQTczNzgxMEMxNzk5RUEyRTAwODE3NTMzIC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTIxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3Vt
ZW50c0VsaW1pbmF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE0MUFCM0Q4
QkUwMEJCQjhFOCAvKiBERkdBcmd1bWVudHNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLApAQCAt
ODIyMiw3ICs4MjE1LDYgQEAKIAkJCQlDMjk4MUZEODE3QkFFRTRCMDBBM0JDOTggLyogREZHRGVz
aXJlZFdlYWtSZWZlcmVuY2VzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzY0MTU5MUEx
Q0MwMDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1
QTEyNzMxOTJEOUZERjAwODc2NEEzIC8qIERGR0RvZXNHQy5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjBGMTlFMTZCNzJBMEIwMDVERjk1QiAvKiBERkdFZGdlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOEYxNDMzMUFERjA5MDEwMEVENzkyQyAvKiBERkdFcG9jaC5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5h
bHlzaXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FuYWx5
c2lzLmgJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QW5hbHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHQW5hbHlz
aXNfaAotI2RlZmluZSBERkdBbmFseXNpc19oCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1jbGFzcyBHcmFwaDsKLQotLy8gVXNlIHRo
aXMgYXMgYSBtaXhpbiBmb3IgREZHIGFuYWx5c2VzLiBUaGUgYW5hbHlzaXMgaXRzZWxmIGltcGxl
bWVudHMgYSBwdWJsaWMKLS8vIGNvbXB1dGUoR3JhcGgmKSBtZXRob2QuIENsaWVudHMgY2FsbCBj
b21wdXRlSWZOZWNlc3NhcnkoKSB3aGVuIHRoZXkgd2FudAotLy8gcmVzdWx0cy4KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLWNsYXNzIEFuYWx5c2lzIHsKLXB1YmxpYzoKLSAgICBBbmFseXNpcygp
Ci0gICAgICAgIDogbV92YWxpZChmYWxzZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
aW52YWxpZGF0ZSgpCi0gICAgewotICAgICAgICBtX3ZhbGlkID0gZmFsc2U7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgY29tcHV0ZUlmTmVjZXNzYXJ5KEdyYXBoJiBncmFwaCkKLSAgICB7Ci0gICAg
ICAgIGlmIChtX3ZhbGlkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAvLyBJdCdzIGJl
c3QgdG8gcnVuIGRlcGVuZGVudCBhbmFseXNlcyBmcm9tIHRoaXMgbWV0aG9kLgotICAgICAgICBz
dGF0aWNfY2FzdDxUKj4odGhpcyktPmNvbXB1dGVEZXBlbmRlbmNpZXMoZ3JhcGgpOwotICAgICAg
ICAvLyBTZXQgdG8gdHJ1ZSBlYXJseSwgc2luY2UgdGhlIGFuYWx5c2lzIG1heSBjaG9vc2UgdG8g
Y2FsbCBpdHMgb3duIG1ldGhvZHMgaW4KLSAgICAgICAgLy8gY29tcHV0ZSgpIGFuZCBpdCBtYXkg
d2FudCB0byBBU1NFUlQoKSB2YWxpZGl0eSBpbiB0aG9zZSBtZXRob2RzLgotICAgICAgICBtX3Zh
bGlkID0gdHJ1ZTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpLT5jb21wdXRlKGdyYXBo
KTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV92YWxp
ZDsgfQotCi0gICAgLy8gT3ZlcnJpZGUgdGhpcyB0byBjb21wdXRlIGFueSBkZXBlbmRlbnQgYW5h
bHlzZXMuIFNlZQotICAgIC8vIE5hdHVyYWxMb29wczo6Y29tcHV0ZURlcGVuZGVuY2llcyhHcmFw
aCYpIGZvciBhbiBleGFtcGxlLiBUaGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQKLSAg
ICAvLyBpdCBtYWtlcyBkZWJ1ZyBkdW1wcyBpbiBjYXNlcyBvZiBlcnJvciB3b3JrIGEgYml0IGJl
dHRlciBiZWNhdXNlIHRoaXMgYW5hbHlzaXMgd291bGRuJ3QgeWV0Ci0gICAgLy8gYmUgcHJldGVu
ZGluZyB0byBiZSB2YWxpZC4KLSAgICB2b2lkIGNvbXB1dGVEZXBlbmRlbmNpZXMoR3JhcGgmKSB7
IH0KLQotcHJpdmF0ZToKLSAgICBib29sIG1fdmFsaWQ7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2VuZGlmIC8vIERGR0Fu
YWx5c2lzX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkcuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHQ0ZHX2gKKyNkZWZpbmUgREZHQ0ZHX2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0Jsb2Nr
TWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrU2V0LmgiCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBDRkcgewor
cHVibGljOgorICAgIHR5cGVkZWYgQmFzaWNCbG9jayogTm9kZTsKKyAgICB0eXBlZGVmIEJsb2Nr
U2V0IFNldDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBNYXAgPSBCbG9ja01hcDxU
PjsKKyAgICB0eXBlZGVmIEJsb2NrTGlzdCBMaXN0OworCisgICAgQ0ZHKEdyYXBoJiBncmFwaCkK
KyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgIHsKKyAgICB9CisKKyAgICBOb2RlIHJvb3Qo
KSB7IHJldHVybiBtX2dyYXBoLmJsb2NrKDApOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIE1hcDxUPiBuZXdNYXA8VD4oKSB7IHJldHVybiBCbG9ja01hcDxUPihtX2dyYXBoKTsg
fQorCisgICAgREZHOjpOb2RlOjpTdWNjZXNzb3JzSXRlcmFibGUgc3VjY2Vzc29ycyhOb2RlIG5v
ZGUpIHsgcmV0dXJuIG5vZGUtPnN1Y2Nlc3NvcnMoKTsgfQorICAgIEJhc2ljQmxvY2s6OlByZWRl
Y2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+cHJlZGVj
ZXNzb3JzOyB9CisKKyAgICB1bnNpZ25lZCBpbmRleChOb2RlIG5vZGUpIHsgcmV0dXJuIG5vZGUt
PmluZGV4OyB9CisgICAgTm9kZSBub2RlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2dyYXBo
LmJsb2NrKGluZGV4KTsgfQorICAgIHVuc2lnbmVkIG51bU5vZGVzKCkgeyByZXR1cm4gbV9ncmFw
aC5udW1CbG9ja3MoKTsgfQorCisgICAgUG9pbnRlckR1bXA8QmFzaWNCbG9jaz4gZHVtcChOb2Rl
IG5vZGUpIHsgcmV0dXJuIHBvaW50ZXJEdW1wKG5vZGUpOyB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG1fZ3JhcGguZHVtcChvdXQpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHQ0ZHX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5j
cHAJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NF
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAsNyArMzkwLDggQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKICAgICAgICAgCiAgICAgICAgIG1f
Z3JhcGguaW5pdGlhbGl6ZU5vZGVPd25lcnMoKTsKLSAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRv
cnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAgICBpZiAoIW1fZ3JhcGgubV9k
b21pbmF0b3JzKQorICAgICAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPERvbWluYXRvcnM+KG1fZ3JhcGgpOwogICAgICAgICAKICAgICAgICAgbV9wcmVPcmRl
ciA9IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkocmV2aXNpb24gMTkxODM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw0NzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
REZHRG9taW5hdG9ycy5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdC
bG9ja01hcElubGluZXMuaCIKLSNpbmNsdWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCi0jaW5jbHVk
ZSAiREZHR3JhcGguaCIKLSNpbmNsdWRlICJERkdOYWl2ZURvbWluYXRvcnMuaCIKLSNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotRG9t
aW5hdG9yczo6RG9taW5hdG9ycygpCi17Ci19Ci0KLURvbWluYXRvcnM6On5Eb21pbmF0b3JzKCkK
LXsKLX0KLQotbmFtZXNwYWNlIHsKLQotLy8gVGhpcyBpbXBsZW1lbnRzIExlbmdhdWVyIGFuZCBU
YXJqYW4ncyAiQSBGYXN0IEFsZ29yaXRobSBmb3IgRmluZGluZyBEb21pbmF0b3JzIGluIGEgRmxv
d2dyYXBoIgotLy8gKFRPUExBUyAxOTc5KS4gSXQgdXNlcyB0aGUgInNpbXBsZSIgaW1wbGVtZW50
YXRpb24gb2YgTElOSyBhbmQgRVZBTCwgd2hpY2ggeWllbGRzIGFuIE8obiBsb2cgbikKLS8vIHNv
bHV0aW9uLiBUaGUgZnVsbCBwYXBlciBpcyBsaW5rZWQgYmVsb3c7IHRoaXMgY29kZSBhdHRlbXB0
cyB0byBjbG9zZWx5IGZvbGxvdyB0aGUgYWxnb3JpdGhtIGFzCi0vLyBpdCBpcyBwcmVzZW50ZWQg
aW4gdGhlIHBhcGVyOyBpbiBwYXJ0aWN1bGFyIHNlY3Rpb25zIDMgYW5kIDQgYXMgd2VsbCBhcyBh
cHBlbmRpeCBCLgotLy8gaHR0cHM6Ly93d3cuY3MucHJpbmNldG9uLmVkdS9jb3Vyc2VzL2FyY2hp
dmUvZmFsbDAzL2NzNTI4L2hhbmRvdXRzL2ElMjBmYXN0JTIwYWxnb3JpdGhtJTIwZm9yJTIwZmlu
ZGluZy5wZGYKLS8vCi0vLyBUaGlzIGNvZGUgaXMgdmVyeSBzdWJ0bGUuIFRoZSBMZW5nYXVlci1U
YXJqYW4gYWxnb3JpdGhtIGlzIGluY3JlZGlibHkgZGVlcCB0byBiZWdpbiB3aXRoLiBUaGUKLS8v
IGdvYWwgb2YgdGhpcyBjb2RlIGlzIHRvIGZvbGxvdyB0aGUgY29kZSBpbiB0aGUgcGFwZXIsIGhv
d2V2ZXIgb3VyIGltcGxlbWVudGF0aW9uIG11c3QgZGV2aWF0ZQotLy8gZnJvbSB0aGUgcGFwZXIg
d2hlbiBpdCBjb21lcyB0byByZWN1cnNpb24uIFRoZSBhdXRob3JzIGhhZCB1c2VkIHJlY3Vyc2lv
biB0byBpbXBsZW1lbnQgREZTLCBhbmQKLS8vIGFsc28gdG8gaW1wbGVtZW50IHRoZSAic2ltcGxl
IiBFVkFMLiBXZSBjb252ZXJ0IGJvdGggb2YgdGhvc2UgaW50byB3b3JrbGlzdC1iYXNlZCBzb2x1
dGlvbnMuCi0vLyBGaW5hbGx5LCBvbmNlIHRoZSBhbGdvcml0aG0gZ2l2ZXMgdXMgaW1tZWRpYXRl
IGRvbWluYXRvcnMsIHdlIGltcGxlbWVudCBkb21pbmFuY2UgdGVzdHMgYnkKLS8vIHdhbGtpbmcg
dGhlIGRvbWluYXRvciB0cmVlIGFuZCBjb21wdXRpbmcgcHJlIGFuZCBwb3N0IG51bWJlcnMuIFdl
IHRoZW4gdXNlIHRoZSByYW5nZSBpbmNsdXNpb24KLS8vIGNoZWNrIHRyaWNrIHRoYXQgd2FzIGZp
cnN0IGRpc2NvdmVyZWQgYnkgUGF1bCBGLiBEaWV0eiBpbiAxOTgyIGluICJNYWludGFpbmluZyBv
cmRlciBpbiBhIGxpbmtlZAotLy8gbGlzdCIgKHNlZSBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlv
bi5jZm0/aWQ9ODAyMTg0KS4KLQotY2xhc3MgTGVuZ2F1ZXJUYXJqYW4gewotcHVibGljOgotICAg
IExlbmdhdWVyVGFyamFuKEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQot
ICAgICAgICAsIG1fZGF0YShncmFwaCkKLSAgICB7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAg
ICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIG1fZGF0YVtibG9ja10ubGFiZWwgPSBibG9jazsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICB2b2lkIGNvbXB1dGUoKQotICAgIHsKLSAgICAgICAgY29tcHV0ZURlcHRoRmlyc3RQcmVO
dW1iZXJpbmcoKTsgLy8gU3RlcCAxLgotICAgICAgICBjb21wdXRlU2VtaURvbWluYXRvcnNBbmRJ
bXBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcHMgMiBhbmQgMy4KLSAgICAgICAg
Y29tcHV0ZUV4cGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygpOyAvLyBTdGVwIDQuCi0gICAgfQot
ICAgIAotICAgIEJhc2ljQmxvY2sqIGltbWVkaWF0ZURvbWluYXRvcihCYXNpY0Jsb2NrKiBibG9j
aykKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RhdGFbYmxvY2tdLmRvbTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBjb21wdXRlRGVwdGhGaXJzdFByZU51bWJlcmluZygpCi0gICAgewot
ICAgICAgICAvLyBVc2UgYSBibG9jayB3b3JrbGlzdCB0aGF0IGFsc28gdHJhY2tzIHRoZSBpbmRl
eCBpbnNpZGUgdGhlIHN1Y2Nlc3NvciBsaXN0LiBUaGlzIGlzCi0gICAgICAgIC8vIG5lY2Vzc2Fy
eSBmb3IgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndCBhdHRlbXB0IHRvIHZpc2l0IGEgc3VjY2Vzc29y
IHVudGlsIHRoZSBwcmV2aW91cwotICAgICAgICAvLyBzdWNjZXNzb3JzIHRoYXQgd2UgaGFkIHZp
c2l0ZWQgYXJlIGZ1bGx5IHByb2Nlc3NlZC4gVGhpcyBlbmRzIHVwIGJlaW5nIHJldmVhbGVkIGlu
IHRoZQotICAgICAgICAvLyBvdXRwdXQgb2YgdGhpcyBtZXRob2QgYmVjYXVzZSB0aGUgZmlyc3Qg
dGltZSB3ZSBzZWUgYW4gZWRnZSB0byBhIGJsb2NrLCB3ZSBzZXQgdGhlCi0gICAgICAgIC8vIGJs
b2NrJ3MgcGFyZW50LiBTbywgaWYgd2UgaGF2ZToKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQSAt
PiBCCi0gICAgICAgIC8vIEEgLT4gQwotICAgICAgICAvLyBCIC0+IEMKLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gQW5kIHdlJ3JlIHByb2Nlc3NpbmcgQSwgdGhlbiB3ZSB3YW50IHRvIGVuc3VyZSB0
aGF0IGlmIHdlIHNlZSBBLT5CIGZpcnN0IChhbmQgaGVuY2Ugc2V0Ci0gICAgICAgIC8vIEIncyBw
cmVudW1iZXIgYmVmb3JlIHdlIHNldCBDJ3MpIHRoZW4gd2UgYWxzbyBlbmQgdXAgc2V0dGluZyBD
J3MgcGFyZW50IHRvIEIgYnkgdmlydHVlCi0gICAgICAgIC8vIG9mIG5vdCBub3RpY2luZyBBLT5D
IHVudGlsIHdlJ3JlIGRvbmUgcHJvY2Vzc2luZyBCLgotICAgICAgICAKLSAgICAgICAgRXh0ZW5k
ZWRCbG9ja1dvcmtsaXN0PHVuc2lnbmVkPiB3b3JrbGlzdDsKLSAgICAgICAgd29ya2xpc3QucHVz
aChtX2dyYXBoLmJsb2NrKDApLCAwKTsKLSAgICAgICAgCi0gICAgICAgIHdoaWxlIChCbG9ja1dp
dGg8dW5zaWduZWQ+IGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgewotICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBpdGVtLm5vZGU7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdWNjZXNzb3JJ
bmRleCA9IGl0ZW0uZGF0YTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgaW5pdGlh
bGx5IHB1c2ggd2l0aCBzdWNjZXNzb3JJbmRleCA9IDAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9y
IG5vdCB3ZSBoYXZlIGFueQotICAgICAgICAgICAgLy8gc3VjY2Vzc29ycy4gVGhpcyBpcyBzbyB0
aGF0IHdlIGNhbiBhc3NpZ24gb3VyIHByZW51bWJlci4gU3Vic2VxdWVudGx5IHdlIGdldCBwdXNo
ZWQKLSAgICAgICAgICAgIC8vIHdpdGggaGlnaGVyIHN1Y2Nlc3NvckluZGV4IHZhbHVlcywgYnV0
IG9ubHkgaWYgdGhleSBhcmUgaW4gcmFuZ2UuCi0gICAgICAgICAgICBBU1NFUlQoIXN1Y2Nlc3Nv
ckluZGV4IHx8IHN1Y2Nlc3NvckluZGV4IDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSk7Ci0KLSAg
ICAgICAgICAgIGlmICghc3VjY2Vzc29ySW5kZXgpIHsKLSAgICAgICAgICAgICAgICBtX2RhdGFb
YmxvY2tdLnNlbWlOdW1iZXIgPSBtX2Jsb2NrQnlQcmVOdW1iZXIuc2l6ZSgpOwotICAgICAgICAg
ICAgICAgIG1fYmxvY2tCeVByZU51bWJlci5hcHBlbmQoYmxvY2spOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3VjY2Vzc29ySW5kZXggPCBibG9jay0+bnVt
U3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbmV4dFN1Y2Nlc3Nvcklu
ZGV4ID0gc3VjY2Vzc29ySW5kZXggKyAxOwotICAgICAgICAgICAgICAgIGlmIChuZXh0U3VjY2Vz
c29ySW5kZXggPCBibG9jay0+bnVtU3VjY2Vzc29ycygpKQotICAgICAgICAgICAgICAgICAgICB3
b3JrbGlzdC5mb3JjZVB1c2goYmxvY2ssIG5leHRTdWNjZXNzb3JJbmRleCk7Ci0KLSAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3Ioc3Vj
Y2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAgIGlmICh3b3JrbGlzdC5wdXNoKHN1Y2Nlc3Nv
ckJsb2NrLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgbV9kYXRhW3N1Y2Nlc3NvckJsb2NrXS5w
YXJlbnQgPSBibG9jazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXB1dGVTZW1pRG9taW5hdG9yc0FuZEltcGxpY2l0SW1tZWRpYXRlRG9taW5hdG9y
cygpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGN1cnJlbnRQcmVOdW1iZXIgPSBtX2Js
b2NrQnlQcmVOdW1iZXIuc2l6ZSgpOyBjdXJyZW50UHJlTnVtYmVyLS0gPiAxOykgewotICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2NrQnlQcmVOdW1iZXJbY3VycmVudFByZU51
bWJlcl07Ci0gICAgICAgICAgICBCbG9ja0RhdGEmIGJsb2NrRGF0YSA9IG1fZGF0YVtibG9ja107
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFN0ZXAgMjoKLSAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogcHJlZGVjZXNzb3JCbG9jayA6IGJsb2NrLT5wcmVkZWNlc3NvcnMpIHsKLSAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBpbnRlcm1lZGlhdGVCbG9jayA9IGV2YWwocHJlZGVj
ZXNzb3JCbG9jayk7Ci0gICAgICAgICAgICAgICAgYmxvY2tEYXRhLnNlbWlOdW1iZXIgPSBzdGQ6
Om1pbigKLSAgICAgICAgICAgICAgICAgICAgbV9kYXRhW2ludGVybWVkaWF0ZUJsb2NrXS5zZW1p
TnVtYmVyLCBibG9ja0RhdGEuc2VtaU51bWJlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBidWNrZXRQcmVOdW1iZXIgPSBibG9ja0RhdGEuc2VtaU51bWJlcjsKLSAgICAg
ICAgICAgIEFTU0VSVChidWNrZXRQcmVOdW1iZXIgPD0gY3VycmVudFByZU51bWJlcik7Ci0gICAg
ICAgICAgICBtX2RhdGFbbV9ibG9ja0J5UHJlTnVtYmVyW2J1Y2tldFByZU51bWJlcl1dLmJ1Y2tl
dC5hcHBlbmQoYmxvY2spOwotICAgICAgICAgICAgbGluayhibG9ja0RhdGEucGFyZW50LCBibG9j
ayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFN0ZXAgMzoKLSAgICAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogc2VtaURvbWluZWUgOiBtX2RhdGFbYmxvY2tEYXRhLnBhcmVudF0uYnVj
a2V0KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcG9zc2libGVEb21pbmF0b3IgPSBl
dmFsKHNlbWlEb21pbmVlKTsKLSAgICAgICAgICAgICAgICBCbG9ja0RhdGEmIHNlbWlEb21pbmVl
RGF0YSA9IG1fZGF0YVtzZW1pRG9taW5lZV07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fYmxv
Y2tCeVByZU51bWJlcltzZW1pRG9taW5lZURhdGEuc2VtaU51bWJlcl0gPT0gYmxvY2tEYXRhLnBh
cmVudCk7Ci0gICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBwb3NzaWJsZURvbWluYXRvckRhdGEg
PSBtX2RhdGFbcG9zc2libGVEb21pbmF0b3JdOwotICAgICAgICAgICAgICAgIGlmIChwb3NzaWJs
ZURvbWluYXRvckRhdGEuc2VtaU51bWJlciA8IHNlbWlEb21pbmVlRGF0YS5zZW1pTnVtYmVyKQot
ICAgICAgICAgICAgICAgICAgICBzZW1pRG9taW5lZURhdGEuZG9tID0gcG9zc2libGVEb21pbmF0
b3I7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzZW1pRG9taW5l
ZURhdGEuZG9tID0gYmxvY2tEYXRhLnBhcmVudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG1fZGF0YVtibG9ja0RhdGEucGFyZW50XS5idWNrZXQuY2xlYXIoKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvbXB1dGVFeHBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKQot
ICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBjdXJyZW50UHJlTnVtYmVyID0gMTsgY3VycmVu
dFByZU51bWJlciA8IG1fYmxvY2tCeVByZU51bWJlci5zaXplKCk7ICsrY3VycmVudFByZU51bWJl
cikgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2NrQnlQcmVOdW1iZXJb
Y3VycmVudFByZU51bWJlcl07Ci0gICAgICAgICAgICBCbG9ja0RhdGEmIGJsb2NrRGF0YSA9IG1f
ZGF0YVtibG9ja107Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChibG9ja0RhdGEuZG9t
ICE9IG1fYmxvY2tCeVByZU51bWJlcltibG9ja0RhdGEuc2VtaU51bWJlcl0pCi0gICAgICAgICAg
ICAgICAgYmxvY2tEYXRhLmRvbSA9IG1fZGF0YVtibG9ja0RhdGEuZG9tXS5kb207Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBsaW5rKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxv
Y2sqIHRvKQotICAgIHsKLSAgICAgICAgbV9kYXRhW3RvXS5hbmNlc3RvciA9IGZyb207Ci0gICAg
fQotICAgIAotICAgIEJhc2ljQmxvY2sqIGV2YWwoQmFzaWNCbG9jayogYmxvY2spCi0gICAgewot
ICAgICAgICBpZiAoIW1fZGF0YVtibG9ja10uYW5jZXN0b3IpCi0gICAgICAgICAgICByZXR1cm4g
YmxvY2s7Ci0gICAgICAgIAotICAgICAgICBjb21wcmVzcyhibG9jayk7Ci0gICAgICAgIHJldHVy
biBtX2RhdGFbYmxvY2tdLmxhYmVsOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXByZXNzKEJh
c2ljQmxvY2sqIGluaXRpYWxCbG9jaykKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgd2FzIG1lYW50
IHRvIGJlIGEgcmVjdXJzaXZlIGZ1bmN0aW9uLCBidXQgd2UgZG9uJ3QgbGlrZSByZWN1cnNpb24g
YmVjYXVzZSB3ZSBkb24ndAotICAgICAgICAvLyB3YW50IHRvIGJsb3cgdGhlIHN0YWNrLiBUaGUg
b3JpZ2luYWwgZnVuY3Rpb24gd2lsbCBjYWxsIGNvbXByZXNzKCkgcmVjdXJzaXZlbHkgb24gdGhl
Ci0gICAgICAgIC8vIGFuY2VzdG9yIG9mIGFueXRoaW5nIHRoYXQgaGFzIGFuIGFuY2VzdG9yLiBT
bywgd2UgcG9wdWxhdGUgb3VyIHdvcmtsaXN0IHdpdGggdGhlCi0gICAgICAgIC8vIHJlY3Vyc2l2
ZSBhbmNlc3RvcnMgb2YgaW5pdGlhbEJsb2NrLiBUaGVuIHdlIHByb2Nlc3MgdGhlIGxpc3Qgc3Rh
cnRpbmcgZnJvbSB0aGUgYmxvY2sKLSAgICAgICAgLy8gdGhhdCBpcyBmdXJ0aGVzdCB1cCB0aGUg
YW5jZXN0b3IgY2hhaW4uCi0gICAgICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBhbmNlc3RvciA9
IG1fZGF0YVtpbml0aWFsQmxvY2tdLmFuY2VzdG9yOwotICAgICAgICBBU1NFUlQoYW5jZXN0b3Ip
OwotICAgICAgICBpZiAoIW1fZGF0YVthbmNlc3Rvcl0uYW5jZXN0b3IpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiBzdGFjazsK
LSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA9IGluaXRpYWxCbG9jazsgYmxvY2s7IGJs
b2NrID0gbV9kYXRhW2Jsb2NrXS5hbmNlc3RvcikKLSAgICAgICAgICAgIHN0YWNrLmFwcGVuZChi
bG9jayk7Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYmxvY2tzIHRo
YXQgaGF2ZSBhbiBhbmNlc3RvciB0aGF0IGhhcyBhbiBhbmNlc3Rvci4gVGhlIGxhc3QgdHdvCi0g
ICAgICAgIC8vIGVsZW1lbnRzIGluIHRoZSBzdGFjayB3b24ndCBzYXRpc2Z5IHRoaXMgcHJvcGVy
dHkuCi0gICAgICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7Ci0gICAgICAgIEFTU0VSVCgh
bV9kYXRhW3N0YWNrW3N0YWNrLnNpemUoKSAtIDFdXS5hbmNlc3Rvcik7Ci0gICAgICAgIEFTU0VS
VCghbV9kYXRhW21fZGF0YVtzdGFja1tzdGFjay5zaXplKCkgLSAyXV0uYW5jZXN0b3JdLmFuY2Vz
dG9yKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YWNrLnNpemUoKSAt
IDI7IGktLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gc3RhY2tbaV07Ci0g
ICAgICAgICAgICBCYXNpY0Jsb2NrKiYgbGFiZWxPZkJsb2NrID0gbV9kYXRhW2Jsb2NrXS5sYWJl
bDsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqJiBhbmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFbYmxv
Y2tdLmFuY2VzdG9yOwotICAgICAgICAgICAgQVNTRVJUKGFuY2VzdG9yT2ZCbG9jayk7Ci0gICAg
ICAgICAgICBBU1NFUlQobV9kYXRhW2FuY2VzdG9yT2ZCbG9ja10uYW5jZXN0b3IpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBsYWJlbE9mQW5jZXN0b3JPZkJsb2NrID0g
bV9kYXRhW2FuY2VzdG9yT2ZCbG9ja10ubGFiZWw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChtX2RhdGFbbGFiZWxPZkFuY2VzdG9yT2ZCbG9ja10uc2VtaU51bWJlciA8IG1fZGF0YVts
YWJlbE9mQmxvY2tdLnNlbWlOdW1iZXIpCi0gICAgICAgICAgICAgICAgbGFiZWxPZkJsb2NrID0g
bGFiZWxPZkFuY2VzdG9yT2ZCbG9jazsKLSAgICAgICAgICAgIGFuY2VzdG9yT2ZCbG9jayA9IG1f
ZGF0YVthbmNlc3Rvck9mQmxvY2tdLmFuY2VzdG9yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
c3RydWN0IEJsb2NrRGF0YSB7Ci0gICAgICAgIEJsb2NrRGF0YSgpCi0gICAgICAgICAgICA6IHBh
cmVudChudWxscHRyKQotICAgICAgICAgICAgLCBwcmVOdW1iZXIoVUlOVF9NQVgpCi0gICAgICAg
ICAgICAsIHNlbWlOdW1iZXIoVUlOVF9NQVgpCi0gICAgICAgICAgICAsIGFuY2VzdG9yKG51bGxw
dHIpCi0gICAgICAgICAgICAsIGxhYmVsKG51bGxwdHIpCi0gICAgICAgICAgICAsIGRvbShudWxs
cHRyKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEJhc2ljQmxvY2sq
IHBhcmVudDsKLSAgICAgICAgdW5zaWduZWQgcHJlTnVtYmVyOwotICAgICAgICB1bnNpZ25lZCBz
ZW1pTnVtYmVyOwotICAgICAgICBCYXNpY0Jsb2NrKiBhbmNlc3RvcjsKLSAgICAgICAgQmFzaWNC
bG9jayogbGFiZWw7Ci0gICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYnVja2V0OwotICAgICAg
ICBCYXNpY0Jsb2NrKiBkb207Ci0gICAgfTsKLSAgICAKLSAgICBHcmFwaCYgbV9ncmFwaDsKLSAg
ICBCbG9ja01hcDxCbG9ja0RhdGE+IG1fZGF0YTsKLSAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1f
YmxvY2tCeVByZU51bWJlcjsKLX07Ci0KLXN0cnVjdCBWYWxpZGF0aW9uQ29udGV4dCB7Ci0gICAg
VmFsaWRhdGlvbkNvbnRleHQoR3JhcGgmIGdyYXBoLCBEb21pbmF0b3JzJiBkb21pbmF0b3JzKQot
ICAgICAgICA6IGdyYXBoKGdyYXBoKQotICAgICAgICAsIGRvbWluYXRvcnMoZG9taW5hdG9ycykK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgcmVwb3J0RXJyb3IoQmFzaWNCbG9jayogZnJv
bSwgQmFzaWNCbG9jayogdG8sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi0gICAgewotICAgICAgICBF
cnJvciBlcnJvcjsKLSAgICAgICAgZXJyb3IuZnJvbSA9IGZyb207Ci0gICAgICAgIGVycm9yLnRv
ID0gdG87Ci0gICAgICAgIGVycm9yLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgICAgICBlcnJvcnMu
YXBwZW5kKGVycm9yKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBoYW5kbGVFcnJvcnMoKQotICAg
IHsKLSAgICAgICAgaWYgKGVycm9ycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgICAgICBzdGFydENyYXNoaW5nKCk7Ci0gICAgICAgIGRhdGFMb2coIkRGRyBE
T01JTkFUT1IgVkFMSURBVElPTiBGQUlMRUQ6XG4iKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsK
LSAgICAgICAgZGF0YUxvZygiRm9yIGJsb2NrIGRvbWluYXRpb24gcmVsYXRpb25zaGlwczpcbiIp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXJyb3JzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICIgICAgIiwgcG9pbnRlckR1
bXAoZXJyb3JzW2ldLmZyb20pLCAiIC0+ICIsIHBvaW50ZXJEdW1wKGVycm9yc1tpXS50byksCi0g
ICAgICAgICAgICAgICAgIiAoIiwgZXJyb3JzW2ldLm1lc3NhZ2UsICIpXG4iKTsKLSAgICAgICAg
fQotICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICBkYXRhTG9nKCJDb250cm9sIGZsb3cg
Z3JhcGg6XG4iKTsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAg
IGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBkYXRh
TG9nKCIgICAgQmxvY2sgIyIsIGJsb2NrSW5kZXgsICI6IHN1Y2Nlc3NvcnMgPSBbIik7Ci0gICAg
ICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgKytpKQotICAgICAgICAgICAgICAgIGRh
dGFMb2coY29tbWEsICpibG9jay0+c3VjY2Vzc29yKGkpKTsKLSAgICAgICAgICAgIGRhdGFMb2co
Il0sIHByZWRlY2Vzc29ycyA9IFsiKTsKLSAgICAgICAgICAgIGNvbW1hID0gQ29tbWFQcmludGVy
KCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnByZWRlY2Vz
c29ycy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCAqYmxvY2st
PnByZWRlY2Vzc29yc1tpXSk7Ci0gICAgICAgICAgICBkYXRhTG9nKCJdXG4iKTsKLSAgICAgICAg
fQotICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICBkYXRhTG9nKCJMZW5nYXVlci1UYXJq
YW4gRG9taW5hdG9yczpcbiIpOwotICAgICAgICBkYXRhTG9nKGRvbWluYXRvcnMpOwotICAgICAg
ICBkYXRhTG9nKCJcbiIpOwotICAgICAgICBkYXRhTG9nKCJOYWl2ZSBEb21pbmF0b3JzOlxuIik7
Ci0gICAgICAgIG5haXZlRG9taW5hdG9ycy5kdW1wKGdyYXBoLCBXVEY6OmRhdGFGaWxlKCkpOwot
ICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICBkYXRhTG9nKCJHcmFwaCBhdCB0aW1lIG9m
IGZhaWx1cmU6XG4iKTsKLSAgICAgICAgZ3JhcGguZHVtcCgpOwotICAgICAgICBkYXRhTG9nKCJc
biIpOwotICAgICAgICBkYXRhTG9nKCJERkcgRE9NSU5BVE9SIFZBTElEQVRJT04gRkFJTElFRCFc
biIpOwotICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAgICAKLSAgICBHcmFwaCYgZ3JhcGg7Ci0g
ICAgRG9taW5hdG9ycyYgZG9taW5hdG9yczsKLSAgICBOYWl2ZURvbWluYXRvcnMgbmFpdmVEb21p
bmF0b3JzOwotICAgIAotICAgIHN0cnVjdCBFcnJvciB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGZy
b207Ci0gICAgICAgIEJhc2ljQmxvY2sqIHRvOwotICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdl
OwotICAgIH07Ci0gICAgCi0gICAgVmVjdG9yPEVycm9yPiBlcnJvcnM7Ci19OwotCi19IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFw
aCkKLXsKLSAgICBMZW5nYXVlclRhcmphbiBsZW5nYXVlclRhcmphbihncmFwaCk7Ci0gICAgbGVu
Z2F1ZXJUYXJqYW4uY29tcHV0ZSgpOwotCi0gICAgbV9kYXRhID0gQmxvY2tNYXA8QmxvY2tEYXRh
PihncmFwaCk7Ci0gICAgCi0gICAgLy8gRnJvbSBoZXJlIHdlIHdhbnQgdG8gYnVpbGQgYSBzcGFu
bmluZyB0cmVlIHdpdGggYm90aCB1cHdhcmQgYW5kIGRvd253YXJkIGxpbmtzIGFuZCB3ZSB3YW50
Ci0gICAgLy8gdG8gZG8gYSBzZWFyY2ggb3ZlciB0aGlzIHRyZWUgdG8gY29tcHV0ZSBwcmUgYW5k
IHBvc3QgbnVtYmVycyB0aGF0IGNhbiBiZSB1c2VkIGZvciBkb21pbmFuY2UKLSAgICAvLyB0ZXN0
cy4KLSAgICAKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgCi0gICAgICAgIEJhc2ljQmxvY2sqIGlkb21CbG9jayA9IGxlbmdhdWVy
VGFyamFuLmltbWVkaWF0ZURvbWluYXRvcihibG9jayk7Ci0gICAgICAgIG1fZGF0YVtibG9ja10u
aWRvbVBhcmVudCA9IGlkb21CbG9jazsKLSAgICAgICAgaWYgKGlkb21CbG9jaykKLSAgICAgICAg
ICAgIG1fZGF0YVtpZG9tQmxvY2tdLmlkb21LaWRzLmFwcGVuZChibG9jayk7Ci0gICAgfQotICAg
IAotICAgIHVuc2lnbmVkIG5leHRQcmVOdW1iZXIgPSAwOwotICAgIHVuc2lnbmVkIG5leHRQb3N0
TnVtYmVyID0gMDsKLSAgICAKLSAgICAvLyBQbGFpbiBzdGFjay1iYXNlZCB3b3JrbGlzdCBiZWNh
dXNlIHdlIGFyZSBndWFyYW50ZWVkIHRvIHNlZSBlYWNoIGJsb2NrIGV4YWN0bHkgb25jZSBhbnl3
YXkuCi0gICAgVmVjdG9yPEJsb2NrV2l0aE9yZGVyPiB3b3JrbGlzdDsKLSAgICB3b3JrbGlzdC5h
cHBlbmQoQmxvY2tXaXRoT3JkZXIoZ3JhcGguYmxvY2soMCksIFZpc2l0T3JkZXI6OlByZSkpOwot
ICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEJsb2NrV2l0aE9yZGVy
IGl0ZW0gPSB3b3JrbGlzdC50YWtlTGFzdCgpOwotICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIp
IHsKLSAgICAgICAgY2FzZSBWaXNpdE9yZGVyOjpQcmU6Ci0gICAgICAgICAgICBtX2RhdGFbaXRl
bS5ub2RlXS5wcmVOdW1iZXIgPSBuZXh0UHJlTnVtYmVyKys7Ci0gICAgICAgICAgICB3b3JrbGlz
dC5hcHBlbmQoQmxvY2tXaXRoT3JkZXIoaXRlbS5ub2RlLCBWaXNpdE9yZGVyOjpQb3N0KSk7Ci0g
ICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGtpZCA6IG1fZGF0YVtpdGVtLm5vZGVdLmlkb21L
aWRzKQotICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChCbG9ja1dpdGhPcmRlcihraWQs
IFZpc2l0T3JkZXI6OlByZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmlz
aXRPcmRlcjo6UG9zdDoKLSAgICAgICAgICAgIG1fZGF0YVtpdGVtLm5vZGVdLnBvc3ROdW1iZXIg
PSBuZXh0UG9zdE51bWJlcisrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgLy8gQ2hlY2sg
b3VyIGRvbWluYXRvciBjYWxjdWxhdGlvbjoKLSAgICAgICAgLy8gMSkgQ2hlY2sgdGhhdCBvdXIg
cmFuZ2UtYmFzZWQgYW5jZXN0cnkgdGVzdCBpcyB0aGUgc2FtZSBhcyBhIG5haXZlIGFuY2VzdHJ5
IHRlc3QuCi0gICAgICAgIC8vIDIpIENoZWNrIHRoYXQgb3VyIG5vdGlvbiBvZiB3aG8gZG9taW5h
dGVzIHdob20gaXMgaWRlbnRpY2FsIHRvIGEgbmFpdmUgKG5vdAotICAgICAgICAvLyAgICBMZW5n
YXVlci1UYXJqYW4pIGRvbWluYXRvciBjYWxjdWxhdGlvbi4KLSAgICAgICAgCi0gICAgICAgIFZh
bGlkYXRpb25Db250ZXh0IGNvbnRleHQoZ3JhcGgsICp0aGlzKTsKLSAgICAgICAgY29udGV4dC5u
YWl2ZURvbWluYXRvcnMuY29tcHV0ZShncmFwaCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJs
b2NrSW5kZXggZnJvbUJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgZnJvbUJsb2NrSW5k
ZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGZyb21CbG9jayA9IGdyYXBoLmJsb2Nr
KGZyb21CbG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghZnJvbUJsb2NrIHx8IG1fZGF0YVtm
cm9tQmxvY2tdLnByZU51bWJlciA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCB0b0Jsb2NrSW5kZXggPSBncmFwaC5udW1C
bG9ja3MoKTsgdG9CbG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
dG9CbG9jayA9IGdyYXBoLmJsb2NrKHRvQmxvY2tJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCF0b0Jsb2NrIHx8IG1fZGF0YVt0b0Jsb2NrXS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChkb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSAhPSBuYWl2ZURvbWluYXRlcyhm
cm9tQmxvY2ssIHRvQmxvY2spKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydEVy
cm9yKGZyb21CbG9jaywgdG9CbG9jaywgIlJhbmdlLWJhc2VkIGRvbWluYXRpb24gY2hlY2sgaXMg
YnJva2VuIik7Ci0gICAgICAgICAgICAgICAgaWYgKGRvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxv
Y2spICE9IGNvbnRleHQubmFpdmVEb21pbmF0b3JzLmRvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxv
Y2spKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydEVycm9yKGZyb21CbG9jaywg
dG9CbG9jaywgIkxlbmdhdWVyLVRhcmphbiBkb21pbmF0aW9uIGlzIGJyb2tlbiIpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjb250ZXh0LmhhbmRsZUVycm9y
cygpOwotICAgIH0KLX0KLQotQmxvY2tTZXQgRG9taW5hdG9yczo6c3RyaWN0RG9taW5hdG9yc09m
KEJhc2ljQmxvY2sqIHRvKSBjb25zdAotewotICAgIEJsb2NrU2V0IHJlc3VsdDsKLSAgICBmb3JB
bGxTdHJpY3REb21pbmF0b3JzT2YodG8sIEJsb2NrQWRkZXIocmVzdWx0KSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotQmxvY2tTZXQgRG9taW5hdG9yczo6ZG9taW5hdG9yc09mKEJhc2ljQmxv
Y2sqIHRvKSBjb25zdAotewotICAgIEJsb2NrU2V0IHJlc3VsdDsKLSAgICBmb3JBbGxEb21pbmF0
b3JzT2YodG8sIEJsb2NrQWRkZXIocmVzdWx0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
QmxvY2tTZXQgRG9taW5hdG9yczo6YmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeShCYXNpY0Jsb2Nr
KiBmcm9tKSBjb25zdAotewotICAgIEJsb2NrU2V0IHJlc3VsdDsKLSAgICBmb3JBbGxCbG9ja3NT
dHJpY3RseURvbWluYXRlZEJ5KGZyb20sIEJsb2NrQWRkZXIocmVzdWx0KSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotQmxvY2tTZXQgRG9taW5hdG9yczo6YmxvY2tzRG9taW5hdGVkQnkoQmFz
aWNCbG9jayogZnJvbSkgY29uc3QKLXsKLSAgICBCbG9ja1NldCByZXN1bHQ7Ci0gICAgZm9yQWxs
QmxvY2tzRG9taW5hdGVkQnkoZnJvbSwgQmxvY2tBZGRlcihyZXN1bHQpKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1CbG9ja1NldCBEb21pbmF0b3JzOjpkb21pbmFuY2VGcm9udGllck9mKEJh
c2ljQmxvY2sqIGZyb20pIGNvbnN0Ci17Ci0gICAgQmxvY2tTZXQgcmVzdWx0OwotICAgIGZvckFs
bEJsb2Nrc0luRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoZnJvbSwgQmxvY2tBZGRlcihyZXN1bHQp
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1CbG9ja1NldCBEb21pbmF0b3JzOjppdGVyYXRl
ZERvbWluYW5jZUZyb250aWVyT2YoY29uc3QgQmxvY2tMaXN0JiBmcm9tKSBjb25zdAotewotICAg
IEJsb2NrU2V0IHJlc3VsdDsKLSAgICBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJv
bnRpZXJPZkltcGwoZnJvbSwgQmxvY2tBZGRlcihyZXN1bHQpKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1ib29sIERvbWluYXRvcnM6Om5haXZlRG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20s
IEJhc2ljQmxvY2sqIHRvKSBjb25zdAotewotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgPSB0
bzsgYmxvY2s7IGJsb2NrID0gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50KSB7Ci0gICAgICAgIGlm
IChibG9jayA9PSBmcm9tKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBEb21pbmF0b3JzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Ci17Ci0gICAgaWYgKCFpc1ZhbGlkKCkpIHsKLSAgICAgICAgb3V0LnByaW50KCIgICAg
Tm90IFZhbGlkLlxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9kYXRhLnNpemUoKTsgKyti
bG9ja0luZGV4KSB7Ci0gICAgICAgIGlmIChtX2RhdGFbYmxvY2tJbmRleF0ucHJlTnVtYmVyID09
IFVJTlRfTUFYKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBvdXQu
cHJpbnQoIiAgICBCbG9jayAjIiwgYmxvY2tJbmRleCwgIjogaWRvbSA9ICIsIHBvaW50ZXJEdW1w
KG1fZGF0YVtibG9ja0luZGV4XS5pZG9tUGFyZW50KSwgIiwgaWRvbUtpZHMgPSBbIik7Ci0gICAg
ICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgKm1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkc1tpXSk7Ci0gICAgICAg
IG91dC5wcmludCgiXSwgcHJlL3Bvc3QgPSAiLCBtX2RhdGFbYmxvY2tJbmRleF0ucHJlTnVtYmVy
LCAiLyIsIG1fZGF0YVtibG9ja0luZGV4XS5wb3N0TnVtYmVyLCAiXG4iKTsKLSAgICB9Ci19Ci0K
LX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQot
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkocmV2aXNp
b24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDE5MCArMjgsMjYgQEAKIAogI2lmIEVOQUJMRShERkdfSklU
KQogCi0jaW5jbHVkZSAiREZHQW5hbHlzaXMuaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgi
CiAjaW5jbHVkZSAiREZHQmxvY2tNYXAuaCIKICNpbmNsdWRlICJERkdCbG9ja1NldC5oIgorI2lu
Y2x1ZGUgIkRGR0NGRy5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCisjaW5jbHVkZSA8d3RmL0RvbWluYXRvcnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKLWNsYXNzIEdyYXBoOwotCi1jbGFzcyBEb21pbmF0b3JzIDogcHVi
bGljIEFuYWx5c2lzPERvbWluYXRvcnM+IHsKK2NsYXNzIERvbWluYXRvcnMgOiBXVEY6OkRvbWlu
YXRvcnM8Q0ZHPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG9taW5hdG9ycyk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRG9taW5hdG9ycygpOwotICAg
IH5Eb21pbmF0b3JzKCk7Ci0gICAgCi0gICAgdm9pZCBjb21wdXRlKEdyYXBoJik7Ci0gICAgCi0g
ICAgYm9vbCBzdHJpY3RseURvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0
bykgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgICAgICByZXR1
cm4gbV9kYXRhW3RvXS5wcmVOdW1iZXIgPiBtX2RhdGFbZnJvbV0ucHJlTnVtYmVyCi0gICAgICAg
ICAgICAmJiBtX2RhdGFbdG9dLnBvc3ROdW1iZXIgPCBtX2RhdGFbZnJvbV0ucG9zdE51bWJlcjsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBkb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNC
bG9jayogdG8pIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZnJvbSA9PSB0byB8fCBzdHJp
Y3RseURvbWluYXRlcyhmcm9tLCB0byk7Ci0gICAgfQotICAgIAotICAgIEJhc2ljQmxvY2sqIGlt
bWVkaWF0ZURvbWluYXRvck9mKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fZGF0YVtibG9ja10uaWRvbVBhcmVudDsKLSAgICB9Ci0gICAgCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbFN0cmljdERvbWluYXRvcnNP
ZihCYXNpY0Jsb2NrKiB0bywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgPSBtX2RhdGFbdG9dLmlkb21QYXJlbnQ7IGJs
b2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10uaWRvbVBhcmVudCkKLSAgICAgICAgICAgIGZ1bmN0
b3IoYmxvY2spOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgot
ICAgIHZvaWQgZm9yQWxsRG9taW5hdG9yc09mKEJhc2ljQmxvY2sqIHRvLCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA9
IHRvOyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQpCi0gICAgICAgICAg
ICBmdW5jdG9yKGJsb2NrKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KLSAgICB2b2lkIGZvckFsbEJsb2Nrc1N0cmljdGx5RG9taW5hdGVkQnkoQmFzaWNCbG9j
ayogZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0OwotICAgICAgICB3b3JrbGlzdC5hcHBlbmRW
ZWN0b3IobV9kYXRhW2Zyb21dLmlkb21LaWRzKTsKLSAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFr
ZUxhc3QoKTsKLSAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOwotICAgICAgICAgICAgd29ya2xp
c3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtibG9ja10uaWRvbUtpZHMpOwotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JBbGxC
bG9ja3NEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KSBjb25zdAotICAgIHsKLSAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gd29ya2xpc3Q7
Ci0gICAgICAgIHdvcmtsaXN0LmFwcGVuZChmcm9tKTsKLSAgICAgICAgd2hpbGUgKCF3b3JrbGlz
dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
dGFrZUxhc3QoKTsKLSAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOwotICAgICAgICAgICAgd29y
a2xpc3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtibG9ja10uaWRvbUtpZHMpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIEJsb2NrU2V0IHN0cmljdERvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0
bykgY29uc3Q7Ci0gICAgQmxvY2tTZXQgZG9taW5hdG9yc09mKEJhc2ljQmxvY2sqIHRvKSBjb25z
dDsKLSAgICBCbG9ja1NldCBibG9ja3NTdHJpY3RseURvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZy
b20pIGNvbnN0OwotICAgIEJsb2NrU2V0IGJsb2Nrc0RvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZy
b20pIGNvbnN0OwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9p
ZCBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2YoCi0gICAgICAgIEJhc2ljQmxvY2sq
IGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBCbG9j
a1NldCBzZXQ7Ci0gICAgICAgIGZvckFsbEJsb2Nrc0luRG9taW5hbmNlRnJvbnRpZXJPZkltcGwo
Ci0gICAgICAgICAgICBmcm9tLAotICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaykg
ewotICAgICAgICAgICAgICAgIGlmIChzZXQuYWRkKGJsb2NrKSkKLSAgICAgICAgICAgICAgICAg
ICAgZnVuY3RvcihibG9jayk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgQmxv
Y2tTZXQgZG9taW5hbmNlRnJvbnRpZXJPZihCYXNpY0Jsb2NrKiBmcm9tKSBjb25zdDsKLSAgICAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5J
dGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCi0gICAgICAgIGNvbnN0IEJsb2NrTGlzdCYgZnJv
bSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIGZvckFsbEJsb2Nrc0lu
UHJ1bmVkSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKAotICAgICAgICAgICAgZnJvbSwKLSAg
ICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2spIC0+IGJvb2wgewotICAgICAgICAgICAg
ICAgIGZ1bmN0b3IoYmxvY2spOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgfSk7Ci0gICAgfQotICAgIAotICAgIC8vIFRoaXMgaXMgYSBjbG9zZSByZWxhdGl2ZSBv
ZiBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigpLCB3aGljaCBhbGxv
d3MgdGhlCi0gICAgLy8gZ2l2ZW4gZnVuY3RvciB0byByZXR1cm4gZmFsc2UgdG8gaW5kaWNhdGUg
dGhhdCB3ZSBkb24ndCB3aXNoIHRvIGNvbnNpZGVyIHRoZSBnaXZlbiBibG9jay4KLSAgICAvLyBV
c2VmdWwgZm9yIGNvbXB1dGluZyBwcnVuZWQgU1NBIGZvcm0uCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbEJsb2Nrc0luUHJ1bmVkSXRlcmF0ZWREb21pbmFu
Y2VGcm9udGllck9mKAotICAgICAgICBjb25zdCBCbG9ja0xpc3QmIGZyb20sIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBCbG9ja1NldCBzZXQ7Ci0gICAgICAgIGZvckFs
bEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mSW1wbCgKLSAgICAgICAgICAgIGZy
b20sCi0gICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBib29sIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIXNldC5hZGQoYmxvY2spKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYmxvY2spOwotICAgICAg
ICAgICAgfSk7Ci0gICAgfQotICAgIAotICAgIEJsb2NrU2V0IGl0ZXJhdGVkRG9taW5hbmNlRnJv
bnRpZXJPZihjb25zdCBCbG9ja0xpc3QmIGZyb20pIGNvbnN0OwotICAgIAotICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIAotcHJpdmF0ZToKLSAgICBib29sIG5haXZlRG9t
aW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdDsKLSAgICAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5Eb21p
bmFuY2VGcm9udGllck9mSW1wbCgKLSAgICAgICAgQmFzaWNCbG9jayogZnJvbSwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFBhcmFwaHJhc2luZyBmcm9t
IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRG9taW5hdG9yXyhncmFwaF90aGVvcnkpOgot
ICAgICAgICAvLyAgICAgIlRoZSBkb21pbmFuY2UgZnJvbnRpZXIgb2YgYSBibG9jayAnZnJvbScg
aXMgdGhlIHNldCBvZiBhbGwgYmxvY2tzICd0bycgc3VjaCB0aGF0Ci0gICAgICAgIC8vICAgICAn
ZnJvbScgZG9taW5hdGVzIGFuIGltbWVkaWF0ZSBwcmVkZWNlc3NvciBvZiAndG8nLCBidXQgJ2Zy
b20nIGRvZXMgbm90IHN0cmljdGx5Ci0gICAgICAgIC8vICAgICBkb21pbmF0ZSAndG8nLiIKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gQSB1c2VmdWwgY29ybmVyIGNhc2UgdG8gcmVtZW1iZXI6IGEg
YmxvY2sgbWF5IGJlIGluIGl0cyBvd24gZG9taW5hbmNlIGZyb250aWVyIGlmIGl0IGhhcwotICAg
ICAgICAvLyBhIGxvb3AgZWRnZSB0byBpdHNlbGYsIHNpbmNlIGl0IGRvbWluYXRlcyBpdHNlbGYg
YW5kIHNvIGl0IGRvbWluYXRlcyBpdHMgb3duIGltbWVkaWF0ZQotICAgICAgICAvLyBwcmVkZWNl
c3NvciwgYW5kIGEgYmxvY2sgbmV2ZXIgc3RyaWN0bHkgZG9taW5hdGVzIGl0c2VsZi4KLSAgICAg
ICAgCi0gICAgICAgIGZvckFsbEJsb2Nrc0RvbWluYXRlZEJ5KAotICAgICAgICAgICAgZnJvbSwK
LSAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2spIHsKLSAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3Vj
Y2Vzc29ySW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogdG8gPSBi
bG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFzdHJpY3RseURvbWluYXRlcyhmcm9tLCB0bykpCi0gICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdG9yKHRvKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbEJsb2Nr
c0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mSW1wbCgKLSAgICAgICAgY29uc3QgQmxvY2tM
aXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIERvbWluYXRvcnMo
R3JhcGgmIGdyYXBoKQorICAgICAgICA6IFdURjo6RG9taW5hdG9yczxDRkc+KCpncmFwaC5tX2Nm
ZykKICAgICB7Ci0gICAgICAgIEJsb2NrTGlzdCB3b3JrbGlzdCA9IGZyb207Ci0gICAgICAgIHdo
aWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBmb3JBbGxCbG9ja3NJbkRvbWlu
YW5jZUZyb250aWVyT2ZJbXBsKAotICAgICAgICAgICAgICAgIGJsb2NrLAotICAgICAgICAgICAg
ICAgIFsmXSAoQmFzaWNCbG9jayogb3RoZXJCbG9jaykgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoZnVuY3RvcihvdGhlckJsb2NrKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0
LmFwcGVuZChvdGhlckJsb2NrKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQogICAg
IH0KLSAgICAKLSAgICBzdHJ1Y3QgQmxvY2tEYXRhIHsKLSAgICAgICAgQmxvY2tEYXRhKCkKLSAg
ICAgICAgICAgIDogaWRvbVBhcmVudChudWxscHRyKQotICAgICAgICAgICAgLCBwcmVOdW1iZXIo
VUlOVF9NQVgpCi0gICAgICAgICAgICAsIHBvc3ROdW1iZXIoVUlOVF9NQVgpCi0gICAgICAgIHsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBpZG9tS2lk
czsKLSAgICAgICAgQmFzaWNCbG9jayogaWRvbVBhcmVudDsKLSAgICAgICAgCi0gICAgICAgIHVu
c2lnbmVkIHByZU51bWJlcjsKLSAgICAgICAgdW5zaWduZWQgcG9zdE51bWJlcjsKLSAgICB9Owot
ICAgIAotICAgIEJsb2NrTWFwPEJsb2NrRGF0YT4gbV9kYXRhOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiREZHQmxvY2tX
b3JrbGlzdC5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKICNpbmNsdWRlICJERkdDbG9i
YmVyc0V4aXRTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0NGRy5oIgogI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKICNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcC5oIgpAQCAtNjQsNiArNjUsNyBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFu
JiBwbGFuLCBMb25nTGl2CiAgICAgLCBtX2NvZGVCbG9jayhtX3BsYW4uY29kZUJsb2NrKQogICAg
ICwgbV9wcm9maWxlZEJsb2NrKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQogICAgICwgbV9h
bGxvY2F0b3IobG9uZ0xpdmVkU3RhdGUubV9hbGxvY2F0b3IpCisgICAgLCBtX2NmZyhzdGQ6Om1h
a2VfdW5pcXVlPENGRz4oKnRoaXMpKQogICAgICwgbV9uZXh0TWFjaGluZUxvY2FsKDApCiAgICAg
LCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCiAgICAgLCBtX3N0cnVjdHVyZVJlZ2lz
dHJhdGlvblN0YXRlKEhhdmVOb3RTdGFydGVkUmVnaXN0ZXJpbmcpCkBAIC00MDEsMjIgKzQwMywy
MiBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgaWYgKGJs
b2NrLT50ZXJtaW5hbCgpKSB7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
YmxvY2stPnN1Y2Nlc3NvcnMoKSkgewogICAgICAgICAgICAgb3V0LnByaW50KCIgIiwgKnN1Y2Nl
c3Nvcik7Ci0gICAgICAgICAgICBpZiAobV9wcmVQb3N0TnVtYmVyaW5nLmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIiAoIiwgbV9wcmVQb3N0TnVtYmVyaW5nLmVkZ2VLaW5k
KGJsb2NrLCBzdWNjZXNzb3IpLCAiKSIpOworICAgICAgICAgICAgaWYgKG1fcHJlUG9zdE51bWJl
cmluZykKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAoIiwgbV9wcmVQb3N0TnVtYmVyaW5n
LT5lZGdlS2luZChibG9jaywgc3VjY2Vzc29yKSwgIikiKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZQogICAgICAgICBvdXQucHJpbnQoIiA8aW52YWxpZD4iKTsKICAgICBvdXQucHJpbnQoIlxuIik7
Ci0gICAgaWYgKG1fZG9taW5hdG9ycy5pc1ZhbGlkKCkgJiYgdGVybWluYWxzQXJlVmFsaWQoKSkg
ewotICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZWQgYnk6ICIsIG1fZG9taW5h
dG9ycy5kb21pbmF0b3JzT2YoYmxvY2spLCAiXG4iKTsKLSAgICAgICAgb3V0LnByaW50KHByZWZp
eCwgIiAgRG9taW5hdGVzOiAiLCBtX2RvbWluYXRvcnMuYmxvY2tzRG9taW5hdGVkQnkoYmxvY2sp
LCAiXG4iKTsKLSAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hbmNlIEZyb250aWVy
OiAiLCBtX2RvbWluYXRvcnMuZG9taW5hbmNlRnJvbnRpZXJPZihibG9jayksICJcbiIpOwotICAg
ICAgICBvdXQucHJpbnQocHJlZml4LCAiICBJdGVyYXRlZCBEb21pbmFuY2UgRnJvbnRpZXI6ICIs
IG1fZG9taW5hdG9ycy5pdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoQmxvY2tMaXN0KDEsIGJs
b2NrKSksICJcbiIpOwotICAgIH0KLSAgICBpZiAobV9wcmVQb3N0TnVtYmVyaW5nLmlzVmFsaWQo
KSkKLSAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgUHJlL1Bvc3QgTnVtYmVyaW5nOiAiLCBt
X3ByZVBvc3ROdW1iZXJpbmcucHJlTnVtYmVyKGJsb2NrKSwgIi8iLCBtX3ByZVBvc3ROdW1iZXJp
bmcucG9zdE51bWJlcihibG9jayksICJcbiIpOwotICAgIGlmIChtX25hdHVyYWxMb29wcy5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgaWYgKGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gbV9uYXR1cmFs
TG9vcHMuaGVhZGVyT2YoYmxvY2spKSB7CisgICAgaWYgKG1fZG9taW5hdG9ycyAmJiB0ZXJtaW5h
bHNBcmVWYWxpZCgpKSB7CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlZCBi
eTogIiwgbV9kb21pbmF0b3JzLT5kb21pbmF0b3JzT2YoYmxvY2spLCAiXG4iKTsKKyAgICAgICAg
b3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVzOiAiLCBtX2RvbWluYXRvcnMtPmJsb2Nrc0Rv
bWluYXRlZEJ5KGJsb2NrKSwgIlxuIik7CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERv
bWluYW5jZSBGcm9udGllcjogIiwgbV9kb21pbmF0b3JzLT5kb21pbmFuY2VGcm9udGllck9mKGJs
b2NrKSwgIlxuIik7CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIEl0ZXJhdGVkIERvbWlu
YW5jZSBGcm9udGllcjogIiwgbV9kb21pbmF0b3JzLT5pdGVyYXRlZERvbWluYW5jZUZyb250aWVy
T2YoQmxvY2tMaXN0KDEsIGJsb2NrKSksICJcbiIpOworICAgIH0KKyAgICBpZiAobV9wcmVQb3N0
TnVtYmVyaW5nKQorICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQcmUvUG9zdCBOdW1iZXJp
bmc6ICIsIG1fcHJlUG9zdE51bWJlcmluZy0+cHJlTnVtYmVyKGJsb2NrKSwgIi8iLCBtX3ByZVBv
c3ROdW1iZXJpbmctPnBvc3ROdW1iZXIoYmxvY2spLCAiXG4iKTsKKyAgICBpZiAobV9uYXR1cmFs
TG9vcHMpIHsKKyAgICAgICAgaWYgKGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gbV9uYXR1cmFs
TG9vcHMtPmhlYWRlck9mKGJsb2NrKSkgewogICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwg
IiAgTG9vcCBoZWFkZXIsIGNvbnRhaW5zOiIpOwogICAgICAgICAgICAgVmVjdG9yPEJsb2NrSW5k
ZXg+IHNvcnRlZEJsb2NrTGlzdDsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsb29wLT5zaXplKCk7ICsraSkKQEAgLTQyOCw3ICs0MzAsNyBAQCB2b2lkIEdyYXBoOjpkdW1w
QmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZl
Y3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGNvbnRhaW5pbmdMb29wcyA9Ci0gICAgICAgICAgICBt
X25hdHVyYWxMb29wcy5sb29wc09mKGJsb2NrKTsKKyAgICAgICAgICAgIG1fbmF0dXJhbExvb3Bz
LT5sb29wc09mKGJsb2NrKTsKICAgICAgICAgaWYgKCFjb250YWluaW5nTG9vcHMuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBDb250YWluaW5nIGxvb3AgaGVh
ZGVyczoiKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb250YWluaW5n
TG9vcHMuc2l6ZSgpOyArK2kpCkBAIC03NDYsOSArNzQ4LDkgQEAgdm9pZCBHcmFwaDo6a2lsbFVu
cmVhY2hhYmxlQmxvY2tzKCkKIAogdm9pZCBHcmFwaDo6aW52YWxpZGF0ZUNGRygpCiB7Ci0gICAg
bV9kb21pbmF0b3JzLmludmFsaWRhdGUoKTsKLSAgICBtX25hdHVyYWxMb29wcy5pbnZhbGlkYXRl
KCk7Ci0gICAgbV9wcmVQb3N0TnVtYmVyaW5nLmludmFsaWRhdGUoKTsKKyAgICBtX2RvbWluYXRv
cnMgPSBudWxscHRyOworICAgIG1fbmF0dXJhbExvb3BzID0gbnVsbHB0cjsKKyAgICBtX3ByZVBv
c3ROdW1iZXJpbmcgPSBudWxscHRyOwogfQogCiB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9j
YWwoQmFzaWNCbG9jayYgYmxvY2ssIHVuc2lnbmVkIHN0YXJ0SW5kZXhJbkJsb2NrLCBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSwgTm9kZSogbmV3R2V0TG9jYWwpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxOTE4MzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDE0ICszMywxMSBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0FyZ3Vt
ZW50UG9zaXRpb24uaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCi0jaW5jbHVkZSAiREZH
RG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCiAjaW5jbHVkZSAiREZH
TG9uZ0xpdmVkU3RhdGUuaCIKLSNpbmNsdWRlICJERkdOYXR1cmFsTG9vcHMuaCIKICNpbmNsdWRl
ICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiREZHTm9kZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkRG
R1BsYW4uaCIKLSNpbmNsdWRlICJERkdQcmVQb3N0TnVtYmVyaW5nLmgiCiAjaW5jbHVkZSAiREZH
UHJvcGVydHlUeXBlS2V5LmgiCiAjaW5jbHVkZSAiREZHU2Nhbm5hYmxlLmgiCiAjaW5jbHVkZSAi
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKQEAgLTU5LDYgKzU2LDExIEBAIGNsYXNzIEV4ZWNTdGF0
ZTsKIAogbmFtZXNwYWNlIERGRyB7CiAKK2NsYXNzIENGRzsKK2NsYXNzIERvbWluYXRvcnM7Citj
bGFzcyBOYXR1cmFsTG9vcHM7CitjbGFzcyBQcmVQb3N0TnVtYmVyaW5nOworCiAjZGVmaW5lIERG
R19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAg
ICAgICBcCiAgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC04ODUsOSArODg3
LDEwIEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxC
eXRlY29kZUtpbGxzPj4gbV9ieXRlY29kZUtpbGxzOwogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpT
T2JqZWN0KiwgUHJvcGVydHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7CiAgICAgSGFzaE1hcDxQcm9w
ZXJ0eVR5cGVLZXksIEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwot
ICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOwotICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQ
b3N0TnVtYmVyaW5nOwotICAgIE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8RG9taW5hdG9ycz4gbV9kb21pbmF0b3JzOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxQcmVQb3N0TnVtYmVyaW5nPiBtX3ByZVBvc3ROdW1iZXJpbmc7CisgICAgc3RkOjp1bmlxdWVf
cHRyPE5hdHVyYWxMb29wcz4gbV9uYXR1cmFsTG9vcHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPENG
Rz4gbV9jZmc7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9uZXh0
TWFjaGluZUxvY2FsOwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCShyZXZpc2lvbiAx
OTE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDE2ICs0MiwxMCBAQCB2b2lkIE5hdHVyYWxMb29wOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpCiAgICAgb3V0LnByaW50KCJdIik7CiB9CiAKLU5hdHVyYWxMb29w
czo6TmF0dXJhbExvb3BzKCkgeyB9Ci1OYXR1cmFsTG9vcHM6On5OYXR1cmFsTG9vcHMoKSB7IH0K
LQotdm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGVEZXBlbmRlbmNpZXMoR3JhcGgmIGdyYXBoKQor
TmF0dXJhbExvb3BzOjpOYXR1cmFsTG9vcHMoR3JhcGgmIGdyYXBoKQogewotICAgIGdyYXBoLm1f
ZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkoZ3JhcGgpOwotfQorICAgIEFTU0VSVChncmFw
aC5tX2RvbWluYXRvcnMpOwogCi12b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFwaCYgZ3Jh
cGgpCi17CiAgICAgLy8gSW1wbGVtZW50IHRoZSBjbGFzc2ljIGRvbWluYXRvci1iYXNlZCBuYXR1
cmFsIGxvb3AgZmluZGVyLiBUaGUgZmlyc3QKICAgICAvLyBzdGVwIGlzIHRvIGZpbmQgYWxsIGNv
bnRyb2wgZmxvdyBlZGdlcyBBIC0+IEIgd2hlcmUgQiBkb21pbmF0ZXMgQS4KICAgICAvLyBUaGVu
IEIgaXMgYSBsb29wIGhlYWRlciBhbmQgQSBpcyBhIGJhY2t3YXJkIGJyYW5jaGluZyBibG9jay4g
V2Ugd2lsbApAQCAtNjQsNyArNTgsNyBAQCB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFw
aCYgZ3JhcGgpCiAgICAgCiAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiRG9t
aW5hdG9yczpcbiIpOwotICAgICAgICBncmFwaC5tX2RvbWluYXRvcnMuZHVtcChXVEY6OmRhdGFG
aWxlKCkpOworICAgICAgICBncmFwaC5tX2RvbWluYXRvcnMtPmR1bXAoV1RGOjpkYXRhRmlsZSgp
KTsKICAgICB9CiAgICAgCiAgICAgbV9sb29wcy5yZXNpemUoMCk7CkBAIC03Niw3ICs3MCw3IEBA
IHZvaWQgTmF0dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAgICAgICAgCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3IoaSk7Ci0g
ICAgICAgICAgICBpZiAoIWdyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoc3VjY2Vzc29yLCBi
bG9jaykpCisgICAgICAgICAgICBpZiAoIWdyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKHN1
Y2Nlc3NvciwgYmxvY2spKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
Ym9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbV9sb29w
cy5zaXplKCk7IGotLTspIHsKQEAgLTE5OSw2ICsxOTMsOCBAQCB2b2lkIE5hdHVyYWxMb29wczo6
Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIGRhdGFMb2coIlJlc3VsdHM6ICIsICp0aGlz
LCAiXG4iKTsKIH0KIAorTmF0dXJhbExvb3BzOjp+TmF0dXJhbExvb3BzKCkgeyB9CisKIFZlY3Rv
cjxjb25zdCBOYXR1cmFsTG9vcCo+IE5hdHVyYWxMb29wczo6bG9vcHNPZihCYXNpY0Jsb2NrKiBi
bG9jaykgY29uc3QKIHsKICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiByZXN1bHQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgJKHJldmlz
aW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3Bz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAotI2luY2x1ZGUgIkRGR0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5o
IgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Cisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIApAQCAtODgsMTQgKzg5LDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9pbmRl
eDsKIH07CiAKLWNsYXNzIE5hdHVyYWxMb29wcyA6IHB1YmxpYyBBbmFseXNpczxOYXR1cmFsTG9v
cHM+IHsKK2NsYXNzIE5hdHVyYWxMb29wcyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTmF0
dXJhbExvb3BzKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBO
YXR1cmFsTG9vcHMoKTsKKyAgICBOYXR1cmFsTG9vcHMoR3JhcGgmKTsKICAgICB+TmF0dXJhbExv
b3BzKCk7CiAgICAgCi0gICAgdm9pZCBjb21wdXRlRGVwZW5kZW5jaWVzKEdyYXBoJik7Ci0gICAg
dm9pZCBjb21wdXRlKEdyYXBoJik7Ci0gICAgCiAgICAgdW5zaWduZWQgbnVtTG9vcHMoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNzksNiArMTI3OSwxMCBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcihtX3Rl
cm1pbmFsLCBtX3Rlcm1pbmFsLT5udW1TdWNjZXNzb3JzKCkpOwogICAgICAgICB9CisKKyAgICAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Rlcm1pbmFsLT5udW1TdWNjZXNzb3Jz
KCk7IH0KKyAgICAgICAgQmFzaWNCbG9jayogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3Rlcm1pbmFsLT5zdWNjZXNzb3IoaW5kZXgpOyB9CisgICAgICAgIEJhc2ljQmxvY2sqIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KICAgICAg
ICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogbV90ZXJtaW5hbDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcAkocmV2
aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVt
YmVyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDggQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1QcmVQb3N0TnVtYmVyaW5nOjpQcmVQb3N0TnVtYmVy
aW5nKCkgeyB9Ci1QcmVQb3N0TnVtYmVyaW5nOjp+UHJlUG9zdE51bWJlcmluZygpIHsgfQotCi12
b2lkIFByZVBvc3ROdW1iZXJpbmc6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQorUHJlUG9zdE51bWJl
cmluZzo6UHJlUG9zdE51bWJlcmluZyhHcmFwaCYgZ3JhcGgpCisgICAgOiBtX2dyYXBoKGdyYXBo
KQogewogICAgIG1fbWFwID0gQmxvY2tNYXA8TnVtYmVyaW5nPihncmFwaCk7CiAgICAgCkBAIC02
MCw2ICs1OCw4IEBAIHZvaWQgUHJlUG9zdE51bWJlcmluZzo6Y29tcHV0ZShHcmFwaCYgZ3IKICAg
ICB9CiB9CiAKK1ByZVBvc3ROdW1iZXJpbmc6On5QcmVQb3N0TnVtYmVyaW5nKCkgeyB9CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaAkocmV2aXNpb24g
MTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAotI2luY2x1ZGUgIkRGR0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5o
IgogI2luY2x1ZGUgIkRGR0Jsb2NrTWFwLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCkBAIC00MCwxMyArNDEsMTMgQEAgZW51bSBFZGdlS2luZCB7CiAgICAgQmFja0Vk
Z2UKIH07CiAKLWNsYXNzIFByZVBvc3ROdW1iZXJpbmcgOiBwdWJsaWMgQW5hbHlzaXM8UHJlUG9z
dE51bWJlcmluZz4geworY2xhc3MgUHJlUG9zdE51bWJlcmluZyB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUHJlUG9zdE51bWJlcmluZyk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgUHJlUG9zdE51bWJlcmluZygpOworICAgIFByZVBvc3ROdW1iZXJpbmco
R3JhcGgmKTsKICAgICB+UHJlUG9zdE51bWJlcmluZygpOwogCi0gICAgdm9pZCBjb21wdXRlKEdy
YXBoJik7Ci0gICAgCiAgICAgdW5zaWduZWQgcHJlTnVtYmVyKEJhc2ljQmxvY2sqIGJsb2NrKSBj
b25zdCB7IHJldHVybiBtX21hcFtibG9ja10ubV9wcmVOdW1iZXI7IH0KICAgICB1bnNpZ25lZCBw
b3N0TnVtYmVyKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdCB7IHJldHVybiBtX21hcFtibG9ja10u
bV9wb3N0TnVtYmVyOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAkJMEYy
QjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3MDBB
N0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKIAkJMEYyQjY2QTcxN0I2QjRG
RDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICov
OyB9OwogCQkwRjM1MDE2NDFCQjI1OEQ1MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNTAxNjMxQkIyNThDODAw
RjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLzsgfTsKKwkJMEY0NTcwNDMxQkU1QjU4RjAwNjJBNjI5
IC8qIERvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNDU3MDQyMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21pbmF0b3JzLmggKi87IH07CiAJ
CTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1
RCAvKiBQYXJraW5nTG90LmNwcCAqLzsgfTsKIAkJMEY4MjRBNjkxQjc0NDNBMDAwMkUzNDVEIC8q
IFBhcmtpbmdMb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi87IH07CiAJCTBG
ODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyog
UmF3UG9pbnRlci5oICovOyB9OwpAQCAtNTAsOCArNTEsOCBAQAogCQkwRkU0NDc5RDFCN0FBQTAz
MDA5NDk4RUIgLyogV29yZExvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovOyB9
OwogCQkwRkVCM0RDRjFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3
QUFEIC8qIFNoYXJlZFRhc2suaCAqLzsgfTsKIAkJMEZFQjNERDExQkI3MzY2QjAwOUQ3QUFEIC8q
IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rv
ckl0ZXJhdG9yLmggKi87IH07Ci0JCTBGRUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRM
YW1iZGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLzsgfTsKIAkJMEZFQzg0
QUYxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQg
LyogR3JhcGhOb2RlV29ya2xpc3QuaCAqLzsgfTsKKwkJMEZFQzg0QjExQkRBQ0QzOTAwODBGRjc0
IC8qIFNjb3BlZExhbWJkYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovOyB9
OwogCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjUxQjIyRDREODAwNjZD
RTE1IC8qIFRpbnlQdHJTZXQuaCAqLzsgfTsKIAkJMEZGODYwOTUxQkNDQkQ3NDAwNDUxMjdGIC8q
IFBvaW50ZXJDb21wYXJpc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24u
aCAqLzsgfTsKIAkJMEZGRjE5REMxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9v
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZG
MTlEQTFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCAqLzsgfTsKQEAg
LTMyMSw2ICszMjIsNyBAQAogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzUwMTYz
MUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0
NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xvdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQb2ludGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDYsOCArMzQ4LDggQEAKIAkJMEZFNDQ3OUIxQjdB
QUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdvcmRMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzRENFMUJC
NUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNoYXJlZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNE
RDAxQkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVk
TGFtYmRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlZExhbWJkYS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQg
LyogR3JhcGhOb2RlV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R3JhcGhOb2RlV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY29wZWRMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueVB0clNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckNvbXBhcmlzb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGRjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBh
cmFsbGVsSGVscGVyUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQYXJhbGxlbEhlbHBlclBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NzY0LDYgKzc2Niw3IEBACiAJCQkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFi
bGVSZWZDb3VudGVkLmggKi8sCiAJCQkJQThBNDcyN0UxNTFBODI1QTAwNDEyM0ZGIC8qIERlcXVl
LmggKi8sCiAJCQkJQThBNDcyN0YxNTFBODI1QTAwNDEyM0ZGIC8qIERpc2FsbG93Q1R5cGUuaCAq
LywKKwkJCQkwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovLAogCQkJ
CUE4QTQ3MjgwMTUxQTgyNUEwMDQxMjNGRiAvKiBEb3VibHlMaW5rZWRMaXN0LmggKi8sCiAJCQkJ
QThBNDcyOTcxNTFBODI1QTAwNDEyM0ZGIC8qIGR0b2EuY3BwICovLAogCQkJCUE4QTQ3Mjk4MTUx
QTgyNUEwMDQxMjNGRiAvKiBkdG9hLmggKi8sCkBAIC0xMTg1LDYgKzExODgsNyBAQAogCQkJCTFB
RkRFNjUzMTk1M0IyM0QwMEM0OEZGQSAvKiBPcHRpb25hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDczRjYxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3Q0JCQTA3NDE5QkI3RkRDMDBCQkYwMjUgLyogT1NPYmplY3RQdHIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNDU3MDQzMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21pbmF0b3JzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzNGQTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZFMTUxQTgyNUIwMDQxMjNGRiAvKiBQYWNrZWRJ
bnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZGMTUxQTgyNUIwMDQxMjNGRiAv
KiBQYWdlQWxsb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9E
b21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGRG9taW5hdG9yc19oCisjZGVmaW5lIFdU
RkRvbWluYXRvcnNfaAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBpcyBhIHV0aWxpdHkg
Zm9yIGZpbmRpbmcgdGhlIGRvbWluYXRvcnMgb2YgYSBncmFwaC4gRG9taW5hdG9ycyBhcmUgYWxt
b3N0IHVuaXZlcnNhbGx5IHVzZWQKKy8vIGZvciBjb250cm9sIGZsb3cgZ3JhcGggYW5hbHlzaXMs
IHNvIHRoaXMgY29kZSB3aWxsIHJlZmVyIHRvIHRoZSBncmFwaCdzICJub2RlcyIgYXMgImJsb2Nr
cyIuIEluCisvLyB0aGF0IHJlZ2FyZCB0aGlzIGNvZGUgaXMga2luZCBvZiBzcGVjaWFsaXplZCBm
b3IgdGhlIHZhcmlvdXMgSlNDIGNvbXBpbGVycywgYnV0IHlvdSBjb3VsZCB1c2UgaXQKKy8vIGZv
ciBub24tY29tcGlsZXIgdGhpbmdzIGlmIHlvdSBhcmUgT0sgd2l0aCByZWZlcnJpbmcgdG8geW91
ciAibm9kZXMiIGFzICJibG9ja3MiLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4KK2NsYXNz
IERvbWluYXRvcnMgeworcHVibGljOgorICAgIERvbWluYXRvcnMoR3JhcGgmIGdyYXBoKQorICAg
ICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgeworICAgIH0KKworICAgIHZvaWQgY29tcHV0ZShi
b29sIHNlbGZDaGVjayA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgTGVuZ2F1ZXJUYXJqYW4gbGVu
Z2F1ZXJUYXJqYW4obV9ncmFwaCk7CisgICAgICAgIGxlbmdhdWVyVGFyamFuLmNvbXB1dGUoKTsK
KworICAgICAgICBtX2RhdGEgPSBtX2dyYXBoLm5ld01hcDxCbG9ja0RhdGE+KCk7CisgICAgCisg
ICAgICAgIC8vIEZyb20gaGVyZSB3ZSB3YW50IHRvIGJ1aWxkIGEgc3Bhbm5pbmcgdHJlZSB3aXRo
IGJvdGggdXB3YXJkIGFuZCBkb3dud2FyZCBsaW5rcyBhbmQgd2Ugd2FudAorICAgICAgICAvLyB0
byBkbyBhIHNlYXJjaCBvdmVyIHRoaXMgdHJlZSB0byBjb21wdXRlIHByZSBhbmQgcG9zdCBudW1i
ZXJzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRvbWluYW5jZQorICAgICAgICAvLyB0ZXN0cy4KKyAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsg
YmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgR3JhcGg6Ok5vZGUgYmxvY2sgPSBncmFwaC5u
b2RlKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgICAgICBHcmFwaDo6Tm9kZSBpZG9tQmxvY2sg
PSBsZW5nYXVlclRhcmphbi5pbW1lZGlhdGVEb21pbmF0b3IoYmxvY2spOworICAgICAgICAgICAg
bV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50ID0gaWRvbUJsb2NrOworICAgICAgICAgICAgaWYgKGlk
b21CbG9jaykKKyAgICAgICAgICAgICAgICBtX2RhdGFbaWRvbUJsb2NrXS5pZG9tS2lkcy5hcHBl
bmQoYmxvY2spOworICAgICAgICB9CisgICAgCisgICAgICAgIHVuc2lnbmVkIG5leHRQcmVOdW1i
ZXIgPSAwOworICAgICAgICB1bnNpZ25lZCBuZXh0UG9zdE51bWJlciA9IDA7CisgICAgCisgICAg
ICAgIC8vIFBsYWluIHN0YWNrLWJhc2VkIHdvcmtsaXN0IGJlY2F1c2Ugd2UgYXJlIGd1YXJhbnRl
ZWQgdG8gc2VlIGVhY2ggYmxvY2sgZXhhY3RseSBvbmNlIGFueXdheS4KKyAgICAgICAgVmVjdG9y
PEdyYXBoTm9kZVdpdGhPcmRlcjxHcmFwaDo6Tm9kZT4+IHdvcmtsaXN0OworICAgICAgICB3b3Jr
bGlzdC5hcHBlbmQoR3JhcGhOb2RlV2l0aE9yZGVyPEdyYXBoOjpOb2RlPihncmFwaC5ibG9jaygw
KSwgR3JhcGhWaXNpdE9yZGVyOjpQcmUpKTsKKyAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIEdyYXBoTm9kZVdpdGhPcmRlcjxHcmFwaDo6Tm9kZT4gaXRl
bSA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIp
IHsKKyAgICAgICAgICAgIGNhc2UgR3JhcGhWaXNpdE9yZGVyOjpQcmU6CisgICAgICAgICAgICAg
ICAgbV9kYXRhW2l0ZW0ubm9kZV0ucHJlTnVtYmVyID0gbmV4dFByZU51bWJlcisrOworICAgICAg
ICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChHcmFwaE5vZGVXaXRoT3JkZXI8R3JhcGg6Ok5vZGU+
KGl0ZW0ubm9kZSwgR3JhcGhWaXNpdE9yZGVyOjpQb3N0KSk7CisgICAgICAgICAgICAgICAgZm9y
IChHcmFwaDo6Tm9kZSBraWQgOiBtX2RhdGFbaXRlbS5ub2RlXS5pZG9tS2lkcykKKyAgICAgICAg
ICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKEJsb2NrV2l0aE9yZGVyKGtpZCwgR3JhcGhWaXNp
dE9yZGVyOjpQcmUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
R3JhcGg6OlZpc2l0T3JkZXI6OlBvc3Q6CisgICAgICAgICAgICAgICAgbV9kYXRhW2l0ZW0ubm9k
ZV0ucG9zdE51bWJlciA9IG5leHRQb3N0TnVtYmVyKys7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKHNlbGZDaGVjaykg
eworICAgICAgICAgICAgLy8gQ2hlY2sgb3VyIGRvbWluYXRvciBjYWxjdWxhdGlvbjoKKyAgICAg
ICAgICAgIC8vIDEpIENoZWNrIHRoYXQgb3VyIHJhbmdlLWJhc2VkIGFuY2VzdHJ5IHRlc3QgaXMg
dGhlIHNhbWUgYXMgYSBuYWl2ZSBhbmNlc3RyeSB0ZXN0LgorICAgICAgICAgICAgLy8gMikgQ2hl
Y2sgdGhhdCBvdXIgbm90aW9uIG9mIHdobyBkb21pbmF0ZXMgd2hvbSBpcyBpZGVudGljYWwgdG8g
YSBuYWl2ZSAobm90CisgICAgICAgICAgICAvLyAgICBMZW5nYXVlci1UYXJqYW4pIGRvbWluYXRv
ciBjYWxjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgICAgICBWYWxpZGF0aW9uQ29udGV4dCBj
b250ZXh0KG1fZ3JhcGgsICp0aGlzKTsKKyAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGZyb21CbG9ja0luZGV4ID0gZ3JhcGgubnVtTm9kZXMoKTsgZnJvbUJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgICAgICBHcmFwaDo6Tm9kZSBmcm9tQmxvY2sgPSBncmFwaC5ub2RlKGZy
b21CbG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWZyb21CbG9jayB8fCBtX2RhdGFb
ZnJvbUJsb2NrXS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdG9CbG9ja0luZGV4ID0gZ3Jh
cGgubnVtTm9kZXMoKTsgdG9CbG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEdy
YXBoOjpOb2RlIHRvQmxvY2sgPSBncmFwaC5ub2RlKHRvQmxvY2tJbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghdG9CbG9jayB8fCBtX2RhdGFbdG9CbG9ja10ucHJlTnVtYmVyID09IFVJ
TlRfTUFYKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChkb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2Nr
KSAhPSBuYWl2ZURvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxvY2spKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRvQmxvY2ssICJSYW5nZS1i
YXNlZCBkb21pbmF0aW9uIGNoZWNrIGlzIGJyb2tlbiIpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoZG9taW5hdGVzKGZyb21CbG9jaywgdG9CbG9jaykgIT0gY29udGV4dC5uYWl2ZURvbWluYXRv
cnMuZG9taW5hdGVzKGZyb21CbG9jaywgdG9CbG9jaykpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydEVycm9yKGZyb21CbG9jaywgdG9CbG9jaywgIkxlbmdhdWVyLVRhcmph
biBkb21pbmF0aW9uIGlzIGJyb2tlbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgICAgICBjb250ZXh0LmhhbmRsZUVycm9ycygpOworICAgICAg
ICB9CisgICAgfQorCisgICAgYm9vbCBzdHJpY3RseURvbWluYXRlcyhHcmFwaDo6Tm9kZSBmcm9t
LCBHcmFwaDo6Tm9kZSB0bykgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkp
OworICAgICAgICByZXR1cm4gbV9kYXRhW3RvXS5wcmVOdW1iZXIgPiBtX2RhdGFbZnJvbV0ucHJl
TnVtYmVyCisgICAgICAgICAgICAmJiBtX2RhdGFbdG9dLnBvc3ROdW1iZXIgPCBtX2RhdGFbZnJv
bV0ucG9zdE51bWJlcjsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb21pbmF0ZXMoR3JhcGg6Ok5v
ZGUgZnJvbSwgR3JhcGg6Ok5vZGUgdG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJv
bSA9PSB0byB8fCBzdHJpY3RseURvbWluYXRlcyhmcm9tLCB0byk7CisgICAgfQorICAgIAorICAg
IEdyYXBoOjpOb2RlIGltbWVkaWF0ZURvbWluYXRvck9mKEdyYXBoOjpOb2RlIGJsb2NrKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVtibG9ja10uaWRvbVBhcmVudDsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbFN0
cmljdERvbWluYXRvcnNPZihHcmFwaDo6Tm9kZSB0bywgY29uc3QgRnVuY3RvciYgZnVuY3Rvcikg
Y29uc3QKKyAgICB7CisgICAgICAgIGZvciAoR3JhcGg6Ok5vZGUgYmxvY2sgPSBtX2RhdGFbdG9d
Lmlkb21QYXJlbnQ7IGJsb2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10uaWRvbVBhcmVudCkKKyAg
ICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsRG9taW5hdG9yc09mKEdyYXBoOjpOb2RlIHRv
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChHcmFw
aDo6Tm9kZSBibG9jayA9IHRvOyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmlkb21QYXJl
bnQpCisgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEJsb2Nrc1N0cmljdGx5RG9taW5h
dGVkQnkoR3JhcGg6Ok5vZGUgZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAg
ICB7CisgICAgICAgIFZlY3RvcjxHcmFwaDo6Tm9kZSwgMTY+IHdvcmtsaXN0OworICAgICAgICB3
b3JrbGlzdC5hcHBlbmRWZWN0b3IobV9kYXRhW2Zyb21dLmlkb21LaWRzKTsKKyAgICAgICAgd2hp
bGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEdyYXBoOjpOb2RlIGJsb2Nr
ID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOworICAg
ICAgICAgICAgd29ya2xpc3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtibG9ja10uaWRvbUtpZHMpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgdm9pZCBmb3JBbGxCbG9ja3NEb21pbmF0ZWRCeShHcmFwaDo6Tm9kZSBmcm9tLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgVmVjdG9yPEdyYXBoOjpOb2Rl
LCAxNj4gd29ya2xpc3Q7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChmcm9tKTsKKyAgICAgICAg
d2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEdyYXBoOjpOb2RlIGJs
b2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOwor
ICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtibG9ja10uaWRvbUtpZHMp
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEdyYXBoOjpTZXQgc3RyaWN0RG9taW5hdG9y
c09mKEdyYXBoOjpOb2RlIHRvKSBjb25zdAorICAgIHsKKyAgICAgICAgR3JhcGg6OlNldCByZXN1
bHQ7CisgICAgICAgIGZvckFsbFN0cmljdERvbWluYXRvcnNPZigKKyAgICAgICAgICAgIHRvLAor
ICAgICAgICAgICAgWyZdIChHcmFwaDo6Tm9kZSBub2RlKSB7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmFkZChub2RlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBHcmFwaDo6U2V0IGRvbWluYXRvcnNPZihHcmFwaDo6Tm9kZSB0bykg
Y29uc3QKKyAgICB7CisgICAgICAgIEdyYXBoOjpTZXQgcmVzdWx0OworICAgICAgICBmb3JBbGxE
b21pbmF0b3JzT2YoCisgICAgICAgICAgICB0bywKKyAgICAgICAgICAgIFsmXSAoR3JhcGg6Ok5v
ZGUgbm9kZSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQobm9kZSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgR3JhcGg6OlNl
dCBibG9ja3NTdHJpY3RseURvbWluYXRlZEJ5KEdyYXBoOjpOb2RlIGZyb20pIGNvbnN0CisgICAg
eworICAgICAgICBHcmFwaDo6U2V0IHJlc3VsdDsKKyAgICAgICAgZm9yQWxsQmxvY2tzU3RyaWN0
bHlEb21pbmF0ZWRCeSgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKEdyYXBo
OjpOb2RlIG5vZGUpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKG5vZGUpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEdyYXBo
OjpTZXQgYmxvY2tzRG9taW5hdGVkQnkoR3JhcGg6Ok5vZGUgZnJvbSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEdyYXBoOjpTZXQgcmVzdWx0OworICAgICAgICBmb3JBbGxCbG9ja3NEb21pbmF0ZWRC
eSgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKEdyYXBoOjpOb2RlIG5vZGUp
IHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKG5vZGUpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2YoCisg
ICAgICAgIEdyYXBoOjpOb2RlIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Cisg
ICAgeworICAgICAgICBHcmFwaDo6U2V0IHNldDsKKyAgICAgICAgZm9yQWxsQmxvY2tzSW5Eb21p
bmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0g
KEdyYXBoOjpOb2RlIGJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKHNldC5hZGQoYmxvY2sp
KQorICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgIH0pOwor
ICAgIH0KKyAgICAKKyAgICBHcmFwaDo6U2V0IGRvbWluYW5jZUZyb250aWVyT2YoR3JhcGg6Ok5v
ZGUgZnJvbSkgY29uc3QKKyAgICB7CisgICAgICAgIEdyYXBoOjpTZXQgcmVzdWx0OworICAgICAg
ICBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2YoCisgICAgICAgICAgICBmcm9tLAor
ICAgICAgICAgICAgWyZdIChHcmFwaDo6Tm9kZSBub2RlKSB7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmFkZChub2RlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9y
QWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoY29uc3QgR3JhcGg6Okxpc3Qm
IGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JBbGxCbG9j
a3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgICAgIGZyb20s
CisgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgY2xvc2UgcmVsYXRp
dmUgb2YgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoKSwgd2hpY2gg
YWxsb3dzIHRoZQorICAgIC8vIGdpdmVuIGZ1bmN0b3IgdG8gcmV0dXJuIGZhbHNlIHRvIGluZGlj
YXRlIHRoYXQgd2UgZG9uJ3Qgd2lzaCB0byBjb25zaWRlciB0aGUgZ2l2ZW4gYmxvY2suCisgICAg
Ly8gVXNlZnVsIGZvciBjb21wdXRpbmcgcHJ1bmVkIFNTQSBmb3JtLgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9t
aW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgY29uc3QgR3JhcGg6Okxpc3QmIGZyb20sIGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBHcmFwaDo6U2V0IHNldDsKKyAgICAg
ICAgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2ZJbXBsKAorICAgICAg
ICAgICAgZnJvbSwKKyAgICAgICAgICAgIFsmXSAoR3JhcGg6Okxpc3QgYmxvY2spIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgIGlmICghc2V0LmFkZChibG9jaykpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3RvcihibG9jayk7
CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgR3JhcGg6OlNldCBpdGVyYXRlZERv
bWluYW5jZUZyb250aWVyT2YoY29uc3QgR3JhcGg6Okxpc3QmIGZyb20pIGNvbnN0CisgICAgewor
ICAgICAgICBHcmFwaDo6U2V0IHJlc3VsdDsKKyAgICAgICAgZm9yQWxsQmxvY2tzSW5JdGVyYXRl
ZERvbWluYW5jZUZyb250aWVyT2ZJbXBsKAorICAgICAgICAgICAgZnJvbSwKKyAgICAgICAgICAg
IFsmXSAoR3JhcGg6Ok5vZGUgbm9kZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdC5hZGQobm9kZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAgICAgICAgb3V0LnByaW50KCIg
ICAgTm90IFZhbGlkLlxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2RhdGEuc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChtX2RhdGFbYmxv
Y2tJbmRleF0ucHJlTnVtYmVyID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBCbG9jayAjIiwgYmxv
Y2tJbmRleCwgIjogaWRvbSA9ICIsIHBvaW50ZXJEdW1wKG1fZGF0YVtibG9ja0luZGV4XS5pZG9t
UGFyZW50KSwgIiwgaWRvbUtpZHMgPSBbIik7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29t
bWE7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kYXRhW2Jsb2NrSW5k
ZXhdLmlkb21LaWRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgKm1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkc1tpXSk7CisgICAgICAgICAgICBvdXQucHJp
bnQoIl0sIHByZS9wb3N0ID0gIiwgbV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciwgIi8iLCBt
X2RhdGFbYmxvY2tJbmRleF0ucG9zdE51bWJlciwgIlxuIik7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIC8vIFRoaXMgaW1wbGVtZW50cyBMZW5nYXVlciBhbmQgVGFyamFu
J3MgIkEgRmFzdCBBbGdvcml0aG0gZm9yIEZpbmRpbmcgRG9taW5hdG9ycyBpbiBhIEZsb3dncmFw
aCIKKyAgICAvLyAoVE9QTEFTIDE5NzkpLiBJdCB1c2VzIHRoZSAic2ltcGxlIiBpbXBsZW1lbnRh
dGlvbiBvZiBMSU5LIGFuZCBFVkFMLCB3aGljaCB5aWVsZHMgYW4gTyhuIGxvZyBuKQorICAgIC8v
IHNvbHV0aW9uLiBUaGUgZnVsbCBwYXBlciBpcyBsaW5rZWQgYmVsb3c7IHRoaXMgY29kZSBhdHRl
bXB0cyB0byBjbG9zZWx5IGZvbGxvdyB0aGUgYWxnb3JpdGhtIGFzCisgICAgLy8gaXQgaXMgcHJl
c2VudGVkIGluIHRoZSBwYXBlcjsgaW4gcGFydGljdWxhciBzZWN0aW9ucyAzIGFuZCA0IGFzIHdl
bGwgYXMgYXBwZW5kaXggQi4KKyAgICAvLyBodHRwczovL3d3dy5jcy5wcmluY2V0b24uZWR1L2Nv
dXJzZXMvYXJjaGl2ZS9mYWxsMDMvY3M1MjgvaGFuZG91dHMvYSUyMGZhc3QlMjBhbGdvcml0aG0l
MjBmb3IlMjBmaW5kaW5nLnBkZgorICAgIC8vCisgICAgLy8gVGhpcyBjb2RlIGlzIHZlcnkgc3Vi
dGxlLiBUaGUgTGVuZ2F1ZXItVGFyamFuIGFsZ29yaXRobSBpcyBpbmNyZWRpYmx5IGRlZXAgdG8g
YmVnaW4gd2l0aC4gVGhlCisgICAgLy8gZ29hbCBvZiB0aGlzIGNvZGUgaXMgdG8gZm9sbG93IHRo
ZSBjb2RlIGluIHRoZSBwYXBlciwgaG93ZXZlciBvdXIgaW1wbGVtZW50YXRpb24gbXVzdCBkZXZp
YXRlCisgICAgLy8gZnJvbSB0aGUgcGFwZXIgd2hlbiBpdCBjb21lcyB0byByZWN1cnNpb24uIFRo
ZSBhdXRob3JzIGhhZCB1c2VkIHJlY3Vyc2lvbiB0byBpbXBsZW1lbnQgREZTLCBhbmQKKyAgICAv
LyBhbHNvIHRvIGltcGxlbWVudCB0aGUgInNpbXBsZSIgRVZBTC4gV2UgY29udmVydCBib3RoIG9m
IHRob3NlIGludG8gd29ya2xpc3QtYmFzZWQgc29sdXRpb25zLgorICAgIC8vIEZpbmFsbHksIG9u
Y2UgdGhlIGFsZ29yaXRobSBnaXZlcyB1cyBpbW1lZGlhdGUgZG9taW5hdG9ycywgd2UgaW1wbGVt
ZW50IGRvbWluYW5jZSB0ZXN0cyBieQorICAgIC8vIHdhbGtpbmcgdGhlIGRvbWluYXRvciB0cmVl
IGFuZCBjb21wdXRpbmcgcHJlIGFuZCBwb3N0IG51bWJlcnMuIFdlIHRoZW4gdXNlIHRoZSByYW5n
ZSBpbmNsdXNpb24KKyAgICAvLyBjaGVjayB0cmljayB0aGF0IHdhcyBmaXJzdCBkaXNjb3ZlcmVk
IGJ5IFBhdWwgRi4gRGlldHogaW4gMTk4MiBpbiAiTWFpbnRhaW5pbmcgb3JkZXIgaW4gYSBsaW5r
ZWQKKyAgICAvLyBsaXN0IiAoc2VlIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD04
MDIxODQpLgorCisgICAgY2xhc3MgTGVuZ2F1ZXJUYXJqYW4geworICAgIHB1YmxpYzoKKyAgICAg
ICAgTGVuZ2F1ZXJUYXJqYW4oR3JhcGgmIGdyYXBoKQorICAgICAgICAgICAgOiBtX2dyYXBoKGdy
YXBoKQorICAgICAgICAgICAgLCBtX2RhdGEoZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtTm9kZXMoKTsgYmxvY2tJbmRl
eC0tOykgeworICAgICAgICAgICAgICAgIEdyYXBoOjpOb2RlIGJsb2NrID0gbV9ncmFwaC5ub2Rl
KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1fZGF0YVtibG9ja10ubGFiZWwgPSBi
bG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIGNvbXB1
dGUoKQorICAgICAgICB7CisgICAgICAgICAgICBjb21wdXRlRGVwdGhGaXJzdFByZU51bWJlcmlu
ZygpOyAvLyBTdGVwIDEuCisgICAgICAgICAgICBjb21wdXRlU2VtaURvbWluYXRvcnNBbmRJbXBs
aWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcHMgMiBhbmQgMy4KKyAgICAgICAgICAg
IGNvbXB1dGVFeHBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcCA0LgorICAgICAg
ICB9CisgICAgCisgICAgICAgIEdyYXBoOjpOb2RlIGltbWVkaWF0ZURvbWluYXRvcihHcmFwaDo6
Tm9kZSBibG9jaykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZGF0YVtibG9ja10u
ZG9tOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGNvbXB1dGVEZXB0
aEZpcnN0UHJlTnVtYmVyaW5nKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVXNlIGEgYmxv
Y2sgd29ya2xpc3QgdGhhdCBhbHNvIHRyYWNrcyB0aGUgaW5kZXggaW5zaWRlIHRoZSBzdWNjZXNz
b3IgbGlzdC4gVGhpcyBpcworICAgICAgICAgICAgLy8gbmVjZXNzYXJ5IGZvciBlbnN1cmluZyB0
aGF0IHdlIGRvbid0IGF0dGVtcHQgdG8gdmlzaXQgYSBzdWNjZXNzb3IgdW50aWwgdGhlIHByZXZp
b3VzCisgICAgICAgICAgICAvLyBzdWNjZXNzb3JzIHRoYXQgd2UgaGFkIHZpc2l0ZWQgYXJlIGZ1
bGx5IHByb2Nlc3NlZC4gVGhpcyBlbmRzIHVwIGJlaW5nIHJldmVhbGVkIGluIHRoZQorICAgICAg
ICAgICAgLy8gb3V0cHV0IG9mIHRoaXMgbWV0aG9kIGJlY2F1c2UgdGhlIGZpcnN0IHRpbWUgd2Ug
c2VlIGFuIGVkZ2UgdG8gYSBibG9jaywgd2Ugc2V0IHRoZQorICAgICAgICAgICAgLy8gYmxvY2sn
cyBwYXJlbnQuIFNvLCBpZiB3ZSBoYXZlOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IEEgLT4gQgorICAgICAgICAgICAgLy8gQSAtPiBDCisgICAgICAgICAgICAvLyBCIC0+IEMKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBBbmQgd2UncmUgcHJvY2Vzc2luZyBBLCB0aGVu
IHdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgaWYgd2Ugc2VlIEEtPkIgZmlyc3QgKGFuZCBoZW5jZSBz
ZXQKKyAgICAgICAgICAgIC8vIEIncyBwcmVudW1iZXIgYmVmb3JlIHdlIHNldCBDJ3MpIHRoZW4g
d2UgYWxzbyBlbmQgdXAgc2V0dGluZyBDJ3MgcGFyZW50IHRvIEIgYnkgdmlydHVlCisgICAgICAg
ICAgICAvLyBvZiBub3Qgbm90aWNpbmcgQS0+QyB1bnRpbCB3ZSdyZSBkb25lIHByb2Nlc3Npbmcg
Qi4KKworICAgICAgICAgICAgRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDxHcmFwaDo6Tm9kZSwg
dW5zaWduZWQsIEdyYXBoOjpTZXQ+CisgICAgICAgICAgICBFeHRlbmRlZEJsb2NrV29ya2xpc3Q8
dW5zaWduZWQ+IHdvcmtsaXN0OworICAgICAgICAgICAgd29ya2xpc3QucHVzaChtX2dyYXBoLm5v
ZGUoMCksIDApOworICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChHcmFwaE5vZGVXaXRoPEdy
YXBoOjpOb2RlLCB1bnNpZ25lZD4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAg
ICAgICAgR3JhcGg6Ok5vZGUgYmxvY2sgPSBpdGVtLm5vZGU7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgc3VjY2Vzc29ySW5kZXggPSBpdGVtLmRhdGE7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyBXZSBpbml0aWFsbHkgcHVzaCB3aXRoIHN1Y2Nlc3NvckluZGV4ID0gMCByZWdh
cmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHdlIGhhdmUgYW55CisgICAgICAgICAgICAgICAgLy8g
c3VjY2Vzc29ycy4gVGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBhc3NpZ24gb3VyIHByZW51bWJlci4g
U3Vic2VxdWVudGx5IHdlIGdldCBwdXNoZWQKKyAgICAgICAgICAgICAgICAvLyB3aXRoIGhpZ2hl
ciBzdWNjZXNzb3JJbmRleCB2YWx1ZXMsIGJ1dCBvbmx5IGlmIHRoZXkgYXJlIGluIHJhbmdlLgor
ICAgICAgICAgICAgICAgIEFTU0VSVCghc3VjY2Vzc29ySW5kZXggfHwgc3VjY2Vzc29ySW5kZXgg
PCBtX2dyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spLnNpemUoKSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIXN1Y2Nlc3NvckluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIG1fZGF0YVtibG9ja10u
c2VtaU51bWJlciA9IG1fYmxvY2tCeVByZU51bWJlci5zaXplKCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fYmxvY2tCeVByZU51bWJlci5hcHBlbmQoYmxvY2spOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3JJbmRleCA8IG1fZ3Jh
cGguc3VjY2Vzc29ycyhibG9jaykuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG5leHRTdWNjZXNzb3JJbmRleCA9IHN1Y2Nlc3NvckluZGV4ICsgMTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5leHRTdWNjZXNzb3JJbmRleCA8IG1fZ3JhcGguc3VjY2Vzc29ycyhibG9j
aykuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuZm9yY2VQdXNoKGJs
b2NrLCBuZXh0U3VjY2Vzc29ySW5kZXgpOworCisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvckJsb2NrID0gbV9ncmFwaC5zdWNjZXNzb3JzKGJsb2NrKVtzdWNjZXNzb3JJ
bmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmICh3b3JrbGlzdC5wdXNoKHN1Y2Nlc3NvckJs
b2NrLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YVtzdWNjZXNzb3JCbG9ja10u
cGFyZW50ID0gYmxvY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgCisgICAgICAgIHZvaWQgY29tcHV0ZVNlbWlEb21pbmF0b3JzQW5kSW1wbGljaXRJ
bW1lZGlhdGVEb21pbmF0b3JzKCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjdXJyZW50UHJlTnVtYmVyID0gbV9ibG9ja0J5UHJlTnVtYmVyLnNpemUoKTsgY3VycmVudFBy
ZU51bWJlci0tID4gMTspIHsKKyAgICAgICAgICAgICAgICBHcmFwaDo6Tm9kZSBibG9jayA9IG1f
YmxvY2tCeVByZU51bWJlcltjdXJyZW50UHJlTnVtYmVyXTsKKyAgICAgICAgICAgICAgICBCbG9j
a0RhdGEmIGJsb2NrRGF0YSA9IG1fZGF0YVtibG9ja107CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyBTdGVwIDI6CisgICAgICAgICAgICAgICAgZm9yIChHcmFwaDo6Tm9kZSBwcmVk
ZWNlc3NvckJsb2NrIDogbV9ncmFwaC5wcmVkZWNlc3NvcnMoYmxvY2spKSB7CisgICAgICAgICAg
ICAgICAgICAgIEdyYXBoOjpOb2RlIGludGVybWVkaWF0ZUJsb2NrID0gZXZhbChwcmVkZWNlc3Nv
ckJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhLnNlbWlOdW1iZXIgPSBzdGQ6
Om1pbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YVtpbnRlcm1lZGlhdGVCbG9ja10u
c2VtaU51bWJlciwgYmxvY2tEYXRhLnNlbWlOdW1iZXIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBidWNrZXRQcmVOdW1iZXIgPSBibG9ja0RhdGEuc2VtaU51
bWJlcjsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYnVja2V0UHJlTnVtYmVyIDw9IGN1cnJlbnRQ
cmVOdW1iZXIpOworICAgICAgICAgICAgICAgIG1fZGF0YVttX2Jsb2NrQnlQcmVOdW1iZXJbYnVj
a2V0UHJlTnVtYmVyXV0uYnVja2V0LmFwcGVuZChibG9jayk7CisgICAgICAgICAgICAgICAgbGlu
ayhibG9ja0RhdGEucGFyZW50LCBibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBTdGVwIDM6CisgICAgICAgICAgICAgICAgZm9yIChHcmFwaDo6Tm9kZSBzZW1pRG9taW5l
ZSA6IG1fZGF0YVtibG9ja0RhdGEucGFyZW50XS5idWNrZXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgR3JhcGg6Ok5vZGUgcG9zc2libGVEb21pbmF0b3IgPSBldmFsKHNlbWlEb21pbmVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBzZW1pRG9taW5lZURhdGEgPSBtX2RhdGFbc2Vt
aURvbWluZWVdOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ibG9ja0J5UHJlTnVtYmVy
W3NlbWlEb21pbmVlRGF0YS5zZW1pTnVtYmVyXSA9PSBibG9ja0RhdGEucGFyZW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBwb3NzaWJsZURvbWluYXRvckRhdGEgPSBtX2RhdGFb
cG9zc2libGVEb21pbmF0b3JdOworICAgICAgICAgICAgICAgICAgICBpZiAocG9zc2libGVEb21p
bmF0b3JEYXRhLnNlbWlOdW1iZXIgPCBzZW1pRG9taW5lZURhdGEuc2VtaU51bWJlcikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbWlEb21pbmVlRGF0YS5kb20gPSBwb3NzaWJsZURvbWluYXRv
cjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2Vt
aURvbWluZWVEYXRhLmRvbSA9IGJsb2NrRGF0YS5wYXJlbnQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1fZGF0YVtibG9ja0RhdGEucGFyZW50XS5idWNrZXQuY2xlYXIoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIGNvbXB1dGVFeHBs
aWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGN1cnJlbnRQcmVOdW1iZXIgPSAxOyBjdXJyZW50UHJlTnVtYmVyIDwgbV9ibG9ja0J5
UHJlTnVtYmVyLnNpemUoKTsgKytjdXJyZW50UHJlTnVtYmVyKSB7CisgICAgICAgICAgICAgICAg
R3JhcGg6Ok5vZGUgYmxvY2sgPSBtX2Jsb2NrQnlQcmVOdW1iZXJbY3VycmVudFByZU51bWJlcl07
CisgICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBibG9ja0RhdGEgPSBtX2RhdGFbYmxvY2tdOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGJsb2NrRGF0YS5kb20gIT0gbV9ibG9j
a0J5UHJlTnVtYmVyW2Jsb2NrRGF0YS5zZW1pTnVtYmVyXSkKKyAgICAgICAgICAgICAgICAgICAg
YmxvY2tEYXRhLmRvbSA9IG1fZGF0YVtibG9ja0RhdGEuZG9tXS5kb207CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBsaW5rKEdyYXBoOjpOb2RlIGZyb20sIEdy
YXBoOjpOb2RlIHRvKQorICAgICAgICB7CisgICAgICAgICAgICBtX2RhdGFbdG9dLmFuY2VzdG9y
ID0gZnJvbTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBHcmFwaDo6Tm9kZSBldmFsKEdyYXBo
OjpOb2RlIGJsb2NrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fZGF0YVtibG9ja10u
YW5jZXN0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICAKKyAgICAg
ICAgICAgIGNvbXByZXNzKGJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGFbYmxvY2td
LmxhYmVsOworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgY29tcHJlc3MoR3JhcGg6Ok5v
ZGUgaW5pdGlhbEJsb2NrKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIHdhcyBtZWFu
dCB0byBiZSBhIHJlY3Vyc2l2ZSBmdW5jdGlvbiwgYnV0IHdlIGRvbid0IGxpa2UgcmVjdXJzaW9u
IGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIHdhbnQgdG8gYmxvdyB0aGUgc3RhY2su
IFRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aWxsIGNhbGwgY29tcHJlc3MoKSByZWN1cnNpdmVseSBv
biB0aGUKKyAgICAgICAgICAgIC8vIGFuY2VzdG9yIG9mIGFueXRoaW5nIHRoYXQgaGFzIGFuIGFu
Y2VzdG9yLiBTbywgd2UgcG9wdWxhdGUgb3VyIHdvcmtsaXN0IHdpdGggdGhlCisgICAgICAgICAg
ICAvLyByZWN1cnNpdmUgYW5jZXN0b3JzIG9mIGluaXRpYWxCbG9jay4gVGhlbiB3ZSBwcm9jZXNz
IHRoZSBsaXN0IHN0YXJ0aW5nIGZyb20gdGhlIGJsb2NrCisgICAgICAgICAgICAvLyB0aGF0IGlz
IGZ1cnRoZXN0IHVwIHRoZSBhbmNlc3RvciBjaGFpbi4KKyAgICAgICAgCisgICAgICAgICAgICBH
cmFwaDo6Tm9kZSBhbmNlc3RvciA9IG1fZGF0YVtpbml0aWFsQmxvY2tdLmFuY2VzdG9yOworICAg
ICAgICAgICAgQVNTRVJUKGFuY2VzdG9yKTsKKyAgICAgICAgICAgIGlmICghbV9kYXRhW2FuY2Vz
dG9yXS5hbmNlc3RvcikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICAgICAgVmVjdG9yPEdyYXBoOjpOb2RlLCAxNj4gc3RhY2s7CisgICAgICAgICAgICBmb3IgKEdy
YXBoOjpOb2RlIGJsb2NrID0gaW5pdGlhbEJsb2NrOyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxv
Y2tdLmFuY2VzdG9yKQorICAgICAgICAgICAgICAgIHN0YWNrLmFwcGVuZChibG9jayk7CisgICAg
ICAgIAorICAgICAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGJsb2NrcyB0aGF0IGhhdmUg
YW4gYW5jZXN0b3IgdGhhdCBoYXMgYW4gYW5jZXN0b3IuIFRoZSBsYXN0IHR3bworICAgICAgICAg
ICAgLy8gZWxlbWVudHMgaW4gdGhlIHN0YWNrIHdvbid0IHNhdGlzZnkgdGhpcyBwcm9wZXJ0eS4K
KyAgICAgICAgICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CisgICAgICAgICAgICBBU1NF
UlQoIW1fZGF0YVtzdGFja1tzdGFjay5zaXplKCkgLSAxXV0uYW5jZXN0b3IpOworICAgICAgICAg
ICAgQVNTRVJUKCFtX2RhdGFbbV9kYXRhW3N0YWNrW3N0YWNrLnNpemUoKSAtIDJdXS5hbmNlc3Rv
cl0uYW5jZXN0b3IpOworICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0
YWNrLnNpemUoKSAtIDI7IGktLTspIHsKKyAgICAgICAgICAgICAgICBHcmFwaDo6Tm9kZSBibG9j
ayA9IHN0YWNrW2ldOworICAgICAgICAgICAgICAgIEdyYXBoOjpOb2RlJiBsYWJlbE9mQmxvY2sg
PSBtX2RhdGFbYmxvY2tdLmxhYmVsOworICAgICAgICAgICAgICAgIEdyYXBoOjpOb2RlJiBhbmNl
c3Rvck9mQmxvY2sgPSBtX2RhdGFbYmxvY2tdLmFuY2VzdG9yOworICAgICAgICAgICAgICAgIEFT
U0VSVChhbmNlc3Rvck9mQmxvY2spOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2RhdGFbYW5j
ZXN0b3JPZkJsb2NrXS5hbmNlc3Rvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBH
cmFwaDo6Tm9kZSBsYWJlbE9mQW5jZXN0b3JPZkJsb2NrID0gbV9kYXRhW2FuY2VzdG9yT2ZCbG9j
a10ubGFiZWw7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobV9kYXRhW2xhYmVs
T2ZBbmNlc3Rvck9mQmxvY2tdLnNlbWlOdW1iZXIgPCBtX2RhdGFbbGFiZWxPZkJsb2NrXS5zZW1p
TnVtYmVyKQorICAgICAgICAgICAgICAgICAgICBsYWJlbE9mQmxvY2sgPSBsYWJlbE9mQW5jZXN0
b3JPZkJsb2NrOworICAgICAgICAgICAgICAgIGFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0YVthbmNl
c3Rvck9mQmxvY2tdLmFuY2VzdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgc3RydWN0IEJsb2NrRGF0YSB7CisgICAgICAgICAgICBCbG9ja0RhdGEoKQorICAgICAgICAg
ICAgICAgIDogcGFyZW50KG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBwcmVOdW1iZXIoVUlO
VF9NQVgpCisgICAgICAgICAgICAgICAgLCBzZW1pTnVtYmVyKFVJTlRfTUFYKQorICAgICAgICAg
ICAgICAgICwgYW5jZXN0b3IobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIGxhYmVsKG51bGxw
dHIpCisgICAgICAgICAgICAgICAgLCBkb20obnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBHcmFwaDo6Tm9kZSBwYXJlbnQ7CisgICAg
ICAgICAgICB1bnNpZ25lZCBwcmVOdW1iZXI7CisgICAgICAgICAgICB1bnNpZ25lZCBzZW1pTnVt
YmVyOworICAgICAgICAgICAgR3JhcGg6Ok5vZGUgYW5jZXN0b3I7CisgICAgICAgICAgICBHcmFw
aDo6Tm9kZSBsYWJlbDsKKyAgICAgICAgICAgIFZlY3RvcjxHcmFwaDo6Tm9kZT4gYnVja2V0Owor
ICAgICAgICAgICAgR3JhcGg6Ok5vZGUgZG9tOworICAgICAgICB9OworICAgIAorICAgICAgICBH
cmFwaCYgbV9ncmFwaDsKKyAgICAgICAgQmxvY2tNYXA8QmxvY2tEYXRhPiBtX2RhdGE7CisgICAg
ICAgIFZlY3RvcjxHcmFwaDo6Tm9kZT4gbV9ibG9ja0J5UHJlTnVtYmVyOworICAgIH07CisKKyAg
ICBjbGFzcyBOYWl2ZURvbWluYXRvcnMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTmFpdmVEb21p
bmF0b3JzKEdyYXBoJiBncmFwaCkKKyAgICAgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgbmFpdmUgZG9taW5hdG9yIHNv
bHZlci4KKworICAgICAgICAgICAgQVNTRVJUKCFncmFwaC5wcmVkZWNlc3NvcnMoZ3JhcGgucm9v
dCgpKS5zaXplKCkpOworICAgIAorICAgICAgICAgICAgdW5zaWduZWQgbnVtQmxvY2tzID0gZ3Jh
cGgubnVtTm9kZXMoKTsKKyAgICAKKyAgICAgICAgICAgIC8vIEFsbG9jYXRlIHN0b3JhZ2UgZm9y
IHRoZSBkZW5zZSBkb21pbmFuY2UgbWF0cml4LiAKKyAgICAgICAgICAgIG1fcmVzdWx0cy5ncm93
KG51bU5vZGVzKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bU5vZGVzOyBpLS07
KQorICAgICAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5yZXNpemUobnVtTm9kZXMpOworICAgICAg
ICAgICAgbV9zY3JhdGNoLnJlc2l6ZShudW1Ob2Rlcyk7CisKKyAgICAgICAgICAgIC8vIFdlIGtu
b3cgdGhhdCB0aGUgZW50cnkgYmxvY2sgaXMgb25seSBkb21pbmF0ZWQgYnkgaXRzZWxmLgorICAg
ICAgICAgICAgbV9yZXN1bHRzWzBdLmNsZWFyQWxsKCk7CisgICAgICAgICAgICBtX3Jlc3VsdHNb
MF0uc2V0KDApOworCisgICAgICAgICAgICAvLyBGaW5kIGFsbCBvZiB0aGUgdmFsaWQgYmxvY2tz
LgorICAgICAgICAgICAgbV9zY3JhdGNoLmNsZWFyQWxsKCk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBudW1Ob2RlczsgaS0tOykgeworICAgICAgICAgICAgICAgIGlmICghZ3JhcGgu
bm9kZShpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
bV9zY3JhdGNoLnNldChpKTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIC8vIE1h
cmsgYWxsIG5vZGVzIGFzIGRvbWluYXRlZCBieSBldmVyeXRoaW5nLgorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbnVtTm9kZXM7IGktLSA+IDE7KSB7CisgICAgICAgICAgICAgICAgaWYg
KCFncmFwaC5ub2RlKGkpIHx8ICFncmFwaC5wcmVkZWNlc3NvcnMoZ3JhcGgubm9kZShpKSkuc2l6
ZSgpKQorICAgICAgICAgICAgICAgICAgICBtX3Jlc3VsdHNbaV0uY2xlYXJBbGwoKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5zZXQobV9z
Y3JhdGNoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSXRlcmF0aXZlbHkgZWxp
bWluYXRlIG5vZGVzIHRoYXQgYXJlIG5vdCBkb21pbmF0b3IuCisgICAgICAgICAgICBib29sIGNo
YW5nZWQ7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNl
OworICAgICAgICAgICAgICAgIC8vIFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBi
bG9ja3M6IGZvcndhcmQgc2Nhbi4KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgbnVtTm9kZXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVu
ZURvbWluYXRvcnMoaSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNoYW5nZWQpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9y
cyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogYmFja3dhcmQgc2Nhbi4KKyAgICAgICAgICAgICAg
ICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
Tm9kZXM7IGktLSA+IDE7KQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHBydW5lRG9t
aW5hdG9ycyhpKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIGRvbWluYXRlcyhCbG9ja0luZGV4IGZyb20sIEJsb2NrSW5k
ZXggdG8pIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG9d
LmdldChmcm9tKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBib29sIGRvbWluYXRlcyhCYXNp
Y0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGRvbWluYXRlcyhmcm9tLT5pbmRleCwgdG8tPmluZGV4KTsKKyAgICAgICAgfQor
ICAgIAorICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IGdyYXBoLm51bU5vZGVzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgICAgIEdyYXBo
OjpOb2RlIGJsb2NrID0gZ3JhcGgubm9kZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIiAgICBCbG9jayAiLCBtX2dyYXBoLmR1bXAoYmxvY2spLCAiOiIpOworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3RoZXJJbmRleCA9IDA7IG90aGVySW5kZXggPCBn
cmFwaC5udW1Ob2RlcygpOyArK290aGVySW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFkb21pbmF0ZXMobV9ncmFwaC5pbmRleChibG9jayksIG90aGVySW5kZXgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgi
ICIsIG1fZ3JhcGguZHVtcChtX2dyYXBoLm5vZGUob3RoZXJJbmRleCkpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCBwcnVuZURvbWluYXRv
cnModW5zaWduZWQgaWR4KQorICAgICAgICB7CisgICAgICAgICAgICBHcmFwaDo6Tm9kZSBibG9j
ayA9IG1fZ3JhcGgubm9kZShpZHgpOworCisgICAgICAgICAgICBpZiAoIWJsb2NrIHx8ICFtX2dy
YXBoLnByZWRlY2Vzc29ycyhibG9jaykuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgLy8gRmluZCB0aGUgaW50ZXJzZWN0aW9uIG9mIGRvbShwcmVk
cykuCisgICAgICAgICAgICBtX3NjcmF0Y2guc2V0KG1fcmVzdWx0c1ttX2dyYXBoLmluZGV4KG1f
Z3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKVswXSldKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IG1fZ3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKS5zaXplKCk7IGotLSA+IDE7KQorICAg
ICAgICAgICAgICAgIG1fc2NyYXRjaC5maWx0ZXIobV9yZXN1bHRzW21fZ3JhcGguaW5kZXgobV9n
cmFwaC5wcmVkZWNlc3NvcnMoYmxvY2spW2pdKV0pOworCisgICAgICAgICAgICAvLyBUaGUgYmxv
Y2sgaXMgYWxzbyBkb21pbmF0ZWQgYnkgaXRzZWxmLgorICAgICAgICAgICAgbV9zY3JhdGNoLnNl
dChpZHgpOworCisgICAgICAgICAgICByZXR1cm4gbV9yZXN1bHRzW2lkeF0uc2V0QW5kQ2hlY2so
bV9zY3JhdGNoKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBHcmFwaCBtX2dyYXBoOworICAg
ICAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvcj4gbV9yZXN1bHRzOyAvLyBGb3IgZWFjaCBibG9jaywg
dGhlIGJpdHZlY3RvciBvZiBibG9ja3MgdGhhdCBkb21pbmF0ZSBpdC4KKyAgICAgICAgRmFzdEJp
dFZlY3RvciBtX3NjcmF0Y2g7IC8vIEEgdGVtcG9yYXJ5IGJpdHZlY3RvciB3aXRoIGJpdCBmb3Ig
ZWFjaCBibG9jay4gV2UgcmVjeWNsZSB0aGlzIHRvIHNhdmUgbmV3L2RlbGV0ZXMuCisgICAgfTsK
KworICAgIHN0cnVjdCBWYWxpZGF0aW9uQ29udGV4dCB7CisgICAgICAgIFZhbGlkYXRpb25Db250
ZXh0KEdyYXBoJiBncmFwaCwgRG9taW5hdG9ycyYgZG9taW5hdG9ycykKKyAgICAgICAgICAgIDog
Z3JhcGgoZ3JhcGgpCisgICAgICAgICAgICAsIGRvbWluYXRvcnMoZG9taW5hdG9ycykKKyAgICAg
ICAgICAgICwgbmFpdmVEb21pbmF0b3JzKGdyYXBoKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAKKyAgICAgICAgdm9pZCByZXBvcnRFcnJvcihHcmFwaDo6Tm9kZSBmcm9tLCBHcmFwaDo6Tm9k
ZSB0bywgY29uc3QgY2hhciogbWVzc2FnZSkKKyAgICAgICAgeworICAgICAgICAgICAgRXJyb3Ig
ZXJyb3I7CisgICAgICAgICAgICBlcnJvci5mcm9tID0gZnJvbTsKKyAgICAgICAgICAgIGVycm9y
LnRvID0gdG87CisgICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICAgICAg
ICAgIGVycm9ycy5hcHBlbmQoZXJyb3IpOworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQg
aGFuZGxlRXJyb3JzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm9ycy5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgICAgIGRhdGFM
b2coIkRGRyBET01JTkFUT1IgVkFMSURBVElPTiBGQUlMRUQ6XG4iKTsKKyAgICAgICAgICAgIGRh
dGFMb2coIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJGb3IgYmxvY2sgZG9taW5hdGlvbiBy
ZWxhdGlvbnNoaXBzOlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZXJyb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICAgICAgICAgIiAgICAiLCBncmFwaC5kdW1wKGVycm9yc1tpXS5mcm9tKSwgIiAtPiAiLCBn
cmFwaC5kdW1wKGVycm9yc1tpXS50byksCisgICAgICAgICAgICAgICAgICAgICIgKCIsIGVycm9y
c1tpXS5tZXNzYWdlLCAiKVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhTG9n
KCJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiQ29udHJvbCBmbG93IGdyYXBoOlxuIik7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgZ3Jh
cGgubnVtTm9kZXMoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICAgICAgR3JhcGg6Ok5v
ZGUgYmxvY2sgPSBncmFwaC5ub2RlKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBCbG9jayAiLCBncmFwaC5kdW1wKGdyYXBoLm5vZGUoYmxvY2tJbmRleCkpLCAi
OiBzdWNjZXNzb3JzID0gWyIpOworICAgICAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPm51bVN1Y2Nl
c3NvcnMoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBncmFwaC5k
dW1wKGJsb2NrLT5zdWNjZXNzb3IoaSkpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJdLCBw
cmVkZWNlc3NvcnMgPSBbIik7CisgICAgICAgICAgICAgICAgY29tbWEgPSBDb21tYVByaW50ZXIo
KTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnByZWRl
Y2Vzc29ycy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwg
Z3JhcGguZHVtcChibG9jay0+cHJlZGVjZXNzb3JzW2ldKSk7CisgICAgICAgICAgICAgICAgZGF0
YUxvZygiXVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwor
ICAgICAgICAgICAgZGF0YUxvZygiTGVuZ2F1ZXItVGFyamFuIERvbWluYXRvcnM6XG4iKTsKKyAg
ICAgICAgICAgIGRhdGFMb2coZG9taW5hdG9ycyk7CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIp
OworICAgICAgICAgICAgZGF0YUxvZygiTmFpdmUgRG9taW5hdG9yczpcbiIpOworICAgICAgICAg
ICAgbmFpdmVEb21pbmF0b3JzLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgIGRh
dGFMb2coIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhdCB0aW1lIG9mIGZhaWx1
cmU6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coZ3JhcGgpOworICAgICAgICAgICAgZGF0YUxv
ZygiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkRGRyBET01JTkFUT1IgVkFMSURBVElPTiBG
QUlMSUVEIVxuIik7CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgCisgICAg
ICAgIEdyYXBoJiBncmFwaDsKKyAgICAgICAgRG9taW5hdG9ycyYgZG9taW5hdG9yczsKKyAgICAg
ICAgTmFpdmVEb21pbmF0b3JzIG5haXZlRG9taW5hdG9yczsKKyAgICAKKyAgICAgICAgc3RydWN0
IEVycm9yIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGZyb207CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiB0bzsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2U7CisgICAgICAgIH07
CisgICAgCisgICAgICAgIFZlY3RvcjxFcnJvcj4gZXJyb3JzOworICAgIH07CisKKyAgICBib29s
IG5haXZlRG9taW5hdGVzKEdyYXBoOjpMaXN0IGZyb20sIEdyYXBoOjpMaXN0IHRvKSBjb25zdAor
ICAgIHsKKyAgICAgICAgZm9yIChHcmFwaDo6Tm9kZSBibG9jayA9IHRvOyBibG9jazsgYmxvY2sg
PSBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQpIHsKKyAgICAgICAgICAgIGlmIChibG9jayA9PSBm
cm9tKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckFsbEJsb2Nrc0luRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCisgICAgICAg
IEdyYXBoOjpOb2RlIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgewor
ICAgICAgICAvLyBQYXJhcGhyYXNpbmcgZnJvbSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp
L0RvbWluYXRvcl8oZ3JhcGhfdGhlb3J5KToKKyAgICAgICAgLy8gICAgICJUaGUgZG9taW5hbmNl
IGZyb250aWVyIG9mIGEgYmxvY2sgJ2Zyb20nIGlzIHRoZSBzZXQgb2YgYWxsIGJsb2NrcyAndG8n
IHN1Y2ggdGhhdAorICAgICAgICAvLyAgICAgJ2Zyb20nIGRvbWluYXRlcyBhbiBpbW1lZGlhdGUg
cHJlZGVjZXNzb3Igb2YgJ3RvJywgYnV0ICdmcm9tJyBkb2VzIG5vdCBzdHJpY3RseQorICAgICAg
ICAvLyAgICAgZG9taW5hdGUgJ3RvJy4iCisgICAgICAgIC8vCisgICAgICAgIC8vIEEgdXNlZnVs
IGNvcm5lciBjYXNlIHRvIHJlbWVtYmVyOiBhIGJsb2NrIG1heSBiZSBpbiBpdHMgb3duIGRvbWlu
YW5jZSBmcm9udGllciBpZiBpdCBoYXMKKyAgICAgICAgLy8gYSBsb29wIGVkZ2UgdG8gaXRzZWxm
LCBzaW5jZSBpdCBkb21pbmF0ZXMgaXRzZWxmIGFuZCBzbyBpdCBkb21pbmF0ZXMgaXRzIG93biBp
bW1lZGlhdGUKKyAgICAgICAgLy8gcHJlZGVjZXNzb3IsIGFuZCBhIGJsb2NrIG5ldmVyIHN0cmlj
dGx5IGRvbWluYXRlcyBpdHNlbGYuCisgICAgICAgIAorICAgICAgICBmb3JBbGxCbG9ja3NEb21p
bmF0ZWRCeSgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKEdyYXBoOjpMaXN0
IGJsb2NrKSB7CisgICAgICAgICAgICAgICAgZm9yIChHcmFwaDo6Tm9kZSB0byA6IG1fZ3JhcGgu
c3VjY2Vzc29ycyhibG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJpY3RseURv
bWluYXRlcyhmcm9tLCB0bykpCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHRvKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWRE
b21pbmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgY29uc3QgR3JhcGg6Okxpc3QmIGZyb20s
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBHcmFwaDo6TGlz
dCB3b3JrbGlzdCA9IGZyb207CisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBHcmFwaDo6Tm9kZSBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7Cisg
ICAgICAgICAgICBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJbXBsKAorICAgICAg
ICAgICAgICAgIGJsb2NrLAorICAgICAgICAgICAgICAgIFsmXSAoR3JhcGg6Ok5vZGUgb3RoZXJC
bG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAoZnVuY3RvcihvdGhlckJsb2NrKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChvdGhlckJsb2NrKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgQmxvY2tE
YXRhIHsKKyAgICAgICAgQmxvY2tEYXRhKCkKKyAgICAgICAgICAgIDogaWRvbVBhcmVudChudWxs
cHRyKQorICAgICAgICAgICAgLCBwcmVOdW1iZXIoVUlOVF9NQVgpCisgICAgICAgICAgICAsIHBv
c3ROdW1iZXIoVUlOVF9NQVgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgVmVjdG9yPEdyYXBoOjpOb2RlPiBpZG9tS2lkczsKKyAgICAgICAgR3JhcGg6Ok5vZGUgaWRv
bVBhcmVudDsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHByZU51bWJlcjsKKyAgICAgICAg
dW5zaWduZWQgcG9zdE51bWJlcjsKKyAgICB9OworICAgIAorICAgIEdyYXBoJiBtX2dyYXBoOwor
ICAgIEJsb2NrTWFwPEJsb2NrRGF0YT4gbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6RG9taW5hdG9yczsKKworI2VuZGlmIC8vIFdURkRvbWluYXRvcnNfaAor
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264521</attachid>
            <date>2015-11-01 10:25:12 -0800</date>
            <delta_ts>2015-11-01 11:12:15 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114023</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBA
QAorMjAxNS0xMS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERvbWluYXRvcnMgc2hvdWxkIGJlIGZhY3RvcmVkIG91dCBvZiB0aGUgREZHCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3NjQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGYWN0b3JlZCBERkdEb21pbmF0
b3JzLmgvREZHRG9taW5hdG9ycy5jcHAgaW50byBXVEYuIFRvIGRvIHRoaXMsIEkgbWFkZSB0d28g
Y2hhbmdlcyB0byB0aGUKKyAgICAgICAgREZHOgorCisgICAgICAgIDEpIERGRyBub3cgaGFzIGEg
Q0ZHIGFic3RyYWN0aW9uIGNhbGxlZCBERkc6OkNGRy4gVGhlIGNvb2wgdGhpbmcgYWJvdXQgdGhp
cyBpcyB0aGF0IGluIHRoZQorICAgICAgICAgICBmdXR1cmUgaWYgd2Ugd2FudGVkIHRvIHN1cHBv
cnQgaW52ZXJ0ZWQgZG9taW5hdG9ycywgd2UgY291bGQgZG8gaXQgYnkganVzdCBjcmVhdGluZyBh
CisgICAgICAgICAgIERGRzo6QmFja3dhcmRDRkcuCisKKyAgICAgICAgMikgR290IHJpZCBvZiBE
Rkc6OkFuYWx5c2lzLiBGcm9tIG5vdyBvbiwgYW4gQW5hbHlzaXMgYmVpbmcgaW52YWxpZGF0ZWQg
aXMgZXhwcmVzc2VkIGJ5IHRoZQorICAgICAgICAgICBERkc6OkdyYXBoIGhhdmluZyBhIG51bGwg
cG9pbnRlciBmb3IgdGhhdCBhbmFseXNpcy4gV2hlbiB3ZSAicnVuIiB0aGUgYW5hbHlzaXMsIHdl
CisgICAgICAgICAgIGp1c3QgaW5zdGFudGlhdGUgaXQuIFRoaXMgbWFrZXMgaXQgbXVjaCBtb3Jl
IG5hdHVyYWwgdG8gaW50ZWdyYXRlIFdURjo6RG9taW5hdG9ycyBpbnRvCisgICAgICAgICAgIHRo
ZSBERkcuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdBbmFseXNp
cy5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdDRkcuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHOjpDRkcpOgorICAgICAgICAoSlNDOjpERkc6OkNGRzo6cm9vdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q0ZHOjpuZXdNYXA8VD4pOgorICAgICAgICAoSlNDOjpERkc6OkNGRzo6
c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHOjpwcmVkZWNlc3NvcnMpOgorICAg
ICAgICAoSlNDOjpERkc6OkNGRzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNGRzo6bm9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHOjpudW1Ob2Rlcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q0ZHOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxl
cjo6Y3JlYXRlRHVtcExpc3QpOgorICAgICAgICAqIGRmZy9ERkdEb21pbmF0b3JzLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBkZmcvREZHRG9taW5hdG9ycy5oOgorICAgICAgICAoSlNDOjpERkc6
OkRvbWluYXRvcnM6OkRvbWluYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6
OnN0cmljdGx5RG9taW5hdGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0
b3JzOjpkb21pbmF0ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6
OmltbWVkaWF0ZURvbWluYXRvck9mKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpEb21p
bmF0b3JzOjpmb3JBbGxTdHJpY3REb21pbmF0b3JzT2YpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OkRvbWluYXRvcnM6OmZvckFsbERvbWluYXRvcnNPZik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzRG9t
aW5hdGVkQnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFs
bEJsb2Nrc0luRG9taW5hbmNlRnJvbnRpZXJPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2Yp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0lu
UHJ1bmVkSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJbXBs
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJ
bkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OkRvbWluYXRvcnM6OkJsb2NrRGF0YTo6QmxvY2tEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHRWRnZURvbWluYXRlcy5oOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2VEb21p
bmF0ZXM6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aW52YWxpZGF0ZUNGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmhhbmRsZUFzc2VydGlvbkZhaWx1cmUpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjplbnN1cmVEb21pbmF0b3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6ZW5zdXJlUHJlUG9zdE51bWJlcmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmVu
c3VyZU5hdHVyYWxMb29wcyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlUHJvZmls
ZUZvcik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6Omhhc0RlYnVnZ2VyRW5hYmxlZCk6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6
OkxJQ01QaGFzZTo6YXR0ZW1wdEhvaXN0KToKKyAgICAgICAgKiBkZmcvREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNyZWF0ZVByZUhlYWRlcik6
CisgICAgICAgIChKU0M6OkRGRzo6TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZGZnL0RGR05hdHVyYWxMb29wcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TmF0
dXJhbExvb3A6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6TmF0dXJh
bExvb3BzKToKKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcHM6On5OYXR1cmFsTG9vcHMp
OgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6bG9vcHNPZik6CisgICAgICAgIChK
U0M6OkRGRzo6TmF0dXJhbExvb3BzOjpjb21wdXRlRGVwZW5kZW5jaWVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcHM6OmNvbXB1dGUpOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdOYXR1cmFsTG9vcHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9v
cHM6Om51bUxvb3BzKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpTdWNjZXNzb3JzSXRlcmFibGU6OnNpemUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6YXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6b3BlcmF0b3JbXSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjpQcmVQ
b3N0TnVtYmVyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjp+UHJl
UG9zdE51bWJlcmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6Y29t
cHV0ZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjpwcmVOdW1iZXIpOgorICAgICAgICAo
SlNDOjpERkc6OlByZVBvc3ROdW1iZXJpbmc6OnBvc3ROdW1iZXIpOgorICAgICAgICAqIGRmZy9E
RkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0
b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6Om5vbkxvY2FsUmVhY2hp
bmdEZWYpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OnJlYWNoaW5nRGVmQXRU
YWlsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2FsY3VsYXRvci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNTQUNhbGN1bGF0b3I6OmNvbXB1dGVQaGlzKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6
OnJ1bik6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxp
bmspOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OnNhZmVseUludmFsaWRhdGVBZnRlclRlcm1pbmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjppc1ZhbGlkKToKKwogMjAxNS0x
MS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIGFkZCBhIEZJWE1FIHJlZmVyZW5jaW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA3NzUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
U09VUkNFUwogICAgIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCiAgICAgZGZnL0RG
R0Rpc2Fzc2VtYmxlci5jcHAKICAgICBkZmcvREZHRG9lc0dDLmNwcAotICAgIGRmZy9ERkdEb21p
bmF0b3JzLmNwcAogICAgIGRmZy9ERkdEcml2ZXIuY3BwCiAgICAgZGZnL0RGR0VkZ2UuY3BwCiAg
ICAgZGZnL0RGR0Vwb2NoLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01OTksNyArNTk5LDYg
QEAKIAkJMEZEM0U0MEMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQz
RTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQzRTQwRDFC
NjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDcxQjYxOEI2NjAwQzgwRTFFIC8q
IFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLzsgfTsKIAkJMEZEM0U0MEUxQjYxOEI2NjAwQzgwRTFF
IC8qIFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkQzRTQwODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRp
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkw
RkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDRjE1NEZCNEVCMDA5ODNF
NzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi87IH07CiAJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3
MiAvKiBERkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICov
OyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFFMTQx
NzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovOyB9OwogCQkwRkQ4MkUzOTE0
MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBD
b21wYWN0SklUQ29kZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xNTg2LDcgKzE1ODUsNiBAQAogCQlBNzMwQjYxMjEyNTAwNjhGMDA5RDI1
QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3MzBCNjEwMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFs
QWN0aXZhdGlvbi5oICovOyB9OwogCQlBNzMwQjYxMzEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0
RXZhbEFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTczMEI2MTExMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9u
LmNwcCAqLzsgfTsKIAkJQTczMUIyNUExMzAwOTM4ODAwNDBBN0ZBIC8qIEZvdW5kYXRpb24uZnJh
bWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9Owot
CQlBNzM3ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Mzc4MTA5MTc5OUVBMkUwMDgxNzUz
MyAvKiBERkdBbmFseXNpcy5oICovOyB9OwogCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMgLyog
REZHTmF0dXJhbExvb3BzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
ICovOyB9OwogCQlBNzM3ODEwRTE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM3ODEwQjE3
OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi87IH07CiAJCUE3Mzg2NTU0MTE4
Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM4NjU1MTExODY5N0I0MDA1NDAyNzkgLyog
U3BlY2lhbGl6ZWRUaHVua0pJVC5oICovOyB9OwpAQCAtMjYyNiw3ICsyNjI0LDYgQEAKIAkJMEZE
M0U0MDcxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3Bl
cnR5Q29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5
Q29uZGl0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jhc2lj
QmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRDgxQUNGMTU0
RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0RvbWluYXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR0RvbWluYXRv
cnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFEMDE1NEZCNEVCMDA5
ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdEb21pbmF0b3JzLmg7IHBhdGggPSBkZmcvREZHRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJp
bGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NhcGFi
aWxpdGllcy5jcHA7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxp
dGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMu
aDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTM2NDAsNyArMzYzNyw2IEBACiAJCUE3Mjk5REE0MTdEMTI4NTgwMDVGNUZGOSAvKiBT
ZXRDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXRDb25z
dHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzMwQjYxMDEyNTAwNjhG
MDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RyaWN0RXZhbEFjdGl2YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTczMEI2MTExMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmljdEV2YWxBY3Rp
dmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTczNzgxMDkxNzk5RUEy
RTAwODE3NTMzIC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxM
b29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFs
TG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3Mzc4MTBCMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9v
cHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7
IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3Mzg2NTUxMTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWNpYWxpemVkVGh1bmtKSVQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2NjUsNyArNTY2MSw2IEBACiAJCQkJMEYxOEQz
Q0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICov
LAogCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8s
CiAJCQkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovLAotCQkJ
CUE3Mzc4MTA5MTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFseXNpcy5oICovLAogCQkJCTBGMUUz
QTQzMTUzNENCQUQwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggKi8sCiAJCQkJMEYy
REQ4MEMxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3Bw
ICovLAogCQkJCTBGMkREODBEMUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdBcmd1bWVudHNFbGltaW5h
dGlvblBoYXNlLmggKi8sCkBAIC01NzUxLDcgKzU3NDYsNiBAQAogCQkJCTBGRjQyNzYyMTU5MUEx
QzkwMDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRjVBMTI3MTE5MkQ5RkRG
MDA4NzY0QTMgLyogREZHRG9lc0dDLmNwcCAqLywKIAkJCQkwRjVBMTI3MjE5MkQ5RkRGMDA4NzY0
QTMgLyogREZHRG9lc0dDLmggKi8sCi0JCQkJMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERG
R0RvbWluYXRvcnMuY3BwICovLAogCQkJCTBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmggKi8sCiAJCQkJMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJs
ZUZvcm1hdFN0YXRlLmggKi8sCiAJCQkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5jcHAgKi8sCkBAIC02NjU4LDcgKzY2NTIsNiBAQAogCQkJCTBGMThEM0QwMUI1NUE2RTAw
MDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBNzM3ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5h
bHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBE
RkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxMjFBQjNEOEJF
MDBCQkI4RTggLyogREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8sCkBAIC04MjIyLDcgKzgyMTUsNiBAQAogCQkJCUMyOTgxRkQ4MTdCQUVF
NEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNDI3NjQxNTkxQTFDQzAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjVBMTI3MzE5MkQ5RkRGMDA4NzY0QTMgLyogREZHRG9lc0dDLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21p
bmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAv
KiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUUxNkI3MkEwQjAwNURG
OTVCIC8qIERGR0VkZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0MzMxQURGMDkwMTAw
RUQ3OTJDIC8qIERGR0Vwb2NoLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBERkdBbmFseXNpc19oCi0jZGVmaW5lIERGR0FuYWx5c2lzX2gKLQotI2lmIEVO
QUJMRShERkdfSklUKQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLWNsYXNz
IEdyYXBoOwotCi0vLyBVc2UgdGhpcyBhcyBhIG1peGluIGZvciBERkcgYW5hbHlzZXMuIFRoZSBh
bmFseXNpcyBpdHNlbGYgaW1wbGVtZW50cyBhIHB1YmxpYwotLy8gY29tcHV0ZShHcmFwaCYpIG1l
dGhvZC4gQ2xpZW50cyBjYWxsIGNvbXB1dGVJZk5lY2Vzc2FyeSgpIHdoZW4gdGhleSB3YW50Ci0v
LyByZXN1bHRzLgotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotY2xhc3MgQW5hbHlzaXMgewotcHVi
bGljOgotICAgIEFuYWx5c2lzKCkKLSAgICAgICAgOiBtX3ZhbGlkKGZhbHNlKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBpbnZhbGlkYXRlKCkKLSAgICB7Ci0gICAgICAgIG1fdmFsaWQg
PSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21wdXRlSWZOZWNlc3NhcnkoR3JhcGgm
IGdyYXBoKQotICAgIHsKLSAgICAgICAgaWYgKG1fdmFsaWQpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIC8vIEl0J3MgYmVzdCB0byBydW4gZGVwZW5kZW50IGFuYWx5c2VzIGZyb20gdGhp
cyBtZXRob2QuCi0gICAgICAgIHN0YXRpY19jYXN0PFQqPih0aGlzKS0+Y29tcHV0ZURlcGVuZGVu
Y2llcyhncmFwaCk7Ci0gICAgICAgIC8vIFNldCB0byB0cnVlIGVhcmx5LCBzaW5jZSB0aGUgYW5h
bHlzaXMgbWF5IGNob29zZSB0byBjYWxsIGl0cyBvd24gbWV0aG9kcyBpbgotICAgICAgICAvLyBj
b21wdXRlKCkgYW5kIGl0IG1heSB3YW50IHRvIEFTU0VSVCgpIHZhbGlkaXR5IGluIHRob3NlIG1l
dGhvZHMuCi0gICAgICAgIG1fdmFsaWQgPSB0cnVlOwotICAgICAgICBzdGF0aWNfY2FzdDxUKj4o
dGhpcyktPmNvbXB1dGUoZ3JhcGgpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX3ZhbGlkOyB9Ci0KLSAgICAvLyBPdmVycmlkZSB0aGlzIHRvIGNvbXB1
dGUgYW55IGRlcGVuZGVudCBhbmFseXNlcy4gU2VlCi0gICAgLy8gTmF0dXJhbExvb3BzOjpjb21w
dXRlRGVwZW5kZW5jaWVzKEdyYXBoJikgZm9yIGFuIGV4YW1wbGUuIFRoaXMgaXNuJ3Qgc3RyaWN0
bHkgbmVjZXNzYXJ5IGJ1dAotICAgIC8vIGl0IG1ha2VzIGRlYnVnIGR1bXBzIGluIGNhc2VzIG9m
IGVycm9yIHdvcmsgYSBiaXQgYmV0dGVyIGJlY2F1c2UgdGhpcyBhbmFseXNpcyB3b3VsZG4ndCB5
ZXQKLSAgICAvLyBiZSBwcmV0ZW5kaW5nIHRvIGJlIHZhbGlkLgotICAgIHZvaWQgY29tcHV0ZURl
cGVuZGVuY2llcyhHcmFwaCYpIHsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV92YWxpZDsKLX07
Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQotCi0jZW5kaWYgLy8gREZHQW5hbHlzaXNfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZHLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
Ry5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDRkdfaAorI2RlZmluZSBERkdD
RkdfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQmxvY2tTZXQu
aCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIENGRyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBCYXNpY0Jsb2NrKiBOb2Rl
OworICAgIHR5cGVkZWYgQmxvY2tTZXQgU2V0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVz
aW5nIE1hcCA9IEJsb2NrTWFwPFQ+OworICAgIHR5cGVkZWYgQmxvY2tMaXN0IExpc3Q7CisKKyAg
ICBDRkcoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgeworICAg
IH0KKworICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fZ3JhcGguYmxvY2soMCk7IH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgTWFwPFQ+IG5ld01hcDxUPigpIHsgcmV0dXJuIEJs
b2NrTWFwPFQ+KG1fZ3JhcGgpOyB9CisKKyAgICBERkc6Ok5vZGU6OlN1Y2Nlc3NvcnNJdGVyYWJs
ZSBzdWNjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+c3VjY2Vzc29ycygpOyB9Cisg
ICAgQmFzaWNCbG9jazo6UHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoTm9kZSBub2RlKSB7
IHJldHVybiBub2RlLT5wcmVkZWNlc3NvcnM7IH0KKworICAgIHVuc2lnbmVkIGluZGV4KE5vZGUg
bm9kZSkgeyByZXR1cm4gbm9kZS0+aW5kZXg7IH0KKyAgICBOb2RlIG5vZGUodW5zaWduZWQgaW5k
ZXgpIHsgcmV0dXJuIG1fZ3JhcGguYmxvY2soaW5kZXgpOyB9CisgICAgdW5zaWduZWQgbnVtTm9k
ZXMoKSB7IHJldHVybiBtX2dyYXBoLm51bUJsb2NrcygpOyB9CisKKyAgICBQb2ludGVyRHVtcDxC
YXNpY0Jsb2NrPiBkdW1wKE5vZGUgbm9kZSkgeyByZXR1cm4gcG9pbnRlckR1bXAobm9kZSk7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
bV9ncmFwaC5kdW1wKG91dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBo
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdDRkdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKICNpbmNsdWRlICJERkdDbG9i
YmVyU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0RvbWlu
YXRvcnMuaCIKICNpbmNsdWRlICJERkdFZGdlVXNlc1N0cnVjdHVyZS5oIgogI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKQEAgLTM5MCw3ICszOTEsNyBAQCBwdWJs
aWM6CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwogICAgICAgICAKICAg
ICAgICAgbV9ncmFwaC5pbml0aWFsaXplTm9kZU93bmVycygpOwotICAgICAgICBtX2dyYXBoLm1f
ZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CisgICAgICAgIG1fZ3JhcGgu
ZW5zdXJlRG9taW5hdG9ycygpOwogICAgICAgICAKICAgICAgICAgbV9wcmVPcmRlciA9IG1fZ3Jh
cGguYmxvY2tzSW5QcmVPcmRlcigpOwogICAgICAgICAKQEAgLTQ4NCw3ICs0ODUsNyBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZVtpXTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5h
dG9ycy5kb21pbmF0ZXMoY2FuZGlkYXRlLT5vd25lciwgbV9ibG9jaykpIHsKKyAgICAgICAgICAg
IGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGNhbmRpZGF0ZS0+b3duZXIsIG1f
YmxvY2spKSB7CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChjYW5kaWRhdGUp
OwogICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwpAQCAtNTczLDcgKzU3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFdlIHJlcXVp
cmUgc3RyaWN0IGRvbWluYXRpb24gYmVjYXVzZSB0aGlzIHdvdWxkIG9ubHkgc2VlIHRoaW5ncyBp
biBvdXIgb3duIGJsb2NrIGlmCiAgICAgICAgICAgICAvLyB0aGV5IGNhbWUgKmFmdGVyKiBvdXIg
cG9zaXRpb24gaW4gdGhlIGJsb2NrLiBDbGVhcmx5LCB3aGlsZSBvdXIgYmxvY2sgZG9taW5hdGVz
CiAgICAgICAgICAgICAvLyBpdHNlbGYsIHRoZSB0aGluZ3MgaW4gdGhlIGJsb2NrIGFmdGVyIHVz
IGRvbid0IGRvbWluYXRlIHVzLgotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3Jz
LnN0cmljdGx5RG9taW5hdGVzKGJsb2NrLCBtX2Jsb2NrKSkgeworICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9kb21pbmF0b3JzLT5zdHJpY3RseURvbWluYXRlcyhibG9jaywgbV9ibG9jaykpIHsK
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgICAgICBJdCBzdHJpY3RseSBkb21pbmF0ZXMuXG4iKTsKICAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZGF0YS5kaWRWaXNpdCk7CkBAIC02NTIsNyArNjUz
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRp
ZGF0ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWVbaV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKGNhbmRpZGF0ZS0+b3duZXIsIG1f
YmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRv
cnMtPmRvbWluYXRlcyhjYW5kaWRhdGUtPm93bmVyLCBtX2Jsb2NrKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoLT5yZXBsYWNlV2l0aChjYW5kaWRhdGUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoLnNldE5vZGUoY2FuZGlkYXRlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE5MTgzNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsOCArOTQsOCBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1wZWRPcD4gRGlz
YXNzZW1iCiAgICAgZHVtcEhlYWRlcihvdXQsIGxpbmtCdWZmZXIpOwogICAgIGFwcGVuZChyZXN1
bHQsIG91dCwgcHJldmlvdXNPcmlnaW4pOwogICAgIAotICAgIG1fZ3JhcGgubV9kb21pbmF0b3Jz
LmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKLSAgICBtX2dyYXBoLm1fbmF0dXJhbExvb3Bz
LmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRv
cnMoKTsKKyAgICBtX2dyYXBoLmVuc3VyZU5hdHVyYWxMb29wcygpOwogICAgIAogICAgIGNvbnN0
IGNoYXIqIHByZWZpeCA9ICIgICAgIjsKICAgICBjb25zdCBjaGFyKiBkaXNhc3NlbWJseVByZWZp
eCA9ICIgICAgICAgICI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWlu
YXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9t
aW5hdG9ycy5jcHAJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9taW5hdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDc2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKLQotI2lmIEVO
QUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiREZHQmxvY2tXb3JrbGlzdC5oIgotI2luY2x1ZGUgIkRGR0dyYXBoLmgiCi0jaW5jbHVkZSAi
REZHTmFpdmVEb21pbmF0b3JzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLURvbWluYXRvcnM6OkRvbWluYXRvcnMoKQotewot
fQotCi1Eb21pbmF0b3JzOjp+RG9taW5hdG9ycygpCi17Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLS8v
IFRoaXMgaW1wbGVtZW50cyBMZW5nYXVlciBhbmQgVGFyamFuJ3MgIkEgRmFzdCBBbGdvcml0aG0g
Zm9yIEZpbmRpbmcgRG9taW5hdG9ycyBpbiBhIEZsb3dncmFwaCIKLS8vIChUT1BMQVMgMTk3OSku
IEl0IHVzZXMgdGhlICJzaW1wbGUiIGltcGxlbWVudGF0aW9uIG9mIExJTksgYW5kIEVWQUwsIHdo
aWNoIHlpZWxkcyBhbiBPKG4gbG9nIG4pCi0vLyBzb2x1dGlvbi4gVGhlIGZ1bGwgcGFwZXIgaXMg
bGlua2VkIGJlbG93OyB0aGlzIGNvZGUgYXR0ZW1wdHMgdG8gY2xvc2VseSBmb2xsb3cgdGhlIGFs
Z29yaXRobSBhcwotLy8gaXQgaXMgcHJlc2VudGVkIGluIHRoZSBwYXBlcjsgaW4gcGFydGljdWxh
ciBzZWN0aW9ucyAzIGFuZCA0IGFzIHdlbGwgYXMgYXBwZW5kaXggQi4KLS8vIGh0dHBzOi8vd3d3
LmNzLnByaW5jZXRvbi5lZHUvY291cnNlcy9hcmNoaXZlL2ZhbGwwMy9jczUyOC9oYW5kb3V0cy9h
JTIwZmFzdCUyMGFsZ29yaXRobSUyMGZvciUyMGZpbmRpbmcucGRmCi0vLwotLy8gVGhpcyBjb2Rl
IGlzIHZlcnkgc3VidGxlLiBUaGUgTGVuZ2F1ZXItVGFyamFuIGFsZ29yaXRobSBpcyBpbmNyZWRp
Ymx5IGRlZXAgdG8gYmVnaW4gd2l0aC4gVGhlCi0vLyBnb2FsIG9mIHRoaXMgY29kZSBpcyB0byBm
b2xsb3cgdGhlIGNvZGUgaW4gdGhlIHBhcGVyLCBob3dldmVyIG91ciBpbXBsZW1lbnRhdGlvbiBt
dXN0IGRldmlhdGUKLS8vIGZyb20gdGhlIHBhcGVyIHdoZW4gaXQgY29tZXMgdG8gcmVjdXJzaW9u
LiBUaGUgYXV0aG9ycyBoYWQgdXNlZCByZWN1cnNpb24gdG8gaW1wbGVtZW50IERGUywgYW5kCi0v
LyBhbHNvIHRvIGltcGxlbWVudCB0aGUgInNpbXBsZSIgRVZBTC4gV2UgY29udmVydCBib3RoIG9m
IHRob3NlIGludG8gd29ya2xpc3QtYmFzZWQgc29sdXRpb25zLgotLy8gRmluYWxseSwgb25jZSB0
aGUgYWxnb3JpdGhtIGdpdmVzIHVzIGltbWVkaWF0ZSBkb21pbmF0b3JzLCB3ZSBpbXBsZW1lbnQg
ZG9taW5hbmNlIHRlc3RzIGJ5Ci0vLyB3YWxraW5nIHRoZSBkb21pbmF0b3IgdHJlZSBhbmQgY29t
cHV0aW5nIHByZSBhbmQgcG9zdCBudW1iZXJzLiBXZSB0aGVuIHVzZSB0aGUgcmFuZ2UgaW5jbHVz
aW9uCi0vLyBjaGVjayB0cmljayB0aGF0IHdhcyBmaXJzdCBkaXNjb3ZlcmVkIGJ5IFBhdWwgRi4g
RGlldHogaW4gMTk4MiBpbiAiTWFpbnRhaW5pbmcgb3JkZXIgaW4gYSBsaW5rZWQKLS8vIGxpc3Qi
IChzZWUgaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTgwMjE4NCkuCi0KLWNsYXNz
IExlbmdhdWVyVGFyamFuIHsKLXB1YmxpYzoKLSAgICBMZW5nYXVlclRhcmphbihHcmFwaCYgZ3Jh
cGgpCi0gICAgICAgIDogbV9ncmFwaChncmFwaCkKLSAgICAgICAgLCBtX2RhdGEoZ3JhcGgpCi0g
ICAgewotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2RhdGFbYmxvY2tdLmxhYmVsID0g
YmxvY2s7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21wdXRlKCkKLSAgICB7
Ci0gICAgICAgIGNvbXB1dGVEZXB0aEZpcnN0UHJlTnVtYmVyaW5nKCk7IC8vIFN0ZXAgMS4KLSAg
ICAgICAgY29tcHV0ZVNlbWlEb21pbmF0b3JzQW5kSW1wbGljaXRJbW1lZGlhdGVEb21pbmF0b3Jz
KCk7IC8vIFN0ZXBzIDIgYW5kIDMuCi0gICAgICAgIGNvbXB1dGVFeHBsaWNpdEltbWVkaWF0ZURv
bWluYXRvcnMoKTsgLy8gU3RlcCA0LgotICAgIH0KLSAgICAKLSAgICBCYXNpY0Jsb2NrKiBpbW1l
ZGlhdGVEb21pbmF0b3IoQmFzaWNCbG9jayogYmxvY2spCi0gICAgewotICAgICAgICByZXR1cm4g
bV9kYXRhW2Jsb2NrXS5kb207Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQgY29tcHV0ZURl
cHRoRmlyc3RQcmVOdW1iZXJpbmcoKQotICAgIHsKLSAgICAgICAgLy8gVXNlIGEgYmxvY2sgd29y
a2xpc3QgdGhhdCBhbHNvIHRyYWNrcyB0aGUgaW5kZXggaW5zaWRlIHRoZSBzdWNjZXNzb3IgbGlz
dC4gVGhpcyBpcwotICAgICAgICAvLyBuZWNlc3NhcnkgZm9yIGVuc3VyaW5nIHRoYXQgd2UgZG9u
J3QgYXR0ZW1wdCB0byB2aXNpdCBhIHN1Y2Nlc3NvciB1bnRpbCB0aGUgcHJldmlvdXMKLSAgICAg
ICAgLy8gc3VjY2Vzc29ycyB0aGF0IHdlIGhhZCB2aXNpdGVkIGFyZSBmdWxseSBwcm9jZXNzZWQu
IFRoaXMgZW5kcyB1cCBiZWluZyByZXZlYWxlZCBpbiB0aGUKLSAgICAgICAgLy8gb3V0cHV0IG9m
IHRoaXMgbWV0aG9kIGJlY2F1c2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGFuIGVkZ2UgdG8gYSBi
bG9jaywgd2Ugc2V0IHRoZQotICAgICAgICAvLyBibG9jaydzIHBhcmVudC4gU28sIGlmIHdlIGhh
dmU6Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEEgLT4gQgotICAgICAgICAvLyBBIC0+IEMKLSAg
ICAgICAgLy8gQiAtPiBDCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEFuZCB3ZSdyZSBwcm9jZXNz
aW5nIEEsIHRoZW4gd2Ugd2FudCB0byBlbnN1cmUgdGhhdCBpZiB3ZSBzZWUgQS0+QiBmaXJzdCAo
YW5kIGhlbmNlIHNldAotICAgICAgICAvLyBCJ3MgcHJlbnVtYmVyIGJlZm9yZSB3ZSBzZXQgQydz
KSB0aGVuIHdlIGFsc28gZW5kIHVwIHNldHRpbmcgQydzIHBhcmVudCB0byBCIGJ5IHZpcnR1ZQot
ICAgICAgICAvLyBvZiBub3Qgbm90aWNpbmcgQS0+QyB1bnRpbCB3ZSdyZSBkb25lIHByb2Nlc3Np
bmcgQi4KLSAgICAgICAgCi0gICAgICAgIEV4dGVuZGVkQmxvY2tXb3JrbGlzdDx1bnNpZ25lZD4g
d29ya2xpc3Q7Ci0gICAgICAgIHdvcmtsaXN0LnB1c2gobV9ncmFwaC5ibG9jaygwKSwgMCk7Ci0g
ICAgICAgIAotICAgICAgICB3aGlsZSAoQmxvY2tXaXRoPHVuc2lnbmVkPiBpdGVtID0gd29ya2xp
c3QucG9wKCkpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gaXRlbS5ub2RlOwot
ICAgICAgICAgICAgdW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBpdGVtLmRhdGE7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIFdlIGluaXRpYWxseSBwdXNoIHdpdGggc3VjY2Vzc29ySW5k
ZXggPSAwIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3Qgd2UgaGF2ZSBhbnkKLSAgICAgICAg
ICAgIC8vIHN1Y2Nlc3NvcnMuIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gYXNzaWduIG91ciBwcmVu
dW1iZXIuIFN1YnNlcXVlbnRseSB3ZSBnZXQgcHVzaGVkCi0gICAgICAgICAgICAvLyB3aXRoIGhp
Z2hlciBzdWNjZXNzb3JJbmRleCB2YWx1ZXMsIGJ1dCBvbmx5IGlmIHRoZXkgYXJlIGluIHJhbmdl
LgotICAgICAgICAgICAgQVNTRVJUKCFzdWNjZXNzb3JJbmRleCB8fCBzdWNjZXNzb3JJbmRleCA8
IGJsb2NrLT5udW1TdWNjZXNzb3JzKCkpOwotCi0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3Nvcklu
ZGV4KSB7Ci0gICAgICAgICAgICAgICAgbV9kYXRhW2Jsb2NrXS5zZW1pTnVtYmVyID0gbV9ibG9j
a0J5UHJlTnVtYmVyLnNpemUoKTsKLSAgICAgICAgICAgICAgICBtX2Jsb2NrQnlQcmVOdW1iZXIu
YXBwZW5kKGJsb2NrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHN1Y2Nlc3NvckluZGV4IDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkgewotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG5leHRTdWNjZXNzb3JJbmRleCA9IHN1Y2Nlc3NvckluZGV4ICsgMTsK
LSAgICAgICAgICAgICAgICBpZiAobmV4dFN1Y2Nlc3NvckluZGV4IDwgYmxvY2stPm51bVN1Y2Nl
c3NvcnMoKSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuZm9yY2VQdXNoKGJsb2NrLCBu
ZXh0U3VjY2Vzc29ySW5kZXgpOwotCi0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vz
c29yQmxvY2sgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKLSAgICAgICAgICAg
ICAgICBpZiAod29ya2xpc3QucHVzaChzdWNjZXNzb3JCbG9jaywgMCkpCi0gICAgICAgICAgICAg
ICAgICAgIG1fZGF0YVtzdWNjZXNzb3JCbG9ja10ucGFyZW50ID0gYmxvY2s7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21wdXRlU2VtaURvbWluYXRv
cnNBbmRJbXBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBjdXJyZW50UHJlTnVtYmVyID0gbV9ibG9ja0J5UHJlTnVtYmVyLnNpemUoKTsgY3Vy
cmVudFByZU51bWJlci0tID4gMTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ibG9ja0J5UHJlTnVtYmVyW2N1cnJlbnRQcmVOdW1iZXJdOwotICAgICAgICAgICAgQmxvY2tE
YXRhJiBibG9ja0RhdGEgPSBtX2RhdGFbYmxvY2tdOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBTdGVwIDI6Ci0gICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxv
Y2sgOiBibG9jay0+cHJlZGVjZXNzb3JzKSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
aW50ZXJtZWRpYXRlQmxvY2sgPSBldmFsKHByZWRlY2Vzc29yQmxvY2spOwotICAgICAgICAgICAg
ICAgIGJsb2NrRGF0YS5zZW1pTnVtYmVyID0gc3RkOjptaW4oCi0gICAgICAgICAgICAgICAgICAg
IG1fZGF0YVtpbnRlcm1lZGlhdGVCbG9ja10uc2VtaU51bWJlciwgYmxvY2tEYXRhLnNlbWlOdW1i
ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdW5zaWduZWQgYnVja2V0UHJlTnVtYmVy
ID0gYmxvY2tEYXRhLnNlbWlOdW1iZXI7Ci0gICAgICAgICAgICBBU1NFUlQoYnVja2V0UHJlTnVt
YmVyIDw9IGN1cnJlbnRQcmVOdW1iZXIpOwotICAgICAgICAgICAgbV9kYXRhW21fYmxvY2tCeVBy
ZU51bWJlcltidWNrZXRQcmVOdW1iZXJdXS5idWNrZXQuYXBwZW5kKGJsb2NrKTsKLSAgICAgICAg
ICAgIGxpbmsoYmxvY2tEYXRhLnBhcmVudCwgYmxvY2spOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBTdGVwIDM6Ci0gICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHNlbWlEb21pbmVl
IDogbV9kYXRhW2Jsb2NrRGF0YS5wYXJlbnRdLmJ1Y2tldCkgewotICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIHBvc3NpYmxlRG9taW5hdG9yID0gZXZhbChzZW1pRG9taW5lZSk7Ci0gICAgICAg
ICAgICAgICAgQmxvY2tEYXRhJiBzZW1pRG9taW5lZURhdGEgPSBtX2RhdGFbc2VtaURvbWluZWVd
OwotICAgICAgICAgICAgICAgIEFTU0VSVChtX2Jsb2NrQnlQcmVOdW1iZXJbc2VtaURvbWluZWVE
YXRhLnNlbWlOdW1iZXJdID09IGJsb2NrRGF0YS5wYXJlbnQpOwotICAgICAgICAgICAgICAgIEJs
b2NrRGF0YSYgcG9zc2libGVEb21pbmF0b3JEYXRhID0gbV9kYXRhW3Bvc3NpYmxlRG9taW5hdG9y
XTsKLSAgICAgICAgICAgICAgICBpZiAocG9zc2libGVEb21pbmF0b3JEYXRhLnNlbWlOdW1iZXIg
PCBzZW1pRG9taW5lZURhdGEuc2VtaU51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgc2VtaURv
bWluZWVEYXRhLmRvbSA9IHBvc3NpYmxlRG9taW5hdG9yOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgc2VtaURvbWluZWVEYXRhLmRvbSA9IGJsb2NrRGF0YS5wYXJl
bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2RhdGFbYmxvY2tEYXRhLnBhcmVudF0u
YnVja2V0LmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21wdXRl
RXhwbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgY3VycmVudFByZU51bWJlciA9IDE7IGN1cnJlbnRQcmVOdW1iZXIgPCBtX2Jsb2NrQnlQcmVO
dW1iZXIuc2l6ZSgpOyArK2N1cnJlbnRQcmVOdW1iZXIpIHsKLSAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ibG9ja0J5UHJlTnVtYmVyW2N1cnJlbnRQcmVOdW1iZXJdOwotICAgICAg
ICAgICAgQmxvY2tEYXRhJiBibG9ja0RhdGEgPSBtX2RhdGFbYmxvY2tdOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoYmxvY2tEYXRhLmRvbSAhPSBtX2Jsb2NrQnlQcmVOdW1iZXJbYmxv
Y2tEYXRhLnNlbWlOdW1iZXJdKQotICAgICAgICAgICAgICAgIGJsb2NrRGF0YS5kb20gPSBtX2Rh
dGFbYmxvY2tEYXRhLmRvbV0uZG9tOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQg
bGluayhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKLSAgICB7Ci0gICAgICAgIG1f
ZGF0YVt0b10uYW5jZXN0b3IgPSBmcm9tOwotICAgIH0KLSAgICAKLSAgICBCYXNpY0Jsb2NrKiBl
dmFsKEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2RhdGFbYmxvY2td
LmFuY2VzdG9yKQotICAgICAgICAgICAgcmV0dXJuIGJsb2NrOwotICAgICAgICAKLSAgICAgICAg
Y29tcHJlc3MoYmxvY2spOwotICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5sYWJlbDsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjb21wcmVzcyhCYXNpY0Jsb2NrKiBpbml0aWFsQmxvY2spCi0g
ICAgewotICAgICAgICAvLyBUaGlzIHdhcyBtZWFudCB0byBiZSBhIHJlY3Vyc2l2ZSBmdW5jdGlv
biwgYnV0IHdlIGRvbid0IGxpa2UgcmVjdXJzaW9uIGJlY2F1c2Ugd2UgZG9uJ3QKLSAgICAgICAg
Ly8gd2FudCB0byBibG93IHRoZSBzdGFjay4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpbGwgY2Fs
bCBjb21wcmVzcygpIHJlY3Vyc2l2ZWx5IG9uIHRoZQotICAgICAgICAvLyBhbmNlc3RvciBvZiBh
bnl0aGluZyB0aGF0IGhhcyBhbiBhbmNlc3Rvci4gU28sIHdlIHBvcHVsYXRlIG91ciB3b3JrbGlz
dCB3aXRoIHRoZQotICAgICAgICAvLyByZWN1cnNpdmUgYW5jZXN0b3JzIG9mIGluaXRpYWxCbG9j
ay4gVGhlbiB3ZSBwcm9jZXNzIHRoZSBsaXN0IHN0YXJ0aW5nIGZyb20gdGhlIGJsb2NrCi0gICAg
ICAgIC8vIHRoYXQgaXMgZnVydGhlc3QgdXAgdGhlIGFuY2VzdG9yIGNoYWluLgotICAgICAgICAK
LSAgICAgICAgQmFzaWNCbG9jayogYW5jZXN0b3IgPSBtX2RhdGFbaW5pdGlhbEJsb2NrXS5hbmNl
c3RvcjsKLSAgICAgICAgQVNTRVJUKGFuY2VzdG9yKTsKLSAgICAgICAgaWYgKCFtX2RhdGFbYW5j
ZXN0b3JdLmFuY2VzdG9yKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAg
VmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gc3RhY2s7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgPSBpbml0aWFsQmxvY2s7IGJsb2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10uYW5jZXN0
b3IpCi0gICAgICAgICAgICBzdGFjay5hcHBlbmQoYmxvY2spOwotICAgICAgICAKLSAgICAgICAg
Ly8gV2Ugb25seSBjYXJlIGFib3V0IGJsb2NrcyB0aGF0IGhhdmUgYW4gYW5jZXN0b3IgdGhhdCBo
YXMgYW4gYW5jZXN0b3IuIFRoZSBsYXN0IHR3bwotICAgICAgICAvLyBlbGVtZW50cyBpbiB0aGUg
c3RhY2sgd29uJ3Qgc2F0aXNmeSB0aGlzIHByb3BlcnR5LgotICAgICAgICBBU1NFUlQoc3RhY2su
c2l6ZSgpID49IDIpOwotICAgICAgICBBU1NFUlQoIW1fZGF0YVtzdGFja1tzdGFjay5zaXplKCkg
LSAxXV0uYW5jZXN0b3IpOwotICAgICAgICBBU1NFUlQoIW1fZGF0YVttX2RhdGFbc3RhY2tbc3Rh
Y2suc2l6ZSgpIC0gMl1dLmFuY2VzdG9yXS5hbmNlc3Rvcik7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzdGFjay5zaXplKCkgLSAyOyBpLS07KSB7Ci0gICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IHN0YWNrW2ldOwotICAgICAgICAgICAgQmFzaWNCbG9jayomIGxh
YmVsT2ZCbG9jayA9IG1fZGF0YVtibG9ja10ubGFiZWw7Ci0gICAgICAgICAgICBCYXNpY0Jsb2Nr
KiYgYW5jZXN0b3JPZkJsb2NrID0gbV9kYXRhW2Jsb2NrXS5hbmNlc3RvcjsKLSAgICAgICAgICAg
IEFTU0VSVChhbmNlc3Rvck9mQmxvY2spOwotICAgICAgICAgICAgQVNTRVJUKG1fZGF0YVthbmNl
c3Rvck9mQmxvY2tdLmFuY2VzdG9yKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQmFzaWNC
bG9jayogbGFiZWxPZkFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0YVthbmNlc3Rvck9mQmxvY2tdLmxh
YmVsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9kYXRhW2xhYmVsT2ZBbmNlc3Rv
ck9mQmxvY2tdLnNlbWlOdW1iZXIgPCBtX2RhdGFbbGFiZWxPZkJsb2NrXS5zZW1pTnVtYmVyKQot
ICAgICAgICAgICAgICAgIGxhYmVsT2ZCbG9jayA9IGxhYmVsT2ZBbmNlc3Rvck9mQmxvY2s7Ci0g
ICAgICAgICAgICBhbmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFbYW5jZXN0b3JPZkJsb2NrXS5hbmNl
c3RvcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0cnVjdCBCbG9ja0RhdGEgewotICAgICAg
ICBCbG9ja0RhdGEoKQotICAgICAgICAgICAgOiBwYXJlbnQobnVsbHB0cikKLSAgICAgICAgICAg
ICwgcHJlTnVtYmVyKFVJTlRfTUFYKQotICAgICAgICAgICAgLCBzZW1pTnVtYmVyKFVJTlRfTUFY
KQotICAgICAgICAgICAgLCBhbmNlc3RvcihudWxscHRyKQotICAgICAgICAgICAgLCBsYWJlbChu
dWxscHRyKQotICAgICAgICAgICAgLCBkb20obnVsbHB0cikKLSAgICAgICAgewotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBwYXJlbnQ7Ci0gICAgICAgIHVuc2lnbmVk
IHByZU51bWJlcjsKLSAgICAgICAgdW5zaWduZWQgc2VtaU51bWJlcjsKLSAgICAgICAgQmFzaWNC
bG9jayogYW5jZXN0b3I7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGxhYmVsOwotICAgICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IGJ1Y2tldDsKLSAgICAgICAgQmFzaWNCbG9jayogZG9tOwotICAgIH07
Ci0gICAgCi0gICAgR3JhcGgmIG1fZ3JhcGg7Ci0gICAgQmxvY2tNYXA8QmxvY2tEYXRhPiBtX2Rh
dGE7Ci0gICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX2Jsb2NrQnlQcmVOdW1iZXI7Ci19OwotCi1z
dHJ1Y3QgVmFsaWRhdGlvbkNvbnRleHQgewotICAgIFZhbGlkYXRpb25Db250ZXh0KEdyYXBoJiBn
cmFwaCwgRG9taW5hdG9ycyYgZG9taW5hdG9ycykKLSAgICAgICAgOiBncmFwaChncmFwaCkKLSAg
ICAgICAgLCBkb21pbmF0b3JzKGRvbWluYXRvcnMpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2
b2lkIHJlcG9ydEVycm9yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvLCBjb25zdCBj
aGFyKiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgRXJyb3IgZXJyb3I7Ci0gICAgICAgIGVycm9y
LmZyb20gPSBmcm9tOwotICAgICAgICBlcnJvci50byA9IHRvOwotICAgICAgICBlcnJvci5tZXNz
YWdlID0gbWVzc2FnZTsKLSAgICAgICAgZXJyb3JzLmFwcGVuZChlcnJvcik7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgaGFuZGxlRXJyb3JzKCkKLSAgICB7Ci0gICAgICAgIGlmIChlcnJvcnMuaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgc3RhcnRDcmFz
aGluZygpOwotICAgICAgICBkYXRhTG9nKCJERkcgRE9NSU5BVE9SIFZBTElEQVRJT04gRkFJTEVE
OlxuIik7Ci0gICAgICAgIGRhdGFMb2coIlxuIik7Ci0gICAgICAgIGRhdGFMb2coIkZvciBibG9j
ayBkb21pbmF0aW9uIHJlbGF0aW9uc2hpcHM6XG4iKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGVycm9ycy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgZGF0YUxvZygKLSAg
ICAgICAgICAgICAgICAiICAgICIsIHBvaW50ZXJEdW1wKGVycm9yc1tpXS5mcm9tKSwgIiAtPiAi
LCBwb2ludGVyRHVtcChlcnJvcnNbaV0udG8pLAotICAgICAgICAgICAgICAgICIgKCIsIGVycm9y
c1tpXS5tZXNzYWdlLCAiKVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YUxvZygiXG4iKTsK
LSAgICAgICAgZGF0YUxvZygiQ29udHJvbCBmbG93IGdyYXBoOlxuIik7Ci0gICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGdyYXBoLm51bUJsb2Nrcygp
OyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZGF0YUxvZygiICAgIEJsb2NrICMiLCBibG9ja0lu
ZGV4LCAiOiBzdWNjZXNzb3JzID0gWyIpOwotICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1h
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5udW1TdWNjZXNz
b3JzKCk7ICsraSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCAqYmxvY2stPnN1Y2Nl
c3NvcihpKSk7Ci0gICAgICAgICAgICBkYXRhTG9nKCJdLCBwcmVkZWNlc3NvcnMgPSBbIik7Ci0g
ICAgICAgICAgICBjb21tYSA9IENvbW1hUHJpbnRlcigpOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZyhjb21tYSwgKmJsb2NrLT5wcmVkZWNlc3NvcnNbaV0pOwotICAgICAg
ICAgICAgZGF0YUxvZygiXVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YUxvZygiXG4iKTsK
LSAgICAgICAgZGF0YUxvZygiTGVuZ2F1ZXItVGFyamFuIERvbWluYXRvcnM6XG4iKTsKLSAgICAg
ICAgZGF0YUxvZyhkb21pbmF0b3JzKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLSAgICAgICAg
ZGF0YUxvZygiTmFpdmUgRG9taW5hdG9yczpcbiIpOwotICAgICAgICBuYWl2ZURvbWluYXRvcnMu
ZHVtcChncmFwaCwgV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLSAg
ICAgICAgZGF0YUxvZygiR3JhcGggYXQgdGltZSBvZiBmYWlsdXJlOlxuIik7Ci0gICAgICAgIGdy
YXBoLmR1bXAoKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLSAgICAgICAgZGF0YUxvZygiREZH
IERPTUlOQVRPUiBWQUxJREFUSU9OIEZBSUxJRUQhXG4iKTsKLSAgICAgICAgQ1JBU0goKTsKLSAg
ICB9Ci0gICAgCi0gICAgR3JhcGgmIGdyYXBoOwotICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnM7
Ci0gICAgTmFpdmVEb21pbmF0b3JzIG5haXZlRG9taW5hdG9yczsKLSAgICAKLSAgICBzdHJ1Y3Qg
RXJyb3IgewotICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tOwotICAgICAgICBCYXNpY0Jsb2NrKiB0
bzsKLSAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKLSAgICB9OwotICAgIAotICAgIFZlY3Rv
cjxFcnJvcj4gZXJyb3JzOwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQg
RG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCi17Ci0gICAgTGVuZ2F1ZXJUYXJqYW4g
bGVuZ2F1ZXJUYXJqYW4oZ3JhcGgpOwotICAgIGxlbmdhdWVyVGFyamFuLmNvbXB1dGUoKTsKLQot
ICAgIG1fZGF0YSA9IEJsb2NrTWFwPEJsb2NrRGF0YT4oZ3JhcGgpOwotICAgIAotICAgIC8vIEZy
b20gaGVyZSB3ZSB3YW50IHRvIGJ1aWxkIGEgc3Bhbm5pbmcgdHJlZSB3aXRoIGJvdGggdXB3YXJk
IGFuZCBkb3dud2FyZCBsaW5rcyBhbmQgd2Ugd2FudAotICAgIC8vIHRvIGRvIGEgc2VhcmNoIG92
ZXIgdGhpcyB0cmVlIHRvIGNvbXB1dGUgcHJlIGFuZCBwb3N0IG51bWJlcnMgdGhhdCBjYW4gYmUg
dXNlZCBmb3IgZG9taW5hbmNlCi0gICAgLy8gdGVzdHMuCi0gICAgCi0gICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAg
ICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBC
YXNpY0Jsb2NrKiBpZG9tQmxvY2sgPSBsZW5nYXVlclRhcmphbi5pbW1lZGlhdGVEb21pbmF0b3Io
YmxvY2spOwotICAgICAgICBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQgPSBpZG9tQmxvY2s7Ci0g
ICAgICAgIGlmIChpZG9tQmxvY2spCi0gICAgICAgICAgICBtX2RhdGFbaWRvbUJsb2NrXS5pZG9t
S2lkcy5hcHBlbmQoYmxvY2spOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBuZXh0UHJlTnVt
YmVyID0gMDsKLSAgICB1bnNpZ25lZCBuZXh0UG9zdE51bWJlciA9IDA7Ci0gICAgCi0gICAgLy8g
UGxhaW4gc3RhY2stYmFzZWQgd29ya2xpc3QgYmVjYXVzZSB3ZSBhcmUgZ3VhcmFudGVlZCB0byBz
ZWUgZWFjaCBibG9jayBleGFjdGx5IG9uY2UgYW55d2F5LgotICAgIFZlY3RvcjxCbG9ja1dpdGhP
cmRlcj4gd29ya2xpc3Q7Ci0gICAgd29ya2xpc3QuYXBwZW5kKEJsb2NrV2l0aE9yZGVyKGdyYXBo
LmJsb2NrKDApLCBWaXNpdE9yZGVyOjpQcmUpKTsKLSAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1w
dHkoKSkgewotICAgICAgICBCbG9ja1dpdGhPcmRlciBpdGVtID0gd29ya2xpc3QudGFrZUxhc3Qo
KTsKLSAgICAgICAgc3dpdGNoIChpdGVtLm9yZGVyKSB7Ci0gICAgICAgIGNhc2UgVmlzaXRPcmRl
cjo6UHJlOgotICAgICAgICAgICAgbV9kYXRhW2l0ZW0ubm9kZV0ucHJlTnVtYmVyID0gbmV4dFBy
ZU51bWJlcisrOwotICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKEJsb2NrV2l0aE9yZGVyKGl0
ZW0ubm9kZSwgVmlzaXRPcmRlcjo6UG9zdCkpOwotICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBraWQgOiBtX2RhdGFbaXRlbS5ub2RlXS5pZG9tS2lkcykKLSAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5hcHBlbmQoQmxvY2tXaXRoT3JkZXIoa2lkLCBWaXNpdE9yZGVyOjpQcmUpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZpc2l0T3JkZXI6OlBvc3Q6Ci0gICAgICAgICAg
ICBtX2RhdGFbaXRlbS5ub2RlXS5wb3N0TnVtYmVyID0gbmV4dFBvc3ROdW1iZXIrKzsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICh2YWxpZGF0aW9u
RW5hYmxlZCgpKSB7Ci0gICAgICAgIC8vIENoZWNrIG91ciBkb21pbmF0b3IgY2FsY3VsYXRpb246
Ci0gICAgICAgIC8vIDEpIENoZWNrIHRoYXQgb3VyIHJhbmdlLWJhc2VkIGFuY2VzdHJ5IHRlc3Qg
aXMgdGhlIHNhbWUgYXMgYSBuYWl2ZSBhbmNlc3RyeSB0ZXN0LgotICAgICAgICAvLyAyKSBDaGVj
ayB0aGF0IG91ciBub3Rpb24gb2Ygd2hvIGRvbWluYXRlcyB3aG9tIGlzIGlkZW50aWNhbCB0byBh
IG5haXZlIChub3QKLSAgICAgICAgLy8gICAgTGVuZ2F1ZXItVGFyamFuKSBkb21pbmF0b3IgY2Fs
Y3VsYXRpb24uCi0gICAgICAgIAotICAgICAgICBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KGdy
YXBoLCAqdGhpcyk7Ci0gICAgICAgIGNvbnRleHQubmFpdmVEb21pbmF0b3JzLmNvbXB1dGUoZ3Jh
cGgpOwotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGZyb21CbG9ja0luZGV4ID0g
Z3JhcGgubnVtQmxvY2tzKCk7IGZyb21CbG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBmcm9tQmxvY2sgPSBncmFwaC5ibG9jayhmcm9tQmxvY2tJbmRleCk7Ci0gICAgICAg
ICAgICBpZiAoIWZyb21CbG9jayB8fCBtX2RhdGFbZnJvbUJsb2NrXS5wcmVOdW1iZXIgPT0gVUlO
VF9NQVgpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggdG9CbG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IHRvQmxvY2tJbmRleC0tOykg
ewotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmxvY2sgPSBncmFwaC5ibG9jayh0b0Js
b2NrSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmICghdG9CbG9jayB8fCBtX2RhdGFbdG9CbG9j
a10ucHJlTnVtYmVyID09IFVJTlRfTUFYKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoZG9taW5hdGVzKGZyb21CbG9j
aywgdG9CbG9jaykgIT0gbmFpdmVEb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRvQmxvY2ssICJS
YW5nZS1iYXNlZCBkb21pbmF0aW9uIGNoZWNrIGlzIGJyb2tlbiIpOwotICAgICAgICAgICAgICAg
IGlmIChkb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSAhPSBjb250ZXh0Lm5haXZlRG9taW5h
dG9ycy5kb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRvQmxvY2ssICJMZW5nYXVlci1UYXJqYW4g
ZG9taW5hdGlvbiBpcyBicm9rZW4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgY29udGV4dC5oYW5kbGVFcnJvcnMoKTsKLSAgICB9Ci19Ci0KLUJsb2NrU2V0
IERvbWluYXRvcnM6OnN0cmljdERvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bykgY29uc3QKLXsK
LSAgICBCbG9ja1NldCByZXN1bHQ7Ci0gICAgZm9yQWxsU3RyaWN0RG9taW5hdG9yc09mKHRvLCBC
bG9ja0FkZGVyKHJlc3VsdCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJsb2NrU2V0IERv
bWluYXRvcnM6OmRvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bykgY29uc3QKLXsKLSAgICBCbG9j
a1NldCByZXN1bHQ7Ci0gICAgZm9yQWxsRG9taW5hdG9yc09mKHRvLCBCbG9ja0FkZGVyKHJlc3Vs
dCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJsb2NrU2V0IERvbWluYXRvcnM6OmJsb2Nr
c1N0cmljdGx5RG9taW5hdGVkQnkoQmFzaWNCbG9jayogZnJvbSkgY29uc3QKLXsKLSAgICBCbG9j
a1NldCByZXN1bHQ7Ci0gICAgZm9yQWxsQmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeShmcm9tLCBC
bG9ja0FkZGVyKHJlc3VsdCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJsb2NrU2V0IERv
bWluYXRvcnM6OmJsb2Nrc0RvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZyb20pIGNvbnN0Ci17Ci0g
ICAgQmxvY2tTZXQgcmVzdWx0OwotICAgIGZvckFsbEJsb2Nrc0RvbWluYXRlZEJ5KGZyb20sIEJs
b2NrQWRkZXIocmVzdWx0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQmxvY2tTZXQgRG9t
aW5hdG9yczo6ZG9taW5hbmNlRnJvbnRpZXJPZihCYXNpY0Jsb2NrKiBmcm9tKSBjb25zdAotewot
ICAgIEJsb2NrU2V0IHJlc3VsdDsKLSAgICBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVy
T2ZJbXBsKGZyb20sIEJsb2NrQWRkZXIocmVzdWx0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotQmxvY2tTZXQgRG9taW5hdG9yczo6aXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKGNvbnN0
IEJsb2NrTGlzdCYgZnJvbSkgY29uc3QKLXsKLSAgICBCbG9ja1NldCByZXN1bHQ7Ci0gICAgZm9y
QWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2ZJbXBsKGZyb20sIEJsb2NrQWRk
ZXIocmVzdWx0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBEb21pbmF0b3JzOjpu
YWl2ZURvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKLXsK
LSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrID0gdG87IGJsb2NrOyBibG9jayA9IG1fZGF0YVti
bG9ja10uaWRvbVBhcmVudCkgewotICAgICAgICBpZiAoYmxvY2sgPT0gZnJvbSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRG9t
aW5hdG9yczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGlmICghaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIG91dC5wcmludCgiICAgIE5vdCBWYWxpZC5cbiIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZGF0YS5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBpZiAo
bV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50KCIgICAgQmxvY2sgIyIsIGJsb2Nr
SW5kZXgsICI6IGlkb20gPSAiLCBwb2ludGVyRHVtcChtX2RhdGFbYmxvY2tJbmRleF0uaWRvbVBh
cmVudCksICIsIGlkb21LaWRzID0gWyIpOwotICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RhdGFbYmxvY2tJbmRleF0uaWRvbUtp
ZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICptX2RhdGFbYmxv
Y2tJbmRleF0uaWRvbUtpZHNbaV0pOwotICAgICAgICBvdXQucHJpbnQoIl0sIHByZS9wb3N0ID0g
IiwgbV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciwgIi8iLCBtX2RhdGFbYmxvY2tJbmRleF0u
cG9zdE51bWJlciwgIlxuIik7Ci0gICAgfQotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxOTAg
KzI4LDI2IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgIkRGR0FuYWx5c2lz
LmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Jsb2NrTWFwLmgi
CiAjaW5jbHVkZSAiREZHQmxvY2tTZXQuaCIKKyNpbmNsdWRlICJERkdDRkcuaCIKICNpbmNsdWRl
ICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgPHd0Zi9Eb21p
bmF0b3JzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1jbGFzcyBH
cmFwaDsKLQotY2xhc3MgRG9taW5hdG9ycyA6IHB1YmxpYyBBbmFseXNpczxEb21pbmF0b3JzPiB7
CitjbGFzcyBEb21pbmF0b3JzIDogV1RGOjpEb21pbmF0b3JzPENGRz4geworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKERvbWluYXRvcnMpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIERvbWluYXRvcnMoKTsKLSAgICB+RG9taW5hdG9ycygpOwotICAgIAotICAg
IHZvaWQgY29tcHV0ZShHcmFwaCYpOwotICAgIAotICAgIGJvb2wgc3RyaWN0bHlEb21pbmF0ZXMo
QmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQoaXNWYWxpZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YVt0b10ucHJlTnVtYmVyID4g
bV9kYXRhW2Zyb21dLnByZU51bWJlcgotICAgICAgICAgICAgJiYgbV9kYXRhW3RvXS5wb3N0TnVt
YmVyIDwgbV9kYXRhW2Zyb21dLnBvc3ROdW1iZXI7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZG9t
aW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZyb20gPT0gdG8gfHwgc3RyaWN0bHlEb21pbmF0ZXMoZnJvbSwgdG8pOwot
ICAgIH0KLSAgICAKLSAgICBCYXNpY0Jsb2NrKiBpbW1lZGlhdGVEb21pbmF0b3JPZihCYXNpY0Js
b2NrKiBibG9jaykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RhdGFbYmxvY2tdLmlk
b21QYXJlbnQ7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0g
ICAgdm9pZCBmb3JBbGxTdHJpY3REb21pbmF0b3JzT2YoQmFzaWNCbG9jayogdG8sIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9kYXRhW3RvXS5pZG9tUGFyZW50OyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2td
Lmlkb21QYXJlbnQpCi0gICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKLSAgICB9Ci0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbERvbWluYXRvcnNP
ZihCYXNpY0Jsb2NrKiB0bywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgPSB0bzsgYmxvY2s7IGJsb2NrID0gbV9kYXRh
W2Jsb2NrXS5pZG9tUGFyZW50KQotICAgICAgICAgICAgZnVuY3RvcihibG9jayk7Ci0gICAgfQot
ICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JBbGxCbG9j
a3NTdHJpY3RseURvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiB3b3Jr
bGlzdDsKLSAgICAgICAgd29ya2xpc3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtmcm9tXS5pZG9tS2lk
cyk7Ci0gICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBmdW5j
dG9yKGJsb2NrKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZFZlY3RvcihtX2RhdGFbYmxv
Y2tdLmlkb21LaWRzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsQmxvY2tzRG9taW5hdGVkQnkoQmFzaWNCbG9j
ayogZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0OwotICAgICAgICB3b3JrbGlzdC5hcHBlbmQo
ZnJvbSk7Ci0gICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7Ci0gICAgICAgICAgICBm
dW5jdG9yKGJsb2NrKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZFZlY3RvcihtX2RhdGFb
YmxvY2tdLmlkb21LaWRzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBCbG9ja1NldCBz
dHJpY3REb21pbmF0b3JzT2YoQmFzaWNCbG9jayogdG8pIGNvbnN0OwotICAgIEJsb2NrU2V0IGRv
bWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bykgY29uc3Q7Ci0gICAgQmxvY2tTZXQgYmxvY2tzU3Ry
aWN0bHlEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tKSBjb25zdDsKLSAgICBCbG9ja1NldCBi
bG9ja3NEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tKSBjb25zdDsKLSAgICAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VG
cm9udGllck9mKAotICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgQmxvY2tTZXQgc2V0OwotICAgICAgICBmb3JBbGxC
bG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJbXBsKAotICAgICAgICAgICAgZnJvbSwKLSAgICAg
ICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2spIHsKLSAgICAgICAgICAgICAgICBpZiAoc2V0
LmFkZChibG9jaykpCi0gICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOwotICAgICAg
ICAgICAgfSk7Ci0gICAgfQotICAgIAotICAgIEJsb2NrU2V0IGRvbWluYW5jZUZyb250aWVyT2Yo
QmFzaWNCbG9jayogZnJvbSkgY29uc3Q7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KLSAgICB2b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9m
KAotICAgICAgICBjb25zdCBCbG9ja0xpc3QmIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
Ci0gICAgewotICAgICAgICBmb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJv
bnRpZXJPZigKLSAgICAgICAgICAgIGZyb20sCi0gICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sq
IGJsb2NrKSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLSAgICAKLSAg
ICAvLyBUaGlzIGlzIGEgY2xvc2UgcmVsYXRpdmUgb2YgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERv
bWluYW5jZUZyb250aWVyT2YoKSwgd2hpY2ggYWxsb3dzIHRoZQotICAgIC8vIGdpdmVuIGZ1bmN0
b3IgdG8gcmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIHRoYXQgd2UgZG9uJ3Qgd2lzaCB0byBjb25z
aWRlciB0aGUgZ2l2ZW4gYmxvY2suCi0gICAgLy8gVXNlZnVsIGZvciBjb21wdXRpbmcgcHJ1bmVk
IFNTQSBmb3JtLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JB
bGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKLSAgICAgICAgY29u
c3QgQmxvY2tMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAg
ICAgQmxvY2tTZXQgc2V0OwotICAgICAgICBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNl
RnJvbnRpZXJPZkltcGwoCi0gICAgICAgICAgICBmcm9tLAotICAgICAgICAgICAgWyZdIChCYXNp
Y0Jsb2NrKiBibG9jaykgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXQuYWRkKGJs
b2NrKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IHJldHVybiBmdW5jdG9yKGJsb2NrKTsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLSAgICAKLSAg
ICBCbG9ja1NldCBpdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoY29uc3QgQmxvY2tMaXN0JiBm
cm9tKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAg
ICAKLXByaXZhdGU6Ci0gICAgYm9vbCBuYWl2ZURvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBC
YXNpY0Jsb2NrKiB0bykgY29uc3Q7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KLSAgICB2b2lkIGZvckFsbEJsb2Nrc0luRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCi0gICAg
ICAgIEJhc2ljQmxvY2sqIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Ci0gICAg
ewotICAgICAgICAvLyBQYXJhcGhyYXNpbmcgZnJvbSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93
aWtpL0RvbWluYXRvcl8oZ3JhcGhfdGhlb3J5KToKLSAgICAgICAgLy8gICAgICJUaGUgZG9taW5h
bmNlIGZyb250aWVyIG9mIGEgYmxvY2sgJ2Zyb20nIGlzIHRoZSBzZXQgb2YgYWxsIGJsb2NrcyAn
dG8nIHN1Y2ggdGhhdAotICAgICAgICAvLyAgICAgJ2Zyb20nIGRvbWluYXRlcyBhbiBpbW1lZGlh
dGUgcHJlZGVjZXNzb3Igb2YgJ3RvJywgYnV0ICdmcm9tJyBkb2VzIG5vdCBzdHJpY3RseQotICAg
ICAgICAvLyAgICAgZG9taW5hdGUgJ3RvJy4iCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEEgdXNl
ZnVsIGNvcm5lciBjYXNlIHRvIHJlbWVtYmVyOiBhIGJsb2NrIG1heSBiZSBpbiBpdHMgb3duIGRv
bWluYW5jZSBmcm9udGllciBpZiBpdCBoYXMKLSAgICAgICAgLy8gYSBsb29wIGVkZ2UgdG8gaXRz
ZWxmLCBzaW5jZSBpdCBkb21pbmF0ZXMgaXRzZWxmIGFuZCBzbyBpdCBkb21pbmF0ZXMgaXRzIG93
biBpbW1lZGlhdGUKLSAgICAgICAgLy8gcHJlZGVjZXNzb3IsIGFuZCBhIGJsb2NrIG5ldmVyIHN0
cmljdGx5IGRvbWluYXRlcyBpdHNlbGYuCi0gICAgICAgIAotICAgICAgICBmb3JBbGxCbG9ja3NE
b21pbmF0ZWRCeSgKLSAgICAgICAgICAgIGZyb20sCi0gICAgICAgICAgICBbJl0gKEJhc2ljQmxv
Y2sqIGJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRl
eCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJ
bmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RyaWN0bHlEb21pbmF0ZXMoZnJvbSwg
dG8pKQotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0byk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRp
ZXJPZkltcGwoCi0gICAgICAgIGNvbnN0IEJsb2NrTGlzdCYgZnJvbSwgY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikgY29uc3QKKyAgICBEb21pbmF0b3JzKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBX
VEY6OkRvbWluYXRvcnM8Q0ZHPigqZ3JhcGgubV9jZmcpCiAgICAgewotICAgICAgICBCbG9ja0xp
c3Qgd29ya2xpc3QgPSBmcm9tOwotICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOwot
ICAgICAgICAgICAgZm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mSW1wbCgKLSAgICAg
ICAgICAgICAgICBibG9jaywKLSAgICAgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIG90aGVy
QmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0b3Iob3RoZXJCbG9jaykpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQob3RoZXJCbG9jayk7Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgc3RydWN0IEJsb2Nr
RGF0YSB7Ci0gICAgICAgIEJsb2NrRGF0YSgpCi0gICAgICAgICAgICA6IGlkb21QYXJlbnQobnVs
bHB0cikKLSAgICAgICAgICAgICwgcHJlTnVtYmVyKFVJTlRfTUFYKQotICAgICAgICAgICAgLCBw
b3N0TnVtYmVyKFVJTlRfTUFYKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gaWRvbUtpZHM7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGlk
b21QYXJlbnQ7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBwcmVOdW1iZXI7Ci0gICAgICAg
IHVuc2lnbmVkIHBvc3ROdW1iZXI7Ci0gICAgfTsKLSAgICAKLSAgICBCbG9ja01hcDxCbG9ja0Rh
dGE+IG1fZGF0YTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZURvbWluYXRlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZURvbWluYXRlcy5oCShyZXZpc2lvbiAxOTE4
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBvcGVy
YXRvcigpKE5vZGUqLCBFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBib29sIHJlc3VsdCA9IG1f
Z3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhlZGdlLm5vZGUoKS0+b3duZXIsIG1fYmxvY2sp
OworICAgICAgICBib29sIHJlc3VsdCA9IG1fZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXMo
ZWRnZS5ub2RlKCktPm93bmVyLCBtX2Jsb2NrKTsKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAg
ICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAgIkNoZWNraW5nIGlmICIsIGVkZ2Us
ICIgaW4gIiwgKmVkZ2Uubm9kZSgpLT5vd25lciwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsMTIgQEAKICNp
bmNsdWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgog
I2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHQ0ZHLmgiCisj
aW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNs
dWRlICJERkdNYXlFeGl0LmgiCisjaW5jbHVkZSAiREZHTmF0dXJhbExvb3BzLmgiCisjaW5jbHVk
ZSAiREZHUHJlUG9zdE51bWJlcmluZy5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuaCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCIKQEAgLTY0LDYgKzY4LDcgQEAgR3JhcGg6OkdyYXBoKFZN
JiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdgogICAgICwgbV9jb2RlQmxvY2sobV9wbGFuLmNvZGVC
bG9jaykKICAgICAsIG1fcHJvZmlsZWRCbG9jayhtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkK
ICAgICAsIG1fYWxsb2NhdG9yKGxvbmdMaXZlZFN0YXRlLm1fYWxsb2NhdG9yKQorICAgICwgbV9j
Zmcoc3RkOjptYWtlX3VuaXF1ZTxDRkc+KCp0aGlzKSkKICAgICAsIG1fbmV4dE1hY2hpbmVMb2Nh
bCgwKQogICAgICwgbV9maXhwb2ludFN0YXRlKEJlZm9yZUZpeHBvaW50KQogICAgICwgbV9zdHJ1
Y3R1cmVSZWdpc3RyYXRpb25TdGF0ZShIYXZlTm90U3RhcnRlZFJlZ2lzdGVyaW5nKQpAQCAtNDAx
LDIyICs0MDYsMjIgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgog
ICAgIGlmIChibG9jay0+dGVybWluYWwoKSkgewogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAgICAgIG91dC5wcmludCgi
ICIsICpzdWNjZXNzb3IpOwotICAgICAgICAgICAgaWYgKG1fcHJlUG9zdE51bWJlcmluZy5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKCIsIG1fcHJlUG9zdE51bWJlcmlu
Zy5lZGdlS2luZChibG9jaywgc3VjY2Vzc29yKSwgIikiKTsKKyAgICAgICAgICAgIGlmIChtX3By
ZVBvc3ROdW1iZXJpbmcpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKCIsIG1fcHJlUG9z
dE51bWJlcmluZy0+ZWRnZUtpbmQoYmxvY2ssIHN1Y2Nlc3NvciksICIpIik7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UKICAgICAgICAgb3V0LnByaW50KCIgPGludmFsaWQ+Iik7CiAgICAgb3V0LnBy
aW50KCJcbiIpOwotICAgIGlmIChtX2RvbWluYXRvcnMuaXNWYWxpZCgpICYmIHRlcm1pbmFsc0Fy
ZVZhbGlkKCkpIHsKLSAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiAi
LCBtX2RvbWluYXRvcnMuZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7Ci0gICAgICAgIG91dC5w
cmludChwcmVmaXgsICIgIERvbWluYXRlczogIiwgbV9kb21pbmF0b3JzLmJsb2Nrc0RvbWluYXRl
ZEJ5KGJsb2NrKSwgIlxuIik7Ci0gICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYW5j
ZSBGcm9udGllcjogIiwgbV9kb21pbmF0b3JzLmRvbWluYW5jZUZyb250aWVyT2YoYmxvY2spLCAi
XG4iKTsKLSAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgSXRlcmF0ZWQgRG9taW5hbmNlIEZy
b250aWVyOiAiLCBtX2RvbWluYXRvcnMuaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKEJsb2Nr
TGlzdCgxLCBibG9jaykpLCAiXG4iKTsKLSAgICB9Ci0gICAgaWYgKG1fcHJlUG9zdE51bWJlcmlu
Zy5pc1ZhbGlkKCkpCi0gICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZS9Qb3N0IE51bWJl
cmluZzogIiwgbV9wcmVQb3N0TnVtYmVyaW5nLnByZU51bWJlcihibG9jayksICIvIiwgbV9wcmVQ
b3N0TnVtYmVyaW5nLnBvc3ROdW1iZXIoYmxvY2spLCAiXG4iKTsKLSAgICBpZiAobV9uYXR1cmFs
TG9vcHMuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGlmIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9
IG1fbmF0dXJhbExvb3BzLmhlYWRlck9mKGJsb2NrKSkgeworICAgIGlmIChtX2RvbWluYXRvcnMg
JiYgdGVybWluYWxzQXJlVmFsaWQoKSkgeworICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBE
b21pbmF0ZWQgYnk6ICIsIG1fZG9taW5hdG9ycy0+ZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7
CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlczogIiwgbV9kb21pbmF0b3Jz
LT5ibG9ja3NEb21pbmF0ZWRCeShibG9jayksICJcbiIpOworICAgICAgICBvdXQucHJpbnQocHJl
Zml4LCAiICBEb21pbmFuY2UgRnJvbnRpZXI6ICIsIG1fZG9taW5hdG9ycy0+ZG9taW5hbmNlRnJv
bnRpZXJPZihibG9jayksICJcbiIpOworICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBJdGVy
YXRlZCBEb21pbmFuY2UgRnJvbnRpZXI6ICIsIG1fZG9taW5hdG9ycy0+aXRlcmF0ZWREb21pbmFu
Y2VGcm9udGllck9mKEJsb2NrTGlzdCgxLCBibG9jaykpLCAiXG4iKTsKKyAgICB9CisgICAgaWYg
KG1fcHJlUG9zdE51bWJlcmluZykKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgUHJlL1Bv
c3QgTnVtYmVyaW5nOiAiLCBtX3ByZVBvc3ROdW1iZXJpbmctPnByZU51bWJlcihibG9jayksICIv
IiwgbV9wcmVQb3N0TnVtYmVyaW5nLT5wb3N0TnVtYmVyKGJsb2NrKSwgIlxuIik7CisgICAgaWYg
KG1fbmF0dXJhbExvb3BzKSB7CisgICAgICAgIGlmIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9
IG1fbmF0dXJhbExvb3BzLT5oZWFkZXJPZihibG9jaykpIHsKICAgICAgICAgICAgIG91dC5wcmlu
dChwcmVmaXgsICIgIExvb3AgaGVhZGVyLCBjb250YWluczoiKTsKICAgICAgICAgICAgIFZlY3Rv
cjxCbG9ja0luZGV4PiBzb3J0ZWRCbG9ja0xpc3Q7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbG9vcC0+c2l6ZSgpOyArK2kpCkBAIC00MjgsNyArNDMzLDcgQEAgdm9pZCBH
cmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBjb250YWluaW5nTG9vcHMgPQotICAg
ICAgICAgICAgbV9uYXR1cmFsTG9vcHMubG9vcHNPZihibG9jayk7CisgICAgICAgICAgICBtX25h
dHVyYWxMb29wcy0+bG9vcHNPZihibG9jayk7CiAgICAgICAgIGlmICghY29udGFpbmluZ0xvb3Bz
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgQ29udGFpbmlu
ZyBsb29wIGhlYWRlcnM6Iik7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y29udGFpbmluZ0xvb3BzLnNpemUoKTsgKytpKQpAQCAtNzQ2LDkgKzc1MSw5IEBAIHZvaWQgR3Jh
cGg6OmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpCiAKIHZvaWQgR3JhcGg6OmludmFsaWRhdGVDRkco
KQogewotICAgIG1fZG9taW5hdG9ycy5pbnZhbGlkYXRlKCk7Ci0gICAgbV9uYXR1cmFsTG9vcHMu
aW52YWxpZGF0ZSgpOwotICAgIG1fcHJlUG9zdE51bWJlcmluZy5pbnZhbGlkYXRlKCk7CisgICAg
bV9kb21pbmF0b3JzID0gbnVsbHB0cjsKKyAgICBtX25hdHVyYWxMb29wcyA9IG51bGxwdHI7Cisg
ICAgbV9wcmVQb3N0TnVtYmVyaW5nID0gbnVsbHB0cjsKIH0KIAogdm9pZCBHcmFwaDo6c3Vic3Rp
dHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9j
aywgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEsIE5vZGUqIG5ld0dldExv
Y2FsKQpAQCAtMTQxMCw2ICsxNDE1LDI1IEBAIHZvaWQgR3JhcGg6OmhhbmRsZUFzc2VydGlvbkZh
aWx1cmUoCiAgICAgY3Jhc2goKnRoaXMsIHRvQ1N0cmluZygiV2hpbGUgaGFuZGxpbmcgYmxvY2sg
IiwgcG9pbnRlckR1bXAoYmxvY2spLCAiXG5cbiIpLCBmaWxlLCBsaW5lLCBmdW5jdGlvbiwgYXNz
ZXJ0aW9uKTsKIH0KIAordm9pZCBHcmFwaDo6ZW5zdXJlRG9taW5hdG9ycygpCit7CisgICAgaWYg
KCFtX2RvbWluYXRvcnMpCisgICAgICAgIG1fZG9taW5hdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8
RG9taW5hdG9ycz4oKnRoaXMpOworfQorCit2b2lkIEdyYXBoOjplbnN1cmVQcmVQb3N0TnVtYmVy
aW5nKCkKK3sKKyAgICBpZiAoIW1fcHJlUG9zdE51bWJlcmluZykKKyAgICAgICAgbV9wcmVQb3N0
TnVtYmVyaW5nID0gc3RkOjptYWtlX3VuaXF1ZTxQcmVQb3N0TnVtYmVyaW5nPigqdGhpcyk7Cit9
CisKK3ZvaWQgR3JhcGg6OmVuc3VyZU5hdHVyYWxMb29wcygpCit7CisgICAgZW5zdXJlRG9taW5h
dG9ycygpOworICAgIGlmICghbV9uYXR1cmFsTG9vcHMpCisgICAgICAgIG1fbmF0dXJhbExvb3Bz
ID0gc3RkOjptYWtlX3VuaXF1ZTxOYXR1cmFsTG9vcHM+KCp0aGlzKTsKK30KKwogVmFsdWVQcm9m
aWxlKiBHcmFwaDo6dmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2Rl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTkxODM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMywxNCArMzMsMTEgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJE
RkdBcmd1bWVudFBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgotI2luY2x1
ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJERkdGcm96ZW5WYWx1ZS5oIgogI2luY2x1
ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCi0jaW5jbHVkZSAiREZHTmF0dXJhbExvb3BzLmgiCiAj
aW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJERkdQbGFuLmgiCi0jaW5jbHVkZSAiREZHUHJlUG9zdE51bWJlcmluZy5oIgogI2luY2x1
ZGUgIkRGR1Byb3BlcnR5VHlwZUtleS5oIgogI2luY2x1ZGUgIkRGR1NjYW5uYWJsZS5oIgogI2lu
Y2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNzLmgiCkBAIC01OSw2ICs1NiwxMSBAQCBjbGFzcyBF
eGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBERkcgewogCitjbGFzcyBDRkc7CitjbGFzcyBEb21pbmF0
b3JzOworY2xhc3MgTmF0dXJhbExvb3BzOworY2xhc3MgUHJlUG9zdE51bWJlcmluZzsKKwogI2Rl
ZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7
ICAgICAgICAgICAgXAogICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoX25vZGUtPmZsYWdz
KCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtODIw
LDYgKzgyMiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzRGVidWdnZXJFbmFibGVkOyB9CiAKKyAgICB2b2lkIGVuc3VyZURv
bWluYXRvcnMoKTsKKyAgICB2b2lkIGVuc3VyZVByZVBvc3ROdW1iZXJpbmcoKTsKKyAgICB2b2lk
IGVuc3VyZU5hdHVyYWxMb29wcygpOworCiAgICAgVk0mIG1fdm07CiAgICAgUGxhbiYgbV9wbGFu
OwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC04ODUsOSArODkxLDEwIEBAIHB1Ymxp
YzoKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUtpbGxz
Pj4gbV9ieXRlY29kZUtpbGxzOwogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpTT2JqZWN0KiwgUHJv
cGVydHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7CiAgICAgSGFzaE1hcDxQcm9wZXJ0eVR5cGVLZXks
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwotICAgIERvbWluYXRv
cnMgbV9kb21pbmF0b3JzOwotICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQb3N0TnVtYmVyaW5n
OwotICAgIE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
RG9taW5hdG9ycz4gbV9kb21pbmF0b3JzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVQb3N0TnVt
YmVyaW5nPiBtX3ByZVBvc3ROdW1iZXJpbmc7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5hdHVyYWxM
b29wcz4gbV9uYXR1cmFsTG9vcHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPENGRz4gbV9jZmc7CiAg
ICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2Fs
OwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcx
LDE1ICs3MSwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG51bGxwdHIsIG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CiAgICAgICAgIAotICAgICAgICBtX2dy
YXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7Ci0gICAgICAgIG1f
Z3JhcGgubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAg
ICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsKKyAgICAgICAgbV9ncmFwaC5lbnN1cmVOYXR1
cmFsTG9vcHMoKTsKIAogICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxv
ZygiR3JhcGggYmVmb3JlIExJQ006XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2RhdGEucmVzaXplKG1fZ3JhcGgubV9uYXR1
cmFsTG9vcHMubnVtTG9vcHMoKSk7CisgICAgICAgIG1fZGF0YS5yZXNpemUobV9ncmFwaC5tX25h
dHVyYWxMb29wcy0+bnVtTG9vcHMoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBGaWd1cmUgb3V0
IHRoZSBzZXQgb2YgdGhpbmdzIGVhY2ggbG9vcCB3cml0ZXMgdG8sIG5vdCBpbmNsdWRpbmcgYmxv
Y2tzIHRoYXQKICAgICAgICAgLy8gYmVsb25nIHRvIGlubmVyIGxvb3BzLiBXZSBmaXggdGhpcyBs
YXRlci4KQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9jay0+
Y2ZhSGFzVmlzaXRlZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExv
b3BzLmlubmVyTW9zdExvb3BPZihibG9jayk7CisgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9v
cCogbG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMtPmlubmVyTW9zdExvb3BPZihibG9jayk7
CiAgICAgICAgICAgICBpZiAoIWxvb3ApCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBMb29wRGF0YSYgZGF0YSA9IG1fZGF0YVtsb29wLT5pbmRleCgpXTsKQEAgLTExNCwx
NCArMTE0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgLy8gRm9yIGVhY2ggbG9vcDoKICAgICAgICAg
Ly8gLSBJZGVudGlmeSBpdHMgcHJlLWhlYWRlci4KICAgICAgICAgLy8gLSBNYWtlIHN1cmUgaXRz
IG91dGVyIGxvb3BzIGtub3cgd2hhdCBpdCBjbG9iYmVycy4KLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBsb29wSW5kZXggPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLm51bUxvb3BzKCk7IGxvb3BJbmRl
eC0tOykgewotICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSBtX2dyYXBoLm1f
bmF0dXJhbExvb3BzLmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsb29w
SW5kZXggPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLT5udW1Mb29wcygpOyBsb29wSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29wID0gbV9ncmFwaC5tX25hdHVy
YWxMb29wcy0+bG9vcChsb29wSW5kZXgpOwogICAgICAgICAgICAgTG9vcERhdGEmIGRhdGEgPSBt
X2RhdGFbbG9vcC5pbmRleCgpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICgKLSAg
ICAgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCogb3V0ZXJMb29wID0gbV9ncmFwaC5tX25h
dHVyYWxMb29wcy5pbm5lck1vc3RPdXRlckxvb3AobG9vcCk7CisgICAgICAgICAgICAgICAgY29u
c3QgTmF0dXJhbExvb3AqIG91dGVyTG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMtPmlubmVy
TW9zdE91dGVyTG9vcChsb29wKTsKICAgICAgICAgICAgICAgICBvdXRlckxvb3A7Ci0gICAgICAg
ICAgICAgICAgb3V0ZXJMb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5pbm5lck1vc3RPdXRl
ckxvb3AoKm91dGVyTG9vcCkpCisgICAgICAgICAgICAgICAgb3V0ZXJMb29wID0gbV9ncmFwaC5t
X25hdHVyYWxMb29wcy0+aW5uZXJNb3N0T3V0ZXJMb29wKCpvdXRlckxvb3ApKQogICAgICAgICAg
ICAgICAgIG1fZGF0YVtvdXRlckxvb3AtPmluZGV4KCldLndyaXRlcy5hZGRBbGwoZGF0YS53cml0
ZXMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBoZWFkZXIgPSBsb29w
LmhlYWRlcigpOwpAQCAtMTM1LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaGVhZGVyLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBp
LS07KSB7CiAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBoZWFkZXIt
PnByZWRlY2Vzc29yc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRv
cnMuZG9taW5hdGVzKGhlYWRlciwgcHJlZGVjZXNzb3IpKQorICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGhlYWRlciwgcHJlZGVjZXNzb3IpKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIHByZUhlYWRlciA9
IHByZWRlY2Vzc29yOwpAQCAtMTg5LDcgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgVmVjdG9y
PGNvbnN0IE5hdHVyYWxMb29wKj4gbG9vcFN0YWNrOwogICAgICAgICBib29sIGNoYW5nZWQgPSBm
YWxzZTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5Q
cmVPcmRlcigpKSB7Ci0gICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IG1fZ3Jh
cGgubV9uYXR1cmFsTG9vcHMuaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKKyAgICAgICAgICAgIGNv
bnN0IE5hdHVyYWxMb29wKiBsb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy0+aW5uZXJNb3N0
TG9vcE9mKGJsb2NrKTsKICAgICAgICAgICAgIGlmICghbG9vcCkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIApAQCAtMTk3LDcgKzE5Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGZvciAoCiAgICAgICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGN1cnJlbnQg
PSBsb29wOwogICAgICAgICAgICAgICAgIGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgY3VycmVu
dCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuaW5uZXJNb3N0T3V0ZXJMb29wKCpjdXJyZW50KSkK
KyAgICAgICAgICAgICAgICBjdXJyZW50ID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy0+aW5uZXJN
b3N0T3V0ZXJMb29wKCpjdXJyZW50KSkKICAgICAgICAgICAgICAgICBsb29wU3RhY2suYXBwZW5k
KGN1cnJlbnQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBSZW1lbWJlcjogdGhlIGxv
b3Agc3RhY2sgaGFzIHRoZSBpbm5lci1tb3N0IGxvb3AgYXQgaW5kZXggMCwgc28gaWYgd2Ugd2Fu
dApAQCAtMzMzLDcgKzMzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGJlY2F1c2UgbW9zdCBs
b29wcyBhcmUgc21hbGwgYW5kIG1vc3QgYmxvY2tzIGJlbG9uZyB0byBmZXcgbG9vcHMuCiAgICAg
ICAgIGZvciAodW5zaWduZWQgYm9keUluZGV4ID0gbG9vcC0+c2l6ZSgpOyBib2R5SW5kZXgtLTsp
IHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1YkJsb2NrID0gbG9vcC0+YXQoYm9keUluZGV4
KTsKLSAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBzdWJMb29wID0gbV9ncmFwaC5tX25h
dHVyYWxMb29wcy5oZWFkZXJPZihzdWJCbG9jayk7CisgICAgICAgICAgICBjb25zdCBOYXR1cmFs
TG9vcCogc3ViTG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMtPmhlYWRlck9mKHN1YkJsb2Nr
KTsKICAgICAgICAgICAgIGlmICghc3ViTG9vcCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1YlByZUhlYWRlciA9IG1fZGF0YVtzdWJMb29wLT5p
bmRleCgpXS5wcmVIZWFkZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xv
b3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3Jl
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgQmFzaWNCbG9j
ayogY3JlYXRlUHJlSGVhZGVyKEdyYXBoJiBncmFwaAogICAgIAogICAgIGZvciAodW5zaWduZWQg
cHJlZGVjZXNzb3JJbmRleCA9IDA7IHByZWRlY2Vzc29ySW5kZXggPCBibG9jay0+cHJlZGVjZXNz
b3JzLnNpemUoKTsgcHJlZGVjZXNzb3JJbmRleCsrKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIHBy
ZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1twcmVkZWNlc3NvckluZGV4XTsKLSAgICAg
ICAgaWYgKGdyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2ssIHByZWRlY2Vzc29yKSkK
KyAgICAgICAgaWYgKGdyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGJsb2NrLCBwcmVkZWNl
c3NvcikpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYmxvY2stPnByZWRlY2Vzc29y
c1twcmVkZWNlc3NvckluZGV4LS1dID0gYmxvY2stPnByZWRlY2Vzc29ycy5sYXN0KCk7CiAgICAg
ICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOwpAQCAtMTIxLDE2ICsxMjEsMTYg
QEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7Ci0gICAgICAgIG1fZ3JhcGgu
bV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKLSAgICAgICAgbV9ncmFw
aC5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CisgICAgICAgIG1f
Z3JhcGguZW5zdXJlRG9taW5hdG9ycygpOworICAgICAgICBtX2dyYXBoLmVuc3VyZU5hdHVyYWxM
b29wcygpOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBsb29wSW5kZXggPSBtX2dy
YXBoLm1fbmF0dXJhbExvb3BzLm51bUxvb3BzKCk7IGxvb3BJbmRleC0tOykgewotICAgICAgICAg
ICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmxvb3Ao
bG9vcEluZGV4KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsb29wSW5kZXggPSBtX2dyYXBoLm1f
bmF0dXJhbExvb3BzLT5udW1Mb29wcygpOyBsb29wSW5kZXgtLTspIHsKKyAgICAgICAgICAgIGNv
bnN0IE5hdHVyYWxMb29wJiBsb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy0+bG9vcChsb29w
SW5kZXgpOwogICAgICAgICAgICAgQmFzaWNCbG9jayogZXhpc3RpbmdQcmVIZWFkZXIgPSAwOwog
ICAgICAgICAgICAgYm9vbCBuZWVkc05ld1ByZUhlYWRlciA9IGZhbHNlOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvckluZGV4ID0gbG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNz
b3JzLnNpemUoKTsgcHJlZGVjZXNzb3JJbmRleC0tOykgewogICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIHByZWRlY2Vzc29yID0gbG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNzb3JzW3ByZWRlY2Vz
c29ySW5kZXhdOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21p
bmF0ZXMobG9vcC5oZWFkZXIoKSwgcHJlZGVjZXNzb3IpKQorICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGxvb3AuaGVhZGVyKCksIHByZWRlY2Vzc29y
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKCFl
eGlzdGluZ1ByZUhlYWRlcikgewogICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1ByZUhlYWRl
ciA9IHByZWRlY2Vzc29yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1
cmFsTG9vcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TmF0dXJhbExvb3BzLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNiArNDIs
MTAgQEAgdm9pZCBOYXR1cmFsTG9vcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgIG91dC5w
cmludCgiXSIpOwogfQogCi1OYXR1cmFsTG9vcHM6Ok5hdHVyYWxMb29wcygpIHsgfQotTmF0dXJh
bExvb3BzOjp+TmF0dXJhbExvb3BzKCkgeyB9Ci0KLXZvaWQgTmF0dXJhbExvb3BzOjpjb21wdXRl
RGVwZW5kZW5jaWVzKEdyYXBoJiBncmFwaCkKK05hdHVyYWxMb29wczo6TmF0dXJhbExvb3BzKEdy
YXBoJiBncmFwaCkKIHsKLSAgICBncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5
KGdyYXBoKTsKLX0KKyAgICBBU1NFUlQoZ3JhcGgubV9kb21pbmF0b3JzKTsKIAotdm9pZCBOYXR1
cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQotewogICAgIC8vIEltcGxlbWVudCB0aGUg
Y2xhc3NpYyBkb21pbmF0b3ItYmFzZWQgbmF0dXJhbCBsb29wIGZpbmRlci4gVGhlIGZpcnN0CiAg
ICAgLy8gc3RlcCBpcyB0byBmaW5kIGFsbCBjb250cm9sIGZsb3cgZWRnZXMgQSAtPiBCIHdoZXJl
IEIgZG9taW5hdGVzIEEuCiAgICAgLy8gVGhlbiBCIGlzIGEgbG9vcCBoZWFkZXIgYW5kIEEgaXMg
YSBiYWNrd2FyZCBicmFuY2hpbmcgYmxvY2suIFdlIHdpbGwKQEAgLTY0LDcgKzU4LDcgQEAgdm9p
ZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogICAgIAogICAgIGlmICh2ZXJi
b3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkRvbWluYXRvcnM6XG4iKTsKLSAgICAgICAgZ3JhcGgu
bV9kb21pbmF0b3JzLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZ3JhcGgubV9kb21p
bmF0b3JzLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgfQogICAgIAogICAgIG1fbG9vcHMu
cmVzaXplKDApOwpAQCAtNzYsNyArNzAsNyBAQCB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShH
cmFwaCYgZ3JhcGgpCiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+
bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgPSBibG9jay0+c3VjY2Vzc29yKGkpOwotICAgICAgICAgICAgaWYgKCFncmFwaC5tX2RvbWlu
YXRvcnMuZG9taW5hdGVzKHN1Y2Nlc3NvciwgYmxvY2spKQorICAgICAgICAgICAgaWYgKCFncmFw
aC5tX2RvbWluYXRvcnMtPmRvbWluYXRlcyhzdWNjZXNzb3IsIGJsb2NrKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IG1fbG9vcHMuc2l6ZSgpOyBqLS07KSB7CkBAIC0xOTksNiAr
MTkzLDggQEAgdm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogICAgICAg
ICBkYXRhTG9nKCJSZXN1bHRzOiAiLCAqdGhpcywgIlxuIik7CiB9CiAKK05hdHVyYWxMb29wczo6
fk5hdHVyYWxMb29wcygpIHsgfQorCiBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBOYXR1cmFs
TG9vcHM6Omxvb3BzT2YoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiB7CiAgICAgVmVjdG9yPGNv
bnN0IE5hdHVyYWxMb29wKj4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05hdHVyYWxMb29wcy5oCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsy
OCwxMCBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJERkdBbmFseXNpcy5o
IgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTg4LDE0ICs4OSwxMyBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXg7CiB9OwogCi1jbGFzcyBOYXR1cmFsTG9vcHMg
OiBwdWJsaWMgQW5hbHlzaXM8TmF0dXJhbExvb3BzPiB7CitjbGFzcyBOYXR1cmFsTG9vcHMgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5hdHVyYWxMb29wcyk7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgTmF0dXJhbExvb3BzKCk7CisgICAgTmF0dXJhbExv
b3BzKEdyYXBoJik7CiAgICAgfk5hdHVyYWxMb29wcygpOwogICAgIAotICAgIHZvaWQgY29tcHV0
ZURlcGVuZGVuY2llcyhHcmFwaCYpOwotICAgIHZvaWQgY29tcHV0ZShHcmFwaCYpOwotICAgIAog
ICAgIHVuc2lnbmVkIG51bUxvb3BzKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1Zh
bGlkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE5
MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjc5LDYgKzEyNzksMTAgQEAgc3RydWN0IE5vZGUgewogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gaXRlcmF0b3IobV90ZXJtaW5hbCwgbV90ZXJtaW5hbC0+bnVtU3VjY2Vz
c29ycygpKTsKICAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV90ZXJtaW5hbC0+bnVtU3VjY2Vzc29ycygpOyB9CisgICAgICAgIEJhc2ljQmxvY2sqIGF0
KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV90ZXJtaW5hbC0+c3VjY2Vzc29yKGluZGV4
KTsgfQorICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gYXQoaW5kZXgpOyB9CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIE5v
ZGUqIG1fdGVybWluYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkx
ODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKICAgICAgICAg
CiAgICAgICAgIC8vIE5lZWRlZCBieSBjcmVhdGVQcmVIZWFkZXIoKS4KLSAgICAgICAgbV9ncmFw
aC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAgICBtX2dy
YXBoLmVuc3VyZURvbWluYXRvcnMoKTsKICAgICAgICAgCiAgICAgICAgIENvZGVCbG9jayogYmFz
ZWxpbmUgPSBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jazsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcyNyw3ICs3MjcsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgbV9ncmFwaC5j
b21wdXRlUmVmQ291bnRzKCk7CiAgICAgICAgIG1fZ3JhcGguaW5pdGlhbGl6ZU5vZGVPd25lcnMo
KTsKLSAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3Jh
cGgpOworICAgICAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsKICAgICAgICAgcGVyZm9y
bUxpdmVuZXNzQW5hbHlzaXMobV9ncmFwaCk7CiAgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxp
dHlBbmFseXNpcyhtX2dyYXBoKTsKICAgICAgICAgbV9jb21iaW5lZExpdmVuZXNzID0gQ29tYmlu
ZWRMaXZlbmVzcyhtX2dyYXBoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ0LDkgKzM0NCw5IEBAIFBsYW46OkNvbXBpbGF0
aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAvLyBJZiB3ZSdyZSBkb2luZyB2YWxpZGF0
aW9uLCB0aGVuIHJ1biBzb21lIGFuYWx5c2VzLCB0byBnaXZlIHRoZW0gYW4gb3Bwb3J0dW5pdHkK
ICAgICAvLyB0byBzZWxmLXZhbGlkYXRlLiBOb3cgaXMgYXMgZ29vZCBhIHRpbWUgYXMgYW55IHRv
IGRvIHRoaXMuCiAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgZGZnLm1f
ZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkoZGZnKTsKLSAgICAgICAgZGZnLm1fbmF0dXJh
bExvb3BzLmNvbXB1dGVJZk5lY2Vzc2FyeShkZmcpOwotICAgICAgICBkZmcubV9wcmVQb3N0TnVt
YmVyaW5nLmNvbXB1dGVJZk5lY2Vzc2FyeShkZmcpOworICAgICAgICBkZmcuZW5zdXJlRG9taW5h
dG9ycygpOworICAgICAgICBkZmcuZW5zdXJlTmF0dXJhbExvb3BzKCk7CisgICAgICAgIGRmZy5l
bnN1cmVQcmVQb3N0TnVtYmVyaW5nKCk7CiAgICAgfQogCiAgICAgc3dpdGNoIChtb2RlKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmlu
Zy5jcHAJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlUG9zdE51bWJlcmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCw4IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotUHJlUG9zdE51bWJlcmluZzo6UHJl
UG9zdE51bWJlcmluZygpIHsgfQotUHJlUG9zdE51bWJlcmluZzo6flByZVBvc3ROdW1iZXJpbmco
KSB7IH0KLQotdm9pZCBQcmVQb3N0TnVtYmVyaW5nOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKK1By
ZVBvc3ROdW1iZXJpbmc6OlByZVBvc3ROdW1iZXJpbmcoR3JhcGgmIGdyYXBoKQorICAgIDogbV9n
cmFwaChncmFwaCkKIHsKICAgICBtX21hcCA9IEJsb2NrTWFwPE51bWJlcmluZz4oZ3JhcGgpOwog
ICAgIApAQCAtNjAsNiArNTgsOCBAQCB2b2lkIFByZVBvc3ROdW1iZXJpbmc6OmNvbXB1dGUoR3Jh
cGgmIGdyCiAgICAgfQogfQogCitQcmVQb3N0TnVtYmVyaW5nOjp+UHJlUG9zdE51bWJlcmluZygp
IHsgfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmgJ
KHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlUG9z
dE51bWJlcmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJERkdBbmFseXNpcy5oIgogI2luY2x1ZGUgIkRGR0Jh
c2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdCbG9ja01hcC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNDAsMTMgKzQxLDEzIEBAIGVudW0gRWRnZUtpbmQgewog
ICAgIEJhY2tFZGdlCiB9OwogCi1jbGFzcyBQcmVQb3N0TnVtYmVyaW5nIDogcHVibGljIEFuYWx5
c2lzPFByZVBvc3ROdW1iZXJpbmc+IHsKK2NsYXNzIFByZVBvc3ROdW1iZXJpbmcgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFByZVBvc3ROdW1iZXJpbmcpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIFByZVBvc3ROdW1iZXJpbmcoKTsKKyAgICBQcmVQb3N0
TnVtYmVyaW5nKEdyYXBoJik7CiAgICAgflByZVBvc3ROdW1iZXJpbmcoKTsKIAotICAgIHZvaWQg
Y29tcHV0ZShHcmFwaCYpOwotICAgIAogICAgIHVuc2lnbmVkIHByZU51bWJlcihCYXNpY0Jsb2Nr
KiBibG9jaykgY29uc3QgeyByZXR1cm4gbV9tYXBbYmxvY2tdLm1fcHJlTnVtYmVyOyB9CiAgICAg
dW5zaWduZWQgcG9zdE51bWJlcihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QgeyByZXR1cm4gbV9t
YXBbYmxvY2tdLm1fcG9zdE51bWJlcjsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9u
IDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5n
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9ncmFwaC5tX2Rv
bWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAgICBtX2dyYXBoLmVu
c3VyZURvbWluYXRvcnMoKTsKICAgICAgICAgCiAgICAgICAgIFNTQUNhbGN1bGF0b3Igc3NhQ2Fs
Y3VsYXRvcihtX2dyYXBoKTsKICAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dy
YXBoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxh
dG9yLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FDYWxjdWxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTIgKzk1LDEyIEBAIFNT
QUNhbGN1bGF0b3I6OkRlZiogU1NBQ2FsY3VsYXRvcjo6bmV3RGUKIAogU1NBQ2FsY3VsYXRvcjo6
RGVmKiBTU0FDYWxjdWxhdG9yOjpub25Mb2NhbFJlYWNoaW5nRGVmKEJhc2ljQmxvY2sqIGJsb2Nr
LCBWYXJpYWJsZSogdmFyaWFibGUpCiB7Ci0gICAgcmV0dXJuIHJlYWNoaW5nRGVmQXRUYWlsKG1f
Z3JhcGgubV9kb21pbmF0b3JzLmltbWVkaWF0ZURvbWluYXRvck9mKGJsb2NrKSwgdmFyaWFibGUp
OworICAgIHJldHVybiByZWFjaGluZ0RlZkF0VGFpbChtX2dyYXBoLm1fZG9taW5hdG9ycy0+aW1t
ZWRpYXRlRG9taW5hdG9yT2YoYmxvY2spLCB2YXJpYWJsZSk7CiB9CiAKIFNTQUNhbGN1bGF0b3I6
OkRlZiogU1NBQ2FsY3VsYXRvcjo6cmVhY2hpbmdEZWZBdFRhaWwoQmFzaWNCbG9jayogYmxvY2ss
IFZhcmlhYmxlKiB2YXJpYWJsZSkKIHsKLSAgICBmb3IgKDsgYmxvY2s7IGJsb2NrID0gbV9ncmFw
aC5tX2RvbWluYXRvcnMuaW1tZWRpYXRlRG9taW5hdG9yT2YoYmxvY2spKSB7CisgICAgZm9yICg7
IGJsb2NrOyBibG9jayA9IG1fZ3JhcGgubV9kb21pbmF0b3JzLT5pbW1lZGlhdGVEb21pbmF0b3JP
ZihibG9jaykpIHsKICAgICAgICAgaWYgKERlZiogZGVmID0gbV9kYXRhW2Jsb2NrXS5tX2RlZnMu
Z2V0KHZhcmlhYmxlKSkKICAgICAgICAgICAgIHJldHVybiBkZWY7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDE5
MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzYsMTAgKzE3NiwxMCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgUGhpSW5zZXJ0aW9uRnVuY3Rvcj4KICAgICB2b2lkIGNvbXB1dGVQaGlzKGNvbnN0
IFBoaUluc2VydGlvbkZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9kb21pbmF0b3JzLmlzVmFsaWQoKSk7CisgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX2RvbWluYXRvcnMpOwog
ICAgICAgICAKICAgICAgICAgZm9yIChWYXJpYWJsZSYgdmFyaWFibGUgOiBtX3ZhcmlhYmxlcykg
ewotICAgICAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuZm9yQWxsQmxvY2tzSW5QcnVuZWRJ
dGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCisgICAgICAgICAgICBtX2dyYXBoLm1fZG9taW5h
dG9ycy0+Zm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCiAg
ICAgICAgICAgICAgICAgdmFyaWFibGUubV9ibG9ja3NXaXRoRGVmcywKICAgICAgICAgICAgICAg
ICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAg
Tm9kZSogcGhpTm9kZSA9IGZ1bmN0b3IoJnZhcmlhYmxlLCBibG9jayk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZl
cnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CiAg
ICAgICAgIAogICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7Ci0gICAgICAgIG1f
Z3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAg
bV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFNTQSB0cmFuc2Zvcm1hdGlv
bjpcbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lv
biAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSw4ICs5OSw4IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAg
ICAgICAgICBQcm9maWxlcjo6T3JpZ2luU3RhY2soKSwKICAgICAgICAgICAgIHRvQ1N0cmluZygi
R2VuZXJhdGVkIEZUTCBKSVQgY29kZSBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUoY29kZUJs
b2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiLCBpbnN0cnVjdGlvbiBjb3VudCA9ICIsIGdyYXBoLm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICI6XG4iKSk7CiAgICAgICAgIAotICAgICAg
ICBncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KGdyYXBoKTsKLSAgICAgICAg
Z3JhcGgubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KGdyYXBoKTsKKyAgICAgICAg
Z3JhcGguZW5zdXJlRG9taW5hdG9ycygpOworICAgICAgICBncmFwaC5lbnN1cmVOYXR1cmFsTG9v
cHMoKTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIgICAgIjsKICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbmFtZSA9ICJqc0JvZHkiOwog
ICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5
KG1fZ3JhcGgpOworICAgICAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsKICAgICAgICAg
CiAgICAgICAgIG1fZnRsU3RhdGUubW9kdWxlID0KICAgICAgICAgICAgIG1vZHVsZUNyZWF0ZVdp
dGhOYW1lSW5Db250ZXh0KG5hbWUuZGF0YSgpLCBtX2Z0bFN0YXRlLmNvbnRleHQpOwpAQCAtMzgy
LDcgKzM4Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRv
cnMuZG9taW5hdGVzKG1faGlnaEJsb2NrLCB0YXJnZXQpKSB7CisgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX2RvbWluYXRvcnMtPmRvbWluYXRlcyhtX2hpZ2hCbG9jaywgdGFyZ2V0KSkgewogICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkJsb2NrICIsICp0YXJnZXQsICIgd2lsbCBiYWlsIGFsc28uXG4i
KTsKICAgICAgICAgICAgICAgICB0YXJnZXQtPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKQEAgLTkx
NDksNyArOTE0OSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBpZiAoIXZhbHVlKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIW1fZ3JhcGgubV9kb21pbmF0b3Jz
LmRvbWluYXRlcyh2YWx1ZS5ibG9jaygpLCBtX2hpZ2hCbG9jaykpCisgICAgICAgIGlmICghbV9n
cmFwaC5tX2RvbWluYXRvcnMtPmRvbWluYXRlcyh2YWx1ZS5ibG9jaygpLCBtX2hpZ2hCbG9jaykp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTE4MzUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBACisyMDE1LTExLTAxICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgRG9taW5hdG9ycyBzaG91bGQgYmUgZmFjdG9yZWQgb3V0
IG9mIHRoZSBERkcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDc2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgdGFrZXMgd2hhdCB1c2VkIHRvIGJlIERGR0RvbWluYXRvcnMuaC9ERkdEb21pbmF0
b3JzLmNwcCBhbmQgdHVybnMgaXQgaW50byBhIGdlbmVyaWMKKyAgICAgICAgYWxnb3JpdGhtIHRo
YXQgY2FuIHRha2UgYW55IGFic3RyYWN0IGdyYXBoLiBUaGUgaWRlYSBpcyB0aGF0IHlvdSBjcmVh
dGUgRG9taW5hdG9yczxDRkc+IGFuZAorICAgICAgICBwYXNzIGl0IGEgQ0ZHIG9iamVjdCwgd2hp
Y2ggZGVmaW5lcyB0aGUgdHlwZXMgb2YgZ3JhcGggbm9kZXMgYW5kIG1ldGhvZHMgZm9yIGdldHRp
bmcKKyAgICAgICAgc3VjY2Vzc29ycywgcHJlZGVjZXNzb3JzLCBldGMuIFRoZSBERkcgbm93IGRl
ZmluZXMgYSBjbGFzcyBjYWxsZWQgQ0ZHLCB3aGljaCBpcyBhIHdyYXBwZXIgZm9yCisgICAgICAg
IERGRzo6R3JhcGggdGhhdCBjb25mb3JtcyB0byB0aGUgdGhpbmcgdGhhdCB3dGYvRG9taW5hdG9y
cy5oIGV4cGVjdHMuCisKKyAgICAgICAgV2hlbiBkb2luZyB0aGluZ3MgdG8gZ3JhcGhzLCBpdCdz
IGNvbW1vbiB0byByZWZlciB0byB0aGUgdGhpbmdzIGluIHRoZSBncmFwaCBhcyAibm9kZXMiLgor
ICAgICAgICBCZWNhdXNlIEkgaW50ZW5kIHRvIHJldXNlIHRoZSBDRkcgYWJzdHJhY3Rpb24gd2l0
aCBtYW55IGdyYXBoIGFsZ29yaXRobXMsIHRoYXQgYWJzdHJhY3Rpb24gdXNlcworICAgICAgICB0
aGUgdGVybSAibm9kZSIgdG8gcmVmZXIgdG8gYSBERkcgYmFzaWMgYmxvY2suIEJ1dCBpbiBEb21p
bmF0b3JzLCB0aGUgbWV0aG9kIGFuZCB2YXJpYWJsZSBuYW1lcworICAgICAgICBzdGlsbCB1c2Ug
ImJsb2NrIi4gVGhpcyBpcyBiZWNhdXNlIGFsdGhvdWdoIERvbWluYXRvcnMgYXJlIGFwcGxpY2Fi
bGUgdG8gYW55IGtpbmQgb2YgZGlyZWN0ZWQKKyAgICAgICAgZ3JhcGgsIGl0J3Mgc3VwZXIgdW5s
aWtlbHkgdGhhdCB3ZSB3aWxsIGV2ZXIgdXNlIHRoZW0gZm9yIGFueXRoaW5nIGJ1dCBjb21waWxl
cnMuIEluZGVlZCwgdGhlCisgICAgICAgIG9ubHkgcmVhc29uIHdoeSBJJ20gZmFjdG9yaW5nIHRo
ZW0gb3V0IG9mIHRoZSBERkcgaXMgc28gdGhhdCBJIGNhbiB1c2UgdGhlbSB3aXRoIEIzIGFuZCBB
aXIuCisKKyAgICAgICAgVGhpcyBoYXMgdGhlIG5pY2Ugc2lkZSBlZmZlY3QgdGhhdCBhIHVzZXIg
b2YgV1RGOjpEb21pbmF0b3JzPEpTQzo6REZHOjpDRkc+IHdpbGwgc2VlIGZhbWlsaWFyCisgICAg
ICAgIHRlcm1pbm9sb2d5IGxpa2UgImJsb2Nrc1N0cmljdGx5RG9taW5hdGVkQnkoLi4uKSIgaW5z
dGVhZCBvZiAibm9kZXNTdHJpY3RseURvbWluYXRlZEJ5KC4uLikiLAorICAgICAgICB3aGljaCB3
b3VsZCBiZSBzdXBlciBjb25mdXNpbmcuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3Rm
L0RvbWluYXRvcnMuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OkRvbWluYXRv
cnMpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpjb21wdXRlKToKKyAgICAgICAgKFdURjo6
RG9taW5hdG9yczo6c3RyaWN0bHlEb21pbmF0ZXMpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3Jz
Ojpkb21pbmF0ZXMpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjppbW1lZGlhdGVEb21pbmF0
b3JPZik6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OmZvckFsbFN0cmljdERvbWluYXRvcnNP
Zik6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OmZvckFsbERvbWluYXRvcnNPZik6CisgICAg
ICAgIChXVEY6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc1N0cmljdGx5RG9taW5hdGVkQnkpOgor
ICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NEb21pbmF0ZWRCeSk6CisgICAg
ICAgIChXVEY6OkRvbWluYXRvcnM6OnN0cmljdERvbWluYXRvcnNPZik6CisgICAgICAgIChXVEY6
OkRvbWluYXRvcnM6OmRvbWluYXRvcnNPZik6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OmJs
b2Nrc1N0cmljdGx5RG9taW5hdGVkQnkpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpibG9j
a3NEb21pbmF0ZWRCeSk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0lu
RG9taW5hbmNlRnJvbnRpZXJPZik6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OmRvbWluYW5j
ZUZyb250aWVyT2YpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJbkl0
ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZik6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OmZv
ckFsbEJsb2Nrc0luUHJ1bmVkSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKToKKyAgICAgICAg
KFdURjo6RG9taW5hdG9yczo6aXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKToKKyAgICAgICAg
KFdURjo6RG9taW5hdG9yczo6ZHVtcCk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6Okxlbmdh
dWVyVGFyamFuOjpMZW5nYXVlclRhcmphbik6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6Okxl
bmdhdWVyVGFyamFuOjpjb21wdXRlKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6TGVuZ2F1
ZXJUYXJqYW46OmltbWVkaWF0ZURvbWluYXRvcik6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6
OkxlbmdhdWVyVGFyamFuOjpjb21wdXRlRGVwdGhGaXJzdFByZU51bWJlcmluZyk6CisgICAgICAg
IChXVEY6OkRvbWluYXRvcnM6OkxlbmdhdWVyVGFyamFuOjpjb21wdXRlU2VtaURvbWluYXRvcnNB
bmRJbXBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3Jz
OjpMZW5nYXVlclRhcmphbjo6Y29tcHV0ZUV4cGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycyk6Cisg
ICAgICAgIChXVEY6OkRvbWluYXRvcnM6OkxlbmdhdWVyVGFyamFuOjpsaW5rKToKKyAgICAgICAg
KFdURjo6RG9taW5hdG9yczo6TGVuZ2F1ZXJUYXJqYW46OmV2YWwpOgorICAgICAgICAoV1RGOjpE
b21pbmF0b3JzOjpMZW5nYXVlclRhcmphbjo6Y29tcHJlc3MpOgorICAgICAgICAoV1RGOjpEb21p
bmF0b3JzOjpMZW5nYXVlclRhcmphbjo6QmxvY2tEYXRhOjpCbG9ja0RhdGEpOgorICAgICAgICAo
V1RGOjpEb21pbmF0b3JzOjpOYWl2ZURvbWluYXRvcnM6Ok5haXZlRG9taW5hdG9ycyk6CisgICAg
ICAgIChXVEY6OkRvbWluYXRvcnM6Ok5haXZlRG9taW5hdG9yczo6ZG9taW5hdGVzKToKKyAgICAg
ICAgKFdURjo6RG9taW5hdG9yczo6TmFpdmVEb21pbmF0b3JzOjpkdW1wKToKKyAgICAgICAgKFdU
Rjo6RG9taW5hdG9yczo6TmFpdmVEb21pbmF0b3JzOjpwcnVuZURvbWluYXRvcnMpOgorICAgICAg
ICAoV1RGOjpEb21pbmF0b3JzOjpWYWxpZGF0aW9uQ29udGV4dDo6VmFsaWRhdGlvbkNvbnRleHQp
OgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpWYWxpZGF0aW9uQ29udGV4dDo6cmVwb3J0RXJy
b3IpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpWYWxpZGF0aW9uQ29udGV4dDo6aGFuZGxl
RXJyb3JzKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6bmFpdmVEb21pbmF0ZXMpOgorICAg
ICAgICAoV1RGOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJ
bXBsKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzSW5JdGVyYXRlZERv
bWluYW5jZUZyb250aWVyT2ZJbXBsKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6QmxvY2tE
YXRhOjpCbG9ja0RhdGEpOgorCiAyMDE1LTEwLTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMTkxNjczKTogQ3Jhc2ggaW4gUnVuTG9vcFRp
bWVyOjpzY2hlZHVsZSgpCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAkJMEYyQjY2QTYx
N0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0Yg
LyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKIAkJMEYyQjY2QTcxN0I2QjRGRDAwQTdB
RTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovOyB9Owog
CQkwRjM1MDE2NDFCQjI1OEQ1MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNTAxNjMxQkIyNThDODAwRjBBMkEz
IC8qIFdlYWtSYW5kb20uaCAqLzsgfTsKKwkJMEY0NTcwNDMxQkU1QjU4RjAwNjJBNjI5IC8qIERv
bWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDU3MDQyMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21pbmF0b3JzLmggKi87IH07CiAJCTBGODI0
QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQ
YXJraW5nTG90LmNwcCAqLzsgfTsKIAkJMEY4MjRBNjkxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtp
bmdMb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi87IH07CiAJCTBGODcxMDVB
MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9p
bnRlci5oICovOyB9OwpAQCAtNTAsOCArNTEsOCBAQAogCQkwRkU0NDc5RDFCN0FBQTAzMDA5NDk4
RUIgLyogV29yZExvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovOyB9OwogCQkw
RkVCM0RDRjFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3QUFEIC8q
IFNoYXJlZFRhc2suaCAqLzsgfTsKIAkJMEZFQjNERDExQkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFs
bGVsVmVjdG9ySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJh
dG9yLmggKi87IH07Ci0JCTBGRUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEIw
MUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLzsgfTsKIAkJMEZFQzg0QUYxQkQ4
MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQgLyogR3Jh
cGhOb2RlV29ya2xpc3QuaCAqLzsgfTsKKwkJMEZFQzg0QjExQkRBQ0QzOTAwODBGRjc0IC8qIFNj
b3BlZExhbWJkYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovOyB9OwogCQkw
RkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8q
IFRpbnlQdHJTZXQuaCAqLzsgfTsKIAkJMEZGODYwOTUxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50
ZXJDb21wYXJpc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCAqLzsg
fTsKIAkJMEZGRjE5REMxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZGMTlEQTFC
QjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCAqLzsgfTsKQEAgLTMyMSw2
ICszMjIsNyBAQAogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
YXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzUwMTYzMUJCMjU4
QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NTcwNDIx
QkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgy
NEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xvdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQb2ludGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0zNDYsOCArMzQ4LDggQEAKIAkJMEZFNDQ3OUIxQjdBQUEwMzAw
OTQ5OEVCIC8qIFdvcmRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdv
cmRMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzRENFMUJCNUQ2ODQw
MDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNoYXJlZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNERDAxQkI3
MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRh
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlZExhbWJkYS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQgLyogR3Jh
cGhOb2RlV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhO
b2RlV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjAxQkRB
Q0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY29wZWRMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZF
RDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGlueVB0clNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckNvbXBhcmlzb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGRjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVs
SGVscGVyUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJh
bGxlbEhlbHBlclBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY0LDYg
Kzc2Niw3IEBACiAJCQkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZD
b3VudGVkLmggKi8sCiAJCQkJQThBNDcyN0UxNTFBODI1QTAwNDEyM0ZGIC8qIERlcXVlLmggKi8s
CiAJCQkJQThBNDcyN0YxNTFBODI1QTAwNDEyM0ZGIC8qIERpc2FsbG93Q1R5cGUuaCAqLywKKwkJ
CQkwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovLAogCQkJCUE4QTQ3
MjgwMTUxQTgyNUEwMDQxMjNGRiAvKiBEb3VibHlMaW5rZWRMaXN0LmggKi8sCiAJCQkJQThBNDcy
OTcxNTFBODI1QTAwNDEyM0ZGIC8qIGR0b2EuY3BwICovLAogCQkJCUE4QTQ3Mjk4MTUxQTgyNUEw
MDQxMjNGRiAvKiBkdG9hLmggKi8sCkBAIC0xMTg1LDYgKzExODgsNyBAQAogCQkJCTFBRkRFNjUz
MTk1M0IyM0QwMEM0OEZGQSAvKiBPcHRpb25hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDcz
RjYxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
Q0JCQTA3NDE5QkI3RkRDMDBCQkYwMjUgLyogT1NPYmplY3RQdHIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNDU3MDQzMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21pbmF0b3JzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzNGQTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZFMTUxQTgyNUIwMDQxMjNGRiAvKiBQYWNrZWRJbnRWZWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZGMTUxQTgyNUIwMDQxMjNGRiAvKiBQYWdl
QWxsb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMTkxODM0KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTE2LDYgKzE2LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgQ3VycmVudFRpbWUu
aAogICAgIERhdGFMb2cuaAogICAgIERhdGVNYXRoLmgKKyAgICBEb21pbmF0b3JzLmgKICAgICBE
ZWNpbWFsTnVtYmVyLmgKICAgICBEZWZlcnJhYmxlUmVmQ291bnRlZC5oCiAgICAgRGVxdWUuaApJ
bmRleDogU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0RvbWluYXRvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0RvbWlu
YXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdURkRv
bWluYXRvcnNfaAorI2RlZmluZSBXVEZEb21pbmF0b3JzX2gKKworbmFtZXNwYWNlIFdURiB7CisK
Ky8vIFRoaXMgaXMgYSB1dGlsaXR5IGZvciBmaW5kaW5nIHRoZSBkb21pbmF0b3JzIG9mIGEgZ3Jh
cGguIERvbWluYXRvcnMgYXJlIGFsbW9zdCB1bml2ZXJzYWxseSB1c2VkCisvLyBmb3IgY29udHJv
bCBmbG93IGdyYXBoIGFuYWx5c2lzLCBzbyB0aGlzIGNvZGUgd2lsbCByZWZlciB0byB0aGUgZ3Jh
cGgncyAibm9kZXMiIGFzICJibG9ja3MiLiBJbgorLy8gdGhhdCByZWdhcmQgdGhpcyBjb2RlIGlz
IGtpbmQgb2Ygc3BlY2lhbGl6ZWQgZm9yIHRoZSB2YXJpb3VzIEpTQyBjb21waWxlcnMsIGJ1dCB5
b3UgY291bGQgdXNlIGl0CisvLyBmb3Igbm9uLWNvbXBpbGVyIHRoaW5ncyBpZiB5b3UgYXJlIE9L
IHdpdGggcmVmZXJyaW5nIHRvIHlvdXIgIm5vZGVzIiBhcyAiYmxvY2tzIi4KKwordGVtcGxhdGU8
dHlwZW5hbWUgR3JhcGg+CitjbGFzcyBEb21pbmF0b3JzIHsKK3B1YmxpYzoKKyAgICBEb21pbmF0
b3JzKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIGNvbXB1dGUoYm9vbCBzZWxmQ2hlY2sgPSBmYWxzZSkKKyAgICB7CisgICAg
ICAgIExlbmdhdWVyVGFyamFuIGxlbmdhdWVyVGFyamFuKG1fZ3JhcGgpOworICAgICAgICBsZW5n
YXVlclRhcmphbi5jb21wdXRlKCk7CisKKyAgICAgICAgbV9kYXRhID0gbV9ncmFwaC5uZXdNYXA8
QmxvY2tEYXRhPigpOworICAgIAorICAgICAgICAvLyBGcm9tIGhlcmUgd2Ugd2FudCB0byBidWls
ZCBhIHNwYW5uaW5nIHRyZWUgd2l0aCBib3RoIHVwd2FyZCBhbmQgZG93bndhcmQgbGlua3MgYW5k
IHdlIHdhbnQKKyAgICAgICAgLy8gdG8gZG8gYSBzZWFyY2ggb3ZlciB0aGlzIHRyZWUgdG8gY29t
cHV0ZSBwcmUgYW5kIHBvc3QgbnVtYmVycyB0aGF0IGNhbiBiZSB1c2VkIGZvciBkb21pbmFuY2UK
KyAgICAgICAgLy8gdGVzdHMuCisgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRl
eCA9IGdyYXBoLm51bU5vZGVzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEdyYXBo
OjpOb2RlIGJsb2NrID0gZ3JhcGgubm9kZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAg
R3JhcGg6Ok5vZGUgaWRvbUJsb2NrID0gbGVuZ2F1ZXJUYXJqYW4uaW1tZWRpYXRlRG9taW5hdG9y
KGJsb2NrKTsKKyAgICAgICAgICAgIG1fZGF0YVtibG9ja10uaWRvbVBhcmVudCA9IGlkb21CbG9j
azsKKyAgICAgICAgICAgIGlmIChpZG9tQmxvY2spCisgICAgICAgICAgICAgICAgbV9kYXRhW2lk
b21CbG9ja10uaWRvbUtpZHMuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgfQorICAgIAorICAgICAg
ICB1bnNpZ25lZCBuZXh0UHJlTnVtYmVyID0gMDsKKyAgICAgICAgdW5zaWduZWQgbmV4dFBvc3RO
dW1iZXIgPSAwOworICAgIAorICAgICAgICAvLyBQbGFpbiBzdGFjay1iYXNlZCB3b3JrbGlzdCBi
ZWNhdXNlIHdlIGFyZSBndWFyYW50ZWVkIHRvIHNlZSBlYWNoIGJsb2NrIGV4YWN0bHkgb25jZSBh
bnl3YXkuCisgICAgICAgIFZlY3RvcjxHcmFwaE5vZGVXaXRoT3JkZXI8R3JhcGg6Ok5vZGU+PiB3
b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kKEdyYXBoTm9kZVdpdGhPcmRlcjxHcmFw
aDo6Tm9kZT4oZ3JhcGguYmxvY2soMCksIEdyYXBoVmlzaXRPcmRlcjo6UHJlKSk7CisgICAgICAg
IHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBHcmFwaE5vZGVXaXRo
T3JkZXI8R3JhcGg6Ok5vZGU+IGl0ZW0gPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAg
ICAgc3dpdGNoIChpdGVtLm9yZGVyKSB7CisgICAgICAgICAgICBjYXNlIEdyYXBoVmlzaXRPcmRl
cjo6UHJlOgorICAgICAgICAgICAgICAgIG1fZGF0YVtpdGVtLm5vZGVdLnByZU51bWJlciA9IG5l
eHRQcmVOdW1iZXIrKzsKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoR3JhcGhOb2Rl
V2l0aE9yZGVyPEdyYXBoOjpOb2RlPihpdGVtLm5vZGUsIEdyYXBoVmlzaXRPcmRlcjo6UG9zdCkp
OworICAgICAgICAgICAgICAgIGZvciAoR3JhcGg6Ok5vZGUga2lkIDogbV9kYXRhW2l0ZW0ubm9k
ZV0uaWRvbUtpZHMpCisgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChCbG9ja1dp
dGhPcmRlcihraWQsIEdyYXBoVmlzaXRPcmRlcjo6UHJlKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEdyYXBoOjpWaXNpdE9yZGVyOjpQb3N0OgorICAgICAgICAg
ICAgICAgIG1fZGF0YVtpdGVtLm5vZGVdLnBvc3ROdW1iZXIgPSBuZXh0UG9zdE51bWJlcisrOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisg
ICAgICAgIGlmIChzZWxmQ2hlY2spIHsKKyAgICAgICAgICAgIC8vIENoZWNrIG91ciBkb21pbmF0
b3IgY2FsY3VsYXRpb246CisgICAgICAgICAgICAvLyAxKSBDaGVjayB0aGF0IG91ciByYW5nZS1i
YXNlZCBhbmNlc3RyeSB0ZXN0IGlzIHRoZSBzYW1lIGFzIGEgbmFpdmUgYW5jZXN0cnkgdGVzdC4K
KyAgICAgICAgICAgIC8vIDIpIENoZWNrIHRoYXQgb3VyIG5vdGlvbiBvZiB3aG8gZG9taW5hdGVz
IHdob20gaXMgaWRlbnRpY2FsIHRvIGEgbmFpdmUgKG5vdAorICAgICAgICAgICAgLy8gICAgTGVu
Z2F1ZXItVGFyamFuKSBkb21pbmF0b3IgY2FsY3VsYXRpb24uCisgICAgICAgIAorICAgICAgICAg
ICAgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dChtX2dyYXBoLCAqdGhpcyk7CisgICAgICAgIAor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBmcm9tQmxvY2tJbmRleCA9IGdyYXBoLm51bU5vZGVz
KCk7IGZyb21CbG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgR3JhcGg6Ok5vZGUgZnJv
bUJsb2NrID0gZ3JhcGgubm9kZShmcm9tQmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYg
KCFmcm9tQmxvY2sgfHwgbV9kYXRhW2Zyb21CbG9ja10ucHJlTnVtYmVyID09IFVJTlRfTUFYKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHRvQmxvY2tJbmRleCA9IGdyYXBoLm51bU5vZGVzKCk7IHRvQmxvY2tJbmRleC0tOykgewor
ICAgICAgICAgICAgICAgICAgICBHcmFwaDo6Tm9kZSB0b0Jsb2NrID0gZ3JhcGgubm9kZSh0b0Js
b2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRvQmxvY2sgfHwgbV9kYXRhW3Rv
QmxvY2tdLnByZU51bWJlciA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoZG9taW5h
dGVzKGZyb21CbG9jaywgdG9CbG9jaykgIT0gbmFpdmVEb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Js
b2NrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0RXJyb3IoZnJvbUJs
b2NrLCB0b0Jsb2NrLCAiUmFuZ2UtYmFzZWQgZG9taW5hdGlvbiBjaGVjayBpcyBicm9rZW4iKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGRvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxvY2spICE9
IGNvbnRleHQubmFpdmVEb21pbmF0b3JzLmRvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxvY2spKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRv
QmxvY2ssICJMZW5nYXVlci1UYXJqYW4gZG9taW5hdGlvbiBpcyBicm9rZW4iKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgY29udGV4dC5o
YW5kbGVFcnJvcnMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgc3RyaWN0bHlEb21p
bmF0ZXMoR3JhcGg6Ok5vZGUgZnJvbSwgR3JhcGg6Ok5vZGUgdG8pIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVt0b10ucHJlTnVt
YmVyID4gbV9kYXRhW2Zyb21dLnByZU51bWJlcgorICAgICAgICAgICAgJiYgbV9kYXRhW3RvXS5w
b3N0TnVtYmVyIDwgbV9kYXRhW2Zyb21dLnBvc3ROdW1iZXI7CisgICAgfQorICAgIAorICAgIGJv
b2wgZG9taW5hdGVzKEdyYXBoOjpOb2RlIGZyb20sIEdyYXBoOjpOb2RlIHRvKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZyb20gPT0gdG8gfHwgc3RyaWN0bHlEb21pbmF0ZXMoZnJvbSwg
dG8pOworICAgIH0KKyAgICAKKyAgICBHcmFwaDo6Tm9kZSBpbW1lZGlhdGVEb21pbmF0b3JPZihH
cmFwaDo6Tm9kZSBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGFbYmxv
Y2tdLmlkb21QYXJlbnQ7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CisgICAgdm9pZCBmb3JBbGxTdHJpY3REb21pbmF0b3JzT2YoR3JhcGg6Ok5vZGUgdG8sIGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKEdyYXBoOjpO
b2RlIGJsb2NrID0gbV9kYXRhW3RvXS5pZG9tUGFyZW50OyBibG9jazsgYmxvY2sgPSBtX2RhdGFb
YmxvY2tdLmlkb21QYXJlbnQpCisgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbERvbWlu
YXRvcnNPZihHcmFwaDo6Tm9kZSB0bywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAg
ICB7CisgICAgICAgIGZvciAoR3JhcGg6Ok5vZGUgYmxvY2sgPSB0bzsgYmxvY2s7IGJsb2NrID0g
bV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50KQorICAgICAgICAgICAgZnVuY3RvcihibG9jayk7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JB
bGxCbG9ja3NTdHJpY3RseURvbWluYXRlZEJ5KEdyYXBoOjpOb2RlIGZyb20sIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8R3JhcGg6Ok5vZGUsIDE2
PiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtmcm9tXS5p
ZG9tS2lkcyk7CisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBHcmFwaDo6Tm9kZSBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAg
ICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZFZlY3RvcihtX2Rh
dGFbYmxvY2tdLmlkb21LaWRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tzRG9taW5hdGVkQnkoR3Jh
cGg6Ok5vZGUgZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAg
ICAgIFZlY3RvcjxHcmFwaDo6Tm9kZSwgMTY+IHdvcmtsaXN0OworICAgICAgICB3b3JrbGlzdC5h
cHBlbmQoZnJvbSk7CisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBHcmFwaDo6Tm9kZSBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAg
ICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZFZlY3Rvciht
X2RhdGFbYmxvY2tdLmlkb21LaWRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBHcmFw
aDo6U2V0IHN0cmljdERvbWluYXRvcnNPZihHcmFwaDo6Tm9kZSB0bykgY29uc3QKKyAgICB7Cisg
ICAgICAgIEdyYXBoOjpTZXQgcmVzdWx0OworICAgICAgICBmb3JBbGxTdHJpY3REb21pbmF0b3Jz
T2YoCisgICAgICAgICAgICB0bywKKyAgICAgICAgICAgIFsmXSAoR3JhcGg6Ok5vZGUgbm9kZSkg
eworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQobm9kZSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgR3JhcGg6OlNldCBkb21pbmF0
b3JzT2YoR3JhcGg6Ok5vZGUgdG8pIGNvbnN0CisgICAgeworICAgICAgICBHcmFwaDo6U2V0IHJl
c3VsdDsKKyAgICAgICAgZm9yQWxsRG9taW5hdG9yc09mKAorICAgICAgICAgICAgdG8sCisgICAg
ICAgICAgICBbJl0gKEdyYXBoOjpOb2RlIG5vZGUpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YWRkKG5vZGUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIEdyYXBoOjpTZXQgYmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeShHcmFwaDo6
Tm9kZSBmcm9tKSBjb25zdAorICAgIHsKKyAgICAgICAgR3JhcGg6OlNldCByZXN1bHQ7CisgICAg
ICAgIGZvckFsbEJsb2Nrc1N0cmljdGx5RG9taW5hdGVkQnkoCisgICAgICAgICAgICBmcm9tLAor
ICAgICAgICAgICAgWyZdIChHcmFwaDo6Tm9kZSBub2RlKSB7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmFkZChub2RlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBHcmFwaDo6U2V0IGJsb2Nrc0RvbWluYXRlZEJ5KEdyYXBoOjpOb2Rl
IGZyb20pIGNvbnN0CisgICAgeworICAgICAgICBHcmFwaDo6U2V0IHJlc3VsdDsKKyAgICAgICAg
Zm9yQWxsQmxvY2tzRG9taW5hdGVkQnkoCisgICAgICAgICAgICBmcm9tLAorICAgICAgICAgICAg
WyZdIChHcmFwaDo6Tm9kZSBub2RlKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChub2Rl
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5E
b21pbmFuY2VGcm9udGllck9mKAorICAgICAgICBHcmFwaDo6Tm9kZSBmcm9tLCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgR3JhcGg6OlNldCBzZXQ7CisgICAg
ICAgIGZvckFsbEJsb2Nrc0luRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCisgICAgICAgICAgICBm
cm9tLAorICAgICAgICAgICAgWyZdIChHcmFwaDo6Tm9kZSBibG9jaykgeworICAgICAgICAgICAg
ICAgIGlmIChzZXQuYWRkKGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihibG9j
ayk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgR3JhcGg6OlNldCBkb21pbmFu
Y2VGcm9udGllck9mKEdyYXBoOjpOb2RlIGZyb20pIGNvbnN0CisgICAgeworICAgICAgICBHcmFw
aDo6U2V0IHJlc3VsdDsKKyAgICAgICAgZm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9m
KAorICAgICAgICAgICAgZnJvbSwKKyAgICAgICAgICAgIFsmXSAoR3JhcGg6Ok5vZGUgbm9kZSkg
eworICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQobm9kZSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGll
ck9mKGNvbnN0IEdyYXBoOjpMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgZm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVy
T2YoCisgICAgICAgICAgICBmcm9tLAorICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9j
aykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihibG9jayk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgLy8g
VGhpcyBpcyBhIGNsb3NlIHJlbGF0aXZlIG9mIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFu
Y2VGcm9udGllck9mKCksIHdoaWNoIGFsbG93cyB0aGUKKyAgICAvLyBnaXZlbiBmdW5jdG9yIHRv
IHJldHVybiBmYWxzZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGRvbid0IHdpc2ggdG8gY29uc2lkZXIg
dGhlIGdpdmVuIGJsb2NrLgorICAgIC8vIFVzZWZ1bCBmb3IgY29tcHV0aW5nIHBydW5lZCBTU0Eg
Zm9ybS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxv
Y2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCisgICAgICAgIGNvbnN0IEdy
YXBoOjpMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAg
R3JhcGg6OlNldCBzZXQ7CisgICAgICAgIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VG
cm9udGllck9mSW1wbCgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKEdyYXBo
OjpMaXN0IGJsb2NrKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNldC5hZGQoYmxv
Y2spKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0b3IoYmxvY2spOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAg
IEdyYXBoOjpTZXQgaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKGNvbnN0IEdyYXBoOjpMaXN0
JiBmcm9tKSBjb25zdAorICAgIHsKKyAgICAgICAgR3JhcGg6OlNldCByZXN1bHQ7CisgICAgICAg
IGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAg
ICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKEdyYXBoOjpOb2RlIG5vZGUpIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkKG5vZGUpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAg
ICAgICAgICAgIG91dC5wcmludCgiICAgIE5vdCBWYWxpZC5cbiIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9kYXRhLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAg
ICAgICAgICBpZiAobV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciA9PSBVSU5UX01BWCkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0LnBy
aW50KCIgICAgQmxvY2sgIyIsIGJsb2NrSW5kZXgsICI6IGlkb20gPSAiLCBwb2ludGVyRHVtcCht
X2RhdGFbYmxvY2tJbmRleF0uaWRvbVBhcmVudCksICIsIGlkb21LaWRzID0gWyIpOworICAgICAg
ICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkcy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICptX2RhdGFbYmxvY2tJbmRleF0uaWRvbUtpZHNbaV0p
OworICAgICAgICAgICAgb3V0LnByaW50KCJdLCBwcmUvcG9zdCA9ICIsIG1fZGF0YVtibG9ja0lu
ZGV4XS5wcmVOdW1iZXIsICIvIiwgbV9kYXRhW2Jsb2NrSW5kZXhdLnBvc3ROdW1iZXIsICJcbiIp
OworICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICAvLyBUaGlzIGltcGxlbWVu
dHMgTGVuZ2F1ZXIgYW5kIFRhcmphbidzICJBIEZhc3QgQWxnb3JpdGhtIGZvciBGaW5kaW5nIERv
bWluYXRvcnMgaW4gYSBGbG93Z3JhcGgiCisgICAgLy8gKFRPUExBUyAxOTc5KS4gSXQgdXNlcyB0
aGUgInNpbXBsZSIgaW1wbGVtZW50YXRpb24gb2YgTElOSyBhbmQgRVZBTCwgd2hpY2ggeWllbGRz
IGFuIE8obiBsb2cgbikKKyAgICAvLyBzb2x1dGlvbi4gVGhlIGZ1bGwgcGFwZXIgaXMgbGlua2Vk
IGJlbG93OyB0aGlzIGNvZGUgYXR0ZW1wdHMgdG8gY2xvc2VseSBmb2xsb3cgdGhlIGFsZ29yaXRo
bSBhcworICAgIC8vIGl0IGlzIHByZXNlbnRlZCBpbiB0aGUgcGFwZXI7IGluIHBhcnRpY3VsYXIg
c2VjdGlvbnMgMyBhbmQgNCBhcyB3ZWxsIGFzIGFwcGVuZGl4IEIuCisgICAgLy8gaHR0cHM6Ly93
d3cuY3MucHJpbmNldG9uLmVkdS9jb3Vyc2VzL2FyY2hpdmUvZmFsbDAzL2NzNTI4L2hhbmRvdXRz
L2ElMjBmYXN0JTIwYWxnb3JpdGhtJTIwZm9yJTIwZmluZGluZy5wZGYKKyAgICAvLworICAgIC8v
IFRoaXMgY29kZSBpcyB2ZXJ5IHN1YnRsZS4gVGhlIExlbmdhdWVyLVRhcmphbiBhbGdvcml0aG0g
aXMgaW5jcmVkaWJseSBkZWVwIHRvIGJlZ2luIHdpdGguIFRoZQorICAgIC8vIGdvYWwgb2YgdGhp
cyBjb2RlIGlzIHRvIGZvbGxvdyB0aGUgY29kZSBpbiB0aGUgcGFwZXIsIGhvd2V2ZXIgb3VyIGlt
cGxlbWVudGF0aW9uIG11c3QgZGV2aWF0ZQorICAgIC8vIGZyb20gdGhlIHBhcGVyIHdoZW4gaXQg
Y29tZXMgdG8gcmVjdXJzaW9uLiBUaGUgYXV0aG9ycyBoYWQgdXNlZCByZWN1cnNpb24gdG8gaW1w
bGVtZW50IERGUywgYW5kCisgICAgLy8gYWxzbyB0byBpbXBsZW1lbnQgdGhlICJzaW1wbGUiIEVW
QUwuIFdlIGNvbnZlcnQgYm90aCBvZiB0aG9zZSBpbnRvIHdvcmtsaXN0LWJhc2VkIHNvbHV0aW9u
cy4KKyAgICAvLyBGaW5hbGx5LCBvbmNlIHRoZSBhbGdvcml0aG0gZ2l2ZXMgdXMgaW1tZWRpYXRl
IGRvbWluYXRvcnMsIHdlIGltcGxlbWVudCBkb21pbmFuY2UgdGVzdHMgYnkKKyAgICAvLyB3YWxr
aW5nIHRoZSBkb21pbmF0b3IgdHJlZSBhbmQgY29tcHV0aW5nIHByZSBhbmQgcG9zdCBudW1iZXJz
LiBXZSB0aGVuIHVzZSB0aGUgcmFuZ2UgaW5jbHVzaW9uCisgICAgLy8gY2hlY2sgdHJpY2sgdGhh
dCB3YXMgZmlyc3QgZGlzY292ZXJlZCBieSBQYXVsIEYuIERpZXR6IGluIDE5ODIgaW4gIk1haW50
YWluaW5nIG9yZGVyIGluIGEgbGlua2VkCisgICAgLy8gbGlzdCIgKHNlZSBodHRwOi8vZGwuYWNt
Lm9yZy9jaXRhdGlvbi5jZm0/aWQ9ODAyMTg0KS4KKworICAgIGNsYXNzIExlbmdhdWVyVGFyamFu
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIExlbmdhdWVyVGFyamFuKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgICAgICwgbV9kYXRhKGdyYXBoKQor
ICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bU5vZGVzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBHcmFwaDo6Tm9k
ZSBibG9jayA9IG1fZ3JhcGgubm9kZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBt
X2RhdGFbYmxvY2tdLmxhYmVsID0gYmxvY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAKKyAgICAgICAgdm9pZCBjb21wdXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29tcHV0
ZURlcHRoRmlyc3RQcmVOdW1iZXJpbmcoKTsgLy8gU3RlcCAxLgorICAgICAgICAgICAgY29tcHV0
ZVNlbWlEb21pbmF0b3JzQW5kSW1wbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCk7IC8vIFN0ZXBz
IDIgYW5kIDMuCisgICAgICAgICAgICBjb21wdXRlRXhwbGljaXRJbW1lZGlhdGVEb21pbmF0b3Jz
KCk7IC8vIFN0ZXAgNC4KKyAgICAgICAgfQorICAgIAorICAgICAgICBHcmFwaDo6Tm9kZSBpbW1l
ZGlhdGVEb21pbmF0b3IoR3JhcGg6Ok5vZGUgYmxvY2spCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2RhdGFbYmxvY2tdLmRvbTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdm9pZCBjb21wdXRlRGVwdGhGaXJzdFByZU51bWJlcmluZygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIFVzZSBhIGJsb2NrIHdvcmtsaXN0IHRoYXQgYWxzbyB0cmFja3MgdGhlIGlu
ZGV4IGluc2lkZSB0aGUgc3VjY2Vzc29yIGxpc3QuIFRoaXMgaXMKKyAgICAgICAgICAgIC8vIG5l
Y2Vzc2FyeSBmb3IgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndCBhdHRlbXB0IHRvIHZpc2l0IGEgc3Vj
Y2Vzc29yIHVudGlsIHRoZSBwcmV2aW91cworICAgICAgICAgICAgLy8gc3VjY2Vzc29ycyB0aGF0
IHdlIGhhZCB2aXNpdGVkIGFyZSBmdWxseSBwcm9jZXNzZWQuIFRoaXMgZW5kcyB1cCBiZWluZyBy
ZXZlYWxlZCBpbiB0aGUKKyAgICAgICAgICAgIC8vIG91dHB1dCBvZiB0aGlzIG1ldGhvZCBiZWNh
dXNlIHRoZSBmaXJzdCB0aW1lIHdlIHNlZSBhbiBlZGdlIHRvIGEgYmxvY2ssIHdlIHNldCB0aGUK
KyAgICAgICAgICAgIC8vIGJsb2NrJ3MgcGFyZW50LiBTbywgaWYgd2UgaGF2ZToKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBBIC0+IEIKKyAgICAgICAgICAgIC8vIEEgLT4gQworICAg
ICAgICAgICAgLy8gQiAtPiBDCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQW5kIHdl
J3JlIHByb2Nlc3NpbmcgQSwgdGhlbiB3ZSB3YW50IHRvIGVuc3VyZSB0aGF0IGlmIHdlIHNlZSBB
LT5CIGZpcnN0IChhbmQgaGVuY2Ugc2V0CisgICAgICAgICAgICAvLyBCJ3MgcHJlbnVtYmVyIGJl
Zm9yZSB3ZSBzZXQgQydzKSB0aGVuIHdlIGFsc28gZW5kIHVwIHNldHRpbmcgQydzIHBhcmVudCB0
byBCIGJ5IHZpcnR1ZQorICAgICAgICAgICAgLy8gb2Ygbm90IG5vdGljaW5nIEEtPkMgdW50aWwg
d2UncmUgZG9uZSBwcm9jZXNzaW5nIEIuCisKKyAgICAgICAgICAgIEV4dGVuZGVkR3JhcGhOb2Rl
V29ya2xpc3Q8R3JhcGg6Ok5vZGUsIHVuc2lnbmVkLCBHcmFwaDo6U2V0PgorICAgICAgICAgICAg
RXh0ZW5kZWRCbG9ja1dvcmtsaXN0PHVuc2lnbmVkPiB3b3JrbGlzdDsKKyAgICAgICAgICAgIHdv
cmtsaXN0LnB1c2gobV9ncmFwaC5ub2RlKDApLCAwKTsKKyAgICAgICAgCisgICAgICAgICAgICB3
aGlsZSAoR3JhcGhOb2RlV2l0aDxHcmFwaDo6Tm9kZSwgdW5zaWduZWQ+IGl0ZW0gPSB3b3JrbGlz
dC5wb3AoKSkgeworICAgICAgICAgICAgICAgIEdyYXBoOjpOb2RlIGJsb2NrID0gaXRlbS5ub2Rl
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gaXRlbS5kYXRhOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gV2UgaW5pdGlhbGx5IHB1c2ggd2l0aCBz
dWNjZXNzb3JJbmRleCA9IDAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGFu
eQorICAgICAgICAgICAgICAgIC8vIHN1Y2Nlc3NvcnMuIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4g
YXNzaWduIG91ciBwcmVudW1iZXIuIFN1YnNlcXVlbnRseSB3ZSBnZXQgcHVzaGVkCisgICAgICAg
ICAgICAgICAgLy8gd2l0aCBoaWdoZXIgc3VjY2Vzc29ySW5kZXggdmFsdWVzLCBidXQgb25seSBp
ZiB0aGV5IGFyZSBpbiByYW5nZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN1Y2Nlc3Nvcklu
ZGV4IHx8IHN1Y2Nlc3NvckluZGV4IDwgbV9ncmFwaC5zdWNjZXNzb3JzKGJsb2NrKS5zaXplKCkp
OworCisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JJbmRleCkgeworICAgICAgICAgICAg
ICAgICAgICBtX2RhdGFbYmxvY2tdLnNlbWlOdW1iZXIgPSBtX2Jsb2NrQnlQcmVOdW1iZXIuc2l6
ZSgpOworICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrQnlQcmVOdW1iZXIuYXBwZW5kKGJsb2Nr
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
c3VjY2Vzc29ySW5kZXggPCBtX2dyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spLnNpemUoKSkgeworICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXh0U3VjY2Vzc29ySW5kZXggPSBzdWNjZXNzb3JJ
bmRleCArIDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0U3VjY2Vzc29ySW5kZXggPCBt
X2dyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdvcmtsaXN0LmZvcmNlUHVzaChibG9jaywgbmV4dFN1Y2Nlc3NvckluZGV4KTsKKworICAgICAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA9IG1fZ3JhcGguc3VjY2Vz
c29ycyhibG9jaylbc3VjY2Vzc29ySW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAod29y
a2xpc3QucHVzaChzdWNjZXNzb3JCbG9jaywgMCkpCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2RhdGFbc3VjY2Vzc29yQmxvY2tdLnBhcmVudCA9IGJsb2NrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIGNvbXB1dGVTZW1p
RG9taW5hdG9yc0FuZEltcGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY3VycmVudFByZU51bWJlciA9IG1fYmxvY2tCeVByZU51
bWJlci5zaXplKCk7IGN1cnJlbnRQcmVOdW1iZXItLSA+IDE7KSB7CisgICAgICAgICAgICAgICAg
R3JhcGg6Ok5vZGUgYmxvY2sgPSBtX2Jsb2NrQnlQcmVOdW1iZXJbY3VycmVudFByZU51bWJlcl07
CisgICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBibG9ja0RhdGEgPSBtX2RhdGFbYmxvY2tdOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gU3RlcCAyOgorICAgICAgICAgICAgICAg
IGZvciAoR3JhcGg6Ok5vZGUgcHJlZGVjZXNzb3JCbG9jayA6IG1fZ3JhcGgucHJlZGVjZXNzb3Jz
KGJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBHcmFwaDo6Tm9kZSBpbnRlcm1lZGlhdGVC
bG9jayA9IGV2YWwocHJlZGVjZXNzb3JCbG9jayk7CisgICAgICAgICAgICAgICAgICAgIGJsb2Nr
RGF0YS5zZW1pTnVtYmVyID0gc3RkOjptaW4oCisgICAgICAgICAgICAgICAgICAgICAgICBtX2Rh
dGFbaW50ZXJtZWRpYXRlQmxvY2tdLnNlbWlOdW1iZXIsIGJsb2NrRGF0YS5zZW1pTnVtYmVyKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYnVja2V0UHJlTnVt
YmVyID0gYmxvY2tEYXRhLnNlbWlOdW1iZXI7CisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1Y2tl
dFByZU51bWJlciA8PSBjdXJyZW50UHJlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBtX2RhdGFb
bV9ibG9ja0J5UHJlTnVtYmVyW2J1Y2tldFByZU51bWJlcl1dLmJ1Y2tldC5hcHBlbmQoYmxvY2sp
OworICAgICAgICAgICAgICAgIGxpbmsoYmxvY2tEYXRhLnBhcmVudCwgYmxvY2spOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gU3RlcCAzOgorICAgICAgICAgICAgICAgIGZvciAo
R3JhcGg6Ok5vZGUgc2VtaURvbWluZWUgOiBtX2RhdGFbYmxvY2tEYXRhLnBhcmVudF0uYnVja2V0
KSB7CisgICAgICAgICAgICAgICAgICAgIEdyYXBoOjpOb2RlIHBvc3NpYmxlRG9taW5hdG9yID0g
ZXZhbChzZW1pRG9taW5lZSk7CisgICAgICAgICAgICAgICAgICAgIEJsb2NrRGF0YSYgc2VtaURv
bWluZWVEYXRhID0gbV9kYXRhW3NlbWlEb21pbmVlXTsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG1fYmxvY2tCeVByZU51bWJlcltzZW1pRG9taW5lZURhdGEuc2VtaU51bWJlcl0gPT0gYmxv
Y2tEYXRhLnBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgIEJsb2NrRGF0YSYgcG9zc2libGVE
b21pbmF0b3JEYXRhID0gbV9kYXRhW3Bvc3NpYmxlRG9taW5hdG9yXTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHBvc3NpYmxlRG9taW5hdG9yRGF0YS5zZW1pTnVtYmVyIDwgc2VtaURvbWluZWVE
YXRhLnNlbWlOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZW1pRG9taW5lZURhdGEu
ZG9tID0gcG9zc2libGVEb21pbmF0b3I7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbWlEb21pbmVlRGF0YS5kb20gPSBibG9ja0RhdGEucGFyZW50
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2RhdGFbYmxvY2tEYXRhLnBh
cmVudF0uYnVja2V0LmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgdm9pZCBjb21wdXRlRXhwbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCkKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjdXJyZW50UHJlTnVtYmVyID0gMTsgY3VycmVu
dFByZU51bWJlciA8IG1fYmxvY2tCeVByZU51bWJlci5zaXplKCk7ICsrY3VycmVudFByZU51bWJl
cikgeworICAgICAgICAgICAgICAgIEdyYXBoOjpOb2RlIGJsb2NrID0gbV9ibG9ja0J5UHJlTnVt
YmVyW2N1cnJlbnRQcmVOdW1iZXJdOworICAgICAgICAgICAgICAgIEJsb2NrRGF0YSYgYmxvY2tE
YXRhID0gbV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChi
bG9ja0RhdGEuZG9tICE9IG1fYmxvY2tCeVByZU51bWJlcltibG9ja0RhdGEuc2VtaU51bWJlcl0p
CisgICAgICAgICAgICAgICAgICAgIGJsb2NrRGF0YS5kb20gPSBtX2RhdGFbYmxvY2tEYXRhLmRv
bV0uZG9tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgbGlu
ayhHcmFwaDo6Tm9kZSBmcm9tLCBHcmFwaDo6Tm9kZSB0bykKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9kYXRhW3RvXS5hbmNlc3RvciA9IGZyb207CisgICAgICAgIH0KKyAgICAKKyAgICAgICAg
R3JhcGg6Ok5vZGUgZXZhbChHcmFwaDo6Tm9kZSBibG9jaykKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFtX2RhdGFbYmxvY2tdLmFuY2VzdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBi
bG9jazsKKyAgICAgICAgCisgICAgICAgICAgICBjb21wcmVzcyhibG9jayk7CisgICAgICAgICAg
ICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5sYWJlbDsKKyAgICAgICAgfQorICAgIAorICAgICAgICB2
b2lkIGNvbXByZXNzKEdyYXBoOjpOb2RlIGluaXRpYWxCbG9jaykKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gVGhpcyB3YXMgbWVhbnQgdG8gYmUgYSByZWN1cnNpdmUgZnVuY3Rpb24sIGJ1dCB3
ZSBkb24ndCBsaWtlIHJlY3Vyc2lvbiBiZWNhdXNlIHdlIGRvbid0CisgICAgICAgICAgICAvLyB3
YW50IHRvIGJsb3cgdGhlIHN0YWNrLiBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gd2lsbCBjYWxsIGNv
bXByZXNzKCkgcmVjdXJzaXZlbHkgb24gdGhlCisgICAgICAgICAgICAvLyBhbmNlc3RvciBvZiBh
bnl0aGluZyB0aGF0IGhhcyBhbiBhbmNlc3Rvci4gU28sIHdlIHBvcHVsYXRlIG91ciB3b3JrbGlz
dCB3aXRoIHRoZQorICAgICAgICAgICAgLy8gcmVjdXJzaXZlIGFuY2VzdG9ycyBvZiBpbml0aWFs
QmxvY2suIFRoZW4gd2UgcHJvY2VzcyB0aGUgbGlzdCBzdGFydGluZyBmcm9tIHRoZSBibG9jawor
ICAgICAgICAgICAgLy8gdGhhdCBpcyBmdXJ0aGVzdCB1cCB0aGUgYW5jZXN0b3IgY2hhaW4uCisg
ICAgICAgIAorICAgICAgICAgICAgR3JhcGg6Ok5vZGUgYW5jZXN0b3IgPSBtX2RhdGFbaW5pdGlh
bEJsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgICAgIEFTU0VSVChhbmNlc3Rvcik7CisgICAgICAg
ICAgICBpZiAoIW1fZGF0YVthbmNlc3Rvcl0uYW5jZXN0b3IpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAgICAgICAgIFZlY3RvcjxHcmFwaDo6Tm9kZSwgMTY+IHN0YWNr
OworICAgICAgICAgICAgZm9yIChHcmFwaDo6Tm9kZSBibG9jayA9IGluaXRpYWxCbG9jazsgYmxv
Y2s7IGJsb2NrID0gbV9kYXRhW2Jsb2NrXS5hbmNlc3RvcikKKyAgICAgICAgICAgICAgICBzdGFj
ay5hcHBlbmQoYmxvY2spOworICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBh
Ym91dCBibG9ja3MgdGhhdCBoYXZlIGFuIGFuY2VzdG9yIHRoYXQgaGFzIGFuIGFuY2VzdG9yLiBU
aGUgbGFzdCB0d28KKyAgICAgICAgICAgIC8vIGVsZW1lbnRzIGluIHRoZSBzdGFjayB3b24ndCBz
YXRpc2Z5IHRoaXMgcHJvcGVydHkuCisgICAgICAgICAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49
IDIpOworICAgICAgICAgICAgQVNTRVJUKCFtX2RhdGFbc3RhY2tbc3RhY2suc2l6ZSgpIC0gMV1d
LmFuY2VzdG9yKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9kYXRhW21fZGF0YVtzdGFja1tzdGFj
ay5zaXplKCkgLSAyXV0uYW5jZXN0b3JdLmFuY2VzdG9yKTsKKyAgICAgICAgCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFjay5zaXplKCkgLSAyOyBpLS07KSB7CisgICAgICAgICAg
ICAgICAgR3JhcGg6Ok5vZGUgYmxvY2sgPSBzdGFja1tpXTsKKyAgICAgICAgICAgICAgICBHcmFw
aDo6Tm9kZSYgbGFiZWxPZkJsb2NrID0gbV9kYXRhW2Jsb2NrXS5sYWJlbDsKKyAgICAgICAgICAg
ICAgICBHcmFwaDo6Tm9kZSYgYW5jZXN0b3JPZkJsb2NrID0gbV9kYXRhW2Jsb2NrXS5hbmNlc3Rv
cjsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYW5jZXN0b3JPZkJsb2NrKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQobV9kYXRhW2FuY2VzdG9yT2ZCbG9ja10uYW5jZXN0b3IpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgR3JhcGg6Ok5vZGUgbGFiZWxPZkFuY2VzdG9yT2ZCbG9jayA9
IG1fZGF0YVthbmNlc3Rvck9mQmxvY2tdLmxhYmVsOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKG1fZGF0YVtsYWJlbE9mQW5jZXN0b3JPZkJsb2NrXS5zZW1pTnVtYmVyIDwgbV9k
YXRhW2xhYmVsT2ZCbG9ja10uc2VtaU51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgbGFiZWxP
ZkJsb2NrID0gbGFiZWxPZkFuY2VzdG9yT2ZCbG9jazsKKyAgICAgICAgICAgICAgICBhbmNlc3Rv
ck9mQmxvY2sgPSBtX2RhdGFbYW5jZXN0b3JPZkJsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBCbG9ja0RhdGEgeworICAgICAgICAgICAg
QmxvY2tEYXRhKCkKKyAgICAgICAgICAgICAgICA6IHBhcmVudChudWxscHRyKQorICAgICAgICAg
ICAgICAgICwgcHJlTnVtYmVyKFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICwgc2VtaU51bWJl
cihVSU5UX01BWCkKKyAgICAgICAgICAgICAgICAsIGFuY2VzdG9yKG51bGxwdHIpCisgICAgICAg
ICAgICAgICAgLCBsYWJlbChudWxscHRyKQorICAgICAgICAgICAgICAgICwgZG9tKG51bGxwdHIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgR3Jh
cGg6Ok5vZGUgcGFyZW50OworICAgICAgICAgICAgdW5zaWduZWQgcHJlTnVtYmVyOworICAgICAg
ICAgICAgdW5zaWduZWQgc2VtaU51bWJlcjsKKyAgICAgICAgICAgIEdyYXBoOjpOb2RlIGFuY2Vz
dG9yOworICAgICAgICAgICAgR3JhcGg6Ok5vZGUgbGFiZWw7CisgICAgICAgICAgICBWZWN0b3I8
R3JhcGg6Ok5vZGU+IGJ1Y2tldDsKKyAgICAgICAgICAgIEdyYXBoOjpOb2RlIGRvbTsKKyAgICAg
ICAgfTsKKyAgICAKKyAgICAgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgICAgIEJsb2NrTWFwPEJs
b2NrRGF0YT4gbV9kYXRhOworICAgICAgICBWZWN0b3I8R3JhcGg6Ok5vZGU+IG1fYmxvY2tCeVBy
ZU51bWJlcjsKKyAgICB9OworCisgICAgY2xhc3MgTmFpdmVEb21pbmF0b3JzIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIE5haXZlRG9taW5hdG9ycyhHcmFwaCYgZ3JhcGgpCisgICAgICAgICAgICA6
IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50
cyBhIG5haXZlIGRvbWluYXRvciBzb2x2ZXIuCisKKyAgICAgICAgICAgIEFTU0VSVCghZ3JhcGgu
cHJlZGVjZXNzb3JzKGdyYXBoLnJvb3QoKSkuc2l6ZSgpKTsKKyAgICAKKyAgICAgICAgICAgIHVu
c2lnbmVkIG51bUJsb2NrcyA9IGdyYXBoLm51bU5vZGVzKCk7CisgICAgCisgICAgICAgICAgICAv
LyBBbGxvY2F0ZSBzdG9yYWdlIGZvciB0aGUgZGVuc2UgZG9taW5hbmNlIG1hdHJpeC4gCisgICAg
ICAgICAgICBtX3Jlc3VsdHMuZ3JvdyhudW1Ob2Rlcyk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1Ob2RlczsgaS0tOykKKyAgICAgICAgICAgICAgICBtX3Jlc3VsdHNbaV0ucmVz
aXplKG51bU5vZGVzKTsKKyAgICAgICAgICAgIG1fc2NyYXRjaC5yZXNpemUobnVtTm9kZXMpOwor
CisgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhlIGVudHJ5IGJsb2NrIGlzIG9ubHkgZG9t
aW5hdGVkIGJ5IGl0c2VsZi4KKyAgICAgICAgICAgIG1fcmVzdWx0c1swXS5jbGVhckFsbCgpOwor
ICAgICAgICAgICAgbV9yZXN1bHRzWzBdLnNldCgwKTsKKworICAgICAgICAgICAgLy8gRmluZCBh
bGwgb2YgdGhlIHZhbGlkIGJsb2Nrcy4KKyAgICAgICAgICAgIG1fc2NyYXRjaC5jbGVhckFsbCgp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtTm9kZXM7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWdyYXBoLm5vZGUoaSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIG1fc2NyYXRjaC5zZXQoaSk7CisgICAgICAgICAgICB9Cisg
ICAgCisgICAgICAgICAgICAvLyBNYXJrIGFsbCBub2RlcyBhcyBkb21pbmF0ZWQgYnkgZXZlcnl0
aGluZy4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bU5vZGVzOyBpLS0gPiAxOykg
eworICAgICAgICAgICAgICAgIGlmICghZ3JhcGgubm9kZShpKSB8fCAhZ3JhcGgucHJlZGVjZXNz
b3JzKGdyYXBoLm5vZGUoaSkpLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHRz
W2ldLmNsZWFyQWxsKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBtX3Jlc3VsdHNbaV0uc2V0KG1fc2NyYXRjaCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEl0ZXJhdGl2ZWx5IGVsaW1pbmF0ZSBub2RlcyB0aGF0IGFyZSBub3QgZG9taW5hdG9y
LgorICAgICAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICAgICAgZG8geworICAgICAgICAg
ICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAvLyBQcnVuZSBkb21pbmF0
b3JzIGluIGFsbCBub24gZW50cnkgYmxvY2tzOiBmb3J3YXJkIHNjYW4uCisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bU5vZGVzOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gcHJ1bmVEb21pbmF0b3JzKGkpOworCisgICAgICAgICAgICAgICAg
aWYgKCFjaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgIC8vIFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBibG9ja3M6IGJhY2t3YXJk
IHNjYW4uCisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bU5vZGVzOyBpLS0gPiAxOykKKyAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoaSk7CisgICAgICAgICAgICB9IHdoaWxlIChj
aGFuZ2VkKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBkb21pbmF0ZXMoQmxv
Y2tJbmRleCBmcm9tLCBCbG9ja0luZGV4IHRvKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAgICAgIH0KKyAgICAKKyAgICAg
ICAgYm9vbCBkb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBkb21pbmF0ZXMoZnJvbS0+aW5kZXgsIHRv
LT5pbmRleCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1Ob2RlcygpOyArK2Jsb2NrSW5kZXgpIHsK
KyAgICAgICAgICAgICAgICBHcmFwaDo6Tm9kZSBibG9jayA9IGdyYXBoLm5vZGUoYmxvY2tJbmRl
eCk7CisgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgQmxvY2sgIiwgbV9ncmFwaC5k
dW1wKGJsb2NrKSwgIjoiKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG90aGVySW5k
ZXggPSAwOyBvdGhlckluZGV4IDwgZ3JhcGgubnVtTm9kZXMoKTsgKytvdGhlckluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghZG9taW5hdGVzKG1fZ3JhcGguaW5kZXgoYmxvY2spLCBv
dGhlckluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIiAiLCBtX2dyYXBoLmR1bXAobV9ncmFwaC5ub2RlKG90aGVy
SW5kZXgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dC5wcmludCgi
XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgIHByaXZhdGU6CisgICAg
ICAgIGJvb2wgcHJ1bmVEb21pbmF0b3JzKHVuc2lnbmVkIGlkeCkKKyAgICAgICAgeworICAgICAg
ICAgICAgR3JhcGg6Ok5vZGUgYmxvY2sgPSBtX2dyYXBoLm5vZGUoaWR4KTsKKworICAgICAgICAg
ICAgaWYgKCFibG9jayB8fCAhbV9ncmFwaC5wcmVkZWNlc3NvcnMoYmxvY2spLnNpemUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIEZpbmQgdGhlIGlu
dGVyc2VjdGlvbiBvZiBkb20ocHJlZHMpLgorICAgICAgICAgICAgbV9zY3JhdGNoLnNldChtX3Jl
c3VsdHNbbV9ncmFwaC5pbmRleChtX2dyYXBoLnByZWRlY2Vzc29ycyhibG9jaylbMF0pXSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2dyYXBoLnByZWRlY2Vzc29ycyhibG9jayku
c2l6ZSgpOyBqLS0gPiAxOykKKyAgICAgICAgICAgICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVz
dWx0c1ttX2dyYXBoLmluZGV4KG1fZ3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKVtqXSldKTsKKwor
ICAgICAgICAgICAgLy8gVGhlIGJsb2NrIGlzIGFsc28gZG9taW5hdGVkIGJ5IGl0c2VsZi4KKyAg
ICAgICAgICAgIG1fc2NyYXRjaC5zZXQoaWR4KTsKKworICAgICAgICAgICAgcmV0dXJuIG1fcmVz
dWx0c1tpZHhdLnNldEFuZENoZWNrKG1fc2NyYXRjaCk7CisgICAgICAgIH0KKyAgICAKKyAgICAg
ICAgR3JhcGggbV9ncmFwaDsKKyAgICAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3I+IG1fcmVzdWx0
czsgLy8gRm9yIGVhY2ggYmxvY2ssIHRoZSBiaXR2ZWN0b3Igb2YgYmxvY2tzIHRoYXQgZG9taW5h
dGUgaXQuCisgICAgICAgIEZhc3RCaXRWZWN0b3IgbV9zY3JhdGNoOyAvLyBBIHRlbXBvcmFyeSBi
aXR2ZWN0b3Igd2l0aCBiaXQgZm9yIGVhY2ggYmxvY2suIFdlIHJlY3ljbGUgdGhpcyB0byBzYXZl
IG5ldy9kZWxldGVzLgorICAgIH07CisKKyAgICBzdHJ1Y3QgVmFsaWRhdGlvbkNvbnRleHQgewor
ICAgICAgICBWYWxpZGF0aW9uQ29udGV4dChHcmFwaCYgZ3JhcGgsIERvbWluYXRvcnMmIGRvbWlu
YXRvcnMpCisgICAgICAgICAgICA6IGdyYXBoKGdyYXBoKQorICAgICAgICAgICAgLCBkb21pbmF0
b3JzKGRvbWluYXRvcnMpCisgICAgICAgICAgICAsIG5haXZlRG9taW5hdG9ycyhncmFwaCkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgcmVwb3J0RXJyb3IoR3JhcGg6
Ok5vZGUgZnJvbSwgR3JhcGg6Ok5vZGUgdG8sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEVycm9yIGVycm9yOworICAgICAgICAgICAgZXJyb3IuZnJvbSA9IGZy
b207CisgICAgICAgICAgICBlcnJvci50byA9IHRvOworICAgICAgICAgICAgZXJyb3IubWVzc2Fn
ZSA9IG1lc3NhZ2U7CisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKGVycm9yKTsKKyAgICAgICAg
fQorICAgIAorICAgICAgICB2b2lkIGhhbmRsZUVycm9ycygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChlcnJvcnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgICAgICBkYXRhTG9nKCJERkcgRE9NSU5BVE9SIFZBTElEQVRJT04gRkFJTEVE
OlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygi
Rm9yIGJsb2NrIGRvbWluYXRpb24gcmVsYXRpb25zaGlwczpcbiIpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGVycm9ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICIgICAgIiwgZ3JhcGguZHVtcChlcnJv
cnNbaV0uZnJvbSksICIgLT4gIiwgZ3JhcGguZHVtcChlcnJvcnNbaV0udG8pLAorICAgICAgICAg
ICAgICAgICAgICAiICgiLCBlcnJvcnNbaV0ubWVzc2FnZSwgIilcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkNvbnRy
b2wgZmxvdyBncmFwaDpcbiIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IGdyYXBoLm51bU5vZGVzKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICAgICAgICAgIEdyYXBoOjpOb2RlIGJsb2NrID0gZ3JhcGgubm9kZShibG9ja0luZGV4KTsK
KyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQmxvY2sgIiwgZ3JhcGguZHVtcChncmFw
aC5ub2RlKGJsb2NrSW5kZXgpKSwgIjogc3VjY2Vzc29ycyA9IFsiKTsKKyAgICAgICAgICAgICAg
ICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZyhjb21tYSwgZ3JhcGguZHVtcChibG9jay0+c3VjY2Vzc29yKGkpKSk7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiXSwgcHJlZGVjZXNzb3JzID0gWyIpOworICAgICAgICAgICAgICAg
IGNvbW1hID0gQ29tbWFQcmludGVyKCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coY29tbWEsIGdyYXBoLmR1bXAoYmxvY2stPnByZWRlY2Vzc29yc1tpXSkp
OworICAgICAgICAgICAgICAgIGRhdGFMb2coIl1cbiIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkxlbmdhdWVyLVRhcmph
biBEb21pbmF0b3JzOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKGRvbWluYXRvcnMpOworICAg
ICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIk5haXZlIERvbWlu
YXRvcnM6XG4iKTsKKyAgICAgICAgICAgIG5haXZlRG9taW5hdG9ycy5kdW1wKFdURjo6ZGF0YUZp
bGUoKSk7CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygi
R3JhcGggYXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKGdyYXBo
KTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJERkcg
RE9NSU5BVE9SIFZBTElEQVRJT04gRkFJTElFRCFcbiIpOworICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgfQorICAgIAorICAgICAgICBHcmFwaCYgZ3JhcGg7CisgICAgICAgIERvbWluYXRv
cnMmIGRvbWluYXRvcnM7CisgICAgICAgIE5haXZlRG9taW5hdG9ycyBuYWl2ZURvbWluYXRvcnM7
CisgICAgCisgICAgICAgIHN0cnVjdCBFcnJvciB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBm
cm9tOworICAgICAgICAgICAgQmFzaWNCbG9jayogdG87CisgICAgICAgICAgICBjb25zdCBjaGFy
KiBtZXNzYWdlOworICAgICAgICB9OworICAgIAorICAgICAgICBWZWN0b3I8RXJyb3I+IGVycm9y
czsKKyAgICB9OworCisgICAgYm9vbCBuYWl2ZURvbWluYXRlcyhHcmFwaDo6TGlzdCBmcm9tLCBH
cmFwaDo6TGlzdCB0bykgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoR3JhcGg6Ok5vZGUgYmxv
Y2sgPSB0bzsgYmxvY2s7IGJsb2NrID0gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50KSB7CisgICAg
ICAgICAgICBpZiAoYmxvY2sgPT0gZnJvbSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZy
b250aWVyT2ZJbXBsKAorICAgICAgICBHcmFwaDo6Tm9kZSBmcm9tLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gUGFyYXBocmFzaW5nIGZyb20gaHR0cDov
L2VuLndpa2lwZWRpYS5vcmcvd2lraS9Eb21pbmF0b3JfKGdyYXBoX3RoZW9yeSk6CisgICAgICAg
IC8vICAgICAiVGhlIGRvbWluYW5jZSBmcm9udGllciBvZiBhIGJsb2NrICdmcm9tJyBpcyB0aGUg
c2V0IG9mIGFsbCBibG9ja3MgJ3RvJyBzdWNoIHRoYXQKKyAgICAgICAgLy8gICAgICdmcm9tJyBk
b21pbmF0ZXMgYW4gaW1tZWRpYXRlIHByZWRlY2Vzc29yIG9mICd0bycsIGJ1dCAnZnJvbScgZG9l
cyBub3Qgc3RyaWN0bHkKKyAgICAgICAgLy8gICAgIGRvbWluYXRlICd0bycuIgorICAgICAgICAv
LworICAgICAgICAvLyBBIHVzZWZ1bCBjb3JuZXIgY2FzZSB0byByZW1lbWJlcjogYSBibG9jayBt
YXkgYmUgaW4gaXRzIG93biBkb21pbmFuY2UgZnJvbnRpZXIgaWYgaXQgaGFzCisgICAgICAgIC8v
IGEgbG9vcCBlZGdlIHRvIGl0c2VsZiwgc2luY2UgaXQgZG9taW5hdGVzIGl0c2VsZiBhbmQgc28g
aXQgZG9taW5hdGVzIGl0cyBvd24gaW1tZWRpYXRlCisgICAgICAgIC8vIHByZWRlY2Vzc29yLCBh
bmQgYSBibG9jayBuZXZlciBzdHJpY3RseSBkb21pbmF0ZXMgaXRzZWxmLgorICAgICAgICAKKyAg
ICAgICAgZm9yQWxsQmxvY2tzRG9taW5hdGVkQnkoCisgICAgICAgICAgICBmcm9tLAorICAgICAg
ICAgICAgWyZdIChHcmFwaDo6TGlzdCBibG9jaykgeworICAgICAgICAgICAgICAgIGZvciAoR3Jh
cGg6Ok5vZGUgdG8gOiBtX2dyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghc3RyaWN0bHlEb21pbmF0ZXMoZnJvbSwgdG8pKQorICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rvcih0byk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBm
b3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCisgICAgICAgIGNv
bnN0IEdyYXBoOjpMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAg
IHsKKyAgICAgICAgR3JhcGg6Okxpc3Qgd29ya2xpc3QgPSBmcm9tOworICAgICAgICB3aGlsZSAo
IXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgR3JhcGg6Ok5vZGUgYmxvY2sgPSB3
b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgZm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VG
cm9udGllck9mSW1wbCgKKyAgICAgICAgICAgICAgICBibG9jaywKKyAgICAgICAgICAgICAgICBb
Jl0gKEdyYXBoOjpOb2RlIG90aGVyQmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZ1
bmN0b3Iob3RoZXJCbG9jaykpCisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBl
bmQob3RoZXJCbG9jayk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgc3RydWN0IEJsb2NrRGF0YSB7CisgICAgICAgIEJsb2NrRGF0YSgpCisgICAgICAg
ICAgICA6IGlkb21QYXJlbnQobnVsbHB0cikKKyAgICAgICAgICAgICwgcHJlTnVtYmVyKFVJTlRf
TUFYKQorICAgICAgICAgICAgLCBwb3N0TnVtYmVyKFVJTlRfTUFYKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxHcmFwaDo6Tm9kZT4gaWRvbUtpZHM7Cisg
ICAgICAgIEdyYXBoOjpOb2RlIGlkb21QYXJlbnQ7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCBwcmVOdW1iZXI7CisgICAgICAgIHVuc2lnbmVkIHBvc3ROdW1iZXI7CisgICAgfTsKKyAgICAK
KyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBCbG9ja01hcDxCbG9ja0RhdGE+IG1fZGF0YTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkRvbWluYXRvcnM7CisKKyNlbmRp
ZiAvLyBXVEZEb21pbmF0b3JzX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264522</attachid>
            <date>2015-11-01 11:12:15 -0800</date>
            <delta_ts>2015-11-01 11:21:04 -0800</delta_ts>
            <desc>maybe done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>119943</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBA
QAorMjAxNS0xMS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERvbWluYXRvcnMgc2hvdWxkIGJlIGZhY3RvcmVkIG91dCBvZiB0aGUgREZHCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3NjQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGYWN0b3JlZCBERkdEb21pbmF0
b3JzLmgvREZHRG9taW5hdG9ycy5jcHAgaW50byBXVEYuIFRvIGRvIHRoaXMsIEkgbWFkZSB0d28g
Y2hhbmdlcyB0byB0aGUKKyAgICAgICAgREZHOgorCisgICAgICAgIDEpIERGRyBub3cgaGFzIGEg
Q0ZHIGFic3RyYWN0aW9uIGNhbGxlZCBERkc6OkNGRy4gVGhlIGNvb2wgdGhpbmcgYWJvdXQgdGhp
cyBpcyB0aGF0IGluIHRoZQorICAgICAgICAgICBmdXR1cmUgaWYgd2Ugd2FudGVkIHRvIHN1cHBv
cnQgaW52ZXJ0ZWQgZG9taW5hdG9ycywgd2UgY291bGQgZG8gaXQgYnkganVzdCBjcmVhdGluZyBh
CisgICAgICAgICAgIERGRzo6QmFja3dhcmRDRkcuCisKKyAgICAgICAgMikgR290IHJpZCBvZiBE
Rkc6OkFuYWx5c2lzLiBGcm9tIG5vdyBvbiwgYW4gQW5hbHlzaXMgYmVpbmcgaW52YWxpZGF0ZWQg
aXMgZXhwcmVzc2VkIGJ5IHRoZQorICAgICAgICAgICBERkc6OkdyYXBoIGhhdmluZyBhIG51bGwg
cG9pbnRlciBmb3IgdGhhdCBhbmFseXNpcy4gV2hlbiB3ZSAicnVuIiB0aGUgYW5hbHlzaXMsIHdl
CisgICAgICAgICAgIGp1c3QgaW5zdGFudGlhdGUgaXQuIFRoaXMgbWFrZXMgaXQgbXVjaCBtb3Jl
IG5hdHVyYWwgdG8gaW50ZWdyYXRlIFdURjo6RG9taW5hdG9ycyBpbnRvCisgICAgICAgICAgIHRo
ZSBERkcuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdBbmFseXNp
cy5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdDRkcuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHOjpDRkcpOgorICAgICAgICAoSlNDOjpERkc6OkNGRzo6cm9vdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q0ZHOjpuZXdNYXA8VD4pOgorICAgICAgICAoSlNDOjpERkc6OkNGRzo6
c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHOjpwcmVkZWNlc3NvcnMpOgorICAg
ICAgICAoSlNDOjpERkc6OkNGRzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNGRzo6bm9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHOjpudW1Ob2Rlcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q0ZHOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxl
cjo6Y3JlYXRlRHVtcExpc3QpOgorICAgICAgICAqIGRmZy9ERkdEb21pbmF0b3JzLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBkZmcvREZHRG9taW5hdG9ycy5oOgorICAgICAgICAoSlNDOjpERkc6
OkRvbWluYXRvcnM6OkRvbWluYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6
OnN0cmljdGx5RG9taW5hdGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0
b3JzOjpkb21pbmF0ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6
OmltbWVkaWF0ZURvbWluYXRvck9mKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpEb21p
bmF0b3JzOjpmb3JBbGxTdHJpY3REb21pbmF0b3JzT2YpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OkRvbWluYXRvcnM6OmZvckFsbERvbWluYXRvcnNPZik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzRG9t
aW5hdGVkQnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFs
bEJsb2Nrc0luRG9taW5hbmNlRnJvbnRpZXJPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2Yp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0lu
UHJ1bmVkSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJbXBs
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJ
bkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OkRvbWluYXRvcnM6OkJsb2NrRGF0YTo6QmxvY2tEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHRWRnZURvbWluYXRlcy5oOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2VEb21p
bmF0ZXM6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aW52YWxpZGF0ZUNGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmhhbmRsZUFzc2VydGlvbkZhaWx1cmUpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjplbnN1cmVEb21pbmF0b3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6ZW5zdXJlUHJlUG9zdE51bWJlcmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmVu
c3VyZU5hdHVyYWxMb29wcyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlUHJvZmls
ZUZvcik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6Omhhc0RlYnVnZ2VyRW5hYmxlZCk6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6
OkxJQ01QaGFzZTo6YXR0ZW1wdEhvaXN0KToKKyAgICAgICAgKiBkZmcvREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNyZWF0ZVByZUhlYWRlcik6
CisgICAgICAgIChKU0M6OkRGRzo6TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZGZnL0RGR05hdHVyYWxMb29wcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TmF0
dXJhbExvb3A6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6TmF0dXJh
bExvb3BzKToKKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcHM6On5OYXR1cmFsTG9vcHMp
OgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6bG9vcHNPZik6CisgICAgICAgIChK
U0M6OkRGRzo6TmF0dXJhbExvb3BzOjpjb21wdXRlRGVwZW5kZW5jaWVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcHM6OmNvbXB1dGUpOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdOYXR1cmFsTG9vcHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9v
cHM6Om51bUxvb3BzKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpTdWNjZXNzb3JzSXRlcmFibGU6OnNpemUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6YXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6b3BlcmF0b3JbXSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjpQcmVQ
b3N0TnVtYmVyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjp+UHJl
UG9zdE51bWJlcmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6Y29t
cHV0ZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjpwcmVOdW1iZXIpOgorICAgICAgICAo
SlNDOjpERkc6OlByZVBvc3ROdW1iZXJpbmc6OnBvc3ROdW1iZXIpOgorICAgICAgICAqIGRmZy9E
RkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0
b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6Om5vbkxvY2FsUmVhY2hp
bmdEZWYpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OnJlYWNoaW5nRGVmQXRU
YWlsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2FsY3VsYXRvci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNTQUNhbGN1bGF0b3I6OmNvbXB1dGVQaGlzKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6
OnJ1bik6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxp
bmspOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OnNhZmVseUludmFsaWRhdGVBZnRlclRlcm1pbmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjppc1ZhbGlkKToKKwogMjAxNS0x
MS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIGFkZCBhIEZJWE1FIHJlZmVyZW5jaW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA3NzUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
U09VUkNFUwogICAgIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCiAgICAgZGZnL0RG
R0Rpc2Fzc2VtYmxlci5jcHAKICAgICBkZmcvREZHRG9lc0dDLmNwcAotICAgIGRmZy9ERkdEb21p
bmF0b3JzLmNwcAogICAgIGRmZy9ERkdEcml2ZXIuY3BwCiAgICAgZGZnL0RGR0VkZ2UuY3BwCiAg
ICAgZGZnL0RGR0Vwb2NoLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01OTksNyArNTk5LDYg
QEAKIAkJMEZEM0U0MEMxQjYxOEI2NjAwQzgwRTFFIC8qIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQz
RTQwNjFCNjE4QjY2MDBDODBFMUUgLyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQzRTQwRDFC
NjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0U0MDcxQjYxOEI2NjAwQzgwRTFFIC8q
IFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLzsgfTsKIAkJMEZEM0U0MEUxQjYxOEI2NjAwQzgwRTFF
IC8qIFByb3BlcnR5Q29uZGl0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkQzRTQwODFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRp
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkw
RkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDRjE1NEZCNEVCMDA5ODNF
NzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi87IH07CiAJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3
MiAvKiBERkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICov
OyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFFMTQx
NzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovOyB9OwogCQkwRkQ4MkUzOTE0
MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBD
b21wYWN0SklUQ29kZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xNTg2LDcgKzE1ODUsNiBAQAogCQlBNzMwQjYxMjEyNTAwNjhGMDA5RDI1
QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3MzBCNjEwMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFs
QWN0aXZhdGlvbi5oICovOyB9OwogCQlBNzMwQjYxMzEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0
RXZhbEFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTczMEI2MTExMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9u
LmNwcCAqLzsgfTsKIAkJQTczMUIyNUExMzAwOTM4ODAwNDBBN0ZBIC8qIEZvdW5kYXRpb24uZnJh
bWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9Owot
CQlBNzM3ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Mzc4MTA5MTc5OUVBMkUwMDgxNzUz
MyAvKiBERkdBbmFseXNpcy5oICovOyB9OwogCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMgLyog
REZHTmF0dXJhbExvb3BzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3Mzc4MTBBMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3Bw
ICovOyB9OwogCQlBNzM3ODEwRTE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM3ODEwQjE3
OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi87IH07CiAJCUE3Mzg2NTU0MTE4
Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM4NjU1MTExODY5N0I0MDA1NDAyNzkgLyog
U3BlY2lhbGl6ZWRUaHVua0pJVC5oICovOyB9OwpAQCAtMjYyNiw3ICsyNjI0LDYgQEAKIAkJMEZE
M0U0MDcxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3Bl
cnR5Q29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5
Q29uZGl0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDU2NTIyMTZBQjc4
MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jhc2lj
QmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRDgxQUNGMTU0
RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0RvbWluYXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR0RvbWluYXRv
cnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFEMDE1NEZCNEVCMDA5
ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdEb21pbmF0b3JzLmg7IHBhdGggPSBkZmcvREZHRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJp
bGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NhcGFi
aWxpdGllcy5jcHA7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxp
dGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMu
aDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTM2NDAsNyArMzYzNyw2IEBACiAJCUE3Mjk5REE0MTdEMTI4NTgwMDVGNUZGOSAvKiBT
ZXRDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXRDb25z
dHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzMwQjYxMDEyNTAwNjhG
MDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RyaWN0RXZhbEFjdGl2YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTczMEI2MTExMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmljdEV2YWxBY3Rp
dmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTczNzgxMDkxNzk5RUEy
RTAwODE3NTMzIC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxM
b29wcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFs
TG9vcHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3Mzc4MTBCMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9v
cHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7
IHBhdGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3Mzg2NTUxMTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWNpYWxpemVkVGh1bmtKSVQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2NjUsNyArNTY2MSw2IEBACiAJCQkJMEYxOEQz
Q0UxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICov
LAogCQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8s
CiAJCQkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovLAotCQkJ
CUE3Mzc4MTA5MTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFseXNpcy5oICovLAogCQkJCTBGMUUz
QTQzMTUzNENCQUQwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggKi8sCiAJCQkJMEYy
REQ4MEMxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3Bw
ICovLAogCQkJCTBGMkREODBEMUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdBcmd1bWVudHNFbGltaW5h
dGlvblBoYXNlLmggKi8sCkBAIC01NzUxLDcgKzU3NDYsNiBAQAogCQkJCTBGRjQyNzYyMTU5MUEx
QzkwMDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRjVBMTI3MTE5MkQ5RkRG
MDA4NzY0QTMgLyogREZHRG9lc0dDLmNwcCAqLywKIAkJCQkwRjVBMTI3MjE5MkQ5RkRGMDA4NzY0
QTMgLyogREZHRG9lc0dDLmggKi8sCi0JCQkJMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERG
R0RvbWluYXRvcnMuY3BwICovLAogCQkJCTBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmggKi8sCiAJCQkJMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJs
ZUZvcm1hdFN0YXRlLmggKi8sCiAJCQkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0Ry
aXZlci5jcHAgKi8sCkBAIC02NjU4LDcgKzY2NTIsNiBAQAogCQkJCTBGMThEM0QwMUI1NUE2RTAw
MDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBNzM3ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5h
bHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBE
RkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxMjFBQjNEOEJF
MDBCQkI4RTggLyogREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8sCkBAIC04MjIyLDcgKzgyMTUsNiBAQAogCQkJCUMyOTgxRkQ4MTdCQUVF
NEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNDI3NjQxNTkxQTFDQzAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjVBMTI3MzE5MkQ5RkRGMDA4NzY0QTMgLyogREZHRG9lc0dDLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21p
bmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAv
KiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUUxNkI3MkEwQjAwNURG
OTVCIC8qIERGR0VkZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjE0MzMxQURGMDkwMTAw
RUQ3OTJDIC8qIERGR0Vwb2NoLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBERkdBbmFseXNpc19oCi0jZGVmaW5lIERGR0FuYWx5c2lzX2gKLQotI2lmIEVO
QUJMRShERkdfSklUKQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLWNsYXNz
IEdyYXBoOwotCi0vLyBVc2UgdGhpcyBhcyBhIG1peGluIGZvciBERkcgYW5hbHlzZXMuIFRoZSBh
bmFseXNpcyBpdHNlbGYgaW1wbGVtZW50cyBhIHB1YmxpYwotLy8gY29tcHV0ZShHcmFwaCYpIG1l
dGhvZC4gQ2xpZW50cyBjYWxsIGNvbXB1dGVJZk5lY2Vzc2FyeSgpIHdoZW4gdGhleSB3YW50Ci0v
LyByZXN1bHRzLgotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotY2xhc3MgQW5hbHlzaXMgewotcHVi
bGljOgotICAgIEFuYWx5c2lzKCkKLSAgICAgICAgOiBtX3ZhbGlkKGZhbHNlKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBpbnZhbGlkYXRlKCkKLSAgICB7Ci0gICAgICAgIG1fdmFsaWQg
PSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21wdXRlSWZOZWNlc3NhcnkoR3JhcGgm
IGdyYXBoKQotICAgIHsKLSAgICAgICAgaWYgKG1fdmFsaWQpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIC8vIEl0J3MgYmVzdCB0byBydW4gZGVwZW5kZW50IGFuYWx5c2VzIGZyb20gdGhp
cyBtZXRob2QuCi0gICAgICAgIHN0YXRpY19jYXN0PFQqPih0aGlzKS0+Y29tcHV0ZURlcGVuZGVu
Y2llcyhncmFwaCk7Ci0gICAgICAgIC8vIFNldCB0byB0cnVlIGVhcmx5LCBzaW5jZSB0aGUgYW5h
bHlzaXMgbWF5IGNob29zZSB0byBjYWxsIGl0cyBvd24gbWV0aG9kcyBpbgotICAgICAgICAvLyBj
b21wdXRlKCkgYW5kIGl0IG1heSB3YW50IHRvIEFTU0VSVCgpIHZhbGlkaXR5IGluIHRob3NlIG1l
dGhvZHMuCi0gICAgICAgIG1fdmFsaWQgPSB0cnVlOwotICAgICAgICBzdGF0aWNfY2FzdDxUKj4o
dGhpcyktPmNvbXB1dGUoZ3JhcGgpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX3ZhbGlkOyB9Ci0KLSAgICAvLyBPdmVycmlkZSB0aGlzIHRvIGNvbXB1
dGUgYW55IGRlcGVuZGVudCBhbmFseXNlcy4gU2VlCi0gICAgLy8gTmF0dXJhbExvb3BzOjpjb21w
dXRlRGVwZW5kZW5jaWVzKEdyYXBoJikgZm9yIGFuIGV4YW1wbGUuIFRoaXMgaXNuJ3Qgc3RyaWN0
bHkgbmVjZXNzYXJ5IGJ1dAotICAgIC8vIGl0IG1ha2VzIGRlYnVnIGR1bXBzIGluIGNhc2VzIG9m
IGVycm9yIHdvcmsgYSBiaXQgYmV0dGVyIGJlY2F1c2UgdGhpcyBhbmFseXNpcyB3b3VsZG4ndCB5
ZXQKLSAgICAvLyBiZSBwcmV0ZW5kaW5nIHRvIGJlIHZhbGlkLgotICAgIHZvaWQgY29tcHV0ZURl
cGVuZGVuY2llcyhHcmFwaCYpIHsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV92YWxpZDsKLX07
Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQotCi0jZW5kaWYgLy8gREZHQW5hbHlzaXNfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZHLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
Ry5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDRkdfaAorI2RlZmluZSBERkdD
RkdfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQmxvY2tTZXQu
aCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIENGRyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBCYXNpY0Jsb2NrKiBOb2Rl
OworICAgIHR5cGVkZWYgQmxvY2tTZXQgU2V0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVz
aW5nIE1hcCA9IEJsb2NrTWFwPFQ+OworICAgIHR5cGVkZWYgQmxvY2tMaXN0IExpc3Q7CisKKyAg
ICBDRkcoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgeworICAg
IH0KKworICAgIE5vZGUgcm9vdCgpIHsgcmV0dXJuIG1fZ3JhcGguYmxvY2soMCk7IH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgTWFwPFQ+IG5ld01hcCgpIHsgcmV0dXJuIEJsb2Nr
TWFwPFQ+KG1fZ3JhcGgpOyB9CisKKyAgICBERkc6Ok5vZGU6OlN1Y2Nlc3NvcnNJdGVyYWJsZSBz
dWNjZXNzb3JzKE5vZGUgbm9kZSkgeyByZXR1cm4gbm9kZS0+c3VjY2Vzc29ycygpOyB9CisgICAg
UHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5w
cmVkZWNlc3NvcnM7IH0KKworICAgIHVuc2lnbmVkIGluZGV4KE5vZGUgbm9kZSkgY29uc3QgeyBy
ZXR1cm4gbm9kZS0+aW5kZXg7IH0KKyAgICBOb2RlIG5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fZ3JhcGguYmxvY2soaW5kZXgpOyB9CisgICAgdW5zaWduZWQgbnVtTm9kZXMo
KSBjb25zdCB7IHJldHVybiBtX2dyYXBoLm51bUJsb2NrcygpOyB9CisKKyAgICBQb2ludGVyRHVt
cDxCYXNpY0Jsb2NrPiBkdW1wKE5vZGUgbm9kZSkgY29uc3QgeyByZXR1cm4gcG9pbnRlckR1bXAo
bm9kZSk7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsK
KyAgICAgICAgbV9ncmFwaC5kdW1wKG91dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBo
JiBtX2dyYXBoOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDRkdfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKICNpbmNsdWRl
ICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUg
IkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJERkdFZGdlVXNlc1N0cnVjdHVyZS5oIgogI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKQEAgLTM5MCw3ICszOTEs
NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwogICAg
ICAgICAKICAgICAgICAgbV9ncmFwaC5pbml0aWFsaXplTm9kZU93bmVycygpOwotICAgICAgICBt
X2dyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CisgICAgICAg
IG1fZ3JhcGguZW5zdXJlRG9taW5hdG9ycygpOwogICAgICAgICAKICAgICAgICAgbV9wcmVPcmRl
ciA9IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpOwogICAgICAgICAKQEAgLTQ4NCw3ICs0ODUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgTm9kZSogY2FuZGlk
YXRlID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZVtpXTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoY2FuZGlkYXRlLT5vd25lciwgbV9ibG9jaykpIHsKKyAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGNhbmRpZGF0ZS0+
b3duZXIsIG1fYmxvY2spKSB7CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5yZXBsYWNlV2l0aChj
YW5kaWRhdGUpOwogICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtNTczLDcgKzU3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8v
IFdlIHJlcXVpcmUgc3RyaWN0IGRvbWluYXRpb24gYmVjYXVzZSB0aGlzIHdvdWxkIG9ubHkgc2Vl
IHRoaW5ncyBpbiBvdXIgb3duIGJsb2NrIGlmCiAgICAgICAgICAgICAvLyB0aGV5IGNhbWUgKmFm
dGVyKiBvdXIgcG9zaXRpb24gaW4gdGhlIGJsb2NrLiBDbGVhcmx5LCB3aGlsZSBvdXIgYmxvY2sg
ZG9taW5hdGVzCiAgICAgICAgICAgICAvLyBpdHNlbGYsIHRoZSB0aGluZ3MgaW4gdGhlIGJsb2Nr
IGFmdGVyIHVzIGRvbid0IGRvbWluYXRlIHVzLgotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9k
b21pbmF0b3JzLnN0cmljdGx5RG9taW5hdGVzKGJsb2NrLCBtX2Jsb2NrKSkgeworICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLT5zdHJpY3RseURvbWluYXRlcyhibG9jaywgbV9i
bG9jaykpIHsKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgICAgICBJdCBzdHJpY3RseSBkb21pbmF0ZXMuXG4iKTsKICAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZGF0YS5kaWRWaXNpdCk7CkBAIC02
NTIsNyArNjUzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIGNhbmRpZGF0ZSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWVbaV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKGNhbmRpZGF0ZS0+
b3duZXIsIG1fYmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5t
X2RvbWluYXRvcnMtPmRvbWluYXRlcyhjYW5kaWRhdGUtPm93bmVyLCBtX2Jsb2NrKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoLT5yZXBsYWNlV2l0aChjYW5kaWRhdGUpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoLnNldE5vZGUoY2FuZGlkYXRlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE5
MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTQsOCArOTQsOCBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1w
ZWRPcD4gRGlzYXNzZW1iCiAgICAgZHVtcEhlYWRlcihvdXQsIGxpbmtCdWZmZXIpOwogICAgIGFw
cGVuZChyZXN1bHQsIG91dCwgcHJldmlvdXNPcmlnaW4pOwogICAgIAotICAgIG1fZ3JhcGgubV9k
b21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKLSAgICBtX2dyYXBoLm1fbmF0
dXJhbExvb3BzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICBtX2dyYXBoLmVuc3Vy
ZURvbWluYXRvcnMoKTsKKyAgICBtX2dyYXBoLmVuc3VyZU5hdHVyYWxMb29wcygpOwogICAgIAog
ICAgIGNvbnN0IGNoYXIqIHByZWZpeCA9ICIgICAgIjsKICAgICBjb25zdCBjaGFyKiBkaXNhc3Nl
bWJseVByZWZpeCA9ICIgICAgICAgICI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvbWluYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9taW5hdG9ycy5jcHAJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDc2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIK
LQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlzdC5oIgotI2luY2x1ZGUgIkRGR0dyYXBoLmgiCi0j
aW5jbHVkZSAiREZHTmFpdmVEb21pbmF0b3JzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLURvbWluYXRvcnM6OkRvbWluYXRv
cnMoKQotewotfQotCi1Eb21pbmF0b3JzOjp+RG9taW5hdG9ycygpCi17Ci19Ci0KLW5hbWVzcGFj
ZSB7Ci0KLS8vIFRoaXMgaW1wbGVtZW50cyBMZW5nYXVlciBhbmQgVGFyamFuJ3MgIkEgRmFzdCBB
bGdvcml0aG0gZm9yIEZpbmRpbmcgRG9taW5hdG9ycyBpbiBhIEZsb3dncmFwaCIKLS8vIChUT1BM
QVMgMTk3OSkuIEl0IHVzZXMgdGhlICJzaW1wbGUiIGltcGxlbWVudGF0aW9uIG9mIExJTksgYW5k
IEVWQUwsIHdoaWNoIHlpZWxkcyBhbiBPKG4gbG9nIG4pCi0vLyBzb2x1dGlvbi4gVGhlIGZ1bGwg
cGFwZXIgaXMgbGlua2VkIGJlbG93OyB0aGlzIGNvZGUgYXR0ZW1wdHMgdG8gY2xvc2VseSBmb2xs
b3cgdGhlIGFsZ29yaXRobSBhcwotLy8gaXQgaXMgcHJlc2VudGVkIGluIHRoZSBwYXBlcjsgaW4g
cGFydGljdWxhciBzZWN0aW9ucyAzIGFuZCA0IGFzIHdlbGwgYXMgYXBwZW5kaXggQi4KLS8vIGh0
dHBzOi8vd3d3LmNzLnByaW5jZXRvbi5lZHUvY291cnNlcy9hcmNoaXZlL2ZhbGwwMy9jczUyOC9o
YW5kb3V0cy9hJTIwZmFzdCUyMGFsZ29yaXRobSUyMGZvciUyMGZpbmRpbmcucGRmCi0vLwotLy8g
VGhpcyBjb2RlIGlzIHZlcnkgc3VidGxlLiBUaGUgTGVuZ2F1ZXItVGFyamFuIGFsZ29yaXRobSBp
cyBpbmNyZWRpYmx5IGRlZXAgdG8gYmVnaW4gd2l0aC4gVGhlCi0vLyBnb2FsIG9mIHRoaXMgY29k
ZSBpcyB0byBmb2xsb3cgdGhlIGNvZGUgaW4gdGhlIHBhcGVyLCBob3dldmVyIG91ciBpbXBsZW1l
bnRhdGlvbiBtdXN0IGRldmlhdGUKLS8vIGZyb20gdGhlIHBhcGVyIHdoZW4gaXQgY29tZXMgdG8g
cmVjdXJzaW9uLiBUaGUgYXV0aG9ycyBoYWQgdXNlZCByZWN1cnNpb24gdG8gaW1wbGVtZW50IERG
UywgYW5kCi0vLyBhbHNvIHRvIGltcGxlbWVudCB0aGUgInNpbXBsZSIgRVZBTC4gV2UgY29udmVy
dCBib3RoIG9mIHRob3NlIGludG8gd29ya2xpc3QtYmFzZWQgc29sdXRpb25zLgotLy8gRmluYWxs
eSwgb25jZSB0aGUgYWxnb3JpdGhtIGdpdmVzIHVzIGltbWVkaWF0ZSBkb21pbmF0b3JzLCB3ZSBp
bXBsZW1lbnQgZG9taW5hbmNlIHRlc3RzIGJ5Ci0vLyB3YWxraW5nIHRoZSBkb21pbmF0b3IgdHJl
ZSBhbmQgY29tcHV0aW5nIHByZSBhbmQgcG9zdCBudW1iZXJzLiBXZSB0aGVuIHVzZSB0aGUgcmFu
Z2UgaW5jbHVzaW9uCi0vLyBjaGVjayB0cmljayB0aGF0IHdhcyBmaXJzdCBkaXNjb3ZlcmVkIGJ5
IFBhdWwgRi4gRGlldHogaW4gMTk4MiBpbiAiTWFpbnRhaW5pbmcgb3JkZXIgaW4gYSBsaW5rZWQK
LS8vIGxpc3QiIChzZWUgaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTgwMjE4NCku
Ci0KLWNsYXNzIExlbmdhdWVyVGFyamFuIHsKLXB1YmxpYzoKLSAgICBMZW5nYXVlclRhcmphbihH
cmFwaCYgZ3JhcGgpCi0gICAgICAgIDogbV9ncmFwaChncmFwaCkKLSAgICAgICAgLCBtX2RhdGEo
Z3JhcGgpCi0gICAgewotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxv
Y2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2RhdGFbYmxvY2td
LmxhYmVsID0gYmxvY2s7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21wdXRl
KCkKLSAgICB7Ci0gICAgICAgIGNvbXB1dGVEZXB0aEZpcnN0UHJlTnVtYmVyaW5nKCk7IC8vIFN0
ZXAgMS4KLSAgICAgICAgY29tcHV0ZVNlbWlEb21pbmF0b3JzQW5kSW1wbGljaXRJbW1lZGlhdGVE
b21pbmF0b3JzKCk7IC8vIFN0ZXBzIDIgYW5kIDMuCi0gICAgICAgIGNvbXB1dGVFeHBsaWNpdElt
bWVkaWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcCA0LgotICAgIH0KLSAgICAKLSAgICBCYXNpY0Js
b2NrKiBpbW1lZGlhdGVEb21pbmF0b3IoQmFzaWNCbG9jayogYmxvY2spCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5kb207Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQg
Y29tcHV0ZURlcHRoRmlyc3RQcmVOdW1iZXJpbmcoKQotICAgIHsKLSAgICAgICAgLy8gVXNlIGEg
YmxvY2sgd29ya2xpc3QgdGhhdCBhbHNvIHRyYWNrcyB0aGUgaW5kZXggaW5zaWRlIHRoZSBzdWNj
ZXNzb3IgbGlzdC4gVGhpcyBpcwotICAgICAgICAvLyBuZWNlc3NhcnkgZm9yIGVuc3VyaW5nIHRo
YXQgd2UgZG9uJ3QgYXR0ZW1wdCB0byB2aXNpdCBhIHN1Y2Nlc3NvciB1bnRpbCB0aGUgcHJldmlv
dXMKLSAgICAgICAgLy8gc3VjY2Vzc29ycyB0aGF0IHdlIGhhZCB2aXNpdGVkIGFyZSBmdWxseSBw
cm9jZXNzZWQuIFRoaXMgZW5kcyB1cCBiZWluZyByZXZlYWxlZCBpbiB0aGUKLSAgICAgICAgLy8g
b3V0cHV0IG9mIHRoaXMgbWV0aG9kIGJlY2F1c2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGFuIGVk
Z2UgdG8gYSBibG9jaywgd2Ugc2V0IHRoZQotICAgICAgICAvLyBibG9jaydzIHBhcmVudC4gU28s
IGlmIHdlIGhhdmU6Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEEgLT4gQgotICAgICAgICAvLyBB
IC0+IEMKLSAgICAgICAgLy8gQiAtPiBDCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEFuZCB3ZSdy
ZSBwcm9jZXNzaW5nIEEsIHRoZW4gd2Ugd2FudCB0byBlbnN1cmUgdGhhdCBpZiB3ZSBzZWUgQS0+
QiBmaXJzdCAoYW5kIGhlbmNlIHNldAotICAgICAgICAvLyBCJ3MgcHJlbnVtYmVyIGJlZm9yZSB3
ZSBzZXQgQydzKSB0aGVuIHdlIGFsc28gZW5kIHVwIHNldHRpbmcgQydzIHBhcmVudCB0byBCIGJ5
IHZpcnR1ZQotICAgICAgICAvLyBvZiBub3Qgbm90aWNpbmcgQS0+QyB1bnRpbCB3ZSdyZSBkb25l
IHByb2Nlc3NpbmcgQi4KLSAgICAgICAgCi0gICAgICAgIEV4dGVuZGVkQmxvY2tXb3JrbGlzdDx1
bnNpZ25lZD4gd29ya2xpc3Q7Ci0gICAgICAgIHdvcmtsaXN0LnB1c2gobV9ncmFwaC5ibG9jaygw
KSwgMCk7Ci0gICAgICAgIAotICAgICAgICB3aGlsZSAoQmxvY2tXaXRoPHVuc2lnbmVkPiBpdGVt
ID0gd29ya2xpc3QucG9wKCkpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gaXRl
bS5ub2RlOwotICAgICAgICAgICAgdW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBpdGVtLmRhdGE7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIGluaXRpYWxseSBwdXNoIHdpdGggc3Vj
Y2Vzc29ySW5kZXggPSAwIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3Qgd2UgaGF2ZSBhbnkK
LSAgICAgICAgICAgIC8vIHN1Y2Nlc3NvcnMuIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gYXNzaWdu
IG91ciBwcmVudW1iZXIuIFN1YnNlcXVlbnRseSB3ZSBnZXQgcHVzaGVkCi0gICAgICAgICAgICAv
LyB3aXRoIGhpZ2hlciBzdWNjZXNzb3JJbmRleCB2YWx1ZXMsIGJ1dCBvbmx5IGlmIHRoZXkgYXJl
IGluIHJhbmdlLgotICAgICAgICAgICAgQVNTRVJUKCFzdWNjZXNzb3JJbmRleCB8fCBzdWNjZXNz
b3JJbmRleCA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCkpOwotCi0gICAgICAgICAgICBpZiAoIXN1
Y2Nlc3NvckluZGV4KSB7Ci0gICAgICAgICAgICAgICAgbV9kYXRhW2Jsb2NrXS5zZW1pTnVtYmVy
ID0gbV9ibG9ja0J5UHJlTnVtYmVyLnNpemUoKTsKLSAgICAgICAgICAgICAgICBtX2Jsb2NrQnlQ
cmVOdW1iZXIuYXBwZW5kKGJsb2NrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKHN1Y2Nlc3NvckluZGV4IDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkgewot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5leHRTdWNjZXNzb3JJbmRleCA9IHN1Y2Nlc3Nvcklu
ZGV4ICsgMTsKLSAgICAgICAgICAgICAgICBpZiAobmV4dFN1Y2Nlc3NvckluZGV4IDwgYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuZm9yY2VQdXNo
KGJsb2NrLCBuZXh0U3VjY2Vzc29ySW5kZXgpOwotCi0gICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogc3VjY2Vzc29yQmxvY2sgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKLSAg
ICAgICAgICAgICAgICBpZiAod29ya2xpc3QucHVzaChzdWNjZXNzb3JCbG9jaywgMCkpCi0gICAg
ICAgICAgICAgICAgICAgIG1fZGF0YVtzdWNjZXNzb3JCbG9ja10ucGFyZW50ID0gYmxvY2s7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21wdXRlU2Vt
aURvbWluYXRvcnNBbmRJbXBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKQotICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBjdXJyZW50UHJlTnVtYmVyID0gbV9ibG9ja0J5UHJlTnVtYmVyLnNp
emUoKTsgY3VycmVudFByZU51bWJlci0tID4gMTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ibG9ja0J5UHJlTnVtYmVyW2N1cnJlbnRQcmVOdW1iZXJdOwotICAgICAgICAg
ICAgQmxvY2tEYXRhJiBibG9ja0RhdGEgPSBtX2RhdGFbYmxvY2tdOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBTdGVwIDI6Ci0gICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRl
Y2Vzc29yQmxvY2sgOiBibG9jay0+cHJlZGVjZXNzb3JzKSB7Ci0gICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogaW50ZXJtZWRpYXRlQmxvY2sgPSBldmFsKHByZWRlY2Vzc29yQmxvY2spOwotICAg
ICAgICAgICAgICAgIGJsb2NrRGF0YS5zZW1pTnVtYmVyID0gc3RkOjptaW4oCi0gICAgICAgICAg
ICAgICAgICAgIG1fZGF0YVtpbnRlcm1lZGlhdGVCbG9ja10uc2VtaU51bWJlciwgYmxvY2tEYXRh
LnNlbWlOdW1iZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdW5zaWduZWQgYnVja2V0
UHJlTnVtYmVyID0gYmxvY2tEYXRhLnNlbWlOdW1iZXI7Ci0gICAgICAgICAgICBBU1NFUlQoYnVj
a2V0UHJlTnVtYmVyIDw9IGN1cnJlbnRQcmVOdW1iZXIpOwotICAgICAgICAgICAgbV9kYXRhW21f
YmxvY2tCeVByZU51bWJlcltidWNrZXRQcmVOdW1iZXJdXS5idWNrZXQuYXBwZW5kKGJsb2NrKTsK
LSAgICAgICAgICAgIGxpbmsoYmxvY2tEYXRhLnBhcmVudCwgYmxvY2spOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBTdGVwIDM6Ci0gICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHNl
bWlEb21pbmVlIDogbV9kYXRhW2Jsb2NrRGF0YS5wYXJlbnRdLmJ1Y2tldCkgewotICAgICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIHBvc3NpYmxlRG9taW5hdG9yID0gZXZhbChzZW1pRG9taW5lZSk7
Ci0gICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBzZW1pRG9taW5lZURhdGEgPSBtX2RhdGFbc2Vt
aURvbWluZWVdOwotICAgICAgICAgICAgICAgIEFTU0VSVChtX2Jsb2NrQnlQcmVOdW1iZXJbc2Vt
aURvbWluZWVEYXRhLnNlbWlOdW1iZXJdID09IGJsb2NrRGF0YS5wYXJlbnQpOwotICAgICAgICAg
ICAgICAgIEJsb2NrRGF0YSYgcG9zc2libGVEb21pbmF0b3JEYXRhID0gbV9kYXRhW3Bvc3NpYmxl
RG9taW5hdG9yXTsKLSAgICAgICAgICAgICAgICBpZiAocG9zc2libGVEb21pbmF0b3JEYXRhLnNl
bWlOdW1iZXIgPCBzZW1pRG9taW5lZURhdGEuc2VtaU51bWJlcikKLSAgICAgICAgICAgICAgICAg
ICAgc2VtaURvbWluZWVEYXRhLmRvbSA9IHBvc3NpYmxlRG9taW5hdG9yOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2VtaURvbWluZWVEYXRhLmRvbSA9IGJsb2Nr
RGF0YS5wYXJlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2RhdGFbYmxvY2tEYXRh
LnBhcmVudF0uYnVja2V0LmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBjb21wdXRlRXhwbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCkKLSAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgY3VycmVudFByZU51bWJlciA9IDE7IGN1cnJlbnRQcmVOdW1iZXIgPCBtX2Js
b2NrQnlQcmVOdW1iZXIuc2l6ZSgpOyArK2N1cnJlbnRQcmVOdW1iZXIpIHsKLSAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja0J5UHJlTnVtYmVyW2N1cnJlbnRQcmVOdW1iZXJd
OwotICAgICAgICAgICAgQmxvY2tEYXRhJiBibG9ja0RhdGEgPSBtX2RhdGFbYmxvY2tdOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYmxvY2tEYXRhLmRvbSAhPSBtX2Jsb2NrQnlQcmVO
dW1iZXJbYmxvY2tEYXRhLnNlbWlOdW1iZXJdKQotICAgICAgICAgICAgICAgIGJsb2NrRGF0YS5k
b20gPSBtX2RhdGFbYmxvY2tEYXRhLmRvbV0uZG9tOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgbGluayhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKLSAgICB7Ci0g
ICAgICAgIG1fZGF0YVt0b10uYW5jZXN0b3IgPSBmcm9tOwotICAgIH0KLSAgICAKLSAgICBCYXNp
Y0Jsb2NrKiBldmFsKEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2Rh
dGFbYmxvY2tdLmFuY2VzdG9yKQotICAgICAgICAgICAgcmV0dXJuIGJsb2NrOwotICAgICAgICAK
LSAgICAgICAgY29tcHJlc3MoYmxvY2spOwotICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5s
YWJlbDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21wcmVzcyhCYXNpY0Jsb2NrKiBpbml0aWFs
QmxvY2spCi0gICAgewotICAgICAgICAvLyBUaGlzIHdhcyBtZWFudCB0byBiZSBhIHJlY3Vyc2l2
ZSBmdW5jdGlvbiwgYnV0IHdlIGRvbid0IGxpa2UgcmVjdXJzaW9uIGJlY2F1c2Ugd2UgZG9uJ3QK
LSAgICAgICAgLy8gd2FudCB0byBibG93IHRoZSBzdGFjay4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9u
IHdpbGwgY2FsbCBjb21wcmVzcygpIHJlY3Vyc2l2ZWx5IG9uIHRoZQotICAgICAgICAvLyBhbmNl
c3RvciBvZiBhbnl0aGluZyB0aGF0IGhhcyBhbiBhbmNlc3Rvci4gU28sIHdlIHBvcHVsYXRlIG91
ciB3b3JrbGlzdCB3aXRoIHRoZQotICAgICAgICAvLyByZWN1cnNpdmUgYW5jZXN0b3JzIG9mIGlu
aXRpYWxCbG9jay4gVGhlbiB3ZSBwcm9jZXNzIHRoZSBsaXN0IHN0YXJ0aW5nIGZyb20gdGhlIGJs
b2NrCi0gICAgICAgIC8vIHRoYXQgaXMgZnVydGhlc3QgdXAgdGhlIGFuY2VzdG9yIGNoYWluLgot
ICAgICAgICAKLSAgICAgICAgQmFzaWNCbG9jayogYW5jZXN0b3IgPSBtX2RhdGFbaW5pdGlhbEJs
b2NrXS5hbmNlc3RvcjsKLSAgICAgICAgQVNTRVJUKGFuY2VzdG9yKTsKLSAgICAgICAgaWYgKCFt
X2RhdGFbYW5jZXN0b3JdLmFuY2VzdG9yKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAK
LSAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gc3RhY2s7Ci0gICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgPSBpbml0aWFsQmxvY2s7IGJsb2NrOyBibG9jayA9IG1fZGF0YVtibG9j
a10uYW5jZXN0b3IpCi0gICAgICAgICAgICBzdGFjay5hcHBlbmQoYmxvY2spOwotICAgICAgICAK
LSAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGJsb2NrcyB0aGF0IGhhdmUgYW4gYW5jZXN0
b3IgdGhhdCBoYXMgYW4gYW5jZXN0b3IuIFRoZSBsYXN0IHR3bwotICAgICAgICAvLyBlbGVtZW50
cyBpbiB0aGUgc3RhY2sgd29uJ3Qgc2F0aXNmeSB0aGlzIHByb3BlcnR5LgotICAgICAgICBBU1NF
UlQoc3RhY2suc2l6ZSgpID49IDIpOwotICAgICAgICBBU1NFUlQoIW1fZGF0YVtzdGFja1tzdGFj
ay5zaXplKCkgLSAxXV0uYW5jZXN0b3IpOwotICAgICAgICBBU1NFUlQoIW1fZGF0YVttX2RhdGFb
c3RhY2tbc3RhY2suc2l6ZSgpIC0gMl1dLmFuY2VzdG9yXS5hbmNlc3Rvcik7Ci0gICAgICAgIAot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFjay5zaXplKCkgLSAyOyBpLS07KSB7Ci0gICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHN0YWNrW2ldOwotICAgICAgICAgICAgQmFzaWNC
bG9jayomIGxhYmVsT2ZCbG9jayA9IG1fZGF0YVtibG9ja10ubGFiZWw7Ci0gICAgICAgICAgICBC
YXNpY0Jsb2NrKiYgYW5jZXN0b3JPZkJsb2NrID0gbV9kYXRhW2Jsb2NrXS5hbmNlc3RvcjsKLSAg
ICAgICAgICAgIEFTU0VSVChhbmNlc3Rvck9mQmxvY2spOwotICAgICAgICAgICAgQVNTRVJUKG1f
ZGF0YVthbmNlc3Rvck9mQmxvY2tdLmFuY2VzdG9yKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgQmFzaWNCbG9jayogbGFiZWxPZkFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0YVthbmNlc3Rvck9m
QmxvY2tdLmxhYmVsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9kYXRhW2xhYmVs
T2ZBbmNlc3Rvck9mQmxvY2tdLnNlbWlOdW1iZXIgPCBtX2RhdGFbbGFiZWxPZkJsb2NrXS5zZW1p
TnVtYmVyKQotICAgICAgICAgICAgICAgIGxhYmVsT2ZCbG9jayA9IGxhYmVsT2ZBbmNlc3Rvck9m
QmxvY2s7Ci0gICAgICAgICAgICBhbmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFbYW5jZXN0b3JPZkJs
b2NrXS5hbmNlc3RvcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0cnVjdCBCbG9ja0RhdGEg
ewotICAgICAgICBCbG9ja0RhdGEoKQotICAgICAgICAgICAgOiBwYXJlbnQobnVsbHB0cikKLSAg
ICAgICAgICAgICwgcHJlTnVtYmVyKFVJTlRfTUFYKQotICAgICAgICAgICAgLCBzZW1pTnVtYmVy
KFVJTlRfTUFYKQotICAgICAgICAgICAgLCBhbmNlc3RvcihudWxscHRyKQotICAgICAgICAgICAg
LCBsYWJlbChudWxscHRyKQotICAgICAgICAgICAgLCBkb20obnVsbHB0cikKLSAgICAgICAgewot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBwYXJlbnQ7Ci0gICAgICAg
IHVuc2lnbmVkIHByZU51bWJlcjsKLSAgICAgICAgdW5zaWduZWQgc2VtaU51bWJlcjsKLSAgICAg
ICAgQmFzaWNCbG9jayogYW5jZXN0b3I7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGxhYmVsOwotICAg
ICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJ1Y2tldDsKLSAgICAgICAgQmFzaWNCbG9jayogZG9t
OwotICAgIH07Ci0gICAgCi0gICAgR3JhcGgmIG1fZ3JhcGg7Ci0gICAgQmxvY2tNYXA8QmxvY2tE
YXRhPiBtX2RhdGE7Ci0gICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX2Jsb2NrQnlQcmVOdW1iZXI7
Ci19OwotCi1zdHJ1Y3QgVmFsaWRhdGlvbkNvbnRleHQgewotICAgIFZhbGlkYXRpb25Db250ZXh0
KEdyYXBoJiBncmFwaCwgRG9taW5hdG9ycyYgZG9taW5hdG9ycykKLSAgICAgICAgOiBncmFwaChn
cmFwaCkKLSAgICAgICAgLCBkb21pbmF0b3JzKGRvbWluYXRvcnMpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICB2b2lkIHJlcG9ydEVycm9yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRv
LCBjb25zdCBjaGFyKiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgRXJyb3IgZXJyb3I7Ci0gICAg
ICAgIGVycm9yLmZyb20gPSBmcm9tOwotICAgICAgICBlcnJvci50byA9IHRvOwotICAgICAgICBl
cnJvci5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICAgICAgZXJyb3JzLmFwcGVuZChlcnJvcik7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgaGFuZGxlRXJyb3JzKCkKLSAgICB7Ci0gICAgICAgIGlmIChl
cnJvcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAg
c3RhcnRDcmFzaGluZygpOwotICAgICAgICBkYXRhTG9nKCJERkcgRE9NSU5BVE9SIFZBTElEQVRJ
T04gRkFJTEVEOlxuIik7Ci0gICAgICAgIGRhdGFMb2coIlxuIik7Ci0gICAgICAgIGRhdGFMb2co
IkZvciBibG9jayBkb21pbmF0aW9uIHJlbGF0aW9uc2hpcHM6XG4iKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGVycm9ycy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgZGF0
YUxvZygKLSAgICAgICAgICAgICAgICAiICAgICIsIHBvaW50ZXJEdW1wKGVycm9yc1tpXS5mcm9t
KSwgIiAtPiAiLCBwb2ludGVyRHVtcChlcnJvcnNbaV0udG8pLAotICAgICAgICAgICAgICAgICIg
KCIsIGVycm9yc1tpXS5tZXNzYWdlLCAiKVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YUxv
ZygiXG4iKTsKLSAgICAgICAgZGF0YUxvZygiQ29udHJvbCBmbG93IGdyYXBoOlxuIik7Ci0gICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGdyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZGF0YUxvZygiICAgIEJsb2NrICMi
LCBibG9ja0luZGV4LCAiOiBzdWNjZXNzb3JzID0gWyIpOwotICAgICAgICAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5u
dW1TdWNjZXNzb3JzKCk7ICsraSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCAqYmxv
Y2stPnN1Y2Nlc3NvcihpKSk7Ci0gICAgICAgICAgICBkYXRhTG9nKCJdLCBwcmVkZWNlc3NvcnMg
PSBbIik7Ci0gICAgICAgICAgICBjb21tYSA9IENvbW1hUHJpbnRlcigpOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgKmJsb2NrLT5wcmVkZWNlc3NvcnNbaV0p
OwotICAgICAgICAgICAgZGF0YUxvZygiXVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YUxv
ZygiXG4iKTsKLSAgICAgICAgZGF0YUxvZygiTGVuZ2F1ZXItVGFyamFuIERvbWluYXRvcnM6XG4i
KTsKLSAgICAgICAgZGF0YUxvZyhkb21pbmF0b3JzKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsK
LSAgICAgICAgZGF0YUxvZygiTmFpdmUgRG9taW5hdG9yczpcbiIpOwotICAgICAgICBuYWl2ZURv
bWluYXRvcnMuZHVtcChncmFwaCwgV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgZGF0YUxvZygi
XG4iKTsKLSAgICAgICAgZGF0YUxvZygiR3JhcGggYXQgdGltZSBvZiBmYWlsdXJlOlxuIik7Ci0g
ICAgICAgIGdyYXBoLmR1bXAoKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLSAgICAgICAgZGF0
YUxvZygiREZHIERPTUlOQVRPUiBWQUxJREFUSU9OIEZBSUxJRUQhXG4iKTsKLSAgICAgICAgQ1JB
U0goKTsKLSAgICB9Ci0gICAgCi0gICAgR3JhcGgmIGdyYXBoOwotICAgIERvbWluYXRvcnMmIGRv
bWluYXRvcnM7Ci0gICAgTmFpdmVEb21pbmF0b3JzIG5haXZlRG9taW5hdG9yczsKLSAgICAKLSAg
ICBzdHJ1Y3QgRXJyb3IgewotICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tOwotICAgICAgICBCYXNp
Y0Jsb2NrKiB0bzsKLSAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKLSAgICB9OwotICAgIAot
ICAgIFZlY3RvcjxFcnJvcj4gZXJyb3JzOwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
Ci0KLXZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCi17Ci0gICAgTGVuZ2F1
ZXJUYXJqYW4gbGVuZ2F1ZXJUYXJqYW4oZ3JhcGgpOwotICAgIGxlbmdhdWVyVGFyamFuLmNvbXB1
dGUoKTsKLQotICAgIG1fZGF0YSA9IEJsb2NrTWFwPEJsb2NrRGF0YT4oZ3JhcGgpOwotICAgIAot
ICAgIC8vIEZyb20gaGVyZSB3ZSB3YW50IHRvIGJ1aWxkIGEgc3Bhbm5pbmcgdHJlZSB3aXRoIGJv
dGggdXB3YXJkIGFuZCBkb3dud2FyZCBsaW5rcyBhbmQgd2Ugd2FudAotICAgIC8vIHRvIGRvIGEg
c2VhcmNoIG92ZXIgdGhpcyB0cmVlIHRvIGNvbXB1dGUgcHJlIGFuZCBwb3N0IG51bWJlcnMgdGhh
dCBjYW4gYmUgdXNlZCBmb3IgZG9taW5hbmNlCi0gICAgLy8gdGVzdHMuCi0gICAgCi0gICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAot
ICAgICAgICBCYXNpY0Jsb2NrKiBpZG9tQmxvY2sgPSBsZW5nYXVlclRhcmphbi5pbW1lZGlhdGVE
b21pbmF0b3IoYmxvY2spOwotICAgICAgICBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQgPSBpZG9t
QmxvY2s7Ci0gICAgICAgIGlmIChpZG9tQmxvY2spCi0gICAgICAgICAgICBtX2RhdGFbaWRvbUJs
b2NrXS5pZG9tS2lkcy5hcHBlbmQoYmxvY2spOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBu
ZXh0UHJlTnVtYmVyID0gMDsKLSAgICB1bnNpZ25lZCBuZXh0UG9zdE51bWJlciA9IDA7Ci0gICAg
Ci0gICAgLy8gUGxhaW4gc3RhY2stYmFzZWQgd29ya2xpc3QgYmVjYXVzZSB3ZSBhcmUgZ3VhcmFu
dGVlZCB0byBzZWUgZWFjaCBibG9jayBleGFjdGx5IG9uY2UgYW55d2F5LgotICAgIFZlY3RvcjxC
bG9ja1dpdGhPcmRlcj4gd29ya2xpc3Q7Ci0gICAgd29ya2xpc3QuYXBwZW5kKEJsb2NrV2l0aE9y
ZGVyKGdyYXBoLmJsb2NrKDApLCBWaXNpdE9yZGVyOjpQcmUpKTsKLSAgICB3aGlsZSAoIXdvcmts
aXN0LmlzRW1wdHkoKSkgewotICAgICAgICBCbG9ja1dpdGhPcmRlciBpdGVtID0gd29ya2xpc3Qu
dGFrZUxhc3QoKTsKLSAgICAgICAgc3dpdGNoIChpdGVtLm9yZGVyKSB7Ci0gICAgICAgIGNhc2Ug
VmlzaXRPcmRlcjo6UHJlOgotICAgICAgICAgICAgbV9kYXRhW2l0ZW0ubm9kZV0ucHJlTnVtYmVy
ID0gbmV4dFByZU51bWJlcisrOwotICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKEJsb2NrV2l0
aE9yZGVyKGl0ZW0ubm9kZSwgVmlzaXRPcmRlcjo6UG9zdCkpOwotICAgICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBraWQgOiBtX2RhdGFbaXRlbS5ub2RlXS5pZG9tS2lkcykKLSAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5hcHBlbmQoQmxvY2tXaXRoT3JkZXIoa2lkLCBWaXNpdE9yZGVyOjpQcmUp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZpc2l0T3JkZXI6OlBvc3Q6Ci0g
ICAgICAgICAgICBtX2RhdGFbaXRlbS5ub2RlXS5wb3N0TnVtYmVyID0gbmV4dFBvc3ROdW1iZXIr
KzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICh2
YWxpZGF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIC8vIENoZWNrIG91ciBkb21pbmF0b3IgY2Fs
Y3VsYXRpb246Ci0gICAgICAgIC8vIDEpIENoZWNrIHRoYXQgb3VyIHJhbmdlLWJhc2VkIGFuY2Vz
dHJ5IHRlc3QgaXMgdGhlIHNhbWUgYXMgYSBuYWl2ZSBhbmNlc3RyeSB0ZXN0LgotICAgICAgICAv
LyAyKSBDaGVjayB0aGF0IG91ciBub3Rpb24gb2Ygd2hvIGRvbWluYXRlcyB3aG9tIGlzIGlkZW50
aWNhbCB0byBhIG5haXZlIChub3QKLSAgICAgICAgLy8gICAgTGVuZ2F1ZXItVGFyamFuKSBkb21p
bmF0b3IgY2FsY3VsYXRpb24uCi0gICAgICAgIAotICAgICAgICBWYWxpZGF0aW9uQ29udGV4dCBj
b250ZXh0KGdyYXBoLCAqdGhpcyk7Ci0gICAgICAgIGNvbnRleHQubmFpdmVEb21pbmF0b3JzLmNv
bXB1dGUoZ3JhcGgpOwotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGZyb21CbG9j
a0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGZyb21CbG9ja0luZGV4LS07KSB7Ci0gICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBmcm9tQmxvY2sgPSBncmFwaC5ibG9jayhmcm9tQmxvY2tJbmRleCk7
Ci0gICAgICAgICAgICBpZiAoIWZyb21CbG9jayB8fCBtX2RhdGFbZnJvbUJsb2NrXS5wcmVOdW1i
ZXIgPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBm
b3IgKEJsb2NrSW5kZXggdG9CbG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IHRvQmxvY2tJ
bmRleC0tOykgewotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmxvY2sgPSBncmFwaC5i
bG9jayh0b0Jsb2NrSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmICghdG9CbG9jayB8fCBtX2Rh
dGFbdG9CbG9ja10ucHJlTnVtYmVyID09IFVJTlRfTUFYKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoZG9taW5hdGVz
KGZyb21CbG9jaywgdG9CbG9jaykgIT0gbmFpdmVEb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2Nr
KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRv
QmxvY2ssICJSYW5nZS1iYXNlZCBkb21pbmF0aW9uIGNoZWNrIGlzIGJyb2tlbiIpOwotICAgICAg
ICAgICAgICAgIGlmIChkb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSAhPSBjb250ZXh0Lm5h
aXZlRG9taW5hdG9ycy5kb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRvQmxvY2ssICJMZW5nYXVl
ci1UYXJqYW4gZG9taW5hdGlvbiBpcyBicm9rZW4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgY29udGV4dC5oYW5kbGVFcnJvcnMoKTsKLSAgICB9Ci19Ci0K
LUJsb2NrU2V0IERvbWluYXRvcnM6OnN0cmljdERvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bykg
Y29uc3QKLXsKLSAgICBCbG9ja1NldCByZXN1bHQ7Ci0gICAgZm9yQWxsU3RyaWN0RG9taW5hdG9y
c09mKHRvLCBCbG9ja0FkZGVyKHJlc3VsdCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJs
b2NrU2V0IERvbWluYXRvcnM6OmRvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bykgY29uc3QKLXsK
LSAgICBCbG9ja1NldCByZXN1bHQ7Ci0gICAgZm9yQWxsRG9taW5hdG9yc09mKHRvLCBCbG9ja0Fk
ZGVyKHJlc3VsdCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJsb2NrU2V0IERvbWluYXRv
cnM6OmJsb2Nrc1N0cmljdGx5RG9taW5hdGVkQnkoQmFzaWNCbG9jayogZnJvbSkgY29uc3QKLXsK
LSAgICBCbG9ja1NldCByZXN1bHQ7Ci0gICAgZm9yQWxsQmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRC
eShmcm9tLCBCbG9ja0FkZGVyKHJlc3VsdCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUJs
b2NrU2V0IERvbWluYXRvcnM6OmJsb2Nrc0RvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZyb20pIGNv
bnN0Ci17Ci0gICAgQmxvY2tTZXQgcmVzdWx0OwotICAgIGZvckFsbEJsb2Nrc0RvbWluYXRlZEJ5
KGZyb20sIEJsb2NrQWRkZXIocmVzdWx0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQmxv
Y2tTZXQgRG9taW5hdG9yczo6ZG9taW5hbmNlRnJvbnRpZXJPZihCYXNpY0Jsb2NrKiBmcm9tKSBj
b25zdAotewotICAgIEJsb2NrU2V0IHJlc3VsdDsKLSAgICBmb3JBbGxCbG9ja3NJbkRvbWluYW5j
ZUZyb250aWVyT2ZJbXBsKGZyb20sIEJsb2NrQWRkZXIocmVzdWx0KSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotQmxvY2tTZXQgRG9taW5hdG9yczo6aXRlcmF0ZWREb21pbmFuY2VGcm9udGll
ck9mKGNvbnN0IEJsb2NrTGlzdCYgZnJvbSkgY29uc3QKLXsKLSAgICBCbG9ja1NldCByZXN1bHQ7
Ci0gICAgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2ZJbXBsKGZyb20s
IEJsb2NrQWRkZXIocmVzdWx0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBEb21p
bmF0b3JzOjpuYWl2ZURvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykg
Y29uc3QKLXsKLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrID0gdG87IGJsb2NrOyBibG9jayA9
IG1fZGF0YVtibG9ja10uaWRvbVBhcmVudCkgewotICAgICAgICBpZiAoYmxvY2sgPT0gZnJvbSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgRG9taW5hdG9yczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGlm
ICghaXNWYWxpZCgpKSB7Ci0gICAgICAgIG91dC5wcmludCgiICAgIE5vdCBWYWxpZC5cbiIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZGF0YS5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAg
ICAgICBpZiAobV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciA9PSBVSU5UX01BWCkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50KCIgICAgQmxvY2sg
IyIsIGJsb2NrSW5kZXgsICI6IGlkb20gPSAiLCBwb2ludGVyRHVtcChtX2RhdGFbYmxvY2tJbmRl
eF0uaWRvbVBhcmVudCksICIsIGlkb21LaWRzID0gWyIpOwotICAgICAgICBDb21tYVByaW50ZXIg
Y29tbWE7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RhdGFbYmxvY2tJbmRl
eF0uaWRvbUtpZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICpt
X2RhdGFbYmxvY2tJbmRleF0uaWRvbUtpZHNbaV0pOwotICAgICAgICBvdXQucHJpbnQoIl0sIHBy
ZS9wb3N0ID0gIiwgbV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciwgIi8iLCBtX2RhdGFbYmxv
Y2tJbmRleF0ucG9zdE51bWJlciwgIlxuIik7Ci0gICAgfQotfQotCi19IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCwxOTAgKzI4LDI2IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgIkRG
R0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Js
b2NrTWFwLmgiCiAjaW5jbHVkZSAiREZHQmxvY2tTZXQuaCIKKyNpbmNsdWRlICJERkdDRkcuaCIK
ICNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUg
PHd0Zi9Eb21pbmF0b3JzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ci1jbGFzcyBHcmFwaDsKLQotY2xhc3MgRG9taW5hdG9ycyA6IHB1YmxpYyBBbmFseXNpczxEb21p
bmF0b3JzPiB7CitjbGFzcyBEb21pbmF0b3JzIDogcHVibGljIFdURjo6RG9taW5hdG9yczxDRkc+
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb21pbmF0b3JzKTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBEb21pbmF0b3JzKCk7Ci0gICAgfkRvbWluYXRv
cnMoKTsKLSAgICAKLSAgICB2b2lkIGNvbXB1dGUoR3JhcGgmKTsKLSAgICAKLSAgICBib29sIHN0
cmljdGx5RG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2RhdGFb
dG9dLnByZU51bWJlciA+IG1fZGF0YVtmcm9tXS5wcmVOdW1iZXIKLSAgICAgICAgICAgICYmIG1f
ZGF0YVt0b10ucG9zdE51bWJlciA8IG1fZGF0YVtmcm9tXS5wb3N0TnVtYmVyOwotICAgIH0KLSAg
ICAKLSAgICBib29sIGRvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcm9tID09IHRvIHx8IHN0cmljdGx5RG9taW5h
dGVzKGZyb20sIHRvKTsKLSAgICB9Ci0gICAgCi0gICAgQmFzaWNCbG9jayogaW1tZWRpYXRlRG9t
aW5hdG9yT2YoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50OwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsU3RyaWN0RG9taW5hdG9yc09mKEJhc2ljQmxv
Y2sqIHRvLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA9IG1fZGF0YVt0b10uaWRvbVBhcmVudDsgYmxvY2s7IGJsb2Nr
ID0gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50KQotICAgICAgICAgICAgZnVuY3RvcihibG9jayk7
Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBm
b3JBbGxEb21pbmF0b3JzT2YoQmFzaWNCbG9jayogdG8sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
IGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrID0gdG87IGJsb2Nr
OyBibG9jayA9IG1fZGF0YVtibG9ja10uaWRvbVBhcmVudCkKLSAgICAgICAgICAgIGZ1bmN0b3Io
YmxvY2spOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAg
IHZvaWQgZm9yQWxsQmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tLCBj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgVmVjdG9yPEJhc2lj
QmxvY2sqLCAxNj4gd29ya2xpc3Q7Ci0gICAgICAgIHdvcmtsaXN0LmFwcGVuZFZlY3RvcihtX2Rh
dGFbZnJvbV0uaWRvbUtpZHMpOwotICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOwot
ICAgICAgICAgICAgZnVuY3RvcihibG9jayk7Ci0gICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmRW
ZWN0b3IobV9kYXRhW2Jsb2NrXS5pZG9tS2lkcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbEJsb2Nrc0RvbWlu
YXRlZEJ5KEJhc2ljQmxvY2sqIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Ci0g
ICAgewotICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiB3b3JrbGlzdDsKLSAgICAgICAg
d29ya2xpc3QuYXBwZW5kKGZyb20pOwotICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHko
KSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgp
OwotICAgICAgICAgICAgZnVuY3RvcihibG9jayk7Ci0gICAgICAgICAgICB3b3JrbGlzdC5hcHBl
bmRWZWN0b3IobV9kYXRhW2Jsb2NrXS5pZG9tS2lkcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgQmxvY2tTZXQgc3RyaWN0RG9taW5hdG9yc09mKEJhc2ljQmxvY2sqIHRvKSBjb25zdDsK
LSAgICBCbG9ja1NldCBkb21pbmF0b3JzT2YoQmFzaWNCbG9jayogdG8pIGNvbnN0OwotICAgIEJs
b2NrU2V0IGJsb2Nrc1N0cmljdGx5RG9taW5hdGVkQnkoQmFzaWNCbG9jayogZnJvbSkgY29uc3Q7
Ci0gICAgQmxvY2tTZXQgYmxvY2tzRG9taW5hdGVkQnkoQmFzaWNCbG9jayogZnJvbSkgY29uc3Q7
Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbEJs
b2Nrc0luRG9taW5hbmNlRnJvbnRpZXJPZigKLSAgICAgICAgQmFzaWNCbG9jayogZnJvbSwgY29u
c3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIEJsb2NrU2V0IHNldDsK
LSAgICAgICAgZm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mSW1wbCgKLSAgICAgICAg
ICAgIGZyb20sCi0gICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNldC5hZGQoYmxvY2spKQotICAgICAgICAgICAgICAgICAgICBmdW5jdG9y
KGJsb2NrKTsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLSAgICAKLSAgICBCbG9ja1NldCBkb21p
bmFuY2VGcm9udGllck9mKEJhc2ljQmxvY2sqIGZyb20pIGNvbnN0OwotICAgIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9t
aW5hbmNlRnJvbnRpZXJPZigKLSAgICAgICAgY29uc3QgQmxvY2tMaXN0JiBmcm9tLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgZm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVy
YXRlZERvbWluYW5jZUZyb250aWVyT2YoCi0gICAgICAgICAgICBmcm9tLAotICAgICAgICAgICAg
WyZdIChCYXNpY0Jsb2NrKiBibG9jaykgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgZnVuY3Rv
cihibG9jayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9KTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gVGhpcyBpcyBhIGNsb3NlIHJlbGF0aXZlIG9mIGZvckFsbEJs
b2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKCksIHdoaWNoIGFsbG93cyB0aGUKLSAg
ICAvLyBnaXZlbiBmdW5jdG9yIHRvIHJldHVybiBmYWxzZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGRv
bid0IHdpc2ggdG8gY29uc2lkZXIgdGhlIGdpdmVuIGJsb2NrLgotICAgIC8vIFVzZWZ1bCBmb3Ig
Y29tcHV0aW5nIHBydW5lZCBTU0EgZm9ybS4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgotICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVy
T2YoCi0gICAgICAgIGNvbnN0IEJsb2NrTGlzdCYgZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKLSAgICB7Ci0gICAgICAgIEJsb2NrU2V0IHNldDsKLSAgICAgICAgZm9yQWxsQmxvY2tzSW5J
dGVyYXRlZERvbWluYW5jZUZyb250aWVyT2ZJbXBsKAotICAgICAgICAgICAgZnJvbSwKLSAgICAg
ICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2spIC0+IGJvb2wgewotICAgICAgICAgICAgICAg
IGlmICghc2V0LmFkZChibG9jaykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3RvcihibG9jayk7Ci0gICAgICAgICAgICB9KTsK
LSAgICB9Ci0gICAgCi0gICAgQmxvY2tTZXQgaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKGNv
bnN0IEJsb2NrTGlzdCYgZnJvbSkgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIGJvb2wgbmFpdmVEb21pbmF0ZXMoQmFz
aWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0OwotICAgIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250
aWVyT2ZJbXBsKAotICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gUGFyYXBocmFzaW5nIGZyb20gaHR0cDovL2Vu
Lndpa2lwZWRpYS5vcmcvd2lraS9Eb21pbmF0b3JfKGdyYXBoX3RoZW9yeSk6Ci0gICAgICAgIC8v
ICAgICAiVGhlIGRvbWluYW5jZSBmcm9udGllciBvZiBhIGJsb2NrICdmcm9tJyBpcyB0aGUgc2V0
IG9mIGFsbCBibG9ja3MgJ3RvJyBzdWNoIHRoYXQKLSAgICAgICAgLy8gICAgICdmcm9tJyBkb21p
bmF0ZXMgYW4gaW1tZWRpYXRlIHByZWRlY2Vzc29yIG9mICd0bycsIGJ1dCAnZnJvbScgZG9lcyBu
b3Qgc3RyaWN0bHkKLSAgICAgICAgLy8gICAgIGRvbWluYXRlICd0bycuIgotICAgICAgICAvLwot
ICAgICAgICAvLyBBIHVzZWZ1bCBjb3JuZXIgY2FzZSB0byByZW1lbWJlcjogYSBibG9jayBtYXkg
YmUgaW4gaXRzIG93biBkb21pbmFuY2UgZnJvbnRpZXIgaWYgaXQgaGFzCi0gICAgICAgIC8vIGEg
bG9vcCBlZGdlIHRvIGl0c2VsZiwgc2luY2UgaXQgZG9taW5hdGVzIGl0c2VsZiBhbmQgc28gaXQg
ZG9taW5hdGVzIGl0cyBvd24gaW1tZWRpYXRlCi0gICAgICAgIC8vIHByZWRlY2Vzc29yLCBhbmQg
YSBibG9jayBuZXZlciBzdHJpY3RseSBkb21pbmF0ZXMgaXRzZWxmLgotICAgICAgICAKLSAgICAg
ICAgZm9yQWxsQmxvY2tzRG9taW5hdGVkQnkoCi0gICAgICAgICAgICBmcm9tLAotICAgICAgICAg
ICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaykgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRl
eC0tOykgewotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0byA9IGJsb2NrLT5zdWNj
ZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmljdGx5
RG9taW5hdGVzKGZyb20sIHRvKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IodG8p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgIH0KLSAgICAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5JdGVyYXRl
ZERvbWluYW5jZUZyb250aWVyT2ZJbXBsKAotICAgICAgICBjb25zdCBCbG9ja0xpc3QmIGZyb20s
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgRG9taW5hdG9ycyhHcmFwaCYgZ3Jh
cGgpCisgICAgICAgIDogV1RGOjpEb21pbmF0b3JzPENGRz4oKmdyYXBoLm1fY2ZnLCB2YWxpZGF0
aW9uRW5hYmxlZCgpKQogICAgIHsKLSAgICAgICAgQmxvY2tMaXN0IHdvcmtsaXN0ID0gZnJvbTsK
LSAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIGZvckFsbEJs
b2Nrc0luRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCi0gICAgICAgICAgICAgICAgYmxvY2ssCi0g
ICAgICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBvdGhlckJsb2NrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChmdW5jdG9yKG90aGVyQmxvY2spKQotICAgICAgICAgICAgICAgICAgICAg
ICAgd29ya2xpc3QuYXBwZW5kKG90aGVyQmxvY2spOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICB9CiAgICAgfQotICAgIAotICAgIHN0cnVjdCBCbG9ja0RhdGEgewotICAgICAgICBCbG9j
a0RhdGEoKQotICAgICAgICAgICAgOiBpZG9tUGFyZW50KG51bGxwdHIpCi0gICAgICAgICAgICAs
IHByZU51bWJlcihVSU5UX01BWCkKLSAgICAgICAgICAgICwgcG9zdE51bWJlcihVSU5UX01BWCkK
LSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IGlkb21LaWRzOwotICAgICAgICBCYXNpY0Jsb2NrKiBpZG9tUGFyZW50OwotICAgICAgICAK
LSAgICAgICAgdW5zaWduZWQgcHJlTnVtYmVyOwotICAgICAgICB1bnNpZ25lZCBwb3N0TnVtYmVy
OwotICAgIH07Ci0gICAgCi0gICAgQmxvY2tNYXA8QmxvY2tEYXRhPiBtX2RhdGE7CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0VkZ2VEb21pbmF0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdFZGdlRG9taW5hdGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHRG9taW5hdG9y
cy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKQEAgLTQ1LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgb3BlcmF0b3Io
KShOb2RlKiwgRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBtX2dyYXBo
Lm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoZWRnZS5ub2RlKCktPm93bmVyLCBtX2Jsb2NrKTsKKyAg
ICAgICAgYm9vbCByZXN1bHQgPSBtX2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGVkZ2Uu
bm9kZSgpLT5vd25lciwgbV9ibG9jayk7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAg
ICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICJDaGVja2luZyBpZiAiLCBlZGdlLCAiIGlu
ICIsICplZGdlLm5vZGUoKS0+b3duZXIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDEyIEBACiAjaW5jbHVk
ZSAiREZHQmxvY2tXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKICNpbmNs
dWRlICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0NGRy5oIgorI2luY2x1
ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
REZHTWF5RXhpdC5oIgorI2luY2x1ZGUgIkRGR05hdHVyYWxMb29wcy5oIgorI2luY2x1ZGUgIkRG
R1ByZVBvc3ROdW1iZXJpbmcuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1w
LmgiCiAjaW5jbHVkZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJGdW5jdGlv
bkV4ZWN1dGFibGVEdW1wLmgiCkBAIC02NCw2ICs2OCw3IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0s
IFBsYW4mIHBsYW4sIExvbmdMaXYKICAgICAsIG1fY29kZUJsb2NrKG1fcGxhbi5jb2RlQmxvY2sp
CiAgICAgLCBtX3Byb2ZpbGVkQmxvY2sobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCiAgICAg
LCBtX2FsbG9jYXRvcihsb25nTGl2ZWRTdGF0ZS5tX2FsbG9jYXRvcikKKyAgICAsIG1fY2ZnKHN0
ZDo6bWFrZV91bmlxdWU8Q0ZHPigqdGhpcykpCiAgICAgLCBtX25leHRNYWNoaW5lTG9jYWwoMCkK
ICAgICAsIG1fZml4cG9pbnRTdGF0ZShCZWZvcmVGaXhwb2ludCkKICAgICAsIG1fc3RydWN0dXJl
UmVnaXN0cmF0aW9uU3RhdGUoSGF2ZU5vdFN0YXJ0ZWRSZWdpc3RlcmluZykKQEAgLTQwMSwyMiAr
NDA2LDIyIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKICAgICBp
ZiAoYmxvY2stPnRlcm1pbmFsKCkpIHsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CiAgICAgICAgICAgICBvdXQucHJpbnQoIiAiLCAq
c3VjY2Vzc29yKTsKLSAgICAgICAgICAgIGlmIChtX3ByZVBvc3ROdW1iZXJpbmcuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiICgiLCBtX3ByZVBvc3ROdW1iZXJpbmcuZWRn
ZUtpbmQoYmxvY2ssIHN1Y2Nlc3NvciksICIpIik7CisgICAgICAgICAgICBpZiAobV9wcmVQb3N0
TnVtYmVyaW5nKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiICgiLCBtX3ByZVBvc3ROdW1i
ZXJpbmctPmVkZ2VLaW5kKGJsb2NrLCBzdWNjZXNzb3IpLCAiKSIpOwogICAgICAgICB9CiAgICAg
fSBlbHNlCiAgICAgICAgIG91dC5wcmludCgiIDxpbnZhbGlkPiIpOwogICAgIG91dC5wcmludCgi
XG4iKTsKLSAgICBpZiAobV9kb21pbmF0b3JzLmlzVmFsaWQoKSAmJiB0ZXJtaW5hbHNBcmVWYWxp
ZCgpKSB7Ci0gICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlZCBieTogIiwgbV9k
b21pbmF0b3JzLmRvbWluYXRvcnNPZihibG9jayksICJcbiIpOwotICAgICAgICBvdXQucHJpbnQo
cHJlZml4LCAiICBEb21pbmF0ZXM6ICIsIG1fZG9taW5hdG9ycy5ibG9ja3NEb21pbmF0ZWRCeShi
bG9jayksICJcbiIpOwotICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmFuY2UgRnJv
bnRpZXI6ICIsIG1fZG9taW5hdG9ycy5kb21pbmFuY2VGcm9udGllck9mKGJsb2NrKSwgIlxuIik7
Ci0gICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIEl0ZXJhdGVkIERvbWluYW5jZSBGcm9udGll
cjogIiwgbV9kb21pbmF0b3JzLml0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZihCbG9ja0xpc3Qo
MSwgYmxvY2spKSwgIlxuIik7Ci0gICAgfQotICAgIGlmIChtX3ByZVBvc3ROdW1iZXJpbmcuaXNW
YWxpZCgpKQotICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQcmUvUG9zdCBOdW1iZXJpbmc6
ICIsIG1fcHJlUG9zdE51bWJlcmluZy5wcmVOdW1iZXIoYmxvY2spLCAiLyIsIG1fcHJlUG9zdE51
bWJlcmluZy5wb3N0TnVtYmVyKGJsb2NrKSwgIlxuIik7Ci0gICAgaWYgKG1fbmF0dXJhbExvb3Bz
LmlzVmFsaWQoKSkgewotICAgICAgICBpZiAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX25h
dHVyYWxMb29wcy5oZWFkZXJPZihibG9jaykpIHsKKyAgICBpZiAobV9kb21pbmF0b3JzICYmIHRl
cm1pbmFsc0FyZVZhbGlkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5h
dGVkIGJ5OiAiLCBtX2RvbWluYXRvcnMtPmRvbWluYXRvcnNPZihibG9jayksICJcbiIpOworICAg
ICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZXM6ICIsIG1fZG9taW5hdG9ycy0+Ymxv
Y2tzRG9taW5hdGVkQnkoYmxvY2spLCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwg
IiAgRG9taW5hbmNlIEZyb250aWVyOiAiLCBtX2RvbWluYXRvcnMtPmRvbWluYW5jZUZyb250aWVy
T2YoYmxvY2spLCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgSXRlcmF0ZWQg
RG9taW5hbmNlIEZyb250aWVyOiAiLCBtX2RvbWluYXRvcnMtPml0ZXJhdGVkRG9taW5hbmNlRnJv
bnRpZXJPZihCbG9ja0xpc3QoMSwgYmxvY2spKSwgIlxuIik7CisgICAgfQorICAgIGlmIChtX3By
ZVBvc3ROdW1iZXJpbmcpCisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZS9Qb3N0IE51
bWJlcmluZzogIiwgbV9wcmVQb3N0TnVtYmVyaW5nLT5wcmVOdW1iZXIoYmxvY2spLCAiLyIsIG1f
cHJlUG9zdE51bWJlcmluZy0+cG9zdE51bWJlcihibG9jayksICJcbiIpOworICAgIGlmIChtX25h
dHVyYWxMb29wcykgeworICAgICAgICBpZiAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX25h
dHVyYWxMb29wcy0+aGVhZGVyT2YoYmxvY2spKSB7CiAgICAgICAgICAgICBvdXQucHJpbnQocHJl
Zml4LCAiICBMb29wIGhlYWRlciwgY29udGFpbnM6Iik7CiAgICAgICAgICAgICBWZWN0b3I8Qmxv
Y2tJbmRleD4gc29ydGVkQmxvY2tMaXN0OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxvb3AtPnNpemUoKTsgKytpKQpAQCAtNDI4LDcgKzQzMyw3IEBAIHZvaWQgR3JhcGg6
OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gY29udGFpbmluZ0xvb3BzID0KLSAgICAgICAg
ICAgIG1fbmF0dXJhbExvb3BzLmxvb3BzT2YoYmxvY2spOworICAgICAgICAgICAgbV9uYXR1cmFs
TG9vcHMtPmxvb3BzT2YoYmxvY2spOwogICAgICAgICBpZiAoIWNvbnRhaW5pbmdMb29wcy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIENvbnRhaW5pbmcgbG9v
cCBoZWFkZXJzOiIpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbnRh
aW5pbmdMb29wcy5zaXplKCk7ICsraSkKQEAgLTc0Niw5ICs3NTEsOSBAQCB2b2lkIEdyYXBoOjpr
aWxsVW5yZWFjaGFibGVCbG9ja3MoKQogCiB2b2lkIEdyYXBoOjppbnZhbGlkYXRlQ0ZHKCkKIHsK
LSAgICBtX2RvbWluYXRvcnMuaW52YWxpZGF0ZSgpOwotICAgIG1fbmF0dXJhbExvb3BzLmludmFs
aWRhdGUoKTsKLSAgICBtX3ByZVBvc3ROdW1iZXJpbmcuaW52YWxpZGF0ZSgpOworICAgIG1fZG9t
aW5hdG9ycyA9IG51bGxwdHI7CisgICAgbV9uYXR1cmFsTG9vcHMgPSBudWxscHRyOworICAgIG1f
cHJlUG9zdE51bWJlcmluZyA9IG51bGxwdHI7CiB9CiAKIHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVH
ZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQgc3RhcnRJbmRleEluQmxvY2ssIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhLCBOb2RlKiBuZXdHZXRMb2NhbCkK
QEAgLTE0MTAsNiArMTQxNSwyNSBAQCB2b2lkIEdyYXBoOjpoYW5kbGVBc3NlcnRpb25GYWlsdXJl
KAogICAgIGNyYXNoKCp0aGlzLCB0b0NTdHJpbmcoIldoaWxlIGhhbmRsaW5nIGJsb2NrICIsIHBv
aW50ZXJEdW1wKGJsb2NrKSwgIlxuXG4iKSwgZmlsZSwgbGluZSwgZnVuY3Rpb24sIGFzc2VydGlv
bik7CiB9CiAKK3ZvaWQgR3JhcGg6OmVuc3VyZURvbWluYXRvcnMoKQoreworICAgIGlmICghbV9k
b21pbmF0b3JzKQorICAgICAgICBtX2RvbWluYXRvcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPERvbWlu
YXRvcnM+KCp0aGlzKTsKK30KKwordm9pZCBHcmFwaDo6ZW5zdXJlUHJlUG9zdE51bWJlcmluZygp
Cit7CisgICAgaWYgKCFtX3ByZVBvc3ROdW1iZXJpbmcpCisgICAgICAgIG1fcHJlUG9zdE51bWJl
cmluZyA9IHN0ZDo6bWFrZV91bmlxdWU8UHJlUG9zdE51bWJlcmluZz4oKnRoaXMpOworfQorCit2
b2lkIEdyYXBoOjplbnN1cmVOYXR1cmFsTG9vcHMoKQoreworICAgIGVuc3VyZURvbWluYXRvcnMo
KTsKKyAgICBpZiAoIW1fbmF0dXJhbExvb3BzKQorICAgICAgICBtX25hdHVyYWxMb29wcyA9IHN0
ZDo6bWFrZV91bmlxdWU8TmF0dXJhbExvb3BzPigqdGhpcyk7Cit9CisKIFZhbHVlUHJvZmlsZSog
R3JhcGg6OnZhbHVlUHJvZmlsZUZvcihOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE5MTgzNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsMTQgKzMzLDExIEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHQXJn
dW1lbnRQb3NpdGlvbi5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKLSNpbmNsdWRlICJE
RkdEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiREZHRnJvemVuVmFsdWUuaCIKICNpbmNsdWRlICJE
RkdMb25nTGl2ZWRTdGF0ZS5oIgotI2luY2x1ZGUgIkRGR05hdHVyYWxMb29wcy5oIgogI2luY2x1
ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJERkdOb2RlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
REZHUGxhbi5oIgotI2luY2x1ZGUgIkRGR1ByZVBvc3ROdW1iZXJpbmcuaCIKICNpbmNsdWRlICJE
RkdQcm9wZXJ0eVR5cGVLZXkuaCIKICNpbmNsdWRlICJERkdTY2FubmFibGUuaCIKICNpbmNsdWRl
ICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgpAQCAtNTksNiArNTYsMTEgQEAgY2xhc3MgRXhlY1N0
YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgQ0ZHOworY2xhc3MgRG9taW5hdG9yczsK
K2NsYXNzIE5hdHVyYWxMb29wczsKK2NsYXNzIFByZVBvc3ROdW1iZXJpbmc7CisKICNkZWZpbmUg
REZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAg
ICAgICAgIFwKICAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTgyMCw2ICs4
MjIsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNEZWJ1Z2dlckVuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2hhc0RlYnVnZ2VyRW5hYmxlZDsgfQogCisgICAgdm9pZCBlbnN1cmVEb21pbmF0
b3JzKCk7CisgICAgdm9pZCBlbnN1cmVQcmVQb3N0TnVtYmVyaW5nKCk7CisgICAgdm9pZCBlbnN1
cmVOYXR1cmFsTG9vcHMoKTsKKwogICAgIFZNJiBtX3ZtOwogICAgIFBsYW4mIG1fcGxhbjsKICAg
ICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpAQCAtODg1LDkgKzg5MSwxMCBAQCBwdWJsaWM6CiAg
ICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVLaWxscz4+IG1f
Ynl0ZWNvZGVLaWxsczsKICAgICBIYXNoU2V0PHN0ZDo6cGFpcjxKU09iamVjdCosIFByb3BlcnR5
T2Zmc2V0Pj4gbV9zYWZlVG9Mb2FkOwogICAgIEhhc2hNYXA8UHJvcGVydHlUeXBlS2V5LCBJbmZl
cnJlZFR5cGU6OkRlc2NyaXB0b3I+IG1faW5mZXJyZWRUeXBlczsKLSAgICBEb21pbmF0b3JzIG1f
ZG9taW5hdG9yczsKLSAgICBQcmVQb3N0TnVtYmVyaW5nIG1fcHJlUG9zdE51bWJlcmluZzsKLSAg
ICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPERvbWlu
YXRvcnM+IG1fZG9taW5hdG9yczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJlUG9zdE51bWJlcmlu
Zz4gbV9wcmVQb3N0TnVtYmVyaW5nOworICAgIHN0ZDo6dW5pcXVlX3B0cjxOYXR1cmFsTG9vcHM+
IG1fbmF0dXJhbExvb3BzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDRkc+IG1fY2ZnOwogICAgIHVu
c2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fbmV4dE1hY2hpbmVMb2NhbDsKICAg
ICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdCbG9ja01hcElu
bGluZXMuaCIKKyNpbmNsdWRlICJERkdCbG9ja1NldC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHJldmlzaW9u
IDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkRGR0VkZ2VEb21pbmF0
ZXMuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5o
IgorI2luY2x1ZGUgIkRGR05hdHVyYWxMb29wcy5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAj
aW5jbHVkZSAiREZHU2FmZVRvRXhlY3V0ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAg
LTcxLDE1ICs3MiwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG51bGxwdHIsIG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CiAgICAgICAgIAotICAgICAgICBt
X2dyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7Ci0gICAgICAg
IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAg
ICAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsKKyAgICAgICAgbV9ncmFwaC5lbnN1cmVO
YXR1cmFsTG9vcHMoKTsKIAogICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0
YUxvZygiR3JhcGggYmVmb3JlIExJQ006XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgp
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2RhdGEucmVzaXplKG1fZ3JhcGgubV9u
YXR1cmFsTG9vcHMubnVtTG9vcHMoKSk7CisgICAgICAgIG1fZGF0YS5yZXNpemUobV9ncmFwaC5t
X25hdHVyYWxMb29wcy0+bnVtTG9vcHMoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBGaWd1cmUg
b3V0IHRoZSBzZXQgb2YgdGhpbmdzIGVhY2ggbG9vcCB3cml0ZXMgdG8sIG5vdCBpbmNsdWRpbmcg
YmxvY2tzIHRoYXQKICAgICAgICAgLy8gYmVsb25nIHRvIGlubmVyIGxvb3BzLiBXZSBmaXggdGhp
cyBsYXRlci4KQEAgLTk0LDcgKzk1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFibG9j
ay0+Y2ZhSGFzVmlzaXRlZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX2dyYXBoLm1fbmF0dXJh
bExvb3BzLmlubmVyTW9zdExvb3BPZihibG9jayk7CisgICAgICAgICAgICBjb25zdCBOYXR1cmFs
TG9vcCogbG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMtPmlubmVyTW9zdExvb3BPZihibG9j
ayk7CiAgICAgICAgICAgICBpZiAoIWxvb3ApCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBMb29wRGF0YSYgZGF0YSA9IG1fZGF0YVtsb29wLT5pbmRleCgpXTsKQEAgLTEx
NCwxNCArMTE1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgLy8gRm9yIGVhY2ggbG9vcDoKICAgICAg
ICAgLy8gLSBJZGVudGlmeSBpdHMgcHJlLWhlYWRlci4KICAgICAgICAgLy8gLSBNYWtlIHN1cmUg
aXRzIG91dGVyIGxvb3BzIGtub3cgd2hhdCBpdCBjbG9iYmVycy4KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBsb29wSW5kZXggPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLm51bUxvb3BzKCk7IGxvb3BJ
bmRleC0tOykgewotICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSBtX2dyYXBo
Lm1fbmF0dXJhbExvb3BzLmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBs
b29wSW5kZXggPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLT5udW1Mb29wcygpOyBsb29wSW5kZXgt
LTspIHsKKyAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29wID0gbV9ncmFwaC5tX25h
dHVyYWxMb29wcy0+bG9vcChsb29wSW5kZXgpOwogICAgICAgICAgICAgTG9vcERhdGEmIGRhdGEg
PSBtX2RhdGFbbG9vcC5pbmRleCgpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICgK
LSAgICAgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCogb3V0ZXJMb29wID0gbV9ncmFwaC5t
X25hdHVyYWxMb29wcy5pbm5lck1vc3RPdXRlckxvb3AobG9vcCk7CisgICAgICAgICAgICAgICAg
Y29uc3QgTmF0dXJhbExvb3AqIG91dGVyTG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMtPmlu
bmVyTW9zdE91dGVyTG9vcChsb29wKTsKICAgICAgICAgICAgICAgICBvdXRlckxvb3A7Ci0gICAg
ICAgICAgICAgICAgb3V0ZXJMb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5pbm5lck1vc3RP
dXRlckxvb3AoKm91dGVyTG9vcCkpCisgICAgICAgICAgICAgICAgb3V0ZXJMb29wID0gbV9ncmFw
aC5tX25hdHVyYWxMb29wcy0+aW5uZXJNb3N0T3V0ZXJMb29wKCpvdXRlckxvb3ApKQogICAgICAg
ICAgICAgICAgIG1fZGF0YVtvdXRlckxvb3AtPmluZGV4KCldLndyaXRlcy5hZGRBbGwoZGF0YS53
cml0ZXMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBoZWFkZXIgPSBs
b29wLmhlYWRlcigpOwpAQCAtMTM1LDcgKzEzNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaGVhZGVyLT5wcmVkZWNlc3NvcnMuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBoZWFk
ZXItPnByZWRlY2Vzc29yc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWlu
YXRvcnMuZG9taW5hdGVzKGhlYWRlciwgcHJlZGVjZXNzb3IpKQorICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGhlYWRlciwgcHJlZGVjZXNzb3IpKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIHByZUhlYWRl
ciA9IHByZWRlY2Vzc29yOwpAQCAtMTg5LDcgKzE5MCw3IEBAIHB1YmxpYzoKICAgICAgICAgVmVj
dG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gbG9vcFN0YWNrOwogICAgICAgICBib29sIGNoYW5nZWQg
PSBmYWxzZTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tz
SW5QcmVPcmRlcigpKSB7Ci0gICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IG1f
Z3JhcGgubV9uYXR1cmFsTG9vcHMuaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKKyAgICAgICAgICAg
IGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy0+aW5uZXJN
b3N0TG9vcE9mKGJsb2NrKTsKICAgICAgICAgICAgIGlmICghbG9vcCkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIApAQCAtMTk3LDcgKzE5OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGZvciAoCiAgICAgICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGN1cnJl
bnQgPSBsb29wOwogICAgICAgICAgICAgICAgIGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgY3Vy
cmVudCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuaW5uZXJNb3N0T3V0ZXJMb29wKCpjdXJyZW50
KSkKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy0+aW5u
ZXJNb3N0T3V0ZXJMb29wKCpjdXJyZW50KSkKICAgICAgICAgICAgICAgICBsb29wU3RhY2suYXBw
ZW5kKGN1cnJlbnQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBSZW1lbWJlcjogdGhl
IGxvb3Agc3RhY2sgaGFzIHRoZSBpbm5lci1tb3N0IGxvb3AgYXQgaW5kZXggMCwgc28gaWYgd2Ug
d2FudApAQCAtMzMzLDcgKzMzNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGJlY2F1c2UgbW9z
dCBsb29wcyBhcmUgc21hbGwgYW5kIG1vc3QgYmxvY2tzIGJlbG9uZyB0byBmZXcgbG9vcHMuCiAg
ICAgICAgIGZvciAodW5zaWduZWQgYm9keUluZGV4ID0gbG9vcC0+c2l6ZSgpOyBib2R5SW5kZXgt
LTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1YkJsb2NrID0gbG9vcC0+YXQoYm9keUlu
ZGV4KTsKLSAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBzdWJMb29wID0gbV9ncmFwaC5t
X25hdHVyYWxMb29wcy5oZWFkZXJPZihzdWJCbG9jayk7CisgICAgICAgICAgICBjb25zdCBOYXR1
cmFsTG9vcCogc3ViTG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMtPmhlYWRlck9mKHN1YkJs
b2NrKTsKICAgICAgICAgICAgIGlmICghc3ViTG9vcCkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1YlByZUhlYWRlciA9IG1fZGF0YVtzdWJMb29w
LT5pbmRleCgpXS5wcmVIZWFkZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVy
Q3JlYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDkgQEAKIAogI2lu
Y2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRp
b25TZXQuaCIKKyNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdOYXR1cmFsTG9vcHMuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtOTQs
NyArOTYsNyBAQCBCYXNpY0Jsb2NrKiBjcmVhdGVQcmVIZWFkZXIoR3JhcGgmIGdyYXBoCiAgICAg
CiAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvckluZGV4ID0gMDsgcHJlZGVjZXNzb3JJbmRl
eCA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBwcmVkZWNlc3NvckluZGV4KyspIHsKICAg
ICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW3ByZWRl
Y2Vzc29ySW5kZXhdOwotICAgICAgICBpZiAoZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhi
bG9jaywgcHJlZGVjZXNzb3IpKQorICAgICAgICBpZiAoZ3JhcGgubV9kb21pbmF0b3JzLT5kb21p
bmF0ZXMoYmxvY2ssIHByZWRlY2Vzc29yKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBibG9jay0+cHJlZGVjZXNzb3JzW3ByZWRlY2Vzc29ySW5kZXgtLV0gPSBibG9jay0+cHJlZGVj
ZXNzb3JzLmxhc3QoKTsKICAgICAgICAgYmxvY2stPnByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7
CkBAIC0xMjEsMTYgKzEyMywxNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAg
IHsKLSAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3Jh
cGgpOwotICAgICAgICBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmNvbXB1dGVJZk5lY2Vzc2FyeSht
X2dyYXBoKTsKKyAgICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CisgICAgICAgIG1f
Z3JhcGguZW5zdXJlTmF0dXJhbExvb3BzKCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2ln
bmVkIGxvb3BJbmRleCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMubnVtTG9vcHMoKTsgbG9vcElu
ZGV4LS07KSB7Ci0gICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fZ3JhcGgu
bV9uYXR1cmFsTG9vcHMubG9vcChsb29wSW5kZXgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGxv
b3BJbmRleCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMtPm51bUxvb3BzKCk7IGxvb3BJbmRleC0t
OykgeworICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSBtX2dyYXBoLm1fbmF0
dXJhbExvb3BzLT5sb29wKGxvb3BJbmRleCk7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBleGlz
dGluZ1ByZUhlYWRlciA9IDA7CiAgICAgICAgICAgICBib29sIG5lZWRzTmV3UHJlSGVhZGVyID0g
ZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29ySW5kZXggPSBsb29w
LmhlYWRlcigpLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBwcmVkZWNlc3NvckluZGV4LS07KSB7CiAg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBsb29wLmhlYWRlcigpLT5w
cmVkZWNlc3NvcnNbcHJlZGVjZXNzb3JJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhsb29wLmhlYWRlcigpLCBwcmVkZWNlc3NvcikpCisg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXMobG9vcC5o
ZWFkZXIoKSwgcHJlZGVjZXNzb3IpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUHJlSGVhZGVyKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGV4aXN0aW5nUHJlSGVhZGVyID0gcHJlZGVjZXNzb3I7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCShyZXZpc2lvbiAxOTE4MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDE2ICs0MiwxMCBAQCB2b2lkIE5hdHVyYWxMb29wOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpCiAgICAgb3V0LnByaW50KCJdIik7CiB9CiAKLU5hdHVyYWxMb29wczo6TmF0dXJh
bExvb3BzKCkgeyB9Ci1OYXR1cmFsTG9vcHM6On5OYXR1cmFsTG9vcHMoKSB7IH0KLQotdm9pZCBO
YXR1cmFsTG9vcHM6OmNvbXB1dGVEZXBlbmRlbmNpZXMoR3JhcGgmIGdyYXBoKQorTmF0dXJhbExv
b3BzOjpOYXR1cmFsTG9vcHMoR3JhcGgmIGdyYXBoKQogewotICAgIGdyYXBoLm1fZG9taW5hdG9y
cy5jb21wdXRlSWZOZWNlc3NhcnkoZ3JhcGgpOwotfQorICAgIEFTU0VSVChncmFwaC5tX2RvbWlu
YXRvcnMpOwogCi12b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCi17CiAg
ICAgLy8gSW1wbGVtZW50IHRoZSBjbGFzc2ljIGRvbWluYXRvci1iYXNlZCBuYXR1cmFsIGxvb3Ag
ZmluZGVyLiBUaGUgZmlyc3QKICAgICAvLyBzdGVwIGlzIHRvIGZpbmQgYWxsIGNvbnRyb2wgZmxv
dyBlZGdlcyBBIC0+IEIgd2hlcmUgQiBkb21pbmF0ZXMgQS4KICAgICAvLyBUaGVuIEIgaXMgYSBs
b29wIGhlYWRlciBhbmQgQSBpcyBhIGJhY2t3YXJkIGJyYW5jaGluZyBibG9jay4gV2Ugd2lsbApA
QCAtNjQsNyArNTgsNyBAQCB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgp
CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiRG9taW5hdG9yczpc
biIpOwotICAgICAgICBncmFwaC5tX2RvbWluYXRvcnMuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwor
ICAgICAgICBncmFwaC5tX2RvbWluYXRvcnMtPmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKICAgICB9
CiAgICAgCiAgICAgbV9sb29wcy5yZXNpemUoMCk7CkBAIC03Niw3ICs3MCw3IEBAIHZvaWQgTmF0
dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAgICAgICAgCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3IoaSk7Ci0gICAgICAgICAg
ICBpZiAoIWdyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoc3VjY2Vzc29yLCBibG9jaykpCisg
ICAgICAgICAgICBpZiAoIWdyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKHN1Y2Nlc3Nvciwg
YmxvY2spKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbV9sb29wcy5zaXplKCk7
IGotLTspIHsKQEAgLTE5OSw2ICsxOTMsOCBAQCB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShH
cmFwaCYgZ3JhcGgpCiAgICAgICAgIGRhdGFMb2coIlJlc3VsdHM6ICIsICp0aGlzLCAiXG4iKTsK
IH0KIAorTmF0dXJhbExvb3BzOjp+TmF0dXJhbExvb3BzKCkgeyB9CisKIFZlY3Rvcjxjb25zdCBO
YXR1cmFsTG9vcCo+IE5hdHVyYWxMb29wczo6bG9vcHNPZihCYXNpY0Jsb2NrKiBibG9jaykgY29u
c3QKIHsKICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiByZXN1bHQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgJKHJldmlzaW9uIDE5MTgz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDkgKzI4LDExIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2lu
Y2x1ZGUgIkRGR0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTg4LDIyICs5MCwxOSBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1faW5kZXg7CiB9OwogCi1jbGFzcyBOYXR1cmFsTG9vcHMgOiBwdWJsaWMg
QW5hbHlzaXM8TmF0dXJhbExvb3BzPiB7CitjbGFzcyBOYXR1cmFsTG9vcHMgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKE5hdHVyYWxMb29wcyk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgTmF0dXJhbExvb3BzKCk7CisgICAgTmF0dXJhbExvb3BzKEdyYXBo
Jik7CiAgICAgfk5hdHVyYWxMb29wcygpOwogICAgIAotICAgIHZvaWQgY29tcHV0ZURlcGVuZGVu
Y2llcyhHcmFwaCYpOwotICAgIHZvaWQgY29tcHV0ZShHcmFwaCYpOwotICAgIAogICAgIHVuc2ln
bmVkIG51bUxvb3BzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOwog
ICAgICAgICByZXR1cm4gbV9sb29wcy5zaXplKCk7CiAgICAgfQogICAgIGNvbnN0IE5hdHVyYWxM
b29wJiBsb29wKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKICAgICAgICAgcmV0dXJuIG1fbG9vcHNbaV07CiAgICAgfQogICAgIApAQCAtMTExLDcg
KzExMCw2IEBAIHB1YmxpYzoKICAgICAvLyBsb29wIGl0IGJlbG9uZ3MgdG8uCiAgICAgY29uc3Qg
TmF0dXJhbExvb3AqIGhlYWRlck9mKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBsb29w
ID0gaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKICAgICAgICAgaWYgKCFsb29wKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CkBAIC0xMjYsNyArMTI0LDYgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0
IE5hdHVyYWxMb29wKiBpbm5lck1vc3RMb29wT2YoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAg
ICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBibG9jay0+aW5uZXJNb3N0TG9vcEluZGljZXNbMF07CiAgICAgICAgIGlmIChpbmRleCA9PSBV
SU5UX01BWCkKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTM1LDcgKzEzMiw2IEBAIHB1Ymxp
YzoKICAgICAKICAgICBjb25zdCBOYXR1cmFsTG9vcCogaW5uZXJNb3N0T3V0ZXJMb29wKGNvbnN0
IE5hdHVyYWxMb29wJiBsb29wKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWQo
KSk7CiAgICAgICAgIGlmIChsb29wLm1fb3V0ZXJMb29wSW5kZXggPT0gVUlOVF9NQVgpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuICZtX2xvb3BzW2xvb3AubV9vdXRlckxv
b3BJbmRleF07CkBAIC0xNDMsNyArMTM5LDYgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgYmVs
b25nc1RvKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBOYXR1cmFsTG9vcCYgY2FuZGlkYXRlTG9v
cCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgICAgICAvLyBJ
dCdzIGZhc3RlciB0byBkbyB0aGlzIHRlc3QgdXNpbmcgdGhlIGxvb3AgaXRzZWxmLCBpZiBpdCdz
IHNtYWxsLgogICAgICAgICBpZiAoY2FuZGlkYXRlTG9vcC5zaXplKCkgPCA0KQogICAgICAgICAg
ICAgcmV0dXJuIGNhbmRpZGF0ZUxvb3AuY29udGFpbnMoYmxvY2spOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjc5LDYgKzEyNzksMTAg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3Io
bV90ZXJtaW5hbCwgbV90ZXJtaW5hbC0+bnVtU3VjY2Vzc29ycygpKTsKICAgICAgICAgfQorCisg
ICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV90ZXJtaW5hbC0+bnVtU3VjY2Vz
c29ycygpOyB9CisgICAgICAgIEJhc2ljQmxvY2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXJtaW5hbC0+c3VjY2Vzc29yKGluZGV4KTsgfQorICAgICAgICBCYXNpY0Jsb2Nr
KiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CiAg
ICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIG1fdGVybWluYWw7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChieXRl
Y29kZUluZGV4ICE9IFVJTlRfTUFYKTsKICAgICAgICAgCiAgICAgICAgIC8vIE5lZWRlZCBieSBj
cmVhdGVQcmVIZWFkZXIoKS4KLSAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlm
TmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsK
ICAgICAgICAgCiAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBtX2dyYXBoLm1fcHJvZmls
ZWRCbG9jazsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlz
aW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyNyw3ICs3MjcsNyBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgbV9ncmFwaC5jb21wdXRlUmVmQ291bnRzKCk7CiAgICAg
ICAgIG1fZ3JhcGguaW5pdGlhbGl6ZU5vZGVPd25lcnMoKTsKLSAgICAgICAgbV9ncmFwaC5tX2Rv
bWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAgICBtX2dyYXBoLmVu
c3VyZURvbWluYXRvcnMoKTsKICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMobV9ncmFw
aCk7CiAgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhtX2dyYXBoKTsKICAg
ICAgICAgbV9jb21iaW5lZExpdmVuZXNzID0gQ29tYmluZWRMaXZlbmVzcyhtX2dyYXBoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTkxODM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQ0LDkgKzM0NCw5IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5U
aHIKICAgICAvLyBJZiB3ZSdyZSBkb2luZyB2YWxpZGF0aW9uLCB0aGVuIHJ1biBzb21lIGFuYWx5
c2VzLCB0byBnaXZlIHRoZW0gYW4gb3Bwb3J0dW5pdHkKICAgICAvLyB0byBzZWxmLXZhbGlkYXRl
LiBOb3cgaXMgYXMgZ29vZCBhIHRpbWUgYXMgYW55IHRvIGRvIHRoaXMuCiAgICAgaWYgKHZhbGlk
YXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgZGZnLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNl
c3NhcnkoZGZnKTsKLSAgICAgICAgZGZnLm1fbmF0dXJhbExvb3BzLmNvbXB1dGVJZk5lY2Vzc2Fy
eShkZmcpOwotICAgICAgICBkZmcubV9wcmVQb3N0TnVtYmVyaW5nLmNvbXB1dGVJZk5lY2Vzc2Fy
eShkZmcpOworICAgICAgICBkZmcuZW5zdXJlRG9taW5hdG9ycygpOworICAgICAgICBkZmcuZW5z
dXJlTmF0dXJhbExvb3BzKCk7CisgICAgICAgIGRmZy5lbnN1cmVQcmVQb3N0TnVtYmVyaW5nKCk7
CiAgICAgfQogCiAgICAgc3dpdGNoIChtb2RlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHAJKHJldmlzaW9uIDE5MTgzNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDEwICszNCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAotUHJlUG9zdE51bWJlcmluZzo6UHJlUG9zdE51bWJlcmluZygpIHsgfQotUHJl
UG9zdE51bWJlcmluZzo6flByZVBvc3ROdW1iZXJpbmcoKSB7IH0KLQotdm9pZCBQcmVQb3N0TnVt
YmVyaW5nOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKK1ByZVBvc3ROdW1iZXJpbmc6OlByZVBvc3RO
dW1iZXJpbmcoR3JhcGgmIGdyYXBoKQogewogICAgIG1fbWFwID0gQmxvY2tNYXA8TnVtYmVyaW5n
PihncmFwaCk7CiAgICAgCkBAIC02MCw2ICs1Nyw4IEBAIHZvaWQgUHJlUG9zdE51bWJlcmluZzo6
Y29tcHV0ZShHcmFwaCYgZ3IKICAgICB9CiB9CiAKK1ByZVBvc3ROdW1iZXJpbmc6On5QcmVQb3N0
TnVtYmVyaW5nKCkgeyB9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogbmFtZXNwYWNl
IFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3RO
dW1iZXJpbmcuaAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVQb3N0TnVtYmVyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBA
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1ZGUgIkRGR0FuYWx5c2lzLmgiCiAjaW5j
bHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Jsb2NrTWFwLmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC00MCwxMyArNDEsMTMgQEAgZW51bSBF
ZGdlS2luZCB7CiAgICAgQmFja0VkZ2UKIH07CiAKLWNsYXNzIFByZVBvc3ROdW1iZXJpbmcgOiBw
dWJsaWMgQW5hbHlzaXM8UHJlUG9zdE51bWJlcmluZz4geworY2xhc3MgUHJlUG9zdE51bWJlcmlu
ZyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJlUG9zdE51bWJlcmluZyk7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgUHJlUG9zdE51bWJlcmluZygpOwor
ICAgIFByZVBvc3ROdW1iZXJpbmcoR3JhcGgmKTsKICAgICB+UHJlUG9zdE51bWJlcmluZygpOwog
Ci0gICAgdm9pZCBjb21wdXRlKEdyYXBoJik7Ci0gICAgCiAgICAgdW5zaWduZWQgcHJlTnVtYmVy
KEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdCB7IHJldHVybiBtX21hcFtibG9ja10ubV9wcmVOdW1i
ZXI7IH0KICAgICB1bnNpZ25lZCBwb3N0TnVtYmVyKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdCB7
IHJldHVybiBtX21hcFtibG9ja10ubV9wb3N0TnVtYmVyOyB9CiAgICAgCkBAIC05MCw3ICs5MSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIG1fcHJlTnVtYmVyOwogICAgICAgICB1bnNp
Z25lZCBtX3Bvc3ROdW1iZXI7CiAgICAgfTsKLSAgICAKKwogICAgIEJsb2NrTWFwPE51bWJlcmlu
Zz4gbV9tYXA7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0
YWNrU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9ncmFwaC5k
dW1wKCk7CiAgICAgICAgIH0KIAotICAgICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRl
SWZOZWNlc3NhcnkobV9ncmFwaCk7CisgICAgICAgIG1fZ3JhcGguZW5zdXJlRG9taW5hdG9ycygp
OwogICAgICAgICAKICAgICAgICAgU1NBQ2FsY3VsYXRvciBzc2FDYWxjdWxhdG9yKG1fZ3JhcGgp
OwogICAgICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCShyZXZpc2lv
biAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSwxMiArOTUsMTIgQEAgU1NBQ2FsY3VsYXRvcjo6RGVm
KiBTU0FDYWxjdWxhdG9yOjpuZXdEZQogCiBTU0FDYWxjdWxhdG9yOjpEZWYqIFNTQUNhbGN1bGF0
b3I6Om5vbkxvY2FsUmVhY2hpbmdEZWYoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiB2YXJp
YWJsZSkKIHsKLSAgICByZXR1cm4gcmVhY2hpbmdEZWZBdFRhaWwobV9ncmFwaC5tX2RvbWluYXRv
cnMuaW1tZWRpYXRlRG9taW5hdG9yT2YoYmxvY2spLCB2YXJpYWJsZSk7CisgICAgcmV0dXJuIHJl
YWNoaW5nRGVmQXRUYWlsKG1fZ3JhcGgubV9kb21pbmF0b3JzLT5pbW1lZGlhdGVEb21pbmF0b3JP
ZihibG9jayksIHZhcmlhYmxlKTsKIH0KIAogU1NBQ2FsY3VsYXRvcjo6RGVmKiBTU0FDYWxjdWxh
dG9yOjpyZWFjaGluZ0RlZkF0VGFpbChCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFibGUqIHZhcmlh
YmxlKQogewotICAgIGZvciAoOyBibG9jazsgYmxvY2sgPSBtX2dyYXBoLm1fZG9taW5hdG9ycy5p
bW1lZGlhdGVEb21pbmF0b3JPZihibG9jaykpIHsKKyAgICBmb3IgKDsgYmxvY2s7IGJsb2NrID0g
bV9ncmFwaC5tX2RvbWluYXRvcnMtPmltbWVkaWF0ZURvbWluYXRvck9mKGJsb2NrKSkgewogICAg
ICAgICBpZiAoRGVmKiBkZWYgPSBtX2RhdGFbYmxvY2tdLm1fZGVmcy5nZXQodmFyaWFibGUpKQog
ICAgICAgICAgICAgcmV0dXJuIGRlZjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3NiwxMCArMTc2LDEwIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQaGlJbnNl
cnRpb25GdW5jdG9yPgogICAgIHZvaWQgY29tcHV0ZVBoaXMoY29uc3QgUGhpSW5zZXJ0aW9uRnVu
Y3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0
ciwgbV9ncmFwaC5tX2RvbWluYXRvcnMuaXNWYWxpZCgpKTsKKyAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZG9taW5hdG9ycyk7CiAgICAgICAgIAogICAgICAg
ICBmb3IgKFZhcmlhYmxlJiB2YXJpYWJsZSA6IG1fdmFyaWFibGVzKSB7Ci0gICAgICAgICAgICBt
X2dyYXBoLm1fZG9taW5hdG9ycy5mb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNl
RnJvbnRpZXJPZigKKyAgICAgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLT5mb3JBbGxCbG9j
a3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKICAgICAgICAgICAgICAgICB2
YXJpYWJsZS5tX2Jsb2Nrc1dpdGhEZWZzLAogICAgICAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9j
ayogYmxvY2spIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0g
ZnVuY3RvcigmdmFyaWFibGUsIGJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5MTgzNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKICAgICAgICAgCiAgICAgICAg
IG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKLSAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRv
cnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAgICBtX2dyYXBoLmVuc3VyZURv
bWluYXRvcnMoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAg
ICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgU1NBIHRyYW5zZm9ybWF0aW9uOlxuIik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkxODM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGlt
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdOYXR1cmFsTG9vcHMuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKIApAQCAtNDQsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9v
bCBydW4oKQogICAgIHsKLSAgICAgICAgbV9ncmFwaC5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZO
ZWNlc3NhcnkobV9ncmFwaCk7CisgICAgICAgIG1fZ3JhcGguZW5zdXJlTmF0dXJhbExvb3BzKCk7
CiAgICAgICAgIAogICAgICAgICAvLyBFc3RpbWF0ZSBiYXNpYyBibG9jayBleGVjdXRpb24gY291
bnRzIGJhc2VkIG9uIGxvb3AgZGVwdGguCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewpAQCAtNTIsNyArNTMs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgICAgICBibG9jay0+ZXhlY3V0aW9uQ291bnQgPSBwb3coMTAsIG1f
Z3JhcGgubV9uYXR1cmFsTG9vcHMubG9vcERlcHRoKGJsb2NrKSk7CisgICAgICAgICAgICBibG9j
ay0+ZXhlY3V0aW9uQ291bnQgPSBwb3coMTAsIG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMtPmxvb3BE
ZXB0aChibG9jaykpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBFc3RpbWF0ZSBi
cmFuY2ggd2VpZ2h0cyBiYXNlZCBvbiBleGVjdXRpb24gY291bnRzLiBUaGlzIGlzbid0IHF1aXRl
IGNvcnJlY3QuIEl0J2xsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJV
cENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5MTgz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHTmF0
dXJhbExvb3BzLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJGVExDYXBhYmls
aXRpZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC02Niw4ICs2Nyw4IEBAIHB1Ymxp
YzoKIAogICAgICAgICAvLyBGaXJzdCB3ZSBmaW5kIGFsbCB0aGUgbG9vcHMgdGhhdCBjb250YWlu
IGEgTG9vcEhpbnQgZm9yIHdoaWNoIHdlIGNhbm5vdCBPU1IgZW50ZXIuCiAgICAgICAgIC8vIFdl
IHVzZSB0aGF0IGluZm9ybWF0aW9uIHRvIGRlY2lkZSBpZiB3ZSBuZWVkIENoZWNrVGllclVwQW5k
T1NSRW50ZXIgb3IgQ2hlY2tUaWVyVXBXaXRoTmVzdGVkVHJpZ2dlckFuZE9TUkVudGVyLgotICAg
ICAgICBOYXR1cmFsTG9vcHMmIG5hdHVyYWxMb29wcyA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHM7
Ci0gICAgICAgIG5hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CisgICAg
ICAgIG1fZ3JhcGguZW5zdXJlTmF0dXJhbExvb3BzKCk7CisgICAgICAgIE5hdHVyYWxMb29wcyYg
bmF0dXJhbExvb3BzID0gKm1fZ3JhcGgubV9uYXR1cmFsTG9vcHM7CiAKICAgICAgICAgSGFzaFNl
dDxjb25zdCBOYXR1cmFsTG9vcCo+IGxvb3BzQ29udGFpbmluZ0xvb3BIaW50V2l0aG91dE9TUkVu
dGVyID0gZmluZExvb3BzQ29udGFpbmluZ0xvb3BIaW50V2l0aG91dE9TUkVudGVyKG5hdHVyYWxM
b29wcywgbGV2ZWwpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
aW5rLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksOCBAQCB2b2lkIGxpbmsoU3Rh
dGUmIHN0YXRlKQogICAgICAgICAgICAgUHJvZmlsZXI6Ok9yaWdpblN0YWNrKCksCiAgICAgICAg
ICAgICB0b0NTdHJpbmcoIkdlbmVyYXRlZCBGVEwgSklUIGNvZGUgZm9yICIsIENvZGVCbG9ja1dp
dGhKSVRUeXBlKGNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwgIiwgaW5zdHJ1Y3Rpb24gY291
bnQgPSAiLCBncmFwaC5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiOlxuIikpOwog
ICAgICAgICAKLSAgICAgICAgZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShn
cmFwaCk7Ci0gICAgICAgIGdyYXBoLm1fbmF0dXJhbExvb3BzLmNvbXB1dGVJZk5lY2Vzc2FyeShn
cmFwaCk7CisgICAgICAgIGdyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsKKyAgICAgICAgZ3JhcGgu
ZW5zdXJlTmF0dXJhbExvb3BzKCk7CiAgICAgICAgIAogICAgICAgICBjb25zdCBjaGFyKiBwcmVm
aXggPSAiICAgICI7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2lu
Y2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHRG9t
aW5hdG9ycy5oIgogI2luY2x1ZGUgIkRGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVk
ZSAiREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgogI2luY2x1ZGUgIkRGR09TUkV4
aXRGdXp6LmgiCkBAIC0xMjEsNyArMTIyLDcgQEAgcHVibGljOgogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIG5hbWUgPSAianNCb2R5IjsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV9k
b21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAgbV9ncmFwaC5l
bnN1cmVEb21pbmF0b3JzKCk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLm1vZHVsZSA9
CiAgICAgICAgICAgICBtb2R1bGVDcmVhdGVXaXRoTmFtZUluQ29udGV4dChuYW1lLmRhdGEoKSwg
bV9mdGxTdGF0ZS5jb250ZXh0KTsKQEAgLTM4Miw3ICszODMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAg
ICAgICAgICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhtX2hpZ2hCbG9jaywgdGFy
Z2V0KSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXMo
bV9oaWdoQmxvY2ssIHRhcmdldCkpIHsKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBp
bGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJCbG9jayAiLCAq
dGFyZ2V0LCAiIHdpbGwgYmFpbCBhbHNvLlxuIik7CiAgICAgICAgICAgICAgICAgdGFyZ2V0LT5j
ZmFIYXNWaXNpdGVkID0gZmFsc2U7CkBAIC05MTQ5LDcgKzkxNTAsNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKCFtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXModmFsdWUuYmxvY2soKSwgbV9o
aWdoQmxvY2spKQorICAgICAgICBpZiAoIW1fZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXMo
dmFsdWUuYmxvY2soKSwgbV9oaWdoQmxvY2spKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODM1KQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBAQAorMjAx
NS0xMS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIERvbWlu
YXRvcnMgc2hvdWxkIGJlIGZhY3RvcmVkIG91dCBvZiB0aGUgREZHCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3NjQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHRha2VzIHdoYXQgdXNlZCB0byBi
ZSBERkdEb21pbmF0b3JzLmgvREZHRG9taW5hdG9ycy5jcHAgYW5kIHR1cm5zIGl0IGludG8gYSBn
ZW5lcmljCisgICAgICAgIGFsZ29yaXRobSB0aGF0IGNhbiB0YWtlIGFueSBhYnN0cmFjdCBncmFw
aC4gVGhlIGlkZWEgaXMgdGhhdCB5b3UgY3JlYXRlIERvbWluYXRvcnM8Q0ZHPiBhbmQKKyAgICAg
ICAgcGFzcyBpdCBhIENGRyBvYmplY3QsIHdoaWNoIGRlZmluZXMgdGhlIHR5cGVzIG9mIGdyYXBo
IG5vZGVzIGFuZCBtZXRob2RzIGZvciBnZXR0aW5nCisgICAgICAgIHN1Y2Nlc3NvcnMsIHByZWRl
Y2Vzc29ycywgZXRjLiBUaGUgREZHIG5vdyBkZWZpbmVzIGEgY2xhc3MgY2FsbGVkIENGRywgd2hp
Y2ggaXMgYSB3cmFwcGVyIGZvcgorICAgICAgICBERkc6OkdyYXBoIHRoYXQgY29uZm9ybXMgdG8g
dGhlIHRoaW5nIHRoYXQgd3RmL0RvbWluYXRvcnMuaCBleHBlY3RzLgorCisgICAgICAgIFdoZW4g
ZG9pbmcgdGhpbmdzIHRvIGdyYXBocywgaXQncyBjb21tb24gdG8gcmVmZXIgdG8gdGhlIHRoaW5n
cyBpbiB0aGUgZ3JhcGggYXMgIm5vZGVzIi4KKyAgICAgICAgQmVjYXVzZSBJIGludGVuZCB0byBy
ZXVzZSB0aGUgQ0ZHIGFic3RyYWN0aW9uIHdpdGggbWFueSBncmFwaCBhbGdvcml0aG1zLCB0aGF0
IGFic3RyYWN0aW9uIHVzZXMKKyAgICAgICAgdGhlIHRlcm0gIm5vZGUiIHRvIHJlZmVyIHRvIGEg
REZHIGJhc2ljIGJsb2NrLiBCdXQgaW4gRG9taW5hdG9ycywgdGhlIG1ldGhvZCBhbmQgdmFyaWFi
bGUgbmFtZXMKKyAgICAgICAgc3RpbGwgdXNlICJibG9jayIuIFRoaXMgaXMgYmVjYXVzZSBhbHRo
b3VnaCBEb21pbmF0b3JzIGFyZSBhcHBsaWNhYmxlIHRvIGFueSBraW5kIG9mIGRpcmVjdGVkCisg
ICAgICAgIGdyYXBoLCBpdCdzIHN1cGVyIHVubGlrZWx5IHRoYXQgd2Ugd2lsbCBldmVyIHVzZSB0
aGVtIGZvciBhbnl0aGluZyBidXQgY29tcGlsZXJzLiBJbmRlZWQsIHRoZQorICAgICAgICBvbmx5
IHJlYXNvbiB3aHkgSSdtIGZhY3RvcmluZyB0aGVtIG91dCBvZiB0aGUgREZHIGlzIHNvIHRoYXQg
SSBjYW4gdXNlIHRoZW0gd2l0aCBCMyBhbmQgQWlyLgorCisgICAgICAgIFRoaXMgaGFzIHRoZSBu
aWNlIHNpZGUgZWZmZWN0IHRoYXQgYSB1c2VyIG9mIFdURjo6RG9taW5hdG9yczxKU0M6OkRGRzo6
Q0ZHPiB3aWxsIHNlZSBmYW1pbGlhcgorICAgICAgICB0ZXJtaW5vbG9neSBsaWtlICJibG9ja3NT
dHJpY3RseURvbWluYXRlZEJ5KC4uLikiIGluc3RlYWQgb2YgIm5vZGVzU3RyaWN0bHlEb21pbmF0
ZWRCeSguLi4pIiwKKyAgICAgICAgd2hpY2ggd291bGQgYmUgc3VwZXIgY29uZnVzaW5nLgorCisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Eb21pbmF0b3JzLmg6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpEb21pbmF0b3JzOjpEb21pbmF0b3JzKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9y
czo6Y29tcHV0ZSk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OnN0cmljdGx5RG9taW5hdGVz
KToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6ZG9taW5hdGVzKToKKyAgICAgICAgKFdURjo6
RG9taW5hdG9yczo6aW1tZWRpYXRlRG9taW5hdG9yT2YpOgorICAgICAgICAoV1RGOjpEb21pbmF0
b3JzOjpmb3JBbGxTdHJpY3REb21pbmF0b3JzT2YpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3Jz
Ojpmb3JBbGxEb21pbmF0b3JzT2YpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpmb3JBbGxC
bG9ja3NTdHJpY3RseURvbWluYXRlZEJ5KToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6Zm9y
QWxsQmxvY2tzRG9taW5hdGVkQnkpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpzdHJpY3RE
b21pbmF0b3JzT2YpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpkb21pbmF0b3JzT2YpOgor
ICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpibG9ja3NTdHJpY3RseURvbWluYXRlZEJ5KToKKyAg
ICAgICAgKFdURjo6RG9taW5hdG9yczo6YmxvY2tzRG9taW5hdGVkQnkpOgorICAgICAgICAoV1RG
OjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2YpOgorICAgICAg
ICAoV1RGOjpEb21pbmF0b3JzOjpkb21pbmFuY2VGcm9udGllck9mKToKKyAgICAgICAgKFdURjo6
RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YpOgor
ICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9t
aW5hbmNlRnJvbnRpZXJPZik6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6Oml0ZXJhdGVkRG9t
aW5hbmNlRnJvbnRpZXJPZik6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OmR1bXApOgorICAg
ICAgICAoV1RGOjpEb21pbmF0b3JzOjpMZW5nYXVlclRhcmphbjo6TGVuZ2F1ZXJUYXJqYW4pOgor
ICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpMZW5nYXVlclRhcmphbjo6Y29tcHV0ZSk6CisgICAg
ICAgIChXVEY6OkRvbWluYXRvcnM6OkxlbmdhdWVyVGFyamFuOjppbW1lZGlhdGVEb21pbmF0b3Ip
OgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpMZW5nYXVlclRhcmphbjo6Y29tcHV0ZURlcHRo
Rmlyc3RQcmVOdW1iZXJpbmcpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpMZW5nYXVlclRh
cmphbjo6Y29tcHV0ZVNlbWlEb21pbmF0b3JzQW5kSW1wbGljaXRJbW1lZGlhdGVEb21pbmF0b3Jz
KToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6TGVuZ2F1ZXJUYXJqYW46OmNvbXB1dGVFeHBs
aWNpdEltbWVkaWF0ZURvbWluYXRvcnMpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpMZW5n
YXVlclRhcmphbjo6bGluayk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OkxlbmdhdWVyVGFy
amFuOjpldmFsKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6TGVuZ2F1ZXJUYXJqYW46OmNv
bXByZXNzKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6TGVuZ2F1ZXJUYXJqYW46OkJsb2Nr
RGF0YTo6QmxvY2tEYXRhKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6TmFpdmVEb21pbmF0
b3JzOjpOYWl2ZURvbWluYXRvcnMpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpOYWl2ZURv
bWluYXRvcnM6OmRvbWluYXRlcyk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6Ok5haXZlRG9t
aW5hdG9yczo6ZHVtcCk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6Ok5haXZlRG9taW5hdG9y
czo6cHJ1bmVEb21pbmF0b3JzKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6VmFsaWRhdGlv
bkNvbnRleHQ6OlZhbGlkYXRpb25Db250ZXh0KToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6
VmFsaWRhdGlvbkNvbnRleHQ6OnJlcG9ydEVycm9yKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9y
czo6VmFsaWRhdGlvbkNvbnRleHQ6OmhhbmRsZUVycm9ycyk6CisgICAgICAgIChXVEY6OkRvbWlu
YXRvcnM6Om5haXZlRG9taW5hdGVzKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6Zm9yQWxs
QmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mSW1wbCk6CisgICAgICAgIChXVEY6OkRvbWluYXRv
cnM6OmZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mSW1wbCk6CisgICAg
ICAgIChXVEY6OkRvbWluYXRvcnM6OkJsb2NrRGF0YTo6QmxvY2tEYXRhKToKKwogMjAxNS0xMC0z
MCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZ3Jlc3Npb24o
cjE5MTY3Myk6IENyYXNoIGluIFJ1bkxvb3BUaW1lcjo6c2NoZWR1bGUoKQpJbmRleDogU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTE4MzQpCisrKyBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxl
UmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi87
IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3
QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEzIC8q
IFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi87IH07CisJCTBG
NDU3MDQzMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyog
RG9taW5hdG9ycy5oICovOyB9OwogCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2lu
Z0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi87IH07CiAJCTBGODI0
QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFy
a2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzEw
NTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsgfTsKQEAgLTUwLDggKzUxLDgg
QEAKIAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0NDc5QjFCN0FBQTAzMDA5NDk4
RUIgLyogV29yZExvY2suaCAqLzsgfTsKIAkJMEZFQjNEQ0YxQkI1RDY4NDAwOUQ3QUFEIC8qIFNo
YXJlZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi87IH07CiAJCTBGRUIz
REQxMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0REMDFCQjczNjZCMDA5
RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oICovOyB9OwotCQkwRkVDODRCMTFCREFD
RDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFt
YmRhLmggKi87IH07CiAJCTBGRUM4NEFGMUJEODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3Jr
bGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi87IH07CisJCTBG
RUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAv
KiBTY29wZWRMYW1iZGEuaCAqLzsgfTsKIAkJMEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRp
bnlQdHJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi87IH07CiAJCTBGRjg2
MDk1MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdG
IC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi87IH07CiAJCTBGRkYxOURDMUJCMzM0RUIwMDg4NkQ5
MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZGRjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVs
cGVyUG9vbC5jcHAgKi87IH07CkBAIC0zMjEsNiArMzIyLDcgQEAKIAkJMEYyQjY2QTUxN0I2QjRG
NzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZENzJFIC8qIEhh
c2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmFuZG9tLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNDU3MDQyMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21pbmF0b3Jz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvbWluYXRvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtp
bmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFya2luZ0xv
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODI0QTY1MUI3NDQzQTAwMDJF
MzQ1RCAvKiBQYXJraW5nTG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBh
cmtpbmdMb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkxNjY0M0Yx
OTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQ2LDggKzM0
OCw4IEBACiAJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JkTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rv
ckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsVmVj
dG9ySXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZFQzg0QjAxQkRB
Q0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY29wZWRMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZF
Qzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoTm9kZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NvcGVkTGFtYmRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55
UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8q
IFBvaW50ZXJDb21wYXJpc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBv
aW50ZXJDb21wYXJpc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkYxOURB
MUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyYWxsZWxIZWxwZXJQb29sLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2NCw2ICs3NjYsNyBAQAogCQkJCTBGMkI2NkE0MTdCNkI0
RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovLAogCQkJCUE4QTQ3MjdFMTUx
QTgyNUEwMDQxMjNGRiAvKiBEZXF1ZS5oICovLAogCQkJCUE4QTQ3MjdGMTUxQTgyNUEwMDQxMjNG
RiAvKiBEaXNhbGxvd0NUeXBlLmggKi8sCisJCQkJMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8q
IERvbWluYXRvcnMuaCAqLywKIAkJCQlBOEE0NzI4MDE1MUE4MjVBMDA0MTIzRkYgLyogRG91Ymx5
TGlua2VkTGlzdC5oICovLAogCQkJCUE4QTQ3Mjk3MTUxQTgyNUEwMDQxMjNGRiAvKiBkdG9hLmNw
cCAqLywKIAkJCQlBOEE0NzI5ODE1MUE4MjVBMDA0MTIzRkYgLyogZHRvYS5oICovLApAQCAtMTE4
NSw2ICsxMTg4LDcgQEAKIAkJCQkxQUZERTY1MzE5NTNCMjNEMDBDNDhGRkEgLyogT3B0aW9uYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0Y2MTUxQTgyNUIwMDQxMjNGRiAvKiBPU0FsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NCQkEwNzQxOUJCN0ZEQzAwQkJGMDI1IC8qIE9T
T2JqZWN0UHRyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjQ1NzA0MzFCRTVCNThGMDA2MkE2Mjkg
LyogRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkExNTFBODI1QjAwNDEy
M0ZGIC8qIE9TUmFuZG9tU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRTE1MUE4
MjVCMDA0MTIzRkYgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzNGRjE1MUE4MjVCMDA0MTIzRkYgLyogUGFnZUFsbG9jYXRpb24uaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNiw2ICsxNiw3IEBAIHNldChX
VEZfSEVBREVSUwogICAgIEN1cnJlbnRUaW1lLmgKICAgICBEYXRhTG9nLmgKICAgICBEYXRlTWF0
aC5oCisgICAgRG9taW5hdG9ycy5oCiAgICAgRGVjaW1hbE51bWJlci5oCiAgICAgRGVmZXJyYWJs
ZVJlZkNvdW50ZWQuaAogICAgIERlcXVlLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RvbWluYXRv
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3JzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV1RGL3d0Zi9Eb21pbmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZEb21pbmF0b3JzX2gKKyNkZWZpbmUgV1RGRG9taW5h
dG9yc19oCisKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKKy8vIFRoaXMgaXMgYSB1dGlsaXR5IGZvciBmaW5kaW5nIHRoZSBkb21pbmF0b3Jz
IG9mIGEgZ3JhcGguIERvbWluYXRvcnMgYXJlIGFsbW9zdCB1bml2ZXJzYWxseSB1c2VkCisvLyBm
b3IgY29udHJvbCBmbG93IGdyYXBoIGFuYWx5c2lzLCBzbyB0aGlzIGNvZGUgd2lsbCByZWZlciB0
byB0aGUgZ3JhcGgncyAibm9kZXMiIGFzICJibG9ja3MiLiBJbgorLy8gdGhhdCByZWdhcmQgdGhp
cyBjb2RlIGlzIGtpbmQgb2Ygc3BlY2lhbGl6ZWQgZm9yIHRoZSB2YXJpb3VzIEpTQyBjb21waWxl
cnMsIGJ1dCB5b3UgY291bGQgdXNlIGl0CisvLyBmb3Igbm9uLWNvbXBpbGVyIHRoaW5ncyBpZiB5
b3UgYXJlIE9LIHdpdGggcmVmZXJyaW5nIHRvIHlvdXIgIm5vZGVzIiBhcyAiYmxvY2tzIi4KKwor
dGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+CitjbGFzcyBEb21pbmF0b3JzIHsKK3B1YmxpYzoKKyAg
ICBEb21pbmF0b3JzKEdyYXBoJiBncmFwaCwgYm9vbCBzZWxmQ2hlY2sgPSBmYWxzZSkKKyAgICAg
ICAgOiBtX2dyYXBoKGdyYXBoKQorICAgIHsKKyAgICAgICAgTGVuZ2F1ZXJUYXJqYW4gbGVuZ2F1
ZXJUYXJqYW4obV9ncmFwaCk7CisgICAgICAgIGxlbmdhdWVyVGFyamFuLmNvbXB1dGUoKTsKKwor
ICAgICAgICBtX2RhdGEgPSBtX2dyYXBoLnRlbXBsYXRlIG5ld01hcDxCbG9ja0RhdGE+KCk7Cisg
ICAgCisgICAgICAgIC8vIEZyb20gaGVyZSB3ZSB3YW50IHRvIGJ1aWxkIGEgc3Bhbm5pbmcgdHJl
ZSB3aXRoIGJvdGggdXB3YXJkIGFuZCBkb3dud2FyZCBsaW5rcyBhbmQgd2Ugd2FudAorICAgICAg
ICAvLyB0byBkbyBhIHNlYXJjaCBvdmVyIHRoaXMgdHJlZSB0byBjb21wdXRlIHByZSBhbmQgcG9z
dCBudW1iZXJzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRvbWluYW5jZQorICAgICAgICAvLyB0ZXN0
cy4KKyAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1O
b2RlcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9k
ZSBibG9jayA9IG1fZ3JhcGgubm9kZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAgdHlw
ZW5hbWUgR3JhcGg6Ok5vZGUgaWRvbUJsb2NrID0gbGVuZ2F1ZXJUYXJqYW4uaW1tZWRpYXRlRG9t
aW5hdG9yKGJsb2NrKTsKKyAgICAgICAgICAgIG1fZGF0YVtibG9ja10uaWRvbVBhcmVudCA9IGlk
b21CbG9jazsKKyAgICAgICAgICAgIGlmIChpZG9tQmxvY2spCisgICAgICAgICAgICAgICAgbV9k
YXRhW2lkb21CbG9ja10uaWRvbUtpZHMuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgfQorICAgIAor
ICAgICAgICB1bnNpZ25lZCBuZXh0UHJlTnVtYmVyID0gMDsKKyAgICAgICAgdW5zaWduZWQgbmV4
dFBvc3ROdW1iZXIgPSAwOworICAgIAorICAgICAgICAvLyBQbGFpbiBzdGFjay1iYXNlZCB3b3Jr
bGlzdCBiZWNhdXNlIHdlIGFyZSBndWFyYW50ZWVkIHRvIHNlZSBlYWNoIGJsb2NrIGV4YWN0bHkg
b25jZSBhbnl3YXkuCisgICAgICAgIFZlY3RvcjxHcmFwaE5vZGVXaXRoT3JkZXI8dHlwZW5hbWUg
R3JhcGg6Ok5vZGU+PiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kKEdyYXBoTm9k
ZVdpdGhPcmRlcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZT4obV9ncmFwaC5ub2RlKDApLCBHcmFwaFZp
c2l0T3JkZXI6OlByZSkpOworICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgR3JhcGhOb2RlV2l0aE9yZGVyPHR5cGVuYW1lIEdyYXBoOjpOb2RlPiBpdGVt
ID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIHN3aXRjaCAoaXRlbS5vcmRlcikg
eworICAgICAgICAgICAgY2FzZSBHcmFwaFZpc2l0T3JkZXI6OlByZToKKyAgICAgICAgICAgICAg
ICBtX2RhdGFbaXRlbS5ub2RlXS5wcmVOdW1iZXIgPSBuZXh0UHJlTnVtYmVyKys7CisgICAgICAg
ICAgICAgICAgd29ya2xpc3QuYXBwZW5kKEdyYXBoTm9kZVdpdGhPcmRlcjx0eXBlbmFtZSBHcmFw
aDo6Tm9kZT4oaXRlbS5ub2RlLCBHcmFwaFZpc2l0T3JkZXI6OlBvc3QpKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGtpZCA6IG1fZGF0YVtpdGVtLm5vZGVdLmlk
b21LaWRzKQorICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoR3JhcGhOb2RlV2l0
aE9yZGVyPHR5cGVuYW1lIEdyYXBoOjpOb2RlPihraWQsIEdyYXBoVmlzaXRPcmRlcjo6UHJlKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdyYXBoVmlzaXRPcmRl
cjo6UG9zdDoKKyAgICAgICAgICAgICAgICBtX2RhdGFbaXRlbS5ub2RlXS5wb3N0TnVtYmVyID0g
bmV4dFBvc3ROdW1iZXIrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAoc2VsZkNoZWNrKSB7CisgICAgICAgICAgICAv
LyBDaGVjayBvdXIgZG9taW5hdG9yIGNhbGN1bGF0aW9uOgorICAgICAgICAgICAgLy8gMSkgQ2hl
Y2sgdGhhdCBvdXIgcmFuZ2UtYmFzZWQgYW5jZXN0cnkgdGVzdCBpcyB0aGUgc2FtZSBhcyBhIG5h
aXZlIGFuY2VzdHJ5IHRlc3QuCisgICAgICAgICAgICAvLyAyKSBDaGVjayB0aGF0IG91ciBub3Rp
b24gb2Ygd2hvIGRvbWluYXRlcyB3aG9tIGlzIGlkZW50aWNhbCB0byBhIG5haXZlIChub3QKKyAg
ICAgICAgICAgIC8vICAgIExlbmdhdWVyLVRhcmphbikgZG9taW5hdG9yIGNhbGN1bGF0aW9uLgor
ICAgICAgICAKKyAgICAgICAgICAgIFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQobV9ncmFwaCwg
KnRoaXMpOworICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgZnJvbUJsb2NrSW5k
ZXggPSBtX2dyYXBoLm51bU5vZGVzKCk7IGZyb21CbG9ja0luZGV4LS07KSB7CisgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgZnJvbUJsb2NrID0gbV9ncmFwaC5ub2RlKGZyb21C
bG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWZyb21CbG9jayB8fCBtX2RhdGFbZnJv
bUJsb2NrXS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdG9CbG9ja0luZGV4ID0gbV9ncmFw
aC5udW1Ob2RlcygpOyB0b0Jsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgR3JhcGg6Ok5vZGUgdG9CbG9jayA9IG1fZ3JhcGgubm9kZSh0b0Jsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXRvQmxvY2sgfHwgbV9kYXRhW3RvQmxvY2tdLnByZU51
bWJlciA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoZG9taW5hdGVzKGZyb21CbG9j
aywgdG9CbG9jaykgIT0gbmFpdmVEb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0RXJyb3IoZnJvbUJsb2NrLCB0b0Jsb2Nr
LCAiUmFuZ2UtYmFzZWQgZG9taW5hdGlvbiBjaGVjayBpcyBicm9rZW4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGRvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxvY2spICE9IGNvbnRleHQubmFp
dmVEb21pbmF0b3JzLmRvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxvY2spKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRvQmxvY2ssICJMZW5n
YXVlci1UYXJqYW4gZG9taW5hdGlvbiBpcyBicm9rZW4iKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgY29udGV4dC5oYW5kbGVFcnJvcnMo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgc3RyaWN0bHlEb21pbmF0ZXModHlwZW5h
bWUgR3JhcGg6Ok5vZGUgZnJvbSwgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgdG8pIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9kYXRhW3RvXS5wcmVOdW1iZXIgPiBtX2RhdGFbZnJvbV0ucHJl
TnVtYmVyCisgICAgICAgICAgICAmJiBtX2RhdGFbdG9dLnBvc3ROdW1iZXIgPCBtX2RhdGFbZnJv
bV0ucG9zdE51bWJlcjsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb21pbmF0ZXModHlwZW5hbWUg
R3JhcGg6Ok5vZGUgZnJvbSwgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgdG8pIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gZnJvbSA9PSB0byB8fCBzdHJpY3RseURvbWluYXRlcyhmcm9tLCB0byk7
CisgICAgfQorICAgIAorICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGltbWVkaWF0ZURvbWluYXRv
ck9mKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZGF0YVtibG9ja10uaWRvbVBhcmVudDsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbFN0cmljdERvbWluYXRvcnNPZih0eXBl
bmFtZSBHcmFwaDo6Tm9kZSB0bywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7
CisgICAgICAgIGZvciAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBtX2RhdGFbdG9dLmlk
b21QYXJlbnQ7IGJsb2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10uaWRvbVBhcmVudCkKKyAgICAg
ICAgICAgIGZ1bmN0b3IoYmxvY2spOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsRG9taW5hdG9yc09mKHR5cGVuYW1lIEdyYXBoOjpO
b2RlIHRvLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9y
ICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IHRvOyBibG9jazsgYmxvY2sgPSBtX2RhdGFb
YmxvY2tdLmlkb21QYXJlbnQpCisgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEJsb2Nr
c1N0cmljdGx5RG9taW5hdGVkQnkodHlwZW5hbWUgR3JhcGg6Ok5vZGUgZnJvbSwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3Rvcjx0eXBlbmFtZSBHcmFw
aDo6Tm9kZSwgMTY+IHdvcmtsaXN0OworICAgICAgICB3b3JrbGlzdC5hcHBlbmRWZWN0b3IobV9k
YXRhW2Zyb21dLmlkb21LaWRzKTsKKyAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gd29ya2xpc3QudGFr
ZUxhc3QoKTsKKyAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOworICAgICAgICAgICAgd29ya2xp
c3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtibG9ja10uaWRvbUtpZHMpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxC
bG9ja3NEb21pbmF0ZWRCeSh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBmcm9tLCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgVmVjdG9yPHR5cGVuYW1lIEdyYXBoOjpO
b2RlLCAxNj4gd29ya2xpc3Q7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChmcm9tKTsKKyAgICAg
ICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHR5cGVuYW1lIEdy
YXBoOjpOb2RlIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGZ1bmN0
b3IoYmxvY2spOworICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtibG9j
a10uaWRvbUtpZHMpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHR5cGVuYW1lIEdyYXBo
OjpTZXQgc3RyaWN0RG9taW5hdG9yc09mKHR5cGVuYW1lIEdyYXBoOjpOb2RlIHRvKSBjb25zdAor
ICAgIHsKKyAgICAgICAgdHlwZW5hbWUgR3JhcGg6OlNldCByZXN1bHQ7CisgICAgICAgIGZvckFs
bFN0cmljdERvbWluYXRvcnNPZigKKyAgICAgICAgICAgIHRvLAorICAgICAgICAgICAgWyZdICh0
eXBlbmFtZSBHcmFwaDo6Tm9kZSBub2RlKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChu
b2RlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICB0eXBlbmFtZSBHcmFwaDo6U2V0IGRvbWluYXRvcnNPZih0eXBlbmFtZSBHcmFwaDo6
Tm9kZSB0bykgY29uc3QKKyAgICB7CisgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpTZXQgcmVzdWx0
OworICAgICAgICBmb3JBbGxEb21pbmF0b3JzT2YoCisgICAgICAgICAgICB0bywKKyAgICAgICAg
ICAgIFsmXSAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9kZSkgeworICAgICAgICAgICAgICAgIHJl
c3VsdC5hZGQobm9kZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgdHlwZW5hbWUgR3JhcGg6OlNldCBibG9ja3NTdHJpY3RseURvbWlu
YXRlZEJ5KHR5cGVuYW1lIEdyYXBoOjpOb2RlIGZyb20pIGNvbnN0CisgICAgeworICAgICAgICB0
eXBlbmFtZSBHcmFwaDo6U2V0IHJlc3VsdDsKKyAgICAgICAgZm9yQWxsQmxvY2tzU3RyaWN0bHlE
b21pbmF0ZWRCeSgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKHR5cGVuYW1l
IEdyYXBoOjpOb2RlIG5vZGUpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKG5vZGUpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHR5cGVuYW1lIEdyYXBoOjpTZXQgYmxvY2tzRG9taW5hdGVkQnkodHlwZW5hbWUgR3JhcGg6Ok5v
ZGUgZnJvbSkgY29uc3QKKyAgICB7CisgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpTZXQgcmVzdWx0
OworICAgICAgICBmb3JBbGxCbG9ja3NEb21pbmF0ZWRCeSgKKyAgICAgICAgICAgIGZyb20sCisg
ICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUpIHsKKyAgICAgICAgICAg
ICAgICByZXN1bHQuYWRkKG5vZGUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2YoCisgICAgICAgIHR5cGVuYW1l
IEdyYXBoOjpOb2RlIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgewor
ICAgICAgICB0eXBlbmFtZSBHcmFwaDo6U2V0IHNldDsKKyAgICAgICAgZm9yQWxsQmxvY2tzSW5E
b21pbmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBb
Jl0gKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKHNl
dC5hZGQoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAg
ICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICB0eXBlbmFtZSBHcmFwaDo6U2V0IGRvbWluYW5j
ZUZyb250aWVyT2YodHlwZW5hbWUgR3JhcGg6Ok5vZGUgZnJvbSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHR5cGVuYW1lIEdyYXBoOjpTZXQgcmVzdWx0OworICAgICAgICBmb3JBbGxCbG9ja3NJbkRv
bWluYW5jZUZyb250aWVyT2YoCisgICAgICAgICAgICBmcm9tLAorICAgICAgICAgICAgWyZdICh0
eXBlbmFtZSBHcmFwaDo6Tm9kZSBub2RlKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChu
b2RlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tz
SW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoY29uc3QgdHlwZW5hbWUgR3JhcGg6Okxpc3Qm
IGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JBbGxCbG9j
a3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgICAgIGZyb20s
CisgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgY2xv
c2UgcmVsYXRpdmUgb2YgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2Yo
KSwgd2hpY2ggYWxsb3dzIHRoZQorICAgIC8vIGdpdmVuIGZ1bmN0b3IgdG8gcmV0dXJuIGZhbHNl
IHRvIGluZGljYXRlIHRoYXQgd2UgZG9uJ3Qgd2lzaCB0byBjb25zaWRlciB0aGUgZ2l2ZW4gYmxv
Y2suCisgICAgLy8gVXNlZnVsIGZvciBjb21wdXRpbmcgcHJ1bmVkIFNTQSBmb3JtLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJblBydW5lZEl0
ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgY29uc3QgdHlwZW5hbWUgR3JhcGg6
Okxpc3QmIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICB0eXBl
bmFtZSBHcmFwaDo6U2V0IHNldDsKKyAgICAgICAgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWlu
YW5jZUZyb250aWVyT2ZJbXBsKAorICAgICAgICAgICAgZnJvbSwKKyAgICAgICAgICAgIFsmXSAo
dHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2spIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGlm
ICghc2V0LmFkZChibG9jaykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZnVuY3RvcihibG9jayk7CisgICAgICAgICAgICB9KTsKKyAg
ICB9CisgICAgCisgICAgdHlwZW5hbWUgR3JhcGg6OlNldCBpdGVyYXRlZERvbWluYW5jZUZyb250
aWVyT2YoY29uc3QgdHlwZW5hbWUgR3JhcGg6Okxpc3QmIGZyb20pIGNvbnN0CisgICAgeworICAg
ICAgICB0eXBlbmFtZSBHcmFwaDo6U2V0IHJlc3VsdDsKKyAgICAgICAgZm9yQWxsQmxvY2tzSW5J
dGVyYXRlZERvbWluYW5jZUZyb250aWVyT2ZJbXBsKAorICAgICAgICAgICAgZnJvbSwKKyAgICAg
ICAgICAgIFsmXSAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9kZSkgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdC5hZGQobm9kZSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9kYXRhLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAg
ICBpZiAobV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciA9PSBVSU5UX01BWCkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0LnByaW50KCIg
ICAgQmxvY2sgIyIsIGJsb2NrSW5kZXgsICI6IGlkb20gPSAiLCBwb2ludGVyRHVtcChtX2RhdGFb
YmxvY2tJbmRleF0uaWRvbVBhcmVudCksICIsIGlkb21LaWRzID0gWyIpOworICAgICAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICptX2RhdGFbYmxvY2tJbmRleF0uaWRvbUtpZHNbaV0pOworICAg
ICAgICAgICAgb3V0LnByaW50KCJdLCBwcmUvcG9zdCA9ICIsIG1fZGF0YVtibG9ja0luZGV4XS5w
cmVOdW1iZXIsICIvIiwgbV9kYXRhW2Jsb2NrSW5kZXhdLnBvc3ROdW1iZXIsICJcbiIpOworICAg
ICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICAvLyBUaGlzIGltcGxlbWVudHMgTGVu
Z2F1ZXIgYW5kIFRhcmphbidzICJBIEZhc3QgQWxnb3JpdGhtIGZvciBGaW5kaW5nIERvbWluYXRv
cnMgaW4gYSBGbG93Z3JhcGgiCisgICAgLy8gKFRPUExBUyAxOTc5KS4gSXQgdXNlcyB0aGUgInNp
bXBsZSIgaW1wbGVtZW50YXRpb24gb2YgTElOSyBhbmQgRVZBTCwgd2hpY2ggeWllbGRzIGFuIE8o
biBsb2cgbikKKyAgICAvLyBzb2x1dGlvbi4gVGhlIGZ1bGwgcGFwZXIgaXMgbGlua2VkIGJlbG93
OyB0aGlzIGNvZGUgYXR0ZW1wdHMgdG8gY2xvc2VseSBmb2xsb3cgdGhlIGFsZ29yaXRobSBhcwor
ICAgIC8vIGl0IGlzIHByZXNlbnRlZCBpbiB0aGUgcGFwZXI7IGluIHBhcnRpY3VsYXIgc2VjdGlv
bnMgMyBhbmQgNCBhcyB3ZWxsIGFzIGFwcGVuZGl4IEIuCisgICAgLy8gaHR0cHM6Ly93d3cuY3Mu
cHJpbmNldG9uLmVkdS9jb3Vyc2VzL2FyY2hpdmUvZmFsbDAzL2NzNTI4L2hhbmRvdXRzL2ElMjBm
YXN0JTIwYWxnb3JpdGhtJTIwZm9yJTIwZmluZGluZy5wZGYKKyAgICAvLworICAgIC8vIFRoaXMg
Y29kZSBpcyB2ZXJ5IHN1YnRsZS4gVGhlIExlbmdhdWVyLVRhcmphbiBhbGdvcml0aG0gaXMgaW5j
cmVkaWJseSBkZWVwIHRvIGJlZ2luIHdpdGguIFRoZQorICAgIC8vIGdvYWwgb2YgdGhpcyBjb2Rl
IGlzIHRvIGZvbGxvdyB0aGUgY29kZSBpbiB0aGUgcGFwZXIsIGhvd2V2ZXIgb3VyIGltcGxlbWVu
dGF0aW9uIG11c3QgZGV2aWF0ZQorICAgIC8vIGZyb20gdGhlIHBhcGVyIHdoZW4gaXQgY29tZXMg
dG8gcmVjdXJzaW9uLiBUaGUgYXV0aG9ycyBoYWQgdXNlZCByZWN1cnNpb24gdG8gaW1wbGVtZW50
IERGUywgYW5kCisgICAgLy8gYWxzbyB0byBpbXBsZW1lbnQgdGhlICJzaW1wbGUiIEVWQUwuIFdl
IGNvbnZlcnQgYm90aCBvZiB0aG9zZSBpbnRvIHdvcmtsaXN0LWJhc2VkIHNvbHV0aW9ucy4KKyAg
ICAvLyBGaW5hbGx5LCBvbmNlIHRoZSBhbGdvcml0aG0gZ2l2ZXMgdXMgaW1tZWRpYXRlIGRvbWlu
YXRvcnMsIHdlIGltcGxlbWVudCBkb21pbmFuY2UgdGVzdHMgYnkKKyAgICAvLyB3YWxraW5nIHRo
ZSBkb21pbmF0b3IgdHJlZSBhbmQgY29tcHV0aW5nIHByZSBhbmQgcG9zdCBudW1iZXJzLiBXZSB0
aGVuIHVzZSB0aGUgcmFuZ2UgaW5jbHVzaW9uCisgICAgLy8gY2hlY2sgdHJpY2sgdGhhdCB3YXMg
Zmlyc3QgZGlzY292ZXJlZCBieSBQYXVsIEYuIERpZXR6IGluIDE5ODIgaW4gIk1haW50YWluaW5n
IG9yZGVyIGluIGEgbGlua2VkCisgICAgLy8gbGlzdCIgKHNlZSBodHRwOi8vZGwuYWNtLm9yZy9j
aXRhdGlvbi5jZm0/aWQ9ODAyMTg0KS4KKworICAgIGNsYXNzIExlbmdhdWVyVGFyamFuIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIExlbmdhdWVyVGFyamFuKEdyYXBoJiBncmFwaCkKKyAgICAgICAg
ICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgICAgICwgbV9kYXRhKGdyYXBoLnRlbXBsYXRl
IG5ld01hcDxCbG9ja0RhdGE+KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtTm9kZXMoKTsgYmxvY2tJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gbV9ncmFwaC5ub2RlKGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1fZGF0YVtibG9ja10ubGFiZWwgPSBibG9j
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIGNvbXB1dGUo
KQorICAgICAgICB7CisgICAgICAgICAgICBjb21wdXRlRGVwdGhGaXJzdFByZU51bWJlcmluZygp
OyAvLyBTdGVwIDEuCisgICAgICAgICAgICBjb21wdXRlU2VtaURvbWluYXRvcnNBbmRJbXBsaWNp
dEltbWVkaWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcHMgMiBhbmQgMy4KKyAgICAgICAgICAgIGNv
bXB1dGVFeHBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcCA0LgorICAgICAgICB9
CisgICAgCisgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGltbWVkaWF0ZURvbWluYXRvcih0
eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fZGF0YVtibG9ja10uZG9tOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2
b2lkIGNvbXB1dGVEZXB0aEZpcnN0UHJlTnVtYmVyaW5nKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gVXNlIGEgYmxvY2sgd29ya2xpc3QgdGhhdCBhbHNvIHRyYWNrcyB0aGUgaW5kZXggaW5z
aWRlIHRoZSBzdWNjZXNzb3IgbGlzdC4gVGhpcyBpcworICAgICAgICAgICAgLy8gbmVjZXNzYXJ5
IGZvciBlbnN1cmluZyB0aGF0IHdlIGRvbid0IGF0dGVtcHQgdG8gdmlzaXQgYSBzdWNjZXNzb3Ig
dW50aWwgdGhlIHByZXZpb3VzCisgICAgICAgICAgICAvLyBzdWNjZXNzb3JzIHRoYXQgd2UgaGFk
IHZpc2l0ZWQgYXJlIGZ1bGx5IHByb2Nlc3NlZC4gVGhpcyBlbmRzIHVwIGJlaW5nIHJldmVhbGVk
IGluIHRoZQorICAgICAgICAgICAgLy8gb3V0cHV0IG9mIHRoaXMgbWV0aG9kIGJlY2F1c2UgdGhl
IGZpcnN0IHRpbWUgd2Ugc2VlIGFuIGVkZ2UgdG8gYSBibG9jaywgd2Ugc2V0IHRoZQorICAgICAg
ICAgICAgLy8gYmxvY2sncyBwYXJlbnQuIFNvLCBpZiB3ZSBoYXZlOgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIEEgLT4gQgorICAgICAgICAgICAgLy8gQSAtPiBDCisgICAgICAgICAg
ICAvLyBCIC0+IEMKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBBbmQgd2UncmUgcHJv
Y2Vzc2luZyBBLCB0aGVuIHdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgaWYgd2Ugc2VlIEEtPkIgZmly
c3QgKGFuZCBoZW5jZSBzZXQKKyAgICAgICAgICAgIC8vIEIncyBwcmVudW1iZXIgYmVmb3JlIHdl
IHNldCBDJ3MpIHRoZW4gd2UgYWxzbyBlbmQgdXAgc2V0dGluZyBDJ3MgcGFyZW50IHRvIEIgYnkg
dmlydHVlCisgICAgICAgICAgICAvLyBvZiBub3Qgbm90aWNpbmcgQS0+QyB1bnRpbCB3ZSdyZSBk
b25lIHByb2Nlc3NpbmcgQi4KKworICAgICAgICAgICAgRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlz
dDx0eXBlbmFtZSBHcmFwaDo6Tm9kZSwgdW5zaWduZWQsIHR5cGVuYW1lIEdyYXBoOjpTZXQ+IHdv
cmtsaXN0OworICAgICAgICAgICAgd29ya2xpc3QucHVzaChtX2dyYXBoLm5vZGUoMCksIDApOwor
ICAgICAgICAKKyAgICAgICAgICAgIHdoaWxlIChHcmFwaE5vZGVXaXRoPHR5cGVuYW1lIEdyYXBo
OjpOb2RlLCB1bnNpZ25lZD4gaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBpdGVtLm5vZGU7CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBpdGVtLmRhdGE7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAvLyBXZSBpbml0aWFsbHkgcHVzaCB3aXRoIHN1Y2Nlc3NvckluZGV4ID0g
MCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHdlIGhhdmUgYW55CisgICAgICAgICAgICAg
ICAgLy8gc3VjY2Vzc29ycy4gVGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBhc3NpZ24gb3VyIHByZW51
bWJlci4gU3Vic2VxdWVudGx5IHdlIGdldCBwdXNoZWQKKyAgICAgICAgICAgICAgICAvLyB3aXRo
IGhpZ2hlciBzdWNjZXNzb3JJbmRleCB2YWx1ZXMsIGJ1dCBvbmx5IGlmIHRoZXkgYXJlIGluIHJh
bmdlLgorICAgICAgICAgICAgICAgIEFTU0VSVCghc3VjY2Vzc29ySW5kZXggfHwgc3VjY2Vzc29y
SW5kZXggPCBtX2dyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spLnNpemUoKSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3NvckluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIG1fZGF0YVti
bG9ja10uc2VtaU51bWJlciA9IG1fYmxvY2tCeVByZU51bWJlci5zaXplKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fYmxvY2tCeVByZU51bWJlci5hcHBlbmQoYmxvY2spOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3JJbmRleCA8
IG1fZ3JhcGguc3VjY2Vzc29ycyhibG9jaykuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG5leHRTdWNjZXNzb3JJbmRleCA9IHN1Y2Nlc3NvckluZGV4ICsgMTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG5leHRTdWNjZXNzb3JJbmRleCA8IG1fZ3JhcGguc3VjY2Vzc29y
cyhibG9jaykuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuZm9yY2VQ
dXNoKGJsb2NrLCBuZXh0U3VjY2Vzc29ySW5kZXgpOworCisgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIEdyYXBoOjpOb2RlIHN1Y2Nlc3NvckJsb2NrID0gbV9ncmFwaC5zdWNjZXNzb3JzKGJs
b2NrKVtzdWNjZXNzb3JJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGlmICh3b3JrbGlzdC5w
dXNoKHN1Y2Nlc3NvckJsb2NrLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YVtz
dWNjZXNzb3JCbG9ja10ucGFyZW50ID0gYmxvY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgY29tcHV0ZVNlbWlEb21pbmF0
b3JzQW5kSW1wbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBjdXJyZW50UHJlTnVtYmVyID0gbV9ibG9ja0J5UHJlTnVtYmVyLnNp
emUoKTsgY3VycmVudFByZU51bWJlci0tID4gMTspIHsKKyAgICAgICAgICAgICAgICB0eXBlbmFt
ZSBHcmFwaDo6Tm9kZSBibG9jayA9IG1fYmxvY2tCeVByZU51bWJlcltjdXJyZW50UHJlTnVtYmVy
XTsKKyAgICAgICAgICAgICAgICBCbG9ja0RhdGEmIGJsb2NrRGF0YSA9IG1fZGF0YVtibG9ja107
CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBTdGVwIDI6CisgICAgICAgICAgICAg
ICAgZm9yICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBwcmVkZWNlc3NvckJsb2NrIDogbV9ncmFwaC5w
cmVkZWNlc3NvcnMoYmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBo
OjpOb2RlIGludGVybWVkaWF0ZUJsb2NrID0gZXZhbChwcmVkZWNlc3NvckJsb2NrKTsKKyAgICAg
ICAgICAgICAgICAgICAgYmxvY2tEYXRhLnNlbWlOdW1iZXIgPSBzdGQ6Om1pbigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZGF0YVtpbnRlcm1lZGlhdGVCbG9ja10uc2VtaU51bWJlciwgYmxv
Y2tEYXRhLnNlbWlOdW1iZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBidWNrZXRQcmVOdW1iZXIgPSBibG9ja0RhdGEuc2VtaU51bWJlcjsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoYnVja2V0UHJlTnVtYmVyIDw9IGN1cnJlbnRQcmVOdW1iZXIpOworICAg
ICAgICAgICAgICAgIG1fZGF0YVttX2Jsb2NrQnlQcmVOdW1iZXJbYnVja2V0UHJlTnVtYmVyXV0u
YnVja2V0LmFwcGVuZChibG9jayk7CisgICAgICAgICAgICAgICAgbGluayhibG9ja0RhdGEucGFy
ZW50LCBibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBTdGVwIDM6Cisg
ICAgICAgICAgICAgICAgZm9yICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBzZW1pRG9taW5lZSA6IG1f
ZGF0YVtibG9ja0RhdGEucGFyZW50XS5idWNrZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgR3JhcGg6Ok5vZGUgcG9zc2libGVEb21pbmF0b3IgPSBldmFsKHNlbWlEb21pbmVlKTsK
KyAgICAgICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBzZW1pRG9taW5lZURhdGEgPSBtX2RhdGFb
c2VtaURvbWluZWVdOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ibG9ja0J5UHJlTnVt
YmVyW3NlbWlEb21pbmVlRGF0YS5zZW1pTnVtYmVyXSA9PSBibG9ja0RhdGEucGFyZW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBwb3NzaWJsZURvbWluYXRvckRhdGEgPSBtX2Rh
dGFbcG9zc2libGVEb21pbmF0b3JdOworICAgICAgICAgICAgICAgICAgICBpZiAocG9zc2libGVE
b21pbmF0b3JEYXRhLnNlbWlOdW1iZXIgPCBzZW1pRG9taW5lZURhdGEuc2VtaU51bWJlcikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbWlEb21pbmVlRGF0YS5kb20gPSBwb3NzaWJsZURvbWlu
YXRvcjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
c2VtaURvbWluZWVEYXRhLmRvbSA9IGJsb2NrRGF0YS5wYXJlbnQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIG1fZGF0YVtibG9ja0RhdGEucGFyZW50XS5idWNrZXQuY2xlYXIo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIGNvbXB1dGVF
eHBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGN1cnJlbnRQcmVOdW1iZXIgPSAxOyBjdXJyZW50UHJlTnVtYmVyIDwgbV9ibG9j
a0J5UHJlTnVtYmVyLnNpemUoKTsgKytjdXJyZW50UHJlTnVtYmVyKSB7CisgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBtX2Jsb2NrQnlQcmVOdW1iZXJbY3VycmVu
dFByZU51bWJlcl07CisgICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBibG9ja0RhdGEgPSBtX2Rh
dGFbYmxvY2tdOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGJsb2NrRGF0YS5k
b20gIT0gbV9ibG9ja0J5UHJlTnVtYmVyW2Jsb2NrRGF0YS5zZW1pTnVtYmVyXSkKKyAgICAgICAg
ICAgICAgICAgICAgYmxvY2tEYXRhLmRvbSA9IG1fZGF0YVtibG9ja0RhdGEuZG9tXS5kb207Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBsaW5rKHR5cGVuYW1l
IEdyYXBoOjpOb2RlIGZyb20sIHR5cGVuYW1lIEdyYXBoOjpOb2RlIHRvKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX2RhdGFbdG9dLmFuY2VzdG9yID0gZnJvbTsKKyAgICAgICAgfQorICAgIAor
ICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBldmFsKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJs
b2NrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fZGF0YVtibG9ja10uYW5jZXN0b3Ip
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICAKKyAgICAgICAgICAgIGNv
bXByZXNzKGJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGFbYmxvY2tdLmxhYmVsOwor
ICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgY29tcHJlc3ModHlwZW5hbWUgR3JhcGg6Ok5v
ZGUgaW5pdGlhbEJsb2NrKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIHdhcyBtZWFu
dCB0byBiZSBhIHJlY3Vyc2l2ZSBmdW5jdGlvbiwgYnV0IHdlIGRvbid0IGxpa2UgcmVjdXJzaW9u
IGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIHdhbnQgdG8gYmxvdyB0aGUgc3RhY2su
IFRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aWxsIGNhbGwgY29tcHJlc3MoKSByZWN1cnNpdmVseSBv
biB0aGUKKyAgICAgICAgICAgIC8vIGFuY2VzdG9yIG9mIGFueXRoaW5nIHRoYXQgaGFzIGFuIGFu
Y2VzdG9yLiBTbywgd2UgcG9wdWxhdGUgb3VyIHdvcmtsaXN0IHdpdGggdGhlCisgICAgICAgICAg
ICAvLyByZWN1cnNpdmUgYW5jZXN0b3JzIG9mIGluaXRpYWxCbG9jay4gVGhlbiB3ZSBwcm9jZXNz
IHRoZSBsaXN0IHN0YXJ0aW5nIGZyb20gdGhlIGJsb2NrCisgICAgICAgICAgICAvLyB0aGF0IGlz
IGZ1cnRoZXN0IHVwIHRoZSBhbmNlc3RvciBjaGFpbi4KKyAgICAgICAgCisgICAgICAgICAgICB0
eXBlbmFtZSBHcmFwaDo6Tm9kZSBhbmNlc3RvciA9IG1fZGF0YVtpbml0aWFsQmxvY2tdLmFuY2Vz
dG9yOworICAgICAgICAgICAgQVNTRVJUKGFuY2VzdG9yKTsKKyAgICAgICAgICAgIGlmICghbV9k
YXRhW2FuY2VzdG9yXS5hbmNlc3RvcikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICAgICAgVmVjdG9yPHR5cGVuYW1lIEdyYXBoOjpOb2RlLCAxNj4gc3RhY2s7Cisg
ICAgICAgICAgICBmb3IgKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gaW5pdGlhbEJsb2Nr
OyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmFuY2VzdG9yKQorICAgICAgICAgICAgICAg
IHN0YWNrLmFwcGVuZChibG9jayk7CisgICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugb25seSBj
YXJlIGFib3V0IGJsb2NrcyB0aGF0IGhhdmUgYW4gYW5jZXN0b3IgdGhhdCBoYXMgYW4gYW5jZXN0
b3IuIFRoZSBsYXN0IHR3bworICAgICAgICAgICAgLy8gZWxlbWVudHMgaW4gdGhlIHN0YWNrIHdv
bid0IHNhdGlzZnkgdGhpcyBwcm9wZXJ0eS4KKyAgICAgICAgICAgIEFTU0VSVChzdGFjay5zaXpl
KCkgPj0gMik7CisgICAgICAgICAgICBBU1NFUlQoIW1fZGF0YVtzdGFja1tzdGFjay5zaXplKCkg
LSAxXV0uYW5jZXN0b3IpOworICAgICAgICAgICAgQVNTRVJUKCFtX2RhdGFbbV9kYXRhW3N0YWNr
W3N0YWNrLnNpemUoKSAtIDJdXS5hbmNlc3Rvcl0uYW5jZXN0b3IpOworICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YWNrLnNpemUoKSAtIDI7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IHN0YWNrW2ldOworICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlJiBsYWJlbE9mQmxvY2sgPSBtX2RhdGFbYmxv
Y2tdLmxhYmVsOworICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlJiBhbmNlc3Rv
ck9mQmxvY2sgPSBtX2RhdGFbYmxvY2tdLmFuY2VzdG9yOworICAgICAgICAgICAgICAgIEFTU0VS
VChhbmNlc3Rvck9mQmxvY2spOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2RhdGFbYW5jZXN0
b3JPZkJsb2NrXS5hbmNlc3Rvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB0eXBl
bmFtZSBHcmFwaDo6Tm9kZSBsYWJlbE9mQW5jZXN0b3JPZkJsb2NrID0gbV9kYXRhW2FuY2VzdG9y
T2ZCbG9ja10ubGFiZWw7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobV9kYXRh
W2xhYmVsT2ZBbmNlc3Rvck9mQmxvY2tdLnNlbWlOdW1iZXIgPCBtX2RhdGFbbGFiZWxPZkJsb2Nr
XS5zZW1pTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICBsYWJlbE9mQmxvY2sgPSBsYWJlbE9m
QW5jZXN0b3JPZkJsb2NrOworICAgICAgICAgICAgICAgIGFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0
YVthbmNlc3Rvck9mQmxvY2tdLmFuY2VzdG9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgc3RydWN0IEJsb2NrRGF0YSB7CisgICAgICAgICAgICBCbG9ja0RhdGEoKQorICAg
ICAgICAgICAgICAgIDogcGFyZW50KG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBwcmVOdW1i
ZXIoVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgLCBzZW1pTnVtYmVyKFVJTlRfTUFYKQorICAg
ICAgICAgICAgICAgICwgYW5jZXN0b3IobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIGxhYmVs
KG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBkb20obnVsbHB0cikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9k
ZSBwYXJlbnQ7CisgICAgICAgICAgICB1bnNpZ25lZCBwcmVOdW1iZXI7CisgICAgICAgICAgICB1
bnNpZ25lZCBzZW1pTnVtYmVyOworICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYW5j
ZXN0b3I7CisgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBsYWJlbDsKKyAgICAgICAg
ICAgIFZlY3Rvcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZT4gYnVja2V0OworICAgICAgICAgICAgdHlw
ZW5hbWUgR3JhcGg6Ok5vZGUgZG9tOworICAgICAgICB9OworICAgIAorICAgICAgICBHcmFwaCYg
bV9ncmFwaDsKKyAgICAgICAgdHlwZW5hbWUgR3JhcGg6OnRlbXBsYXRlIE1hcDxCbG9ja0RhdGE+
IG1fZGF0YTsKKyAgICAgICAgVmVjdG9yPHR5cGVuYW1lIEdyYXBoOjpOb2RlPiBtX2Jsb2NrQnlQ
cmVOdW1iZXI7CisgICAgfTsKKworICAgIGNsYXNzIE5haXZlRG9taW5hdG9ycyB7CisgICAgcHVi
bGljOgorICAgICAgICBOYWl2ZURvbWluYXRvcnMoR3JhcGgmIGdyYXBoKQorICAgICAgICAgICAg
OiBtX2dyYXBoKGdyYXBoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIGltcGxlbWVu
dHMgYSBuYWl2ZSBkb21pbmF0b3Igc29sdmVyLgorCisgICAgICAgICAgICBBU1NFUlQoIWdyYXBo
LnByZWRlY2Vzc29ycyhncmFwaC5yb290KCkpLnNpemUoKSk7CisgICAgCisgICAgICAgICAgICB1
bnNpZ25lZCBudW1CbG9ja3MgPSBncmFwaC5udW1Ob2RlcygpOworICAgIAorICAgICAgICAgICAg
Ly8gQWxsb2NhdGUgc3RvcmFnZSBmb3IgdGhlIGRlbnNlIGRvbWluYW5jZSBtYXRyaXguIAorICAg
ICAgICAgICAgbV9yZXN1bHRzLmdyb3cobnVtQmxvY2tzKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG51bUJsb2NrczsgaS0tOykKKyAgICAgICAgICAgICAgICBtX3Jlc3VsdHNbaV0u
cmVzaXplKG51bUJsb2Nrcyk7CisgICAgICAgICAgICBtX3NjcmF0Y2gucmVzaXplKG51bUJsb2Nr
cyk7CisKKyAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGUgZW50cnkgYmxvY2sgaXMgb25s
eSBkb21pbmF0ZWQgYnkgaXRzZWxmLgorICAgICAgICAgICAgbV9yZXN1bHRzWzBdLmNsZWFyQWxs
KCk7CisgICAgICAgICAgICBtX3Jlc3VsdHNbMF0uc2V0KDApOworCisgICAgICAgICAgICAvLyBG
aW5kIGFsbCBvZiB0aGUgdmFsaWQgYmxvY2tzLgorICAgICAgICAgICAgbV9zY3JhdGNoLmNsZWFy
QWxsKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTspIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWdyYXBoLm5vZGUoaSkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG1fc2NyYXRjaC5zZXQoaSk7CisgICAgICAgICAg
ICB9CisgICAgCisgICAgICAgICAgICAvLyBNYXJrIGFsbCBub2RlcyBhcyBkb21pbmF0ZWQgYnkg
ZXZlcnl0aGluZy4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0t
ID4gMTspIHsKKyAgICAgICAgICAgICAgICBpZiAoIWdyYXBoLm5vZGUoaSkgfHwgIWdyYXBoLnBy
ZWRlY2Vzc29ycyhncmFwaC5ub2RlKGkpKS5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIG1f
cmVzdWx0c1tpXS5jbGVhckFsbCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgbV9yZXN1bHRzW2ldLnNldChtX3NjcmF0Y2gpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBJdGVyYXRpdmVseSBlbGltaW5hdGUgbm9kZXMgdGhhdCBhcmUgbm90IGRv
bWluYXRvci4KKyAgICAgICAgICAgIGJvb2wgY2hhbmdlZDsKKyAgICAgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgLy8gUHJ1bmUg
ZG9taW5hdG9ycyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogZm9yd2FyZCBzY2FuLgorICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1CbG9ja3M7ICsraSkKKyAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoaSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIWNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9ycyBpbiBhbGwgbm9uIGVudHJ5IGJsb2Nrczog
YmFja3dhcmQgc2Nhbi4KKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS0gPiAxOykKKyAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoaSk7CisgICAgICAgICAgICB9
IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBkb21p
bmF0ZXModW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG9dLmdldChmcm9tKTsKKyAgICAgICAgfQorICAgIAor
ICAgICAgICBib29sIGRvbWluYXRlcyh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBmcm9tLCB0eXBlbmFt
ZSBHcmFwaDo6Tm9kZSB0bykgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRv
bWluYXRlcyhmcm9tLT5pbmRleCwgdG8tPmluZGV4KTsKKyAgICAgICAgfQorICAgIAorICAgICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVt
Tm9kZXMoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6
Ok5vZGUgYmxvY2sgPSBtX2dyYXBoLm5vZGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCIgICAgQmxvY2sgIiwgbV9ncmFwaC5kdW1wKGJsb2NrKSwgIjoiKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG90aGVySW5kZXggPSAwOyBvdGhlckluZGV4IDwg
bV9ncmFwaC5udW1Ob2RlcygpOyArK290aGVySW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFkb21pbmF0ZXMobV9ncmFwaC5pbmRleChibG9jayksIG90aGVySW5kZXgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiICIsIG1fZ3JhcGguZHVtcChtX2dyYXBoLm5vZGUob3RoZXJJbmRleCkpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCBwcnVuZURvbWlu
YXRvcnModW5zaWduZWQgaWR4KQorICAgICAgICB7CisgICAgICAgICAgICB0eXBlbmFtZSBHcmFw
aDo6Tm9kZSBibG9jayA9IG1fZ3JhcGgubm9kZShpZHgpOworCisgICAgICAgICAgICBpZiAoIWJs
b2NrIHx8ICFtX2dyYXBoLnByZWRlY2Vzc29ycyhibG9jaykuc2l6ZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gRmluZCB0aGUgaW50ZXJzZWN0aW9u
IG9mIGRvbShwcmVkcykuCisgICAgICAgICAgICBtX3NjcmF0Y2guc2V0KG1fcmVzdWx0c1ttX2dy
YXBoLmluZGV4KG1fZ3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKVswXSldKTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IG1fZ3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKS5zaXplKCk7IGot
LSA+IDE7KQorICAgICAgICAgICAgICAgIG1fc2NyYXRjaC5maWx0ZXIobV9yZXN1bHRzW21fZ3Jh
cGguaW5kZXgobV9ncmFwaC5wcmVkZWNlc3NvcnMoYmxvY2spW2pdKV0pOworCisgICAgICAgICAg
ICAvLyBUaGUgYmxvY2sgaXMgYWxzbyBkb21pbmF0ZWQgYnkgaXRzZWxmLgorICAgICAgICAgICAg
bV9zY3JhdGNoLnNldChpZHgpOworCisgICAgICAgICAgICByZXR1cm4gbV9yZXN1bHRzW2lkeF0u
c2V0QW5kQ2hlY2sobV9zY3JhdGNoKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBHcmFwaCBt
X2dyYXBoOworICAgICAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvcj4gbV9yZXN1bHRzOyAvLyBGb3Ig
ZWFjaCBibG9jaywgdGhlIGJpdHZlY3RvciBvZiBibG9ja3MgdGhhdCBkb21pbmF0ZSBpdC4KKyAg
ICAgICAgRmFzdEJpdFZlY3RvciBtX3NjcmF0Y2g7IC8vIEEgdGVtcG9yYXJ5IGJpdHZlY3RvciB3
aXRoIGJpdCBmb3IgZWFjaCBibG9jay4gV2UgcmVjeWNsZSB0aGlzIHRvIHNhdmUgbmV3L2RlbGV0
ZXMuCisgICAgfTsKKworICAgIHN0cnVjdCBWYWxpZGF0aW9uQ29udGV4dCB7CisgICAgICAgIFZh
bGlkYXRpb25Db250ZXh0KEdyYXBoJiBncmFwaCwgRG9taW5hdG9ycyYgZG9taW5hdG9ycykKKyAg
ICAgICAgICAgIDogZ3JhcGgoZ3JhcGgpCisgICAgICAgICAgICAsIGRvbWluYXRvcnMoZG9taW5h
dG9ycykKKyAgICAgICAgICAgICwgbmFpdmVEb21pbmF0b3JzKGdyYXBoKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCByZXBvcnRFcnJvcih0eXBlbmFtZSBHcmFwaDo6
Tm9kZSBmcm9tLCB0eXBlbmFtZSBHcmFwaDo6Tm9kZSB0bywgY29uc3QgY2hhciogbWVzc2FnZSkK
KyAgICAgICAgeworICAgICAgICAgICAgRXJyb3IgZXJyb3I7CisgICAgICAgICAgICBlcnJvci5m
cm9tID0gZnJvbTsKKyAgICAgICAgICAgIGVycm9yLnRvID0gdG87CisgICAgICAgICAgICBlcnJv
ci5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoZXJyb3IpOwor
ICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgaGFuZGxlRXJyb3JzKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGVycm9ycy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgICAgIGRhdGFMb2coIkRGRyBET01JTkFUT1IgVkFMSURBVElP
TiBGQUlMRUQ6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCJGb3IgYmxvY2sgZG9taW5hdGlvbiByZWxhdGlvbnNoaXBzOlxuIik7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXJyb3JzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIiAgICAiLCBncmFwaC5k
dW1wKGVycm9yc1tpXS5mcm9tKSwgIiAtPiAiLCBncmFwaC5kdW1wKGVycm9yc1tpXS50byksCisg
ICAgICAgICAgICAgICAgICAgICIgKCIsIGVycm9yc1tpXS5tZXNzYWdlLCAiKVxuIik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgZGF0YUxv
ZygiQ29udHJvbCBmbG93IGdyYXBoOlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgZ3JhcGgubnVtTm9kZXMoKTsgKytibG9ja0luZGV4
KSB7CisgICAgICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBncmFwaC5u
b2RlKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBCbG9jayAi
LCBncmFwaC5kdW1wKGdyYXBoLm5vZGUoYmxvY2tJbmRleCkpLCAiOiBzdWNjZXNzb3JzID0gWyIp
OworICAgICAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgKytpKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBncmFwaC5kdW1wKGJsb2NrLT5zdWNjZXNz
b3IoaSkpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJdLCBwcmVkZWNlc3NvcnMgPSBbIik7
CisgICAgICAgICAgICAgICAgY29tbWEgPSBDb21tYVByaW50ZXIoKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgZ3JhcGguZHVtcChibG9jay0+
cHJlZGVjZXNzb3JzW2ldKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiXVxuIik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgZGF0YUxv
ZygiTGVuZ2F1ZXItVGFyamFuIERvbWluYXRvcnM6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2co
ZG9taW5hdG9ycyk7CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgZGF0
YUxvZygiTmFpdmUgRG9taW5hdG9yczpcbiIpOworICAgICAgICAgICAgbmFpdmVEb21pbmF0b3Jz
LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAg
ICAgICAgICBkYXRhTG9nKCJHcmFwaCBhdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAg
ICAgIGRhdGFMb2coZ3JhcGgpOworICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAg
ICAgIGRhdGFMb2coIkRGRyBET01JTkFUT1IgVkFMSURBVElPTiBGQUlMSUVEIVxuIik7CisgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgCisgICAgICAgIEdyYXBoJiBncmFwaDsK
KyAgICAgICAgRG9taW5hdG9ycyYgZG9taW5hdG9yczsKKyAgICAgICAgTmFpdmVEb21pbmF0b3Jz
IG5haXZlRG9taW5hdG9yczsKKyAgICAKKyAgICAgICAgc3RydWN0IEVycm9yIHsKKyAgICAgICAg
ICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGZyb207CisgICAgICAgICAgICB0eXBlbmFtZSBHcmFw
aDo6Tm9kZSB0bzsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2U7CisgICAgICAgIH07
CisgICAgCisgICAgICAgIFZlY3RvcjxFcnJvcj4gZXJyb3JzOworICAgIH07CisKKyAgICBib29s
IG5haXZlRG9taW5hdGVzKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGZyb20sIHR5cGVuYW1lIEdyYXBo
OjpOb2RlIHRvKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBHcmFwaDo6Tm9k
ZSBibG9jayA9IHRvOyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQpIHsK
KyAgICAgICAgICAgIGlmIChibG9jayA9PSBmcm9tKQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEJsb2Nrc0luRG9taW5h
bmNlRnJvbnRpZXJPZkltcGwoCisgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGZyb20sIGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICAvLyBQYXJhcGhyYXNp
bmcgZnJvbSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RvbWluYXRvcl8oZ3JhcGhfdGhl
b3J5KToKKyAgICAgICAgLy8gICAgICJUaGUgZG9taW5hbmNlIGZyb250aWVyIG9mIGEgYmxvY2sg
J2Zyb20nIGlzIHRoZSBzZXQgb2YgYWxsIGJsb2NrcyAndG8nIHN1Y2ggdGhhdAorICAgICAgICAv
LyAgICAgJ2Zyb20nIGRvbWluYXRlcyBhbiBpbW1lZGlhdGUgcHJlZGVjZXNzb3Igb2YgJ3RvJywg
YnV0ICdmcm9tJyBkb2VzIG5vdCBzdHJpY3RseQorICAgICAgICAvLyAgICAgZG9taW5hdGUgJ3Rv
Jy4iCisgICAgICAgIC8vCisgICAgICAgIC8vIEEgdXNlZnVsIGNvcm5lciBjYXNlIHRvIHJlbWVt
YmVyOiBhIGJsb2NrIG1heSBiZSBpbiBpdHMgb3duIGRvbWluYW5jZSBmcm9udGllciBpZiBpdCBo
YXMKKyAgICAgICAgLy8gYSBsb29wIGVkZ2UgdG8gaXRzZWxmLCBzaW5jZSBpdCBkb21pbmF0ZXMg
aXRzZWxmIGFuZCBzbyBpdCBkb21pbmF0ZXMgaXRzIG93biBpbW1lZGlhdGUKKyAgICAgICAgLy8g
cHJlZGVjZXNzb3IsIGFuZCBhIGJsb2NrIG5ldmVyIHN0cmljdGx5IGRvbWluYXRlcyBpdHNlbGYu
CisgICAgICAgIAorICAgICAgICBmb3JBbGxCbG9ja3NEb21pbmF0ZWRCeSgKKyAgICAgICAgICAg
IGZyb20sCisgICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSB0byA6IG1fZ3JhcGguc3Vj
Y2Vzc29ycyhibG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJpY3RseURvbWlu
YXRlcyhmcm9tLCB0bykpCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHRvKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21p
bmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgY29uc3QgdHlwZW5hbWUgR3JhcGg6Okxpc3Qm
IGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICB0eXBl
bmFtZSBHcmFwaDo6TGlzdCB3b3JrbGlzdCA9IGZyb207CisgICAgICAgIHdoaWxlICghd29ya2xp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9
IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBmb3JBbGxCbG9ja3NJbkRvbWluYW5j
ZUZyb250aWVyT2ZJbXBsKAorICAgICAgICAgICAgICAgIGJsb2NrLAorICAgICAgICAgICAgICAg
IFsmXSAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgb3RoZXJCbG9jaykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoZnVuY3RvcihvdGhlckJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdv
cmtsaXN0LmFwcGVuZChvdGhlckJsb2NrKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgQmxvY2tEYXRhIHsKKyAgICAgICAgQmxvY2tEYXRh
KCkKKyAgICAgICAgICAgIDogaWRvbVBhcmVudChudWxscHRyKQorICAgICAgICAgICAgLCBwcmVO
dW1iZXIoVUlOVF9NQVgpCisgICAgICAgICAgICAsIHBvc3ROdW1iZXIoVUlOVF9NQVgpCisgICAg
ICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmVjdG9yPHR5cGVuYW1lIEdyYXBo
OjpOb2RlPiBpZG9tS2lkczsKKyAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgaWRvbVBhcmVu
dDsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHByZU51bWJlcjsKKyAgICAgICAgdW5zaWdu
ZWQgcG9zdE51bWJlcjsKKyAgICB9OworICAgIAorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIHR5
cGVuYW1lIEdyYXBoOjp0ZW1wbGF0ZSBNYXA8QmxvY2tEYXRhPiBtX2RhdGE7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpEb21pbmF0b3JzOworCisjZW5kaWYgLy8gV1RG
RG9taW5hdG9yc19oCisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264524</attachid>
            <date>2015-11-01 11:21:04 -0800</date>
            <delta_ts>2015-11-01 12:47:59 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>132487</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBA
QAorMjAxNS0xMS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERvbWluYXRvcnMgc2hvdWxkIGJlIGZhY3RvcmVkIG91dCBvZiB0aGUgREZHCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA3NjQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGYWN0b3JlZCBERkdEb21pbmF0
b3JzLmgvREZHRG9taW5hdG9ycy5jcHAgaW50byBXVEYuIFRvIGRvIHRoaXMsIEkgbWFkZSB0d28g
Y2hhbmdlcyB0byB0aGUKKyAgICAgICAgREZHOgorCisgICAgICAgIDEpIERGRyBub3cgaGFzIGEg
Q0ZHIGFic3RyYWN0aW9uIGNhbGxlZCBERkc6OkNGRy4gVGhlIGNvb2wgdGhpbmcgYWJvdXQgdGhp
cyBpcyB0aGF0IGluIHRoZQorICAgICAgICAgICBmdXR1cmUgaWYgd2Ugd2FudGVkIHRvIHN1cHBv
cnQgaW52ZXJ0ZWQgZG9taW5hdG9ycywgd2UgY291bGQgZG8gaXQgYnkganVzdCBjcmVhdGluZyBh
CisgICAgICAgICAgIERGRzo6QmFja3dhcmRDRkcuCisKKyAgICAgICAgMikgR290IHJpZCBvZiBE
Rkc6OkFuYWx5c2lzLiBGcm9tIG5vdyBvbiwgYW4gQW5hbHlzaXMgYmVpbmcgaW52YWxpZGF0ZWQg
aXMgZXhwcmVzc2VkIGJ5IHRoZQorICAgICAgICAgICBERkc6OkdyYXBoIGhhdmluZyBhIG51bGwg
cG9pbnRlciBmb3IgdGhhdCBhbmFseXNpcy4gV2hlbiB3ZSAicnVuIiB0aGUgYW5hbHlzaXMsIHdl
CisgICAgICAgICAgIGp1c3QgaW5zdGFudGlhdGUgaXQuIFRoaXMgbWFrZXMgaXQgbXVjaCBtb3Jl
IG5hdHVyYWwgdG8gaW50ZWdyYXRlIFdURjo6RG9taW5hdG9ycyBpbnRvCisgICAgICAgICAgIHRo
ZSBERkcuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdBbmFseXNp
cy5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdDRkcuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHOjpDRkcpOgorICAgICAgICAoSlNDOjpERkc6OkNGRzo6cm9vdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q0ZHOjpuZXdNYXA8VD4pOgorICAgICAgICAoSlNDOjpERkc6OkNGRzo6
c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHOjpwcmVkZWNlc3NvcnMpOgorICAg
ICAgICAoSlNDOjpERkc6OkNGRzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkNGRzo6bm9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHOjpudW1Ob2Rlcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q0ZHOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxl
cjo6Y3JlYXRlRHVtcExpc3QpOgorICAgICAgICAqIGRmZy9ERkdEb21pbmF0b3JzLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBkZmcvREZHRG9taW5hdG9ycy5oOgorICAgICAgICAoSlNDOjpERkc6
OkRvbWluYXRvcnM6OkRvbWluYXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6
OnN0cmljdGx5RG9taW5hdGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0
b3JzOjpkb21pbmF0ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6
OmltbWVkaWF0ZURvbWluYXRvck9mKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpEb21p
bmF0b3JzOjpmb3JBbGxTdHJpY3REb21pbmF0b3JzT2YpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OkRvbWluYXRvcnM6OmZvckFsbERvbWluYXRvcnNPZik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzRG9t
aW5hdGVkQnkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFs
bEJsb2Nrc0luRG9taW5hbmNlRnJvbnRpZXJPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2Yp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0lu
UHJ1bmVkSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJbXBs
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJ
bkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OkRvbWluYXRvcnM6OkJsb2NrRGF0YTo6QmxvY2tEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHRWRnZURvbWluYXRlcy5oOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2VEb21p
bmF0ZXM6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OkdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVt
cEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aW52YWxpZGF0ZUNGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmhhbmRsZUFzc2VydGlvbkZhaWx1cmUpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjplbnN1cmVEb21pbmF0b3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6ZW5zdXJlUHJlUG9zdE51bWJlcmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmVu
c3VyZU5hdHVyYWxMb29wcyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlUHJvZmls
ZUZvcik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6Omhhc0RlYnVnZ2VyRW5hYmxlZCk6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6
OkxJQ01QaGFzZTo6YXR0ZW1wdEhvaXN0KToKKyAgICAgICAgKiBkZmcvREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNyZWF0ZVByZUhlYWRlcik6
CisgICAgICAgIChKU0M6OkRGRzo6TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZGZnL0RGR05hdHVyYWxMb29wcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TmF0
dXJhbExvb3A6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6TmF0dXJh
bExvb3BzKToKKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcHM6On5OYXR1cmFsTG9vcHMp
OgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6bG9vcHNPZik6CisgICAgICAgIChK
U0M6OkRGRzo6TmF0dXJhbExvb3BzOjpjb21wdXRlRGVwZW5kZW5jaWVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcHM6OmNvbXB1dGUpOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdOYXR1cmFsTG9vcHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9v
cHM6Om51bUxvb3BzKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpTdWNjZXNzb3JzSXRlcmFibGU6OnNpemUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OlN1Y2Nlc3NvcnNJdGVyYWJsZTo6YXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OlN1Y2Nl
c3NvcnNJdGVyYWJsZTo6b3BlcmF0b3JbXSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjpQcmVQ
b3N0TnVtYmVyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjp+UHJl
UG9zdE51bWJlcmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlUG9zdE51bWJlcmluZzo6Y29t
cHV0ZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQcmVQb3N0TnVtYmVyaW5nOjpwcmVOdW1iZXIpOgorICAgICAgICAo
SlNDOjpERkc6OlByZVBvc3ROdW1iZXJpbmc6OnBvc3ROdW1iZXIpOgorICAgICAgICAqIGRmZy9E
RkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0
b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6Om5vbkxvY2FsUmVhY2hp
bmdEZWYpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OnJlYWNoaW5nRGVmQXRU
YWlsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2FsY3VsYXRvci5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNTQUNhbGN1bGF0b3I6OmNvbXB1dGVQaGlzKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6
OnJ1bik6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Omxp
bmspOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OnNhZmVseUludmFsaWRhdGVBZnRlclRlcm1pbmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjppc1ZhbGlkKToKKwogMjAxNS0x
MS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIGFkZCBhIEZJWE1FIHJlZmVyZW5jaW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA3NzUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
U09VUkNFUwogICAgIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCiAgICAgZGZnL0RG
R0Rpc2Fzc2VtYmxlci5jcHAKICAgICBkZmcvREZHRG9lc0dDLmNwcAotICAgIGRmZy9ERkdEb21p
bmF0b3JzLmNwcAogICAgIGRmZy9ERkdEcml2ZXIuY3BwCiAgICAgZGZnL0RGR0VkZ2UuY3BwCiAg
ICAgZGZnL0RGR0Vwb2NoLmNwcApAQCAtMjcwLDcgKzI2OSw2IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKICAgICBkZmcvREZHTW92SGlu
dFJlbW92YWxQaGFzZS5jcHAKICAgICBkZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCi0g
ICAgZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHAKICAgICBkZmcvREZHTmF0dXJhbExvb3BzLmNw
cAogICAgIGRmZy9ERkdOb2RlLmNwcAogICAgIGRmZy9ERkdOb2RlRmxhZ3MuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTU0Nyw4ICs1NDcsNiBAQAogCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3
MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGNjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJ
bmxpbmVzLmggKi87IH07CiAJCTBGQzNDQ0ZFMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1Nl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDM0ND
RjcxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrU2V0LmggKi87IH07CiAJCTBGQzNDRDAwMTlB
REE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGOTE5QURBNDEwMDA2QUM3MkEgLyogREZH
QmxvY2tXb3JrbGlzdC5oICovOyB9OwotCQkwRkMzQ0QwMTE5QURBNDExMDA2QUM3MkEgLyogREZH
TmFpdmVEb21pbmF0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQzNDQ0ZBMTlBREE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWluYXRvcnMu
Y3BwICovOyB9OwotCQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0
b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMz
Q0NGQjE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmggKi87IH07CiAJCTBG
QzcxMkRFMTdDRDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyREMx
N0NEODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07
CiAJCTBGQzcxMkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzcx
MkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM3MTJFMjE3
Q0Q4NzkxMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyRTAx
N0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNw
cCAqLzsgfTsKQEAgLTU5OSw3ICs1OTcsNiBAQAogCQkwRkQzRTQwQzFCNjE4QjY2MDBDODBFMUUg
LyogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA2MUI2MThCNjYwMEM4MEUxRSAvKiBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRp
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQzRTQwNzFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwICovOyB9Owog
CQkwRkQzRTQwRTFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNFNDA4MUI2MThCNjYw
MEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsK
IAkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgxQUQwMTU0RkI0RUIwMDk4
M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi87IH07CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5
NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGll
cy5jcHAgKi87IH07CiAJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29k
ZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
ODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE1ODYsNyArMTU4Myw2IEBA
CiAJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczMEI2MTAxMjUw
MDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggKi87IH07CiAJCUE3MzBCNjEz
MTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzMwQjYxMTEyNTAwNjhGMDA5RDI1
QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwICovOyB9OwogCQlBNzMxQjI1QTEzMDA5Mzg4
MDA0MEE3RkEgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91
bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07Ci0JCUE3Mzc4MTBDMTc5OUVBMkUwMDgxNzUzMyAvKiBE
RkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTczNzgxMDkxNzk5RUEyRTAwODE3NTMzIC8qIERGR0FuYWx5c2lzLmggKi87IH07CiAJCUE3
Mzc4MTBEMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTczNzgxMEExNzk5RUEyRTAwODE3
NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi87IH07CiAJCUE3Mzc4MTBFMTc5OUVBMkUwMDgx
NzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3Mzc4MTBCMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9v
cHMuaCAqLzsgfTsKIAkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1
bmtKSVQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
Mzg2NTUxMTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggKi87IH07CkBA
IC0yNTcyLDggKzI1NjgsNiBAQAogCQkwRkMzQ0NGNjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxv
Y2tNYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jsb2Nr
TWFwSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jsb2NrTWFwSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkMzQ0NGNzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tTZXQuaDsgcGF0
aCA9IGRmZy9ERkdCbG9ja1NldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMz
Q0NGOTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCbG9ja1dvcmtsaXN0Lmg7IHBhdGggPSBkZmcvREZHQmxv
Y2tXb3JrbGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkMzQ0NGQTE5QURB
NDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR05haXZlRG9taW5hdG9ycy5jcHA7IHBhdGggPSBkZmcvREZH
TmFpdmVEb21pbmF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDM0ND
RkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOYWl2ZURvbWluYXRvcnMuaDsgcGF0aCA9IGRmZy9ERkdO
YWl2ZURvbWluYXRvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNzEyREMx
N0NEODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkM3MTJERDE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM3MTJFMDE3Q0Q4NzhG
MDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjYyNiw3ICsyNjIwLDYgQEAKIAkJMEZEM0U0
MDcxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5Q29uZGl0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0U0MDgxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5
Q29uZGl0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5Q29u
ZGl0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDU2NTIyMTZBQjc4MEEw
MDE5NzY1MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxv
Y2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRDgxQUNGMTU0RkI0
RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RvbWluYXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR0RvbWluYXRvcnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MUFEMDE1NEZCNEVCMDA5ODNF
NzIgLyogREZHRG9taW5hdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdEb21pbmF0b3JzLmg7IHBhdGggPSBkZmcvREZHRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0
aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NhcGFiaWxp
dGllcy5jcHA7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGll
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuaDsg
cGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTM2NDAsNyArMzYzMyw2IEBACiAJCUE3Mjk5REE0MTdEMTI4NTgwMDVGNUZGOSAvKiBTZXRD
b25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXRDb25zdHJ1
Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzMwQjYxMDEyNTAwNjhGMDA5
RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RyaWN0RXZhbEFjdGl2YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTczMEI2MTExMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmljdEV2YWxBY3RpdmF0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTczNzgxMDkxNzk5RUEyRTAw
ODE3NTMzIC8qIERGR0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FuYWx5c2lzLmg7IHBhdGggPSBkZmcvREZHQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29w
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYXR1cmFsTG9v
cHMuY3BwOyBwYXRoID0gZGZnL0RGR05hdHVyYWxMb29wcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3Mzc4MTBCMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmF0dXJhbExvb3BzLmg7IHBh
dGggPSBkZmcvREZHTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3Mzg2NTUxMTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNwZWNpYWxpemVkVGh1bmtKSVQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2NjUsNyArNTY1Nyw2IEBACiAJCQkJMEYxOEQzQ0Ux
QjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovLAog
CQkJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8sCiAJ
CQkJMEZCNEI1MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovLAotCQkJCUE3
Mzc4MTA5MTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFseXNpcy5oICovLAogCQkJCTBGMUUzQTQz
MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggKi8sCiAJCQkJMEYyREQ4
MEMxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwICov
LAogCQkJCTBGMkREODBEMUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdBcmd1bWVudHNFbGltaW5hdGlv
blBoYXNlLmggKi8sCkBAIC01NzUxLDcgKzU3NDIsNiBAQAogCQkJCTBGRjQyNzYyMTU5MUExQzkw
MDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRjVBMTI3MTE5MkQ5RkRGMDA4
NzY0QTMgLyogREZHRG9lc0dDLmNwcCAqLywKIAkJCQkwRjVBMTI3MjE5MkQ5RkRGMDA4NzY0QTMg
LyogREZHRG9lc0dDLmggKi8sCi0JCQkJMEZEODFBQ0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0Rv
bWluYXRvcnMuY3BwICovLAogCQkJCTBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21p
bmF0b3JzLmggKi8sCiAJCQkJMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZv
cm1hdFN0YXRlLmggKi8sCiAJCQkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZl
ci5jcHAgKi8sCkBAIC01ODM0LDggKzU4MjQsNiBAQAogCQkJCTBGOEYxNDMyMUFERjA5MDEwMEVE
NzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGMkNENTkxQjYxQTRG
ODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmNwcCAqLywKIAkJCQkwRkYyQ0Q1
QTFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuaCAqLywKLQkJCQkw
RkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmNwcCAqLywKLQkJ
CQkwRkMzQ0NGQjE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmggKi8sCiAJ
CQkJQTczNzgxMEExNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5jcHAgKi8sCiAJ
CQkJQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oICovLAogCQkJ
CTBGQjRCNTFFMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlLmNwcCAqLywKQEAgLTY2NTgsNyAr
NjY0Niw2IEBACiAJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NkUxNkIxNERGM0YxNjAw
QjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjE4
MTZEMDJFQjIwMDU1QTVEQiAvKiBERkdBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3
Mzc4MTBDMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkREODEyMUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdBcmd1bWVudHNF
bGltaW5hdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNDFBQjNEOEJFMDBC
QkI4RTggLyogREZHQXJndW1lbnRzVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTY3NjEs
NyArNjc0OCw2IEBACiAJCQkJMEZFQzg1MTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNjFBREYwOTAxMDBFRDc5MkMgLyogREZH
TW92SGludFJlbW92YWxQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMkNENUMxQjYxQTRG
ODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzM3ODEwRTE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3Bz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNFQTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUIxNkQwMkYwMTAwNTVBNURCIC8qIERGR05v
ZGVBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODIyMiw3ICs4MjA4LDYgQEAKIAkJCQlD
Mjk4MUZEODE3QkFFRTRCMDBBM0JDOTggLyogREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRjQyNzY0MTU5MUExQ0MwMDRDQjlGRiAvKiBERkdEaXNhc3Nl
bWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1QTEyNzMxOTJEOUZERjAwODc2NEEzIC8q
IERGR0RvZXNHQy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNF
NzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgyNjE0MTE1
RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlF
MTZCNzJBMEIwMDVERjk1QiAvKiBERkdFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYx
NDMzMUFERjA5MDEwMEVENzkyQyAvKiBERkdFcG9jaC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgy
NjEsNyArODI0Niw2IEBACiAJCQkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01pbmlm
aWVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMTQzNTFBREYwOTAxMDBFRDc5MkMg
LyogREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYyQ0Q1
QjFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMEZDM0NEMDExOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9y
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMgLyogREZH
TmF0dXJhbExvb3BzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVE
Rjk1QiAvKiBERkdOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMw
MEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FuYWx5c2lzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBbmFseXNpcy5oCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FuYWx5c2lzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
ODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIERGR0FuYWx5c2lzX2gKLSNkZWZpbmUgREZHQW5hbHlzaXNfaAotCi0j
aWYgRU5BQkxFKERGR19KSVQpCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQot
Y2xhc3MgR3JhcGg7Ci0KLS8vIFVzZSB0aGlzIGFzIGEgbWl4aW4gZm9yIERGRyBhbmFseXNlcy4g
VGhlIGFuYWx5c2lzIGl0c2VsZiBpbXBsZW1lbnRzIGEgcHVibGljCi0vLyBjb21wdXRlKEdyYXBo
JikgbWV0aG9kLiBDbGllbnRzIGNhbGwgY29tcHV0ZUlmTmVjZXNzYXJ5KCkgd2hlbiB0aGV5IHdh
bnQKLS8vIHJlc3VsdHMuCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFzcyBBbmFseXNpcyB7
Ci1wdWJsaWM6Ci0gICAgQW5hbHlzaXMoKQotICAgICAgICA6IG1fdmFsaWQoZmFsc2UpCi0gICAg
ewotICAgIH0KLSAgICAKLSAgICB2b2lkIGludmFsaWRhdGUoKQotICAgIHsKLSAgICAgICAgbV92
YWxpZCA9IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXB1dGVJZk5lY2Vzc2FyeShH
cmFwaCYgZ3JhcGgpCi0gICAgewotICAgICAgICBpZiAobV92YWxpZCkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgLy8gSXQncyBiZXN0IHRvIHJ1biBkZXBlbmRlbnQgYW5hbHlzZXMgZnJv
bSB0aGlzIG1ldGhvZC4KLSAgICAgICAgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpLT5jb21wdXRlRGVw
ZW5kZW5jaWVzKGdyYXBoKTsKLSAgICAgICAgLy8gU2V0IHRvIHRydWUgZWFybHksIHNpbmNlIHRo
ZSBhbmFseXNpcyBtYXkgY2hvb3NlIHRvIGNhbGwgaXRzIG93biBtZXRob2RzIGluCi0gICAgICAg
IC8vIGNvbXB1dGUoKSBhbmQgaXQgbWF5IHdhbnQgdG8gQVNTRVJUKCkgdmFsaWRpdHkgaW4gdGhv
c2UgbWV0aG9kcy4KLSAgICAgICAgbV92YWxpZCA9IHRydWU7Ci0gICAgICAgIHN0YXRpY19jYXN0
PFQqPih0aGlzKS0+Y29tcHV0ZShncmFwaCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsaWQ7IH0KLQotICAgIC8vIE92ZXJyaWRlIHRoaXMgdG8g
Y29tcHV0ZSBhbnkgZGVwZW5kZW50IGFuYWx5c2VzLiBTZWUKLSAgICAvLyBOYXR1cmFsTG9vcHM6
OmNvbXB1dGVEZXBlbmRlbmNpZXMoR3JhcGgmKSBmb3IgYW4gZXhhbXBsZS4gVGhpcyBpc24ndCBz
dHJpY3RseSBuZWNlc3NhcnkgYnV0Ci0gICAgLy8gaXQgbWFrZXMgZGVidWcgZHVtcHMgaW4gY2Fz
ZXMgb2YgZXJyb3Igd29yayBhIGJpdCBiZXR0ZXIgYmVjYXVzZSB0aGlzIGFuYWx5c2lzIHdvdWxk
bid0IHlldAotICAgIC8vIGJlIHByZXRlbmRpbmcgdG8gYmUgdmFsaWQuCi0gICAgdm9pZCBjb21w
dXRlRGVwZW5kZW5jaWVzKEdyYXBoJikgeyB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX3ZhbGlk
OwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCi0KLSNlbmRpZiAvLyBERkdBbmFseXNpc19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZHLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0NGR19oCisjZGVmaW5l
IERGR0NGR19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxv
Y2suaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKKyNpbmNsdWRlICJERkdCbG9j
a1NldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgQ0ZHIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEJhc2ljQmxvY2sq
IE5vZGU7CisgICAgdHlwZWRlZiBCbG9ja1NldCBTZXQ7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdXNpbmcgTWFwID0gQmxvY2tNYXA8VD47CisgICAgdHlwZWRlZiBCbG9ja0xpc3QgTGlzdDsK
KworICAgIENGRyhHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICB7
CisgICAgfQorCisgICAgTm9kZSByb290KCkgeyByZXR1cm4gbV9ncmFwaC5ibG9jaygwKTsgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBNYXA8VD4gbmV3TWFwKCkgeyByZXR1cm4g
QmxvY2tNYXA8VD4obV9ncmFwaCk7IH0KKworICAgIERGRzo6Tm9kZTo6U3VjY2Vzc29yc0l0ZXJh
YmxlIHN1Y2Nlc3NvcnMoTm9kZSBub2RlKSB7IHJldHVybiBub2RlLT5zdWNjZXNzb3JzKCk7IH0K
KyAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyhOb2RlIG5vZGUpIHsgcmV0dXJuIG5v
ZGUtPnByZWRlY2Vzc29yczsgfQorCisgICAgdW5zaWduZWQgaW5kZXgoTm9kZSBub2RlKSBjb25z
dCB7IHJldHVybiBub2RlLT5pbmRleDsgfQorICAgIE5vZGUgbm9kZSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9ncmFwaC5ibG9jayhpbmRleCk7IH0KKyAgICB1bnNpZ25lZCBudW1O
b2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGgubnVtQmxvY2tzKCk7IH0KKworICAgIFBvaW50
ZXJEdW1wPEJhc2ljQmxvY2s+IGR1bXAoTm9kZSBub2RlKSBjb25zdCB7IHJldHVybiBwb2ludGVy
RHVtcChub2RlKTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBtX2dyYXBoLmR1bXAob3V0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
R3JhcGgmIG1fZ3JhcGg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NGR19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxOTE4MzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5j
bHVkZSAiREZHRG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgi
CiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgpAQCAtMzkwLDcg
KzM5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7
CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLmluaXRpYWxpemVOb2RlT3duZXJzKCk7Ci0gICAg
ICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAg
ICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CiAgICAgICAgIAogICAgICAgICBtX3By
ZU9yZGVyID0gbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCk7CiAgICAgICAgIApAQCAtNDg0LDcg
KzQ4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlKiBj
YW5kaWRhdGUgPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlW2ldOwotICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhjYW5kaWRhdGUtPm93bmVyLCBtX2Jsb2NrKSkg
eworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXMoY2FuZGlk
YXRlLT5vd25lciwgbV9ibG9jaykpIHsKICAgICAgICAgICAgICAgICBtX25vZGUtPnJlcGxhY2VX
aXRoKGNhbmRpZGF0ZSk7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CkBAIC01NzMsNyArNTc0LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgLy8gV2UgcmVxdWlyZSBzdHJpY3QgZG9taW5hdGlvbiBiZWNhdXNlIHRoaXMgd291bGQgb25s
eSBzZWUgdGhpbmdzIGluIG91ciBvd24gYmxvY2sgaWYKICAgICAgICAgICAgIC8vIHRoZXkgY2Ft
ZSAqYWZ0ZXIqIG91ciBwb3NpdGlvbiBpbiB0aGUgYmxvY2suIENsZWFybHksIHdoaWxlIG91ciBi
bG9jayBkb21pbmF0ZXMKICAgICAgICAgICAgIC8vIGl0c2VsZiwgdGhlIHRoaW5ncyBpbiB0aGUg
YmxvY2sgYWZ0ZXIgdXMgZG9uJ3QgZG9taW5hdGUgdXMuCi0gICAgICAgICAgICBpZiAobV9ncmFw
aC5tX2RvbWluYXRvcnMuc3RyaWN0bHlEb21pbmF0ZXMoYmxvY2ssIG1fYmxvY2spKSB7CisgICAg
ICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMtPnN0cmljdGx5RG9taW5hdGVzKGJsb2Nr
LCBtX2Jsb2NrKSkgewogICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgICAgIEl0IHN0cmljdGx5IGRvbWluYXRlcy5cbiIpOwogICAg
ICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBkYXRhLmRpZFZpc2l0KTsK
QEAgLTY1Miw3ICs2NTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogY2FuZGlkYXRlID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZVtpXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoY2FuZGlk
YXRlLT5vd25lciwgbV9ibG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGNhbmRpZGF0ZS0+b3duZXIsIG1fYmxvY2spKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbmRpZGF0ZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2gtPnJlcGxhY2VXaXRoKGNhbmRpZGF0ZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2guc2V0Tm9kZShjYW5kaWRhdGUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNp
b24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw4ICs5NCw4IEBAIFZlY3RvcjxEaXNhc3NlbWJsZXI6
OkR1bXBlZE9wPiBEaXNhc3NlbWIKICAgICBkdW1wSGVhZGVyKG91dCwgbGlua0J1ZmZlcik7CiAg
ICAgYXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91c09yaWdpbik7CiAgICAgCi0gICAgbV9ncmFw
aC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOwotICAgIG1fZ3JhcGgu
bV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgIG1fZ3JhcGgu
ZW5zdXJlRG9taW5hdG9ycygpOworICAgIG1fZ3JhcGguZW5zdXJlTmF0dXJhbExvb3BzKCk7CiAg
ICAgCiAgICAgY29uc3QgY2hhciogcHJlZml4ID0gIiAgICAiOwogICAgIGNvbnN0IGNoYXIqIGRp
c2Fzc2VtYmx5UHJlZml4ID0gIiAgICAgICAgIjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0
NzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHRG9taW5hdG9y
cy5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdCbG9ja01hcElubGlu
ZXMuaCIKLSNpbmNsdWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCi0jaW5jbHVkZSAiREZHR3JhcGgu
aCIKLSNpbmNsdWRlICJERkdOYWl2ZURvbWluYXRvcnMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotRG9taW5hdG9yczo6RG9t
aW5hdG9ycygpCi17Ci19Ci0KLURvbWluYXRvcnM6On5Eb21pbmF0b3JzKCkKLXsKLX0KLQotbmFt
ZXNwYWNlIHsKLQotLy8gVGhpcyBpbXBsZW1lbnRzIExlbmdhdWVyIGFuZCBUYXJqYW4ncyAiQSBG
YXN0IEFsZ29yaXRobSBmb3IgRmluZGluZyBEb21pbmF0b3JzIGluIGEgRmxvd2dyYXBoIgotLy8g
KFRPUExBUyAxOTc5KS4gSXQgdXNlcyB0aGUgInNpbXBsZSIgaW1wbGVtZW50YXRpb24gb2YgTElO
SyBhbmQgRVZBTCwgd2hpY2ggeWllbGRzIGFuIE8obiBsb2cgbikKLS8vIHNvbHV0aW9uLiBUaGUg
ZnVsbCBwYXBlciBpcyBsaW5rZWQgYmVsb3c7IHRoaXMgY29kZSBhdHRlbXB0cyB0byBjbG9zZWx5
IGZvbGxvdyB0aGUgYWxnb3JpdGhtIGFzCi0vLyBpdCBpcyBwcmVzZW50ZWQgaW4gdGhlIHBhcGVy
OyBpbiBwYXJ0aWN1bGFyIHNlY3Rpb25zIDMgYW5kIDQgYXMgd2VsbCBhcyBhcHBlbmRpeCBCLgot
Ly8gaHR0cHM6Ly93d3cuY3MucHJpbmNldG9uLmVkdS9jb3Vyc2VzL2FyY2hpdmUvZmFsbDAzL2Nz
NTI4L2hhbmRvdXRzL2ElMjBmYXN0JTIwYWxnb3JpdGhtJTIwZm9yJTIwZmluZGluZy5wZGYKLS8v
Ci0vLyBUaGlzIGNvZGUgaXMgdmVyeSBzdWJ0bGUuIFRoZSBMZW5nYXVlci1UYXJqYW4gYWxnb3Jp
dGhtIGlzIGluY3JlZGlibHkgZGVlcCB0byBiZWdpbiB3aXRoLiBUaGUKLS8vIGdvYWwgb2YgdGhp
cyBjb2RlIGlzIHRvIGZvbGxvdyB0aGUgY29kZSBpbiB0aGUgcGFwZXIsIGhvd2V2ZXIgb3VyIGlt
cGxlbWVudGF0aW9uIG11c3QgZGV2aWF0ZQotLy8gZnJvbSB0aGUgcGFwZXIgd2hlbiBpdCBjb21l
cyB0byByZWN1cnNpb24uIFRoZSBhdXRob3JzIGhhZCB1c2VkIHJlY3Vyc2lvbiB0byBpbXBsZW1l
bnQgREZTLCBhbmQKLS8vIGFsc28gdG8gaW1wbGVtZW50IHRoZSAic2ltcGxlIiBFVkFMLiBXZSBj
b252ZXJ0IGJvdGggb2YgdGhvc2UgaW50byB3b3JrbGlzdC1iYXNlZCBzb2x1dGlvbnMuCi0vLyBG
aW5hbGx5LCBvbmNlIHRoZSBhbGdvcml0aG0gZ2l2ZXMgdXMgaW1tZWRpYXRlIGRvbWluYXRvcnMs
IHdlIGltcGxlbWVudCBkb21pbmFuY2UgdGVzdHMgYnkKLS8vIHdhbGtpbmcgdGhlIGRvbWluYXRv
ciB0cmVlIGFuZCBjb21wdXRpbmcgcHJlIGFuZCBwb3N0IG51bWJlcnMuIFdlIHRoZW4gdXNlIHRo
ZSByYW5nZSBpbmNsdXNpb24KLS8vIGNoZWNrIHRyaWNrIHRoYXQgd2FzIGZpcnN0IGRpc2NvdmVy
ZWQgYnkgUGF1bCBGLiBEaWV0eiBpbiAxOTgyIGluICJNYWludGFpbmluZyBvcmRlciBpbiBhIGxp
bmtlZAotLy8gbGlzdCIgKHNlZSBodHRwOi8vZGwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9ODAy
MTg0KS4KLQotY2xhc3MgTGVuZ2F1ZXJUYXJqYW4gewotcHVibGljOgotICAgIExlbmdhdWVyVGFy
amFuKEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQotICAgICAgICAsIG1f
ZGF0YShncmFwaCkKLSAgICB7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYg
KCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1fZGF0YVti
bG9ja10ubGFiZWwgPSBibG9jazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXB1dGUoKQotICAgIHsKLSAgICAgICAgY29tcHV0ZURlcHRoRmlyc3RQcmVOdW1iZXJpbmcoKTsg
Ly8gU3RlcCAxLgotICAgICAgICBjb21wdXRlU2VtaURvbWluYXRvcnNBbmRJbXBsaWNpdEltbWVk
aWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcHMgMiBhbmQgMy4KLSAgICAgICAgY29tcHV0ZUV4cGxp
Y2l0SW1tZWRpYXRlRG9taW5hdG9ycygpOyAvLyBTdGVwIDQuCi0gICAgfQotICAgIAotICAgIEJh
c2ljQmxvY2sqIGltbWVkaWF0ZURvbWluYXRvcihCYXNpY0Jsb2NrKiBibG9jaykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2RhdGFbYmxvY2tdLmRvbTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
dm9pZCBjb21wdXRlRGVwdGhGaXJzdFByZU51bWJlcmluZygpCi0gICAgewotICAgICAgICAvLyBV
c2UgYSBibG9jayB3b3JrbGlzdCB0aGF0IGFsc28gdHJhY2tzIHRoZSBpbmRleCBpbnNpZGUgdGhl
IHN1Y2Nlc3NvciBsaXN0LiBUaGlzIGlzCi0gICAgICAgIC8vIG5lY2Vzc2FyeSBmb3IgZW5zdXJp
bmcgdGhhdCB3ZSBkb24ndCBhdHRlbXB0IHRvIHZpc2l0IGEgc3VjY2Vzc29yIHVudGlsIHRoZSBw
cmV2aW91cwotICAgICAgICAvLyBzdWNjZXNzb3JzIHRoYXQgd2UgaGFkIHZpc2l0ZWQgYXJlIGZ1
bGx5IHByb2Nlc3NlZC4gVGhpcyBlbmRzIHVwIGJlaW5nIHJldmVhbGVkIGluIHRoZQotICAgICAg
ICAvLyBvdXRwdXQgb2YgdGhpcyBtZXRob2QgYmVjYXVzZSB0aGUgZmlyc3QgdGltZSB3ZSBzZWUg
YW4gZWRnZSB0byBhIGJsb2NrLCB3ZSBzZXQgdGhlCi0gICAgICAgIC8vIGJsb2NrJ3MgcGFyZW50
LiBTbywgaWYgd2UgaGF2ZToKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQSAtPiBCCi0gICAgICAg
IC8vIEEgLT4gQwotICAgICAgICAvLyBCIC0+IEMKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQW5k
IHdlJ3JlIHByb2Nlc3NpbmcgQSwgdGhlbiB3ZSB3YW50IHRvIGVuc3VyZSB0aGF0IGlmIHdlIHNl
ZSBBLT5CIGZpcnN0IChhbmQgaGVuY2Ugc2V0Ci0gICAgICAgIC8vIEIncyBwcmVudW1iZXIgYmVm
b3JlIHdlIHNldCBDJ3MpIHRoZW4gd2UgYWxzbyBlbmQgdXAgc2V0dGluZyBDJ3MgcGFyZW50IHRv
IEIgYnkgdmlydHVlCi0gICAgICAgIC8vIG9mIG5vdCBub3RpY2luZyBBLT5DIHVudGlsIHdlJ3Jl
IGRvbmUgcHJvY2Vzc2luZyBCLgotICAgICAgICAKLSAgICAgICAgRXh0ZW5kZWRCbG9ja1dvcmts
aXN0PHVuc2lnbmVkPiB3b3JrbGlzdDsKLSAgICAgICAgd29ya2xpc3QucHVzaChtX2dyYXBoLmJs
b2NrKDApLCAwKTsKLSAgICAgICAgCi0gICAgICAgIHdoaWxlIChCbG9ja1dpdGg8dW5zaWduZWQ+
IGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBpdGVtLm5vZGU7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGl0ZW0u
ZGF0YTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgaW5pdGlhbGx5IHB1c2ggd2l0
aCBzdWNjZXNzb3JJbmRleCA9IDAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZl
IGFueQotICAgICAgICAgICAgLy8gc3VjY2Vzc29ycy4gVGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBh
c3NpZ24gb3VyIHByZW51bWJlci4gU3Vic2VxdWVudGx5IHdlIGdldCBwdXNoZWQKLSAgICAgICAg
ICAgIC8vIHdpdGggaGlnaGVyIHN1Y2Nlc3NvckluZGV4IHZhbHVlcywgYnV0IG9ubHkgaWYgdGhl
eSBhcmUgaW4gcmFuZ2UuCi0gICAgICAgICAgICBBU1NFUlQoIXN1Y2Nlc3NvckluZGV4IHx8IHN1
Y2Nlc3NvckluZGV4IDwgYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSk7Ci0KLSAgICAgICAgICAgIGlm
ICghc3VjY2Vzc29ySW5kZXgpIHsKLSAgICAgICAgICAgICAgICBtX2RhdGFbYmxvY2tdLnNlbWlO
dW1iZXIgPSBtX2Jsb2NrQnlQcmVOdW1iZXIuc2l6ZSgpOwotICAgICAgICAgICAgICAgIG1fYmxv
Y2tCeVByZU51bWJlci5hcHBlbmQoYmxvY2spOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoc3VjY2Vzc29ySW5kZXggPCBibG9jay0+bnVtU3VjY2Vzc29ycygp
KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbmV4dFN1Y2Nlc3NvckluZGV4ID0gc3VjY2Vz
c29ySW5kZXggKyAxOwotICAgICAgICAgICAgICAgIGlmIChuZXh0U3VjY2Vzc29ySW5kZXggPCBi
bG9jay0+bnVtU3VjY2Vzc29ycygpKQotICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5mb3Jj
ZVB1c2goYmxvY2ssIG5leHRTdWNjZXNzb3JJbmRleCk7Ci0KLSAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgp
OwotICAgICAgICAgICAgICAgIGlmICh3b3JrbGlzdC5wdXNoKHN1Y2Nlc3NvckJsb2NrLCAwKSkK
LSAgICAgICAgICAgICAgICAgICAgbV9kYXRhW3N1Y2Nlc3NvckJsb2NrXS5wYXJlbnQgPSBibG9j
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXB1
dGVTZW1pRG9taW5hdG9yc0FuZEltcGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygpCi0gICAgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGN1cnJlbnRQcmVOdW1iZXIgPSBtX2Jsb2NrQnlQcmVOdW1i
ZXIuc2l6ZSgpOyBjdXJyZW50UHJlTnVtYmVyLS0gPiAxOykgewotICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2Jsb2NrQnlQcmVOdW1iZXJbY3VycmVudFByZU51bWJlcl07Ci0gICAg
ICAgICAgICBCbG9ja0RhdGEmIGJsb2NrRGF0YSA9IG1fZGF0YVtibG9ja107Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIFN0ZXAgMjoKLSAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
cHJlZGVjZXNzb3JCbG9jayA6IGJsb2NrLT5wcmVkZWNlc3NvcnMpIHsKLSAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBpbnRlcm1lZGlhdGVCbG9jayA9IGV2YWwocHJlZGVjZXNzb3JCbG9jayk7
Ci0gICAgICAgICAgICAgICAgYmxvY2tEYXRhLnNlbWlOdW1iZXIgPSBzdGQ6Om1pbigKLSAgICAg
ICAgICAgICAgICAgICAgbV9kYXRhW2ludGVybWVkaWF0ZUJsb2NrXS5zZW1pTnVtYmVyLCBibG9j
a0RhdGEuc2VtaU51bWJlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1bnNpZ25lZCBi
dWNrZXRQcmVOdW1iZXIgPSBibG9ja0RhdGEuc2VtaU51bWJlcjsKLSAgICAgICAgICAgIEFTU0VS
VChidWNrZXRQcmVOdW1iZXIgPD0gY3VycmVudFByZU51bWJlcik7Ci0gICAgICAgICAgICBtX2Rh
dGFbbV9ibG9ja0J5UHJlTnVtYmVyW2J1Y2tldFByZU51bWJlcl1dLmJ1Y2tldC5hcHBlbmQoYmxv
Y2spOwotICAgICAgICAgICAgbGluayhibG9ja0RhdGEucGFyZW50LCBibG9jayk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIFN0ZXAgMzoKLSAgICAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogc2VtaURvbWluZWUgOiBtX2RhdGFbYmxvY2tEYXRhLnBhcmVudF0uYnVja2V0KSB7Ci0gICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogcG9zc2libGVEb21pbmF0b3IgPSBldmFsKHNlbWlEb21p
bmVlKTsKLSAgICAgICAgICAgICAgICBCbG9ja0RhdGEmIHNlbWlEb21pbmVlRGF0YSA9IG1fZGF0
YVtzZW1pRG9taW5lZV07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fYmxvY2tCeVByZU51bWJl
cltzZW1pRG9taW5lZURhdGEuc2VtaU51bWJlcl0gPT0gYmxvY2tEYXRhLnBhcmVudCk7Ci0gICAg
ICAgICAgICAgICAgQmxvY2tEYXRhJiBwb3NzaWJsZURvbWluYXRvckRhdGEgPSBtX2RhdGFbcG9z
c2libGVEb21pbmF0b3JdOwotICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZURvbWluYXRvckRh
dGEuc2VtaU51bWJlciA8IHNlbWlEb21pbmVlRGF0YS5zZW1pTnVtYmVyKQotICAgICAgICAgICAg
ICAgICAgICBzZW1pRG9taW5lZURhdGEuZG9tID0gcG9zc2libGVEb21pbmF0b3I7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzZW1pRG9taW5lZURhdGEuZG9tID0g
YmxvY2tEYXRhLnBhcmVudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZGF0YVtibG9j
a0RhdGEucGFyZW50XS5idWNrZXQuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXB1dGVFeHBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKQotICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBjdXJyZW50UHJlTnVtYmVyID0gMTsgY3VycmVudFByZU51bWJlciA8
IG1fYmxvY2tCeVByZU51bWJlci5zaXplKCk7ICsrY3VycmVudFByZU51bWJlcikgewotICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2NrQnlQcmVOdW1iZXJbY3VycmVudFByZU51
bWJlcl07Ci0gICAgICAgICAgICBCbG9ja0RhdGEmIGJsb2NrRGF0YSA9IG1fZGF0YVtibG9ja107
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChibG9ja0RhdGEuZG9tICE9IG1fYmxvY2tC
eVByZU51bWJlcltibG9ja0RhdGEuc2VtaU51bWJlcl0pCi0gICAgICAgICAgICAgICAgYmxvY2tE
YXRhLmRvbSA9IG1fZGF0YVtibG9ja0RhdGEuZG9tXS5kb207Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBsaW5rKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQotICAg
IHsKLSAgICAgICAgbV9kYXRhW3RvXS5hbmNlc3RvciA9IGZyb207Ci0gICAgfQotICAgIAotICAg
IEJhc2ljQmxvY2sqIGV2YWwoQmFzaWNCbG9jayogYmxvY2spCi0gICAgewotICAgICAgICBpZiAo
IW1fZGF0YVtibG9ja10uYW5jZXN0b3IpCi0gICAgICAgICAgICByZXR1cm4gYmxvY2s7Ci0gICAg
ICAgIAotICAgICAgICBjb21wcmVzcyhibG9jayk7Ci0gICAgICAgIHJldHVybiBtX2RhdGFbYmxv
Y2tdLmxhYmVsOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXByZXNzKEJhc2ljQmxvY2sqIGlu
aXRpYWxCbG9jaykKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgd2FzIG1lYW50IHRvIGJlIGEgcmVj
dXJzaXZlIGZ1bmN0aW9uLCBidXQgd2UgZG9uJ3QgbGlrZSByZWN1cnNpb24gYmVjYXVzZSB3ZSBk
b24ndAotICAgICAgICAvLyB3YW50IHRvIGJsb3cgdGhlIHN0YWNrLiBUaGUgb3JpZ2luYWwgZnVu
Y3Rpb24gd2lsbCBjYWxsIGNvbXByZXNzKCkgcmVjdXJzaXZlbHkgb24gdGhlCi0gICAgICAgIC8v
IGFuY2VzdG9yIG9mIGFueXRoaW5nIHRoYXQgaGFzIGFuIGFuY2VzdG9yLiBTbywgd2UgcG9wdWxh
dGUgb3VyIHdvcmtsaXN0IHdpdGggdGhlCi0gICAgICAgIC8vIHJlY3Vyc2l2ZSBhbmNlc3RvcnMg
b2YgaW5pdGlhbEJsb2NrLiBUaGVuIHdlIHByb2Nlc3MgdGhlIGxpc3Qgc3RhcnRpbmcgZnJvbSB0
aGUgYmxvY2sKLSAgICAgICAgLy8gdGhhdCBpcyBmdXJ0aGVzdCB1cCB0aGUgYW5jZXN0b3IgY2hh
aW4uCi0gICAgICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBhbmNlc3RvciA9IG1fZGF0YVtpbml0
aWFsQmxvY2tdLmFuY2VzdG9yOwotICAgICAgICBBU1NFUlQoYW5jZXN0b3IpOwotICAgICAgICBp
ZiAoIW1fZGF0YVthbmNlc3Rvcl0uYW5jZXN0b3IpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAotICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiBzdGFjazsKLSAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA9IGluaXRpYWxCbG9jazsgYmxvY2s7IGJsb2NrID0gbV9kYXRh
W2Jsb2NrXS5hbmNlc3RvcikKLSAgICAgICAgICAgIHN0YWNrLmFwcGVuZChibG9jayk7Ci0gICAg
ICAgIAotICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYmxvY2tzIHRoYXQgaGF2ZSBhbiBh
bmNlc3RvciB0aGF0IGhhcyBhbiBhbmNlc3Rvci4gVGhlIGxhc3QgdHdvCi0gICAgICAgIC8vIGVs
ZW1lbnRzIGluIHRoZSBzdGFjayB3b24ndCBzYXRpc2Z5IHRoaXMgcHJvcGVydHkuCi0gICAgICAg
IEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7Ci0gICAgICAgIEFTU0VSVCghbV9kYXRhW3N0YWNr
W3N0YWNrLnNpemUoKSAtIDFdXS5hbmNlc3Rvcik7Ci0gICAgICAgIEFTU0VSVCghbV9kYXRhW21f
ZGF0YVtzdGFja1tzdGFjay5zaXplKCkgLSAyXV0uYW5jZXN0b3JdLmFuY2VzdG9yKTsKLSAgICAg
ICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YWNrLnNpemUoKSAtIDI7IGktLTspIHsK
LSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gc3RhY2tbaV07Ci0gICAgICAgICAgICBC
YXNpY0Jsb2NrKiYgbGFiZWxPZkJsb2NrID0gbV9kYXRhW2Jsb2NrXS5sYWJlbDsKLSAgICAgICAg
ICAgIEJhc2ljQmxvY2sqJiBhbmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFbYmxvY2tdLmFuY2VzdG9y
OwotICAgICAgICAgICAgQVNTRVJUKGFuY2VzdG9yT2ZCbG9jayk7Ci0gICAgICAgICAgICBBU1NF
UlQobV9kYXRhW2FuY2VzdG9yT2ZCbG9ja10uYW5jZXN0b3IpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBsYWJlbE9mQW5jZXN0b3JPZkJsb2NrID0gbV9kYXRhW2FuY2Vz
dG9yT2ZCbG9ja10ubGFiZWw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX2RhdGFb
bGFiZWxPZkFuY2VzdG9yT2ZCbG9ja10uc2VtaU51bWJlciA8IG1fZGF0YVtsYWJlbE9mQmxvY2td
LnNlbWlOdW1iZXIpCi0gICAgICAgICAgICAgICAgbGFiZWxPZkJsb2NrID0gbGFiZWxPZkFuY2Vz
dG9yT2ZCbG9jazsKLSAgICAgICAgICAgIGFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0YVthbmNlc3Rv
ck9mQmxvY2tdLmFuY2VzdG9yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RydWN0IEJsb2Nr
RGF0YSB7Ci0gICAgICAgIEJsb2NrRGF0YSgpCi0gICAgICAgICAgICA6IHBhcmVudChudWxscHRy
KQotICAgICAgICAgICAgLCBwcmVOdW1iZXIoVUlOVF9NQVgpCi0gICAgICAgICAgICAsIHNlbWlO
dW1iZXIoVUlOVF9NQVgpCi0gICAgICAgICAgICAsIGFuY2VzdG9yKG51bGxwdHIpCi0gICAgICAg
ICAgICAsIGxhYmVsKG51bGxwdHIpCi0gICAgICAgICAgICAsIGRvbShudWxscHRyKQotICAgICAg
ICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEJhc2ljQmxvY2sqIHBhcmVudDsKLSAg
ICAgICAgdW5zaWduZWQgcHJlTnVtYmVyOwotICAgICAgICB1bnNpZ25lZCBzZW1pTnVtYmVyOwot
ICAgICAgICBCYXNpY0Jsb2NrKiBhbmNlc3RvcjsKLSAgICAgICAgQmFzaWNCbG9jayogbGFiZWw7
Ci0gICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYnVja2V0OwotICAgICAgICBCYXNpY0Jsb2Nr
KiBkb207Ci0gICAgfTsKLSAgICAKLSAgICBHcmFwaCYgbV9ncmFwaDsKLSAgICBCbG9ja01hcDxC
bG9ja0RhdGE+IG1fZGF0YTsKLSAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1fYmxvY2tCeVByZU51
bWJlcjsKLX07Ci0KLXN0cnVjdCBWYWxpZGF0aW9uQ29udGV4dCB7Ci0gICAgVmFsaWRhdGlvbkNv
bnRleHQoR3JhcGgmIGdyYXBoLCBEb21pbmF0b3JzJiBkb21pbmF0b3JzKQotICAgICAgICA6IGdy
YXBoKGdyYXBoKQotICAgICAgICAsIGRvbWluYXRvcnMoZG9taW5hdG9ycykKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgcmVwb3J0RXJyb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9j
ayogdG8sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi0gICAgewotICAgICAgICBFcnJvciBlcnJvcjsK
LSAgICAgICAgZXJyb3IuZnJvbSA9IGZyb207Ci0gICAgICAgIGVycm9yLnRvID0gdG87Ci0gICAg
ICAgIGVycm9yLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgICAgICBlcnJvcnMuYXBwZW5kKGVycm9y
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBoYW5kbGVFcnJvcnMoKQotICAgIHsKLSAgICAgICAg
aWYgKGVycm9ycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
ICAgICBzdGFydENyYXNoaW5nKCk7Ci0gICAgICAgIGRhdGFMb2coIkRGRyBET01JTkFUT1IgVkFM
SURBVElPTiBGQUlMRUQ6XG4iKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLSAgICAgICAgZGF0
YUxvZygiRm9yIGJsb2NrIGRvbWluYXRpb24gcmVsYXRpb25zaGlwczpcbiIpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXJyb3JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICIgICAgIiwgcG9pbnRlckR1bXAoZXJyb3JzW2ld
LmZyb20pLCAiIC0+ICIsIHBvaW50ZXJEdW1wKGVycm9yc1tpXS50byksCi0gICAgICAgICAgICAg
ICAgIiAoIiwgZXJyb3JzW2ldLm1lc3NhZ2UsICIpXG4iKTsKLSAgICAgICAgfQotICAgICAgICBk
YXRhTG9nKCJcbiIpOwotICAgICAgICBkYXRhTG9nKCJDb250cm9sIGZsb3cgZ3JhcGg6XG4iKTsK
LSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgZ3Jh
cGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2sp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgQmxv
Y2sgIyIsIGJsb2NrSW5kZXgsICI6IHN1Y2Nlc3NvcnMgPSBbIik7Ci0gICAgICAgICAgICBDb21t
YVByaW50ZXIgY29tbWE7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxv
Y2stPm51bVN1Y2Nlc3NvcnMoKTsgKytpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEs
ICpibG9jay0+c3VjY2Vzc29yKGkpKTsKLSAgICAgICAgICAgIGRhdGFMb2coIl0sIHByZWRlY2Vz
c29ycyA9IFsiKTsKLSAgICAgICAgICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCAqYmxvY2stPnByZWRlY2Vzc29y
c1tpXSk7Ci0gICAgICAgICAgICBkYXRhTG9nKCJdXG4iKTsKLSAgICAgICAgfQotICAgICAgICBk
YXRhTG9nKCJcbiIpOwotICAgICAgICBkYXRhTG9nKCJMZW5nYXVlci1UYXJqYW4gRG9taW5hdG9y
czpcbiIpOwotICAgICAgICBkYXRhTG9nKGRvbWluYXRvcnMpOwotICAgICAgICBkYXRhTG9nKCJc
biIpOwotICAgICAgICBkYXRhTG9nKCJOYWl2ZSBEb21pbmF0b3JzOlxuIik7Ci0gICAgICAgIG5h
aXZlRG9taW5hdG9ycy5kdW1wKGdyYXBoLCBXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICBkYXRh
TG9nKCJcbiIpOwotICAgICAgICBkYXRhTG9nKCJHcmFwaCBhdCB0aW1lIG9mIGZhaWx1cmU6XG4i
KTsKLSAgICAgICAgZ3JhcGguZHVtcCgpOwotICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAg
ICBkYXRhTG9nKCJERkcgRE9NSU5BVE9SIFZBTElEQVRJT04gRkFJTElFRCFcbiIpOwotICAgICAg
ICBDUkFTSCgpOwotICAgIH0KLSAgICAKLSAgICBHcmFwaCYgZ3JhcGg7Ci0gICAgRG9taW5hdG9y
cyYgZG9taW5hdG9yczsKLSAgICBOYWl2ZURvbWluYXRvcnMgbmFpdmVEb21pbmF0b3JzOwotICAg
IAotICAgIHN0cnVjdCBFcnJvciB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGZyb207Ci0gICAgICAg
IEJhc2ljQmxvY2sqIHRvOwotICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlOwotICAgIH07Ci0g
ICAgCi0gICAgVmVjdG9yPEVycm9yPiBlcnJvcnM7Ci19OwotCi19IC8vIGFub255bW91cyBuYW1l
c3BhY2UKLQotdm9pZCBEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKLXsKLSAgICBM
ZW5nYXVlclRhcmphbiBsZW5nYXVlclRhcmphbihncmFwaCk7Ci0gICAgbGVuZ2F1ZXJUYXJqYW4u
Y29tcHV0ZSgpOwotCi0gICAgbV9kYXRhID0gQmxvY2tNYXA8QmxvY2tEYXRhPihncmFwaCk7Ci0g
ICAgCi0gICAgLy8gRnJvbSBoZXJlIHdlIHdhbnQgdG8gYnVpbGQgYSBzcGFubmluZyB0cmVlIHdp
dGggYm90aCB1cHdhcmQgYW5kIGRvd253YXJkIGxpbmtzIGFuZCB3ZSB3YW50Ci0gICAgLy8gdG8g
ZG8gYSBzZWFyY2ggb3ZlciB0aGlzIHRyZWUgdG8gY29tcHV0ZSBwcmUgYW5kIHBvc3QgbnVtYmVy
cyB0aGF0IGNhbiBiZSB1c2VkIGZvciBkb21pbmFuY2UKLSAgICAvLyB0ZXN0cy4KLSAgICAKLSAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJ
bmRleCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgCi0gICAgICAgIEJhc2ljQmxvY2sqIGlkb21CbG9jayA9IGxlbmdhdWVyVGFyamFuLmltbWVk
aWF0ZURvbWluYXRvcihibG9jayk7Ci0gICAgICAgIG1fZGF0YVtibG9ja10uaWRvbVBhcmVudCA9
IGlkb21CbG9jazsKLSAgICAgICAgaWYgKGlkb21CbG9jaykKLSAgICAgICAgICAgIG1fZGF0YVtp
ZG9tQmxvY2tdLmlkb21LaWRzLmFwcGVuZChibG9jayk7Ci0gICAgfQotICAgIAotICAgIHVuc2ln
bmVkIG5leHRQcmVOdW1iZXIgPSAwOwotICAgIHVuc2lnbmVkIG5leHRQb3N0TnVtYmVyID0gMDsK
LSAgICAKLSAgICAvLyBQbGFpbiBzdGFjay1iYXNlZCB3b3JrbGlzdCBiZWNhdXNlIHdlIGFyZSBn
dWFyYW50ZWVkIHRvIHNlZSBlYWNoIGJsb2NrIGV4YWN0bHkgb25jZSBhbnl3YXkuCi0gICAgVmVj
dG9yPEJsb2NrV2l0aE9yZGVyPiB3b3JrbGlzdDsKLSAgICB3b3JrbGlzdC5hcHBlbmQoQmxvY2tX
aXRoT3JkZXIoZ3JhcGguYmxvY2soMCksIFZpc2l0T3JkZXI6OlByZSkpOwotICAgIHdoaWxlICgh
d29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEJsb2NrV2l0aE9yZGVyIGl0ZW0gPSB3b3Jr
bGlzdC50YWtlTGFzdCgpOwotICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIpIHsKLSAgICAgICAg
Y2FzZSBWaXNpdE9yZGVyOjpQcmU6Ci0gICAgICAgICAgICBtX2RhdGFbaXRlbS5ub2RlXS5wcmVO
dW1iZXIgPSBuZXh0UHJlTnVtYmVyKys7Ci0gICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoQmxv
Y2tXaXRoT3JkZXIoaXRlbS5ub2RlLCBWaXNpdE9yZGVyOjpQb3N0KSk7Ci0gICAgICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGtpZCA6IG1fZGF0YVtpdGVtLm5vZGVdLmlkb21LaWRzKQotICAgICAg
ICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChCbG9ja1dpdGhPcmRlcihraWQsIFZpc2l0T3JkZXI6
OlByZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UG9z
dDoKLSAgICAgICAgICAgIG1fZGF0YVtpdGVtLm5vZGVdLnBvc3ROdW1iZXIgPSBuZXh0UG9zdE51
bWJlcisrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
aWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgLy8gQ2hlY2sgb3VyIGRvbWluYXRv
ciBjYWxjdWxhdGlvbjoKLSAgICAgICAgLy8gMSkgQ2hlY2sgdGhhdCBvdXIgcmFuZ2UtYmFzZWQg
YW5jZXN0cnkgdGVzdCBpcyB0aGUgc2FtZSBhcyBhIG5haXZlIGFuY2VzdHJ5IHRlc3QuCi0gICAg
ICAgIC8vIDIpIENoZWNrIHRoYXQgb3VyIG5vdGlvbiBvZiB3aG8gZG9taW5hdGVzIHdob20gaXMg
aWRlbnRpY2FsIHRvIGEgbmFpdmUgKG5vdAotICAgICAgICAvLyAgICBMZW5nYXVlci1UYXJqYW4p
IGRvbWluYXRvciBjYWxjdWxhdGlvbi4KLSAgICAgICAgCi0gICAgICAgIFZhbGlkYXRpb25Db250
ZXh0IGNvbnRleHQoZ3JhcGgsICp0aGlzKTsKLSAgICAgICAgY29udGV4dC5uYWl2ZURvbWluYXRv
cnMuY29tcHV0ZShncmFwaCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggZnJv
bUJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgZnJvbUJsb2NrSW5kZXgtLTspIHsKLSAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGZyb21CbG9jayA9IGdyYXBoLmJsb2NrKGZyb21CbG9ja0lu
ZGV4KTsKLSAgICAgICAgICAgIGlmICghZnJvbUJsb2NrIHx8IG1fZGF0YVtmcm9tQmxvY2tdLnBy
ZU51bWJlciA9PSBVSU5UX01BWCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCB0b0Jsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgdG9C
bG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogdG9CbG9jayA9IGdy
YXBoLmJsb2NrKHRvQmxvY2tJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0b0Jsb2NrIHx8
IG1fZGF0YVt0b0Jsb2NrXS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChkb21p
bmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSAhPSBuYWl2ZURvbWluYXRlcyhmcm9tQmxvY2ssIHRv
QmxvY2spKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydEVycm9yKGZyb21CbG9j
aywgdG9CbG9jaywgIlJhbmdlLWJhc2VkIGRvbWluYXRpb24gY2hlY2sgaXMgYnJva2VuIik7Ci0g
ICAgICAgICAgICAgICAgaWYgKGRvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxvY2spICE9IGNvbnRl
eHQubmFpdmVEb21pbmF0b3JzLmRvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxvY2spKQotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydEVycm9yKGZyb21CbG9jaywgdG9CbG9jaywgIkxl
bmdhdWVyLVRhcmphbiBkb21pbmF0aW9uIGlzIGJyb2tlbiIpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBjb250ZXh0LmhhbmRsZUVycm9ycygpOwotICAgIH0K
LX0KLQotQmxvY2tTZXQgRG9taW5hdG9yczo6c3RyaWN0RG9taW5hdG9yc09mKEJhc2ljQmxvY2sq
IHRvKSBjb25zdAotewotICAgIEJsb2NrU2V0IHJlc3VsdDsKLSAgICBmb3JBbGxTdHJpY3REb21p
bmF0b3JzT2YodG8sIEJsb2NrQWRkZXIocmVzdWx0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotQmxvY2tTZXQgRG9taW5hdG9yczo6ZG9taW5hdG9yc09mKEJhc2ljQmxvY2sqIHRvKSBjb25z
dAotewotICAgIEJsb2NrU2V0IHJlc3VsdDsKLSAgICBmb3JBbGxEb21pbmF0b3JzT2YodG8sIEJs
b2NrQWRkZXIocmVzdWx0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQmxvY2tTZXQgRG9t
aW5hdG9yczo6YmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tKSBjb25z
dAotewotICAgIEJsb2NrU2V0IHJlc3VsdDsKLSAgICBmb3JBbGxCbG9ja3NTdHJpY3RseURvbWlu
YXRlZEJ5KGZyb20sIEJsb2NrQWRkZXIocmVzdWx0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotQmxvY2tTZXQgRG9taW5hdG9yczo6YmxvY2tzRG9taW5hdGVkQnkoQmFzaWNCbG9jayogZnJv
bSkgY29uc3QKLXsKLSAgICBCbG9ja1NldCByZXN1bHQ7Ci0gICAgZm9yQWxsQmxvY2tzRG9taW5h
dGVkQnkoZnJvbSwgQmxvY2tBZGRlcihyZXN1bHQpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1CbG9ja1NldCBEb21pbmF0b3JzOjpkb21pbmFuY2VGcm9udGllck9mKEJhc2ljQmxvY2sqIGZy
b20pIGNvbnN0Ci17Ci0gICAgQmxvY2tTZXQgcmVzdWx0OwotICAgIGZvckFsbEJsb2Nrc0luRG9t
aW5hbmNlRnJvbnRpZXJPZkltcGwoZnJvbSwgQmxvY2tBZGRlcihyZXN1bHQpKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1CbG9ja1NldCBEb21pbmF0b3JzOjppdGVyYXRlZERvbWluYW5jZUZy
b250aWVyT2YoY29uc3QgQmxvY2tMaXN0JiBmcm9tKSBjb25zdAotewotICAgIEJsb2NrU2V0IHJl
c3VsdDsKLSAgICBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwo
ZnJvbSwgQmxvY2tBZGRlcihyZXN1bHQpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29s
IERvbWluYXRvcnM6Om5haXZlRG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sq
IHRvKSBjb25zdAotewotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgPSB0bzsgYmxvY2s7IGJs
b2NrID0gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50KSB7Ci0gICAgICAgIGlmIChibG9jayA9PSBm
cm9tKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBEb21pbmF0b3JzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFpc1ZhbGlkKCkpIHsKLSAgICAgICAgb3V0LnByaW50KCIgICAgTm90IFZhbGlkLlxu
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9kYXRhLnNpemUoKTsgKytibG9ja0luZGV4KSB7
Ci0gICAgICAgIGlmIChtX2RhdGFbYmxvY2tJbmRleF0ucHJlTnVtYmVyID09IFVJTlRfTUFYKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBvdXQucHJpbnQoIiAgICBC
bG9jayAjIiwgYmxvY2tJbmRleCwgIjogaWRvbSA9ICIsIHBvaW50ZXJEdW1wKG1fZGF0YVtibG9j
a0luZGV4XS5pZG9tUGFyZW50KSwgIiwgaWRvbUtpZHMgPSBbIik7Ci0gICAgICAgIENvbW1hUHJp
bnRlciBjb21tYTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGF0YVtibG9j
a0luZGV4XS5pZG9tS2lkcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgKm1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkc1tpXSk7Ci0gICAgICAgIG91dC5wcmludCgi
XSwgcHJlL3Bvc3QgPSAiLCBtX2RhdGFbYmxvY2tJbmRleF0ucHJlTnVtYmVyLCAiLyIsIG1fZGF0
YVtibG9ja0luZGV4XS5wb3N0TnVtYmVyLCAiXG4iKTsKLSAgICB9Ci19Ci0KLX0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkocmV2aXNpb24gMTkxODM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDE5MCArMjgsMjYgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVk
ZSAiREZHQW5hbHlzaXMuaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAi
REZHQmxvY2tNYXAuaCIKICNpbmNsdWRlICJERkdCbG9ja1NldC5oIgorI2luY2x1ZGUgIkRGR0NG
Ry5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5j
bHVkZSA8d3RmL0RvbWluYXRvcnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKLWNsYXNzIEdyYXBoOwotCi1jbGFzcyBEb21pbmF0b3JzIDogcHVibGljIEFuYWx5c2lz
PERvbWluYXRvcnM+IHsKK2NsYXNzIERvbWluYXRvcnMgOiBwdWJsaWMgV1RGOjpEb21pbmF0b3Jz
PENGRz4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERvbWluYXRvcnMpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIERvbWluYXRvcnMoKTsKLSAgICB+RG9t
aW5hdG9ycygpOwotICAgIAotICAgIHZvaWQgY29tcHV0ZShHcmFwaCYpOwotICAgIAotICAgIGJv
b2wgc3RyaWN0bHlEb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNv
bnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAgICAgICAgcmV0dXJuIG1f
ZGF0YVt0b10ucHJlTnVtYmVyID4gbV9kYXRhW2Zyb21dLnByZU51bWJlcgotICAgICAgICAgICAg
JiYgbV9kYXRhW3RvXS5wb3N0TnVtYmVyIDwgbV9kYXRhW2Zyb21dLnBvc3ROdW1iZXI7Ci0gICAg
fQotICAgIAotICAgIGJvb2wgZG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sq
IHRvKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGZyb20gPT0gdG8gfHwgc3RyaWN0bHlE
b21pbmF0ZXMoZnJvbSwgdG8pOwotICAgIH0KLSAgICAKLSAgICBCYXNpY0Jsb2NrKiBpbW1lZGlh
dGVEb21pbmF0b3JPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQ7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JBbGxTdHJpY3REb21pbmF0b3JzT2YoQmFz
aWNCbG9jayogdG8sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Ci0gICAgewotICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrID0gbV9kYXRhW3RvXS5pZG9tUGFyZW50OyBibG9jazsg
YmxvY2sgPSBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQpCi0gICAgICAgICAgICBmdW5jdG9yKGJs
b2NrKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2
b2lkIGZvckFsbERvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bywgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgPSB0bzsg
YmxvY2s7IGJsb2NrID0gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50KQotICAgICAgICAgICAgZnVu
Y3RvcihibG9jayk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Ci0gICAgdm9pZCBmb3JBbGxCbG9ja3NTdHJpY3RseURvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZy
b20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBWZWN0b3I8
QmFzaWNCbG9jayosIDE2PiB3b3JrbGlzdDsKLSAgICAgICAgd29ya2xpc3QuYXBwZW5kVmVjdG9y
KG1fZGF0YVtmcm9tXS5pZG9tS2lkcyk7Ci0gICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0
KCk7Ci0gICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LmFw
cGVuZFZlY3RvcihtX2RhdGFbYmxvY2tdLmlkb21LaWRzKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yQWxsQmxvY2tz
RG9taW5hdGVkQnkoQmFzaWNCbG9jayogZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29u
c3QKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0OwotICAg
ICAgICB3b3JrbGlzdC5hcHBlbmQoZnJvbSk7Ci0gICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VM
YXN0KCk7Ci0gICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKLSAgICAgICAgICAgIHdvcmtsaXN0
LmFwcGVuZFZlY3RvcihtX2RhdGFbYmxvY2tdLmlkb21LaWRzKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICBCbG9ja1NldCBzdHJpY3REb21pbmF0b3JzT2YoQmFzaWNCbG9jayogdG8pIGNv
bnN0OwotICAgIEJsb2NrU2V0IGRvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bykgY29uc3Q7Ci0g
ICAgQmxvY2tTZXQgYmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tKSBj
b25zdDsKLSAgICBCbG9ja1NldCBibG9ja3NEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tKSBj
b25zdDsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9y
QWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mKAotICAgICAgICBCYXNpY0Jsb2NrKiBmcm9t
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgQmxvY2tTZXQg
c2V0OwotICAgICAgICBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJbXBsKAotICAg
ICAgICAgICAgZnJvbSwKLSAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2spIHsKLSAg
ICAgICAgICAgICAgICBpZiAoc2V0LmFkZChibG9jaykpCi0gICAgICAgICAgICAgICAgICAgIGZ1
bmN0b3IoYmxvY2spOwotICAgICAgICAgICAgfSk7Ci0gICAgfQotICAgIAotICAgIEJsb2NrU2V0
IGRvbWluYW5jZUZyb250aWVyT2YoQmFzaWNCbG9jayogZnJvbSkgY29uc3Q7Ci0gICAgCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0
ZWREb21pbmFuY2VGcm9udGllck9mKAotICAgICAgICBjb25zdCBCbG9ja0xpc3QmIGZyb20sIGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBmb3JBbGxCbG9ja3NJblBydW5l
ZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKLSAgICAgICAgICAgIGZyb20sCi0gICAgICAg
ICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICBm
dW5jdG9yKGJsb2NrKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IH0pOwotICAgIH0KLSAgICAKLSAgICAvLyBUaGlzIGlzIGEgY2xvc2UgcmVsYXRpdmUgb2YgZm9y
QWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoKSwgd2hpY2ggYWxsb3dzIHRo
ZQotICAgIC8vIGdpdmVuIGZ1bmN0b3IgdG8gcmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIHRoYXQg
d2UgZG9uJ3Qgd2lzaCB0byBjb25zaWRlciB0aGUgZ2l2ZW4gYmxvY2suCi0gICAgLy8gVXNlZnVs
IGZvciBjb21wdXRpbmcgcHJ1bmVkIFNTQSBmb3JtLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+Ci0gICAgdm9pZCBmb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJv
bnRpZXJPZigKLSAgICAgICAgY29uc3QgQmxvY2tMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQotICAgIHsKLSAgICAgICAgQmxvY2tTZXQgc2V0OwotICAgICAgICBmb3JBbGxCbG9j
a3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCi0gICAgICAgICAgICBmcm9tLAot
ICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaykgLT4gYm9vbCB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFzZXQuYWRkKGJsb2NrKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdG9yKGJsb2NrKTsKLSAgICAgICAgICAg
IH0pOwotICAgIH0KLSAgICAKLSAgICBCbG9ja1NldCBpdGVyYXRlZERvbWluYW5jZUZyb250aWVy
T2YoY29uc3QgQmxvY2tMaXN0JiBmcm9tKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgYm9vbCBuYWl2ZURvbWluYXRl
cyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3Q7Ci0gICAgCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbEJsb2Nrc0luRG9taW5hbmNl
RnJvbnRpZXJPZkltcGwoCi0gICAgICAgIEJhc2ljQmxvY2sqIGZyb20sIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBQYXJhcGhyYXNpbmcgZnJvbSBodHRw
Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RvbWluYXRvcl8oZ3JhcGhfdGhlb3J5KToKLSAgICAg
ICAgLy8gICAgICJUaGUgZG9taW5hbmNlIGZyb250aWVyIG9mIGEgYmxvY2sgJ2Zyb20nIGlzIHRo
ZSBzZXQgb2YgYWxsIGJsb2NrcyAndG8nIHN1Y2ggdGhhdAotICAgICAgICAvLyAgICAgJ2Zyb20n
IGRvbWluYXRlcyBhbiBpbW1lZGlhdGUgcHJlZGVjZXNzb3Igb2YgJ3RvJywgYnV0ICdmcm9tJyBk
b2VzIG5vdCBzdHJpY3RseQotICAgICAgICAvLyAgICAgZG9taW5hdGUgJ3RvJy4iCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIEEgdXNlZnVsIGNvcm5lciBjYXNlIHRvIHJlbWVtYmVyOiBhIGJsb2Nr
IG1heSBiZSBpbiBpdHMgb3duIGRvbWluYW5jZSBmcm9udGllciBpZiBpdCBoYXMKLSAgICAgICAg
Ly8gYSBsb29wIGVkZ2UgdG8gaXRzZWxmLCBzaW5jZSBpdCBkb21pbmF0ZXMgaXRzZWxmIGFuZCBz
byBpdCBkb21pbmF0ZXMgaXRzIG93biBpbW1lZGlhdGUKLSAgICAgICAgLy8gcHJlZGVjZXNzb3Is
IGFuZCBhIGJsb2NrIG5ldmVyIHN0cmljdGx5IGRvbWluYXRlcyBpdHNlbGYuCi0gICAgICAgIAot
ICAgICAgICBmb3JBbGxCbG9ja3NEb21pbmF0ZWRCeSgKLSAgICAgICAgICAgIGZyb20sCi0gICAg
ICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3Nv
ckluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvID0gYmxvY2st
PnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3Ry
aWN0bHlEb21pbmF0ZXMoZnJvbSwgdG8pKQotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rv
cih0byk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgfQotICAgIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JBbGxCbG9ja3NJbkl0
ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCi0gICAgICAgIGNvbnN0IEJsb2NrTGlzdCYg
ZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICBEb21pbmF0b3JzKEdyYXBo
JiBncmFwaCkKKyAgICAgICAgOiBXVEY6OkRvbWluYXRvcnM8Q0ZHPigqZ3JhcGgubV9jZmcsIHZh
bGlkYXRpb25FbmFibGVkKCkpCiAgICAgewotICAgICAgICBCbG9ja0xpc3Qgd29ya2xpc3QgPSBm
cm9tOwotICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOwotICAgICAgICAgICAgZm9y
QWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mSW1wbCgKLSAgICAgICAgICAgICAgICBibG9j
aywKLSAgICAgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIG90aGVyQmxvY2spIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGZ1bmN0b3Iob3RoZXJCbG9jaykpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB3b3JrbGlzdC5hcHBlbmQob3RoZXJCbG9jayk7Ci0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgc3RydWN0IEJsb2NrRGF0YSB7Ci0gICAgICAg
IEJsb2NrRGF0YSgpCi0gICAgICAgICAgICA6IGlkb21QYXJlbnQobnVsbHB0cikKLSAgICAgICAg
ICAgICwgcHJlTnVtYmVyKFVJTlRfTUFYKQotICAgICAgICAgICAgLCBwb3N0TnVtYmVyKFVJTlRf
TUFYKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKj4gaWRvbUtpZHM7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGlkb21QYXJlbnQ7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBwcmVOdW1iZXI7Ci0gICAgICAgIHVuc2lnbmVkIHBvc3RO
dW1iZXI7Ci0gICAgfTsKLSAgICAKLSAgICBCbG9ja01hcDxCbG9ja0RhdGE+IG1fZGF0YTsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRWRnZURvbWluYXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRWRnZURvbWluYXRlcy5oCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdEb21p
bmF0b3JzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewpAQCAtNDUsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBvcGVy
YXRvcigpKE5vZGUqLCBFZGdlIGVkZ2UpCiAgICAgewotICAgICAgICBib29sIHJlc3VsdCA9IG1f
Z3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhlZGdlLm5vZGUoKS0+b3duZXIsIG1fYmxvY2sp
OworICAgICAgICBib29sIHJlc3VsdCA9IG1fZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXMo
ZWRnZS5ub2RlKCktPm93bmVyLCBtX2Jsb2NrKTsKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAg
ICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAgIkNoZWNraW5nIGlmICIsIGVkZ2Us
ICIgaW4gIiwgKmVkZ2Uubm9kZSgpLT5vd25lciwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsMTIgQEAKICNp
bmNsdWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgog
I2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHQ0ZHLmgiCisj
aW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNs
dWRlICJERkdNYXlFeGl0LmgiCisjaW5jbHVkZSAiREZHTmF0dXJhbExvb3BzLmgiCisjaW5jbHVk
ZSAiREZHUHJlUG9zdE51bWJlcmluZy5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuaCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCIKQEAgLTY0LDYgKzY4LDcgQEAgR3JhcGg6OkdyYXBoKFZN
JiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdgogICAgICwgbV9jb2RlQmxvY2sobV9wbGFuLmNvZGVC
bG9jaykKICAgICAsIG1fcHJvZmlsZWRCbG9jayhtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkK
ICAgICAsIG1fYWxsb2NhdG9yKGxvbmdMaXZlZFN0YXRlLm1fYWxsb2NhdG9yKQorICAgICwgbV9j
Zmcoc3RkOjptYWtlX3VuaXF1ZTxDRkc+KCp0aGlzKSkKICAgICAsIG1fbmV4dE1hY2hpbmVMb2Nh
bCgwKQogICAgICwgbV9maXhwb2ludFN0YXRlKEJlZm9yZUZpeHBvaW50KQogICAgICwgbV9zdHJ1
Y3R1cmVSZWdpc3RyYXRpb25TdGF0ZShIYXZlTm90U3RhcnRlZFJlZ2lzdGVyaW5nKQpAQCAtNDAx
LDIyICs0MDYsMjIgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgog
ICAgIGlmIChibG9jay0+dGVybWluYWwoKSkgewogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAgICAgIG91dC5wcmludCgi
ICIsICpzdWNjZXNzb3IpOwotICAgICAgICAgICAgaWYgKG1fcHJlUG9zdE51bWJlcmluZy5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKCIsIG1fcHJlUG9zdE51bWJlcmlu
Zy5lZGdlS2luZChibG9jaywgc3VjY2Vzc29yKSwgIikiKTsKKyAgICAgICAgICAgIGlmIChtX3By
ZVBvc3ROdW1iZXJpbmcpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKCIsIG1fcHJlUG9z
dE51bWJlcmluZy0+ZWRnZUtpbmQoYmxvY2ssIHN1Y2Nlc3NvciksICIpIik7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UKICAgICAgICAgb3V0LnByaW50KCIgPGludmFsaWQ+Iik7CiAgICAgb3V0LnBy
aW50KCJcbiIpOwotICAgIGlmIChtX2RvbWluYXRvcnMuaXNWYWxpZCgpICYmIHRlcm1pbmFsc0Fy
ZVZhbGlkKCkpIHsKLSAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiAi
LCBtX2RvbWluYXRvcnMuZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7Ci0gICAgICAgIG91dC5w
cmludChwcmVmaXgsICIgIERvbWluYXRlczogIiwgbV9kb21pbmF0b3JzLmJsb2Nrc0RvbWluYXRl
ZEJ5KGJsb2NrKSwgIlxuIik7Ci0gICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYW5j
ZSBGcm9udGllcjogIiwgbV9kb21pbmF0b3JzLmRvbWluYW5jZUZyb250aWVyT2YoYmxvY2spLCAi
XG4iKTsKLSAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgSXRlcmF0ZWQgRG9taW5hbmNlIEZy
b250aWVyOiAiLCBtX2RvbWluYXRvcnMuaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKEJsb2Nr
TGlzdCgxLCBibG9jaykpLCAiXG4iKTsKLSAgICB9Ci0gICAgaWYgKG1fcHJlUG9zdE51bWJlcmlu
Zy5pc1ZhbGlkKCkpCi0gICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIFByZS9Qb3N0IE51bWJl
cmluZzogIiwgbV9wcmVQb3N0TnVtYmVyaW5nLnByZU51bWJlcihibG9jayksICIvIiwgbV9wcmVQ
b3N0TnVtYmVyaW5nLnBvc3ROdW1iZXIoYmxvY2spLCAiXG4iKTsKLSAgICBpZiAobV9uYXR1cmFs
TG9vcHMuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGlmIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9
IG1fbmF0dXJhbExvb3BzLmhlYWRlck9mKGJsb2NrKSkgeworICAgIGlmIChtX2RvbWluYXRvcnMg
JiYgdGVybWluYWxzQXJlVmFsaWQoKSkgeworICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBE
b21pbmF0ZWQgYnk6ICIsIG1fZG9taW5hdG9ycy0+ZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7
CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlczogIiwgbV9kb21pbmF0b3Jz
LT5ibG9ja3NEb21pbmF0ZWRCeShibG9jayksICJcbiIpOworICAgICAgICBvdXQucHJpbnQocHJl
Zml4LCAiICBEb21pbmFuY2UgRnJvbnRpZXI6ICIsIG1fZG9taW5hdG9ycy0+ZG9taW5hbmNlRnJv
bnRpZXJPZihibG9jayksICJcbiIpOworICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBJdGVy
YXRlZCBEb21pbmFuY2UgRnJvbnRpZXI6ICIsIG1fZG9taW5hdG9ycy0+aXRlcmF0ZWREb21pbmFu
Y2VGcm9udGllck9mKEJsb2NrTGlzdCgxLCBibG9jaykpLCAiXG4iKTsKKyAgICB9CisgICAgaWYg
KG1fcHJlUG9zdE51bWJlcmluZykKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgUHJlL1Bv
c3QgTnVtYmVyaW5nOiAiLCBtX3ByZVBvc3ROdW1iZXJpbmctPnByZU51bWJlcihibG9jayksICIv
IiwgbV9wcmVQb3N0TnVtYmVyaW5nLT5wb3N0TnVtYmVyKGJsb2NrKSwgIlxuIik7CisgICAgaWYg
KG1fbmF0dXJhbExvb3BzKSB7CisgICAgICAgIGlmIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9
IG1fbmF0dXJhbExvb3BzLT5oZWFkZXJPZihibG9jaykpIHsKICAgICAgICAgICAgIG91dC5wcmlu
dChwcmVmaXgsICIgIExvb3AgaGVhZGVyLCBjb250YWluczoiKTsKICAgICAgICAgICAgIFZlY3Rv
cjxCbG9ja0luZGV4PiBzb3J0ZWRCbG9ja0xpc3Q7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbG9vcC0+c2l6ZSgpOyArK2kpCkBAIC00MjgsNyArNDMzLDcgQEAgdm9pZCBH
cmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBjb250YWluaW5nTG9vcHMgPQotICAg
ICAgICAgICAgbV9uYXR1cmFsTG9vcHMubG9vcHNPZihibG9jayk7CisgICAgICAgICAgICBtX25h
dHVyYWxMb29wcy0+bG9vcHNPZihibG9jayk7CiAgICAgICAgIGlmICghY29udGFpbmluZ0xvb3Bz
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgQ29udGFpbmlu
ZyBsb29wIGhlYWRlcnM6Iik7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y29udGFpbmluZ0xvb3BzLnNpemUoKTsgKytpKQpAQCAtNzQ2LDkgKzc1MSw5IEBAIHZvaWQgR3Jh
cGg6OmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpCiAKIHZvaWQgR3JhcGg6OmludmFsaWRhdGVDRkco
KQogewotICAgIG1fZG9taW5hdG9ycy5pbnZhbGlkYXRlKCk7Ci0gICAgbV9uYXR1cmFsTG9vcHMu
aW52YWxpZGF0ZSgpOwotICAgIG1fcHJlUG9zdE51bWJlcmluZy5pbnZhbGlkYXRlKCk7CisgICAg
bV9kb21pbmF0b3JzID0gbnVsbHB0cjsKKyAgICBtX25hdHVyYWxMb29wcyA9IG51bGxwdHI7Cisg
ICAgbV9wcmVQb3N0TnVtYmVyaW5nID0gbnVsbHB0cjsKIH0KIAogdm9pZCBHcmFwaDo6c3Vic3Rp
dHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25lZCBzdGFydEluZGV4SW5CbG9j
aywgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEsIE5vZGUqIG5ld0dldExv
Y2FsKQpAQCAtMTQxMCw2ICsxNDE1LDI1IEBAIHZvaWQgR3JhcGg6OmhhbmRsZUFzc2VydGlvbkZh
aWx1cmUoCiAgICAgY3Jhc2goKnRoaXMsIHRvQ1N0cmluZygiV2hpbGUgaGFuZGxpbmcgYmxvY2sg
IiwgcG9pbnRlckR1bXAoYmxvY2spLCAiXG5cbiIpLCBmaWxlLCBsaW5lLCBmdW5jdGlvbiwgYXNz
ZXJ0aW9uKTsKIH0KIAordm9pZCBHcmFwaDo6ZW5zdXJlRG9taW5hdG9ycygpCit7CisgICAgaWYg
KCFtX2RvbWluYXRvcnMpCisgICAgICAgIG1fZG9taW5hdG9ycyA9IHN0ZDo6bWFrZV91bmlxdWU8
RG9taW5hdG9ycz4oKnRoaXMpOworfQorCit2b2lkIEdyYXBoOjplbnN1cmVQcmVQb3N0TnVtYmVy
aW5nKCkKK3sKKyAgICBpZiAoIW1fcHJlUG9zdE51bWJlcmluZykKKyAgICAgICAgbV9wcmVQb3N0
TnVtYmVyaW5nID0gc3RkOjptYWtlX3VuaXF1ZTxQcmVQb3N0TnVtYmVyaW5nPigqdGhpcyk7Cit9
CisKK3ZvaWQgR3JhcGg6OmVuc3VyZU5hdHVyYWxMb29wcygpCit7CisgICAgZW5zdXJlRG9taW5h
dG9ycygpOworICAgIGlmICghbV9uYXR1cmFsTG9vcHMpCisgICAgICAgIG1fbmF0dXJhbExvb3Bz
ID0gc3RkOjptYWtlX3VuaXF1ZTxOYXR1cmFsTG9vcHM+KCp0aGlzKTsKK30KKwogVmFsdWVQcm9m
aWxlKiBHcmFwaDo6dmFsdWVQcm9maWxlRm9yKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2Rl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTkxODM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMywxNCArMzMsMTEgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJE
RkdBcmd1bWVudFBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgotI2luY2x1
ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJERkdGcm96ZW5WYWx1ZS5oIgogI2luY2x1
ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCi0jaW5jbHVkZSAiREZHTmF0dXJhbExvb3BzLmgiCiAj
aW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJERkdQbGFuLmgiCi0jaW5jbHVkZSAiREZHUHJlUG9zdE51bWJlcmluZy5oIgogI2luY2x1
ZGUgIkRGR1Byb3BlcnR5VHlwZUtleS5oIgogI2luY2x1ZGUgIkRGR1NjYW5uYWJsZS5oIgogI2lu
Y2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNzLmgiCkBAIC01OSw2ICs1NiwxMSBAQCBjbGFzcyBF
eGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBERkcgewogCitjbGFzcyBDRkc7CitjbGFzcyBEb21pbmF0
b3JzOworY2xhc3MgTmF0dXJhbExvb3BzOworY2xhc3MgUHJlUG9zdE51bWJlcmluZzsKKwogI2Rl
ZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7
ICAgICAgICAgICAgXAogICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoX25vZGUtPmZsYWdz
KCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtODIw
LDYgKzgyMiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RlYnVnZ2VyRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzRGVidWdnZXJFbmFibGVkOyB9CiAKKyAgICB2b2lkIGVuc3VyZURv
bWluYXRvcnMoKTsKKyAgICB2b2lkIGVuc3VyZVByZVBvc3ROdW1iZXJpbmcoKTsKKyAgICB2b2lk
IGVuc3VyZU5hdHVyYWxMb29wcygpOworCiAgICAgVk0mIG1fdm07CiAgICAgUGxhbiYgbV9wbGFu
OwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC04ODUsOSArODkxLDEwIEBAIHB1Ymxp
YzoKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUtpbGxz
Pj4gbV9ieXRlY29kZUtpbGxzOwogICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEpTT2JqZWN0KiwgUHJv
cGVydHlPZmZzZXQ+PiBtX3NhZmVUb0xvYWQ7CiAgICAgSGFzaE1hcDxQcm9wZXJ0eVR5cGVLZXks
IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvcj4gbV9pbmZlcnJlZFR5cGVzOwotICAgIERvbWluYXRv
cnMgbV9kb21pbmF0b3JzOwotICAgIFByZVBvc3ROdW1iZXJpbmcgbV9wcmVQb3N0TnVtYmVyaW5n
OwotICAgIE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
RG9taW5hdG9ycz4gbV9kb21pbmF0b3JzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVQb3N0TnVt
YmVyaW5nPiBtX3ByZVBvc3ROdW1iZXJpbmc7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5hdHVyYWxM
b29wcz4gbV9uYXR1cmFsTG9vcHM7CisgICAgc3RkOjp1bmlxdWVfcHRyPENGRz4gbV9jZmc7CiAg
ICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2Fs
OwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Jsb2Nr
TWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrU2V0LmgiCiAjaW5jbHVkZSAiREZHR3Jh
cGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5o
IgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2
aXNpb24gMTkxODM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiREZHRWRnZURv
bWluYXRlcy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiREZHTmF0dXJhbExvb3BzLmgiCiAjaW5jbHVkZSAiREZHUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdTYWZlVG9FeGVjdXRlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgpAQCAtNzEsMTUgKzcyLDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKICAgICAgICAgCi0gICAg
ICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKLSAg
ICAgICAgbV9ncmFwaC5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7
CisgICAgICAgIG1fZ3JhcGguZW5zdXJlRG9taW5hdG9ycygpOworICAgICAgICBtX2dyYXBoLmVu
c3VyZU5hdHVyYWxMb29wcygpOwogCiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAg
ICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgTElDTTpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5k
dW1wKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fZGF0YS5yZXNpemUobV9ncmFw
aC5tX25hdHVyYWxMb29wcy5udW1Mb29wcygpKTsKKyAgICAgICAgbV9kYXRhLnJlc2l6ZShtX2dy
YXBoLm1fbmF0dXJhbExvb3BzLT5udW1Mb29wcygpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZp
Z3VyZSBvdXQgdGhlIHNldCBvZiB0aGluZ3MgZWFjaCBsb29wIHdyaXRlcyB0bywgbm90IGluY2x1
ZGluZyBibG9ja3MgdGhhdAogICAgICAgICAvLyBiZWxvbmcgdG8gaW5uZXIgbG9vcHMuIFdlIGZp
eCB0aGlzIGxhdGVyLgpAQCAtOTQsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAo
IWJsb2NrLT5jZmFIYXNWaXNpdGVkKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IG1fZ3JhcGgubV9u
YXR1cmFsTG9vcHMuaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKKyAgICAgICAgICAgIGNvbnN0IE5h
dHVyYWxMb29wKiBsb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy0+aW5uZXJNb3N0TG9vcE9m
KGJsb2NrKTsKICAgICAgICAgICAgIGlmICghbG9vcCkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIExvb3BEYXRhJiBkYXRhID0gbV9kYXRhW2xvb3AtPmluZGV4KCldOwpA
QCAtMTE0LDE0ICsxMTUsMTQgQEAgcHVibGljOgogICAgICAgICAvLyBGb3IgZWFjaCBsb29wOgog
ICAgICAgICAvLyAtIElkZW50aWZ5IGl0cyBwcmUtaGVhZGVyLgogICAgICAgICAvLyAtIE1ha2Ug
c3VyZSBpdHMgb3V0ZXIgbG9vcHMga25vdyB3aGF0IGl0IGNsb2JiZXJzLgotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGxvb3BJbmRleCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMubnVtTG9vcHMoKTsg
bG9vcEluZGV4LS07KSB7Ci0gICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9IG1f
Z3JhcGgubV9uYXR1cmFsTG9vcHMubG9vcChsb29wSW5kZXgpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGxvb3BJbmRleCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMtPm51bUxvb3BzKCk7IGxvb3BJ
bmRleC0tOykgeworICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSBtX2dyYXBo
Lm1fbmF0dXJhbExvb3BzLT5sb29wKGxvb3BJbmRleCk7CiAgICAgICAgICAgICBMb29wRGF0YSYg
ZGF0YSA9IG1fZGF0YVtsb29wLmluZGV4KCldOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBm
b3IgKAotICAgICAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBvdXRlckxvb3AgPSBtX2dy
YXBoLm1fbmF0dXJhbExvb3BzLmlubmVyTW9zdE91dGVyTG9vcChsb29wKTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBOYXR1cmFsTG9vcCogb3V0ZXJMb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29w
cy0+aW5uZXJNb3N0T3V0ZXJMb29wKGxvb3ApOwogICAgICAgICAgICAgICAgIG91dGVyTG9vcDsK
LSAgICAgICAgICAgICAgICBvdXRlckxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmlubmVy
TW9zdE91dGVyTG9vcCgqb3V0ZXJMb29wKSkKKyAgICAgICAgICAgICAgICBvdXRlckxvb3AgPSBt
X2dyYXBoLm1fbmF0dXJhbExvb3BzLT5pbm5lck1vc3RPdXRlckxvb3AoKm91dGVyTG9vcCkpCiAg
ICAgICAgICAgICAgICAgbV9kYXRhW291dGVyTG9vcC0+aW5kZXgoKV0ud3JpdGVzLmFkZEFsbChk
YXRhLndyaXRlcyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGhlYWRl
ciA9IGxvb3AuaGVhZGVyKCk7CkBAIC0xMzUsNyArMTM2LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBoZWFkZXItPnByZWRlY2Vzc29ycy5z
aXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9
IGhlYWRlci0+cHJlZGVjZXNzb3JzW2ldOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
ZG9taW5hdG9ycy5kb21pbmF0ZXMoaGVhZGVyLCBwcmVkZWNlc3NvcikpCisgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXMoaGVhZGVyLCBwcmVkZWNlc3Nv
cikpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgcHJl
SGVhZGVyID0gcHJlZGVjZXNzb3I7CkBAIC0xODksNyArMTkwLDcgQEAgcHVibGljOgogICAgICAg
ICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBsb29wU3RhY2s7CiAgICAgICAgIGJvb2wgY2hh
bmdlZCA9IGZhbHNlOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5i
bG9ja3NJblByZU9yZGVyKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBsb29w
ID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5pbm5lck1vc3RMb29wT2YoYmxvY2spOworICAgICAg
ICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLT5p
bm5lck1vc3RMb29wT2YoYmxvY2spOwogICAgICAgICAgICAgaWYgKCFsb29wKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCkBAIC0xOTcsNyArMTk4LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgZm9yICgKICAgICAgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCog
Y3VycmVudCA9IGxvb3A7CiAgICAgICAgICAgICAgICAgY3VycmVudDsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50ID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5pbm5lck1vc3RPdXRlckxvb3AoKmN1
cnJlbnQpKQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3Bz
LT5pbm5lck1vc3RPdXRlckxvb3AoKmN1cnJlbnQpKQogICAgICAgICAgICAgICAgIGxvb3BTdGFj
ay5hcHBlbmQoY3VycmVudCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFJlbWVtYmVy
OiB0aGUgbG9vcCBzdGFjayBoYXMgdGhlIGlubmVyLW1vc3QgbG9vcCBhdCBpbmRleCAwLCBzbyBp
ZiB3ZSB3YW50CkBAIC0zMzMsNyArMzM0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gYmVjYXVz
ZSBtb3N0IGxvb3BzIGFyZSBzbWFsbCBhbmQgbW9zdCBibG9ja3MgYmVsb25nIHRvIGZldyBsb29w
cy4KICAgICAgICAgZm9yICh1bnNpZ25lZCBib2R5SW5kZXggPSBsb29wLT5zaXplKCk7IGJvZHlJ
bmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogc3ViQmxvY2sgPSBsb29wLT5hdChi
b2R5SW5kZXgpOwotICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIHN1Ykxvb3AgPSBtX2dy
YXBoLm1fbmF0dXJhbExvb3BzLmhlYWRlck9mKHN1YkJsb2NrKTsKKyAgICAgICAgICAgIGNvbnN0
IE5hdHVyYWxMb29wKiBzdWJMb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy0+aGVhZGVyT2Yo
c3ViQmxvY2spOwogICAgICAgICAgICAgaWYgKCFzdWJMb29wKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgQmFzaWNCbG9jayogc3ViUHJlSGVhZGVyID0gbV9kYXRhW3N1
Ykxvb3AtPmluZGV4KCldLnByZUhlYWRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVI
ZWFkZXJDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBAQAog
CiAjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJERkdCbG9ja0lu
c2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJERkdH
cmFwaC5oIgorI2luY2x1ZGUgIkRGR05hdHVyYWxMb29wcy5oIgogI2luY2x1ZGUgIkRGR1BoYXNl
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBA
IC05NCw3ICs5Niw3IEBAIEJhc2ljQmxvY2sqIGNyZWF0ZVByZUhlYWRlcihHcmFwaCYgZ3JhcGgK
ICAgICAKICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29ySW5kZXggPSAwOyBwcmVkZWNlc3Nv
ckluZGV4IDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IHByZWRlY2Vzc29ySW5kZXgrKykg
ewogICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNb
cHJlZGVjZXNzb3JJbmRleF07Ci0gICAgICAgIGlmIChncmFwaC5tX2RvbWluYXRvcnMuZG9taW5h
dGVzKGJsb2NrLCBwcmVkZWNlc3NvcikpCisgICAgICAgIGlmIChncmFwaC5tX2RvbWluYXRvcnMt
PmRvbWluYXRlcyhibG9jaywgcHJlZGVjZXNzb3IpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnNbcHJlZGVjZXNzb3JJbmRleC0tXSA9IGJsb2NrLT5w
cmVkZWNlc3NvcnMubGFzdCgpOwogICAgICAgICBibG9jay0+cHJlZGVjZXNzb3JzLnJlbW92ZUxh
c3QoKTsKQEAgLTEyMSwxNiArMTIzLDE2IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigp
CiAgICAgewotICAgICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3Nhcnko
bV9ncmFwaCk7Ci0gICAgICAgIG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNz
YXJ5KG1fZ3JhcGgpOworICAgICAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsKKyAgICAg
ICAgbV9ncmFwaC5lbnN1cmVOYXR1cmFsTG9vcHMoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAo
dW5zaWduZWQgbG9vcEluZGV4ID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5udW1Mb29wcygpOyBs
b29wSW5kZXgtLTspIHsKLSAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wJiBsb29wID0gbV9n
cmFwaC5tX25hdHVyYWxMb29wcy5sb29wKGxvb3BJbmRleCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgbG9vcEluZGV4ID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy0+bnVtTG9vcHMoKTsgbG9vcElu
ZGV4LS07KSB7CisgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fZ3JhcGgu
bV9uYXR1cmFsTG9vcHMtPmxvb3AobG9vcEluZGV4KTsKICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGV4aXN0aW5nUHJlSGVhZGVyID0gMDsKICAgICAgICAgICAgIGJvb2wgbmVlZHNOZXdQcmVIZWFk
ZXIgPSBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3JJbmRleCA9
IGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29ycy5zaXplKCk7IHByZWRlY2Vzc29ySW5kZXgtLTsp
IHsKICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGxvb3AuaGVhZGVy
KCktPnByZWRlY2Vzc29yc1twcmVkZWNlc3NvckluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKGxvb3AuaGVhZGVyKCksIHByZWRlY2Vzc29y
KSkKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMtPmRvbWluYXRlcyhs
b29wLmhlYWRlcigpLCBwcmVkZWNlc3NvcikpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdQcmVIZWFkZXIpIHsKICAgICAgICAgICAg
ICAgICAgICAgZXhpc3RpbmdQcmVIZWFkZXIgPSBwcmVkZWNlc3NvcjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTmFpdmVEb21pbmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHAJKHJldmlzaW9u
IDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmFpdmVEb21pbmF0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiREZHTmFpdmVEb21pbmF0b3JzLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQot
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLU5haXZlRG9taW5hdG9yczo6TmFpdmVEb21pbmF0
b3JzKCkKLXsKLX0KLQotTmFpdmVEb21pbmF0b3JzOjp+TmFpdmVEb21pbmF0b3JzKCkKLXsKLX0K
LQotdm9pZCBOYWl2ZURvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQotewotICAgIC8v
IFRoaXMgaW1wbGVtZW50cyBhIG5haXZlIGRvbWluYXRvciBzb2x2ZXIuCi0gICAgCi0gICAgQVNT
RVJUKGdyYXBoLmJsb2NrKDApLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKTsKLSAgICAKLSAgICB1
bnNpZ25lZCBudW1CbG9ja3MgPSBncmFwaC5udW1CbG9ja3MoKTsKLSAgICAKLSAgICAvLyBBbGxv
Y2F0ZSBzdG9yYWdlIGZvciB0aGUgZGVuc2UgZG9taW5hbmNlIG1hdHJpeC4gCi0gICAgaWYgKG51
bUJsb2NrcyA+IG1fcmVzdWx0cy5zaXplKCkpIHsKLSAgICAgICAgbV9yZXN1bHRzLmdyb3cobnVt
QmxvY2tzKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS07KQotICAg
ICAgICAgICAgbV9yZXN1bHRzW2ldLnJlc2l6ZShudW1CbG9ja3MpOwotICAgICAgICBtX3NjcmF0
Y2gucmVzaXplKG51bUJsb2Nrcyk7Ci0gICAgfQotCi0gICAgLy8gV2Uga25vdyB0aGF0IHRoZSBl
bnRyeSBibG9jayBpcyBvbmx5IGRvbWluYXRlZCBieSBpdHNlbGYuCi0gICAgbV9yZXN1bHRzWzBd
LmNsZWFyQWxsKCk7Ci0gICAgbV9yZXN1bHRzWzBdLnNldCgwKTsKLQotICAgIC8vIEZpbmQgYWxs
IG9mIHRoZSB2YWxpZCBibG9ja3MuCi0gICAgbV9zY3JhdGNoLmNsZWFyQWxsKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS07KSB7Ci0gICAgICAgIGlmICghZ3JhcGguYmxv
Y2soaSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9zY3JhdGNoLnNldChpKTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gTWFyayBhbGwgbm9kZXMgYXMgZG9taW5hdGVkIGJ5IGV2ZXJ5
dGhpbmcuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS0gPiAxOykgewotICAg
ICAgICBpZiAoIWdyYXBoLmJsb2NrKGkpIHx8IGdyYXBoLmJsb2NrKGkpLT5wcmVkZWNlc3NvcnMu
aXNFbXB0eSgpKQotICAgICAgICAgICAgbV9yZXN1bHRzW2ldLmNsZWFyQWxsKCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5zZXQobV9zY3JhdGNoKTsKLSAgICB9Ci0K
LSAgICAvLyBJdGVyYXRpdmVseSBlbGltaW5hdGUgbm9kZXMgdGhhdCBhcmUgbm90IGRvbWluYXRv
ci4KLSAgICBib29sIGNoYW5nZWQ7Ci0gICAgZG8gewotICAgICAgICBjaGFuZ2VkID0gZmFsc2U7
Ci0gICAgICAgIC8vIFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBibG9ja3M6IGZv
cndhcmQgc2Nhbi4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bUJsb2Nrczsg
KytpKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOwot
Ci0gICAgICAgIGlmICghY2hhbmdlZCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8v
IFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBibG9ja3M6IGJhY2t3YXJkIHNjYW4u
Ci0gICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
QmxvY2tzOyBpLS0gPiAxOykKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gcHJ1bmVEb21pbmF0b3Jz
KGdyYXBoLCBpKTsKLSAgICB9IHdoaWxlIChjaGFuZ2VkKTsKLX0KLQotYm9vbCBOYWl2ZURvbWlu
YXRvcnM6OnBydW5lRG9taW5hdG9ycyhHcmFwaCYgZ3JhcGgsIEJsb2NrSW5kZXggaWR4KQotewot
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soaWR4KTsKLQotICAgIGlmICghYmxv
Y2sgfHwgYmxvY2stPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIEZpbmQgdGhlIGludGVyc2VjdGlvbiBvZiBkb20ocHJlZHMpLgotICAgIG1f
c2NyYXRjaC5zZXQobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbMF0tPmluZGV4XSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLSA+IDE7
KQotICAgICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVzdWx0c1tibG9jay0+cHJlZGVjZXNzb3Jz
W2pdLT5pbmRleF0pOwotCi0gICAgLy8gVGhlIGJsb2NrIGlzIGFsc28gZG9taW5hdGVkIGJ5IGl0
c2VsZi4KLSAgICBtX3NjcmF0Y2guc2V0KGlkeCk7Ci0KLSAgICByZXR1cm4gbV9yZXN1bHRzW2lk
eF0uc2V0QW5kQ2hlY2sobV9zY3JhdGNoKTsKLX0KLQotdm9pZCBOYWl2ZURvbWluYXRvcnM6OmR1
bXAoR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGdyYXBoLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKLSAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBvdXQucHJpbnQoIiAgICBCbG9jayAiLCAqYmxvY2ssICI6Iik7Ci0gICAgICAgIGZv
ciAoQmxvY2tJbmRleCBvdGhlckluZGV4ID0gMDsgb3RoZXJJbmRleCA8IGdyYXBoLm51bUJsb2Nr
cygpOyArK290aGVySW5kZXgpIHsKLSAgICAgICAgICAgIGlmICghZG9taW5hdGVzKGJsb2NrLT5p
bmRleCwgb3RoZXJJbmRleCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBvdXQucHJpbnQoIiAjIiwgb3RoZXJJbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0LnBy
aW50KCJcbiIpOwotICAgIH0KLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTmFpdmVEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuaAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpZm5kZWYgREZHTmFpdmVEb21pbmF0b3JzX2gKLSNkZWZpbmUgREZHTmFpdmVE
b21pbmF0b3JzX2gKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHQmFzaWNC
bG9jay5oIgotI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgotI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotY2xhc3MgR3JhcGg7
Ci0KLS8vIFRoaXMgY2xhc3MgaXMgb25seSB1c2VkIGZvciB2YWxpZGF0aW5nIHRoZSByZWFsIGRv
bWluYXRvcnMgaW1wbGVtZW50YXRpb24uCi0KLWNsYXNzIE5haXZlRG9taW5hdG9ycyB7Ci1wdWJs
aWM6Ci0gICAgTmFpdmVEb21pbmF0b3JzKCk7Ci0gICAgfk5haXZlRG9taW5hdG9ycygpOwotICAg
IAotICAgIHZvaWQgY29tcHV0ZShHcmFwaCYpOwotICAgIAotICAgIGJvb2wgZG9taW5hdGVzKEJs
b2NrSW5kZXggZnJvbSwgQmxvY2tJbmRleCB0bykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX3Jlc3VsdHNbdG9dLmdldChmcm9tKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBkb21pbmF0
ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gZG9taW5hdGVzKGZyb20tPmluZGV4LCB0by0+aW5kZXgpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGR1bXAoR3JhcGgmLCBQcmludFN0cmVhbSYpIGNvbnN0OwotICAgIAotcHJpdmF0
ZToKLSAgICBib29sIHBydW5lRG9taW5hdG9ycyhHcmFwaCYsIEJsb2NrSW5kZXgpOwotICAgIAot
ICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yPiBtX3Jlc3VsdHM7IC8vIEZvciBlYWNoIGJsb2NrLCB0
aGUgYml0dmVjdG9yIG9mIGJsb2NrcyB0aGF0IGRvbWluYXRlIGl0LgotICAgIEZhc3RCaXRWZWN0
b3IgbV9zY3JhdGNoOyAvLyBBIHRlbXBvcmFyeSBiaXR2ZWN0b3Igd2l0aCBiaXQgZm9yIGVhY2gg
YmxvY2suIFdlIHJlY3ljbGUgdGhpcyB0byBzYXZlIG5ldy9kZWxldGVzLgotfTsKLQotfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLSNlbmRp
ZiAvLyBERkdOYWl2ZURvbWluYXRvcnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOYXR1cmFsTG9vcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAkocmV2aXNpb24gMTkxODM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MiwxNiArNDIsMTAgQEAgdm9pZCBOYXR1cmFsTG9vcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQog
ICAgIG91dC5wcmludCgiXSIpOwogfQogCi1OYXR1cmFsTG9vcHM6Ok5hdHVyYWxMb29wcygpIHsg
fQotTmF0dXJhbExvb3BzOjp+TmF0dXJhbExvb3BzKCkgeyB9Ci0KLXZvaWQgTmF0dXJhbExvb3Bz
Ojpjb21wdXRlRGVwZW5kZW5jaWVzKEdyYXBoJiBncmFwaCkKK05hdHVyYWxMb29wczo6TmF0dXJh
bExvb3BzKEdyYXBoJiBncmFwaCkKIHsKLSAgICBncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlm
TmVjZXNzYXJ5KGdyYXBoKTsKLX0KKyAgICBBU1NFUlQoZ3JhcGgubV9kb21pbmF0b3JzKTsKIAot
dm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQotewogICAgIC8vIEltcGxl
bWVudCB0aGUgY2xhc3NpYyBkb21pbmF0b3ItYmFzZWQgbmF0dXJhbCBsb29wIGZpbmRlci4gVGhl
IGZpcnN0CiAgICAgLy8gc3RlcCBpcyB0byBmaW5kIGFsbCBjb250cm9sIGZsb3cgZWRnZXMgQSAt
PiBCIHdoZXJlIEIgZG9taW5hdGVzIEEuCiAgICAgLy8gVGhlbiBCIGlzIGEgbG9vcCBoZWFkZXIg
YW5kIEEgaXMgYSBiYWNrd2FyZCBicmFuY2hpbmcgYmxvY2suIFdlIHdpbGwKQEAgLTY0LDcgKzU4
LDcgQEAgdm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogICAgIAogICAg
IGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkRvbWluYXRvcnM6XG4iKTsKLSAgICAg
ICAgZ3JhcGgubV9kb21pbmF0b3JzLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgZ3Jh
cGgubV9kb21pbmF0b3JzLT5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgfQogICAgIAogICAg
IG1fbG9vcHMucmVzaXplKDApOwpAQCAtNzYsNyArNzAsNyBAQCB2b2lkIE5hdHVyYWxMb29wczo6
Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKGkpOwotICAgICAgICAgICAgaWYgKCFncmFw
aC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKHN1Y2Nlc3NvciwgYmxvY2spKQorICAgICAgICAgICAg
aWYgKCFncmFwaC5tX2RvbWluYXRvcnMtPmRvbWluYXRlcyhzdWNjZXNzb3IsIGJsb2NrKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IG1fbG9vcHMuc2l6ZSgpOyBqLS07KSB7CkBA
IC0xOTksNiArMTkzLDggQEAgdm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBo
KQogICAgICAgICBkYXRhTG9nKCJSZXN1bHRzOiAiLCAqdGhpcywgIlxuIik7CiB9CiAKK05hdHVy
YWxMb29wczo6fk5hdHVyYWxMb29wcygpIHsgfQorCiBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3Aq
PiBOYXR1cmFsTG9vcHM6Omxvb3BzT2YoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiB7CiAgICAg
VmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw5ICsyOCwxMSBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJERkdB
bmFseXNpcy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdDb21t
b24uaCIKKyNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCkBAIC04OCwyMiArOTAsMTkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25l
ZCBtX2luZGV4OwogfTsKIAotY2xhc3MgTmF0dXJhbExvb3BzIDogcHVibGljIEFuYWx5c2lzPE5h
dHVyYWxMb29wcz4geworY2xhc3MgTmF0dXJhbExvb3BzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShOYXR1cmFsTG9vcHMpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIE5hdHVyYWxMb29wcygpOworICAgIE5hdHVyYWxMb29wcyhHcmFwaCYpOwogICAgIH5O
YXR1cmFsTG9vcHMoKTsKICAgICAKLSAgICB2b2lkIGNvbXB1dGVEZXBlbmRlbmNpZXMoR3JhcGgm
KTsKLSAgICB2b2lkIGNvbXB1dGUoR3JhcGgmKTsKLSAgICAKICAgICB1bnNpZ25lZCBudW1Mb29w
cygpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICAgICAgcmV0
dXJuIG1fbG9vcHMuc2l6ZSgpOwogICAgIH0KICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCh1
bnNpZ25lZCBpKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAgICAg
ICAgIHJldHVybiBtX2xvb3BzW2ldOwogICAgIH0KICAgICAKQEAgLTExMSw3ICsxMTAsNiBAQCBw
dWJsaWM6CiAgICAgLy8gbG9vcCBpdCBiZWxvbmdzIHRvLgogICAgIGNvbnN0IE5hdHVyYWxMb29w
KiBoZWFkZXJPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VS
VChpc1ZhbGlkKCkpOwogICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IGlubmVyTW9z
dExvb3BPZihibG9jayk7CiAgICAgICAgIGlmICghbG9vcCkKICAgICAgICAgICAgIHJldHVybiAw
OwpAQCAtMTI2LDcgKzEyNCw2IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCBOYXR1cmFsTG9v
cCogaW5uZXJNb3N0TG9vcE9mKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYmxvY2stPmlu
bmVyTW9zdExvb3BJbmRpY2VzWzBdOwogICAgICAgICBpZiAoaW5kZXggPT0gVUlOVF9NQVgpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKQEAgLTEzNSw3ICsxMzIsNiBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgY29uc3QgTmF0dXJhbExvb3AqIGlubmVyTW9zdE91dGVyTG9vcChjb25zdCBOYXR1cmFsTG9v
cCYgbG9vcCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgICAg
ICBpZiAobG9vcC5tX291dGVyTG9vcEluZGV4ID09IFVJTlRfTUFYKQogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIHJldHVybiAmbV9sb29wc1tsb29wLm1fb3V0ZXJMb29wSW5kZXhdOwpA
QCAtMTQzLDcgKzEzOSw2IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGJlbG9uZ3NUbyhCYXNp
Y0Jsb2NrKiBibG9jaywgY29uc3QgTmF0dXJhbExvb3AmIGNhbmRpZGF0ZUxvb3ApIGNvbnN0CiAg
ICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICAgICAgLy8gSXQncyBmYXN0ZXIg
dG8gZG8gdGhpcyB0ZXN0IHVzaW5nIHRoZSBsb29wIGl0c2VsZiwgaWYgaXQncyBzbWFsbC4KICAg
ICAgICAgaWYgKGNhbmRpZGF0ZUxvb3Auc2l6ZSgpIDwgNCkKICAgICAgICAgICAgIHJldHVybiBj
YW5kaWRhdGVMb29wLmNvbnRhaW5zKGJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3OSw2ICsxMjc5LDEwIEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKG1fdGVybWluYWws
IG1fdGVybWluYWwtPm51bVN1Y2Nlc3NvcnMoKSk7CiAgICAgICAgIH0KKworICAgICAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGVybWluYWwtPm51bVN1Y2Nlc3NvcnMoKTsgfQor
ICAgICAgICBCYXNpY0Jsb2NrKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdGVy
bWluYWwtPnN1Y2Nlc3NvcihpbmRleCk7IH0KKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3Jb
XShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQogICAgICAgICAKICAg
ICBwcml2YXRlOgogICAgICAgICBOb2RlKiBtX3Rlcm1pbmFsOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3
ICs1NCw3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleCAh
PSBVSU5UX01BWCk7CiAgICAgICAgIAogICAgICAgICAvLyBOZWVkZWQgYnkgY3JlYXRlUHJlSGVh
ZGVyKCkuCi0gICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeSht
X2dyYXBoKTsKKyAgICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CiAgICAgICAgIAog
ICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gbV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2s7CiAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxOTE4MzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjcsNyArNzI3LDcgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIG1fZ3JhcGguY29tcHV0ZVJlZkNvdW50cygpOwogICAgICAgICBtX2dyYXBo
LmluaXRpYWxpemVOb2RlT3duZXJzKCk7Ci0gICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNv
bXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0
b3JzKCk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKG1fZ3JhcGgpOwogICAgICAg
ICBwZXJmb3JtT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXMobV9ncmFwaCk7CiAgICAgICAgIG1fY29t
YmluZWRMaXZlbmVzcyA9IENvbWJpbmVkTGl2ZW5lc3MobV9ncmFwaCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NCw5ICsz
NDQsOSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgLy8g
SWYgd2UncmUgZG9pbmcgdmFsaWRhdGlvbiwgdGhlbiBydW4gc29tZSBhbmFseXNlcywgdG8gZ2l2
ZSB0aGVtIGFuIG9wcG9ydHVuaXR5CiAgICAgLy8gdG8gc2VsZi12YWxpZGF0ZS4gTm93IGlzIGFz
IGdvb2QgYSB0aW1lIGFzIGFueSB0byBkbyB0aGlzLgogICAgIGlmICh2YWxpZGF0aW9uRW5hYmxl
ZCgpKSB7Ci0gICAgICAgIGRmZy5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KGRmZyk7
Ci0gICAgICAgIGRmZy5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkoZGZnKTsKLSAg
ICAgICAgZGZnLm1fcHJlUG9zdE51bWJlcmluZy5jb21wdXRlSWZOZWNlc3NhcnkoZGZnKTsKKyAg
ICAgICAgZGZnLmVuc3VyZURvbWluYXRvcnMoKTsKKyAgICAgICAgZGZnLmVuc3VyZU5hdHVyYWxM
b29wcygpOworICAgICAgICBkZmcuZW5zdXJlUHJlUG9zdE51bWJlcmluZygpOwogICAgIH0KIAog
ICAgIHN3aXRjaCAobW9kZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVQb3N0TnVtYmVyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMCArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
LVByZVBvc3ROdW1iZXJpbmc6OlByZVBvc3ROdW1iZXJpbmcoKSB7IH0KLVByZVBvc3ROdW1iZXJp
bmc6On5QcmVQb3N0TnVtYmVyaW5nKCkgeyB9Ci0KLXZvaWQgUHJlUG9zdE51bWJlcmluZzo6Y29t
cHV0ZShHcmFwaCYgZ3JhcGgpCitQcmVQb3N0TnVtYmVyaW5nOjpQcmVQb3N0TnVtYmVyaW5nKEdy
YXBoJiBncmFwaCkKIHsKICAgICBtX21hcCA9IEJsb2NrTWFwPE51bWJlcmluZz4oZ3JhcGgpOwog
ICAgIApAQCAtNjAsNiArNTcsOCBAQCB2b2lkIFByZVBvc3ROdW1iZXJpbmc6OmNvbXB1dGUoR3Jh
cGgmIGdyCiAgICAgfQogfQogCitQcmVQb3N0TnVtYmVyaW5nOjp+UHJlUG9zdE51bWJlcmluZygp
IHsgfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmgJ
KHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlUG9z
dE51bWJlcmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJERkdBbmFseXNpcy5oIgogI2luY2x1ZGUgIkRGR0Jh
c2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdCbG9ja01hcC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNDAsMTMgKzQxLDEzIEBAIGVudW0gRWRnZUtpbmQgewog
ICAgIEJhY2tFZGdlCiB9OwogCi1jbGFzcyBQcmVQb3N0TnVtYmVyaW5nIDogcHVibGljIEFuYWx5
c2lzPFByZVBvc3ROdW1iZXJpbmc+IHsKK2NsYXNzIFByZVBvc3ROdW1iZXJpbmcgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFByZVBvc3ROdW1iZXJpbmcpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIFByZVBvc3ROdW1iZXJpbmcoKTsKKyAgICBQcmVQb3N0
TnVtYmVyaW5nKEdyYXBoJik7CiAgICAgflByZVBvc3ROdW1iZXJpbmcoKTsKIAotICAgIHZvaWQg
Y29tcHV0ZShHcmFwaCYpOwotICAgIAogICAgIHVuc2lnbmVkIHByZU51bWJlcihCYXNpY0Jsb2Nr
KiBibG9jaykgY29uc3QgeyByZXR1cm4gbV9tYXBbYmxvY2tdLm1fcHJlTnVtYmVyOyB9CiAgICAg
dW5zaWduZWQgcG9zdE51bWJlcihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QgeyByZXR1cm4gbV9t
YXBbYmxvY2tdLm1fcG9zdE51bWJlcjsgfQogICAgIApAQCAtOTAsNyArOTEsNyBAQCBwcml2YXRl
OgogICAgICAgICB1bnNpZ25lZCBtX3ByZU51bWJlcjsKICAgICAgICAgdW5zaWduZWQgbV9wb3N0
TnVtYmVyOwogICAgIH07Ci0gICAgCisKICAgICBCbG9ja01hcDxOdW1iZXJpbmc+IG1fbWFwOwog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRT
dGFja1NpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5
KG1fZ3JhcGgpOworICAgICAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsKICAgICAgICAg
CiAgICAgICAgIFNTQUNhbGN1bGF0b3Igc3NhQ2FsY3VsYXRvcihtX2dyYXBoKTsKICAgICAgICAg
SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkocmV2aXNpb24gMTkxODM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTUsMTIgKzk1LDEyIEBAIFNTQUNhbGN1bGF0b3I6OkRlZiogU1NBQ2FsY3Vs
YXRvcjo6bmV3RGUKIAogU1NBQ2FsY3VsYXRvcjo6RGVmKiBTU0FDYWxjdWxhdG9yOjpub25Mb2Nh
bFJlYWNoaW5nRGVmKEJhc2ljQmxvY2sqIGJsb2NrLCBWYXJpYWJsZSogdmFyaWFibGUpCiB7Ci0g
ICAgcmV0dXJuIHJlYWNoaW5nRGVmQXRUYWlsKG1fZ3JhcGgubV9kb21pbmF0b3JzLmltbWVkaWF0
ZURvbWluYXRvck9mKGJsb2NrKSwgdmFyaWFibGUpOworICAgIHJldHVybiByZWFjaGluZ0RlZkF0
VGFpbChtX2dyYXBoLm1fZG9taW5hdG9ycy0+aW1tZWRpYXRlRG9taW5hdG9yT2YoYmxvY2spLCB2
YXJpYWJsZSk7CiB9CiAKIFNTQUNhbGN1bGF0b3I6OkRlZiogU1NBQ2FsY3VsYXRvcjo6cmVhY2hp
bmdEZWZBdFRhaWwoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiB2YXJpYWJsZSkKIHsKLSAg
ICBmb3IgKDsgYmxvY2s7IGJsb2NrID0gbV9ncmFwaC5tX2RvbWluYXRvcnMuaW1tZWRpYXRlRG9t
aW5hdG9yT2YoYmxvY2spKSB7CisgICAgZm9yICg7IGJsb2NrOyBibG9jayA9IG1fZ3JhcGgubV9k
b21pbmF0b3JzLT5pbW1lZGlhdGVEb21pbmF0b3JPZihibG9jaykpIHsKICAgICAgICAgaWYgKERl
ZiogZGVmID0gbV9kYXRhW2Jsb2NrXS5tX2RlZnMuZ2V0KHZhcmlhYmxlKSkKICAgICAgICAgICAg
IHJldHVybiBkZWY7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTAgKzE3
NiwxMCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUGhpSW5zZXJ0aW9uRnVuY3Rv
cj4KICAgICB2b2lkIGNvbXB1dGVQaGlzKGNvbnN0IFBoaUluc2VydGlvbkZ1bmN0b3ImIGZ1bmN0
b3IpCiAgICAgewotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgu
bV9kb21pbmF0b3JzLmlzVmFsaWQoKSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVs
bHB0ciwgbV9ncmFwaC5tX2RvbWluYXRvcnMpOwogICAgICAgICAKICAgICAgICAgZm9yIChWYXJp
YWJsZSYgdmFyaWFibGUgOiBtX3ZhcmlhYmxlcykgewotICAgICAgICAgICAgbV9ncmFwaC5tX2Rv
bWluYXRvcnMuZm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2Yo
CisgICAgICAgICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy0+Zm9yQWxsQmxvY2tzSW5QcnVuZWRJ
dGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCiAgICAgICAgICAgICAgICAgdmFyaWFibGUubV9i
bG9ja3NXaXRoRGVmcywKICAgICAgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAt
PiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IGZ1bmN0b3IoJnZh
cmlhYmxlLCBibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dy
YXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLmNs
ZWFyUmVwbGFjZW1lbnRzKCk7Ci0gICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJ
Zk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7
CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygi
R3JhcGggYmVmb3JlIFNTQSB0cmFuc2Zvcm1hdGlvbjpcbiIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRp
b25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTmF0
dXJhbExvb3BzLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAKQEAgLTQ0LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAg
ICB7Ci0gICAgICAgIG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1f
Z3JhcGgpOworICAgICAgICBtX2dyYXBoLmVuc3VyZU5hdHVyYWxMb29wcygpOwogICAgICAgICAK
ICAgICAgICAgLy8gRXN0aW1hdGUgYmFzaWMgYmxvY2sgZXhlY3V0aW9uIGNvdW50cyBiYXNlZCBv
biBsb29wIGRlcHRoLgogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKQEAgLTUyLDcgKzUzLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICAgICAgYmxvY2stPmV4ZWN1dGlvbkNvdW50ID0gcG93KDEwLCBtX2dyYXBoLm1fbmF0
dXJhbExvb3BzLmxvb3BEZXB0aChibG9jaykpOworICAgICAgICAgICAgYmxvY2stPmV4ZWN1dGlv
bkNvdW50ID0gcG93KDEwLCBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLT5sb29wRGVwdGgoYmxvY2sp
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRXN0aW1hdGUgYnJhbmNoIHdlaWdo
dHMgYmFzZWQgb24gZXhlY3V0aW9uIGNvdW50cy4gVGhpcyBpc24ndCBxdWl0ZSBjb3JyZWN0LiBJ
dCdsbApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVj
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJERkdHcmFwaC5oIgog
I2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR05hdHVyYWxMb29wcy5o
IgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiRlRMQ2FwYWJpbGl0aWVzLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNjYsOCArNjcsOCBAQCBwdWJsaWM6CiAKICAgICAg
ICAgLy8gRmlyc3Qgd2UgZmluZCBhbGwgdGhlIGxvb3BzIHRoYXQgY29udGFpbiBhIExvb3BIaW50
IGZvciB3aGljaCB3ZSBjYW5ub3QgT1NSIGVudGVyLgogICAgICAgICAvLyBXZSB1c2UgdGhhdCBp
bmZvcm1hdGlvbiB0byBkZWNpZGUgaWYgd2UgbmVlZCBDaGVja1RpZXJVcEFuZE9TUkVudGVyIG9y
IENoZWNrVGllclVwV2l0aE5lc3RlZFRyaWdnZXJBbmRPU1JFbnRlci4KLSAgICAgICAgTmF0dXJh
bExvb3BzJiBuYXR1cmFsTG9vcHMgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzOwotICAgICAgICBu
YXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAgICBtX2dyYXBo
LmVuc3VyZU5hdHVyYWxMb29wcygpOworICAgICAgICBOYXR1cmFsTG9vcHMmIG5hdHVyYWxMb29w
cyA9ICptX2dyYXBoLm1fbmF0dXJhbExvb3BzOwogCiAgICAgICAgIEhhc2hTZXQ8Y29uc3QgTmF0
dXJhbExvb3AqPiBsb29wc0NvbnRhaW5pbmdMb29wSGludFdpdGhvdXRPU1JFbnRlciA9IGZpbmRM
b29wc0NvbnRhaW5pbmdMb29wSGludFdpdGhvdXRPU1JFbnRlcihuYXR1cmFsTG9vcHMsIGxldmVs
KTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJl
dmlzaW9uIDE5MTgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk5LDggKzk5LDggQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkK
ICAgICAgICAgICAgIFByb2ZpbGVyOjpPcmlnaW5TdGFjaygpLAogICAgICAgICAgICAgdG9DU3Ry
aW5nKCJHZW5lcmF0ZWQgRlRMIEpJVCBjb2RlIGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShj
b2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCksICIsIGluc3RydWN0aW9uIGNvdW50ID0gIiwgZ3Jh
cGgubV9jb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIjpcbiIpKTsKICAgICAgICAgCi0g
ICAgICAgIGdyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkoZ3JhcGgpOwotICAg
ICAgICBncmFwaC5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkoZ3JhcGgpOworICAg
ICAgICBncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CisgICAgICAgIGdyYXBoLmVuc3VyZU5hdHVy
YWxMb29wcygpOwogICAgICAgICAKICAgICAgICAgY29uc3QgY2hhciogcHJlZml4ID0gIiAgICAi
OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIK
ICNpbmNsdWRlICJERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0RnV6ei5oIgpA
QCAtMTIxLDcgKzEyMiw3IEBAIHB1YmxpYzoKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBu
YW1lID0gImpzQm9keSI7CiAgICAgICAgIAotICAgICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy5j
b21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CisgICAgICAgIG1fZ3JhcGguZW5zdXJlRG9taW5h
dG9ycygpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5tb2R1bGUgPQogICAgICAgICAg
ICAgbW9kdWxlQ3JlYXRlV2l0aE5hbWVJbkNvbnRleHQobmFtZS5kYXRhKCksIG1fZnRsU3RhdGUu
Y29udGV4dCk7CkBAIC0zODIsNyArMzgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIHRhcmdldCA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBp
ZiAoIXRhcmdldCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMobV9oaWdoQmxvY2ssIHRhcmdldCkpIHsKKyAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKG1faGlnaEJsb2Nr
LCB0YXJnZXQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQmxvY2sgIiwgKnRhcmdldCwgIiB3
aWxsIGJhaWwgYWxzby5cbiIpOwogICAgICAgICAgICAgICAgIHRhcmdldC0+Y2ZhSGFzVmlzaXRl
ZCA9IGZhbHNlOwpAQCAtOTE0OSw3ICs5MTUwLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9n
cmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKHZhbHVlLmJsb2NrKCksIG1faGlnaEJsb2NrKSkK
KyAgICAgICAgaWYgKCFtX2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKHZhbHVlLmJsb2Nr
KCksIG1faGlnaEJsb2NrKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTgzNSkKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzUgQEAKKzIwMTUtMTEtMDEgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBEb21pbmF0b3JzIHNob3Vs
ZCBiZSBmYWN0b3JlZCBvdXQgb2YgdGhlIERGRworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyB0YWtlcyB3aGF0IHVzZWQgdG8gYmUgREZHRG9taW5h
dG9ycy5oL0RGR0RvbWluYXRvcnMuY3BwIGFuZCB0dXJucyBpdCBpbnRvIGEgZ2VuZXJpYworICAg
ICAgICBhbGdvcml0aG0gdGhhdCBjYW4gdGFrZSBhbnkgYWJzdHJhY3QgZ3JhcGguIFRoZSBpZGVh
IGlzIHRoYXQgeW91IGNyZWF0ZSBEb21pbmF0b3JzPENGRz4gYW5kCisgICAgICAgIHBhc3MgaXQg
YSBDRkcgb2JqZWN0LCB3aGljaCBkZWZpbmVzIHRoZSB0eXBlcyBvZiBncmFwaCBub2RlcyBhbmQg
bWV0aG9kcyBmb3IgZ2V0dGluZworICAgICAgICBzdWNjZXNzb3JzLCBwcmVkZWNlc3NvcnMsIGV0
Yy4gVGhlIERGRyBub3cgZGVmaW5lcyBhIGNsYXNzIGNhbGxlZCBDRkcsIHdoaWNoIGlzIGEgd3Jh
cHBlciBmb3IKKyAgICAgICAgREZHOjpHcmFwaCB0aGF0IGNvbmZvcm1zIHRvIHRoZSB0aGluZyB0
aGF0IHd0Zi9Eb21pbmF0b3JzLmggZXhwZWN0cy4KKworICAgICAgICBXaGVuIGRvaW5nIHRoaW5n
cyB0byBncmFwaHMsIGl0J3MgY29tbW9uIHRvIHJlZmVyIHRvIHRoZSB0aGluZ3MgaW4gdGhlIGdy
YXBoIGFzICJub2RlcyIuCisgICAgICAgIEJlY2F1c2UgSSBpbnRlbmQgdG8gcmV1c2UgdGhlIENG
RyBhYnN0cmFjdGlvbiB3aXRoIG1hbnkgZ3JhcGggYWxnb3JpdGhtcywgdGhhdCBhYnN0cmFjdGlv
biB1c2VzCisgICAgICAgIHRoZSB0ZXJtICJub2RlIiB0byByZWZlciB0byBhIERGRyBiYXNpYyBi
bG9jay4gQnV0IGluIERvbWluYXRvcnMsIHRoZSBtZXRob2QgYW5kIHZhcmlhYmxlIG5hbWVzCisg
ICAgICAgIHN0aWxsIHVzZSAiYmxvY2siLiBUaGlzIGlzIGJlY2F1c2UgYWx0aG91Z2ggRG9taW5h
dG9ycyBhcmUgYXBwbGljYWJsZSB0byBhbnkga2luZCBvZiBkaXJlY3RlZAorICAgICAgICBncmFw
aCwgaXQncyBzdXBlciB1bmxpa2VseSB0aGF0IHdlIHdpbGwgZXZlciB1c2UgdGhlbSBmb3IgYW55
dGhpbmcgYnV0IGNvbXBpbGVycy4gSW5kZWVkLCB0aGUKKyAgICAgICAgb25seSByZWFzb24gd2h5
IEknbSBmYWN0b3JpbmcgdGhlbSBvdXQgb2YgdGhlIERGRyBpcyBzbyB0aGF0IEkgY2FuIHVzZSB0
aGVtIHdpdGggQjMgYW5kIEFpci4KKworICAgICAgICBPdmVyYWxsLCB3dGYvRG9taW5hdG9ycy5o
IGlzIGEgY29tYmluYXRpb24gb2Ygd2hhdCB1c2VkIHRvIGJlIGluIERGR0RvbWluYXRvcnMuaCwK
KyAgICAgICAgREZHRG9taW5hdG9ycy5jcHAsIERGR05haXZlRG9taW5hdG9ycy5oLCBhbmQgREZH
TmFpdmVEb21pbmF0b3JzLmNwcC4gSSBvbmx5IGNoYW5nZWQgY29kZSB3aGVuIEkKKyAgICAgICAg
aGFkIHRvIGluIG9yZGVyIHRvIG1ha2UgaXQgZ2VuZXJpYy4KKworICAgICAgICBUaGlzIGhhcyB0
aGUgbmljZSBzaWRlIGVmZmVjdCB0aGF0IGEgdXNlciBvZiBXVEY6OkRvbWluYXRvcnM8SlNDOjpE
Rkc6OkNGRz4gd2lsbCBzZWUgZmFtaWxpYXIKKyAgICAgICAgdGVybWlub2xvZ3kgbGlrZSAiYmxv
Y2tzU3RyaWN0bHlEb21pbmF0ZWRCeSguLi4pIiBpbnN0ZWFkIG9mICJub2Rlc1N0cmljdGx5RG9t
aW5hdGVkQnkoLi4uKSIsCisgICAgICAgIHdoaWNoIHdvdWxkIGJlIHN1cGVyIGNvbmZ1c2luZy4K
KworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0
Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvRG9taW5hdG9ycy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6RG9taW5hdG9yczo6RG9taW5hdG9ycyk6CisgICAgICAgIChXVEY6OkRvbWlu
YXRvcnM6OmNvbXB1dGUpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpzdHJpY3RseURvbWlu
YXRlcyk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OmRvbWluYXRlcyk6CisgICAgICAgIChX
VEY6OkRvbWluYXRvcnM6OmltbWVkaWF0ZURvbWluYXRvck9mKToKKyAgICAgICAgKFdURjo6RG9t
aW5hdG9yczo6Zm9yQWxsU3RyaWN0RG9taW5hdG9yc09mKToKKyAgICAgICAgKFdURjo6RG9taW5h
dG9yczo6Zm9yQWxsRG9taW5hdG9yc09mKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6Zm9y
QWxsQmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeSk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6
OmZvckFsbEJsb2Nrc0RvbWluYXRlZEJ5KToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6c3Ry
aWN0RG9taW5hdG9yc09mKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6ZG9taW5hdG9yc09m
KToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6YmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeSk6
CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OmJsb2Nrc0RvbWluYXRlZEJ5KToKKyAgICAgICAg
KFdURjo6RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mKToKKyAg
ICAgICAgKFdURjo6RG9taW5hdG9yczo6ZG9taW5hbmNlRnJvbnRpZXJPZik6CisgICAgICAgIChX
VEY6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9m
KToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6Zm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVyYXRl
ZERvbWluYW5jZUZyb250aWVyT2YpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjppdGVyYXRl
ZERvbWluYW5jZUZyb250aWVyT2YpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpkdW1wKToK
KyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6TGVuZ2F1ZXJUYXJqYW46OkxlbmdhdWVyVGFyamFu
KToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6TGVuZ2F1ZXJUYXJqYW46OmNvbXB1dGUpOgor
ICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpMZW5nYXVlclRhcmphbjo6aW1tZWRpYXRlRG9taW5h
dG9yKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6TGVuZ2F1ZXJUYXJqYW46OmNvbXB1dGVE
ZXB0aEZpcnN0UHJlTnVtYmVyaW5nKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6TGVuZ2F1
ZXJUYXJqYW46OmNvbXB1dGVTZW1pRG9taW5hdG9yc0FuZEltcGxpY2l0SW1tZWRpYXRlRG9taW5h
dG9ycyk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OkxlbmdhdWVyVGFyamFuOjpjb21wdXRl
RXhwbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6
TGVuZ2F1ZXJUYXJqYW46OmxpbmspOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpMZW5nYXVl
clRhcmphbjo6ZXZhbCk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OkxlbmdhdWVyVGFyamFu
Ojpjb21wcmVzcyk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OkxlbmdhdWVyVGFyamFuOjpC
bG9ja0RhdGE6OkJsb2NrRGF0YSk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6Ok5haXZlRG9t
aW5hdG9yczo6TmFpdmVEb21pbmF0b3JzKToKKyAgICAgICAgKFdURjo6RG9taW5hdG9yczo6TmFp
dmVEb21pbmF0b3JzOjpkb21pbmF0ZXMpOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpOYWl2
ZURvbWluYXRvcnM6OmR1bXApOgorICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpOYWl2ZURvbWlu
YXRvcnM6OnBydW5lRG9taW5hdG9ycyk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OlZhbGlk
YXRpb25Db250ZXh0OjpWYWxpZGF0aW9uQ29udGV4dCk6CisgICAgICAgIChXVEY6OkRvbWluYXRv
cnM6OlZhbGlkYXRpb25Db250ZXh0OjpyZXBvcnRFcnJvcik6CisgICAgICAgIChXVEY6OkRvbWlu
YXRvcnM6OlZhbGlkYXRpb25Db250ZXh0OjpoYW5kbGVFcnJvcnMpOgorICAgICAgICAoV1RGOjpE
b21pbmF0b3JzOjpuYWl2ZURvbWluYXRlcyk6CisgICAgICAgIChXVEY6OkRvbWluYXRvcnM6OmZv
ckFsbEJsb2Nrc0luRG9taW5hbmNlRnJvbnRpZXJPZkltcGwpOgorICAgICAgICAoV1RGOjpEb21p
bmF0b3JzOjpmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwpOgor
ICAgICAgICAoV1RGOjpEb21pbmF0b3JzOjpCbG9ja0RhdGE6OkJsb2NrRGF0YSk6CisKIDIwMTUt
MTAtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZWdyZXNz
aW9uKHIxOTE2NzMpOiBDcmFzaCBpbiBSdW5Mb29wVGltZXI6OnNjaGVkdWxlKCkKSW5kZXg6IFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkxODM0KQor
KysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsNyBAQAogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJy
YWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5o
ICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3
MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJB
MyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9Owor
CQkwRjQ1NzA0MzFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5
IC8qIERvbWluYXRvcnMuaCAqLzsgfTsKIAkJMEY4MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBh
cmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovOyB9OwogCQkw
RjgyNEE2OTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8q
IFBhcmtpbmdMb3QuaCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1Bv
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07CkBAIC01MCw4ICs1
MSw4IEBACiAJCTBGRTQ0NzlEMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNDQ3OUIxQjdBQUEwMzAw
OTQ5OEVCIC8qIFdvcmRMb2NrLmggKi87IH07CiAJCTBGRUIzRENGMUJCNUQ2ODQwMDlEN0FBRCAv
KiBTaGFyZWRUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovOyB9OwogCQkw
RkVCM0REMTFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNERDAxQkI3MzY2
QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLzsgfTsKLQkJMEZFQzg0QjEx
QkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3Bl
ZExhbWJkYS5oICovOyB9OwogCQkwRkVDODRBRjFCRDgyNTMxMDA4MEZGNzQgLyogR3JhcGhOb2Rl
V29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEFFMUJEODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oICovOyB9Owor
CQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCMDFCREFDRDM5MDA4MEZG
NzQgLyogU2NvcGVkTGFtYmRhLmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAv
KiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkw
RkY4NjA5NTFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjg2MDk0MUJDQ0JENzQwMDQ1
MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovOyB9OwogCQkwRkZGMTlEQzFCQjMzNEVCMDA4
ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkYxOURBMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxl
bEhlbHBlclBvb2wuY3BwICovOyB9OwpAQCAtMzIxLDYgKzMyMiw3IEBACiAJCTBGMkI2NkE1MTdC
NkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAv
KiBIYXNoTWV0aG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5h
dG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb21pbmF0b3JzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQ
YXJraW5nTG90LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcmtp
bmdMb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2NTFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQYXJraW5nTG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODcxMDU5MTY2
NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJhd1BvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0Niw4
ICszNDgsOCBAQAogCQkwRkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29yZExvY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVkVGFzay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0REMDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxW
ZWN0b3JJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxl
bFZlY3Rvckl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NEIw
MUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2NvcGVkTGFtYmRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRUM4NEFFMUJEODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaE5vZGVXb3JrbGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFt
YmRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlZExhbWJkYS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyog
VGlueVB0clNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55UHRyU2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3
RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQb2ludGVyQ29tcGFyaXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZG
MTlEQTFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcmFsbGVsSGVscGVyUG9vbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NjQsNiArNzY2LDcgQEAKIAkJCQkwRjJCNjZBNDE3
QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLywKIAkJCQlBOEE0NzI3
RTE1MUE4MjVBMDA0MTIzRkYgLyogRGVxdWUuaCAqLywKIAkJCQlBOEE0NzI3RjE1MUE4MjVBMDA0
MTIzRkYgLyogRGlzYWxsb3dDVHlwZS5oICovLAorCQkJCTBGNDU3MDQyMUJFNUI1OEYwMDYyQTYy
OSAvKiBEb21pbmF0b3JzLmggKi8sCiAJCQkJQThBNDcyODAxNTFBODI1QTAwNDEyM0ZGIC8qIERv
dWJseUxpbmtlZExpc3QuaCAqLywKIAkJCQlBOEE0NzI5NzE1MUE4MjVBMDA0MTIzRkYgLyogZHRv
YS5jcHAgKi8sCiAJCQkJQThBNDcyOTgxNTFBODI1QTAwNDEyM0ZGIC8qIGR0b2EuaCAqLywKQEAg
LTExODUsNiArMTE4OCw3IEBACiAJCQkJMUFGREU2NTMxOTUzQjIzRDAwQzQ4RkZBIC8qIE9wdGlv
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGNjE1MUE4MjVCMDA0MTIzRkYgLyogT1NB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDQkJBMDc0MTlCQjdGREMwMEJCRjAyNSAv
KiBPU09iamVjdFB0ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0NTcwNDMxQkU1QjU4RjAwNjJB
NjI5IC8qIERvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZBMTUxQTgyNUIw
MDQxMjNGRiAvKiBPU1JhbmRvbVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkUx
NTFBODI1QjAwNDEyM0ZGIC8qIFBhY2tlZEludFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDczRkYxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VBbGxvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTE4MzQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTYsNiArMTYsNyBAQCBz
ZXQoV1RGX0hFQURFUlMKICAgICBDdXJyZW50VGltZS5oCiAgICAgRGF0YUxvZy5oCiAgICAgRGF0
ZU1hdGguaAorICAgIERvbWluYXRvcnMuaAogICAgIERlY2ltYWxOdW1iZXIuaAogICAgIERlZmVy
cmFibGVSZWZDb3VudGVkLmgKICAgICBEZXF1ZS5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Eb21p
bmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGRG9taW5hdG9yc19oCisjZGVmaW5lIFdURkRv
bWluYXRvcnNfaAorCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisKK25hbWVz
cGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGEgdXRpbGl0eSBmb3IgZmluZGluZyB0aGUgZG9taW5h
dG9ycyBvZiBhIGdyYXBoLiBEb21pbmF0b3JzIGFyZSBhbG1vc3QgdW5pdmVyc2FsbHkgdXNlZAor
Ly8gZm9yIGNvbnRyb2wgZmxvdyBncmFwaCBhbmFseXNpcywgc28gdGhpcyBjb2RlIHdpbGwgcmVm
ZXIgdG8gdGhlIGdyYXBoJ3MgIm5vZGVzIiBhcyAiYmxvY2tzIi4gSW4KKy8vIHRoYXQgcmVnYXJk
IHRoaXMgY29kZSBpcyBraW5kIG9mIHNwZWNpYWxpemVkIGZvciB0aGUgdmFyaW91cyBKU0MgY29t
cGlsZXJzLCBidXQgeW91IGNvdWxkIHVzZSBpdAorLy8gZm9yIG5vbi1jb21waWxlciB0aGluZ3Mg
aWYgeW91IGFyZSBPSyB3aXRoIHJlZmVycmluZyB0byB5b3VyICJub2RlcyIgYXMgImJsb2NrcyIu
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgorY2xhc3MgRG9taW5hdG9ycyB7CitwdWJsaWM6
CisgICAgRG9taW5hdG9ycyhHcmFwaCYgZ3JhcGgsIGJvb2wgc2VsZkNoZWNrID0gZmFsc2UpCisg
ICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICB7CisgICAgICAgIExlbmdhdWVyVGFyamFuIGxl
bmdhdWVyVGFyamFuKG1fZ3JhcGgpOworICAgICAgICBsZW5nYXVlclRhcmphbi5jb21wdXRlKCk7
CisKKyAgICAgICAgbV9kYXRhID0gbV9ncmFwaC50ZW1wbGF0ZSBuZXdNYXA8QmxvY2tEYXRhPigp
OworICAgIAorICAgICAgICAvLyBGcm9tIGhlcmUgd2Ugd2FudCB0byBidWlsZCBhIHNwYW5uaW5n
IHRyZWUgd2l0aCBib3RoIHVwd2FyZCBhbmQgZG93bndhcmQgbGlua3MgYW5kIHdlIHdhbnQKKyAg
ICAgICAgLy8gdG8gZG8gYSBzZWFyY2ggb3ZlciB0aGlzIHRyZWUgdG8gY29tcHV0ZSBwcmUgYW5k
IHBvc3QgbnVtYmVycyB0aGF0IGNhbiBiZSB1c2VkIGZvciBkb21pbmFuY2UKKyAgICAgICAgLy8g
dGVzdHMuCisgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bnVtTm9kZXMoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6
Ok5vZGUgYmxvY2sgPSBtX2dyYXBoLm5vZGUoYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgICAg
IHR5cGVuYW1lIEdyYXBoOjpOb2RlIGlkb21CbG9jayA9IGxlbmdhdWVyVGFyamFuLmltbWVkaWF0
ZURvbWluYXRvcihibG9jayk7CisgICAgICAgICAgICBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQg
PSBpZG9tQmxvY2s7CisgICAgICAgICAgICBpZiAoaWRvbUJsb2NrKQorICAgICAgICAgICAgICAg
IG1fZGF0YVtpZG9tQmxvY2tdLmlkb21LaWRzLmFwcGVuZChibG9jayk7CisgICAgICAgIH0KKyAg
ICAKKyAgICAgICAgdW5zaWduZWQgbmV4dFByZU51bWJlciA9IDA7CisgICAgICAgIHVuc2lnbmVk
IG5leHRQb3N0TnVtYmVyID0gMDsKKyAgICAKKyAgICAgICAgLy8gUGxhaW4gc3RhY2stYmFzZWQg
d29ya2xpc3QgYmVjYXVzZSB3ZSBhcmUgZ3VhcmFudGVlZCB0byBzZWUgZWFjaCBibG9jayBleGFj
dGx5IG9uY2UgYW55d2F5LgorICAgICAgICBWZWN0b3I8R3JhcGhOb2RlV2l0aE9yZGVyPHR5cGVu
YW1lIEdyYXBoOjpOb2RlPj4gd29ya2xpc3Q7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChHcmFw
aE5vZGVXaXRoT3JkZXI8dHlwZW5hbWUgR3JhcGg6Ok5vZGU+KG1fZ3JhcGgubm9kZSgwKSwgR3Jh
cGhWaXNpdE9yZGVyOjpQcmUpKTsKKyAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIEdyYXBoTm9kZVdpdGhPcmRlcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZT4g
aXRlbSA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBzd2l0Y2ggKGl0ZW0ub3Jk
ZXIpIHsKKyAgICAgICAgICAgIGNhc2UgR3JhcGhWaXNpdE9yZGVyOjpQcmU6CisgICAgICAgICAg
ICAgICAgbV9kYXRhW2l0ZW0ubm9kZV0ucHJlTnVtYmVyID0gbmV4dFByZU51bWJlcisrOworICAg
ICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChHcmFwaE5vZGVXaXRoT3JkZXI8dHlwZW5hbWUg
R3JhcGg6Ok5vZGU+KGl0ZW0ubm9kZSwgR3JhcGhWaXNpdE9yZGVyOjpQb3N0KSk7CisgICAgICAg
ICAgICAgICAgZm9yICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBraWQgOiBtX2RhdGFbaXRlbS5ub2Rl
XS5pZG9tS2lkcykKKyAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKEdyYXBoTm9k
ZVdpdGhPcmRlcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZT4oa2lkLCBHcmFwaFZpc2l0T3JkZXI6OlBy
ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHcmFwaFZpc2l0
T3JkZXI6OlBvc3Q6CisgICAgICAgICAgICAgICAgbV9kYXRhW2l0ZW0ubm9kZV0ucG9zdE51bWJl
ciA9IG5leHRQb3N0TnVtYmVyKys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKHNlbGZDaGVjaykgeworICAgICAgICAg
ICAgLy8gQ2hlY2sgb3VyIGRvbWluYXRvciBjYWxjdWxhdGlvbjoKKyAgICAgICAgICAgIC8vIDEp
IENoZWNrIHRoYXQgb3VyIHJhbmdlLWJhc2VkIGFuY2VzdHJ5IHRlc3QgaXMgdGhlIHNhbWUgYXMg
YSBuYWl2ZSBhbmNlc3RyeSB0ZXN0LgorICAgICAgICAgICAgLy8gMikgQ2hlY2sgdGhhdCBvdXIg
bm90aW9uIG9mIHdobyBkb21pbmF0ZXMgd2hvbSBpcyBpZGVudGljYWwgdG8gYSBuYWl2ZSAobm90
CisgICAgICAgICAgICAvLyAgICBMZW5nYXVlci1UYXJqYW4pIGRvbWluYXRvciBjYWxjdWxhdGlv
bi4KKyAgICAgICAgCisgICAgICAgICAgICBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KG1fZ3Jh
cGgsICp0aGlzKTsKKyAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGZyb21CbG9j
a0luZGV4ID0gbV9ncmFwaC5udW1Ob2RlcygpOyBmcm9tQmxvY2tJbmRleC0tOykgeworICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGZyb21CbG9jayA9IG1fZ3JhcGgubm9kZShm
cm9tQmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFmcm9tQmxvY2sgfHwgbV9kYXRh
W2Zyb21CbG9ja10ucHJlTnVtYmVyID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRvQmxvY2tJbmRleCA9IG1f
Z3JhcGgubnVtTm9kZXMoKTsgdG9CbG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAg
IHR5cGVuYW1lIEdyYXBoOjpOb2RlIHRvQmxvY2sgPSBtX2dyYXBoLm5vZGUodG9CbG9ja0luZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0b0Jsb2NrIHx8IG1fZGF0YVt0b0Jsb2NrXS5w
cmVOdW1iZXIgPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRvbWluYXRlcyhmcm9t
QmxvY2ssIHRvQmxvY2spICE9IG5haXZlRG9taW5hdGVzKGZyb21CbG9jaywgdG9CbG9jaykpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydEVycm9yKGZyb21CbG9jaywgdG9C
bG9jaywgIlJhbmdlLWJhc2VkIGRvbWluYXRpb24gY2hlY2sgaXMgYnJva2VuIik7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChkb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSAhPSBjb250ZXh0
Lm5haXZlRG9taW5hdG9ycy5kb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0RXJyb3IoZnJvbUJsb2NrLCB0b0Jsb2NrLCAi
TGVuZ2F1ZXItVGFyamFuIGRvbWluYXRpb24gaXMgYnJva2VuIik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIGNvbnRleHQuaGFuZGxlRXJy
b3JzKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIHN0cmljdGx5RG9taW5hdGVzKHR5
cGVuYW1lIEdyYXBoOjpOb2RlIGZyb20sIHR5cGVuYW1lIEdyYXBoOjpOb2RlIHRvKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVt0b10ucHJlTnVtYmVyID4gbV9kYXRhW2Zyb21d
LnByZU51bWJlcgorICAgICAgICAgICAgJiYgbV9kYXRhW3RvXS5wb3N0TnVtYmVyIDwgbV9kYXRh
W2Zyb21dLnBvc3ROdW1iZXI7CisgICAgfQorICAgIAorICAgIGJvb2wgZG9taW5hdGVzKHR5cGVu
YW1lIEdyYXBoOjpOb2RlIGZyb20sIHR5cGVuYW1lIEdyYXBoOjpOb2RlIHRvKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZyb20gPT0gdG8gfHwgc3RyaWN0bHlEb21pbmF0ZXMoZnJvbSwg
dG8pOworICAgIH0KKyAgICAKKyAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBpbW1lZGlhdGVEb21p
bmF0b3JPZih0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQ7CisgICAgfQorICAgIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxTdHJpY3REb21pbmF0b3JzT2Yo
dHlwZW5hbWUgR3JhcGg6Ok5vZGUgdG8sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0Cisg
ICAgeworICAgICAgICBmb3IgKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gbV9kYXRhW3Rv
XS5pZG9tUGFyZW50OyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQpCisg
ICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbERvbWluYXRvcnNPZih0eXBlbmFtZSBHcmFw
aDo6Tm9kZSB0bywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAg
IGZvciAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSB0bzsgYmxvY2s7IGJsb2NrID0gbV9k
YXRhW2Jsb2NrXS5pZG9tUGFyZW50KQorICAgICAgICAgICAgZnVuY3RvcihibG9jayk7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxC
bG9ja3NTdHJpY3RseURvbWluYXRlZEJ5KHR5cGVuYW1lIEdyYXBoOjpOb2RlIGZyb20sIGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8dHlwZW5hbWUg
R3JhcGg6Ok5vZGUsIDE2PiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kVmVjdG9y
KG1fZGF0YVtmcm9tXS5pZG9tS2lkcyk7CisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IHdvcmtsaXN0
LnRha2VMYXN0KCk7CisgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgIHdv
cmtsaXN0LmFwcGVuZFZlY3RvcihtX2RhdGFbYmxvY2tdLmlkb21LaWRzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9y
QWxsQmxvY2tzRG9taW5hdGVkQnkodHlwZW5hbWUgR3JhcGg6Ok5vZGUgZnJvbSwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3Rvcjx0eXBlbmFtZSBHcmFw
aDo6Tm9kZSwgMTY+IHdvcmtsaXN0OworICAgICAgICB3b3JrbGlzdC5hcHBlbmQoZnJvbSk7Cisg
ICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICB0eXBlbmFt
ZSBHcmFwaDo6Tm9kZSBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBm
dW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZFZlY3RvcihtX2RhdGFb
YmxvY2tdLmlkb21LaWRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB0eXBlbmFtZSBH
cmFwaDo6U2V0IHN0cmljdERvbWluYXRvcnNPZih0eXBlbmFtZSBHcmFwaDo6Tm9kZSB0bykgY29u
c3QKKyAgICB7CisgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpTZXQgcmVzdWx0OworICAgICAgICBm
b3JBbGxTdHJpY3REb21pbmF0b3JzT2YoCisgICAgICAgICAgICB0bywKKyAgICAgICAgICAgIFsm
XSAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9kZSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5h
ZGQobm9kZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgdHlwZW5hbWUgR3JhcGg6OlNldCBkb21pbmF0b3JzT2YodHlwZW5hbWUgR3Jh
cGg6Ok5vZGUgdG8pIGNvbnN0CisgICAgeworICAgICAgICB0eXBlbmFtZSBHcmFwaDo6U2V0IHJl
c3VsdDsKKyAgICAgICAgZm9yQWxsRG9taW5hdG9yc09mKAorICAgICAgICAgICAgdG8sCisgICAg
ICAgICAgICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUpIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYWRkKG5vZGUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIHR5cGVuYW1lIEdyYXBoOjpTZXQgYmxvY2tzU3RyaWN0bHlE
b21pbmF0ZWRCeSh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBmcm9tKSBjb25zdAorICAgIHsKKyAgICAg
ICAgdHlwZW5hbWUgR3JhcGg6OlNldCByZXN1bHQ7CisgICAgICAgIGZvckFsbEJsb2Nrc1N0cmlj
dGx5RG9taW5hdGVkQnkoCisgICAgICAgICAgICBmcm9tLAorICAgICAgICAgICAgWyZdICh0eXBl
bmFtZSBHcmFwaDo6Tm9kZSBub2RlKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChub2Rl
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICB0eXBlbmFtZSBHcmFwaDo6U2V0IGJsb2Nrc0RvbWluYXRlZEJ5KHR5cGVuYW1lIEdyYXBo
OjpOb2RlIGZyb20pIGNvbnN0CisgICAgeworICAgICAgICB0eXBlbmFtZSBHcmFwaDo6U2V0IHJl
c3VsdDsKKyAgICAgICAgZm9yQWxsQmxvY2tzRG9taW5hdGVkQnkoCisgICAgICAgICAgICBmcm9t
LAorICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBub2RlKSB7CisgICAgICAg
ICAgICAgICAgcmVzdWx0LmFkZChub2RlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mKAorICAgICAgICB0eXBl
bmFtZSBHcmFwaDo6Tm9kZSBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAg
IHsKKyAgICAgICAgdHlwZW5hbWUgR3JhcGg6OlNldCBzZXQ7CisgICAgICAgIGZvckFsbEJsb2Nr
c0luRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCisgICAgICAgICAgICBmcm9tLAorICAgICAgICAg
ICAgWyZdICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgeworICAgICAgICAgICAgICAgIGlm
IChzZXQuYWRkKGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgZnVuY3RvcihibG9jayk7Cisg
ICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdHlwZW5hbWUgR3JhcGg6OlNldCBkb21p
bmFuY2VGcm9udGllck9mKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGZyb20pIGNvbnN0CisgICAgewor
ICAgICAgICB0eXBlbmFtZSBHcmFwaDo6U2V0IHJlc3VsdDsKKyAgICAgICAgZm9yQWxsQmxvY2tz
SW5Eb21pbmFuY2VGcm9udGllck9mKAorICAgICAgICAgICAgZnJvbSwKKyAgICAgICAgICAgIFsm
XSAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgbm9kZSkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5h
ZGQobm9kZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEJs
b2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKGNvbnN0IHR5cGVuYW1lIEdyYXBoOjpM
aXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yQWxs
QmxvY2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCisgICAgICAgICAgICBm
cm9tLAorICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykgLT4gYm9v
bCB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihibG9jayk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBpcyBh
IGNsb3NlIHJlbGF0aXZlIG9mIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGll
ck9mKCksIHdoaWNoIGFsbG93cyB0aGUKKyAgICAvLyBnaXZlbiBmdW5jdG9yIHRvIHJldHVybiBm
YWxzZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGRvbid0IHdpc2ggdG8gY29uc2lkZXIgdGhlIGdpdmVu
IGJsb2NrLgorICAgIC8vIFVzZWZ1bCBmb3IgY29tcHV0aW5nIHBydW5lZCBTU0EgZm9ybS4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5QcnVu
ZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCisgICAgICAgIGNvbnN0IHR5cGVuYW1lIEdy
YXBoOjpMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAg
dHlwZW5hbWUgR3JhcGg6OlNldCBzZXQ7CisgICAgICAgIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWRE
b21pbmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBb
Jl0gKHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrKSAtPiBib29sIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXNldC5hZGQoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYmxvY2spOworICAgICAgICAgICAgfSk7
CisgICAgfQorICAgIAorICAgIHR5cGVuYW1lIEdyYXBoOjpTZXQgaXRlcmF0ZWREb21pbmFuY2VG
cm9udGllck9mKGNvbnN0IHR5cGVuYW1lIEdyYXBoOjpMaXN0JiBmcm9tKSBjb25zdAorICAgIHsK
KyAgICAgICAgdHlwZW5hbWUgR3JhcGg6OlNldCByZXN1bHQ7CisgICAgICAgIGZvckFsbEJsb2Nr
c0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgICAgIGZyb20sCisg
ICAgICAgICAgICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpOb2RlIG5vZGUpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQuYWRkKG5vZGUpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZGF0YS5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAg
ICAgICAgaWYgKG1fZGF0YVtibG9ja0luZGV4XS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiICAgIEJsb2NrICMiLCBibG9ja0luZGV4LCAiOiBpZG9tID0gIiwgcG9pbnRlckR1bXAobV9k
YXRhW2Jsb2NrSW5kZXhdLmlkb21QYXJlbnQpLCAiLCBpZG9tS2lkcyA9IFsiKTsKKyAgICAgICAg
ICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2RhdGFbYmxvY2tJbmRleF0uaWRvbUtpZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAqbV9kYXRhW2Jsb2NrSW5kZXhdLmlkb21LaWRzW2ldKTsK
KyAgICAgICAgICAgIG91dC5wcmludCgiXSwgcHJlL3Bvc3QgPSAiLCBtX2RhdGFbYmxvY2tJbmRl
eF0ucHJlTnVtYmVyLCAiLyIsIG1fZGF0YVtibG9ja0luZGV4XS5wb3N0TnVtYmVyLCAiXG4iKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBpbXBsZW1lbnRz
IExlbmdhdWVyIGFuZCBUYXJqYW4ncyAiQSBGYXN0IEFsZ29yaXRobSBmb3IgRmluZGluZyBEb21p
bmF0b3JzIGluIGEgRmxvd2dyYXBoIgorICAgIC8vIChUT1BMQVMgMTk3OSkuIEl0IHVzZXMgdGhl
ICJzaW1wbGUiIGltcGxlbWVudGF0aW9uIG9mIExJTksgYW5kIEVWQUwsIHdoaWNoIHlpZWxkcyBh
biBPKG4gbG9nIG4pCisgICAgLy8gc29sdXRpb24uIFRoZSBmdWxsIHBhcGVyIGlzIGxpbmtlZCBi
ZWxvdzsgdGhpcyBjb2RlIGF0dGVtcHRzIHRvIGNsb3NlbHkgZm9sbG93IHRoZSBhbGdvcml0aG0g
YXMKKyAgICAvLyBpdCBpcyBwcmVzZW50ZWQgaW4gdGhlIHBhcGVyOyBpbiBwYXJ0aWN1bGFyIHNl
Y3Rpb25zIDMgYW5kIDQgYXMgd2VsbCBhcyBhcHBlbmRpeCBCLgorICAgIC8vIGh0dHBzOi8vd3d3
LmNzLnByaW5jZXRvbi5lZHUvY291cnNlcy9hcmNoaXZlL2ZhbGwwMy9jczUyOC9oYW5kb3V0cy9h
JTIwZmFzdCUyMGFsZ29yaXRobSUyMGZvciUyMGZpbmRpbmcucGRmCisgICAgLy8KKyAgICAvLyBU
aGlzIGNvZGUgaXMgdmVyeSBzdWJ0bGUuIFRoZSBMZW5nYXVlci1UYXJqYW4gYWxnb3JpdGhtIGlz
IGluY3JlZGlibHkgZGVlcCB0byBiZWdpbiB3aXRoLiBUaGUKKyAgICAvLyBnb2FsIG9mIHRoaXMg
Y29kZSBpcyB0byBmb2xsb3cgdGhlIGNvZGUgaW4gdGhlIHBhcGVyLCBob3dldmVyIG91ciBpbXBs
ZW1lbnRhdGlvbiBtdXN0IGRldmlhdGUKKyAgICAvLyBmcm9tIHRoZSBwYXBlciB3aGVuIGl0IGNv
bWVzIHRvIHJlY3Vyc2lvbi4gVGhlIGF1dGhvcnMgaGFkIHVzZWQgcmVjdXJzaW9uIHRvIGltcGxl
bWVudCBERlMsIGFuZAorICAgIC8vIGFsc28gdG8gaW1wbGVtZW50IHRoZSAic2ltcGxlIiBFVkFM
LiBXZSBjb252ZXJ0IGJvdGggb2YgdGhvc2UgaW50byB3b3JrbGlzdC1iYXNlZCBzb2x1dGlvbnMu
CisgICAgLy8gRmluYWxseSwgb25jZSB0aGUgYWxnb3JpdGhtIGdpdmVzIHVzIGltbWVkaWF0ZSBk
b21pbmF0b3JzLCB3ZSBpbXBsZW1lbnQgZG9taW5hbmNlIHRlc3RzIGJ5CisgICAgLy8gd2Fsa2lu
ZyB0aGUgZG9taW5hdG9yIHRyZWUgYW5kIGNvbXB1dGluZyBwcmUgYW5kIHBvc3QgbnVtYmVycy4g
V2UgdGhlbiB1c2UgdGhlIHJhbmdlIGluY2x1c2lvbgorICAgIC8vIGNoZWNrIHRyaWNrIHRoYXQg
d2FzIGZpcnN0IGRpc2NvdmVyZWQgYnkgUGF1bCBGLiBEaWV0eiBpbiAxOTgyIGluICJNYWludGFp
bmluZyBvcmRlciBpbiBhIGxpbmtlZAorICAgIC8vIGxpc3QiIChzZWUgaHR0cDovL2RsLmFjbS5v
cmcvY2l0YXRpb24uY2ZtP2lkPTgwMjE4NCkuCisKKyAgICBjbGFzcyBMZW5nYXVlclRhcmphbiB7
CisgICAgcHVibGljOgorICAgICAgICBMZW5nYXVlclRhcmphbihHcmFwaCYgZ3JhcGgpCisgICAg
ICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICAgICAsIG1fZGF0YShncmFwaC50ZW1w
bGF0ZSBuZXdNYXA8QmxvY2tEYXRhPigpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bU5vZGVzKCk7IGJsb2NrSW5kZXgtLTspIHsK
KyAgICAgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IG1fZ3JhcGgubm9k
ZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBtX2RhdGFbYmxvY2tdLmxhYmVsID0g
YmxvY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBjb21w
dXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29tcHV0ZURlcHRoRmlyc3RQcmVOdW1iZXJp
bmcoKTsgLy8gU3RlcCAxLgorICAgICAgICAgICAgY29tcHV0ZVNlbWlEb21pbmF0b3JzQW5kSW1w
bGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCk7IC8vIFN0ZXBzIDIgYW5kIDMuCisgICAgICAgICAg
ICBjb21wdXRlRXhwbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCk7IC8vIFN0ZXAgNC4KKyAgICAg
ICAgfQorICAgIAorICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBpbW1lZGlhdGVEb21pbmF0
b3IodHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2RhdGFbYmxvY2tdLmRvbTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdm9pZCBjb21wdXRlRGVwdGhGaXJzdFByZU51bWJlcmluZygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIFVzZSBhIGJsb2NrIHdvcmtsaXN0IHRoYXQgYWxzbyB0cmFja3MgdGhlIGluZGV4
IGluc2lkZSB0aGUgc3VjY2Vzc29yIGxpc3QuIFRoaXMgaXMKKyAgICAgICAgICAgIC8vIG5lY2Vz
c2FyeSBmb3IgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndCBhdHRlbXB0IHRvIHZpc2l0IGEgc3VjY2Vz
c29yIHVudGlsIHRoZSBwcmV2aW91cworICAgICAgICAgICAgLy8gc3VjY2Vzc29ycyB0aGF0IHdl
IGhhZCB2aXNpdGVkIGFyZSBmdWxseSBwcm9jZXNzZWQuIFRoaXMgZW5kcyB1cCBiZWluZyByZXZl
YWxlZCBpbiB0aGUKKyAgICAgICAgICAgIC8vIG91dHB1dCBvZiB0aGlzIG1ldGhvZCBiZWNhdXNl
IHRoZSBmaXJzdCB0aW1lIHdlIHNlZSBhbiBlZGdlIHRvIGEgYmxvY2ssIHdlIHNldCB0aGUKKyAg
ICAgICAgICAgIC8vIGJsb2NrJ3MgcGFyZW50LiBTbywgaWYgd2UgaGF2ZToKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBBIC0+IEIKKyAgICAgICAgICAgIC8vIEEgLT4gQworICAgICAg
ICAgICAgLy8gQiAtPiBDCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQW5kIHdlJ3Jl
IHByb2Nlc3NpbmcgQSwgdGhlbiB3ZSB3YW50IHRvIGVuc3VyZSB0aGF0IGlmIHdlIHNlZSBBLT5C
IGZpcnN0IChhbmQgaGVuY2Ugc2V0CisgICAgICAgICAgICAvLyBCJ3MgcHJlbnVtYmVyIGJlZm9y
ZSB3ZSBzZXQgQydzKSB0aGVuIHdlIGFsc28gZW5kIHVwIHNldHRpbmcgQydzIHBhcmVudCB0byBC
IGJ5IHZpcnR1ZQorICAgICAgICAgICAgLy8gb2Ygbm90IG5vdGljaW5nIEEtPkMgdW50aWwgd2Un
cmUgZG9uZSBwcm9jZXNzaW5nIEIuCisKKyAgICAgICAgICAgIEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8dHlwZW5hbWUgR3JhcGg6Ok5vZGUsIHVuc2lnbmVkLCB0eXBlbmFtZSBHcmFwaDo6U2V0
PiB3b3JrbGlzdDsKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gobV9ncmFwaC5ub2RlKDApLCAw
KTsKKyAgICAgICAgCisgICAgICAgICAgICB3aGlsZSAoR3JhcGhOb2RlV2l0aDx0eXBlbmFtZSBH
cmFwaDo6Tm9kZSwgdW5zaWduZWQ+IGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gaXRlbS5ub2RlOworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gaXRlbS5kYXRhOworICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gV2UgaW5pdGlhbGx5IHB1c2ggd2l0aCBzdWNjZXNzb3JJbmRl
eCA9IDAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGFueQorICAgICAgICAg
ICAgICAgIC8vIHN1Y2Nlc3NvcnMuIFRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gYXNzaWduIG91ciBw
cmVudW1iZXIuIFN1YnNlcXVlbnRseSB3ZSBnZXQgcHVzaGVkCisgICAgICAgICAgICAgICAgLy8g
d2l0aCBoaWdoZXIgc3VjY2Vzc29ySW5kZXggdmFsdWVzLCBidXQgb25seSBpZiB0aGV5IGFyZSBp
biByYW5nZS4KKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN1Y2Nlc3NvckluZGV4IHx8IHN1Y2Nl
c3NvckluZGV4IDwgbV9ncmFwaC5zdWNjZXNzb3JzKGJsb2NrKS5zaXplKCkpOworCisgICAgICAg
ICAgICAgICAgaWYgKCFzdWNjZXNzb3JJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBtX2Rh
dGFbYmxvY2tdLnNlbWlOdW1iZXIgPSBtX2Jsb2NrQnlQcmVOdW1iZXIuc2l6ZSgpOworICAgICAg
ICAgICAgICAgICAgICBtX2Jsb2NrQnlQcmVOdW1iZXIuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29ySW5k
ZXggPCBtX2dyYXBoLnN1Y2Nlc3NvcnMoYmxvY2spLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBuZXh0U3VjY2Vzc29ySW5kZXggPSBzdWNjZXNzb3JJbmRleCArIDE7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChuZXh0U3VjY2Vzc29ySW5kZXggPCBtX2dyYXBoLnN1Y2Nl
c3NvcnMoYmxvY2spLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmZv
cmNlUHVzaChibG9jaywgbmV4dFN1Y2Nlc3NvckluZGV4KTsKKworICAgICAgICAgICAgICAgICAg
ICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBzdWNjZXNzb3JCbG9jayA9IG1fZ3JhcGguc3VjY2Vzc29y
cyhibG9jaylbc3VjY2Vzc29ySW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAod29ya2xp
c3QucHVzaChzdWNjZXNzb3JCbG9jaywgMCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2Rh
dGFbc3VjY2Vzc29yQmxvY2tdLnBhcmVudCA9IGJsb2NrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIGNvbXB1dGVTZW1pRG9t
aW5hdG9yc0FuZEltcGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgY3VycmVudFByZU51bWJlciA9IG1fYmxvY2tCeVByZU51bWJl
ci5zaXplKCk7IGN1cnJlbnRQcmVOdW1iZXItLSA+IDE7KSB7CisgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBtX2Jsb2NrQnlQcmVOdW1iZXJbY3VycmVudFByZU51
bWJlcl07CisgICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBibG9ja0RhdGEgPSBtX2RhdGFbYmxv
Y2tdOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gU3RlcCAyOgorICAgICAgICAg
ICAgICAgIGZvciAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgcHJlZGVjZXNzb3JCbG9jayA6IG1fZ3Jh
cGgucHJlZGVjZXNzb3JzKGJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBH
cmFwaDo6Tm9kZSBpbnRlcm1lZGlhdGVCbG9jayA9IGV2YWwocHJlZGVjZXNzb3JCbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgIGJsb2NrRGF0YS5zZW1pTnVtYmVyID0gc3RkOjptaW4oCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2RhdGFbaW50ZXJtZWRpYXRlQmxvY2tdLnNlbWlOdW1iZXIs
IGJsb2NrRGF0YS5zZW1pTnVtYmVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgYnVja2V0UHJlTnVtYmVyID0gYmxvY2tEYXRhLnNlbWlOdW1iZXI7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGJ1Y2tldFByZU51bWJlciA8PSBjdXJyZW50UHJlTnVtYmVyKTsK
KyAgICAgICAgICAgICAgICBtX2RhdGFbbV9ibG9ja0J5UHJlTnVtYmVyW2J1Y2tldFByZU51bWJl
cl1dLmJ1Y2tldC5hcHBlbmQoYmxvY2spOworICAgICAgICAgICAgICAgIGxpbmsoYmxvY2tEYXRh
LnBhcmVudCwgYmxvY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gU3RlcCAz
OgorICAgICAgICAgICAgICAgIGZvciAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgc2VtaURvbWluZWUg
OiBtX2RhdGFbYmxvY2tEYXRhLnBhcmVudF0uYnVja2V0KSB7CisgICAgICAgICAgICAgICAgICAg
IHR5cGVuYW1lIEdyYXBoOjpOb2RlIHBvc3NpYmxlRG9taW5hdG9yID0gZXZhbChzZW1pRG9taW5l
ZSk7CisgICAgICAgICAgICAgICAgICAgIEJsb2NrRGF0YSYgc2VtaURvbWluZWVEYXRhID0gbV9k
YXRhW3NlbWlEb21pbmVlXTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYmxvY2tCeVBy
ZU51bWJlcltzZW1pRG9taW5lZURhdGEuc2VtaU51bWJlcl0gPT0gYmxvY2tEYXRhLnBhcmVudCk7
CisgICAgICAgICAgICAgICAgICAgIEJsb2NrRGF0YSYgcG9zc2libGVEb21pbmF0b3JEYXRhID0g
bV9kYXRhW3Bvc3NpYmxlRG9taW5hdG9yXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3Np
YmxlRG9taW5hdG9yRGF0YS5zZW1pTnVtYmVyIDwgc2VtaURvbWluZWVEYXRhLnNlbWlOdW1iZXIp
CisgICAgICAgICAgICAgICAgICAgICAgICBzZW1pRG9taW5lZURhdGEuZG9tID0gcG9zc2libGVE
b21pbmF0b3I7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbWlEb21pbmVlRGF0YS5kb20gPSBibG9ja0RhdGEucGFyZW50OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBtX2RhdGFbYmxvY2tEYXRhLnBhcmVudF0uYnVja2V0LmNs
ZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBjb21w
dXRlRXhwbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjdXJyZW50UHJlTnVtYmVyID0gMTsgY3VycmVudFByZU51bWJlciA8IG1f
YmxvY2tCeVByZU51bWJlci5zaXplKCk7ICsrY3VycmVudFByZU51bWJlcikgeworICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gbV9ibG9ja0J5UHJlTnVtYmVyW2N1
cnJlbnRQcmVOdW1iZXJdOworICAgICAgICAgICAgICAgIEJsb2NrRGF0YSYgYmxvY2tEYXRhID0g
bV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChibG9ja0Rh
dGEuZG9tICE9IG1fYmxvY2tCeVByZU51bWJlcltibG9ja0RhdGEuc2VtaU51bWJlcl0pCisgICAg
ICAgICAgICAgICAgICAgIGJsb2NrRGF0YS5kb20gPSBtX2RhdGFbYmxvY2tEYXRhLmRvbV0uZG9t
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgbGluayh0eXBl
bmFtZSBHcmFwaDo6Tm9kZSBmcm9tLCB0eXBlbmFtZSBHcmFwaDo6Tm9kZSB0bykKKyAgICAgICAg
eworICAgICAgICAgICAgbV9kYXRhW3RvXS5hbmNlc3RvciA9IGZyb207CisgICAgICAgIH0KKyAg
ICAKKyAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgZXZhbCh0eXBlbmFtZSBHcmFwaDo6Tm9k
ZSBibG9jaykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2RhdGFbYmxvY2tdLmFuY2Vz
dG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBibG9jazsKKyAgICAgICAgCisgICAgICAgICAg
ICBjb21wcmVzcyhibG9jayk7CisgICAgICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5sYWJl
bDsKKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIGNvbXByZXNzKHR5cGVuYW1lIEdyYXBo
OjpOb2RlIGluaXRpYWxCbG9jaykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyB3YXMg
bWVhbnQgdG8gYmUgYSByZWN1cnNpdmUgZnVuY3Rpb24sIGJ1dCB3ZSBkb24ndCBsaWtlIHJlY3Vy
c2lvbiBiZWNhdXNlIHdlIGRvbid0CisgICAgICAgICAgICAvLyB3YW50IHRvIGJsb3cgdGhlIHN0
YWNrLiBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gd2lsbCBjYWxsIGNvbXByZXNzKCkgcmVjdXJzaXZl
bHkgb24gdGhlCisgICAgICAgICAgICAvLyBhbmNlc3RvciBvZiBhbnl0aGluZyB0aGF0IGhhcyBh
biBhbmNlc3Rvci4gU28sIHdlIHBvcHVsYXRlIG91ciB3b3JrbGlzdCB3aXRoIHRoZQorICAgICAg
ICAgICAgLy8gcmVjdXJzaXZlIGFuY2VzdG9ycyBvZiBpbml0aWFsQmxvY2suIFRoZW4gd2UgcHJv
Y2VzcyB0aGUgbGlzdCBzdGFydGluZyBmcm9tIHRoZSBibG9jaworICAgICAgICAgICAgLy8gdGhh
dCBpcyBmdXJ0aGVzdCB1cCB0aGUgYW5jZXN0b3IgY2hhaW4uCisgICAgICAgIAorICAgICAgICAg
ICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYW5jZXN0b3IgPSBtX2RhdGFbaW5pdGlhbEJsb2NrXS5h
bmNlc3RvcjsKKyAgICAgICAgICAgIEFTU0VSVChhbmNlc3Rvcik7CisgICAgICAgICAgICBpZiAo
IW1fZGF0YVthbmNlc3Rvcl0uYW5jZXN0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgICAgIFZlY3Rvcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZSwgMTY+IHN0YWNr
OworICAgICAgICAgICAgZm9yICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jayA9IGluaXRpYWxC
bG9jazsgYmxvY2s7IGJsb2NrID0gbV9kYXRhW2Jsb2NrXS5hbmNlc3RvcikKKyAgICAgICAgICAg
ICAgICBzdGFjay5hcHBlbmQoYmxvY2spOworICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIG9u
bHkgY2FyZSBhYm91dCBibG9ja3MgdGhhdCBoYXZlIGFuIGFuY2VzdG9yIHRoYXQgaGFzIGFuIGFu
Y2VzdG9yLiBUaGUgbGFzdCB0d28KKyAgICAgICAgICAgIC8vIGVsZW1lbnRzIGluIHRoZSBzdGFj
ayB3b24ndCBzYXRpc2Z5IHRoaXMgcHJvcGVydHkuCisgICAgICAgICAgICBBU1NFUlQoc3RhY2su
c2l6ZSgpID49IDIpOworICAgICAgICAgICAgQVNTRVJUKCFtX2RhdGFbc3RhY2tbc3RhY2suc2l6
ZSgpIC0gMV1dLmFuY2VzdG9yKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9kYXRhW21fZGF0YVtz
dGFja1tzdGFjay5zaXplKCkgLSAyXV0uYW5jZXN0b3JdLmFuY2VzdG9yKTsKKyAgICAgICAgCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFjay5zaXplKCkgLSAyOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxvY2sgPSBzdGFja1tpXTsKKyAg
ICAgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSYgbGFiZWxPZkJsb2NrID0gbV9kYXRh
W2Jsb2NrXS5sYWJlbDsKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSYgYW5j
ZXN0b3JPZkJsb2NrID0gbV9kYXRhW2Jsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoYW5jZXN0b3JPZkJsb2NrKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9kYXRhW2Fu
Y2VzdG9yT2ZCbG9ja10uYW5jZXN0b3IpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
dHlwZW5hbWUgR3JhcGg6Ok5vZGUgbGFiZWxPZkFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0YVthbmNl
c3Rvck9mQmxvY2tdLmxhYmVsOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1f
ZGF0YVtsYWJlbE9mQW5jZXN0b3JPZkJsb2NrXS5zZW1pTnVtYmVyIDwgbV9kYXRhW2xhYmVsT2ZC
bG9ja10uc2VtaU51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgbGFiZWxPZkJsb2NrID0gbGFi
ZWxPZkFuY2VzdG9yT2ZCbG9jazsKKyAgICAgICAgICAgICAgICBhbmNlc3Rvck9mQmxvY2sgPSBt
X2RhdGFbYW5jZXN0b3JPZkJsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHN0cnVjdCBCbG9ja0RhdGEgeworICAgICAgICAgICAgQmxvY2tEYXRhKCkK
KyAgICAgICAgICAgICAgICA6IHBhcmVudChudWxscHRyKQorICAgICAgICAgICAgICAgICwgcHJl
TnVtYmVyKFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICwgc2VtaU51bWJlcihVSU5UX01BWCkK
KyAgICAgICAgICAgICAgICAsIGFuY2VzdG9yKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBs
YWJlbChudWxscHRyKQorICAgICAgICAgICAgICAgICwgZG9tKG51bGxwdHIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6
Ok5vZGUgcGFyZW50OworICAgICAgICAgICAgdW5zaWduZWQgcHJlTnVtYmVyOworICAgICAgICAg
ICAgdW5zaWduZWQgc2VtaU51bWJlcjsKKyAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2Rl
IGFuY2VzdG9yOworICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgbGFiZWw7CisgICAg
ICAgICAgICBWZWN0b3I8dHlwZW5hbWUgR3JhcGg6Ok5vZGU+IGJ1Y2tldDsKKyAgICAgICAgICAg
IHR5cGVuYW1lIEdyYXBoOjpOb2RlIGRvbTsKKyAgICAgICAgfTsKKyAgICAKKyAgICAgICAgR3Jh
cGgmIG1fZ3JhcGg7CisgICAgICAgIHR5cGVuYW1lIEdyYXBoOjp0ZW1wbGF0ZSBNYXA8QmxvY2tE
YXRhPiBtX2RhdGE7CisgICAgICAgIFZlY3Rvcjx0eXBlbmFtZSBHcmFwaDo6Tm9kZT4gbV9ibG9j
a0J5UHJlTnVtYmVyOworICAgIH07CisKKyAgICBjbGFzcyBOYWl2ZURvbWluYXRvcnMgeworICAg
IHB1YmxpYzoKKyAgICAgICAgTmFpdmVEb21pbmF0b3JzKEdyYXBoJiBncmFwaCkKKyAgICAgICAg
ICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBpbXBs
ZW1lbnRzIGEgbmFpdmUgZG9taW5hdG9yIHNvbHZlci4KKworICAgICAgICAgICAgQVNTRVJUKCFn
cmFwaC5wcmVkZWNlc3NvcnMoZ3JhcGgucm9vdCgpKS5zaXplKCkpOworICAgIAorICAgICAgICAg
ICAgdW5zaWduZWQgbnVtQmxvY2tzID0gZ3JhcGgubnVtTm9kZXMoKTsKKyAgICAKKyAgICAgICAg
ICAgIC8vIEFsbG9jYXRlIHN0b3JhZ2UgZm9yIHRoZSBkZW5zZSBkb21pbmFuY2UgbWF0cml4LiAK
KyAgICAgICAgICAgIG1fcmVzdWx0cy5ncm93KG51bUJsb2Nrcyk7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTspCisgICAgICAgICAgICAgICAgbV9yZXN1bHRz
W2ldLnJlc2l6ZShudW1CbG9ja3MpOworICAgICAgICAgICAgbV9zY3JhdGNoLnJlc2l6ZShudW1C
bG9ja3MpOworCisgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhlIGVudHJ5IGJsb2NrIGlz
IG9ubHkgZG9taW5hdGVkIGJ5IGl0c2VsZi4KKyAgICAgICAgICAgIG1fcmVzdWx0c1swXS5jbGVh
ckFsbCgpOworICAgICAgICAgICAgbV9yZXN1bHRzWzBdLnNldCgwKTsKKworICAgICAgICAgICAg
Ly8gRmluZCBhbGwgb2YgdGhlIHZhbGlkIGJsb2Nrcy4KKyAgICAgICAgICAgIG1fc2NyYXRjaC5j
bGVhckFsbCgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFncmFwaC5ub2RlKGkpKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOworICAgICAg
ICAgICAgfQorICAgIAorICAgICAgICAgICAgLy8gTWFyayBhbGwgbm9kZXMgYXMgZG9taW5hdGVk
IGJ5IGV2ZXJ5dGhpbmcuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7
IGktLSA+IDE7KSB7CisgICAgICAgICAgICAgICAgaWYgKCFncmFwaC5ub2RlKGkpIHx8ICFncmFw
aC5wcmVkZWNlc3NvcnMoZ3JhcGgubm9kZShpKSkuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAg
ICBtX3Jlc3VsdHNbaV0uY2xlYXJBbGwoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5zZXQobV9zY3JhdGNoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gSXRlcmF0aXZlbHkgZWxpbWluYXRlIG5vZGVzIHRoYXQgYXJlIG5v
dCBkb21pbmF0b3IuCisgICAgICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIC8vIFBy
dW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBibG9ja3M6IGZvcndhcmQgc2Nhbi4KKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtQmxvY2tzOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gcHJ1bmVEb21pbmF0b3JzKGkpOworCisgICAg
ICAgICAgICAgICAgaWYgKCFjaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgIC8vIFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBibG9j
a3M6IGJhY2t3YXJkIHNjYW4uCisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tID4gMTspCisgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gcHJ1bmVEb21pbmF0b3JzKGkpOworICAgICAgICAg
ICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wg
ZG9taW5hdGVzKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAgICAgIH0KKyAg
ICAKKyAgICAgICAgYm9vbCBkb21pbmF0ZXModHlwZW5hbWUgR3JhcGg6Ok5vZGUgZnJvbSwgdHlw
ZW5hbWUgR3JhcGg6Ok5vZGUgdG8pIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBkb21pbmF0ZXMoZnJvbS0+aW5kZXgsIHRvLT5pbmRleCk7CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm51bU5vZGVzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdy
YXBoOjpOb2RlIGJsb2NrID0gbV9ncmFwaC5ub2RlKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiICAgIEJsb2NrICIsIG1fZ3JhcGguZHVtcChibG9jayksICI6Iik7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvdGhlckluZGV4ID0gMDsgb3RoZXJJbmRl
eCA8IG1fZ3JhcGgubnVtTm9kZXMoKTsgKytvdGhlckluZGV4KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghZG9taW5hdGVzKG1fZ3JhcGguaW5kZXgoYmxvY2spLCBvdGhlckluZGV4KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoIiAiLCBtX2dyYXBoLmR1bXAobV9ncmFwaC5ub2RlKG90aGVySW5kZXgpKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgcHJ1bmVE
b21pbmF0b3JzKHVuc2lnbmVkIGlkeCkKKyAgICAgICAgeworICAgICAgICAgICAgdHlwZW5hbWUg
R3JhcGg6Ok5vZGUgYmxvY2sgPSBtX2dyYXBoLm5vZGUoaWR4KTsKKworICAgICAgICAgICAgaWYg
KCFibG9jayB8fCAhbV9ncmFwaC5wcmVkZWNlc3NvcnMoYmxvY2spLnNpemUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIEZpbmQgdGhlIGludGVyc2Vj
dGlvbiBvZiBkb20ocHJlZHMpLgorICAgICAgICAgICAgbV9zY3JhdGNoLnNldChtX3Jlc3VsdHNb
bV9ncmFwaC5pbmRleChtX2dyYXBoLnByZWRlY2Vzc29ycyhibG9jaylbMF0pXSk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2dyYXBoLnByZWRlY2Vzc29ycyhibG9jaykuc2l6ZSgp
OyBqLS0gPiAxOykKKyAgICAgICAgICAgICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVzdWx0c1tt
X2dyYXBoLmluZGV4KG1fZ3JhcGgucHJlZGVjZXNzb3JzKGJsb2NrKVtqXSldKTsKKworICAgICAg
ICAgICAgLy8gVGhlIGJsb2NrIGlzIGFsc28gZG9taW5hdGVkIGJ5IGl0c2VsZi4KKyAgICAgICAg
ICAgIG1fc2NyYXRjaC5zZXQoaWR4KTsKKworICAgICAgICAgICAgcmV0dXJuIG1fcmVzdWx0c1tp
ZHhdLnNldEFuZENoZWNrKG1fc2NyYXRjaCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgR3Jh
cGggbV9ncmFwaDsKKyAgICAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3I+IG1fcmVzdWx0czsgLy8g
Rm9yIGVhY2ggYmxvY2ssIHRoZSBiaXR2ZWN0b3Igb2YgYmxvY2tzIHRoYXQgZG9taW5hdGUgaXQu
CisgICAgICAgIEZhc3RCaXRWZWN0b3IgbV9zY3JhdGNoOyAvLyBBIHRlbXBvcmFyeSBiaXR2ZWN0
b3Igd2l0aCBiaXQgZm9yIGVhY2ggYmxvY2suIFdlIHJlY3ljbGUgdGhpcyB0byBzYXZlIG5ldy9k
ZWxldGVzLgorICAgIH07CisKKyAgICBzdHJ1Y3QgVmFsaWRhdGlvbkNvbnRleHQgeworICAgICAg
ICBWYWxpZGF0aW9uQ29udGV4dChHcmFwaCYgZ3JhcGgsIERvbWluYXRvcnMmIGRvbWluYXRvcnMp
CisgICAgICAgICAgICA6IGdyYXBoKGdyYXBoKQorICAgICAgICAgICAgLCBkb21pbmF0b3JzKGRv
bWluYXRvcnMpCisgICAgICAgICAgICAsIG5haXZlRG9taW5hdG9ycyhncmFwaCkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgcmVwb3J0RXJyb3IodHlwZW5hbWUgR3Jh
cGg6Ok5vZGUgZnJvbSwgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgdG8sIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVycm9yIGVycm9yOworICAgICAgICAgICAgZXJy
b3IuZnJvbSA9IGZyb207CisgICAgICAgICAgICBlcnJvci50byA9IHRvOworICAgICAgICAgICAg
ZXJyb3IubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKGVycm9y
KTsKKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIGhhbmRsZUVycm9ycygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChlcnJvcnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgICAgICBkYXRhTG9nKCJERkcgRE9NSU5BVE9SIFZBTElE
QVRJT04gRkFJTEVEOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAg
ICAgZGF0YUxvZygiRm9yIGJsb2NrIGRvbWluYXRpb24gcmVsYXRpb25zaGlwczpcbiIpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVycm9ycy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICIgICAgIiwgZ3Jh
cGguZHVtcChlcnJvcnNbaV0uZnJvbSksICIgLT4gIiwgZ3JhcGguZHVtcChlcnJvcnNbaV0udG8p
LAorICAgICAgICAgICAgICAgICAgICAiICgiLCBlcnJvcnNbaV0ubWVzc2FnZSwgIilcbiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIGRh
dGFMb2coIkNvbnRyb2wgZmxvdyBncmFwaDpcbiIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGdyYXBoLm51bU5vZGVzKCk7ICsrYmxvY2tJ
bmRleCkgeworICAgICAgICAgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGJsb2NrID0gZ3Jh
cGgubm9kZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQmxv
Y2sgIiwgZ3JhcGguZHVtcChncmFwaC5ub2RlKGJsb2NrSW5kZXgpKSwgIjogc3VjY2Vzc29ycyA9
IFsiKTsKKyAgICAgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgZ3JhcGguZHVtcChibG9jay0+c3Vj
Y2Vzc29yKGkpKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiXSwgcHJlZGVjZXNzb3JzID0g
WyIpOworICAgICAgICAgICAgICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7CisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsIGdyYXBoLmR1bXAoYmxv
Y2stPnByZWRlY2Vzc29yc1tpXSkpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIl1cbiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIGRh
dGFMb2coIkxlbmdhdWVyLVRhcmphbiBEb21pbmF0b3JzOlxuIik7CisgICAgICAgICAgICBkYXRh
TG9nKGRvbWluYXRvcnMpOworICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAg
IGRhdGFMb2coIk5haXZlIERvbWluYXRvcnM6XG4iKTsKKyAgICAgICAgICAgIG5haXZlRG9taW5h
dG9ycy5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwor
ICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAg
ICAgICAgICBkYXRhTG9nKGdyYXBoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAg
ICAgICAgICBkYXRhTG9nKCJERkcgRE9NSU5BVE9SIFZBTElEQVRJT04gRkFJTElFRCFcbiIpOwor
ICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBHcmFwaCYgZ3Jh
cGg7CisgICAgICAgIERvbWluYXRvcnMmIGRvbWluYXRvcnM7CisgICAgICAgIE5haXZlRG9taW5h
dG9ycyBuYWl2ZURvbWluYXRvcnM7CisgICAgCisgICAgICAgIHN0cnVjdCBFcnJvciB7CisgICAg
ICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBmcm9tOworICAgICAgICAgICAgdHlwZW5hbWUg
R3JhcGg6Ok5vZGUgdG87CisgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlOworICAgICAg
ICB9OworICAgIAorICAgICAgICBWZWN0b3I8RXJyb3I+IGVycm9yczsKKyAgICB9OworCisgICAg
Ym9vbCBuYWl2ZURvbWluYXRlcyh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBmcm9tLCB0eXBlbmFtZSBH
cmFwaDo6Tm9kZSB0bykgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodHlwZW5hbWUgR3JhcGg6
Ok5vZGUgYmxvY2sgPSB0bzsgYmxvY2s7IGJsb2NrID0gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50
KSB7CisgICAgICAgICAgICBpZiAoYmxvY2sgPT0gZnJvbSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJbkRv
bWluYW5jZUZyb250aWVyT2ZJbXBsKAorICAgICAgICB0eXBlbmFtZSBHcmFwaDo6Tm9kZSBmcm9t
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gUGFyYXBo
cmFzaW5nIGZyb20gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Eb21pbmF0b3JfKGdyYXBo
X3RoZW9yeSk6CisgICAgICAgIC8vICAgICAiVGhlIGRvbWluYW5jZSBmcm9udGllciBvZiBhIGJs
b2NrICdmcm9tJyBpcyB0aGUgc2V0IG9mIGFsbCBibG9ja3MgJ3RvJyBzdWNoIHRoYXQKKyAgICAg
ICAgLy8gICAgICdmcm9tJyBkb21pbmF0ZXMgYW4gaW1tZWRpYXRlIHByZWRlY2Vzc29yIG9mICd0
bycsIGJ1dCAnZnJvbScgZG9lcyBub3Qgc3RyaWN0bHkKKyAgICAgICAgLy8gICAgIGRvbWluYXRl
ICd0bycuIgorICAgICAgICAvLworICAgICAgICAvLyBBIHVzZWZ1bCBjb3JuZXIgY2FzZSB0byBy
ZW1lbWJlcjogYSBibG9jayBtYXkgYmUgaW4gaXRzIG93biBkb21pbmFuY2UgZnJvbnRpZXIgaWYg
aXQgaGFzCisgICAgICAgIC8vIGEgbG9vcCBlZGdlIHRvIGl0c2VsZiwgc2luY2UgaXQgZG9taW5h
dGVzIGl0c2VsZiBhbmQgc28gaXQgZG9taW5hdGVzIGl0cyBvd24gaW1tZWRpYXRlCisgICAgICAg
IC8vIHByZWRlY2Vzc29yLCBhbmQgYSBibG9jayBuZXZlciBzdHJpY3RseSBkb21pbmF0ZXMgaXRz
ZWxmLgorICAgICAgICAKKyAgICAgICAgZm9yQWxsQmxvY2tzRG9taW5hdGVkQnkoCisgICAgICAg
ICAgICBmcm9tLAorICAgICAgICAgICAgWyZdICh0eXBlbmFtZSBHcmFwaDo6Tm9kZSBibG9jaykg
eworICAgICAgICAgICAgICAgIGZvciAodHlwZW5hbWUgR3JhcGg6Ok5vZGUgdG8gOiBtX2dyYXBo
LnN1Y2Nlc3NvcnMoYmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RyaWN0bHlE
b21pbmF0ZXMoZnJvbSwgdG8pKQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih0byk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVk
RG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCisgICAgICAgIGNvbnN0IHR5cGVuYW1lIEdyYXBoOjpM
aXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAg
dHlwZW5hbWUgR3JhcGg6Okxpc3Qgd29ya2xpc3QgPSBmcm9tOworICAgICAgICB3aGlsZSAoIXdv
cmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdHlwZW5hbWUgR3JhcGg6Ok5vZGUgYmxv
Y2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgZm9yQWxsQmxvY2tzSW5Eb21p
bmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgICAgICAgICBibG9jaywKKyAgICAgICAgICAg
ICAgICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpOb2RlIG90aGVyQmxvY2spIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGZ1bmN0b3Iob3RoZXJCbG9jaykpCisgICAgICAgICAgICAgICAgICAgICAg
ICB3b3JrbGlzdC5hcHBlbmQob3RoZXJCbG9jayk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgc3RydWN0IEJsb2NrRGF0YSB7CisgICAgICAgIEJsb2Nr
RGF0YSgpCisgICAgICAgICAgICA6IGlkb21QYXJlbnQobnVsbHB0cikKKyAgICAgICAgICAgICwg
cHJlTnVtYmVyKFVJTlRfTUFYKQorICAgICAgICAgICAgLCBwb3N0TnVtYmVyKFVJTlRfTUFYKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZlY3Rvcjx0eXBlbmFtZSBH
cmFwaDo6Tm9kZT4gaWRvbUtpZHM7CisgICAgICAgIHR5cGVuYW1lIEdyYXBoOjpOb2RlIGlkb21Q
YXJlbnQ7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBwcmVOdW1iZXI7CisgICAgICAgIHVu
c2lnbmVkIHBvc3ROdW1iZXI7CisgICAgfTsKKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAg
ICB0eXBlbmFtZSBHcmFwaDo6dGVtcGxhdGUgTWFwPEJsb2NrRGF0YT4gbV9kYXRhOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6RG9taW5hdG9yczsKKworI2VuZGlmIC8v
IFdURkRvbWluYXRvcnNfaAorCg==
</data>
<flag name="review"
          id="289639"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>