<?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>144396</bug_id>
          
          <creation_ts>2015-04-29 10:15:16 -0700</creation_ts>
          <short_desc>TypeOf should be fast</short_desc>
          <delta_ts>2015-05-04 20:17:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>144397</dependson>
    
    <dependson>144409</dependson>
    
    <dependson>144462</dependson>
    
    <dependson>144500</dependson>
          
          <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>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1090050</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-29 10:15:16 -0700</bug_when>
    <thetext>Currently TypeOf for a cell requires a runtime call because we don&apos;t know if something should be called &quot;function&quot; unless we call getCallData().  TypeOf is used often enough that we should have a good inline implementation.  To do that, we need to add some stuff to the object model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090067</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-29 10:56:40 -0700</bug_when>
    <thetext>Side note: The DOM would like more control over the behavior of &quot;typeof x == &apos;function&apos;&quot;. For example, I believe that global constructors want to be &apos;function&apos; even though they are not callable. So, adding something explicit to the object model may help the DOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090070</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-29 10:58:11 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Side note: The DOM would like more control over the behavior of &quot;typeof x ==
&gt; &apos;function&apos;&quot;. For example, I believe that global constructors want to be
&gt; &apos;function&apos; even though they are not callable. So, adding something explicit
&gt; to the object model may help the DOM.

Interesting. My changes will preserve current behavior. If we want global constructors to claim to be functions even though this doesn&apos;t happen currently, then we should add another type flag for this purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090508</commentid>
    <comment_count>3</comment_count>
      <attachid>252073</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-30 11:36:30 -0700</bug_when>
    <thetext>Created attachment 252073
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090673</commentid>
    <comment_count>4</comment_count>
      <attachid>252120</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-30 17:31:21 -0700</bug_when>
    <thetext>Created attachment 252120
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090870</commentid>
    <comment_count>5</comment_count>
      <attachid>252168</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-01 13:15:29 -0700</bug_when>
    <thetext>Created attachment 252168
getting closer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091035</commentid>
    <comment_count>6</comment_count>
      <attachid>252212</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-01 19:56:52 -0700</bug_when>
    <thetext>Created attachment 252212
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091041</commentid>
    <comment_count>7</comment_count>
      <attachid>252216</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-01 21:37:20 -0700</bug_when>
    <thetext>Created attachment 252216
it is written

Still need to test it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091042</commentid>
    <comment_count>8</comment_count>
      <attachid>252217</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-01 21:54:04 -0700</bug_when>
    <thetext>Created attachment 252217
so close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091107</commentid>
    <comment_count>9</comment_count>
      <attachid>252237</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-02 10:50:51 -0700</bug_when>
    <thetext>Created attachment 252237
with fixes

It&apos;s almost ready for perf testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091110</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-02 10:53:29 -0700</bug_when>
    <thetext>Attachment 252237 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4733:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7421:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4912:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4917:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 22 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>1091119</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-02 12:09:30 -0700</bug_when>
    <thetext>Looks like there is still work to be done to make typeof-using benchmarks fast.  But this looks like overall it&apos;s a step in the right direction.

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r183718)
&quot;FastTypeOf&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r183718)

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                 FastTypeOf                                    
SunSpider:
   3d-cube                                            5.1978+-0.1718     ?      5.2157+-0.1295        ?
   3d-morph                                           6.1007+-0.6261            5.7732+-0.1070          might be 1.0567x faster
   3d-raytrace                                        6.9741+-0.6144            6.5796+-0.2424          might be 1.0600x faster
   access-binary-trees                                2.3698+-0.1982            2.2744+-0.0524          might be 1.0420x faster
   access-fannkuch                                    6.3851+-0.6029            5.9056+-0.0886          might be 1.0812x faster
   access-nbody                                       2.9767+-0.2060     ?      3.0334+-0.3142        ? might be 1.0190x slower
   access-nsieve                                      3.3925+-0.0574            3.3277+-0.0312          might be 1.0195x faster
   bitops-3bit-bits-in-byte                           1.6095+-0.0744            1.5567+-0.0253          might be 1.0339x faster
   bitops-bits-in-byte                                3.4137+-0.0897     ?      3.4755+-0.1500        ? might be 1.0181x slower
   bitops-bitwise-and                                 2.1482+-0.0248     ?      2.1496+-0.0259        ?
   bitops-nsieve-bits                                 3.4326+-0.5044            3.3822+-0.1519          might be 1.0149x faster
   controlflow-recursive                              2.3929+-0.2622     ?      2.4299+-0.2116        ? might be 1.0154x slower
   crypto-aes                                         4.6319+-0.3212            4.4743+-0.1642          might be 1.0352x faster
   crypto-md5                                         2.9866+-0.1567     ^      2.6630+-0.0230        ^ definitely 1.1215x faster
   crypto-sha1                                        2.6339+-0.2026     ?      2.7572+-0.3353        ? might be 1.0468x slower
   date-format-tofte                                  9.3375+-0.1066            9.2644+-0.1101        
   date-format-xparb                                  5.9204+-0.1365            5.8075+-0.0839          might be 1.0194x faster
   math-cordic                                        3.2512+-0.1810            3.2406+-0.3291        
   math-partial-sums                                  5.6469+-0.6456            5.5345+-0.6952          might be 1.0203x faster
   math-spectral-norm                                 2.1170+-0.2291            2.0013+-0.1234          might be 1.0578x faster
   regexp-dna                                         7.1612+-0.1176     ?      8.1350+-1.6398        ? might be 1.1360x slower
   string-base64                                      4.7490+-0.1701            4.7023+-0.1500        
   string-fasta                                       6.7386+-0.1421     ?      6.8193+-0.2436        ? might be 1.0120x slower
   string-tagcloud                                   10.0119+-0.6465     ?     11.0955+-1.2711        ? might be 1.1082x slower
   string-unpack-code                                19.8405+-0.9113           19.6479+-0.7282        
   string-validate-input                              4.9638+-0.2305     ?      4.9899+-0.1157        ?

   &lt;arithmetic&gt;                                       5.2455+-0.1026            5.2399+-0.0960          might be 1.0011x faster

                                                        TipOfTree                 FastTypeOf                                    
LongSpider:
   3d-cube                                          880.3381+-3.4118     ?    882.3793+-10.4645       ?
   3d-morph                                        1530.3024+-4.8921         1529.3130+-3.7923        
   3d-raytrace                                      727.6813+-7.0710     ?    738.3579+-3.6105        ? might be 1.0147x slower
   access-binary-trees                             1034.8072+-10.1980        1029.8719+-3.4155        
   access-fannkuch                                  329.0429+-7.8237          324.3267+-11.9226         might be 1.0145x faster
   access-nbody                                     611.7271+-2.4877     ?    613.0899+-5.3711        ?
   access-nsieve                                    870.5586+-11.3136         862.9816+-15.5793       
   bitops-3bit-bits-in-byte                          45.3083+-2.0964           45.1043+-1.2853        
   bitops-bits-in-byte                              102.6775+-2.8672          101.5868+-1.2259          might be 1.0107x faster
   bitops-nsieve-bits                               617.9013+-2.3705          616.3745+-2.9901        
   controlflow-recursive                            477.8512+-0.4097     !    483.8485+-1.6928        ! definitely 1.0126x slower
   crypto-aes                                       705.6414+-7.8845     ?    706.9118+-5.2168        ?
   crypto-md5                                       529.1755+-12.1179    ?    529.5449+-8.9423        ?
   crypto-sha1                                      601.6514+-8.3305     ?    608.1436+-8.4102        ? might be 1.0108x slower
   date-format-tofte                                757.4471+-19.4434    ?    759.3667+-10.3663       ?
   date-format-xparb                                781.4366+-22.4936    ?    782.7607+-16.5367       ?
   math-cordic                                      596.3478+-8.8185          592.0996+-4.0884        
   math-partial-sums                                505.3558+-1.9734     ?    508.5758+-3.6045        ?
   math-spectral-norm                               572.3764+-9.4229          566.2964+-3.1767          might be 1.0107x faster
   string-base64                                    377.9574+-4.5151     ?    380.7909+-5.1230        ?
   string-fasta                                     441.1704+-4.1692          437.8365+-3.4771        
   string-tagcloud                                  199.4079+-3.9801          197.4165+-1.8625          might be 1.0101x faster

   &lt;geometric&gt;                                      494.3570+-1.8106          493.9562+-1.6228          might be 1.0008x faster

                                                        TipOfTree                 FastTypeOf                                    
V8Spider:
   crypto                                            56.2641+-1.2448           56.1795+-2.3175        
   deltablue                                         96.2640+-3.1731     ?     97.3871+-4.9884        ? might be 1.0117x slower
   earley-boyer                                      44.7097+-1.0347     ?     44.9069+-0.6713        ?
   raytrace                                          40.9255+-2.6427           40.8937+-3.3104        
   regexp                                            80.5355+-1.2319     ?     82.4106+-1.9097        ? might be 1.0233x slower
   richards                                          79.9155+-1.7866           79.6371+-2.9089        
   splay                                             42.4974+-9.2390           39.8397+-1.8951          might be 1.0667x faster

   &lt;geometric&gt;                                       59.5900+-1.7002           59.4135+-0.8336          might be 1.0030x faster

                                                        TipOfTree                 FastTypeOf                                    
Octane:
   encrypt                                           0.20474+-0.00265          0.20323+-0.00147       
   decrypt                                           3.60210+-0.07386          3.57359+-0.03399       
   deltablue                                x2       0.20826+-0.00146          0.20801+-0.00092       
   earley                                            0.53688+-0.00374    ?     0.54122+-0.00485       ?
   boyer                                             6.78210+-0.06802          6.72953+-0.04320       
   navier-stokes                            x2       5.21766+-0.06723          5.21691+-0.07875       
   raytrace                                 x2       1.24945+-0.06802    ?     1.27082+-0.03130       ? might be 1.0171x slower
   richards                                 x2       0.12232+-0.00078    ?     0.12282+-0.00152       ?
   splay                                    x2       0.40021+-0.00385          0.39840+-0.00226       
   regexp                                   x2      31.92321+-0.24547    ?    32.09864+-0.26782       ?
   pdfjs                                    x2      44.26175+-0.43166         43.67249+-0.28474         might be 1.0135x faster
   mandreel                                 x2      50.38151+-0.19348    ?    50.53112+-0.28637       ?
   gbemu                                    x2      41.79057+-0.52837         41.71339+-0.45591       
   closure                                           0.57061+-0.00987          0.56849+-0.00672       
   jquery                                            7.45023+-0.86786          7.14372+-0.04106         might be 1.0429x faster
   box2d                                    x2      12.35265+-0.06649         12.34629+-0.20538       
   zlib                                     x2     389.81420+-15.59398       382.16678+-17.97486        might be 1.0200x faster
   typescript                               x2     893.08639+-123.07095      841.23006+-11.11539        might be 1.0616x faster

   &lt;geometric&gt;                                       6.76509+-0.09238          6.72284+-0.03124         might be 1.0063x faster

                                                        TipOfTree                 FastTypeOf                                    
Kraken:
   ai-astar                                          271.298+-1.767            270.646+-3.798         
   audio-beat-detection                              106.991+-1.108            106.878+-1.161         
   audio-dft                                         150.411+-3.122      ?     150.913+-5.912         ?
   audio-fft                                          84.771+-4.220             82.329+-1.695           might be 1.0297x faster
   audio-oscillator                                  208.314+-1.957      ?     210.349+-6.439         ?
   imaging-darkroom                                  105.872+-1.699            105.072+-2.094         
   imaging-desaturate                                 63.458+-1.405      ?      64.391+-1.870         ? might be 1.0147x slower
   imaging-gaussian-blur                             114.915+-4.848            113.765+-2.086           might be 1.0101x faster
   json-parse-financial                               46.298+-1.650             46.268+-2.481         
   json-stringify-tinderbox                           56.712+-2.488      ?      57.773+-2.194         ? might be 1.0187x slower
   stanford-crypto-aes                                58.584+-0.414      ?      58.964+-0.740         ?
   stanford-crypto-ccm                                60.328+-3.758             60.309+-2.102         
   stanford-crypto-pbkdf2                            136.570+-1.094      ?     138.600+-1.298         ? might be 1.0149x slower
   stanford-crypto-sha256-iterative                   54.152+-3.595             51.672+-1.435           might be 1.0480x faster

   &lt;arithmetic&gt;                                      108.477+-0.367            108.423+-0.741           might be 1.0005x faster

                                                        TipOfTree                 FastTypeOf                                    
JSRegress:
   abs-boolean                                        2.6248+-0.0359     ?      2.6301+-0.0275        ?
   adapt-to-double-divide                            16.8876+-0.3110           16.8081+-0.5773        
   aliased-arguments-getbyval                         1.2246+-0.1004            1.2113+-0.0585          might be 1.0109x faster
   allocate-big-object                                2.8471+-0.1084            2.7976+-0.0387          might be 1.0177x faster
   arguments-named-and-reflective                    14.3944+-3.1329           13.2748+-1.0204          might be 1.0843x faster
   arguments-out-of-bounds                           14.8252+-0.3968     ?     16.0652+-1.3475        ? might be 1.0836x slower
   arguments-strict-mode                             12.6161+-1.2077     ?     13.0170+-2.0328        ? might be 1.0318x slower
   arguments                                         10.5736+-0.3336     ?     11.0134+-0.8006        ? might be 1.0416x slower
   arity-mismatch-inlining                            0.8086+-0.0364     ?      0.8108+-0.0172        ?
   array-access-polymorphic-structure                 7.4624+-1.2664            7.0724+-0.9264          might be 1.0551x faster
   array-nonarray-polymorhpic-access                 34.6226+-2.1188     ?     35.1212+-1.7208        ? might be 1.0144x slower
   array-prototype-every                             89.4485+-1.1914     ?     90.5056+-1.5491        ? might be 1.0118x slower
   array-prototype-forEach                           86.3842+-1.7857           84.4786+-2.7437          might be 1.0226x faster
   array-prototype-map                               94.4806+-2.6895     ?     94.9690+-2.4177        ?
   array-prototype-some                              87.9235+-0.5314     ?     88.8664+-1.6014        ? might be 1.0107x slower
   array-splice-contiguous                           42.1298+-1.9099     ?     42.8798+-3.5425        ? might be 1.0178x slower
   array-with-double-add                              4.2785+-0.2329            4.2266+-0.1347          might be 1.0123x faster
   array-with-double-increment                        3.2021+-0.0634     ?      3.3259+-0.2649        ? might be 1.0387x slower
   array-with-double-mul-add                          5.0289+-0.0575     ?      5.2085+-0.3884        ? might be 1.0357x slower
   array-with-double-sum                              3.2504+-0.0336     ?      3.2743+-0.0349        ?
   array-with-int32-add-sub                           6.8724+-0.1469            6.8173+-0.1456        
   array-with-int32-or-double-sum                     3.4225+-0.3560            3.2902+-0.0349          might be 1.0402x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     34.4743+-1.5509           33.8180+-2.3306          might be 1.0194x faster
   ArrayBuffer-DataView-alloc-long-lived             14.4612+-1.7936     ?     14.7930+-1.2535        ? might be 1.0229x slower
   ArrayBuffer-Int32Array-byteOffset                  3.7642+-0.0746     ?      3.9733+-0.4760        ? might be 1.0556x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     32.5054+-1.1361     ?     32.5603+-2.2264        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     24.0710+-1.8315           23.0732+-1.9543          might be 1.0432x faster
   ArrayBuffer-Int8Array-alloc-long-lived            13.7895+-2.1292     ?     13.9473+-1.6149        ? might be 1.0114x slower
   ArrayBuffer-Int8Array-alloc                       11.3704+-0.9853           10.8163+-0.9504          might be 1.0512x faster
   asmjs_bool_bug                                     7.6805+-0.0945     ?      7.8042+-0.2468        ? might be 1.0161x slower
   assign-custom-setter-polymorphic                   3.5660+-0.6048            3.1132+-0.2402          might be 1.1455x faster
   assign-custom-setter                               4.5755+-0.1346            4.2610+-0.3412          might be 1.0738x faster
   basic-set                                          8.9433+-0.6820            8.6831+-0.5394          might be 1.0300x faster
   big-int-mul                                        4.1926+-0.3540     ?      4.2985+-0.4338        ? might be 1.0253x slower
   boolean-test                                       3.1510+-0.3105            3.0488+-0.0510          might be 1.0335x faster
   branch-fold                                        3.7198+-0.0375     ?      3.9154+-0.3571        ? might be 1.0526x slower
   branch-on-string-as-boolean                       19.8280+-1.7955     ?     21.5415+-1.4594        ? might be 1.0864x slower
   by-val-generic                                     8.3127+-0.2180            8.0630+-0.1795          might be 1.0310x faster
   call-spread-apply                                 29.4803+-0.5740     ?     30.8560+-1.0766        ? might be 1.0467x slower
   call-spread-call                                  26.0701+-1.5059           25.5861+-1.0846          might be 1.0189x faster
   captured-assignments                               0.4309+-0.0081     ?      0.4383+-0.0205        ? might be 1.0170x slower
   cast-int-to-double                                 5.2982+-0.0744     ?      5.3204+-0.1076        ?
   cell-argument                                      8.5564+-0.2643            8.4507+-0.1218          might be 1.0125x faster
   cfg-simplify                                       3.1458+-0.1440            3.1139+-0.1505          might be 1.0103x faster
   chain-getter-access                                9.9703+-0.1225            9.9180+-0.1803        
   cmpeq-obj-to-obj-other                            11.9819+-0.9253           11.5838+-1.6553          might be 1.0344x faster
   constant-test                                      4.9392+-0.0145     ?      5.3604+-0.9620        ? might be 1.0853x slower
   create-lots-of-functions                          11.6708+-0.2675           11.5595+-0.2180        
   DataView-custom-properties                        38.4908+-1.6033     ?     38.7067+-2.0391        ?
   deconstructing-parameters-overridden-by-function   
                                                      0.4742+-0.0171     ?      0.5045+-0.0306        ? might be 1.0639x slower
   delay-tear-off-arguments-strictmode               14.7065+-0.9164           14.1676+-0.1617          might be 1.0380x faster
   deltablue-varargs                                202.8655+-2.4070     ?    204.0972+-1.9032        ?
   destructuring-arguments                           18.4803+-1.4837           18.4185+-1.4307        
   destructuring-swap                                 6.1582+-2.7980            5.1167+-0.0968          might be 1.2036x faster
   direct-arguments-getbyval                          1.3134+-0.0936            1.2746+-0.0606          might be 1.0305x faster
   div-boolean-double                                 5.2415+-0.0228            5.2380+-0.0970        
   div-boolean                                        7.8019+-0.0626     ?      7.8062+-0.1303        ?
   double-get-by-val-out-of-bounds                    4.4833+-0.0475     ?      4.5898+-0.1550        ? might be 1.0237x slower
   double-pollution-getbyval                          8.8397+-0.0841     ?      8.8416+-0.0840        ?
   double-pollution-putbyoffset                       4.4404+-0.1637     ?      4.4971+-0.2690        ? might be 1.0128x slower
   double-to-int32-typed-array-no-inline              2.4385+-0.2811            2.3180+-0.1047          might be 1.0520x faster
   double-to-int32-typed-array                        2.0723+-0.1267            1.9851+-0.1177          might be 1.0440x faster
   double-to-uint32-typed-array-no-inline             2.4514+-0.1292            2.3415+-0.1002          might be 1.0470x faster
   double-to-uint32-typed-array                       2.0380+-0.0672     ?      2.1596+-0.2159        ? might be 1.0597x slower
   elidable-new-object-dag                           43.8846+-0.8933     ?     43.9627+-1.0511        ?
   elidable-new-object-roflcopter                    47.2490+-2.6587     ?     47.5752+-2.1047        ?
   elidable-new-object-then-call                     39.2255+-0.9689     ?     39.9129+-2.5309        ? might be 1.0175x slower
   elidable-new-object-tree                          45.8738+-1.9745     ?     46.1765+-1.5406        ?
   empty-string-plus-int                              5.5063+-0.2359     ?      6.0791+-1.5219        ? might be 1.1040x slower
   emscripten-cube2hash                              37.9571+-1.3843     ?     39.7899+-1.8022        ? might be 1.0483x slower
   exit-length-on-plain-object                       16.6745+-4.9957           14.6216+-1.3396          might be 1.1404x faster
   external-arguments-getbyval                        1.2303+-0.0689     ?      1.2397+-0.0664        ?
   external-arguments-putbyval                        2.2798+-0.0211     ?      2.3869+-0.2236        ? might be 1.0470x slower
   fixed-typed-array-storage-var-index                1.2486+-0.0525            1.2096+-0.0180          might be 1.0323x faster
   fixed-typed-array-storage                          0.9398+-0.0197            0.9186+-0.0306          might be 1.0230x faster
   Float32Array-matrix-mult                           4.6354+-0.3627            4.6219+-0.2953        
   Float32Array-to-Float64Array-set                  57.9956+-3.7263           57.4209+-1.9787          might be 1.0100x faster
   Float64Array-alloc-long-lived                     75.1390+-2.3103           73.3345+-2.1316          might be 1.0246x faster
   Float64Array-to-Int16Array-set                    69.3288+-2.5074           68.9473+-2.9251        
   fold-double-to-int                                13.4522+-0.2213           13.4479+-0.2178        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.0073+-0.9411     ?     10.7937+-1.3751        ? might be 1.0786x slower
   fold-get-by-id-to-multi-get-by-offset             10.0979+-1.0768            9.8765+-1.0376          might be 1.0224x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.9212+-1.1766            9.2601+-1.7149          might be 1.0714x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.2013+-1.3604            8.6543+-0.5924          might be 1.0632x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.4580+-1.3693            8.8411+-1.2579          might be 1.0698x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.7642+-0.6168     ?      6.1501+-0.8617        ? might be 1.2909x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.7837+-0.5569            9.5467+-0.3883          might be 1.0248x faster
   fold-put-by-id-to-multi-put-by-offset              9.7256+-0.6577     ?      9.8959+-1.1125        ? might be 1.0175x slower
   fold-put-structure                                 5.9780+-1.5624     ?      7.5050+-0.6105        ? might be 1.2554x slower
   for-of-iterate-array-entries                       4.6434+-0.1256     ?      4.7114+-0.1685        ? might be 1.0147x slower
   for-of-iterate-array-keys                          3.8145+-0.1370            3.6957+-0.0837          might be 1.0321x faster
   for-of-iterate-array-values                        4.1182+-1.0198            3.9602+-0.3569          might be 1.0399x faster
   fround                                            20.9076+-0.7269     ?     20.9276+-1.0082        ?
   ftl-library-inlining-dataview                     67.2757+-1.4068           64.4880+-1.6152          might be 1.0432x faster
   ftl-library-inlining                              83.2637+-22.2214    ?     88.5769+-24.6823       ? might be 1.0638x slower
   function-dot-apply                                 2.2740+-0.0766     ?      2.2780+-0.1171        ?
   function-test                                      3.5122+-0.1507     ^      2.8512+-0.1140        ^ definitely 1.2318x faster
   function-with-eval                               104.7519+-1.6377     ?    106.6278+-1.7812        ? might be 1.0179x slower
   gcse-poly-get-less-obvious                        18.4354+-0.8965     ?     18.5396+-1.3075        ?
   gcse-poly-get                                     22.2178+-1.7148           21.9518+-1.6693          might be 1.0121x faster
   gcse                                               4.4045+-0.2725            4.3334+-0.0867          might be 1.0164x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7504+-0.0901            2.7400+-0.0470        
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0734+-0.0907     ?      6.1186+-0.1346        ?
   get-by-id-chain-from-try-block                     7.1271+-1.0832            6.7293+-0.2243          might be 1.0591x faster
   get-by-id-check-structure-elimination              5.3867+-0.6494            5.2376+-0.3434          might be 1.0285x faster
   get-by-id-proto-or-self                           17.2213+-0.8901     ?     17.9669+-0.2838        ? might be 1.0433x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.3560+-0.3952            3.1567+-0.0423          might be 1.0631x faster
   get-by-id-self-or-proto                           17.4854+-1.0909           17.3374+-0.4100        
   get-by-val-out-of-bounds                           4.4735+-0.2003            4.3855+-0.0302          might be 1.0201x faster
   get_callee_monomorphic                             2.8568+-0.1891     ?      2.9163+-0.2149        ? might be 1.0209x slower
   get_callee_polymorphic                             3.9430+-0.3174     ?      4.3176+-0.4758        ? might be 1.0950x slower
   getter-no-activation                               5.0694+-0.3387     ?      5.1956+-0.2803        ? might be 1.0249x slower
   getter-richards                                  124.0921+-6.4450     ?    126.1174+-7.5749        ? might be 1.0163x slower
   getter                                             5.8917+-0.5421     ?      6.0798+-0.4546        ? might be 1.0319x slower
   global-var-const-infer-fire-from-opt               0.9921+-0.1527            0.9770+-0.2203          might be 1.0155x faster
   global-var-const-infer                             0.8130+-0.0864            0.7839+-0.0622          might be 1.0372x faster
   HashMap-put-get-iterate-keys                      25.5789+-0.3477     ?     26.7727+-1.2658        ? might be 1.0467x slower
   HashMap-put-get-iterate                           25.3098+-0.4576     ?     26.0723+-0.6055        ? might be 1.0301x slower
   HashMap-string-put-get-iterate                    28.5695+-1.4949     ?     28.5865+-0.7891        ?
   hoist-make-rope                                   11.7022+-0.4921     ?     12.4984+-0.6721        ? might be 1.0680x slower
   hoist-poly-check-structure-effectful-loop   
                                                      5.1181+-0.1908            5.0966+-0.1928        
   hoist-poly-check-structure                         3.6512+-0.0237     ?      3.8150+-0.3772        ? might be 1.0449x slower
   imul-double-only                                   8.6482+-1.0850     ?      8.9990+-0.7118        ? might be 1.0406x slower
   imul-int-only                                     10.0415+-0.6541           10.0367+-0.6289        
   imul-mixed                                         8.3157+-0.0840     ?      8.4320+-0.5623        ? might be 1.0140x slower
   in-four-cases                                     20.7322+-0.3573     ?     20.8867+-0.5254        ?
   in-one-case-false                                 10.1618+-0.4626     ?     10.2876+-0.3736        ? might be 1.0124x slower
   in-one-case-true                                  10.0902+-0.3966     ?     11.0101+-0.5471        ? might be 1.0912x slower
   in-two-cases                                      10.3376+-0.2917     ?     10.6019+-0.6263        ? might be 1.0256x slower
   indexed-properties-in-objects                      3.0717+-0.0474            2.9731+-0.1921          might be 1.0332x faster
   infer-closure-const-then-mov-no-inline             4.7029+-0.4642            4.3742+-0.4450          might be 1.0752x faster
   infer-closure-const-then-mov                      20.0017+-0.4138           19.6655+-0.3005          might be 1.0171x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     14.6551+-1.4390     ?     14.8466+-1.3895        ? might be 1.0131x slower
   infer-closure-const-then-put-to-scope             22.9206+-1.1320     ?     22.9934+-1.0209        ?
   infer-closure-const-then-reenter-no-inline   
                                                     63.2528+-1.6614           62.4329+-1.2799          might be 1.0131x faster
   infer-closure-const-then-reenter                  24.1999+-2.0163           23.3806+-1.6236          might be 1.0350x faster
   infer-constant-global-property                    31.1348+-1.6761           31.0642+-1.6611        
   infer-constant-property                            2.6956+-0.0400     ?      2.7779+-0.1187        ? might be 1.0305x slower
   infer-one-time-closure-ten-vars                   12.6685+-0.9149     ?     12.7612+-0.6671        ?
   infer-one-time-closure-two-vars                   12.0938+-0.3310     ?     13.7252+-1.5483        ? might be 1.1349x slower
   infer-one-time-closure                            12.5203+-1.0953           12.1119+-0.7235          might be 1.0337x faster
   infer-one-time-deep-closure                       22.8330+-1.3150           21.6907+-1.5107          might be 1.0527x faster
   inline-arguments-access                            4.6253+-0.0737            4.5846+-0.0456        
   inline-arguments-aliased-access                    4.6583+-0.0880            4.6340+-0.0737        
   inline-arguments-local-escape                      5.0531+-0.7324            4.7271+-0.1196          might be 1.0690x faster
   inline-get-scoped-var                              5.0445+-0.2921            4.7312+-0.0567          might be 1.0662x faster
   inlined-put-by-id-transition                      10.8984+-0.1732     ?     11.0619+-0.9459        ? might be 1.0150x slower
   int-or-other-abs-then-get-by-val                   4.7897+-0.1498            4.6824+-0.0158          might be 1.0229x faster
   int-or-other-abs-zero-then-get-by-val             17.6657+-1.0983     ?     18.2265+-1.2433        ? might be 1.0317x slower
   int-or-other-add-then-get-by-val                   4.3315+-0.0984            4.2944+-0.0208        
   int-or-other-add                                   5.3500+-0.0517            5.3131+-0.0471        
   int-or-other-div-then-get-by-val                   4.2976+-0.0993     ?      4.3031+-0.0446        ?
   int-or-other-max-then-get-by-val                   4.3969+-0.0209     ?      4.4422+-0.0644        ? might be 1.0103x slower
   int-or-other-min-then-get-by-val                   4.5327+-0.2367            4.4716+-0.0777          might be 1.0137x faster
   int-or-other-mod-then-get-by-val                   4.0958+-0.4345            3.9041+-0.0473          might be 1.0491x faster
   int-or-other-mul-then-get-by-val                   4.0174+-0.0511     ?      4.1244+-0.2395        ? might be 1.0266x slower
   int-or-other-neg-then-get-by-val                   4.5474+-0.1508     ?      4.5542+-0.1323        ?
   int-or-other-neg-zero-then-get-by-val             17.9198+-1.4959           17.4259+-0.2224          might be 1.0283x faster
   int-or-other-sub-then-get-by-val                   4.5802+-0.1427            4.5315+-0.0606          might be 1.0107x faster
   int-or-other-sub                                   3.5310+-0.0359            3.5152+-0.0692        
   int-overflow-local                                 4.5201+-0.0958     ?      4.6803+-0.2747        ? might be 1.0354x slower
   Int16Array-alloc-long-lived                       53.5530+-1.8536     ?     53.7943+-1.0243        ?
   Int16Array-bubble-sort-with-byteLength            20.5167+-0.2541     ?     20.7196+-0.3299        ?
   Int16Array-bubble-sort                            19.7780+-0.5981     ?     20.5556+-1.0508        ? might be 1.0393x slower
   Int16Array-load-int-mul                            1.5744+-0.1786            1.5481+-0.1191          might be 1.0170x faster
   Int16Array-to-Int32Array-set                      51.9712+-1.9310     ?     53.7487+-2.0937        ? might be 1.0342x slower
   Int32Array-alloc-large                            23.5892+-0.6049     ?     24.0756+-0.7261        ? might be 1.0206x slower
   Int32Array-alloc-long-lived                       59.1001+-2.3070           57.6514+-1.2425          might be 1.0251x faster
   Int32Array-alloc                                   3.7969+-0.3637     ?      3.9956+-0.6505        ? might be 1.0523x slower
   Int32Array-Int8Array-view-alloc                    6.8914+-0.2133     !      8.5462+-0.9440        ! definitely 1.2401x slower
   int52-spill                                        6.3459+-0.0383     ?      6.3751+-0.0740        ?
   Int8Array-alloc-long-lived                        47.1632+-1.1694     ?     49.3937+-1.7833        ? might be 1.0473x slower
   Int8Array-load-with-byteLength                     3.3260+-0.0368     ?      3.4867+-0.2747        ? might be 1.0483x slower
   Int8Array-load                                     3.3127+-0.0555     ?      3.3470+-0.0659        ? might be 1.0104x slower
   integer-divide                                    11.0798+-0.1001     ?     11.1480+-0.1118        ?
   integer-modulo                                     2.0716+-0.1404     ?      2.3278+-0.5134        ? might be 1.1237x slower
   is-boolean-fold-tricky                             4.5984+-0.3050            4.3895+-0.0531          might be 1.0476x faster
   is-boolean-fold                                    2.8420+-0.0465     ?      2.9842+-0.3795        ? might be 1.0500x slower
   is-function-fold-tricky-internal-function   
                                                      9.8033+-0.1497     !     12.1025+-0.2236        ! definitely 1.2345x slower
   is-function-fold-tricky                            4.5329+-0.1181     ?      4.6007+-0.1890        ? might be 1.0150x slower
   is-function-fold                                   2.8483+-0.0693     ?      2.8719+-0.0483        ?
   is-number-fold-tricky                              4.4537+-0.1139     ?      4.6582+-0.3317        ? might be 1.0459x slower
   is-number-fold                                     3.0008+-0.3130            2.8259+-0.0198          might be 1.0619x faster
   is-object-or-null-fold-functions                   2.8950+-0.0443     ?      2.9642+-0.1321        ? might be 1.0239x slower
   is-object-or-null-fold-less-tricky                 4.6128+-0.1051            4.4965+-0.0542          might be 1.0259x faster
   is-object-or-null-fold-tricky                     10.0801+-0.1066     ^      6.6509+-0.1253        ^ definitely 1.5156x faster
   is-object-or-null-fold                             2.8765+-0.0765     ?      3.0099+-0.3061        ? might be 1.0464x slower
   is-object-or-null-trickier-function                4.6642+-0.0927            4.6000+-0.0854          might be 1.0139x faster
   is-object-or-null-trickier-internal-function   
                                                     12.6065+-1.0585     ?     12.8415+-0.1160        ? might be 1.0186x slower
   is-object-or-null-tricky-function                  4.6377+-0.0677            4.5503+-0.1046          might be 1.0192x faster
   is-object-or-null-tricky-internal-function   
                                                     10.2681+-0.0696     ^      9.5515+-0.2200        ^ definitely 1.0750x faster
   is-string-fold-tricky                              4.5194+-0.1643            4.4990+-0.1757        
   is-string-fold                                     2.8265+-0.1358     ?      3.1156+-0.4118        ? might be 1.1023x slower
   is-undefined-fold-tricky                           4.1049+-0.4807            3.7006+-0.0498          might be 1.1093x faster
   is-undefined-fold                                  3.0297+-0.2437            2.8525+-0.0862          might be 1.0621x faster
   large-int-captured                                 4.7378+-0.1614            4.6451+-0.1095          might be 1.0200x faster
   large-int-neg                                     16.8859+-0.7019           16.6057+-0.6067          might be 1.0169x faster
   large-int                                         15.0487+-0.3107     ?     15.6858+-1.0861        ? might be 1.0423x slower
   logical-not                                        4.6521+-0.2330            4.4960+-0.0588          might be 1.0347x faster
   lots-of-fields                                    14.3793+-2.7672           13.3656+-0.9201          might be 1.0758x faster
   make-indexed-storage                               3.3182+-0.3585            2.9945+-0.3454          might be 1.1081x faster
   make-rope-cse                                      4.9051+-0.4446     ?      5.0069+-0.6812        ? might be 1.0208x slower
   marsaglia-larger-ints                             37.3949+-2.0185           36.4942+-1.5837          might be 1.0247x faster
   marsaglia-osr-entry                               23.2267+-0.5145           23.0927+-0.8381        
   max-boolean                                        2.6024+-0.3162            2.5220+-0.0478          might be 1.0319x faster
   method-on-number                                  17.1045+-0.4053     ?     17.1810+-0.2897        ?
   min-boolean                                        2.6331+-0.3135            2.4511+-0.0211          might be 1.0742x faster
   minus-boolean-double                               3.1453+-0.0418     ?      3.1932+-0.0714        ? might be 1.0152x slower
   minus-boolean                                      2.3565+-0.1285     ?      2.4644+-0.2962        ? might be 1.0458x slower
   misc-strict-eq                                    37.6771+-0.7570           37.5186+-0.6075        
   mod-boolean-double                                11.0610+-0.3442           11.0224+-0.2565        
   mod-boolean                                        7.8180+-0.0401     ?      7.8572+-0.0743        ?
   mul-boolean-double                                 3.7751+-0.1240            3.6802+-0.0335          might be 1.0258x faster
   mul-boolean                                        2.9045+-0.0905     ?      2.9968+-0.2277        ? might be 1.0318x slower
   neg-boolean                                        3.2088+-0.0983            3.1921+-0.0707        
   negative-zero-divide                               0.3631+-0.0490            0.3583+-0.0093          might be 1.0135x faster
   negative-zero-modulo                               0.3477+-0.0190     ?      0.3611+-0.0190        ? might be 1.0386x slower
   negative-zero-negate                               0.3199+-0.0091     ?      0.3246+-0.0148        ? might be 1.0145x slower
   nested-function-parsing                           39.6425+-1.8376           38.8528+-1.2872          might be 1.0203x faster
   new-array-buffer-dead                            112.5321+-1.3871     ?    113.1478+-3.7468        ?
   new-array-buffer-push                              6.9789+-0.2553            6.9732+-0.2029        
   new-array-dead                                    18.9426+-0.5794     ?     19.0050+-0.4309        ?
   new-array-push                                     3.9288+-0.1702     ?      4.3426+-0.8600        ? might be 1.1053x slower
   no-inline-constructor                            123.5755+-2.3196     !    131.0090+-1.2610        ! definitely 1.0602x slower
   number-test                                        3.2253+-0.4094            3.1568+-0.3421          might be 1.0217x faster
   object-closure-call                                5.6568+-0.0965     ?      5.8025+-0.2526        ? might be 1.0258x slower
   object-test                                        3.3962+-0.5036            3.0461+-0.3710          might be 1.1149x faster
   obvious-sink-pathology-taken                     140.6009+-2.3708     ?    140.6113+-1.8045        ?
   obvious-sink-pathology                           132.5070+-1.5988          131.2062+-2.5259        
   obviously-elidable-new-object                     35.9722+-1.3809           35.9237+-0.7701        
   plus-boolean-arith                                 2.4879+-0.0507     ?      2.5849+-0.2267        ? might be 1.0390x slower
   plus-boolean-double                                3.2158+-0.0608     ?      3.2184+-0.0950        ?
   plus-boolean                                       2.4832+-0.1744            2.3537+-0.0315          might be 1.0550x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.4668+-0.4026            3.2955+-0.0946          might be 1.0520x faster
   poly-chain-access-different-prototypes             2.6695+-0.3418            2.6087+-0.1295          might be 1.0233x faster
   poly-chain-access-simpler                          3.2826+-0.0756            3.2714+-0.0395        
   poly-chain-access                                  2.5348+-0.1265     ?      2.6523+-0.3188        ? might be 1.0463x slower
   poly-stricteq                                     63.0007+-2.1962     ?     63.1503+-1.0247        ?
   polymorphic-array-call                             1.3424+-0.1553            1.2455+-0.0275          might be 1.0778x faster
   polymorphic-get-by-id                              3.0853+-0.0580     ?      3.1412+-0.0589        ? might be 1.0181x slower
   polymorphic-put-by-id                             29.8818+-3.3842           28.9084+-0.9984          might be 1.0337x faster
   polymorphic-structure                             15.2430+-0.9330     ?     15.4735+-1.4465        ? might be 1.0151x slower
   polyvariant-monomorphic-get-by-id                  8.5368+-0.1551     ?      8.7110+-0.4815        ? might be 1.0204x slower
   proto-getter-access                               10.1388+-0.1281     ^      9.8070+-0.1148        ^ definitely 1.0338x faster
   put-by-id-replace-and-transition                   9.3521+-0.3356            9.1877+-0.2692          might be 1.0179x faster
   put-by-id-slightly-polymorphic                     2.8243+-0.0856            2.7491+-0.0569          might be 1.0274x faster
   put-by-id                                         12.6666+-0.3076           12.5829+-0.3329        
   put-by-val-direct                                  0.4559+-0.0334            0.4128+-0.0142          might be 1.1043x faster
   put-by-val-large-index-blank-indexing-type   
                                                      6.1807+-0.6348     ?      6.2935+-0.7867        ? might be 1.0183x slower
   put-by-val-machine-int                             2.8691+-0.1686     ?      2.8910+-0.3267        ?
   rare-osr-exit-on-local                            15.9410+-2.0278           14.8478+-0.2401          might be 1.0736x faster
   register-pressure-from-osr                        21.9861+-1.0871           21.9609+-1.2092        
   setter                                             5.8956+-0.7369            5.7069+-0.6786          might be 1.0331x faster
   simple-activation-demo                            25.5389+-1.1657           24.8955+-0.4875          might be 1.0258x faster
   simple-getter-access                              12.7457+-0.2119     ?     12.7474+-0.2339        ?
   simple-poly-call-nested                            8.2498+-0.1799            8.1348+-0.2712          might be 1.0141x faster
   simple-poly-call                                   1.3024+-0.0496     ?      1.3307+-0.1347        ? might be 1.0217x slower
   sin-boolean                                       22.6650+-0.5475     ?     24.2918+-1.1057        ? might be 1.0718x slower
   singleton-scope                                   68.3917+-1.6811     ?     68.4198+-1.6625        ?
   sink-function                                     12.4308+-0.3752           12.3936+-0.3723        
   sinkable-new-object-dag                           69.2089+-0.5359     ?     70.7182+-1.8237        ? might be 1.0218x slower
   sinkable-new-object-taken                         54.2608+-2.6451           53.5833+-2.9129          might be 1.0126x faster
   sinkable-new-object                               39.6253+-2.2511     ?     40.7083+-1.8308        ? might be 1.0273x slower
   slow-array-profile-convergence                     2.8648+-0.1246     ?      3.0032+-0.3610        ? might be 1.0483x slower
   slow-convergence                                   2.7576+-0.1516            2.7010+-0.1621          might be 1.0210x faster
   sorting-benchmark                                 20.8746+-0.5832     ?     21.7457+-1.3301        ? might be 1.0417x slower
   sparse-conditional                                 1.1337+-0.0562            1.1060+-0.0177          might be 1.0251x faster
   splice-to-remove                                  17.3232+-1.6753           17.0988+-1.4058          might be 1.0131x faster
   string-char-code-at                               18.2097+-1.6253           17.2783+-0.2304          might be 1.0539x faster
   string-concat-object                               2.5251+-0.0701     ?      2.6067+-0.1269        ? might be 1.0323x slower
   string-concat-pair-object                          2.5669+-0.1792     ?      2.7063+-0.2907        ? might be 1.0543x slower
   string-concat-pair-simple                         12.0251+-0.9622     ?     12.4455+-0.9984        ? might be 1.0350x slower
   string-concat-simple                              12.7947+-1.3268           12.3322+-1.3114          might be 1.0375x faster
   string-cons-repeat                                 8.5297+-0.9981     ?      8.7627+-1.2204        ? might be 1.0273x slower
   string-cons-tower                                  8.5420+-0.9764     ?      8.6149+-0.7992        ?
   string-equality                                   18.1510+-1.6135     ?     18.7796+-1.7310        ? might be 1.0346x slower
   string-get-by-val-big-char                         7.1410+-0.0743            7.0996+-0.0400        
   string-get-by-val-out-of-bounds-insane             3.7356+-0.0984            3.7312+-0.4341        
   string-get-by-val-out-of-bounds                    5.2684+-0.2344            5.2015+-0.0823          might be 1.0129x faster
   string-get-by-val                                  3.4442+-0.0414     ^      3.2854+-0.0265        ^ definitely 1.0483x faster
   string-hash                                        2.1818+-0.2442            2.0649+-0.0458          might be 1.0567x faster
   string-long-ident-equality                        15.9530+-1.0263           15.2242+-0.3893          might be 1.0479x faster
   string-out-of-bounds                              15.1478+-0.9240           14.9458+-0.2220          might be 1.0135x faster
   string-repeat-arith                               35.0408+-1.9992           31.4628+-1.6236          might be 1.1137x faster
   string-sub                                        68.5024+-4.6726           67.6466+-3.5300          might be 1.0127x faster
   string-test                                        2.9639+-0.0839            2.9344+-0.0228          might be 1.0101x faster
   string-var-equality                               33.4323+-1.5907           32.7492+-1.2900          might be 1.0209x faster
   structure-hoist-over-transitions                   2.6178+-0.1015     ?      2.7149+-0.1570        ? might be 1.0371x slower
   substring-concat-weird                            40.5321+-1.8374     ?     42.2543+-2.4492        ? might be 1.0425x slower
   substring-concat                                  41.1139+-1.1979     ?     41.8407+-1.9623        ? might be 1.0177x slower
   substring                                         46.6278+-1.8131     ?     47.5215+-2.0886        ? might be 1.0192x slower
   switch-char-constant                               2.6895+-0.0446     ?      2.7041+-0.0602        ?
   switch-char                                        7.1014+-0.9462            6.9963+-0.9547          might be 1.0150x faster
   switch-constant                                    8.4379+-0.2892     ?      8.7167+-0.5159        ? might be 1.0330x slower
   switch-string-basic-big-var                       18.4140+-0.7589           18.3156+-0.6279        
   switch-string-basic-big                           14.6460+-0.3378           14.5602+-0.2081        
   switch-string-basic-var                           14.5818+-0.1523     ?     14.6547+-0.2842        ?
   switch-string-basic                               13.5048+-0.3160     ?     13.6800+-0.2974        ? might be 1.0130x slower
   switch-string-big-length-tower-var                21.1015+-1.7141           20.2431+-0.9330          might be 1.0424x faster
   switch-string-length-tower-var                    15.5881+-0.5938     ?     15.9134+-1.3171        ? might be 1.0209x slower
   switch-string-length-tower                        12.9159+-0.3600     ?     12.9202+-0.1835        ?
   switch-string-short                               12.7500+-0.1721     ?     12.7839+-0.1692        ?
   switch                                            12.7271+-0.1884     ?     12.9423+-0.5514        ? might be 1.0169x slower
   tear-off-arguments-simple                          3.5063+-0.1618     ?      3.5229+-0.1476        ?
   tear-off-arguments                                 4.6535+-0.0421     ?      4.7522+-0.1575        ? might be 1.0212x slower
   temporal-structure                                12.2433+-0.1222     ?     12.5517+-0.3537        ? might be 1.0252x slower
   to-int32-boolean                                  13.8214+-0.2588     ?     14.0861+-0.9323        ? might be 1.0192x slower
   try-catch-get-by-val-cloned-arguments             15.3340+-1.5564           14.6546+-0.5055          might be 1.0464x faster
   try-catch-get-by-val-direct-arguments              7.1213+-0.9795     ?      7.2033+-1.3605        ? might be 1.0115x slower
   try-catch-get-by-val-scoped-arguments              7.6374+-0.0560     ?      8.3050+-1.0117        ? might be 1.0874x slower
   typed-array-get-set-by-val-profiling              33.6586+-2.4616           32.5028+-1.3606          might be 1.0356x faster
   undefined-property-access                        358.7854+-2.5306          355.1364+-2.9223          might be 1.0103x faster
   undefined-test                                     3.0203+-0.0279     ?      3.1891+-0.2964        ? might be 1.0559x slower
   unprofiled-licm                                   24.3934+-1.6659           22.9065+-0.2706          might be 1.0649x faster
   varargs-call                                      16.2912+-1.0503           15.9132+-0.4635          might be 1.0238x faster
   varargs-construct-inline                          23.6945+-1.6544     ?     23.8232+-1.2817        ?
   varargs-construct                                 31.8429+-0.2191           31.7965+-0.3332        
   varargs-inline                                     9.3855+-0.2674     ?      9.6024+-0.7296        ? might be 1.0231x slower
   varargs-strict-mode                               10.4270+-0.3662     ?     10.4302+-0.3953        ?
   varargs                                           10.3014+-0.1855     ?     10.5271+-0.7686        ? might be 1.0219x slower
   weird-inlining-const-prop                          2.4225+-0.1477            2.2753+-0.1046          might be 1.0647x faster

   &lt;geometric&gt;                                        8.6178+-0.0480            8.6119+-0.0158          might be 1.0007x faster

                                                        TipOfTree                 FastTypeOf                                    
AsmBench:
   bigfib.cpp                                       496.1573+-2.2942          495.7375+-5.2356        
   cray.c                                           475.4874+-133.6488        423.3683+-3.3488          might be 1.1231x faster
   dry.c                                            483.9148+-7.3464     ?    488.8380+-7.3494        ? might be 1.0102x slower
   FloatMM.c                                        728.3402+-6.7959          727.6390+-6.1537        
   gcc-loops.cpp                                   4276.1742+-5.9658     ?   4276.9834+-17.9059       ?
   n-body.c                                         983.0286+-5.7620          979.4143+-0.9579        
   Quicksort.c                                      422.4576+-4.9618          419.7352+-3.0048        
   stepanov_container.cpp                          3618.1105+-23.2676        3604.4108+-15.0399       
   Towers.c                                         261.8316+-3.7934          260.4954+-0.4316        

   &lt;geometric&gt;                                      801.7464+-21.4629         792.4357+-1.2606          might be 1.0117x faster

                                                        TipOfTree                 FastTypeOf                                    
CompressionBench:
   huffman                                          371.4502+-2.3921     ^    361.1787+-3.4249        ^ definitely 1.0284x faster
   arithmetic-simple                                392.5138+-4.3091     ?    400.6689+-6.6296        ? might be 1.0208x slower
   arithmetic-precise                               298.2770+-2.5733          297.6355+-4.9673        
   arithmetic-complex-precise                       299.6568+-2.7860     ?    300.2652+-3.0324        ?
   arithmetic-precise-order-0                       427.9771+-7.5552          423.1330+-6.0784          might be 1.0114x faster
   arithmetic-precise-order-1                       328.3070+-3.4293     ?    329.2343+-4.4209        ?
   arithmetic-precise-order-2                       364.0974+-3.1693     ?    392.7399+-83.4007       ? might be 1.0787x slower
   arithmetic-simple-order-1                        422.6135+-5.6010          421.9578+-3.3853        
   arithmetic-simple-order-2                        472.9729+-5.0464          471.9146+-9.5995        
   lz-string                                        320.1600+-1.7817     ?    323.8259+-5.8925        ? might be 1.0115x slower

   &lt;geometric&gt;                                      365.5865+-1.4104     ?    367.5551+-6.4319        ? might be 1.0054x slower

                                                        TipOfTree                 FastTypeOf                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                   64.1345+-0.3756           63.9887+-0.2779          might be 1.0023x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091123</commentid>
    <comment_count>12</comment_count>
      <attachid>252243</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-02 12:19:58 -0700</bug_when>
    <thetext>Created attachment 252243
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091126</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-02 12:22:25 -0700</bug_when>
    <thetext>Attachment 252243 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4733:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7421:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4912:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4917:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 22 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>1091148</commentid>
    <comment_count>14</comment_count>
      <attachid>252243</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-05-02 15:21:32 -0700</bug_when>
    <thetext>Comment on attachment 252243
the patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        Adds comprehensive support for fast typeof to the optimizing JITs. Calls into the runtime
&gt; +        are only used for very exotic objects - they must have either the MasqueradesAsUndefined or
&gt; +        TypeOfShouldCallGetCallData type flags set. All other cases are handled inline.

When do we need to use this flag? Seems weird.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091160</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-02 17:13:12 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 252243 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=252243&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:10
&gt; &gt; +        Adds comprehensive support for fast typeof to the optimizing JITs. Calls into the runtime
&gt; &gt; +        are only used for very exotic objects - they must have either the MasqueradesAsUndefined or
&gt; &gt; +        TypeOfShouldCallGetCallData type flags set. All other cases are handled inline.
&gt; 
&gt; When do we need to use this flag? Seems weird.

TypeOfShouldCallGetCallData means that there is a getCallData() override. Currently if there is such an override then we need to call it since it may still return CallTypeNone. The flag allows us to avoid the call in cases where getCallData() is not overridden.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091161</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-02 17:17:23 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/183724</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091672</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-05-04 20:17:02 -0700</bug_when>
    <thetext>Looks like this was a 2% improvement on Speedometer.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252073</attachid>
            <date>2015-04-30 11:36:30 -0700</date>
            <delta_ts>2015-04-30 17:31:21 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13610</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTgzNjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDE0ICszNDYsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFR5cGVP
ZjogewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJp
bmcoKSkKLSAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNl
bGwoKSkKLSAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBDb21wYXJlRXFDb25zdGFudDogewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTEyNDEsNiArMTIzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgICAgICBj
YXNlIFR5cGVPZjoKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTgzNjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE3NCw1NSArNDE3NCw0
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBU
eXBlT2Y6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQx
KCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7
CisgICAgICAgIAorICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cExpc3QgZG9uZUp1bXBzOwotCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIAot
ICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwg
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UgfHwgbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IFN0cmluZ1VzZSk7Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwotICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFVudHlwZWRVc2UpCi0gICAgICAgICAgICBERkdf
VFlQRV9DSEVDSyhKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWND
ZWxsLCBpc05vdENlbGwpOwotCi0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU9iamVjdCgpIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2Up
IHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0cmluZyA9IGJyYW5jaE5vdFN0
cmluZyh2YWx1ZUdQUik7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFN0cmluZ1VzZSkKLSAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291
cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG5vdFN0cmluZyk7Ci0g
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJp
bmdzLnN0cmluZ1N0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgIT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICAgICAgbm90U3RyaW5nLmxpbmsoJm1f
aml0KTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblR5cGVPZiwgcmVz
dWx0R1BSLCB2YWx1ZUdQUik7Ci0gICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwotICAg
ICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7Ci0gICAg
ICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgbm90TnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCB2
YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3MubnVtYmVyU3Ry
aW5nKCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwotICAgICAgICAgICAgbm90TnVtYmVyLmxpbmsoJm1faml0KTsKLQotICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoNjQoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NChWYWx1
ZVVuZGVmaW5lZCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0
LnZtKCktPnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAg
ICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBub3RV
bmRlZmluZWQubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3ROdWxsID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKTsKLSAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5n
KCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwotICAgICAgICAgICAgbm90TnVsbC5saW5rKCZtX2ppdCk7CisgICAgICAgIC8vIEltcGxl
bWVudHMgdGhlIGZvbGxvd2luZyBicmFuY2hpbmcgc3RydWN0dXJlOgorICAgICAgICAvLworICAg
ICAgICAvLyBpZiAoaXMgY2VsbCkgeworICAgICAgICAvLyAgICAgaWYgKGlzIG9iamVjdCkgewor
ICAgICAgICAvLyAgICAgICAgIGlmIChpcyBmdW5jdGlvbikgeworICAgICAgICAvLyAgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb247CisgICAgICAgIC8vICAgICAgICAgfSBlbHNlIGlmIChkb2Vz
bid0IGhhdmUgY2FsbCB0cmFwKSB7CisgICAgICAgIC8vICAgICAgICAgICAgIGlmIChtYXNxdWVy
YWRlcyBhcyB1bmRlZmluZWQpIHsKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiB1
bmRlZmluZWQ7CisgICAgICAgIC8vICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vICAg
ICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0CisgICAgICAgIC8vICAgICAgICAgICAgIH0KKyAg
ICAgICAgLy8gICAgICAgICB9IGVsc2UgeworICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4g
c2xvd1BhdGgoKTsKKyAgICAgICAgLy8gICAgICAgICB9CisgICAgICAgIC8vICAgICB9IGVsc2Ug
aWYgKGlzIHN0cmluZykgeworICAgICAgICAvLyAgICAgICAgIHJldHVybiBzdHJpbmcKKyAgICAg
ICAgLy8gICAgIH0gZWxzZSB7CisgICAgICAgIC8vICAgICAgICAgcmV0dXJuIHN5bWJvbAorICAg
ICAgICAvLyAgICAgfQorICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIG51bWJlcikgeworICAgICAg
ICAvLyAgICAgcmV0dXJuIG51bWJlcgorICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIG51bGwpIHsK
KyAgICAgICAgLy8gICAgIHJldHVybiBvYmplY3QKKyAgICAgICAgLy8gfSBlbHNlIGlmIChpcyBi
b29sZWFuKSB7CisgICAgICAgIC8vICAgICByZXR1cm4gYm9vbGVhbgorICAgICAgICAvLyB9IGVs
c2UgeworICAgICAgICAvLyAgICAgcmV0dXJuIHVuZGVmaW5lZAorICAgICAgICAvLyB9CisgICAg
ICAgIAorICAgICAgICAKIAotICAgICAgICAgICAgLy8gT25seSBib29sZWFuIGxlZnQKLSAgICAg
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mu
Ym9vbGVhblN0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgfQotICAgICAgICBkb25lSnVt
cHMubGluaygmbV9qaXQpOwogICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTgzNjMyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJUeXBlb2ZUeXBlLmgiCiAjaW5jbHVkZSAiVk0u
aCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03NzgsNiArNzc5LDU0IEBAIHB1YmxpYzoKICAgICAg
ICAgdWludDhfdCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwpICsg
SlNDZWxsOjpnY0RhdGFPZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKGFkZHJl
c3MpKTsKICAgICB9CisgICAgCisgICAgLy8gRW1pdHMgdGhlIGJyYW5jaCBzdHJ1Y3R1cmUgZm9y
IHR5cGVvZi4gVGhlIGNvZGUgZW1pdHRlZCBieSB0aGlzIGRvZXNuJ3QgZmFsbCB0aHJvdWdoLiBU
aGUKKyAgICAvLyBmdW5jdG9yIGlzIGNhbGxlZCBhdCB0aG9zZSBwb2ludHMgd2hlcmUgd2UgaGF2
ZSBwaW5wb2ludGVkIGEgdHlwZS4gT25lIHdheSB0byB1c2UgdGhpcyBpcyB0bworICAgIC8vIGhh
dmUgdGhlIGZ1bmN0b3IgZW1pdCB0aGUgY29kZSB0byBwdXQgdGhlIHR5cGUgc3RyaW5nIGludG8g
YW4gYXBwcm9wcmlhdGUgcmVnaXN0ZXIgYW5kIHRobgorICAgIC8vIGp1bXAgb3V0LiBBIHNlY29u
ZGFyeSBmdW5jdG9yIGlzIHVzZWQgZm9yIHRoZSBjYWxsIHRyYXAgc2xvdyBjYXNlLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHR5cGVuYW1lIENhbGxUcmFwU2xvd1BhdGhGdW5jdG9y
PgorICAgIHZvaWQgZW1pdFR5cGVPZigKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVn
IHRlbXBHUFIsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCisgICAgICAgIGJvb2wgZGlk
U2V0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IsCisgICAgICAgIGNvbnN0IENhbGxUcmFwU2xvd1BhdGhGdW5jdG9yJiBjYWxsVHJhcFNsb3dQ
YXRoRnVuY3RvcikKKyAgICB7CisgICAgICAgIC8vIEltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBi
cmFuY2hpbmcgc3RydWN0dXJlOgorICAgICAgICAvLworICAgICAgICAvLyBpZiAoaXMgY2VsbCkg
eworICAgICAgICAvLyAgICAgaWYgKGlzIG9iamVjdCkgeworICAgICAgICAvLyAgICAgICAgIGlm
IChpcyBmdW5jdGlvbikgeworICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247
CisgICAgICAgIC8vICAgICAgICAgfSBlbHNlIGlmIChkb2Vzbid0IGhhdmUgY2FsbCB0cmFwKSB7
CisgICAgICAgIC8vICAgICAgICAgICAgIGlmIChtYXNxdWVyYWRlcyBhcyB1bmRlZmluZWQpIHsK
KyAgICAgICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIC8v
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4g
b2JqZWN0CisgICAgICAgIC8vICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gICAgICAgICB9IGVs
c2UgeworICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gc2xvd1BhdGgoKTsKKyAgICAgICAg
Ly8gICAgICAgICB9CisgICAgICAgIC8vICAgICB9IGVsc2UgaWYgKGlzIHN0cmluZykgeworICAg
ICAgICAvLyAgICAgICAgIHJldHVybiBzdHJpbmcKKyAgICAgICAgLy8gICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vICAgICAgICAgcmV0dXJuIHN5bWJvbAorICAgICAgICAvLyAgICAgfQorICAgICAg
ICAvLyB9IGVsc2UgaWYgKGlzIG51bWJlcikgeworICAgICAgICAvLyAgICAgcmV0dXJuIG51bWJl
cgorICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIG51bGwpIHsKKyAgICAgICAgLy8gICAgIHJldHVy
biBvYmplY3QKKyAgICAgICAgLy8gfSBlbHNlIGlmIChpcyBib29sZWFuKSB7CisgICAgICAgIC8v
ICAgICByZXR1cm4gYm9vbGVhbgorICAgICAgICAvLyB9IGVsc2UgeworICAgICAgICAvLyAgICAg
cmV0dXJuIHVuZGVmaW5lZAorICAgICAgICAvLyB9CisgICAgICAgIAorICAgICAgICBKdW1wIG5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVncyk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcg
Y2VsbEdQUiA9IHJlZ3MucGF5bG9hZEdQUigpOworICAgICAgICAKKyAgICAgICAgCisgICAgICAg
IG5vdENlbGwubGluayh0aGlzKTsKKyAgICB9CiAKICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJsb2NrKik7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkocmV2aXNpb24g
MTgzNjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU21hbGxT
dHJpbmdzX2gKICNkZWZpbmUgU21hbGxTdHJpbmdzX2gKIAorI2luY2x1ZGUgIlR5cGVvZlR5cGUu
aCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KIApAQCAtODUsNiArODYsMjkgQEAgcHVibGljOgogICAgIH0KICAgICBKU0NfQ09NTU9OX1NU
UklOR1NfRUFDSF9OQU1FKEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKQog
I3VuZGVmIEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OCisgICAgCisgICAg
SlNTdHJpbmcqIHR5cGVTdHJpbmcoVHlwZW9mVHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZW9mVHlwZTo6VW5kZWZpbmVkOgor
ICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFN0cmluZygpOworICAgICAgICBjYXNlIFR5cGVv
ZlR5cGU6OkJvb2xlYW46CisgICAgICAgICAgICByZXR1cm4gYm9vbGVhblN0cmluZygpOworICAg
ICAgICBjYXNlIFR5cGVvZlR5cGU6Ok51bWJlcjoKKyAgICAgICAgICAgIHJldHVybiBudW1iZXJT
dHJpbmcoKTsKKyAgICAgICAgY2FzZSBUeXBlb2ZUeXBlOjpTdHJpbmc6CisgICAgICAgICAgICBy
ZXR1cm4gc3RyaW5nU3RyaW5nKCk7CisgICAgICAgIGNhc2UgVHlwZW9mVHlwZTo6U3ltYm9sOgor
ICAgICAgICAgICAgcmV0dXJuIHN5bWJvbFN0cmluZygpOworICAgICAgICBjYXNlIFR5cGVvZlR5
cGU6Ok9iamVjdDoKKyAgICAgICAgICAgIHJldHVybiBvYmplY3RTdHJpbmcoKTsKKyAgICAgICAg
Y2FzZSBUeXBlb2ZUeXBlOjpGdW5jdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvblN0
cmluZygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAKICAgICBKU1N0cmlu
ZyogbnVsbE9iamVjdFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fbnVsbE9iamVjdFN0cmluZzsg
fQogICAgIEpTU3RyaW5nKiB1bmRlZmluZWRPYmplY3RTdHJpbmcoKSBjb25zdCB7IHJldHVybiBt
X3VuZGVmaW5lZE9iamVjdFN0cmluZzsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZW9mVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZW9mVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlb2ZUeXBlLmgiCisKK25hbWVzcGFjZSBXVEYg
eworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgVHlwZW9mVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgVHlwZW9mVHlwZTo6VW5kZWZpbmVkOgorICAgICAgICBvdXQucHJpbnQoInVuZGVmaW5lZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlb2ZUeXBlOjpCb29sZWFuOgorICAgICAg
ICBvdXQucHJpbnQoImJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9m
VHlwZTo6TnVtYmVyOgorICAgICAgICBvdXQucHJpbnQoIm51bWJlciIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBUeXBlb2ZUeXBlOjpTdHJpbmc6CisgICAgICAgIG91dC5wcmludCgic3Ry
aW5nIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVvZlR5cGU6OlN5bWJvbDoKKyAg
ICAgICAgb3V0LnByaW50KCJzeW1ib2wiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlw
ZW9mVHlwZTo6T2JqZWN0OgorICAgICAgICBvdXQucHJpbnQoIm9iamVjdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBUeXBlb2ZUeXBlOjpGdW5jdGlvbjoKKyAgICAgICAgb3V0LnByaW50
KCJmdW5jdGlvbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZW9mVHlwZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZW9mVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBUeXBlb2ZUeXBlX2gKKyNkZWZpbmUgVHlwZW9mVHlwZV9oCisK
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0g
Y2xhc3MgVHlwZW9mVHlwZSB7CisgICAgVW5kZWZpbmVkLAorICAgIEJvb2xlYW4sCisgICAgTnVt
YmVyLAorICAgIFN0cmluZywKKyAgICBTeW1ib2wsCisgICAgT2JqZWN0LAorICAgIEZ1bmN0aW9u
ICAgIAorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpUeXBlb2ZUeXBlKTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBUeXBlb2ZUeXBlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252120</attachid>
            <date>2015-04-30 17:31:21 -0700</date>
            <delta_ts>2015-05-01 13:15:29 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15393</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTgzNjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDE0ICszNDYsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFR5cGVP
ZjogewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJp
bmcoKSkKLSAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNl
bGwoKSkKLSAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBDb21wYXJlRXFDb25zdGFudDogewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTEyNDEsNiArMTIzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgICAgICBj
YXNlIFR5cGVPZjoKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTgzNjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE3NCw1NSArNDE3NCw0
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBU
eXBlT2Y6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQx
KCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7
CisgICAgICAgIAorICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cExpc3QgZG9uZUp1bXBzOwotCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIAot
ICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwg
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UgfHwgbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IFN0cmluZ1VzZSk7Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RD
ZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7Ci0gICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkKLSAgICAgICAg
ICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVTb3VyY2UodmFsdWVHUFIpLCBub2RlLT5jaGlsZDEo
KSwgU3BlY0NlbGwsIGlzTm90Q2VsbCk7Ci0KLSAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+
c2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0
cmluZ1VzZSkgewotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90U3RyaW5nID0gbV9q
aXQuYnJhbmNoSWZOb3RTdHJpbmcodmFsdWVHUFIpOwotICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpCi0gICAgICAgICAgICAgICAgREZHX1RZUEVf
Q0hFQ0soSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5n
LCBub3RTdHJpbmcpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0
LnZtKCktPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAg
ICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgIG5v
dFN0cmluZy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwotICAgICAgICAgICAgICAgIGRvbmVK
dW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHlwZU9mLCByZXN1bHRHUFIs
IHZhbHVlR1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50
eXBlZFVzZSkgewotICAgICAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKLSAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRD
b21waWxlcjo6WmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxT
dHJpbmdzLm51bWJlclN0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1w
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIG5vdE51bWJlci5saW5rKCZtX2pp
dCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFVuZGVmaW5lZCA9IG1faml0
LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWVHUFIsIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3MudW5kZWZpbmVkU3RyaW5nKCkpLCBy
ZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwot
ICAgICAgICAgICAgbm90VW5kZWZpbmVkLmxpbmsoJm1faml0KTsKLQotICAgICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90TnVsbCA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpOb3RF
cXVhbCwgdmFsdWVHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSk7Ci0g
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJp
bmdzLm9iamVjdFN0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIG5vdE51bGwubGluaygmbV9qaXQpOwor
ICAgICAgICAvLyBJbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgYnJhbmNoaW5nIHN0cnVjdHVyZToK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gaWYgKGlzIGNlbGwpIHsKKyAgICAgICAgLy8gICAgIGlm
IChpcyBvYmplY3QpIHsKKyAgICAgICAgLy8gICAgICAgICBpZiAoaXMgZnVuY3Rpb24pIHsKKyAg
ICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOworICAgICAgICAvLyAgICAgICAg
IH0gZWxzZSBpZiAoZG9lc24ndCBoYXZlIGNhbGwgdHJhcCkgeworICAgICAgICAvLyAgICAgICAg
ICAgICBpZiAobWFzcXVlcmFkZXMgYXMgdW5kZWZpbmVkKSB7CisgICAgICAgIC8vICAgICAgICAg
ICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICAvLyAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdAorICAgICAgICAvLyAg
ICAgICAgICAgICB9CisgICAgICAgIC8vICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gICAg
ICAgICAgICAgcmV0dXJuIHNsb3dQYXRoKCk7CisgICAgICAgIC8vICAgICAgICAgfQorICAgICAg
ICAvLyAgICAgfSBlbHNlIGlmIChpcyBzdHJpbmcpIHsKKyAgICAgICAgLy8gICAgICAgICByZXR1
cm4gc3RyaW5nCisgICAgICAgIC8vICAgICB9IGVsc2UgeworICAgICAgICAvLyAgICAgICAgIHJl
dHVybiBzeW1ib2wKKyAgICAgICAgLy8gICAgIH0KKyAgICAgICAgLy8gfSBlbHNlIGlmIChpcyBu
dW1iZXIpIHsKKyAgICAgICAgLy8gICAgIHJldHVybiBudW1iZXIKKyAgICAgICAgLy8gfSBlbHNl
IGlmIChpcyBudWxsKSB7CisgICAgICAgIC8vICAgICByZXR1cm4gb2JqZWN0CisgICAgICAgIC8v
IH0gZWxzZSBpZiAoaXMgYm9vbGVhbikgeworICAgICAgICAvLyAgICAgcmV0dXJuIGJvb2xlYW4K
KyAgICAgICAgLy8gfSBlbHNlIHsKKyAgICAgICAgLy8gICAgIHJldHVybiB1bmRlZmluZWQKKyAg
ICAgICAgLy8gfQorICAgICAgICAKKyAgICAgICAgCiAKLSAgICAgICAgICAgIC8vIE9ubHkgYm9v
bGVhbiBsZWZ0Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIH0K
LSAgICAgICAgZG9uZUp1bXBzLmxpbmsoJm1faml0KTsKICAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4MzY1NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiSklUQ29k
ZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiVHlwZW9mVHlwZS5o
IgogI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDI2LDYgKzQyNywzMCBA
QCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSB0ZW1w
R1BSIGlzIG5vdCB1c2VkIGluIDY0LWJpdCBtb2RlLgorICAgIEp1bXAgYnJhbmNoSWZOdW1iZXIo
SlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIpCisgICAgeworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIFVOVVNFRF9QQVJBTSh0ZW1wR1BSKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aFRlc3Q2NChOb3RaZXJvLCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOworI2Vsc2UKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdzLnRhZ0dQUigp
LCB0ZW1wR1BSKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEJlbG93LCB0ZW1wR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOworI2VuZGlmCisgICAgfQorICAgIAor
ICAgIC8vIE5vdGUgdGhhdCB0aGUgdGVtcEdQUiBpcyBub3QgdXNlZCBpbiA2NC1iaXQgbW9kZS4K
KyAgICBKdW1wIGJyYW5jaElmTm90TnVtYmVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1w
R1BSKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBVTlVTRURfUEFSQU0odGVt
cEdQUik7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoWmVybywgcmVncy5ncHIoKSwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyNlbHNlCisgICAgICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgcmVncy50YWdHUFIoKSwgdGVtcEdQUik7CisgICAgICAgIHJldHVybiBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcgKyAxKSk7CisjZW5kaWYKKyAgICB9CisgICAgCiAgICAgSnVtcCBicmFuY2hJZk9iamVjdChH
UFJSZWcgY2VsbEdQUikKICAgICB7CiAgICAgICAgIHJldHVybiBicmFuY2g4KApAQCAtODQzLDYg
Kzg2OCw3NSBAQCBwdWJsaWM6CiAgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihjZWxsKSArIEpTQ2VsbDo6Z2NEYXRhT2Zmc2V0KCk7CiAgICAgICAg
IHJldHVybiBicmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJs
ZXI6OkFic29sdXRlQWRkcmVzcyhhZGRyZXNzKSk7CiAgICAgfQorICAgIAorICAgIC8vIEVtaXRz
IHRoZSBicmFuY2ggc3RydWN0dXJlIGZvciB0eXBlb2YuIFRoZSBjb2RlIGVtaXR0ZWQgYnkgdGhp
cyBkb2Vzbid0IGZhbGwgdGhyb3VnaC4gVGhlCisgICAgLy8gZnVuY3RvciBpcyBjYWxsZWQgYXQg
dGhvc2UgcG9pbnRzIHdoZXJlIHdlIGhhdmUgcGlucG9pbnRlZCBhIHR5cGUuIE9uZSB3YXkgdG8g
dXNlIHRoaXMgaXMgdG8KKyAgICAvLyBoYXZlIHRoZSBmdW5jdG9yIGVtaXQgdGhlIGNvZGUgdG8g
cHV0IHRoZSB0eXBlIHN0cmluZyBpbnRvIGFuIGFwcHJvcHJpYXRlIHJlZ2lzdGVyIGFuZCB0aGVu
CisgICAgLy8ganVtcCBvdXQuIEEgc2Vjb25kYXJ5IGZ1bmN0b3IgaXMgdXNlZCBmb3IgdGhlIGNh
bGwgdHJhcCBhbmQgbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkIHNsb3cKKyAgICAvLyBjYXNlLiBJ
dCBpcyBwYXNzZWQgdGhlIHVubGlua2VkIGp1bXAgdG8gdGhlIHNsb3cgY2FzZS4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZSBDYWxsVHJhcFNsb3dQYXRoRnVuY3Rvcj4K
KyAgICB2b2lkIGVtaXRUeXBlT2YoCisgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0
ZW1wR1BSLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAorICAgICAgICBib29sIGRpZFNl
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9y
LAorICAgICAgICBjb25zdCBDYWxsVHJhcFNsb3dQYXRoRnVuY3RvciYgY2FsbFRyYXBTbG93UGF0
aEZ1bmN0b3IpCisgICAgeworICAgICAgICAvLyBJbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgYnJh
bmNoaW5nIHN0cnVjdHVyZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaWYgKGlzIGNlbGwpIHsK
KyAgICAgICAgLy8gICAgIGlmIChpcyBvYmplY3QpIHsKKyAgICAgICAgLy8gICAgICAgICBpZiAo
aXMgZnVuY3Rpb24pIHsKKyAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwor
ICAgICAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAoZG9lc24ndCBoYXZlIGNhbGwgdHJhcCBhbmQg
ZG9lc24ndCBtYXNxdWVyYWRlIGFzIHVuZGVmaW5lZCkgeworICAgICAgICAvLyAgICAgICAgICAg
ICByZXR1cm4gb2JqZWN0CisgICAgICAgIC8vICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
ICAgICAgICAgICAgcmV0dXJuIHNsb3dQYXRoKCk7CisgICAgICAgIC8vICAgICAgICAgfQorICAg
ICAgICAvLyAgICAgfSBlbHNlIGlmIChpcyBzdHJpbmcpIHsKKyAgICAgICAgLy8gICAgICAgICBy
ZXR1cm4gc3RyaW5nCisgICAgICAgIC8vICAgICB9IGVsc2UgeworICAgICAgICAvLyAgICAgICAg
IHJldHVybiBzeW1ib2wKKyAgICAgICAgLy8gICAgIH0KKyAgICAgICAgLy8gfSBlbHNlIGlmIChp
cyBudW1iZXIpIHsKKyAgICAgICAgLy8gICAgIHJldHVybiBudW1iZXIKKyAgICAgICAgLy8gfSBl
bHNlIGlmIChpcyBudWxsKSB7CisgICAgICAgIC8vICAgICByZXR1cm4gb2JqZWN0CisgICAgICAg
IC8vIH0gZWxzZSBpZiAoaXMgYm9vbGVhbikgeworICAgICAgICAvLyAgICAgcmV0dXJuIGJvb2xl
YW4KKyAgICAgICAgLy8gfSBlbHNlIHsKKyAgICAgICAgLy8gICAgIHJldHVybiB1bmRlZmluZWQK
KyAgICAgICAgLy8gfQorICAgICAgICAKKyAgICAgICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ3MpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGNlbGxHUFIgPSByZWdzLnBh
eWxvYWRHUFIoKTsKKyAgICAgICAgSnVtcCBub3RPYmplY3QgPSBicmFuY2hJZk5vdE9iamVjdChj
ZWxsR1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgbm90RnVuY3Rpb24gPSBicmFuY2hJZk5v
dEZ1bmN0aW9uKGNlbGxHUFIpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OkZ1bmN0aW9u
KTsKKyAgICAgICAgCisgICAgICAgIG5vdEZ1bmN0aW9uLmxpbmsodGhpcyk7CisgICAgICAgIGNh
bGxUcmFwU2xvd1BhdGhGdW5jdG9yKAorICAgICAgICAgICAgYnJhbmNoOCgKKyAgICAgICAgICAg
ICAgICBOb25aZXJvLAorICAgICAgICAgICAgICAgIEFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhKSkpOworICAg
ICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok9iamVjdCk7CisgICAgICAgIAorICAgICAgICBub3RP
YmplY3QubGluayh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgbm90U3RyaW5nID0gYnJh
bmNoSWZOb3RTdHJpbmcoY2VsbEdQUik7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6U3Ry
aW5nKTsKKyAgICAgICAgbm90U3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgIGZ1bmN0b3IoVHlw
ZW9mVHlwZTo6U3ltYm9sKTsKKyAgICAgICAgCisgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsK
KworICAgICAgICBKdW1wIG5vdE51bWJlciA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ3MsIHRlbXBH
UFIpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok51bWJlcik7CisgICAgICAgIG5vdE51
bWJlci5saW5rKHRoaXMpOworICAgICAgICAKKyAgICAgICAgCisgICAgfQogCiAgICAgVmVjdG9y
PEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayop
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJp
bmdzLmgJKHJldmlzaW9uIDE4MzY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NtYWxsU3RyaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaWZuZGVmIFNtYWxsU3RyaW5nc19oCiAjZGVmaW5lIFNtYWxsU3RyaW5nc19oCiAKKyNpbmNs
dWRlICJUeXBlb2ZUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTg1LDYgKzg2LDI5IEBAIHB1YmxpYzoKICAgICB9CiAg
ICAgSlNDX0NPTU1PTl9TVFJJTkdTX0VBQ0hfTkFNRShKU0NfQ09NTU9OX1NUUklOR1NfQUNDRVNT
T1JfREVGSU5JVElPTikKICN1bmRlZiBKU0NfQ09NTU9OX1NUUklOR1NfQUNDRVNTT1JfREVGSU5J
VElPTgorICAgIAorICAgIEpTU3RyaW5nKiB0eXBlU3RyaW5nKFR5cGVvZlR5cGUgdHlwZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGVvZlR5
cGU6OlVuZGVmaW5lZDoKKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRTdHJpbmcoKTsKKyAg
ICAgICAgY2FzZSBUeXBlb2ZUeXBlOjpCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIGJvb2xl
YW5TdHJpbmcoKTsKKyAgICAgICAgY2FzZSBUeXBlb2ZUeXBlOjpOdW1iZXI6CisgICAgICAgICAg
ICByZXR1cm4gbnVtYmVyU3RyaW5nKCk7CisgICAgICAgIGNhc2UgVHlwZW9mVHlwZTo6U3RyaW5n
OgorICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1N0cmluZygpOworICAgICAgICBjYXNlIFR5cGVv
ZlR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiBzeW1ib2xTdHJpbmcoKTsKKyAgICAg
ICAgY2FzZSBUeXBlb2ZUeXBlOjpPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0U3Ry
aW5nKCk7CisgICAgICAgIGNhc2UgVHlwZW9mVHlwZTo6RnVuY3Rpb246CisgICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb25TdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQogCiAgICAgSlNTdHJpbmcqIG51bGxPYmplY3RTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX251
bGxPYmplY3RTdHJpbmc7IH0KICAgICBKU1N0cmluZyogdW5kZWZpbmVkT2JqZWN0U3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV91bmRlZmluZWRPYmplY3RTdHJpbmc7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZW9mVHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHlwZW9mVHlwZS5oIgor
CituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGVvZlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIFR5cGVvZlR5cGU6OlVuZGVmaW5lZDoKKyAgICAgICAgb3V0LnBy
aW50KCJ1bmRlZmluZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9mVHlwZTo6
Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJib29sZWFuIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFR5cGVvZlR5cGU6Ok51bWJlcjoKKyAgICAgICAgb3V0LnByaW50KCJudW1iZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9mVHlwZTo6U3RyaW5nOgorICAgICAg
ICBvdXQucHJpbnQoInN0cmluZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlb2ZU
eXBlOjpTeW1ib2w6CisgICAgICAgIG91dC5wcmludCgic3ltYm9sIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFR5cGVvZlR5cGU6Ok9iamVjdDoKKyAgICAgICAgb3V0LnByaW50KCJvYmpl
Y3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9mVHlwZTo6RnVuY3Rpb246Cisg
ICAgICAgIG91dC5wcmludCgiZnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZW9mVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZW9mVHlwZV9oCisjZGVmaW5l
IFR5cGVvZlR5cGVfaAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitlbnVtIGNsYXNzIFR5cGVvZlR5cGUgeworICAgIFVuZGVmaW5lZCwKKyAgICBC
b29sZWFuLAorICAgIE51bWJlciwKKyAgICBTdHJpbmcsCisgICAgU3ltYm9sLAorICAgIE9iamVj
dCwKKyAgICBGdW5jdGlvbiAgICAKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3Bh
Y2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6VHlw
ZW9mVHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVHlwZW9mVHlwZV9o
CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252168</attachid>
            <date>2015-05-01 13:15:29 -0700</date>
            <delta_ts>2015-05-01 19:56:52 -0700</delta_ts>
            <desc>getting closer</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32683</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTgzNjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDE0ICszNDYsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFR5cGVP
ZjogewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJp
bmcoKSkKLSAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNl
bGwoKSkKLSAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBDb21wYXJlRXFDb25zdGFudDogewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTEyNDEsNiArMTIzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgICAgICBj
YXNlIFR5cGVPZjoKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTgzNjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYwLDIxICs4NjAsNjQgQEAgSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXNpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0T3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgdmFsdWUpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmpl
Y3RJc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogb2JqZWN0KQogewotICAgIHJldHVybiBqc0lzT2JqZWN0VHlwZU9yTnVsbChleGVj
LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEFTU0VSVChq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0KSk7CisgICAgCisgICAgaWYgKG9iamVjdC0+
c3RydWN0dXJlKHZtKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChnbG9iYWxPYmplY3QpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdC0+dHlwZSgpID09IEpTRnVuY3Rpb25U
eXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdC0+aW5saW5lVHlwZUZs
YWdzKCkgJiBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpIHsKKyAgICAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CisgICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERh
dGEob2JqZWN0LCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKIHsKLSAgICBy
ZXR1cm4ganNJc0Z1bmN0aW9uVHlwZShKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKworICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0KSk7Cisg
ICAgCisgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKHZtKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZChnbG9iYWxPYmplY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdC0+
dHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
b2JqZWN0LT5pbmxpbmVUeXBlRmxhZ3MoKSAmIFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkg
eworICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5nZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiB2YWx1ZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBl
T2ZPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0NlbGwqIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIHJldHVybiBqc1R5cGVTdHJpbmdG
b3JWYWx1ZShleGVjLCBKU1ZhbHVlKHZhbHVlKSkuYXNDZWxsKCk7CisKKyAgICBBU1NFUlQoanNE
eW5hbWljQ2FzdDxKU09iamVjdCo+KG9iamVjdCkpOworICAgIAorICAgIGlmIChvYmplY3QtPnN0
cnVjdHVyZSh2bSktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZ2xvYmFsT2JqZWN0KSkKKyAgICAg
ICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKTsKKyAgICBpZiAob2Jq
ZWN0LT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUpCisgICAgICAgIHJldHVybiB2bS5zbWFsbFN0
cmluZ3MuZnVuY3Rpb25TdHJpbmcoKTsKKyAgICBpZiAob2JqZWN0LT5pbmxpbmVUeXBlRmxhZ3Mo
KSAmIFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkgeworICAgICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKKyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShv
YmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gdm0u
c21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiB2
bS5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNT
dGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5oCShyZXZpc2lvbiAxODM2NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMyw5IEBAIEpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVTY28KIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0KEV4ZWNTdGF0ZSosIElubGluZUNh
bGxGcmFtZSosIEpTRnVuY3Rpb24qLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpOwogSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgaW50MzJfdCBsZW5ndGgsIEpTRnVu
Y3Rpb24qIGNhbGxlZSk7CiBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25GTW9kT25JbnRz
KGludDMyX3QsIGludDMyX3QpIFdURl9JTlRFUk5BTDsKLXNpemVfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbklzT2JqZWN0T3JOdWxsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5U
RVJOQUw7Ci1zaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29kZWRK
U1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlw
ZU9mKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk9iamVjdElzT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKikgV1RGX0lOVEVSTkFMOworc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2Jq
ZWN0SXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKSBX
VEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mT2JqZWN0
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0
aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3
U2l6ZSkgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9j
YXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVj
U3RhdGUqLCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24g
MTgzNjU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEwNyw4NiArNDEwNywxNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBJc09iamVj
dE9yTnVsbDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwotICAg
ICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwotICAgICAg
ICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSXNPYmplY3RPck51bGwsIHJlc3VsdEdQUiwgdmFsdWVU
YWdHUFIsIHZhbHVlUGF5bG9hZEdQUik7Ci0gICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0Lmdw
cigpLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUlzT2JqZWN0T3JOdWxsKG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIElzRnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFs
dWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQ
UiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVz
dWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklz
RnVuY3Rpb24sIHJlc3VsdEdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUik7Ci0gICAg
ICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUlz
RnVuY3Rpb24obm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFR5cGVPZjog
ewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IHZhbHVlLnRh
Z0dQUigpOwotICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsK
LSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BS
ID0gdGVtcC5ncHIoKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMp
OwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3QgZG9uZUp1bXBzOwotCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0KLSAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
IHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8IG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpOwotCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
Tm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZS5qc1ZhbHVlUmVncygpKTsKLSAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQotICAgICAg
ICAgICAgREZHX1RZUEVfQ0hFQ0soSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9k
ZS0+Y2hpbGQxKCksIFNwZWNDZWxsLCBpc05vdENlbGwpOwotCi0gICAgICAgIGlmICghbm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0
cmluZyA9IG1faml0LmJyYW5jaElmTm90U3RyaW5nKHBheWxvYWRHUFIpOwotICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpCi0gICAgICAgICAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG5vdFN0cmluZyk7Ci0gICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSwg
cmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
LSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gU3RyaW5nVXNlKSB7
Ci0gICAgICAgICAgICAgICAgbm90U3RyaW5nLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblR5cGVPZiwgcmVzdWx0R1BSLCBwYXlsb2FkR1BSKTsK
LSAgICAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblR5cGVPZiwgcmVzdWx0R1BSLCBwYXlsb2FkR1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1w
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgewotICAgICAgICAgICAgaXNOb3RDZWxs
LmxpbmsoJm1faml0KTsKLQotICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEp
LCB0YWdHUFIsIHRlbXBHUFIpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TnVt
YmVyID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdGVtcEdQUiwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSk7Ci0gICAg
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdz
Lm51bWJlclN0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBl
bmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIG5vdE51bWJlci5saW5rKCZtX2ppdCk7Ci0K
LSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFVuZGVmaW5lZCA9IG1faml0LmJyYW5j
aDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9q
aXQudm0oKS0+c21hbGxTdHJpbmdzLnVuZGVmaW5lZFN0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAg
ICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIG5v
dFVuZGVmaW5lZC5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdE51bGwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpLCBy
ZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwot
ICAgICAgICAgICAgbm90TnVsbC5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIC8vIE9ubHkg
Ym9vbGVhbiBsZWZ0Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQu
dm0oKS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAg
IH0KLSAgICAgICAgZG9uZUp1bXBzLmxpbmsoJm1faml0KTsKLSAgICAgICAgY2VsbFJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlVHlwZU9mKG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTgzNjU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDE0OCw4MiArNDE0OCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgfQogCiAgICAgY2FzZSBJc09iamVjdE9yTnVsbDogewotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQo
dGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAg
IGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSXNPYmpl
Y3RPck51bGwsIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwotICAgICAgICBtX2ppdC5vcjMyKFRydXN0
ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBjb21waWxl
SXNPYmplY3RPck51bGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2Ug
SXNGdW5jdGlvbjogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAg
ICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSXNGdW5jdGlvbiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7
Ci0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7CisgICAgICAgIGNvbXBpbGVJc0Z1bmN0aW9uKG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKICAgICBjYXNlIFR5cGVPZjogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRD
YWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmVKdW1wczsKLQotICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBDZWxsVXNlIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpOwot
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90
Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpICE9IFVudHlwZWRVc2UpCi0gICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1Zh
bHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsLCBpc05vdENlbGwp
OwotCi0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgp
IHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0cmluZyA9IG1faml0LmJyYW5jaElmTm90U3RyaW5nKHZh
bHVlR1BSKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3Ry
aW5nVXNlKQotICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVTb3VyY2UodmFs
dWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmluZywgbm90U3RyaW5nKTsKLSAgICAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Muc3Ry
aW5nU3RyaW5nKCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAh
PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICBub3RTdHJpbmcubGluaygmbV9qaXQpOwot
ICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHlwZU9mLCByZXN1bHRHUFIs
IHZhbHVlR1BSKTsKLSAgICAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAo
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblR5cGVPZiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7Ci0gICAgICAgICAg
ICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKLSAgICAgICAgICAg
IGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3ROdW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIHZhbHVlR1BS
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSks
IHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7
Ci0gICAgICAgICAgICBub3ROdW1iZXIubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RVbmRlZmluZWQgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6
Tm90RXF1YWwsIHZhbHVlR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZp
bmVkKSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+
c21hbGxTdHJpbmdzLnVuZGVmaW5lZFN0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAg
IGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIG5vdFVuZGVmaW5l
ZC5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bGwg
PSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlR1BSLCBKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSksIHJl
c3VsdEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0g
ICAgICAgICAgICBub3ROdWxsLmxpbmsoJm1faml0KTsKLQotICAgICAgICAgICAgLy8gT25seSBi
b29sZWFuIGxlZnQKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52
bSgpLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAg
fQotICAgICAgICBkb25lSnVtcHMubGluaygmbV9qaXQpOwotICAgICAgICBjZWxsUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVUeXBlT2Yobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4MzY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODE1LDYg
KzQ4MTUsMTExIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE4KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzT2JqZWN0
T3JOdWxsKE5vZGUqIG5vZGUpCit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Cisg
ICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
IEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgCisgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQ2VsbCA9IG1faml0LmJyYW5j
aElmQ2VsbCh2YWx1ZVJlZ3MpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVsbCA9
IG1faml0LmJyYW5jaElmRXF1YWwodmFsdWVSZWdzLCBqc051bGwoKSk7CisgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNOb25OdWxsTm9uQ2VsbCA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICBpc0Nl
bGwubGluaygmbV9qaXQpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzRnVuY3Rpb24gPSBtX2pp
dC5icmFuY2hJZkZ1bmN0aW9uKHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdE9iamVjdCA9IG1faml0LmJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5w
YXlsb2FkR1BSKCkpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0gbV9q
aXQuYnJhbmNoOCgKKyAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCisgICAgICAgIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwKKyAgICAgICAgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgfCBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpKTsKKyAgICAKKyAgICBpc051bGwubGlu
aygmbV9qaXQpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwor
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgaXNO
b25OdWxsTm9uQ2VsbC5saW5rKCZtX2ppdCk7CisgICAgaXNGdW5jdGlvbi5saW5rKCZtX2ppdCk7
CisgICAgbm90T2JqZWN0LmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk9i
amVjdElzT2JqZWN0LCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdCwKKyAgICAgICAgICAgIHZhbHVl
UmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAKKyAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0Z1bmN0
aW9uKE5vZGUqIG5vZGUpCit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAg
CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpT
VmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgCisgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hJ
Zk5vdENlbGwodmFsdWVSZWdzKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0Z1bmN0aW9uID0g
bV9qaXQuYnJhbmNoSWZGdW5jdGlvbih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RPYmplY3QgPSBtX2ppdC5icmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9
IG1faml0LmJyYW5jaDgoCisgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAorICAgICAgICBK
SVRDb21waWxlcjo6QWRkcmVzcyh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksCisgICAgICAgIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhKSk7CisgICAgCisgICAgbm90Q2Vs
bC5saW5rKCZtX2ppdCk7CisgICAgbm90T2JqZWN0LmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIGlzRnVuY3Rpb24ubGluaygmbV9qaXQpOwor
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgIAorICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBz
bG93UGF0aCwgdGhpcywgb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbiwgcmVzdWx0R1BSLCBnbG9i
YWxPYmplY3QsCisgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgCisg
ICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlVHlwZU9mKE5vZGUqIG5vZGUpCit7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFs
dWVSZWdzKCk7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBkb25lOworICAgIG1faml0LmVtaXRUeXBlT2YoCisgICAgICAgIHZhbHVlUmVncywgcmVz
dWx0R1BSLAorICAgICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSwgYm9vbCBmYWxsc1Rocm91Z2gp
IHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFs
bFN0cmluZ3MudHlwZVN0cmluZyh0eXBlKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAo
IWZhbGxzVGhyb3VnaCkKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworICAgICAgICB9LAorICAgICAgICBbJl0gKEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoKSB7
CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25U
eXBlT2ZPYmplY3QsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0LAorICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIH0pOworICAgIGRvbmUubGluaygm
bV9qaXQpOworICAgIAorICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5v
ZGUpCiB7CiAgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUlu
ZGV4aW5nSGVhZGVyKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4MzY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzkyLDEzICs3
OTIsNyBAQCBwdWJsaWM6CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZWcsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIG1vZGUpOwogI2Vsc2UKLSAgICAgICAg
aWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQotICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9k
ZSk7Ci0KLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZp
cnR1YWxSZWdpc3RlcigpOwotICAgICAgICBtX2dwcnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyQm9vbGVhbik7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
Z2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7Ci0gICAg
ICAgIGluZm8uaW5pdEJvb2xlYW4obm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVnKTsKKyAgICAg
ICAgYm9vbGVhblJlc3VsdChyZWcsIG5vZGUsIG1vZGUpOwogI2VuZGlmCiAgICAgfQogICAgIHZv
aWQgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGls
ZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKQEAgLTIyMTQsNiArMjIwOCw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBF
eGVjKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbChOb2RlKik7CisgICAg
dm9pZCBjb21waWxlSXNGdW5jdGlvbihOb2RlKik7CisgICAgdm9pZCBjb21waWxlVHlwZU9mKE5v
ZGUqKTsKICAgICAKICAgICB2b2lkIG1vdmVUcnVlVG8oR1BSUmVnKTsKICAgICB2b2lkIG1vdmVG
YWxzZVRvKEdQUlJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4MzY1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiVHlwZW9mVHlwZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMzY3LDYgKzM2OCwzNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0
b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgZW50cnkgKiBzdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJE
ZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50
YWcpKSk7CiAgICAgfQogI2VuZGlmCisgICAgCisgICAgSnVtcExpc3QgYnJhbmNoSWZOb3RFcXVh
bChKU1ZhbHVlUmVncyByZWdzLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICByZXR1cm4gYnJhbmNoNjQoTm90RXF1YWwsIHJlZ3MuZ3ByKCksIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSk7CisjZWxzZQorICAgICAgICBKdW1wTGlz
dCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoTm90RXF1YWwsIHJlZ3MudGFnR1BSKCks
IFRydXN0ZWRJbW0zMih2YWx1ZS50YWcoKSkpOworICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgp
IHx8IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OyAvLyBUaGVzZSBkb24ndCBoYXZlIGFueXRoaW5nIGludGVyZXN0aW5nIGluIHRoZSBwYXlsb2Fk
LgorICAgICAgICByZXN1bHQuYXBwZW5kKE5vdEVxdWFsLCByZWdzLnBheWxvYWRHUFIoKSwgVHJ1
c3RlZEltbTMyKHZhbHVlLnBheWxvYWQoKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworI2Vu
ZGlmCisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoSWZFcXVhbChKU1ZhbHVlUmVncyByZWdz
LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByZXR1
cm4gYnJhbmNoNjQoRXF1YWwsIHJlZ3MuZ3ByKCksIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpKSk7CisjZWxzZQorICAgICAgICBKdW1wIG5vdEVxdWFsOworICAgICAgICAvLyBU
aGVzZSBkb24ndCBoYXZlIGFueXRoaW5nIGludGVyZXN0aW5nIGluIHRoZSBwYXlsb2FkLgorICAg
ICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgICAgIG5vdEVxdWFsID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ3MucGF5bG9hZEdQ
UigpLCBUcnVzdGVkSW1tMzIodmFsdWUucGF5bG9hZCgpKSk7CisgICAgICAgIEp1bXAgcmVzdWx0
ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMih2YWx1ZS50YWco
KSkpOworICAgICAgICBpZiAobm90RXF1YWwuaXNTZXQoKSkKKyAgICAgICAgICAgIG5vdEVxdWFs
LmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYKKyAgICB9CiAKICAg
ICBKdW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVnKQogICAgIHsKQEAgLTQyNiw2ICs0NTcs
NTQgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUg
dGVtcEdQUiBpcyBub3QgdXNlZCBpbiA2NC1iaXQgbW9kZS4KKyAgICBKdW1wIGJyYW5jaElmTnVt
YmVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQorICAgIHsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICBVTlVTRURfUEFSQU0odGVtcEdQUik7CisgICAgICAgIHJldHVybiBi
cmFuY2hUZXN0NjQoTm9uWmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKKyNlbHNlCisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVncy50YWdH
UFIoKSwgdGVtcEdQUik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihCZWxvdywgdGVtcEdQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpKTsKKyNlbmRpZgorICAgIH0KKyAg
ICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIHRlbXBHUFIgaXMgbm90IHVzZWQgaW4gNjQtYml0IG1v
ZGUuCisgICAgSnVtcCBicmFuY2hJZk5vdE51bWJlcihKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcg
dGVtcEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVU5VU0VEX1BBUkFN
KHRlbXBHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZ3MuZ3ByKCks
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisjZWxzZQorICAgICAgICBhZGQzMihU
cnVzdGVkSW1tMzIoMSksIHJlZ3MudGFnR1BSKCksIHRlbXBHUFIpOworICAgICAgICByZXR1cm4g
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnICsgMSkpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoZSB0ZW1w
R1BSIGlzIG5vdCB1c2VkIGluIDMyLWJpdCBtb2RlLgorICAgIEp1bXAgYnJhbmNoSWZCb29sZWFu
KEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQorICAgIHsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICBtb3ZlKHJlZ3MuZ3ByKCksIHRlbXBHUFIpOworICAgICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCB0ZW1wR1BSKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSk7CisjZWxzZQorICAgICAgICByZXR1cm4gYnJhbmNo
MzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFn
KSk7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSB0ZW1wR1BSIGlz
IG5vdCB1c2VkIGluIDMyLWJpdCBtb2RlLgorICAgIEp1bXAgYnJhbmNoSWZOb3RCb29sZWFuKEpT
VmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBtb3ZlKHJlZ3MuZ3ByKCksIHRlbXBHUFIpOworICAgICAgICB4b3I2NChUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCB0ZW1wR1BSKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSk7CisjZWxzZQorICAgICAgICByZXR1cm4gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFu
VGFnKSk7CisjZW5kaWYKKyAgICB9CisgICAgCiAgICAgSnVtcCBicmFuY2hJZk9iamVjdChHUFJS
ZWcgY2VsbEdQUikKICAgICB7CiAgICAgICAgIHJldHVybiBicmFuY2g4KApAQCAtNzA3LDYgKzc4
NiwyMyBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAgICAgCisgICAgdm9pZCBib3hCb29sZWFu
UGF5bG9hZChHUFJSZWcgYm9vbEdQUiwgR1BSUmVnIHBheWxvYWRHUFIpCisgICAgeworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgYm9v
bEdQUiwgcGF5bG9hZEdQUik7CisjZWxzZQorICAgICAgICBtb3ZlKGJvb2xHUFIsIHBheWxvYWRH
UFIpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBib3hCb29sZWFuKEdQUlJlZyBib29sR1BS
LCBKU1ZhbHVlUmVncyBib3hlZFJlZ3MpCisgICAgeworICAgICAgICBib3hCb29sZWFuUGF5bG9h
ZChib29sR1BSLCBib3hlZFJlZ3MucGF5bG9hZEdQUigpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgYm94ZWRS
ZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0KKyAgICAKICAgICB2b2lkIGNhbGxFeGNlcHRp
b25GdXp6KCk7CiAgICAgCiAgICAgZW51bSBFeGNlcHRpb25DaGVja0tpbmQgeyBOb3JtYWxFeGNl
cHRpb25DaGVjaywgSW52ZXJ0ZWRFeGNlcHRpb25DaGVjayB9OwpAQCAtODQzLDYgKzkzOSw4MiBA
QCBwdWJsaWM6CiAgICAgICAgIHVpbnQ4X3QqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihjZWxsKSArIEpTQ2VsbDo6Z2NEYXRhT2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiBi
cmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkFic29s
dXRlQWRkcmVzcyhhZGRyZXNzKSk7CiAgICAgfQorICAgIAorICAgIC8vIEVtaXRzIHRoZSBicmFu
Y2ggc3RydWN0dXJlIGZvciB0eXBlb2YuIFRoZSBjb2RlIGVtaXR0ZWQgYnkgdGhpcyBkb2Vzbid0
IGZhbGwgdGhyb3VnaC4gVGhlCisgICAgLy8gZnVuY3RvciBpcyBjYWxsZWQgYXQgdGhvc2UgcG9p
bnRzIHdoZXJlIHdlIGhhdmUgcGlucG9pbnRlZCBhIHR5cGUuIE9uZSB3YXkgdG8gdXNlIHRoaXMg
aXMgdG8KKyAgICAvLyBoYXZlIHRoZSBmdW5jdG9yIGVtaXQgdGhlIGNvZGUgdG8gcHV0IHRoZSB0
eXBlIHN0cmluZyBpbnRvIGFuIGFwcHJvcHJpYXRlIHJlZ2lzdGVyIGFuZCB0aGVuCisgICAgLy8g
anVtcCBvdXQuIEEgc2Vjb25kYXJ5IGZ1bmN0b3IgaXMgdXNlZCBmb3IgdGhlIGNhbGwgdHJhcCBh
bmQgbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkIHNsb3cKKyAgICAvLyBjYXNlLiBJdCBpcyBwYXNz
ZWQgdGhlIHVubGlua2VkIGp1bXAgdG8gdGhlIHNsb3cgY2FzZS4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0b3I+CisgICAgdm9pZCBlbWl0VHlw
ZU9mKAorICAgICAgICBKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUiwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvciwKKyAgICAgICAgY29uc3QgU2xvd1BhdGhGdW5jdG9yJiBzbG93UGF0aEZ1
bmN0b3IpCisgICAgeworICAgICAgICAvLyBJbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgYnJhbmNo
aW5nIHN0cnVjdHVyZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaWYgKGlzIGNlbGwpIHsKKyAg
ICAgICAgLy8gICAgIGlmIChpcyBvYmplY3QpIHsKKyAgICAgICAgLy8gICAgICAgICBpZiAoaXMg
ZnVuY3Rpb24pIHsKKyAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOworICAg
ICAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAoZG9lc24ndCBoYXZlIGNhbGwgdHJhcCBhbmQgZG9l
c24ndCBtYXNxdWVyYWRlIGFzIHVuZGVmaW5lZCkgeworICAgICAgICAvLyAgICAgICAgICAgICBy
ZXR1cm4gb2JqZWN0CisgICAgICAgIC8vICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gICAg
ICAgICAgICAgcmV0dXJuIHNsb3dQYXRoKCk7CisgICAgICAgIC8vICAgICAgICAgfQorICAgICAg
ICAvLyAgICAgfSBlbHNlIGlmIChpcyBzdHJpbmcpIHsKKyAgICAgICAgLy8gICAgICAgICByZXR1
cm4gc3RyaW5nCisgICAgICAgIC8vICAgICB9IGVsc2UgeworICAgICAgICAvLyAgICAgICAgIHJl
dHVybiBzeW1ib2wKKyAgICAgICAgLy8gICAgIH0KKyAgICAgICAgLy8gfSBlbHNlIGlmIChpcyBu
dW1iZXIpIHsKKyAgICAgICAgLy8gICAgIHJldHVybiBudW1iZXIKKyAgICAgICAgLy8gfSBlbHNl
IGlmIChpcyBudWxsKSB7CisgICAgICAgIC8vICAgICByZXR1cm4gb2JqZWN0CisgICAgICAgIC8v
IH0gZWxzZSBpZiAoaXMgYm9vbGVhbikgeworICAgICAgICAvLyAgICAgcmV0dXJuIGJvb2xlYW4K
KyAgICAgICAgLy8gfSBlbHNlIHsKKyAgICAgICAgLy8gICAgIHJldHVybiB1bmRlZmluZWQKKyAg
ICAgICAgLy8gfQorICAgICAgICAKKyAgICAgICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ3MpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGNlbGxHUFIgPSByZWdzLnBheWxv
YWRHUFIoKTsKKyAgICAgICAgSnVtcCBub3RPYmplY3QgPSBicmFuY2hJZk5vdE9iamVjdChjZWxs
R1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgbm90RnVuY3Rpb24gPSBicmFuY2hJZk5vdEZ1
bmN0aW9uKGNlbGxHUFIpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OkZ1bmN0aW9uLCBm
YWxzZSk7CisgICAgICAgIAorICAgICAgICBub3RGdW5jdGlvbi5saW5rKHRoaXMpOworICAgICAg
ICBzbG93UGF0aEZ1bmN0b3IoCisgICAgICAgICAgICBicmFuY2hUZXN0OCgKKyAgICAgICAgICAg
ICAgICBOb25aZXJvLAorICAgICAgICAgICAgICAgIEFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkIHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhKSkpOworICAg
ICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok9iamVjdCwgZmFsc2UpOworICAgICAgICAKKyAgICAg
ICAgbm90T2JqZWN0LmxpbmsodGhpcyk7CisgICAgICAgIAorICAgICAgICBKdW1wIG5vdFN0cmlu
ZyA9IGJyYW5jaElmTm90U3RyaW5nKGNlbGxHUFIpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5
cGU6OlN0cmluZywgZmFsc2UpOworICAgICAgICBub3RTdHJpbmcubGluayh0aGlzKTsKKyAgICAg
ICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpTeW1ib2wsIGZhbHNlKTsKKyAgICAgICAgCisgICAgICAg
IG5vdENlbGwubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdE51bWJlciA9IGJyYW5jaElm
Tm90TnVtYmVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok51
bWJlciwgZmFsc2UpOworICAgICAgICBub3ROdW1iZXIubGluayh0aGlzKTsKKyAgICAgICAgCisg
ICAgICAgIEp1bXBMaXN0IG5vdE51bGwgPSBicmFuY2hJZk5vdEVxdWFsKHJlZ3MsIGpzTnVsbCgp
KTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpPYmplY3QsIGZhbHNlKTsKKyAgICAgICAg
bm90TnVsbC5saW5rKHRoaXMpOworICAgICAgICAKKyAgICAgICAgSnVtcCBub3RCb29sZWFuID0g
YnJhbmNoSWZOb3RCb29sZWFuKHJlZ3MsIHRlbXBHUFIpOworICAgICAgICBmdW5jdG9yKFR5cGVv
ZlR5cGU6OkJvb2xlYW4sIGZhbHNlKTsKKyAgICAgICAgbm90Qm9vbGVhbi5saW5rKHRoaXMpOwor
ICAgICAgICAKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpVbmRlZmluZWQsIHRydWUpOwor
ICAgIH0KIAogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29k
ZU1hcEZvcihDb2RlQmxvY2sqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NtYWxsU3RyaW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCShyZXZpc2lvbiAxODM2NTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDE1IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTbWFsbFN0cmluZ3NfaAogI2RlZmluZSBTbWFs
bFN0cmluZ3NfaAogCisjaW5jbHVkZSAiVHlwZW9mVHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC04NSw2ICs4NiwyOSBA
QCBwdWJsaWM6CiAgICAgfQogICAgIEpTQ19DT01NT05fU1RSSU5HU19FQUNIX05BTUUoSlNDX0NP
TU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RFRklOSVRJT04pCiAjdW5kZWYgSlNDX0NPTU1PTl9TVFJJ
TkdTX0FDQ0VTU09SX0RFRklOSVRJT04KKyAgICAKKyAgICBKU1N0cmluZyogdHlwZVN0cmluZyhU
eXBlb2ZUeXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICAgICAgY2FzZSBUeXBlb2ZUeXBlOjpVbmRlZmluZWQ6CisgICAgICAgICAgICByZXR1cm4gdW5k
ZWZpbmVkU3RyaW5nKCk7CisgICAgICAgIGNhc2UgVHlwZW9mVHlwZTo6Qm9vbGVhbjoKKyAgICAg
ICAgICAgIHJldHVybiBib29sZWFuU3RyaW5nKCk7CisgICAgICAgIGNhc2UgVHlwZW9mVHlwZTo6
TnVtYmVyOgorICAgICAgICAgICAgcmV0dXJuIG51bWJlclN0cmluZygpOworICAgICAgICBjYXNl
IFR5cGVvZlR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmdTdHJpbmcoKTsK
KyAgICAgICAgY2FzZSBUeXBlb2ZUeXBlOjpTeW1ib2w6CisgICAgICAgICAgICByZXR1cm4gc3lt
Ym9sU3RyaW5nKCk7CisgICAgICAgIGNhc2UgVHlwZW9mVHlwZTo6T2JqZWN0OgorICAgICAgICAg
ICAgcmV0dXJuIG9iamVjdFN0cmluZygpOworICAgICAgICBjYXNlIFR5cGVvZlR5cGU6OkZ1bmN0
aW9uOgorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uU3RyaW5nKCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KIAogICAgIEpTU3RyaW5nKiBudWxsT2JqZWN0U3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9udWxsT2JqZWN0U3RyaW5nOyB9CiAgICAgSlNTdHJpbmcqIHVuZGVm
aW5lZE9iamVjdFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fdW5kZWZpbmVkT2JqZWN0U3RyaW5n
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlR5cGVvZlR5cGUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlb2ZUeXBlIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlb2ZUeXBlOjpVbmRlZmlu
ZWQ6CisgICAgICAgIG91dC5wcmludCgidW5kZWZpbmVkIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFR5cGVvZlR5cGU6OkJvb2xlYW46CisgICAgICAgIG91dC5wcmludCgiYm9vbGVhbiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlb2ZUeXBlOjpOdW1iZXI6CisgICAgICAg
IG91dC5wcmludCgibnVtYmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVvZlR5
cGU6OlN0cmluZzoKKyAgICAgICAgb3V0LnByaW50KCJzdHJpbmciKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHlwZW9mVHlwZTo6U3ltYm9sOgorICAgICAgICBvdXQucHJpbnQoInN5bWJv
bCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlb2ZUeXBlOjpPYmplY3Q6CisgICAg
ICAgIG91dC5wcmludCgib2JqZWN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVv
ZlR5cGU6OkZ1bmN0aW9uOgorICAgICAgICBvdXQucHJpbnQoImZ1bmN0aW9uIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVvZlR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlb2ZUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlb2ZUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5
cGVvZlR5cGVfaAorI2RlZmluZSBUeXBlb2ZUeXBlX2gKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBUeXBlb2ZUeXBlIHsKKyAg
ICBVbmRlZmluZWQsCisgICAgQm9vbGVhbiwKKyAgICBOdW1iZXIsCisgICAgU3RyaW5nLAorICAg
IFN5bWJvbCwKKyAgICBPYmplY3QsCisgICAgRnVuY3Rpb24gICAgCit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBKU0M6OlR5cGVvZlR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIFR5cGVvZlR5cGVfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252212</attachid>
            <date>2015-05-01 19:56:52 -0700</date>
            <delta_ts>2015-05-01 21:37:20 -0700</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>41038</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDE0ICszNDYsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFR5cGVP
ZjogewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJp
bmcoKSkKLSAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNl
bGwoKSkKLSAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBDb21wYXJlRXFDb25zdGFudDogewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTEyNDEsNiArMTIzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgICAgICBj
YXNlIFR5cGVPZjoKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYwLDIxICs4NjAsNjQgQEAgSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXNpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0T3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgdmFsdWUpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmpl
Y3RJc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogb2JqZWN0KQogewotICAgIHJldHVybiBqc0lzT2JqZWN0VHlwZU9yTnVsbChleGVj
LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEFTU0VSVChq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0KSk7CisgICAgCisgICAgaWYgKG9iamVjdC0+
c3RydWN0dXJlKHZtKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChnbG9iYWxPYmplY3QpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdC0+dHlwZSgpID09IEpTRnVuY3Rpb25U
eXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdC0+aW5saW5lVHlwZUZs
YWdzKCkgJiBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpIHsKKyAgICAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CisgICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERh
dGEob2JqZWN0LCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKIHsKLSAgICBy
ZXR1cm4ganNJc0Z1bmN0aW9uVHlwZShKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKworICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0KSk7Cisg
ICAgCisgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKHZtKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZChnbG9iYWxPYmplY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdC0+
dHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
b2JqZWN0LT5pbmxpbmVUeXBlRmxhZ3MoKSAmIFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkg
eworICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5nZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiB2YWx1ZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBl
T2ZPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0NlbGwqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICByZXR1cm4ganNUeXBlU3RyaW5n
Rm9yVmFsdWUoZXhlYywgSlNWYWx1ZSh2YWx1ZSkpLmFzQ2VsbCgpOworCisgICAgQVNTRVJUKGpz
RHluYW1pY0Nhc3Q8SlNPYmplY3QqPihvYmplY3QpKTsKKyAgICAKKyAgICBpZiAob2JqZWN0LT5z
dHJ1Y3R1cmUodm0pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGdsb2JhbE9iamVjdCkpCisgICAg
ICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MudW5kZWZpbmVkU3RyaW5nKCk7CisgICAgaWYgKG9i
amVjdC0+dHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKQorICAgICAgICByZXR1cm4gdm0uc21hbGxT
dHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCk7CisgICAgaWYgKG9iamVjdC0+aW5saW5lVHlwZUZsYWdz
KCkgJiBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpIHsKKyAgICAgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CisgICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEo
b2JqZWN0LCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKQorICAgICAgICAgICAgcmV0dXJuIHZt
LnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dm0uc21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygpOwogfQogCiBjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVj
U3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuaAkocmV2aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw5ICsxMDMsOSBAQCBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlU2NvCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChFeGVjU3RhdGUqLCBJbmxpbmVD
YWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgaW50MzJfdCBhcmd1bWVudENvdW50KTsKIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIGludDMyX3QgbGVuZ3RoLCBKU0Z1
bmN0aW9uKiBjYWxsZWUpOwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50
cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Jc09iamVjdE9yTnVsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVk
SlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5
cGVPZihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9i
amVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mT2JqZWN0KEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFs
Q2FwYWNpdHkoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqLCBzaXplX3QgbmV3U2l6
ZSkgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRl
QnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eShFeGVjU3Rh
dGUqLCBKU09iamVjdCopIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTgz
NzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEwNyw4NiArNDEwNywxNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBJc09iamVjdE9y
TnVsbDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwotICAgICAg
ICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwotICAgICAgICBH
UFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSXNPYmplY3RPck51bGwsIHJlc3VsdEdQUiwgdmFsdWVUYWdH
UFIsIHZhbHVlUGF5bG9hZEdQUik7Ci0gICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0Lmdwcigp
LCBub2RlKTsKKyAgICAgICAgY29tcGlsZUlzT2JqZWN0T3JOdWxsKG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBjYXNlIElzRnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVU
YWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9
IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0
KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklzRnVu
Y3Rpb24sIHJlc3VsdEdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUik7Ci0gICAgICAg
IGJvb2xlYW5SZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUlzRnVu
Y3Rpb24obm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFR5cGVPZjogewot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IHZhbHVlLnRhZ0dQ
UigpOwotICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAg
ICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwot
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3QgZG9uZUp1bXBzOwotCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0K
LSAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8
IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8IG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBTdHJpbmdVc2UpOwotCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90
Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZS5qc1ZhbHVlUmVncygpKTsKLSAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQotICAgICAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIFNwZWNDZWxsLCBpc05vdENlbGwpOwotCi0gICAgICAgIGlmICghbm9kZS0+Y2hp
bGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0cmlu
ZyA9IG1faml0LmJyYW5jaElmTm90U3RyaW5nKHBheWxvYWRHUFIpOwotICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpCi0gICAgICAgICAgICAgICAg
REZHX1RZUEVfQ0hFQ0soSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hp
bGQxKCksIFNwZWNTdHJpbmcsIG5vdFN0cmluZyk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSwgcmVz
dWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gU3RyaW5nVXNlKSB7Ci0g
ICAgICAgICAgICAgICAgbm90U3RyaW5nLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblR5cGVPZiwgcmVzdWx0R1BSLCBwYXlsb2FkR1BSKTsKLSAg
ICAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blR5cGVPZiwgcmVzdWx0R1BSLCBwYXlsb2FkR1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgewotICAgICAgICAgICAgaXNOb3RDZWxsLmxp
bmsoJm1faml0KTsKLQotICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCB0
YWdHUFIsIHRlbXBHUFIpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TnVtYmVy
ID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdGVtcEdQUiwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSk7Ci0gICAgICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLm51
bWJlclN0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIG5vdE51bWJlci5saW5rKCZtX2ppdCk7Ci0KLSAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFVuZGVmaW5lZCA9IG1faml0LmJyYW5jaDMy
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQu
dm0oKS0+c21hbGxTdHJpbmdzLnVuZGVmaW5lZFN0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAg
ICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIG5vdFVu
ZGVmaW5lZC5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dE51bGwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpLCByZXN1
bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAg
ICAgICAgICAgbm90TnVsbC5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIC8vIE9ubHkgYm9v
bGVhbiBsZWZ0Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIH0K
LSAgICAgICAgZG9uZUp1bXBzLmxpbmsoJm1faml0KTsKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlVHlwZU9mKG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE0
OCw4MiArNDE0OCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgfQogCiAgICAgY2FzZSBJc09iamVjdE9yTnVsbDogewotICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhp
cyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSXNPYmplY3RP
ck51bGwsIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJ
bW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBjb21waWxlSXNP
YmplY3RPck51bGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgSXNG
dW5jdGlvbjogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBH
UFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSXNGdW5jdGlvbiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7Ci0g
ICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwot
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7CisgICAgICAgIGNvbXBpbGVJc0Z1bmN0aW9uKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICBjYXNlIFR5cGVPZjogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxs
UmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmVKdW1wczsKLQotICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBDZWxsVXNlIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpOwotCi0g
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2Vs
bChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpICE9IFVudHlwZWRVc2UpCi0gICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVl
U291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsLCBpc05vdENlbGwpOwot
Ci0gICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpIHx8
IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vdFN0cmluZyA9IG1faml0LmJyYW5jaElmTm90U3RyaW5nKHZhbHVl
R1BSKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5n
VXNlKQotICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVTb3VyY2UodmFsdWVH
UFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmluZywgbm90U3RyaW5nKTsKLSAgICAgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Muc3RyaW5n
U3RyaW5nKCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBT
dHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICBub3RTdHJpbmcubGluaygmbV9qaXQpOwotICAg
ICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHlwZU9mLCByZXN1bHRHUFIsIHZh
bHVlR1BSKTsKLSAgICAgICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblR5cGVPZiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7Ci0gICAgICAgICAgICBk
b25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKLSAgICAgICAgICAgIGlz
Tm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RO
dW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIHZhbHVlR1BSLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSksIHJl
c3VsdEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0g
ICAgICAgICAgICBub3ROdW1iZXIubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RVbmRlZmluZWQgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90
RXF1YWwsIHZhbHVlR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZpbmVk
KSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21h
bGxTdHJpbmdzLnVuZGVmaW5lZFN0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRv
bmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIG5vdFVuZGVmaW5lZC5s
aW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bGwgPSBt
X2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlR1BSLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSksIHJlc3Vs
dEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAg
ICAgICAgICBub3ROdWxsLmxpbmsoJm1faml0KTsKLQotICAgICAgICAgICAgLy8gT25seSBib29s
ZWFuIGxlZnQKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgp
LT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgfQot
ICAgICAgICBkb25lSnVtcHMubGluaygmbV9qaXQpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVUeXBlT2Yobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODE1LDYgKzQ4
MTUsMTE1IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE4KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzT2JqZWN0T3JO
dWxsKE5vZGUqIG5vZGUpCit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAg
CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpT
VmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgCisgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQ2VsbCA9IG1faml0LmJyYW5jaElm
Q2VsbCh2YWx1ZVJlZ3MpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVsbCA9IG1f
aml0LmJyYW5jaElmRXF1YWwodmFsdWVSZWdzLCBqc051bGwoKSk7CisgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNOb25OdWxsTm9uQ2VsbCA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICBpc0NlbGwu
bGluaygmbV9qaXQpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzRnVuY3Rpb24gPSBtX2ppdC5i
cmFuY2hJZkZ1bmN0aW9uKHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgIEpJVENvbXBpbGVy
OjpKdW1wIG5vdE9iamVjdCA9IG1faml0LmJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXls
b2FkR1BSKCkpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQu
YnJhbmNoVGVzdDgoCisgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAorICAgICAgICBKSVRD
b21waWxlcjo6QWRkcmVzcyh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksCisgICAgICAgIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkIHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhKSk7CisgICAgCisgICAgaXNOdWxsLmxp
bmsoJm1faml0KTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsK
KyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIGlz
Tm9uTnVsbE5vbkNlbGwubGluaygmbV9qaXQpOworICAgIGlzRnVuY3Rpb24ubGluaygmbV9qaXQp
OworICAgIG5vdE9iamVjdC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIoMCksIHJlc3VsdEdQUik7CisgICAgCisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25P
YmplY3RJc09iamVjdCwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3QsCisgICAgICAgICAgICB2YWx1
ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAg
CisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlSXNGdW5jdGlvbihOb2RlKiBub2RlKQoreworICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1
ZS5qc1ZhbHVlUmVncygpOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncyk7CisgICAg
SklUQ29tcGlsZXI6Okp1bXAgaXNGdW5jdGlvbiA9IG1faml0LmJyYW5jaElmRnVuY3Rpb24odmFs
dWVSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90T2JqZWN0ID0g
bV9qaXQuYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgCisg
ICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hUZXN0OCgKKyAgICAg
ICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCisgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKKyAg
ICAgICAgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBUeXBlT2ZTaG91bGRD
YWxsR2V0Q2FsbERhdGEpKTsKKyAgICAKKyAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICBu
b3RPYmplY3QubGluaygmbV9qaXQpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBy
ZXN1bHRHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Cisg
ICAgCisgICAgaXNGdW5jdGlvbi5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgCisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRp
b25PYmplY3RJc0Z1bmN0aW9uLCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdCwKKyAgICAgICAgICAg
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICAKKyAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2YoTm9kZSogbm9kZSkKK3sKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFs
dWUuanNWYWx1ZVJlZ3MoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwor
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgCisgICAgSklUQ29tcGls
ZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgbV9qaXQuZW1pdFR5cGVPZigKKyAgICAgICAgdmFsdWVS
ZWdzLCByZXN1bHRHUFIsCisgICAgICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBlLCBib29sIGZhbGxz
VGhyb3VnaCkgeworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZt
KCktPnNtYWxsU3RyaW5ncy50eXBlU3RyaW5nKHR5cGUpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIGlmICghZmFsbHNUaHJvdWdoKQorICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoSklUQ29tcGlsZXI6Okp1bXAgc2xv
d1BhdGgpIHsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgsIHRoaXMsIG9w
ZXJhdGlvblR5cGVPZk9iamVjdCwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3QsCisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICAgICAgfSk7CisgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwor
fQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
Tm9kZSogbm9kZSkKIHsKICAgICBpZiAobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291
bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTgzNzA4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OTIsMTMgKzc5Miw3IEBAIHB1YmxpYzoKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlZywgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgbW9kZSk7CiAjZWxzZQot
ICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCi0gICAgICAgICAgICB1c2VDaGls
ZHJlbihub2RlKTsKLQotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
bm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJCb29sZWFuKTsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVy
KTsKLSAgICAgICAgaW5mby5pbml0Qm9vbGVhbihub2RlLCBub2RlLT5yZWZDb3VudCgpLCByZWcp
OworICAgICAgICBib29sZWFuUmVzdWx0KHJlZywgbm9kZSwgbW9kZSk7CiAjZW5kaWYKICAgICB9
CiAgICAgdm9pZCB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUs
IFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQpAQCAtMTA2MCw2ICsxMDU0
LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fRUdDIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgR1BSUmVnIGFyZzIpCisgICAg
eworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0
cihnbG9iYWxPYmplY3QpLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKworICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUdDIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgR1BSUmVnIGFy
ZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1
c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0K
KwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSnNzX0pJVE9wZXJhdGlvbl9F
WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwpAQCAtMjIxNCw2ICsyMjIw
LDkgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cyhOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlTm90aWZ5V3JpdGUoTm9kZSopOwogICAgIGJvb2wgY29tcGls
ZVJlZ0V4cEV4ZWMoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKE5vZGUq
KTsKKyAgICB2b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVU
eXBlT2YoTm9kZSopOwogICAgIAogICAgIHZvaWQgbW92ZVRydWVUbyhHUFJSZWcpOwogICAgIHZv
aWQgbW92ZUZhbHNlVG8oR1BSUmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYyMywxNiArNDYyMyw5NiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlSXNPYmpl
Y3RPck51bGwoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIHBvaW50ZXJSZXN1bHQgPSB2bUNhbGwo
Ci0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSXNPYmplY3RPck51bGwpLCBt
X2NhbGxGcmFtZSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSk7Ci0gICAgICAgIHNldEJv
b2xlYW4obV9vdXQubm90TnVsbChwb2ludGVyUmVzdWx0KSk7CisgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CisgICAgICAgIAorICAgICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5jaGls
ZDEoKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGlsZCk7CisgICAgICAg
IAorICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
SXNPYmplY3RPck51bGwgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3RGdW5j
dGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIG5vdCBmdW5j
dGlvbiBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBvYmplY3RDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBvYmplY3QgY2FzZSIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxs
IHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmpl
Y3RPck51bGwgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNo
KGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1
cmUobm90Q2VsbENhc2UpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdEZ1bmN0aW9uQ2FzZSk7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGlzRnVuY3Rpb25SZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVh
bkZhbHNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNGdW5jdGlvbih2
YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlv
biksIHVuc3VyZShub3RGdW5jdGlvbkNhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG5vdEZ1bmN0aW9uQ2FzZSwgb2JqZWN0Q2FzZSk7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIG5vdE9iamVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOwor
ICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc09iamVjdCh2YWx1ZSwgcHJvdmVu
VHlwZShjaGlsZCkpLAorICAgICAgICAgICAgdW5zdXJlKG9iamVjdENhc2UpLCB1bnN1cmUoY29u
dGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhvYmplY3RDYXNl
LCBzbG93UGF0aCk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9iamVjdFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAg
ICAgICAgIGlzRXhvdGljRm9yVHlwZW9mKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCisgICAg
ICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOworICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIG5vdENlbGxDYXNlKTsKKyAgICAg
ICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25PYmplY3RJc09iamVjdCksIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRl
cihnbG9iYWxPYmplY3QpLAorICAgICAgICAgICAgdmFsdWUpOworICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CisgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgbm90Q2VsbFJl
c3VsdFZhbHVlID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKG5vdENlbGxSZXN1bHRWYWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKAorICAg
ICAgICAgICAgbV9vdXQuYm9vbGVhbiwKKyAgICAgICAgICAgIGlzRnVuY3Rpb25SZXN1bHQsIG5v
dE9iamVjdFJlc3VsdCwgb2JqZWN0UmVzdWx0LCBzbG93UGF0aFJlc3VsdCwgbm90Q2VsbFJlc3Vs
dCk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlSXNGdW5jdGlvbigpCiAgICAgewotICAgICAgICBMVmFsdWUgcG9pbnRlclJlc3VsdCA9
IHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Jc0Z1bmN0aW9u
KSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSk7Ci0gICAgICAgIHNldEJvb2xlYW4obV9v
dXQubm90TnVsbChwb2ludGVyUmVzdWx0KSk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7CisgICAgICAgIAorICAgICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGlsZCk7CisgICAgICAgIAorICAgICAg
ICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlv
biBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBub3QgZnVuY3Rpb24gY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVu
Y3Rpb24gc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gY29udGludWF0aW9uIikpOworICAgICAg
ICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBp
c0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJl
KGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90RnVuY3Rpb25DYXNlKTsKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgZnVuY3Rpb25SZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhblRy
dWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0Z1bmN0aW9uKHZhbHVl
LCBwcm92ZW5UeXBlKGNoaWxkKSksCisgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwg
dW5zdXJlKG5vdEZ1bmN0aW9uQ2FzZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8obm90RnVuY3Rpb25DYXNlLCBzbG93UGF0aCk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9i
amVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBt
X291dC5icmFuY2goCisgICAgICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJvdmVu
VHlwZShjaGlsZCkpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250
aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBj
b250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gdm1DYWxsKAor
ICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24pLCBt
X2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKKyAgICAgICAgICAgIHZhbHVl
KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93
UmVzdWx0VmFsdWUpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaSgKKyAgICAgICAgICAgIG1fb3V0LmJvb2xlYW4s
IG5vdENlbGxSZXN1bHQsIGZ1bmN0aW9uUmVzdWx0LCBvYmplY3RSZXN1bHQsIHNsb3dSZXN1bHQp
OworICAgICAgICBzZXRCb29sZWFuKHJlc3VsdCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29t
cGlsZUluKCkKQEAgLTcxNzcsNiArNzI1NywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0
dXJuIHByb3ZlbjsKICAgICAgICAgcmV0dXJuIGlzTm90VHlwZShjZWxsLCBKU0Z1bmN0aW9uVHlw
ZSk7CiAgICAgfQorICAgICAgICAgICAgCisgICAgTFZhbHVlIGlzRXhvdGljRm9yVHlwZW9mKExW
YWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAg
ICAgICBpZiAoISh0eXBlICYgU3BlY09iamVjdE90aGVyKSkKKyAgICAgICAgICAgIHJldHVybiBt
X291dC5ib29sZWFuRmFsc2U7CisgICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9uWmVybzgoCisg
ICAgICAgICAgICBtX291dC5sb2FkOCh2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFn
cyksCisgICAgICAgICAgICBtX291dC5jb25zdEludDgoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8
IFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkpOworICAgIH0KICAgICAKICAgICBMVmFsdWUg
aXNUeXBlKExWYWx1ZSBjZWxsLCBKU1R5cGUgdHlwZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE4MzcwOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiSklU
Q29kZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiVHlwZW9mVHlw
ZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzY3LDYgKzM2OCwz
NiBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlUHRyKHRhZywgQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgZW50cnkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3Rlcikp
IC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgfQogI2VuZGlmCisgICAgCisgICAg
SnVtcExpc3QgYnJhbmNoSWZOb3RFcXVhbChKU1ZhbHVlUmVncyByZWdzLCBKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByZXR1cm4gYnJhbmNoNjQoTm90
RXF1YWwsIHJlZ3MuZ3ByKCksIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSk7
CisjZWxzZQorICAgICAgICBKdW1wTGlzdCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
Tm90RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMih2YWx1ZS50YWcoKSkpOworICAg
ICAgICBpZiAodmFsdWUuaXNFbXB0eSgpIHx8IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OyAvLyBUaGVzZSBkb24ndCBoYXZlIGFueXRoaW5nIGlu
dGVyZXN0aW5nIGluIHRoZSBwYXlsb2FkLgorICAgICAgICByZXN1bHQuYXBwZW5kKE5vdEVxdWFs
LCByZWdzLnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMyKHZhbHVlLnBheWxvYWQoKSkpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNo
SWZFcXVhbChKU1ZhbHVlUmVncyByZWdzLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICByZXR1cm4gYnJhbmNoNjQoRXF1YWwsIHJlZ3MuZ3ByKCksIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSk7CisjZWxzZQorICAgICAgICBKdW1w
IG5vdEVxdWFsOworICAgICAgICAvLyBUaGVzZSBkb24ndCBoYXZlIGFueXRoaW5nIGludGVyZXN0
aW5nIGluIHRoZSBwYXlsb2FkLgorICAgICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSAmJiAhdmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIG5vdEVxdWFsID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ3MucGF5bG9hZEdQUigpLCBUcnVzdGVkSW1tMzIodmFsdWUucGF5bG9hZCgp
KSk7CisgICAgICAgIEp1bXAgcmVzdWx0ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCks
IFRydXN0ZWRJbW0zMih2YWx1ZS50YWcoKSkpOworICAgICAgICBpZiAobm90RXF1YWwuaXNTZXQo
KSkKKyAgICAgICAgICAgIG5vdEVxdWFsLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisjZW5kaWYKKyAgICB9CiAKICAgICBKdW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVn
KQogICAgIHsKQEAgLTQyNiw2ICs0NTcsNTQgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAg
IAorICAgIC8vIE5vdGUgdGhhdCB0aGUgdGVtcEdQUiBpcyBub3QgdXNlZCBpbiA2NC1iaXQgbW9k
ZS4KKyAgICBKdW1wIGJyYW5jaElmTnVtYmVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1w
R1BSKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBVTlVTRURfUEFSQU0odGVt
cEdQUik7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVncy5ncHIoKSwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyNlbHNlCisgICAgICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVncy50YWdHUFIoKSwgdGVtcEdQUik7CisgICAgICAgIHJldHVybiBi
cmFuY2gzMihCZWxvdywgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyAr
IDEpKTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIHRlbXBHUFIg
aXMgbm90IHVzZWQgaW4gNjQtYml0IG1vZGUuCisgICAgSnVtcCBicmFuY2hJZk5vdE51bWJlcihK
U1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRlbXBHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNo
VGVzdDY0KFplcm8sIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CisjZWxzZQorICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ3MudGFnR1BSKCksIHRl
bXBHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCB0ZW1wR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOworI2VuZGlmCisgICAgfQorCisg
ICAgLy8gTm90ZSB0aGF0IHRoZSB0ZW1wR1BSIGlzIG5vdCB1c2VkIGluIDMyLWJpdCBtb2RlLgor
ICAgIEp1bXAgYnJhbmNoSWZCb29sZWFuKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BS
KQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtb3ZlKHJlZ3MuZ3ByKCksIHRl
bXBHUFIpOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
VmFsdWVGYWxzZSkpLCB0ZW1wR1BSKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJv
LCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSk7CisjZWxz
ZQorICAgICAgICByZXR1cm4gYnJhbmNoMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgLy8g
Tm90ZSB0aGF0IHRoZSB0ZW1wR1BSIGlzIG5vdCB1c2VkIGluIDMyLWJpdCBtb2RlLgorICAgIEp1
bXAgYnJhbmNoSWZOb3RCb29sZWFuKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQor
ICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtb3ZlKHJlZ3MuZ3ByKCksIHRlbXBH
UFIpOworICAgICAgICB4b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFs
dWVGYWxzZSkpLCB0ZW1wR1BSKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJv
LCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSk7CisjZWxz
ZQorICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSk7CisjZW5kaWYKKyAgICB9CisgICAgCiAgICAg
SnVtcCBicmFuY2hJZk9iamVjdChHUFJSZWcgY2VsbEdQUikKICAgICB7CiAgICAgICAgIHJldHVy
biBicmFuY2g4KApAQCAtNzA3LDYgKzc4NiwyMyBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAg
ICAgCisgICAgdm9pZCBib3hCb29sZWFuUGF5bG9hZChHUFJSZWcgYm9vbEdQUiwgR1BSUmVnIHBh
eWxvYWRHUFIpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGFkZDMyKFRydXN0
ZWRJbW0zMihWYWx1ZUZhbHNlKSwgYm9vbEdQUiwgcGF5bG9hZEdQUik7CisjZWxzZQorICAgICAg
ICBtb3ZlKGJvb2xHUFIsIHBheWxvYWRHUFIpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBi
b3hCb29sZWFuKEdQUlJlZyBib29sR1BSLCBKU1ZhbHVlUmVncyBib3hlZFJlZ3MpCisgICAgewor
ICAgICAgICBib3hCb29sZWFuUGF5bG9hZChib29sR1BSLCBib3hlZFJlZ3MucGF5bG9hZEdQUigp
KTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpCb29sZWFuVGFnKSwgYm94ZWRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0KKyAg
ICAKICAgICB2b2lkIGNhbGxFeGNlcHRpb25GdXp6KCk7CiAgICAgCiAgICAgZW51bSBFeGNlcHRp
b25DaGVja0tpbmQgeyBOb3JtYWxFeGNlcHRpb25DaGVjaywgSW52ZXJ0ZWRFeGNlcHRpb25DaGVj
ayB9OwpAQCAtODQzLDYgKzkzOSw4MiBAQCBwdWJsaWM6CiAgICAgICAgIHVpbnQ4X3QqIGFkZHJl
c3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihjZWxsKSArIEpTQ2VsbDo6Z2NEYXRhT2Zm
c2V0KCk7CiAgICAgICAgIHJldHVybiBicmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhhZGRyZXNzKSk7CiAgICAgfQorICAg
IAorICAgIC8vIEVtaXRzIHRoZSBicmFuY2ggc3RydWN0dXJlIGZvciB0eXBlb2YuIFRoZSBjb2Rl
IGVtaXR0ZWQgYnkgdGhpcyBkb2Vzbid0IGZhbGwgdGhyb3VnaC4gVGhlCisgICAgLy8gZnVuY3Rv
ciBpcyBjYWxsZWQgYXQgdGhvc2UgcG9pbnRzIHdoZXJlIHdlIGhhdmUgcGlucG9pbnRlZCBhIHR5
cGUuIE9uZSB3YXkgdG8gdXNlIHRoaXMgaXMgdG8KKyAgICAvLyBoYXZlIHRoZSBmdW5jdG9yIGVt
aXQgdGhlIGNvZGUgdG8gcHV0IHRoZSB0eXBlIHN0cmluZyBpbnRvIGFuIGFwcHJvcHJpYXRlIHJl
Z2lzdGVyIGFuZCB0aGVuCisgICAgLy8ganVtcCBvdXQuIEEgc2Vjb25kYXJ5IGZ1bmN0b3IgaXMg
dXNlZCBmb3IgdGhlIGNhbGwgdHJhcCBhbmQgbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkIHNsb3cK
KyAgICAvLyBjYXNlLiBJdCBpcyBwYXNzZWQgdGhlIHVubGlua2VkIGp1bXAgdG8gdGhlIHNsb3cg
Y2FzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZSBTbG93UGF0aEZ1
bmN0b3I+CisgICAgdm9pZCBlbWl0VHlwZU9mKAorICAgICAgICBKU1ZhbHVlUmVncyByZWdzLCBH
UFJSZWcgdGVtcEdQUiwgY29uc3QgRnVuY3RvciYgZnVuY3RvciwKKyAgICAgICAgY29uc3QgU2xv
d1BhdGhGdW5jdG9yJiBzbG93UGF0aEZ1bmN0b3IpCisgICAgeworICAgICAgICAvLyBJbXBsZW1l
bnRzIHRoZSBmb2xsb3dpbmcgYnJhbmNoaW5nIHN0cnVjdHVyZToKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gaWYgKGlzIGNlbGwpIHsKKyAgICAgICAgLy8gICAgIGlmIChpcyBvYmplY3QpIHsKKyAg
ICAgICAgLy8gICAgICAgICBpZiAoaXMgZnVuY3Rpb24pIHsKKyAgICAgICAgLy8gICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uOworICAgICAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAoZG9lc24n
dCBoYXZlIGNhbGwgdHJhcCBhbmQgZG9lc24ndCBtYXNxdWVyYWRlIGFzIHVuZGVmaW5lZCkgewor
ICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gb2JqZWN0CisgICAgICAgIC8vICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIHNsb3dQYXRoKCk7CisgICAg
ICAgIC8vICAgICAgICAgfQorICAgICAgICAvLyAgICAgfSBlbHNlIGlmIChpcyBzdHJpbmcpIHsK
KyAgICAgICAgLy8gICAgICAgICByZXR1cm4gc3RyaW5nCisgICAgICAgIC8vICAgICB9IGVsc2Ug
eworICAgICAgICAvLyAgICAgICAgIHJldHVybiBzeW1ib2wKKyAgICAgICAgLy8gICAgIH0KKyAg
ICAgICAgLy8gfSBlbHNlIGlmIChpcyBudW1iZXIpIHsKKyAgICAgICAgLy8gICAgIHJldHVybiBu
dW1iZXIKKyAgICAgICAgLy8gfSBlbHNlIGlmIChpcyBudWxsKSB7CisgICAgICAgIC8vICAgICBy
ZXR1cm4gb2JqZWN0CisgICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgYm9vbGVhbikgeworICAgICAg
ICAvLyAgICAgcmV0dXJuIGJvb2xlYW4KKyAgICAgICAgLy8gfSBlbHNlIHsKKyAgICAgICAgLy8g
ICAgIHJldHVybiB1bmRlZmluZWQKKyAgICAgICAgLy8gfQorICAgICAgICAKKyAgICAgICAgSnVt
cCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ3MpOworICAgICAgICAKKyAgICAgICAgR1BS
UmVnIGNlbGxHUFIgPSByZWdzLnBheWxvYWRHUFIoKTsKKyAgICAgICAgSnVtcCBub3RPYmplY3Qg
PSBicmFuY2hJZk5vdE9iamVjdChjZWxsR1BSKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgbm90
RnVuY3Rpb24gPSBicmFuY2hJZk5vdEZ1bmN0aW9uKGNlbGxHUFIpOworICAgICAgICBmdW5jdG9y
KFR5cGVvZlR5cGU6OkZ1bmN0aW9uLCBmYWxzZSk7CisgICAgICAgIAorICAgICAgICBub3RGdW5j
dGlvbi5saW5rKHRoaXMpOworICAgICAgICBzbG93UGF0aEZ1bmN0b3IoCisgICAgICAgICAgICBi
cmFuY2hUZXN0OCgKKyAgICAgICAgICAgICAgICBOb25aZXJvLAorICAgICAgICAgICAgICAgIEFk
ZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAorICAgICAgICAg
ICAgICAgIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgVHlwZU9mU2hvdWxk
Q2FsbEdldENhbGxEYXRhKSkpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok9iamVjdCwg
ZmFsc2UpOworICAgICAgICAKKyAgICAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7CisgICAgICAg
IAorICAgICAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaElmTm90U3RyaW5nKGNlbGxHUFIpOwor
ICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlN0cmluZywgZmFsc2UpOworICAgICAgICBub3RT
dHJpbmcubGluayh0aGlzKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpTeW1ib2wsIGZh
bHNlKTsKKyAgICAgICAgCisgICAgICAgIG5vdENlbGwubGluayh0aGlzKTsKKworICAgICAgICBK
dW1wIG5vdE51bWJlciA9IGJyYW5jaElmTm90TnVtYmVyKHJlZ3MsIHRlbXBHUFIpOworICAgICAg
ICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok51bWJlciwgZmFsc2UpOworICAgICAgICBub3ROdW1iZXIu
bGluayh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIEp1bXBMaXN0IG5vdE51bGwgPSBicmFuY2hJ
Zk5vdEVxdWFsKHJlZ3MsIGpzTnVsbCgpKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpP
YmplY3QsIGZhbHNlKTsKKyAgICAgICAgbm90TnVsbC5saW5rKHRoaXMpOworICAgICAgICAKKyAg
ICAgICAgSnVtcCBub3RCb29sZWFuID0gYnJhbmNoSWZOb3RCb29sZWFuKHJlZ3MsIHRlbXBHUFIp
OworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OkJvb2xlYW4sIGZhbHNlKTsKKyAgICAgICAg
bm90Qm9vbGVhbi5saW5rKHRoaXMpOworICAgICAgICAKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZU
eXBlOjpVbmRlZmluZWQsIHRydWUpOworICAgIH0KIAogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODM3
MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBleHRlcm4gIkMiIHsKICAgICBEOiBkb3VibGUKICAg
ICBFOiBFeGVjU3RhdGUqCiAgICAgRjogQ2FsbEZyYW1lKgorICAgIEc6IEpTR2xvYmFsT2JqZWN0
KgogICAgIEk6IFN0cmluZ0ltcGwqCiAgICAgSWNmOiBJbmxpbmVDYWxsRnJhbWUqCiAgICAgSWRj
OiBjb25zdCBJZGVudGlmaWVyKgpAQCAtMTI3LDYgKzEyOCw3IEBAIHR5cGVkZWYgSlNDZWxsKiBK
SVRfT1BFUkFUSU9OICgqQ19KSVRPcGUKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgq
Q19KSVRPcGVyYXRpb25fRUNaKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKIHR5cGVk
ZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUNaQykoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgaW50MzJfdCwgSlNDZWxsKik7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJB
VElPTiAoKkNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7
Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VHQykoRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUljZikoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZy
YW1lKik7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VK
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJB
VElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc2MpKEV4ZWNTdGF0ZSosIEpTU2NvcGUqKTsKQEAgLTE2
MSw2ICsxNjMsNyBAQCB0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlCiB0
eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0VKWikoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVS
QVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FSlpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
aW50MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRP
cGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgc2l6
ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FR0MpKEV4ZWNTdGF0ZSosIEpTR2xv
YmFsT2JqZWN0KiwgSlNDZWxsKik7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19K
SVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6
ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9O
ICgqU19KSVRPcGVyYXRpb25fRU9Kc3MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNTdHJpbmcq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5o
CShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFs
bFN0cmluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lm
bmRlZiBTbWFsbFN0cmluZ3NfaAogI2RlZmluZSBTbWFsbFN0cmluZ3NfaAogCisjaW5jbHVkZSAi
VHlwZW9mVHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogCkBAIC04NSw2ICs4NiwyOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIEpT
Q19DT01NT05fU1RSSU5HU19FQUNIX05BTUUoSlNDX0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RF
RklOSVRJT04pCiAjdW5kZWYgSlNDX0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RFRklOSVRJT04K
KyAgICAKKyAgICBKU1N0cmluZyogdHlwZVN0cmluZyhUeXBlb2ZUeXBlIHR5cGUpIGNvbnN0Cisg
ICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlb2ZUeXBlOjpV
bmRlZmluZWQ6CisgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkU3RyaW5nKCk7CisgICAgICAg
IGNhc2UgVHlwZW9mVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBib29sZWFuU3Ry
aW5nKCk7CisgICAgICAgIGNhc2UgVHlwZW9mVHlwZTo6TnVtYmVyOgorICAgICAgICAgICAgcmV0
dXJuIG51bWJlclN0cmluZygpOworICAgICAgICBjYXNlIFR5cGVvZlR5cGU6OlN0cmluZzoKKyAg
ICAgICAgICAgIHJldHVybiBzdHJpbmdTdHJpbmcoKTsKKyAgICAgICAgY2FzZSBUeXBlb2ZUeXBl
OjpTeW1ib2w6CisgICAgICAgICAgICByZXR1cm4gc3ltYm9sU3RyaW5nKCk7CisgICAgICAgIGNh
c2UgVHlwZW9mVHlwZTo6T2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdFN0cmluZygp
OworICAgICAgICBjYXNlIFR5cGVvZlR5cGU6OkZ1bmN0aW9uOgorICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAog
ICAgIEpTU3RyaW5nKiBudWxsT2JqZWN0U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9udWxsT2Jq
ZWN0U3RyaW5nOyB9CiAgICAgSlNTdHJpbmcqIHVuZGVmaW5lZE9iamVjdFN0cmluZygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5kZWZpbmVkT2JqZWN0U3RyaW5nOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVvZlR5cGUuaCIKKworbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBUeXBlb2ZUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBUeXBlb2ZUeXBlOjpVbmRlZmluZWQ6CisgICAgICAgIG91dC5wcmludCgi
dW5kZWZpbmVkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVvZlR5cGU6OkJvb2xl
YW46CisgICAgICAgIG91dC5wcmludCgiYm9vbGVhbiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlb2ZUeXBlOjpOdW1iZXI6CisgICAgICAgIG91dC5wcmludCgibnVtYmVyIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVvZlR5cGU6OlN0cmluZzoKKyAgICAgICAgb3V0
LnByaW50KCJzdHJpbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9mVHlwZTo6
U3ltYm9sOgorICAgICAgICBvdXQucHJpbnQoInN5bWJvbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBUeXBlb2ZUeXBlOjpPYmplY3Q6CisgICAgICAgIG91dC5wcmludCgib2JqZWN0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVvZlR5cGU6OkZ1bmN0aW9uOgorICAgICAg
ICBvdXQucHJpbnQoImZ1bmN0aW9uIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVvZlR5cGVfaAorI2RlZmluZSBUeXBl
b2ZUeXBlX2gKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsKKworZW51bSBjbGFzcyBUeXBlb2ZUeXBlIHsKKyAgICBVbmRlZmluZWQsCisgICAgQm9vbGVh
biwKKyAgICBOdW1iZXIsCisgICAgU3RyaW5nLAorICAgIFN5bWJvbCwKKyAgICBPYmplY3QsCisg
ICAgRnVuY3Rpb24gICAgCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdU
RiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OlR5cGVvZlR5
cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFR5cGVvZlR5cGVfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252216</attachid>
            <date>2015-05-01 21:37:20 -0700</date>
            <delta_ts>2015-05-01 21:54:04 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50516</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2LDE0ICszNDYsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFR5cGVP
ZjogewotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJp
bmcoKSkKLSAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNl
bGwoKSkKLSAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBDb21wYXJlRXFDb25zdGFudDogewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTEyNDEsNiArMTIzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgorICAgICAgICBj
YXNlIFR5cGVPZjoKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYwLDIxICs4NjAsODQgQEAgSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXNpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklzT2JqZWN0T3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgdmFsdWUpCitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmpl
Y3RJc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogb2JqZWN0KQogewotICAgIHJldHVybiBqc0lzT2JqZWN0VHlwZU9yTnVsbChleGVj
LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEFTU0VSVChq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0KSk7CisgICAgCisgICAgaWYgKG9iamVjdC0+
c3RydWN0dXJlKHZtKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChnbG9iYWxPYmplY3QpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdC0+dHlwZSgpID09IEpTRnVuY3Rpb25U
eXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdC0+aW5saW5lVHlwZUZs
YWdzKCkgJiBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpIHsKKyAgICAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CisgICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERh
dGEob2JqZWN0LCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc2l6ZV90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKIHsKLSAgICBy
ZXR1cm4ganNJc0Z1bmN0aW9uVHlwZShKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKworICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0KSk7Cisg
ICAgCisgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKHZtKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZChnbG9iYWxPYmplY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG9iamVjdC0+
dHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
b2JqZWN0LT5pbmxpbmVUeXBlRmxhZ3MoKSAmIFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkg
eworICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5nZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiB2YWx1ZSkKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBl
T2ZPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0NlbGwqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICByZXR1cm4ganNUeXBlU3RyaW5n
Rm9yVmFsdWUoZXhlYywgSlNWYWx1ZSh2YWx1ZSkpLmFzQ2VsbCgpOworCisgICAgQVNTRVJUKGpz
RHluYW1pY0Nhc3Q8SlNPYmplY3QqPihvYmplY3QpKTsKKyAgICAKKyAgICBpZiAob2JqZWN0LT5z
dHJ1Y3R1cmUodm0pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGdsb2JhbE9iamVjdCkpCisgICAg
ICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3MudW5kZWZpbmVkU3RyaW5nKCk7CisgICAgaWYgKG9i
amVjdC0+dHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKQorICAgICAgICByZXR1cm4gdm0uc21hbGxT
dHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCk7CisgICAgaWYgKG9iamVjdC0+aW5saW5lVHlwZUZsYWdz
KCkgJiBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpIHsKKyAgICAgICAgQ2FsbERhdGEgY2Fs
bERhdGE7CisgICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEo
b2JqZWN0LCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKQorICAgICAgICAgICAgcmV0dXJuIHZt
LnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
dm0uc21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygpOworfQorCitpbnQzMl90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVHlwZU9mT2JqZWN0QXNUeXBlb2ZUeXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvYmplY3QpCit7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisKKyAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KG9iamVjdCkpOworICAg
IAorICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSh2bSktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQo
Z2xvYmFsT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIFR5cGVvZlR5cGU6OlVuZGVmaW5lZDsKKyAg
ICBpZiAob2JqZWN0LT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUpCisgICAgICAgIHJldHVybiBU
eXBlb2ZUeXBlOjpGdW5jdGlvbjsKKyAgICBpZiAob2JqZWN0LT5pbmxpbmVUeXBlRmxhZ3MoKSAm
IFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkgeworICAgICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKKyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShvYmpl
Y3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gVHlwZW9m
VHlwZTo6RnVuY3Rpb247CisgICAgfQorICAgIAorICAgIHJldHVybiBUeXBlb2ZUeXBlOjpPYmpl
Y3Q7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODM3MDgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDkgKzEwMywxMCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRl
U2NvCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRz
RHVyaW5nRXhpdChFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgaW50
MzJfdCBhcmd1bWVudENvdW50KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVh
dGVDbG9uZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3Vt
ZW50U3RhcnQsIGludDMyX3QgbGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUpOwogZG91YmxlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5U
RVJOQUw7Ci1zaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdE9yTnVsbChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSXNGdW5jdGlvbihFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZihFeGVjU3RhdGUqLCBKU0NlbGwqKSBX
VEZfSU5URVJOQUw7CitzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVj
dChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK3Np
emVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiwg
SlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVHlwZU9mT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKikgV1RGX0lOVEVSTkFMOworaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5
cGVPZk9iamVjdEFzVHlwZW9mVHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2Vs
bCopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5B
TDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
RXhlY1N0YXRlKiwgc2l6ZV90IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdp
dGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHJldmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMDcsODYg
KzQxMDcsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IH0KIAogICAgIGNhc2UgSXNPYmplY3RPck51bGw6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIg
PSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVl
LnBheWxvYWRHUFIoKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMp
OwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklzT2JqZWN0T3JO
dWxsLCByZXN1bHRHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpOwotICAgICAgICBi
b29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVJc09iamVj
dE9yTnVsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBJc0Z1bmN0
aW9uOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7Ci0gICAgICAg
IEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIEdQ
UkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Jc0Z1bmN0aW9uLCByZXN1bHRHUFIsIHZhbHVlVGFnR1BSLCB2
YWx1ZVBheWxvYWRHUFIpOwotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSk7CisgICAgICAgIGNvbXBpbGVJc0Z1bmN0aW9uKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBUeXBlT2Y6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIEdQ
UlJlZyB0YWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIg
PSB2YWx1ZS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwot
ICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRD
YWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmVKdW1wczsKLQotICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0gICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2Vs
bFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKLQotICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwodmFs
dWUuanNWYWx1ZVJlZ3MoKSk7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
IT0gVW50eXBlZFVzZSkKLSAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVSZWdzKHRh
Z0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKTsK
LQotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSB8
fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RTdHJpbmcgPSBtX2ppdC5icmFuY2hJZk5vdFN0cmluZyhwYXls
b2FkR1BSKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3Ry
aW5nVXNlKQotICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVSZWdzKHRhZ0dQ
UiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nLCBub3RTdHJpbmcpOwot
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3Ry
aW5ncy5zdHJpbmdTdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpICE9IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgIG5vdFN0cmluZy5saW5rKCZt
X2ppdCk7Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2YsIHJl
c3VsdEdQUiwgcGF5bG9hZEdQUik7Ci0gICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgcGF5bG9hZEdQUik7
Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsK
LSAgICAgICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIG1faml0
LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgdGFnR1BSLCB0ZW1wR1BSKTsKLSAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpB
Ym92ZU9yRXF1YWwsIHRlbXBHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnICsgMSkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1f
aml0LnZtKCktPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAg
ICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBub3RO
dW1iZXIubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RV
bmRlZmluZWQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpOwotICAgICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJp
bmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1
bXAoKSk7Ci0gICAgICAgICAgICBub3RVbmRlZmluZWQubGluaygmbV9qaXQpOwotCi0gICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3ROdWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSk7Ci0g
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJp
bmdzLm9iamVjdFN0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5h
cHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIG5vdE51bGwubGluaygmbV9qaXQpOwot
Ci0gICAgICAgICAgICAvLyBPbmx5IGJvb2xlYW4gbGVmdAotICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkp
LCByZXN1bHRHUFIpOwotICAgICAgICB9Ci0gICAgICAgIGRvbmVKdW1wcy5saW5rKCZtX2ppdCk7
Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZVR5
cGVPZihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4
MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNDgsODIgKzQxNDgsMTcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgSXNPYmplY3RPck51
bGw6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSRmx1
c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbklzT2JqZWN0T3JOdWxsLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKLSAg
ICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0g
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29s
ZWFuKTsKKyAgICAgICAgY29tcGlsZUlzT2JqZWN0T3JOdWxsKG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKICAgICBjYXNlIElzRnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMp
OwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklzRnVuY3Rpb24s
IHJlc3VsdEdQUiwgdmFsdWVHUFIpOwotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBjb21waWxlSXNGdW5jdGlv
bihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBUeXBlT2Y6IHsKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OwotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBkb25lSnVtcHM7Ci0KLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgCi0g
ICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8fCBu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gU3RyaW5nVXNlKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENl
bGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKLSAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQotICAgICAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgp
LCBTcGVjQ2VsbCwgaXNOb3RDZWxsKTsKLQotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVPYmplY3QoKSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3Ry
aW5nVXNlKSB7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RTdHJpbmcgPSBtX2pp
dC5icmFuY2hJZk5vdFN0cmluZyh2YWx1ZUdQUik7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IFN0cmluZ1VzZSkKLSAgICAgICAgICAgICAgICBERkdfVFlQRV9D
SEVDSyhKU1ZhbHVlU291cmNlKHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcs
IG5vdFN0cmluZyk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQu
dm0oKS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAg
ICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICAgICAgbm90
U3RyaW5nLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblR5cGVPZiwgcmVzdWx0R1BSLCB2YWx1ZUdQUik7Ci0gICAgICAgICAgICAgICAgZG9uZUp1
bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwg
dmFsdWVHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5
cGVkVXNlKSB7Ci0gICAgICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENv
bXBpbGVyOjpaZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
LSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0
cmluZ3MubnVtYmVyU3RyaW5nKCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBz
LmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAgICAgbm90TnVtYmVyLmxpbmsoJm1faml0
KTsKLQotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VW5kZWZpbmVkID0gbV9qaXQu
YnJhbmNoNjQoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW02NChWYWx1ZVVuZGVmaW5lZCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKSksIHJl
c3VsdEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0g
ICAgICAgICAgICBub3RVbmRlZmluZWQubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBub3ROdWxsID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLCB2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKTsKLSAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmlu
Z3Mub2JqZWN0U3RyaW5nKCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFw
cGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAgICAgbm90TnVsbC5saW5rKCZtX2ppdCk7Ci0K
LSAgICAgICAgICAgIC8vIE9ubHkgYm9vbGVhbiBsZWZ0Ci0gICAgICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSks
IHJlc3VsdEdQUik7Ci0gICAgICAgIH0KLSAgICAgICAgZG9uZUp1bXBzLmxpbmsoJm1faml0KTsK
LSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlVHlw
ZU9mKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODM3MDgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgxNSw2ICs0ODE1LDExNSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUmVnRXhwRXhlYyhOCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJc09iamVjdE9yTnVsbChOb2RlKiBub2RlKQoreworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1Zh
bHVlUmVncygpOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0NlbGwgPSBtX2ppdC5icmFuY2hJZkNlbGwodmFsdWVSZWdzKTsKKyAgICAKKyAgICBKSVRD
b21waWxlcjo6SnVtcCBpc051bGwgPSBtX2ppdC5icmFuY2hJZkVxdWFsKHZhbHVlUmVncywganNO
dWxsKCkpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm9uTnVsbE5vbkNlbGwgPSBtX2ppdC5q
dW1wKCk7CisgICAgCisgICAgaXNDZWxsLmxpbmsoJm1faml0KTsKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBpc0Z1bmN0aW9uID0gbV9qaXQuYnJhbmNoSWZGdW5jdGlvbih2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBub3RPYmplY3QgPSBtX2ppdC5icmFuY2hJ
Zk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICBKSVRDb21waWxl
cjo6Tm9uWmVybywKKyAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVSZWdzLnBheWxv
YWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAorICAgICAgICBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8IFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0
YSkpOworICAgIAorICAgIGlzTnVsbC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1f
aml0Lmp1bXAoKTsKKyAgICAKKyAgICBpc05vbk51bGxOb25DZWxsLmxpbmsoJm1faml0KTsKKyAg
ICBpc0Z1bmN0aW9uLmxpbmsoJm1faml0KTsKKyAgICBub3RPYmplY3QubGluaygmbV9qaXQpOwor
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgIAorICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBz
bG93UGF0aCwgdGhpcywgb3BlcmF0aW9uT2JqZWN0SXNPYmplY3QsIHJlc3VsdEdQUiwgZ2xvYmFs
T2JqZWN0LAorICAgICAgICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgIAorICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgIAorICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzRnVuY3Rp
b24oTm9kZSogbm9kZSkKK3sKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAK
KyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNW
YWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKKyAgICAKKyAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaElm
Tm90Q2VsbCh2YWx1ZVJlZ3MpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzRnVuY3Rpb24gPSBt
X2ppdC5icmFuY2hJZkZ1bmN0aW9uKHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdE9iamVjdCA9IG1faml0LmJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCkpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0g
bV9qaXQuYnJhbmNoVGVzdDgoCisgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAorICAgICAg
ICBKSVRDb21waWxlcjo6QWRkcmVzcyh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksCisgICAgICAgIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhKSk7CisgICAgCisgICAgbm90
Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgbm90T2JqZWN0LmxpbmsoJm1faml0KTsKKyAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIGlzRnVuY3Rpb24ubGluaygmbV9qaXQp
OworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgIAorICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAg
ICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbiwgcmVzdWx0R1BSLCBn
bG9iYWxPYmplY3QsCisgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAg
CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVHlw
ZU9mKE5vZGUqIG5vZGUpCit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
aml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAg
CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpT
VmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgCisgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOworICAgIG1faml0LmVt
aXRUeXBlT2YoCisgICAgICAgIHZhbHVlUmVncywgcmVzdWx0R1BSLAorICAgICAgICBbJl0gKFR5
cGVvZlR5cGUgdHlwZSwgYm9vbCBmYWxsc1Rocm91Z2gpIHsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3MudHlwZVN0cmluZyh0eXBl
KSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoIWZhbGxzVGhyb3VnaCkKKyAgICAgICAg
ICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9LAorICAgICAgICBb
Jl0gKEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoKSB7CisgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25UeXBlT2ZPYmplY3QsIHJlc3VsdEdQUiwg
Z2xvYmFsT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
KSk7CisgICAgICAgIH0pOworICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIAorICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPnRy
YW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlz
aW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzkyLDEzICs3OTIsNyBAQCBwdWJsaWM6CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAganNWYWx1ZVJlc3VsdChyZWcsIG5vZGUsIERhdGFGb3JtYXRK
U0Jvb2xlYW4sIG1vZGUpOwogI2Vsc2UKLSAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxk
cmVuKQotICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7Ci0KLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAg
ICBtX2dwcnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQm9vbGVhbik7
Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVh
bFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIGluZm8uaW5pdEJvb2xlYW4obm9k
ZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVnKTsKKyAgICAgICAgYm9vbGVhblJlc3VsdChyZWcsIG5v
ZGUsIG1vZGUpOwogI2VuZGlmCiAgICAgfQogICAgIHZvaWQgdW5ibGVzc2VkQm9vbGVhblJlc3Vs
dChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VD
aGlsZHJlbikKQEAgLTEwNjAsNiArMTA1NCwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
ICAgICB9CiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0
aW9uX0VHQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgYXJnMik7CisgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKKyAgICB9CisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENf
SklUT3BlcmF0aW9uX0VHQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgYXJnMik7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpzc19KSVRPcGVyYXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxKTsKQEAgLTIyMTQsNiArMjIyMCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVD
cmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRl
KE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVJc09iamVjdE9yTnVsbChOb2RlKik7CisgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbihO
b2RlKik7CisgICAgdm9pZCBjb21waWxlVHlwZU9mKE5vZGUqKTsKICAgICAKICAgICB2b2lkIG1v
dmVUcnVlVG8oR1BSUmVnKTsKICAgICB2b2lkIG1vdmVGYWxzZVRvKEdQUlJlZyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lv
biAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw2ICsxODksNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxl
dmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAg
Y2FzZSBGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIFN3aXRjaDoKKyAgICBjYXNlIFR5cGVPZjoK
ICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKICAgICBjYXNlIElkZW50
aXR5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHJldmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTYsNiArNzk2LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBJc0Z1bmN0aW9uOgogICAgICAgICAgICAgY29tcGlsZUlz
RnVuY3Rpb24oKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVPZjoKKyAg
ICAgICAgICAgIGNvbXBpbGVUeXBlT2YoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tIYXNJbnN0YW5j
ZSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00NjIzLDE2ICs0NjI2LDExNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51bGwoKQogICAgIHsKLSAgICAgICAgTFZh
bHVlIHBvaW50ZXJSZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uSXNPYmplY3RPck51bGwpLCBtX2NhbGxGcmFtZSwgbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKSk7Ci0gICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90TnVsbChwb2ludGVyUmVz
dWx0KSk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIAorICAgICAg
ICBFZGdlIGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0g
bG93SlNWYWx1ZShjaGlsZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgY2VsbCBjYXNlIikpOwor
ICAgICAgICBMQmFzaWNCbG9jayBub3RGdW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIklzT2JqZWN0T3JOdWxsIG5vdCBmdW5jdGlvbiBjYXNlIikpOworICAgICAgICBMQmFzaWNC
bG9jayBvYmplY3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBv
YmplY3QgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxs
IG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgY29udGludWF0aW9uIikpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShjaGls
ZCkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKyAgICAgICAgCisg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5v
dEZ1bmN0aW9uQ2FzZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGlzRnVuY3Rpb25SZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgaXNGdW5jdGlvbih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAg
ICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RGdW5jdGlvbkNhc2UpKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEZ1bmN0aW9uQ2FzZSwgb2JqZWN0
Q2FzZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdE9iamVjdFJlc3VsdCA9IG1fb3V0LmFu
Y2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBpc09iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAgICAgICAgICAgdW5z
dXJlKG9iamVjdENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5hcHBlbmRUbyhvYmplY3RDYXNlLCBzbG93UGF0aCk7CisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIG9iamVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Cisg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzRXhvdGljRm9yVHlwZW9mKHZhbHVl
LCBwcm92ZW5UeXBlKGNoaWxkKSksCisgICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3Vh
bGx5KGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xv
d1BhdGgsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IHZt
Q2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25PYmplY3RJc09iamVj
dCksIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAorICAgICAgICAgICAg
dmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KHNsb3dSZXN1bHRWYWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24p
OworICAgICAgICBMVmFsdWUgbm90Q2VsbFJlc3VsdFZhbHVlID0gbV9vdXQuZXF1YWwodmFsdWUs
IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG5vdENlbGxSZXN1bHRW
YWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbV9vdXQucGhpKAorICAgICAgICAgICAgbV9vdXQuYm9vbGVhbiwKKyAgICAg
ICAgICAgIGlzRnVuY3Rpb25SZXN1bHQsIG5vdE9iamVjdFJlc3VsdCwgb2JqZWN0UmVzdWx0LCBz
bG93UGF0aFJlc3VsdCwgbm90Q2VsbFJlc3VsdCk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbigpCiAgICAgewotICAg
ICAgICBMVmFsdWUgcG9pbnRlclJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25Jc0Z1bmN0aW9uKSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgp
KSk7Ci0gICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90TnVsbChwb2ludGVyUmVzdWx0KSk7Cisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIAorICAgICAgICBFZGdlIGNo
aWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1
ZShjaGlsZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlv
biBub3QgZnVuY3Rpb24gY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gc2xvdyBwYXRoIikpOworICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rp
b24gY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90
Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBt
X291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQp
KSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90
RnVuY3Rpb25DYXNlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZnVuY3Rpb25SZXN1bHQgPSBt
X291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCisgICAgICAg
ICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEZ1bmN0aW9uQ2FzZSkpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RnVuY3Rpb25DYXNlLCBzbG93UGF0aCk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9iamVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291
dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0V4
b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAgICAgICAgICAgcmFy
ZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUg
c2xvd1Jlc3VsdFZhbHVlID0gdm1DYWxsKAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvbk9iamVjdElzRnVuY3Rpb24pLCBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwKKyAgICAgICAgICAgIHZhbHVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOworICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaSgK
KyAgICAgICAgICAgIG1fb3V0LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQsIGZ1bmN0aW9uUmVzdWx0
LCBvYmplY3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgICAgICBzZXRCb29sZWFuKHJlc3VsdCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVR5cGVPZigpCisgICAgeworICAgICAgICBF
ZGdlIGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93
SlNWYWx1ZShjaGlsZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlR5cGVPZiBjb250aW51YXRpb24iKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2s+IHJl
c3VsdHM7CisgICAgICAgIAorICAgICAgICBidWlsZFR5cGVPZigKKyAgICAgICAgICAgIGNoaWxk
LCB2YWx1ZSwKKyAgICAgICAgICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBlKSB7CisgICAgICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHdlYWtQb2ludGVyKHZtKCkuc21hbGxT
dHJpbmdzLnR5cGVTdHJpbmcodHlwZSkpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlSW4oKQpAQCAtNjM1Niw2ICs2NDYwLDE0MCBAQCBwcml2YXRlOgogICAgICAgICAgICAgV2Vp
Z2h0KGRhdGEtPmZhbGxUaHJvdWdoLmNvdW50KSk7CiAgICAgfQogICAgIAorICAgIC8vIENhbGxz
IHRoZSBmdW5jdG9yIGF0IHRoZSBwb2ludCBvZiBjb2RlIGdlbmVyYXRpb24gd2hlcmUgd2Uga25v
dyB3aGF0IHRoZSByZXN1bHQgdHlwZSBpcy4KKyAgICAvLyBZb3UgY2FuIGVtaXQgd2hhdGV2ZXIg
Y29kZSB5b3UgbGlrZSBhdCB0aGF0IHBvaW50LiBFeHBlY3RzIHlvdSB0byB0ZXJtaW5hdGUgdGhl
IGJhc2ljIGJsb2NrLgorICAgIC8vIFdoZW4gYnVpbGRUeXBlT2YoKSByZXR1cm5zLCBpdCB3aWxs
IGhhdmUgdGVybWluYXRlZCBhbGwgYmFzaWMgYmxvY2tzIHRoYXQgaXQgY3JlYXRlZC4gU28sIGlm
CisgICAgLy8geW91IGFyZW4ndCB1c2luZyB0aGlzIGFzIHRoZSB0ZXJtaW5hdG9yIG9mIGEgaGln
aC1sZXZlbCBibG9jaywgeW91IHNob3VsZCBjcmVhdGUgeW91ciBvd24KKyAgICAvLyBjb250aW5h
dGlvbiBhbmQgc2V0IGl0IGFzIHRoZSBuZXh0QmxvY2sgKG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0Jl
Zm9yZShjb250aW51YXRpb24pKSBiZWZvcmUKKyAgICAvLyBjYWxsaW5nIHRoaXMuIEZvciBleGFt
cGxlOgorICAgIC8vCisgICAgLy8gTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJNeSBjb250aW51YXRpb24iKSk7CisgICAgLy8gTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKKyAgICAv
LyBidWlsZFR5cGVPZigKKyAgICAvLyAgICAgY2hpbGQsIHZhbHVlLAorICAgIC8vICAgICBbJl0g
KFR5cGVvZlR5cGUgdHlwZSkgeworICAgIC8vICAgICAgICAgIGRvIHRoaW5nczsKKyAgICAvLyAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgLy8gICAgIH0pOworICAgIC8v
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBidWlsZFR5cGVPZihFZGdlIGNoaWxkLCBMVmFsdWUg
dmFsdWUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMpOworICAgICAgICAKKyAgICAgICAgLy8gSW1wbGVtZW50cyB0aGUgZm9sbG93
aW5nIGJyYW5jaGluZyBzdHJ1Y3R1cmU6CisgICAgICAgIC8vCisgICAgICAgIC8vIGlmIChpcyBj
ZWxsKSB7CisgICAgICAgIC8vICAgICBpZiAoaXMgb2JqZWN0KSB7CisgICAgICAgIC8vICAgICAg
ICAgaWYgKGlzIGZ1bmN0aW9uKSB7CisgICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbjsKKyAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKGRvZXNuJ3QgaGF2ZSBjYWxsIHRy
YXAgYW5kIGRvZXNuJ3QgbWFzcXVlcmFkZSBhcyB1bmRlZmluZWQpIHsKKyAgICAgICAgLy8gICAg
ICAgICAgICAgcmV0dXJuIG9iamVjdAorICAgICAgICAvLyAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vICAgICAgICAgICAgIHJldHVybiBzbG93UGF0aCgpOworICAgICAgICAvLyAgICAgICAg
IH0KKyAgICAgICAgLy8gICAgIH0gZWxzZSBpZiAoaXMgc3RyaW5nKSB7CisgICAgICAgIC8vICAg
ICAgICAgcmV0dXJuIHN0cmluZworICAgICAgICAvLyAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
ICAgICAgICByZXR1cm4gc3ltYm9sCisgICAgICAgIC8vICAgICB9CisgICAgICAgIC8vIH0gZWxz
ZSBpZiAoaXMgbnVtYmVyKSB7CisgICAgICAgIC8vICAgICByZXR1cm4gbnVtYmVyCisgICAgICAg
IC8vIH0gZWxzZSBpZiAoaXMgbnVsbCkgeworICAgICAgICAvLyAgICAgcmV0dXJuIG9iamVjdAor
ICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIGJvb2xlYW4pIHsKKyAgICAgICAgLy8gICAgIHJldHVy
biBib29sZWFuCisgICAgICAgIC8vIH0gZWxzZSB7CisgICAgICAgIC8vICAgICByZXR1cm4gdW5k
ZWZpbmVkCisgICAgICAgIC8vIH0KKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBjZWxsIGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIG9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1
aWxkVHlwZU9mIG9iamVjdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBmdW5jdGlvbkNh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIGZ1bmN0aW9uIGNhc2UiKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiYnVpbGRUeXBlT2Ygbm90IGZ1bmN0aW9uIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIHJlYWxseU9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9m
IHJlYWxseSBvYmplY3QgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIHNsb3cgcGF0aCIpKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgdW5yZWFjaGFibGUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlw
ZU9mIHVucmVhY2hhYmxlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3RPYmplY3RDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3Qgb2JqZWN0IGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIHN0cmluZ0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1
aWxkVHlwZU9mIHN0cmluZyBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBzeW1ib2xDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBzeW1ib2wgY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1
aWxkVHlwZU9mIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG51bWJlckNh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG51bWJlciBjYXNlIikpOwor
ICAgICAgICBMQmFzaWNCbG9jayBub3ROdW1iZXJDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJidWlsZFR5cGVPZiBub3QgbnVtYmVyIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5v
dE51bGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3QgbnVsbCBj
YXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBib29sZWFuQ2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiYnVpbGRUeXBlT2YgYm9vbGVhbiBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9j
ayB1bmRlZmluZWRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiB1bmRl
ZmluZWQgY2FzZSIpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZChpc0NlbGwodmFs
dWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxD
YXNlKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGNlbGxDYXNlLCBvYmplY3RDYXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzT2Jq
ZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksIHVuc3VyZShvYmplY3RDYXNlKSwgdW5zdXJl
KG5vdE9iamVjdENhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG9iamVj
dENhc2UsIGZ1bmN0aW9uQ2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
IGlzRnVuY3Rpb24odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgU3BlY09iamVjdCksCisgICAg
ICAgICAgICB1bnN1cmUoZnVuY3Rpb25DYXNlKSwgdW5zdXJlKG5vdEZ1bmN0aW9uQ2FzZSkpOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZnVuY3Rpb25DYXNlLCBub3RGdW5jdGlv
bkNhc2UpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OkZ1bmN0aW9uKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEZ1bmN0aW9uQ2FzZSwgcmVhbGx5T2JqZWN0Q2Fz
ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzRXhvdGljRm9yVHlwZW9m
KHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIChTcGVjT2JqZWN0IC0gU3BlY0Z1bmN0aW9uKSks
CisgICAgICAgICAgICB1c3VhbGx5KHJlYWxseU9iamVjdENhc2UpLCByYXJlbHkoc2xvd1BhdGgp
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHJlYWxseU9iamVjdENhc2UsIHNs
b3dQYXRoKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpPYmplY3QpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIHVucmVhY2hhYmxlKTsKKyAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUpLCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAg
IHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHZhbHVlKTsKKyAgICAgICAgVmVjdG9yPFN3aXRj
aENhc2UsIDM+IGNhc2VzOworICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX291dC5j
b25zdEludDMyKFR5cGVvZlR5cGU6OlVuZGVmaW5lZCksIHVuZGVmaW5lZENhc2UpKTsKKyAgICAg
ICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnQzMihUeXBlb2ZUeXBlOjpP
YmplY3QpLCByZWFsbHlPYmplY3RDYXNlKSk7CisgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hD
YXNlKG1fb3V0LmNvbnN0SW50MzIoVHlwZW9mVHlwZTo6RnVuY3Rpb24pLCBmdW5jdGlvbkNhc2Up
KTsKKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24ocmVzdWx0LCBjYXNlcywgdW5yZWFj
aGFibGUsIFdlaWdodCgpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHVucmVh
Y2hhYmxlLCBub3RPYmplY3RDYXNlKTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdE9iamVjdENhc2UsIHN0cmluZ0Nhc2Up
OworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc1N0cmluZyh2YWx1ZSwgcHJv
dmVuVHlwZShjaGlsZCkgJiAoU3BlY0NlbGwgLSBTcGVjT2JqZWN0KSksCisgICAgICAgICAgICB1
bnN1cmUoc3RyaW5nQ2FzZSksIHVuc3VyZShzeW1ib2xDYXNlKSk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5hcHBlbmRUbyhzdHJpbmdDYXNlLCBzeW1ib2xDYXNlKTsKKyAgICAgICAgZnVuY3Rv
cihUeXBlb2ZUeXBlOjpTdHJpbmcpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c3ltYm9sQ2FzZSwgbm90Q2VsbENhc2UpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlN5
bWJvbCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgbnVt
YmVyQ2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzTnVtYmVyKHZh
bHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIH5TcGVjQ2VsbCksCisgICAgICAgICAgICB1bnN1cmUo
bnVtYmVyQ2FzZSksIHVuc3VyZShub3ROdW1iZXJDYXNlKSk7CisgICAgICAgIAorICAgICAgICBt
X291dC5hcHBlbmRUbyhub3ROdW1iZXJDYXNlLCBub3ROdWxsQ2FzZSk7CisgICAgICAgIExWYWx1
ZSBpc051bGw7CisgICAgICAgIGlmIChwcm92ZW5UeXBlKGNoaWxkKSAmIFNwZWNPdGhlcikKKyAg
ICAgICAgICAgIGlzTnVsbCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZh
bHVlTnVsbCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpc051bGwgPSBtX291dC5ib29s
ZWFuRmFsc2U7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc051bGwsIHVuc3VyZShyZWFsbHlPYmpl
Y3RDYXNlKSwgdW5zdXJlKG5vdE51bGxDYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhub3ROdWxsQ2FzZSwgYm9vbGVhbkNhc2UpOworICAgICAgICBtX291dC5icmFuY2go
CisgICAgICAgICAgICBpc0Jvb2xlYW4odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgfihTcGVj
Q2VsbCB8IFNwZWNGdWxsTnVtYmVyKSksCisgICAgICAgICAgICB1bnN1cmUoYm9vbGVhbkNhc2Up
LCB1bnN1cmUodW5kZWZpbmVkQ2FzZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oYm9vbGVhbkNhc2UsIHVuZGVmaW5lZENhc2UpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5
cGU6OkJvb2xlYW4pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8odW5kZWZpbmVk
Q2FzZSwgbGFzdE5leHQpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlVuZGVmaW5lZCk7
CisgICAgfQorICAgIAogICAgIExWYWx1ZSBkb3VibGVUb0ludDMyKExWYWx1ZSBkb3VibGVWYWx1
ZSwgZG91YmxlIGxvdywgZG91YmxlIGhpZ2gsIGJvb2wgaXNTaWduZWQgPSB0cnVlKQogICAgIHsK
ICAgICAgICAgTEJhc2ljQmxvY2sgZ3JlYXRFbm91Z2ggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImRvdWJsZVRvSW50MzIgZ3JlYXRFbm91Z2giKSk7CkBAIC03MTc3LDYgKzc0MTUsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybiBwcm92ZW47CiAgICAgICAgIHJldHVybiBpc05vdFR5
cGUoY2VsbCwgSlNGdW5jdGlvblR5cGUpOwogICAgIH0KKyAgICAgICAgICAgIAorICAgIExWYWx1
ZSBpc0V4b3RpY0ZvclR5cGVvZihMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNw
ZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKCEodHlwZSAmIFNwZWNPYmplY3RPdGhlcikp
CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNlOworICAgICAgICByZXR1cm4g
bV9vdXQudGVzdE5vblplcm84KAorICAgICAgICAgICAgbV9vdXQubG9hZDgodmFsdWUsIG1faGVh
cHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ4KE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpKTsKKyAg
ICB9CiAgICAgCiAgICAgTFZhbHVlIGlzVHlwZShMVmFsdWUgY2VsbCwgSlNUeXBlIHR5cGUpCiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgJKHJl
dmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3dpdGNoQ2Fz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCi0gICAgU3dpdGNoQ2FzZShMVmFsdWUgdmFsdWUsIExCYXNpY0Jsb2NrIHRhcmdldCwgV2Vp
Z2h0IHdlaWdodCkKKyAgICBTd2l0Y2hDYXNlKExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxvY2sgdGFy
Z2V0LCBXZWlnaHQgd2VpZ2h0ID0gV2VpZ2h0KCkpCiAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkK
ICAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCiAgICAgICAgICwgbV93ZWlnaHQod2VpZ2h0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZp
c2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiR1BSSW5mby5o
IgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2lu
Y2x1ZGUgIlR5cGVvZlR5cGUuaCIKICNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTM2Nyw2ICszNjgsMzYgQEAgcHVibGljOgogICAgICAgICBzdG9yZVB0cih0YWcsIEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNl
bmRpZgorICAgIAorICAgIEp1bXBMaXN0IGJyYW5jaElmTm90RXF1YWwoSlNWYWx1ZVJlZ3MgcmVn
cywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0
dXJuIGJyYW5jaDY0KE5vdEVxdWFsLCByZWdzLmdwcigpLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKSkpOworI2Vsc2UKKyAgICAgICAgSnVtcExpc3QgcmVzdWx0OworICAgICAg
ICByZXN1bHQuYXBwZW5kKE5vdEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIodmFs
dWUudGFnKCkpKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCB2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgLy8gVGhlc2UgZG9uJ3Qg
aGF2ZSBhbnl0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgcGF5bG9hZC4KKyAgICAgICAgcmVzdWx0
LmFwcGVuZChOb3RFcXVhbCwgcmVncy5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMih2YWx1ZS5w
YXlsb2FkKCkpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorICAgIH0KKyAgICAK
KyAgICBKdW1wIGJyYW5jaElmRXF1YWwoSlNWYWx1ZVJlZ3MgcmVncywgSlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIGJyYW5jaDY0KEVxdWFs
LCByZWdzLmdwcigpLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSkpOworI2Vs
c2UKKyAgICAgICAgSnVtcCBub3RFcXVhbDsKKyAgICAgICAgLy8gVGhlc2UgZG9uJ3QgaGF2ZSBh
bnl0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgcGF5bG9hZC4KKyAgICAgICAgaWYgKCF2YWx1ZS5p
c0VtcHR5KCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICBub3RF
cXVhbCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdzLnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMy
KHZhbHVlLnBheWxvYWQoKSkpOworICAgICAgICBKdW1wIHJlc3VsdCA9IGJyYW5jaDMyKEVxdWFs
LCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIodmFsdWUudGFnKCkpKTsKKyAgICAgICAgaWYg
KG5vdEVxdWFsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRoaXMpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCisgICAgfQogCiAgICAgSnVtcCBicmFuY2hJZk5v
dENlbGwoR1BSUmVnIHJlZykKICAgICB7CkBAIC00MjYsNiArNDU3LDU0IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIH0KICAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIHRlbXBHUFIgaXMgbm90IHVz
ZWQgaW4gNjQtYml0IG1vZGUuCisgICAgSnVtcCBicmFuY2hJZk51bWJlcihKU1ZhbHVlUmVncyBy
ZWdzLCBHUFJSZWcgdGVtcEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
VU5VU0VEX1BBUkFNKHRlbXBHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE5vblpl
cm8sIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisjZWxzZQor
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ3MudGFnR1BSKCksIHRlbXBHUFIpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoMzIoQmVsb3csIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpMb3dlc3RUYWcgKyAxKSk7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgLy8gTm90ZSB0
aGF0IHRoZSB0ZW1wR1BSIGlzIG5vdCB1c2VkIGluIDY0LWJpdCBtb2RlLgorICAgIEp1bXAgYnJh
bmNoSWZOb3ROdW1iZXIoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIpCisgICAgewor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIFVOVVNFRF9QQVJBTSh0ZW1wR1BSKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpOworI2Vsc2UKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdzLnRhZ0dQUigpLCB0ZW1wR1BSKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpKTsKKyNl
bmRpZgorICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGUgdGVtcEdQUiBpcyBub3QgdXNlZCBp
biAzMi1iaXQgbW9kZS4KKyAgICBKdW1wIGJyYW5jaElmQm9vbGVhbihKU1ZhbHVlUmVncyByZWdz
LCBHUFJSZWcgdGVtcEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbW92
ZShyZWdzLmdwcigpLCB0ZW1wR1BSKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgdGVtcEdQUik7CisgICAgICAgIHJldHVybiBi
cmFuY2hUZXN0NjQoWmVybywgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSkpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFsLCByZWdzLnRh
Z0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOworI2VuZGlmCisgICAg
fQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgdGVtcEdQUiBpcyBub3QgdXNlZCBpbiAzMi1i
aXQgbW9kZS4KKyAgICBKdW1wIGJyYW5jaElmTm90Qm9vbGVhbihKU1ZhbHVlUmVncyByZWdzLCBH
UFJSZWcgdGVtcEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbW92ZShy
ZWdzLmdwcigpLCB0ZW1wR1BSKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgdGVtcEdQUik7CisgICAgICAgIHJldHVybiBicmFu
Y2hUZXN0NjQoTm9uWmVybywgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSkpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCByZWdz
LnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOworI2VuZGlmCisg
ICAgfQorICAgIAogICAgIEp1bXAgYnJhbmNoSWZPYmplY3QoR1BSUmVnIGNlbGxHUFIpCiAgICAg
ewogICAgICAgICByZXR1cm4gYnJhbmNoOCgKQEAgLTcwNyw2ICs3ODYsMjMgQEAgcHVibGljOgog
ICAgIH0KICNlbmRpZgogICAgIAorICAgIHZvaWQgYm94Qm9vbGVhblBheWxvYWQoR1BSUmVnIGJv
b2xHUFIsIEdQUlJlZyBwYXlsb2FkR1BSKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICBhZGQzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIGJvb2xHUFIsIHBheWxvYWRHUFIp
OworI2Vsc2UKKyAgICAgICAgbW92ZShib29sR1BSLCBwYXlsb2FkR1BSKTsKKyNlbmRpZgorICAg
IH0KKworICAgIHZvaWQgYm94Qm9vbGVhbihHUFJSZWcgYm9vbEdQUiwgSlNWYWx1ZVJlZ3MgYm94
ZWRSZWdzKQorICAgIHsKKyAgICAgICAgYm94Qm9vbGVhblBheWxvYWQoYm9vbEdQUiwgYm94ZWRS
ZWdzLnBheWxvYWRHUFIoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIGJveGVkUmVncy50YWdHUFIoKSk7Cisj
ZW5kaWYKKyAgICB9CisgICAgCiAgICAgdm9pZCBjYWxsRXhjZXB0aW9uRnV6eigpOwogICAgIAog
ICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tLaW5kIHsgTm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEludmVy
dGVkRXhjZXB0aW9uQ2hlY2sgfTsKQEAgLTg0Myw2ICs5MzksODIgQEAgcHVibGljOgogICAgICAg
ICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY2VsbCkgKyBK
U0NlbGw6OmdjRGF0YU9mZnNldCgpOwogICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDgoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYWRkcmVz
cykpOwogICAgIH0KKyAgICAKKyAgICAvLyBFbWl0cyB0aGUgYnJhbmNoIHN0cnVjdHVyZSBmb3Ig
dHlwZW9mLiBUaGUgY29kZSBlbWl0dGVkIGJ5IHRoaXMgZG9lc24ndCBmYWxsIHRocm91Z2guIFRo
ZQorICAgIC8vIGZ1bmN0b3IgaXMgY2FsbGVkIGF0IHRob3NlIHBvaW50cyB3aGVyZSB3ZSBoYXZl
IHBpbnBvaW50ZWQgYSB0eXBlLiBPbmUgd2F5IHRvIHVzZSB0aGlzIGlzIHRvCisgICAgLy8gaGF2
ZSB0aGUgZnVuY3RvciBlbWl0IHRoZSBjb2RlIHRvIHB1dCB0aGUgdHlwZSBzdHJpbmcgaW50byBh
biBhcHByb3ByaWF0ZSByZWdpc3RlciBhbmQgdGhlbgorICAgIC8vIGp1bXAgb3V0LiBBIHNlY29u
ZGFyeSBmdW5jdG9yIGlzIHVzZWQgZm9yIHRoZSBjYWxsIHRyYXAgYW5kIG1hc3F1ZXJhZGVzLWFz
LXVuZGVmaW5lZCBzbG93CisgICAgLy8gY2FzZS4gSXQgaXMgcGFzc2VkIHRoZSB1bmxpbmtlZCBq
dW1wIHRvIHRoZSBzbG93IGNhc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3RvciwgdHlw
ZW5hbWUgU2xvd1BhdGhGdW5jdG9yPgorICAgIHZvaWQgZW1pdFR5cGVPZigKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsCisg
ICAgICAgIGNvbnN0IFNsb3dQYXRoRnVuY3RvciYgc2xvd1BhdGhGdW5jdG9yKQorICAgIHsKKyAg
ICAgICAgLy8gSW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIGJyYW5jaGluZyBzdHJ1Y3R1cmU6Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIGlmIChpcyBjZWxsKSB7CisgICAgICAgIC8vICAgICBpZiAo
aXMgb2JqZWN0KSB7CisgICAgICAgIC8vICAgICAgICAgaWYgKGlzIGZ1bmN0aW9uKSB7CisgICAg
ICAgIC8vICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbjsKKyAgICAgICAgLy8gICAgICAgICB9
IGVsc2UgaWYgKGRvZXNuJ3QgaGF2ZSBjYWxsIHRyYXAgYW5kIGRvZXNuJ3QgbWFzcXVlcmFkZSBh
cyB1bmRlZmluZWQpIHsKKyAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIG9iamVjdAorICAg
ICAgICAvLyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBz
bG93UGF0aCgpOworICAgICAgICAvLyAgICAgICAgIH0KKyAgICAgICAgLy8gICAgIH0gZWxzZSBp
ZiAoaXMgc3RyaW5nKSB7CisgICAgICAgIC8vICAgICAgICAgcmV0dXJuIHN0cmluZworICAgICAg
ICAvLyAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gICAgICAgICByZXR1cm4gc3ltYm9sCisgICAg
ICAgIC8vICAgICB9CisgICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgbnVtYmVyKSB7CisgICAgICAg
IC8vICAgICByZXR1cm4gbnVtYmVyCisgICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgbnVsbCkgewor
ICAgICAgICAvLyAgICAgcmV0dXJuIG9iamVjdAorICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIGJv
b2xlYW4pIHsKKyAgICAgICAgLy8gICAgIHJldHVybiBib29sZWFuCisgICAgICAgIC8vIH0gZWxz
ZSB7CisgICAgICAgIC8vICAgICByZXR1cm4gdW5kZWZpbmVkCisgICAgICAgIC8vIH0KKyAgICAg
ICAgCisgICAgICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdzKTsKKyAgICAg
ICAgCisgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gcmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAg
IEp1bXAgbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RPYmplY3QoY2VsbEdQUik7CisgICAgICAgIAor
ICAgICAgICBKdW1wIG5vdEZ1bmN0aW9uID0gYnJhbmNoSWZOb3RGdW5jdGlvbihjZWxsR1BSKTsK
KyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpGdW5jdGlvbiwgZmFsc2UpOworICAgICAgICAK
KyAgICAgICAgbm90RnVuY3Rpb24ubGluayh0aGlzKTsKKyAgICAgICAgc2xvd1BhdGhGdW5jdG9y
KAorICAgICAgICAgICAgYnJhbmNoVGVzdDgoCisgICAgICAgICAgICAgICAgTm9uWmVybywKKyAg
ICAgICAgICAgICAgICBBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCB8IFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkpKTsKKyAgICAgICAgZnVuY3RvcihUeXBl
b2ZUeXBlOjpPYmplY3QsIGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIG5vdE9iamVjdC5saW5r
KHRoaXMpOworICAgICAgICAKKyAgICAgICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hJZk5vdFN0
cmluZyhjZWxsR1BSKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpTdHJpbmcsIGZhbHNl
KTsKKyAgICAgICAgbm90U3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9m
VHlwZTo6U3ltYm9sLCBmYWxzZSk7CisgICAgICAgIAorICAgICAgICBub3RDZWxsLmxpbmsodGhp
cyk7CisKKyAgICAgICAgSnVtcCBub3ROdW1iZXIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdzLCB0
ZW1wR1BSKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpOdW1iZXIsIGZhbHNlKTsKKyAg
ICAgICAgbm90TnVtYmVyLmxpbmsodGhpcyk7CisgICAgICAgIAorICAgICAgICBKdW1wTGlzdCBu
b3ROdWxsID0gYnJhbmNoSWZOb3RFcXVhbChyZWdzLCBqc051bGwoKSk7CisgICAgICAgIGZ1bmN0
b3IoVHlwZW9mVHlwZTo6T2JqZWN0LCBmYWxzZSk7CisgICAgICAgIG5vdE51bGwubGluayh0aGlz
KTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgbm90Qm9vbGVhbiA9IGJyYW5jaElmTm90Qm9vbGVh
bihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpCb29sZWFuLCBm
YWxzZSk7CisgICAgICAgIG5vdEJvb2xlYW4ubGluayh0aGlzKTsKKyAgICAgICAgCisgICAgICAg
IGZ1bmN0b3IoVHlwZW9mVHlwZTo6VW5kZWZpbmVkLCB0cnVlKTsKKyAgICB9CiAKICAgICBWZWN0
b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJsb2Nr
Kik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAgZXh0ZXJuICJDIiB7CiAg
ICAgRDogZG91YmxlCiAgICAgRTogRXhlY1N0YXRlKgogICAgIEY6IENhbGxGcmFtZSoKKyAgICBH
OiBKU0dsb2JhbE9iamVjdCoKICAgICBJOiBTdHJpbmdJbXBsKgogICAgIEljZjogSW5saW5lQ2Fs
bEZyYW1lKgogICAgIElkYzogY29uc3QgSWRlbnRpZmllcioKQEAgLTEyNyw2ICsxMjgsNyBAQCB0
eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlCiB0eXBlZGVmIEpTQ2VsbCog
SklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
aW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9u
X0VDWkMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QsIEpTQ2VsbCopOwogdHlwZWRlZiBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9w
ZXJhdGlvbl9FR0MpKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKik7CiB0eXBl
ZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VJY2YpKEV4ZWNTdGF0
ZSosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpD
X0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSnNjKShFeGVjU3RhdGUqLCBK
U1Njb3BlKik7CkBAIC0xNjEsNiArMTYzLDcgQEAgdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJ
T04gKCpaX0pJVE9wZQogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJh
dGlvbl9FSlopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKIHR5cGVkZWYg
aW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRUpaWikoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiBzaXplX3QgSklUX09Q
RVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxs
Kik7Cit0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUdDKShF
eGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopOwogdHlwZWRlZiBzaXplX3QgSklU
X09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSk7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUpKKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBzaXpl
X3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VPSnNzKShFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTU3RyaW5nKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
bWFsbFN0cmluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TbWFsbFN0cmluZ3MuaAkocmV2aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxNSBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDYgKzI2LDcgQEAKICNpZm5kZWYgU21hbGxTdHJpbmdzX2gKICNkZWZpbmUgU21hbGxTdHJpbmdz
X2gKIAorI2luY2x1ZGUgIlR5cGVvZlR5cGUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIK
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIApAQCAtODUsNiArODYsMjkgQEAgcHVibGlj
OgogICAgIH0KICAgICBKU0NfQ09NTU9OX1NUUklOR1NfRUFDSF9OQU1FKEpTQ19DT01NT05fU1RS
SU5HU19BQ0NFU1NPUl9ERUZJTklUSU9OKQogI3VuZGVmIEpTQ19DT01NT05fU1RSSU5HU19BQ0NF
U1NPUl9ERUZJTklUSU9OCisgICAgCisgICAgSlNTdHJpbmcqIHR5cGVTdHJpbmcoVHlwZW9mVHlw
ZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgVHlwZW9mVHlwZTo6VW5kZWZpbmVkOgorICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFN0
cmluZygpOworICAgICAgICBjYXNlIFR5cGVvZlR5cGU6OkJvb2xlYW46CisgICAgICAgICAgICBy
ZXR1cm4gYm9vbGVhblN0cmluZygpOworICAgICAgICBjYXNlIFR5cGVvZlR5cGU6Ok51bWJlcjoK
KyAgICAgICAgICAgIHJldHVybiBudW1iZXJTdHJpbmcoKTsKKyAgICAgICAgY2FzZSBUeXBlb2ZU
eXBlOjpTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nU3RyaW5nKCk7CisgICAgICAg
IGNhc2UgVHlwZW9mVHlwZTo6U3ltYm9sOgorICAgICAgICAgICAgcmV0dXJuIHN5bWJvbFN0cmlu
ZygpOworICAgICAgICBjYXNlIFR5cGVvZlR5cGU6Ok9iamVjdDoKKyAgICAgICAgICAgIHJldHVy
biBvYmplY3RTdHJpbmcoKTsKKyAgICAgICAgY2FzZSBUeXBlb2ZUeXBlOjpGdW5jdGlvbjoKKyAg
ICAgICAgICAgIHJldHVybiBmdW5jdGlvblN0cmluZygpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CiAKICAgICBKU1N0cmluZyogbnVsbE9iamVjdFN0cmluZygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVsbE9iamVjdFN0cmluZzsgfQogICAgIEpTU3RyaW5nKiB1bmRlZmluZWRPYmpl
Y3RTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3VuZGVmaW5lZE9iamVjdFN0cmluZzsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZW9mVHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZW9mVHlwZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBl
b2ZUeXBlLmgiCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZW9mVHlwZSB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZW9mVHlwZTo6VW5kZWZpbmVkOgorICAg
ICAgICBvdXQucHJpbnQoInVuZGVmaW5lZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBU
eXBlb2ZUeXBlOjpCb29sZWFuOgorICAgICAgICBvdXQucHJpbnQoImJvb2xlYW4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9mVHlwZTo6TnVtYmVyOgorICAgICAgICBvdXQucHJp
bnQoIm51bWJlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlb2ZUeXBlOjpTdHJp
bmc6CisgICAgICAgIG91dC5wcmludCgic3RyaW5nIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFR5cGVvZlR5cGU6OlN5bWJvbDoKKyAgICAgICAgb3V0LnByaW50KCJzeW1ib2wiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9mVHlwZTo6T2JqZWN0OgorICAgICAgICBvdXQu
cHJpbnQoIm9iamVjdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlb2ZUeXBlOjpG
dW5jdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCJmdW5jdGlvbiIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlb2ZUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZW9mVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZW9mVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlb2ZUeXBl
X2gKKyNkZWZpbmUgVHlwZW9mVHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gY2xhc3MgVHlwZW9mVHlwZSB7CisgICAgVW5kZWZp
bmVkLAorICAgIEJvb2xlYW4sCisgICAgTnVtYmVyLAorICAgIFN0cmluZywKKyAgICBTeW1ib2ws
CisgICAgT2JqZWN0LAorICAgIEZ1bmN0aW9uICAgIAorfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgSlNDOjpUeXBlb2ZUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBU
eXBlb2ZUeXBlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252217</attachid>
            <date>2015-05-01 21:54:04 -0700</date>
            <delta_ts>2015-05-02 10:50:51 -0700</delta_ts>
            <desc>so close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>65548</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDE1LTA1LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VHlwZU9mIHNob3VsZCBiZSBmYXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDQzOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIEFkZHMgY29tcHJlaGVuc2l2ZSBzdXBwb3J0IGZvciBmYXN0
IHR5cGVvZiB0byB0aGUgb3B0aW1pemluZyBKSVRzLiBDYWxscyBpbnRvIHRoZSBydW50aW1lCisg
ICAgICAgIGFyZSBvbmx5IHVzZWQgZm9yIHZlcnkgZXhvdGljIG9iamVjdHMgLSB0aGV5IG11c3Qg
aGF2ZSBlaXRoZXIgdGhlIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgb3IKKyAgICAgICAgVHlwZU9m
U2hvdWxkQ2FsbEdldENhbGxEYXRhIHR5cGUgZmxhZ3Mgc2V0LiBBbGwgb3RoZXIgY2FzZXMgYXJl
IGhhbmRsZWQgaW5saW5lLgorICAgICAgICAKKyAgICAgICAgVGhpcyBtZWFucyBvcHRpbWl6aW5n
IElzT2JqZWN0T3JOdWxsLCBJc0Z1bmN0aW9uLCBhbmQgVHlwZU9mIC0gYWxsIG5vZGUgdHlwZXMg
dGhhdCB1c2VkIHRvCisgICAgICAgIHJlbHkgaGVhdmlseSBvbiBDKysgY2FsbHMgdG8gZnVsZmls
bCB0aGVpciBmdW5jdGlvbi4KKyAgICAgICAgCisgICAgICAgIEJlY2F1c2UgVHlwZU9mIGlzIG5v
dyBzbyBmYXN0LCB3ZSBubyBsb25nZXIgbmVlZCB0byBkbyBhbnkgc3BlY3VsYXRpb25zIG9uIHRo
aXMgbm9kZS4KKyAgICAgICAgCisgICAgICAgIEluIHRoZSBGVEwsIHdlIHRha2UgdGhpcyBmdXJ0
aGVyIGJ5IHF1ZXJ5aW5nIEFJIGZvciBlYWNoIGJyYW5jaCBpbiB0aGUgVHlwZU9mIGRlY2lzaW9u
IHRyZWUuCisgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgVHlwZU9mIGlzIGRvbWluYXRl
ZCBieSBhbnkgdHlwZSBjaGVja3MsIHdlIHdpbGwgYXV0b21hdGljYWxseSBwcnVuZQorICAgICAg
ICBvdXQgY2FzZXMgdGhhdCB0aGF0IGFyZSByZWR1bmRhbnQuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6
OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdIZWFw
TG9jYXRpb24uY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBk
ZmcvREZHSGVhcExvY2F0aW9uLmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlz
T2JqZWN0T3JOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUlzRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
VHlwZU9mKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Ymxlc3NlZEJvb2xlYW5SZXN1bHQpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBp
bGVJc09iamVjdE9yTnVsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVJc0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZVR5cGVPZik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJ1aWxkVHlw
ZU9mKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aXNFeG90aWNGb3JUeXBl
b2YpOgorICAgICAgICAqIGZ0bC9GVExTd2l0Y2hDYXNlLmg6CisgICAgICAgIChKU0M6OkZUTDo6
U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90RXF1YWwpOgorICAg
ICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmRXF1YWwpOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTnVtYmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpicmFuY2hJZk5vdE51bWJlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6YnJhbmNoSWZCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpi
cmFuY2hJZk5vdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJveEJv
b2xlYW5QYXlsb2FkKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpib3hCb29sZWFu
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VHlwZU9mKToKKyAgICAgICAg
KiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvU21hbGxTdHJpbmdzLmg6
CisgICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6dHlwZVN0cmluZyk6CisgICAgICAgICogcnVu
dGltZS9UeXBlb2ZUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIHJ1bnRpbWUvVHlwZW9mVHlwZS5oOiBBZGRlZC4KKwogMjAxNS0wNS0wMSAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDbGFzcyBzeW50YXgg
c2hvdWxkIGFsbG93IHN0cmluZyBhbmQgbnVtZXJpYyBpZGVudGlmaWVycyBmb3IgbWV0aG9kIG5h
bWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODM3
MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTU4MSw2ICs1ODEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUlVOVElNRV9TT1VSQ0VT
CiAgICAgcnVudGltZS9UeXBlU2V0LmNwcAogICAgIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xs
ZXIuY3BwCiAgICAgcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAKKyAgICBydW50aW1lL1R5cGVv
ZlR5cGUuY3BwCiAgICAgcnVudGltZS9WTS5jcHAKICAgICBydW50aW1lL1ZNRW50cnlTY29wZS5j
cHAKICAgICBydW50aW1lL1Zhck9mZnNldC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtODQxLDYgKzg0MSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFRlc3RSdW5uZXJVdGlscy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheVR5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxUeXBlb2ZUeXBlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZUxvY2F0aW9uQ2FjaGUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlUHJvZmlsZXIuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlUHJvZmlsZXJMb2cuY3BwIiAvPgpAQCAtMTY4OCw2
ICsxNjg5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlw
ZWRBcnJheUlubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
VHlwZWRBcnJheVR5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
VHlwZW9mVHlwZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBl
TG9jYXRpb25DYWNoZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxU
eXBlUHJvZmlsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlw
ZVByb2ZpbGVyTG9nLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcyNiw2ICs3MjYsOCBA
QAogCQkwRkY5MjJENDE0RjQ2QjQxMDA0MUEyNEUgLyogTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEEx
MTRCQTdGODIwMEJGRTI3MiAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3BwICovOyB9OwogCQkw
RkZBNTQ5NzE2Qjg4MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMjE2NTFDNjk3MDBBODBBRkUg
LyogQTY0RE9wY29kZS5jcHAgKi87IH07CiAJCTBGRkE1NDk4MTZCODgzNTMwMEIzQTk4MiAvKiBB
NjRET3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NTJBM0EyMzE2NTFDNjk3MDBBODBBRkUgLyogQTY0RE9wY29kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRkI2QzM4MUFGNDhEREMwMERC
MUJGNyAvKiBUeXBlb2ZUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkI2QzM2MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmNwcCAq
LzsgfTsKKwkJMEZGQjZDMzkxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkI2QzM3MUFGNDhEREMw
MERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMTgxNkQwMkVCMjAwNTVBNURCIC8qIERGR0FsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1
MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFBMTZEMDJFQzUwMDU1QTVEQiAv
KiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZGQjkyMUIxNkQwMkYwMTAwNTVBNURCIC8qIERGR05vZGVBbGxvY2F0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTFGMTZCNjI3NzIw
MDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0NjIsNiArMjQ2NCw4IEBACiAJCTBGRjhCREU4MUFE
NENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRjkyMkNGMTRGNDZCMTMwMDQxQTI0RSAvKiBKU0NMTEludE9m
ZnNldHNFeHRyYWN0b3IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsg
cGF0aCA9IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rvcjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKKwkJMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZW9mVHlwZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkI2QzM3MUFGNDhEREMwMERCMUJGNyAvKiBU
eXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVvZlR5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFC
IC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25z
dGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9p
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQ1MSw5ICs0NDU1LDkgQEAKIAkJCQlCQzlCQjk1
QjBFMTk2ODA2MDBERjg4NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2
N0EwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQk4NkJGNjQy
QTE0OERCMkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8sCisJCQkJRkU0RDU1QjcxQUU3MTZD
QTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovLAogCQkJCTcwMTEzRDQ5MUE4REIwOTMw
MDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLAogCQkJCTcwMTEzRDRBMUE4REIw
OTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLywKLQkJCQlGRTRENTVCNzFBRTcx
NkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggKi8sCiAJCQkJOTNBREZDRTYwQ0NCRDdB
QzAwRDMwQjA4IC8qIEpTQXJyYXkuY3BwICovLAogCQkJCTkzODc3MkU1MDM4QkZFMTkwMDg2MzVD
RSAvKiBKU0FycmF5LmggKi8sCiAJCQkJMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXIuY3BwICovLApAQCAtNDczOSw2ICs0NzQzLDggQEAKIAkJCQkwRjJCNjZERDE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLywKIAkJCQk1MkIzMTBGRTE5NzVCNDI0
MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuY3BwICovLAogCQkJCTUyQjMxMTAwMTk3NUI0
NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oICovLAorCQkJCTBGRkI2QzM2MUFGNDhE
REMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmNwcCAqLywKKwkJCQkwRkZCNkMzNzFBRjQ4RERDMDBE
QjFCRjcgLyogVHlwZW9mVHlwZS5oICovLAogCQkJCTUyQzk1MkI4MTlBMjhBMUMwMDY5QjM4NiAv
KiBUeXBlUHJvZmlsZXIuY3BwICovLAogCQkJCTUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBU
eXBlUHJvZmlsZXIuaCAqLywKIAkJCQkwRjJENERERjE5ODMyRDkxMDA3RDRCMTkgLyogVHlwZVBy
b2ZpbGVyTG9nLmNwcCAqLywKQEAgLTU3MTEsNiArNTcxNyw3IEBACiAJCQkJQkMxOEMzRjQwRTE2
RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0VB
MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZGQjZDMzkxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0NDgzNkU3MTMyREE3QkUwMDVCRTc4NSAvKiBDb25zZXJ2YXRpdmVSb290cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwN0ExODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNz
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3NDE4OUIwMzhDMDA2MzMyMzEgLyogQ29u
c29sZVR5cGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTczNjEsNiArNzM2OCw3IEBACiAJCQkJMTQ3
RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0Y5OTM2MDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkZCNkMzODFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyogSlNQcm9maWxl
clByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMUExN0JFREJEMzAwN0NCNjNB
IC8qIEpTUHJvbWlzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NEUyMjE3QkVFMjQwMDA3
Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgzNzA4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OSw2ICsxNTksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgY2FzZSBHZXRFeGVjdXRhYmxl
OgogICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgY2FzZSBUeXBlT2Y6CiAgICAgICAgIGRlZihQ
dXJlVmFsdWUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIApAQCAtMzYyLDExICsz
NjMsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSXNGdW5jdGlvbkxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQx
KCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIFR5cGVPZjoK
LSAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBl
T2ZMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7Ci0gICAgICAgIHJldHVy
bjsKLQogICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNl
IFB1dEJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NiwxNCArMzQ2LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBUeXBlT2Y6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVDZWxsKCkpCi0gICAgICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0xMjQxLDYgKzEyMzMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhp
bnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToK
KyAgICAgICAgY2FzZSBUeXBlT2Y6CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAg
IGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uY3BwCShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEwICs2OCw2IEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICAgICAgb3V0LnByaW50
KCJJc0Z1bmN0aW9uTG9jIik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY2FzZSBU
eXBlT2ZMb2M6Ci0gICAgICAgIG91dC5wcmludCgiVHlwZU9mTG9jIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCiAgICAgY2FzZSBHZXR0ZXJMb2M6CiAgICAgICAgIG91dC5wcmludCgiR2V0
dGVyTG9jIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyAr
NTMsNiBAQCBlbnVtIExvY2F0aW9uS2luZCB7CiAgICAgTmFtZWRQcm9wZXJ0eUxvYywKICAgICBT
ZXR0ZXJMb2MsCiAgICAgU3RydWN0dXJlTG9jLAotICAgIFR5cGVPZkxvYywKICAgICBUeXBlZEFy
cmF5Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25XYXRjaHBvaW50TG9jLAogICAgIFN0
YWNrTG9jLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjAsMjEgKzg2MCw4NCBAQCBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNPYmplY3RPck51bGwoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk9iamVjdElzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDZWxsKiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIGpzSXNPYmplY3RUeXBlT3JO
dWxsKGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAg
QVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihvYmplY3QpKTsKKyAgICAKKyAgICBpZiAo
b2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGdsb2JhbE9iamVj
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0LT50eXBlKCkgPT0gSlNG
dW5jdGlvblR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0LT5pbmxp
bmVUeXBlRmxhZ3MoKSAmIFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkgeworICAgICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOwogfQogCi1zaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29kZWRKU1ZhbHVlIHZhbHVl
KQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQog
ewotICAgIHJldHVybiBqc0lzRnVuY3Rpb25UeXBlKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworCisgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihvYmpl
Y3QpKTsKKyAgICAKKyAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKGdsb2JhbE9iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
b2JqZWN0LT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGlmIChvYmplY3QtPmlubGluZVR5cGVGbGFncygpICYgVHlwZU9mU2hvdWxkQ2FsbEdldENh
bGxEYXRhKSB7CisgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICBpZiAob2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKG9iamVjdCwgY2FsbERhdGEpICE9IENhbGxU
eXBlTm9uZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2YoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIHZhbHVlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblR5cGVPZk9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIHJldHVybiBqc1R5
cGVTdHJpbmdGb3JWYWx1ZShleGVjLCBKU1ZhbHVlKHZhbHVlKSkuYXNDZWxsKCk7CisKKyAgICBB
U1NFUlQoanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KG9iamVjdCkpOworICAgIAorICAgIGlmIChv
YmplY3QtPnN0cnVjdHVyZSh2bSktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZ2xvYmFsT2JqZWN0
KSkKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKTsKKyAg
ICBpZiAob2JqZWN0LT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUpCisgICAgICAgIHJldHVybiB2
bS5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKTsKKyAgICBpZiAob2JqZWN0LT5pbmxpbmVU
eXBlRmxhZ3MoKSAmIFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkgeworICAgICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKKyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRD
YWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpCisgICAgICAgICAgICBy
ZXR1cm4gdm0uc21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCk7CisgICAgfQorICAgIAorICAg
IHJldHVybiB2bS5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCk7Cit9CisKK2ludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKK3sKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKworICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0
KSk7CisgICAgCisgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKHZtKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChnbG9iYWxPYmplY3QpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJf
dD4oVHlwZW9mVHlwZTo6VW5kZWZpbmVkKTsKKyAgICBpZiAob2JqZWN0LT50eXBlKCkgPT0gSlNG
dW5jdGlvblR5cGUpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZU
eXBlOjpGdW5jdGlvbik7CisgICAgaWYgKG9iamVjdC0+aW5saW5lVHlwZUZsYWdzKCkgJiBUeXBl
T2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpIHsKKyAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Cisg
ICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBj
YWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludDMyX3Q+KFR5cGVvZlR5cGU6OkZ1bmN0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6Ok9iamVjdCk7CiB9CiAKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENh
cGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMywxMCBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlU2NvCiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChFeGVjU3Rh
dGUqLCBJbmxpbmVDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgaW50MzJfdCBhcmd1bWVudENvdW50
KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIGludDMyX3Qg
bGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUpOwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdE9yTnVsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSkgV1RGX0lOVEVSTkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5j
dGlvbihFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblR5cGVPZihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitzaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBK
U0NlbGwqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlw
ZU9mT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikgV1RGX0lOVEVS
TkFMOworaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZk9iamVjdEFzVHlwZW9m
VHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsK
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRo
SW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90
IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHko
RXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlz
aW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMDcsODYgKzQxMDcsMTYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgSXNP
YmplY3RPck51bGw6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsK
LSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAg
ICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklzT2JqZWN0T3JOdWxsLCByZXN1bHRHUFIsIHZh
bHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpOwotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVJc09iamVjdE9yTnVsbChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBJc0Z1bmN0aW9uOiB7Ci0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVn
IHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVBheWxv
YWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0
IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
LSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Jc0Z1bmN0aW9uLCByZXN1bHRHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpOwot
ICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIGNvbXBp
bGVJc0Z1bmN0aW9uKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUeXBl
T2Y6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIEdQUlJlZyB0YWdHUFIgPSB2YWx1
ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BS
KCk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBHUFJSZWcgdGVt
cEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0
aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmVKdW1wczsKLQotICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOwotCi0gICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7
Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkKLSAg
ICAgICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiks
IG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKTsKLQotICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSB8fCBub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3RTdHJpbmcgPSBtX2ppdC5icmFuY2hJZk5vdFN0cmluZyhwYXlsb2FkR1BSKTsKLSAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKQotICAgICAgICAg
ICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5v
ZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nLCBub3RTdHJpbmcpOwotICAgICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmco
KSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAo
KSk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFN0cmluZ1Vz
ZSkgewotICAgICAgICAgICAgICAgIG5vdFN0cmluZy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgcGF5bG9hZEdQ
Uik7Ci0gICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgcGF5bG9hZEdQUik7Ci0gICAgICAgICAgICBkb25l
SnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKLSAgICAgICAgICAgIGlzTm90
Q2VsbC5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgdGFnR1BSLCB0ZW1wR1BSKTsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dE51bWJlciA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIHRlbXBH
UFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOwot
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3Ry
aW5ncy5udW1iZXJTdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBub3ROdW1iZXIubGluaygmbV9qaXQp
OwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RVbmRlZmluZWQgPSBtX2ppdC5i
cmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlVuZGVmaW5lZFRhZykpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKSksIHJlc3VsdEdQUik7
Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAg
ICBub3RVbmRlZmluZWQubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBub3ROdWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB0YWdH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSk7Ci0gICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygp
KSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgp
KTsKLSAgICAgICAgICAgIG5vdE51bGwubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICAvLyBP
bmx5IGJvb2xlYW4gbGVmdAotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1f
aml0LnZtKCktPnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkpLCByZXN1bHRHUFIpOwotICAg
ICAgICB9Ci0gICAgICAgIGRvbmVKdW1wcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZVR5cGVPZihub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxNDgsODIgKzQxNDgsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgSXNPYmplY3RPck51bGw6IHsKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVz
dWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklz
T2JqZWN0T3JOdWxsLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKLSAgICAgICAgbV9qaXQub3IzMihU
cnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgY29t
cGlsZUlzT2JqZWN0T3JOdWxsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBj
YXNlIElzRnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAg
ICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklzRnVuY3Rpb24sIHJlc3VsdEdQUiwgdmFsdWVH
UFIpOwotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOworICAgICAgICBjb21waWxlSXNGdW5jdGlvbihub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBUeXBlT2Y6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJGbHVz
aGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lSnVtcHM7Ci0K
LSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNl
KTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJ
Zk5vdENlbGwoSlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQotICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0so
SlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCwgaXNOb3RD
ZWxsKTsKLQotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3QoKSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RTdHJpbmcgPSBtX2ppdC5icmFuY2hJZk5vdFN0cmlu
Zyh2YWx1ZUdQUik7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IFN0cmluZ1VzZSkKLSAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291cmNl
KHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG5vdFN0cmluZyk7Ci0gICAg
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdz
LnN0cmluZ1N0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBl
bmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgIT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICAgICAgbm90U3RyaW5nLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblR5cGVPZiwgcmVzdWx0
R1BSLCB2YWx1ZUdQUik7Ci0gICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwotICAgICAg
ICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7Ci0gICAgICAg
ICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90TnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCB2YWx1
ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5n
KCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwotICAgICAgICAgICAgbm90TnVtYmVyLmxpbmsoJm1faml0KTsKLQotICAgICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90VW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NChWYWx1ZVVu
ZGVmaW5lZCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZt
KCktPnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAg
ICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBub3RVbmRl
ZmluZWQubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RO
dWxsID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKTsKLSAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkp
LCByZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OwotICAgICAgICAgICAgbm90TnVsbC5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIC8vIE9u
bHkgYm9vbGVhbiBsZWZ0Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9q
aXQudm0oKS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAg
ICAgIH0KLSAgICAgICAgZG9uZUp1bXBzLmxpbmsoJm1faml0KTsKLSAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlVHlwZU9mKG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgx
NSw2ICs0ODE1LDExNSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhO
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc09i
amVjdE9yTnVsbChOb2RlKiBub2RlKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgIAor
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0NlbGwgPSBtX2ppdC5i
cmFuY2hJZkNlbGwodmFsdWVSZWdzKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc051
bGwgPSBtX2ppdC5icmFuY2hJZkVxdWFsKHZhbHVlUmVncywganNOdWxsKCkpOworICAgIEpJVENv
bXBpbGVyOjpKdW1wIGlzTm9uTnVsbE5vbkNlbGwgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAg
aXNDZWxsLmxpbmsoJm1faml0KTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0Z1bmN0aW9uID0g
bV9qaXQuYnJhbmNoSWZGdW5jdGlvbih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RPYmplY3QgPSBtX2ppdC5icmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9
IG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKKyAgICAg
ICAgSklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCB8IFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkpOworICAgIAorICAgIGlz
TnVsbC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAK
KyAgICBpc05vbk51bGxOb25DZWxsLmxpbmsoJm1faml0KTsKKyAgICBpc0Z1bmN0aW9uLmxpbmso
Jm1faml0KTsKKyAgICBub3RPYmplY3QubGluaygmbV9qaXQpOworICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3Bl
cmF0aW9uT2JqZWN0SXNPYmplY3QsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0LAorICAgICAgICAg
ICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgIAorICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgIAorICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzRnVuY3Rpb24oTm9kZSogbm9kZSkKK3sK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdz
ID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgCisgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3Mp
OworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzRnVuY3Rpb24gPSBtX2ppdC5icmFuY2hJZkZ1bmN0
aW9uKHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE9i
amVjdCA9IG1faml0LmJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwor
ICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoVGVzdDgo
CisgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAorICAgICAgICBKSVRDb21waWxlcjo6QWRk
cmVzcyh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksCisgICAgICAgIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgVHlwZU9m
U2hvdWxkQ2FsbEdldENhbGxEYXRhKSk7CisgICAgCisgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7
CisgICAgbm90T2JqZWN0LmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOworICAgIAorICAgIGlzRnVuY3Rpb24ubGluaygmbV9qaXQpOworICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywg
b3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbiwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3QsCisgICAg
ICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgCisgICAgZG9uZS5saW5rKCZt
X2ppdCk7CisgICAgCisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVHlwZU9mKE5vZGUqIG5vZGUpCit7
CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgCisgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIAorICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOworICAgIG1faml0LmVtaXRUeXBlT2YoCisgICAgICAg
IHZhbHVlUmVncywgcmVzdWx0R1BSLAorICAgICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSwgYm9v
bCBmYWxsc1Rocm91Z2gpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0ciht
X2ppdC52bSgpLT5zbWFsbFN0cmluZ3MudHlwZVN0cmluZyh0eXBlKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBpZiAoIWZhbGxzVGhyb3VnaCkKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9LAorICAgICAgICBbJl0gKEpJVENvbXBpbGVyOjpK
dW1wIHNsb3dQYXRoKSB7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLCB0
aGlzLCBvcGVyYXRpb25UeXBlT2ZPYmplY3QsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0LAorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgICAgIH0pOwor
ICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIAorICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlv
dXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4MzcwOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtNzkyLDEzICs3OTIsNyBAQCBwdWJsaWM6CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZWcsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIG1vZGUpOwog
I2Vsc2UKLSAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQotICAgICAgICAgICAg
dXNlQ2hpbGRyZW4obm9kZSk7Ci0KLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICBtX2dwcnMucmV0YWluKHJl
ZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQm9vbGVhbik7Ci0gICAgICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxS
ZWdpc3Rlcik7Ci0gICAgICAgIGluZm8uaW5pdEJvb2xlYW4obm9kZSwgbm9kZS0+cmVmQ291bnQo
KSwgcmVnKTsKKyAgICAgICAgYm9vbGVhblJlc3VsdChyZWcsIG5vZGUsIG1vZGUpOwogI2VuZGlm
CiAgICAgfQogICAgIHZvaWQgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChHUFJSZWcgcmVnLCBOb2Rl
KiBub2RlLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKQEAgLTEwNjAs
NiArMTA1NCwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VHQyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEdQUlJlZyBhcmcy
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0
ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VHQyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEdQ
UlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgYXJnMik7CisgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
KyAgICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpzc19KSVRPcGVy
YXRpb25fRVogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKQEAgLTIyMTQs
NiArMjIyMCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVu
dHMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqKTsKICAgICBib29s
IGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVs
bChOb2RlKik7CisgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbihOb2RlKik7CisgICAgdm9pZCBj
b21waWxlVHlwZU9mKE5vZGUqKTsKICAgICAKICAgICB2b2lkIG1vdmVUcnVlVG8oR1BSUmVnKTsK
ICAgICB2b2lkIG1vdmVGYWxzZVRvKEdQUlJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4OSw2ICsxODksNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9k
ZSogCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKICAgICBjYXNlIFN3aXRjaDoKKyAgICBjYXNlIFR5cGVPZjoKICAgICAgICAgLy8gVGhlc2Ug
YXJlIE9LLgogICAgICAgICBicmVhazsKICAgICBjYXNlIElkZW50aXR5OgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJl
dmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2lj
UmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhDX0pJVE9wZXJhdGlvbl9FQywgZnVuY3Rp
b25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oQ19KSVRPcGVyYXRp
b25fRUNaLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0ciwgaW50MzIpKSBcCiAg
ICAgbWFjcm8oQ19KSVRPcGVyYXRpb25fRUNaQywgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRy
LCBpbnRQdHIsIGludDMyLCBpbnRQdHIpKSBcCisgICAgbWFjcm8oQ19KSVRPcGVyYXRpb25fRUdD
LCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1h
Y3JvKENfSklUT3BlcmF0aW9uX0VKLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludDY0
KSkgXAogICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VKc3NKc3MsIGZ1bmN0aW9uVHlwZShpbnRQ
dHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oQ19KSVRPcGVyYXRpb25f
RUpzc0pzc0pzcywgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0ciwg
aW50UHRyKSkgXApAQCAtOTcsNiArOTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAgICAgbWFjcm8oUF9KSVRPcGVyYXRpb25fRVN0WiwgZnVuY3Rpb25UeXBlKGludFB0ciwg
aW50UHRyLCBpbnRQdHIsIGludDMyKSkgXAogICAgIG1hY3JvKFFfSklUT3BlcmF0aW9uX0QsIGZ1
bmN0aW9uVHlwZShpbnQ2NCwgZG91YmxlVHlwZSkpIFwKICAgICBtYWNybyhRX0pJVE9wZXJhdGlv
bl9KLCBmdW5jdGlvblR5cGUoaW50NjQsIGludDY0KSkgXAorICAgIG1hY3JvKFNfSklUT3BlcmF0
aW9uX0VHQywgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwK
ICAgICBtYWNybyhTX0pJVE9wZXJhdGlvbl9FSiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRy
LCBpbnQ2NCkpIFwKICAgICBtYWNybyhTX0pJVE9wZXJhdGlvbl9FSkosIGZ1bmN0aW9uVHlwZShp
bnRQdHIsIGludFB0ciwgaW50NjQsIGludDY0KSkgXAogICAgIG1hY3JvKFNfSklUT3BlcmF0aW9u
X0osIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludDY0KSkgXApAQCAtMTEyLDYgKzExNCw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9a
LCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyKSkgXAogICAgIG1hY3JvKFpfSklUT3BlcmF0
aW9uX0QsIGZ1bmN0aW9uVHlwZShpbnQzMiwgZG91YmxlVHlwZSkpIFwKICAgICBtYWNybyhaX0pJ
VE9wZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBlKGludDMyLCBpbnRQdHIsIGludFB0cikpIFwKKyAg
ICBtYWNybyhaX0pJVE9wZXJhdGlvbl9FR0MsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBp
bnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9FSlosIGZ1bmN0aW9u
VHlwZShpbnQzMiwgaW50UHRyLCBpbnQ2NCwgaW50MzIpKSBcCiAgICAgbWFjcm8oWl9KSVRPcGVy
YXRpb25fRVNKc3MsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIsIGludDY0KSkg
XAogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTYsNiArNzk2LDkg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJc0Z1bmN0aW9uOgogICAgICAgICAgICAgY29tcGls
ZUlzRnVuY3Rpb24oKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVPZjoK
KyAgICAgICAgICAgIGNvbXBpbGVUeXBlT2YoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tIYXNJbnN0
YW5jZSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00NjIzLDE2ICs0NjI2LDExNyBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51bGwoKQogICAgIHsKLSAgICAgICAg
TFZhbHVlIHBvaW50ZXJSZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uSXNPYmplY3RPck51bGwpLCBtX2NhbGxGcmFtZSwgbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKSk7Ci0gICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90TnVsbChwb2ludGVy
UmVzdWx0KSk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIAorICAg
ICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SlNWYWx1ZShjaGlsZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjZWxs
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgY2VsbCBjYXNlIikp
OworICAgICAgICBMQmFzaWNCbG9jayBub3RGdW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIklzT2JqZWN0T3JOdWxsIG5vdCBmdW5jdGlvbiBjYXNlIikpOworICAgICAgICBMQmFz
aWNCbG9jayBvYmplY3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVs
bCBvYmplY3QgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JO
dWxsIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgY29udGludWF0aW9uIikpOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShj
aGlsZCkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKyAgICAgICAg
CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2Us
IG5vdEZ1bmN0aW9uQ2FzZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGlzRnVuY3Rpb25SZXN1
bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgaXNGdW5jdGlvbih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAor
ICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RGdW5jdGlvbkNhc2Up
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEZ1bmN0aW9uQ2FzZSwgb2Jq
ZWN0Q2FzZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdE9iamVjdFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICBpc09iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAgICAgICAgICAg
dW5zdXJlKG9iamVjdENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgIAorICAg
ICAgICBtX291dC5hcHBlbmRUbyhvYmplY3RDYXNlLCBzbG93UGF0aCk7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG9iamVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzRXhvdGljRm9yVHlwZW9mKHZh
bHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCisgICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1
c3VhbGx5KGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c2xvd1BhdGgsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9
IHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25PYmplY3RJc09i
amVjdCksIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAorICAgICAgICAg
ICAgdmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5j
aG9yKHNsb3dSZXN1bHRWYWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRp
b24pOworICAgICAgICBMVmFsdWUgbm90Q2VsbFJlc3VsdFZhbHVlID0gbV9vdXQuZXF1YWwodmFs
dWUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG5vdENlbGxSZXN1
bHRWYWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKAorICAgICAgICAgICAgbV9vdXQuYm9vbGVhbiwKKyAg
ICAgICAgICAgIGlzRnVuY3Rpb25SZXN1bHQsIG5vdE9iamVjdFJlc3VsdCwgb2JqZWN0UmVzdWx0
LCBzbG93UmVzdWx0LCBub3RDZWxsUmVzdWx0KTsKKyAgICAgICAgc2V0Qm9vbGVhbihyZXN1bHQp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIExWYWx1ZSBwb2ludGVyUmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbklzRnVuY3Rpb24pLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkp
KTsKLSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3ROdWxsKHBvaW50ZXJSZXN1bHQpKTsKKyAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgCisgICAgICAgIEVkZ2UgY2hp
bGQgPSBtX25vZGUtPmNoaWxkMSgpOworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVl
KGNoaWxkKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJJc0Z1bmN0aW9uIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgbm90RnVuY3Rpb25DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc0Z1bmN0aW9u
IG5vdCBmdW5jdGlvbiBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBzbG93IHBhdGgiKSk7CisgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlv
biBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RD
ZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkp
LCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgIAorICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RG
dW5jdGlvbkNhc2UpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBmdW5jdGlvblJlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAg
ICAgICAgICAgIGlzRnVuY3Rpb24odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKKyAgICAgICAg
ICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90RnVuY3Rpb25DYXNlKSk7CisgICAg
ICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhub3RGdW5jdGlvbkNhc2UsIHNsb3dQYXRoKTsK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgb2JqZWN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0
LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzRXhv
dGljRm9yVHlwZW9mKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCisgICAgICAgICAgICByYXJl
bHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIExWYWx1ZSBz
bG93UmVzdWx0VmFsdWUgPSB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uT2JqZWN0SXNGdW5jdGlvbiksIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLAorICAgICAgICAgICAgdmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKAor
ICAgICAgICAgICAgbV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJlc3VsdCwgZnVuY3Rpb25SZXN1bHQs
IG9iamVjdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlVHlwZU9mKCkKKyAgICB7CisgICAgICAgIEVk
Z2UgY2hpbGQgPSBtX25vZGUtPmNoaWxkMSgpOworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dK
U1ZhbHVlKGNoaWxkKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVHlwZU9mIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29u
dGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaz4gcmVz
dWx0czsKKyAgICAgICAgCisgICAgICAgIGJ1aWxkVHlwZU9mKAorICAgICAgICAgICAgY2hpbGQs
IHZhbHVlLAorICAgICAgICAgICAgWyZdIChUeXBlb2ZUeXBlIHR5cGUpIHsKKyAgICAgICAgICAg
ICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iod2Vha1BvaW50ZXIodm0oKS5zbWFsbFN0
cmluZ3MudHlwZVN0cmluZyh0eXBlKSkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LnBoaShtX291dC5pbnQ2NCwgcmVzdWx0cykpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBp
bGVJbigpCkBAIC02MzU2LDYgKzY0NjAsMTQwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBXZWln
aHQoZGF0YS0+ZmFsbFRocm91Z2guY291bnQpKTsKICAgICB9CiAgICAgCisgICAgLy8gQ2FsbHMg
dGhlIGZ1bmN0b3IgYXQgdGhlIHBvaW50IG9mIGNvZGUgZ2VuZXJhdGlvbiB3aGVyZSB3ZSBrbm93
IHdoYXQgdGhlIHJlc3VsdCB0eXBlIGlzLgorICAgIC8vIFlvdSBjYW4gZW1pdCB3aGF0ZXZlciBj
b2RlIHlvdSBsaWtlIGF0IHRoYXQgcG9pbnQuIEV4cGVjdHMgeW91IHRvIHRlcm1pbmF0ZSB0aGUg
YmFzaWMgYmxvY2suCisgICAgLy8gV2hlbiBidWlsZFR5cGVPZigpIHJldHVybnMsIGl0IHdpbGwg
aGF2ZSB0ZXJtaW5hdGVkIGFsbCBiYXNpYyBibG9ja3MgdGhhdCBpdCBjcmVhdGVkLiBTbywgaWYK
KyAgICAvLyB5b3UgYXJlbid0IHVzaW5nIHRoaXMgYXMgdGhlIHRlcm1pbmF0b3Igb2YgYSBoaWdo
LWxldmVsIGJsb2NrLCB5b3Ugc2hvdWxkIGNyZWF0ZSB5b3VyIG93bgorICAgIC8vIGNvbnRpbmF0
aW9uIGFuZCBzZXQgaXQgYXMgdGhlIG5leHRCbG9jayAobV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVm
b3JlKGNvbnRpbnVhdGlvbikpIGJlZm9yZQorICAgIC8vIGNhbGxpbmcgdGhpcy4gRm9yIGV4YW1w
bGU6CisgICAgLy8KKyAgICAvLyBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIk15IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAvLyBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pOworICAgIC8v
IGJ1aWxkVHlwZU9mKAorICAgIC8vICAgICBjaGlsZCwgdmFsdWUsCisgICAgLy8gICAgIFsmXSAo
VHlwZW9mVHlwZSB0eXBlKSB7CisgICAgLy8gICAgICAgICAgZG8gdGhpbmdzOworICAgIC8vICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAvLyAgICAgfSk7CisgICAgLy8g
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGJ1aWxkVHlwZU9mKEVkZ2UgY2hpbGQsIExWYWx1ZSB2
YWx1ZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CisgICAgICAgIAorICAgICAgICAvLyBJbXBsZW1lbnRzIHRoZSBmb2xsb3dp
bmcgYnJhbmNoaW5nIHN0cnVjdHVyZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaWYgKGlzIGNl
bGwpIHsKKyAgICAgICAgLy8gICAgIGlmIChpcyBvYmplY3QpIHsKKyAgICAgICAgLy8gICAgICAg
ICBpZiAoaXMgZnVuY3Rpb24pIHsKKyAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uOworICAgICAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAoZG9lc24ndCBoYXZlIGNhbGwgdHJh
cCBhbmQgZG9lc24ndCBtYXNxdWVyYWRlIGFzIHVuZGVmaW5lZCkgeworICAgICAgICAvLyAgICAg
ICAgICAgICByZXR1cm4gb2JqZWN0CisgICAgICAgIC8vICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gICAgICAgICAgICAgcmV0dXJuIHNsb3dQYXRoKCk7CisgICAgICAgIC8vICAgICAgICAg
fQorICAgICAgICAvLyAgICAgfSBlbHNlIGlmIChpcyBzdHJpbmcpIHsKKyAgICAgICAgLy8gICAg
ICAgICByZXR1cm4gc3RyaW5nCisgICAgICAgIC8vICAgICB9IGVsc2UgeworICAgICAgICAvLyAg
ICAgICAgIHJldHVybiBzeW1ib2wKKyAgICAgICAgLy8gICAgIH0KKyAgICAgICAgLy8gfSBlbHNl
IGlmIChpcyBudW1iZXIpIHsKKyAgICAgICAgLy8gICAgIHJldHVybiBudW1iZXIKKyAgICAgICAg
Ly8gfSBlbHNlIGlmIChpcyBudWxsKSB7CisgICAgICAgIC8vICAgICByZXR1cm4gb2JqZWN0Cisg
ICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgYm9vbGVhbikgeworICAgICAgICAvLyAgICAgcmV0dXJu
IGJvb2xlYW4KKyAgICAgICAgLy8gfSBlbHNlIHsKKyAgICAgICAgLy8gICAgIHJldHVybiB1bmRl
ZmluZWQKKyAgICAgICAgLy8gfQorICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIGNlbGwgY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgb2JqZWN0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVp
bGRUeXBlT2Ygb2JqZWN0IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGZ1bmN0aW9uQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgZnVuY3Rpb24gY2FzZSIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgbm90RnVuY3Rpb25DYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJidWlsZFR5cGVPZiBub3QgZnVuY3Rpb24gY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgcmVhbGx5T2JqZWN0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Yg
cmVhbGx5IG9iamVjdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygc2xvdyBwYXRoIikpOworICAgICAgICBM
QmFzaWNCbG9jayB1bnJlYWNoYWJsZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBl
T2YgdW5yZWFjaGFibGUiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdE9iamVjdENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG5vdCBvYmplY3QgY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgc3RyaW5nQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVp
bGRUeXBlT2Ygc3RyaW5nIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHN5bWJvbENhc2Ug
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIHN5bWJvbCBjYXNlIikpOworICAg
ICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVp
bGRUeXBlT2Ygbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbnVtYmVyQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgbnVtYmVyIGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIG5vdE51bWJlckNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImJ1aWxkVHlwZU9mIG5vdCBudW1iZXIgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90
TnVsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG5vdCBudWxsIGNh
c2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJvb2xlYW5DYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJidWlsZFR5cGVPZiBib29sZWFuIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IHVuZGVmaW5lZENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIHVuZGVm
aW5lZCBjYXNlIikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1
ZSwgcHJvdmVuVHlwZShjaGlsZCkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENh
c2UpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oY2VsbENhc2UsIG9iamVjdENhc2UpOworICAgICAgICBtX291dC5icmFuY2goaXNPYmpl
Y3QodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKG9iamVjdENhc2UpLCB1bnN1cmUo
bm90T2JqZWN0Q2FzZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ob2JqZWN0
Q2FzZSwgZnVuY3Rpb25DYXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
aXNGdW5jdGlvbih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkgJiBTcGVjT2JqZWN0KSwKKyAgICAg
ICAgICAgIHVuc3VyZShmdW5jdGlvbkNhc2UpLCB1bnN1cmUobm90RnVuY3Rpb25DYXNlKSk7Cisg
ICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhmdW5jdGlvbkNhc2UsIG5vdEZ1bmN0aW9u
Q2FzZSk7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6RnVuY3Rpb24pOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RnVuY3Rpb25DYXNlLCByZWFsbHlPYmplY3RDYXNl
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNFeG90aWNGb3JUeXBlb2Yo
dmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgKFNwZWNPYmplY3QgLSBTcGVjRnVuY3Rpb24pKSwK
KyAgICAgICAgICAgIHVzdWFsbHkocmVhbGx5T2JqZWN0Q2FzZSksIHJhcmVseShzbG93UGF0aCkp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ocmVhbGx5T2JqZWN0Q2FzZSwgc2xv
d1BhdGgpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok9iamVjdCk7CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgdW5yZWFjaGFibGUpOworICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gdm1DYWxsKAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvblR5cGVPZk9iamVjdEFzVHlwZW9mVHlwZSksIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgdmFsdWUpOworICAgICAgICBWZWN0b3I8U3dpdGNo
Q2FzZSwgMz4gY2FzZXM7CisgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fb3V0LmNv
bnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVHlwZW9mVHlwZTo6VW5kZWZpbmVkKSksIHVu
ZGVmaW5lZENhc2UpKTsKKyAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQuY29u
c3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpPYmplY3QpKSwgcmVhbGx5
T2JqZWN0Q2FzZSkpOworICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX291dC5jb25z
dEludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6OkZ1bmN0aW9uKSksIGZ1bmN0
aW9uQ2FzZSkpOworICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbihyZXN1bHQsIGNhc2Vz
LCB1bnJlYWNoYWJsZSwgV2VpZ2h0KCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8odW5yZWFjaGFibGUsIG5vdE9iamVjdENhc2UpOworICAgICAgICBtX291dC51bnJlYWNoYWJs
ZSgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90T2JqZWN0Q2FzZSwgc3Ry
aW5nQ2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzU3RyaW5nKHZh
bHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIChTcGVjQ2VsbCAtIFNwZWNPYmplY3QpKSwKKyAgICAg
ICAgICAgIHVuc3VyZShzdHJpbmdDYXNlKSwgdW5zdXJlKHN5bWJvbENhc2UpKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN0cmluZ0Nhc2UsIHN5bWJvbENhc2UpOworICAgICAg
ICBmdW5jdG9yKFR5cGVvZlR5cGU6OlN0cmluZyk7CisgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhzeW1ib2xDYXNlLCBub3RDZWxsQ2FzZSk7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9m
VHlwZTo6U3ltYm9sKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxD
YXNlLCBudW1iZXJDYXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNO
dW1iZXIodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgflNwZWNDZWxsKSwKKyAgICAgICAgICAg
IHVuc3VyZShudW1iZXJDYXNlKSwgdW5zdXJlKG5vdE51bWJlckNhc2UpKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdE51bWJlckNhc2UsIG5vdE51bGxDYXNlKTsKKyAgICAg
ICAgTFZhbHVlIGlzTnVsbDsKKyAgICAgICAgaWYgKHByb3ZlblR5cGUoY2hpbGQpICYgU3BlY090
aGVyKQorICAgICAgICAgICAgaXNOdWxsID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0
SW50NjQoVmFsdWVOdWxsKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlzTnVsbCA9IG1f
b3V0LmJvb2xlYW5GYWxzZTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTnVsbCwgdW5zdXJlKHJl
YWxseU9iamVjdENhc2UpLCB1bnN1cmUobm90TnVsbENhc2UpKTsKKyAgICAgICAgCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5vdE51bGxDYXNlLCBib29sZWFuQ2FzZSk7CisgICAgICAgIG1fb3V0
LmJyYW5jaCgKKyAgICAgICAgICAgIGlzQm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkg
JiB+KFNwZWNDZWxsIHwgU3BlY0Z1bGxOdW1iZXIpKSwKKyAgICAgICAgICAgIHVuc3VyZShib29s
ZWFuQ2FzZSksIHVuc3VyZSh1bmRlZmluZWRDYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhib29sZWFuQ2FzZSwgdW5kZWZpbmVkQ2FzZSk7CisgICAgICAgIGZ1bmN0b3Io
VHlwZW9mVHlwZTo6Qm9vbGVhbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyh1
bmRlZmluZWRDYXNlLCBsYXN0TmV4dCk7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6VW5k
ZWZpbmVkKTsKKyAgICB9CisgICAgCiAgICAgTFZhbHVlIGRvdWJsZVRvSW50MzIoTFZhbHVlIGRv
dWJsZVZhbHVlLCBkb3VibGUgbG93LCBkb3VibGUgaGlnaCwgYm9vbCBpc1NpZ25lZCA9IHRydWUp
CiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBncmVhdEVub3VnaCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiZG91YmxlVG9JbnQzMiBncmVhdEVub3VnaCIpKTsKQEAgLTcxNzcsNiArNzQxNSwx
NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAgcmV0dXJu
IGlzTm90VHlwZShjZWxsLCBKU0Z1bmN0aW9uVHlwZSk7CiAgICAgfQorICAgICAgICAgICAgCisg
ICAgTFZhbHVlIGlzRXhvdGljRm9yVHlwZW9mKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0
eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoISh0eXBlICYgU3BlY09iamVj
dE90aGVyKSkKKyAgICAgICAgICAgIHJldHVybiBtX291dC5ib29sZWFuRmFsc2U7CisgICAgICAg
IHJldHVybiBtX291dC50ZXN0Tm9uWmVybzgoCisgICAgICAgICAgICBtX291dC5sb2FkOChjZWxs
LCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50OChNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRh
KSk7CisgICAgfQogICAgIAogICAgIExWYWx1ZSBpc1R5cGUoTFZhbHVlIGNlbGwsIEpTVHlwZSB0
eXBlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3dpdGNoQ2Fz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3dpdGNoQ2Fz
ZS5oCShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN3
aXRjaENhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgIH0KIAotICAgIFN3aXRjaENhc2UoTFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9jayB0YXJnZXQs
IFdlaWdodCB3ZWlnaHQpCisgICAgU3dpdGNoQ2FzZShMVmFsdWUgdmFsdWUsIExCYXNpY0Jsb2Nr
IHRhcmdldCwgV2VpZ2h0IHdlaWdodCA9IFdlaWdodCgpKQogICAgICAgICA6IG1fdmFsdWUodmFs
dWUpCiAgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQogICAgICAgICAsIG1fd2VpZ2h0KHdlaWdo
dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAko
cmV2aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdQUklu
Zm8uaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIK
KyNpbmNsdWRlICJUeXBlb2ZUeXBlLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC0zNjcsNiArMzY4LDM2IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmVQdHIodGFnLCBB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAqIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKCkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICB9
CiAjZW5kaWYKKyAgICAKKyAgICBKdW1wTGlzdCBicmFuY2hJZk5vdEVxdWFsKEpTVmFsdWVSZWdz
IHJlZ3MsIEpTVmFsdWUgdmFsdWUpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
IHJldHVybiBicmFuY2g2NChOb3RFcXVhbCwgcmVncy5ncHIoKSwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSkpKTsKKyNlbHNlCisgICAgICAgIEp1bXBMaXN0IHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChOb3RFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMy
KHZhbHVlLnRhZygpKSk7CisgICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkgfHwgdmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7IC8vIFRoZXNlIGRv
bid0IGhhdmUgYW55dGhpbmcgaW50ZXJlc3RpbmcgaW4gdGhlIHBheWxvYWQuCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoTm90RXF1YWwsIHJlZ3MucGF5bG9hZEdQUigpLCBUcnVzdGVkSW1tMzIodmFs
dWUucGF5bG9hZCgpKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYKKyAgICB9Cisg
ICAgCisgICAgSnVtcCBicmFuY2hJZkVxdWFsKEpTVmFsdWVSZWdzIHJlZ3MsIEpTVmFsdWUgdmFs
dWUpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJldHVybiBicmFuY2g2NChF
cXVhbCwgcmVncy5ncHIoKSwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpKTsK
KyNlbHNlCisgICAgICAgIEp1bXAgbm90RXF1YWw7CisgICAgICAgIC8vIFRoZXNlIGRvbid0IGhh
dmUgYW55dGhpbmcgaW50ZXJlc3RpbmcgaW4gdGhlIHBheWxvYWQuCisgICAgICAgIGlmICghdmFs
dWUuaXNFbXB0eSgpICYmICF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAg
bm90RXF1YWwgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVncy5wYXlsb2FkR1BSKCksIFRydXN0ZWRJ
bW0zMih2YWx1ZS5wYXlsb2FkKCkpKTsKKyAgICAgICAgSnVtcCByZXN1bHQgPSBicmFuY2gzMihF
cXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKHZhbHVlLnRhZygpKSk7CisgICAgICAg
IGlmIChub3RFcXVhbC5pc1NldCgpKQorICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorICAgIH0KIAogICAgIEp1bXAgYnJhbmNo
SWZOb3RDZWxsKEdQUlJlZyByZWcpCiAgICAgewpAQCAtNDI2LDYgKzQ1Nyw1NCBAQCBwdWJsaWM6
CiAjZW5kaWYKICAgICB9CiAgICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSB0ZW1wR1BSIGlzIG5v
dCB1c2VkIGluIDY0LWJpdCBtb2RlLgorICAgIEp1bXAgYnJhbmNoSWZOdW1iZXIoSlNWYWx1ZVJl
Z3MgcmVncywgR1BSUmVnIHRlbXBHUFIpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIFVOVVNFRF9QQVJBTSh0ZW1wR1BSKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChO
b25aZXJvLCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworI2Vs
c2UKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdzLnRhZ0dQUigpLCB0ZW1wR1BS
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEJlbG93LCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOworI2VuZGlmCisgICAgfQorICAgIAorICAgIC8vIE5v
dGUgdGhhdCB0aGUgdGVtcEdQUiBpcyBub3QgdXNlZCBpbiA2NC1iaXQgbW9kZS4KKyAgICBKdW1w
IGJyYW5jaElmTm90TnVtYmVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQorICAg
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBVTlVTRURfUEFSQU0odGVtcEdQUik7Cisg
ICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoWmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKKyNlbHNlCisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgcmVncy50YWdHUFIoKSwgdGVtcEdQUik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSk7
CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhlIHRlbXBHUFIgaXMgbm90IHVz
ZWQgaW4gMzItYml0IG1vZGUuCisgICAgSnVtcCBicmFuY2hJZkJvb2xlYW4oSlNWYWx1ZVJlZ3Mg
cmVncywgR1BSUmVnIHRlbXBHUFIpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
IG1vdmUocmVncy5ncHIoKSwgdGVtcEdQUik7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHRlbXBHUFIpOworICAgICAgICByZXR1
cm4gYnJhbmNoVGVzdDY0KFplcm8sIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgcmVn
cy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKKyNlbmRpZgor
ICAgIH0KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIHRlbXBHUFIgaXMgbm90IHVzZWQgaW4g
MzItYml0IG1vZGUuCisgICAgSnVtcCBicmFuY2hJZk5vdEJvb2xlYW4oSlNWYWx1ZVJlZ3MgcmVn
cywgR1BSUmVnIHRlbXBHUFIpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1v
dmUocmVncy5ncHIoKSwgdGVtcEdQUik7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHRlbXBHUFIpOworICAgICAgICByZXR1cm4g
YnJhbmNoVGVzdDY0KE5vblplcm8sIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwg
cmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKKyNlbmRp
ZgorICAgIH0KKyAgICAKICAgICBKdW1wIGJyYW5jaElmT2JqZWN0KEdQUlJlZyBjZWxsR1BSKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoCkBAIC03MDcsNiArNzg2LDIzIEBAIHB1Ymxp
YzoKICAgICB9CiAjZW5kaWYKICAgICAKKyAgICB2b2lkIGJveEJvb2xlYW5QYXlsb2FkKEdQUlJl
ZyBib29sR1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCBib29sR1BSLCBwYXlsb2Fk
R1BSKTsKKyNlbHNlCisgICAgICAgIG1vdmUoYm9vbEdQUiwgcGF5bG9hZEdQUik7CisjZW5kaWYK
KyAgICB9CisKKyAgICB2b2lkIGJveEJvb2xlYW4oR1BSUmVnIGJvb2xHUFIsIEpTVmFsdWVSZWdz
IGJveGVkUmVncykKKyAgICB7CisgICAgICAgIGJveEJvb2xlYW5QYXlsb2FkKGJvb2xHUFIsIGJv
eGVkUmVncy5wYXlsb2FkR1BSKCkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCBib3hlZFJlZ3MudGFnR1BSKCkp
OworI2VuZGlmCisgICAgfQorICAgIAogICAgIHZvaWQgY2FsbEV4Y2VwdGlvbkZ1enooKTsKICAg
ICAKICAgICBlbnVtIEV4Y2VwdGlvbkNoZWNrS2luZCB7IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBJ
bnZlcnRlZEV4Y2VwdGlvbkNoZWNrIH07CkBAIC04NDMsNiArOTM5LDgyIEBAIHB1YmxpYzoKICAg
ICAgICAgdWludDhfdCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGNlbGwp
ICsgSlNDZWxsOjpnY0RhdGFPZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q4KE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKGFk
ZHJlc3MpKTsKICAgICB9CisgICAgCisgICAgLy8gRW1pdHMgdGhlIGJyYW5jaCBzdHJ1Y3R1cmUg
Zm9yIHR5cGVvZi4gVGhlIGNvZGUgZW1pdHRlZCBieSB0aGlzIGRvZXNuJ3QgZmFsbCB0aHJvdWdo
LiBUaGUKKyAgICAvLyBmdW5jdG9yIGlzIGNhbGxlZCBhdCB0aG9zZSBwb2ludHMgd2hlcmUgd2Ug
aGF2ZSBwaW5wb2ludGVkIGEgdHlwZS4gT25lIHdheSB0byB1c2UgdGhpcyBpcyB0bworICAgIC8v
IGhhdmUgdGhlIGZ1bmN0b3IgZW1pdCB0aGUgY29kZSB0byBwdXQgdGhlIHR5cGUgc3RyaW5nIGlu
dG8gYW4gYXBwcm9wcmlhdGUgcmVnaXN0ZXIgYW5kIHRoZW4KKyAgICAvLyBqdW1wIG91dC4gQSBz
ZWNvbmRhcnkgZnVuY3RvciBpcyB1c2VkIGZvciB0aGUgY2FsbCB0cmFwIGFuZCBtYXNxdWVyYWRl
cy1hcy11bmRlZmluZWQgc2xvdworICAgIC8vIGNhc2UuIEl0IGlzIHBhc3NlZCB0aGUgdW5saW5r
ZWQganVtcCB0byB0aGUgc2xvdyBjYXNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3Is
IHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rvcj4KKyAgICB2b2lkIGVtaXRUeXBlT2YoCisgICAgICAg
IEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9y
LAorICAgICAgICBjb25zdCBTbG93UGF0aEZ1bmN0b3ImIHNsb3dQYXRoRnVuY3RvcikKKyAgICB7
CisgICAgICAgIC8vIEltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBicmFuY2hpbmcgc3RydWN0dXJl
OgorICAgICAgICAvLworICAgICAgICAvLyBpZiAoaXMgY2VsbCkgeworICAgICAgICAvLyAgICAg
aWYgKGlzIG9iamVjdCkgeworICAgICAgICAvLyAgICAgICAgIGlmIChpcyBmdW5jdGlvbikgewor
ICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247CisgICAgICAgIC8vICAgICAg
ICAgfSBlbHNlIGlmIChkb2Vzbid0IGhhdmUgY2FsbCB0cmFwIGFuZCBkb2Vzbid0IG1hc3F1ZXJh
ZGUgYXMgdW5kZWZpbmVkKSB7CisgICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBvYmplY3QK
KyAgICAgICAgLy8gICAgICAgICB9IGVsc2UgeworICAgICAgICAvLyAgICAgICAgICAgICByZXR1
cm4gc2xvd1BhdGgoKTsKKyAgICAgICAgLy8gICAgICAgICB9CisgICAgICAgIC8vICAgICB9IGVs
c2UgaWYgKGlzIHN0cmluZykgeworICAgICAgICAvLyAgICAgICAgIHJldHVybiBzdHJpbmcKKyAg
ICAgICAgLy8gICAgIH0gZWxzZSB7CisgICAgICAgIC8vICAgICAgICAgcmV0dXJuIHN5bWJvbAor
ICAgICAgICAvLyAgICAgfQorICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIG51bWJlcikgeworICAg
ICAgICAvLyAgICAgcmV0dXJuIG51bWJlcgorICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIG51bGwp
IHsKKyAgICAgICAgLy8gICAgIHJldHVybiBvYmplY3QKKyAgICAgICAgLy8gfSBlbHNlIGlmIChp
cyBib29sZWFuKSB7CisgICAgICAgIC8vICAgICByZXR1cm4gYm9vbGVhbgorICAgICAgICAvLyB9
IGVsc2UgeworICAgICAgICAvLyAgICAgcmV0dXJuIHVuZGVmaW5lZAorICAgICAgICAvLyB9Cisg
ICAgICAgIAorICAgICAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVncyk7Cisg
ICAgICAgIAorICAgICAgICBHUFJSZWcgY2VsbEdQUiA9IHJlZ3MucGF5bG9hZEdQUigpOworICAg
ICAgICBKdW1wIG5vdE9iamVjdCA9IGJyYW5jaElmTm90T2JqZWN0KGNlbGxHUFIpOworICAgICAg
ICAKKyAgICAgICAgSnVtcCBub3RGdW5jdGlvbiA9IGJyYW5jaElmTm90RnVuY3Rpb24oY2VsbEdQ
Uik7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6RnVuY3Rpb24sIGZhbHNlKTsKKyAgICAg
ICAgCisgICAgICAgIG5vdEZ1bmN0aW9uLmxpbmsodGhpcyk7CisgICAgICAgIHNsb3dQYXRoRnVu
Y3RvcigKKyAgICAgICAgICAgIGJyYW5jaFRlc3Q4KAorICAgICAgICAgICAgICAgIE5vblplcm8s
CisgICAgICAgICAgICAgICAgQWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksCisgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgfCBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpKSk7CisgICAgICAgIGZ1bmN0b3Io
VHlwZW9mVHlwZTo6T2JqZWN0LCBmYWxzZSk7CisgICAgICAgIAorICAgICAgICBub3RPYmplY3Qu
bGluayh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoSWZO
b3RTdHJpbmcoY2VsbEdQUik7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6U3RyaW5nLCBm
YWxzZSk7CisgICAgICAgIG5vdFN0cmluZy5saW5rKHRoaXMpOworICAgICAgICBmdW5jdG9yKFR5
cGVvZlR5cGU6OlN5bWJvbCwgZmFsc2UpOworICAgICAgICAKKyAgICAgICAgbm90Q2VsbC5saW5r
KHRoaXMpOworCisgICAgICAgIEp1bXAgbm90TnVtYmVyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVn
cywgdGVtcEdQUik7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6TnVtYmVyLCBmYWxzZSk7
CisgICAgICAgIG5vdE51bWJlci5saW5rKHRoaXMpOworICAgICAgICAKKyAgICAgICAgSnVtcExp
c3Qgbm90TnVsbCA9IGJyYW5jaElmTm90RXF1YWwocmVncywganNOdWxsKCkpOworICAgICAgICBm
dW5jdG9yKFR5cGVvZlR5cGU6Ok9iamVjdCwgZmFsc2UpOworICAgICAgICBub3ROdWxsLmxpbmso
dGhpcyk7CisgICAgICAgIAorICAgICAgICBKdW1wIG5vdEJvb2xlYW4gPSBicmFuY2hJZk5vdEJv
b2xlYW4ocmVncywgdGVtcEdQUik7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6Qm9vbGVh
biwgZmFsc2UpOworICAgICAgICBub3RCb29sZWFuLmxpbmsodGhpcyk7CisgICAgICAgIAorICAg
ICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlVuZGVmaW5lZCwgdHJ1ZSk7CisgICAgfQogCiAgICAg
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVC
bG9jayopOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgJKHJldmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBAIGV4dGVybiAiQyIg
ewogICAgIEQ6IGRvdWJsZQogICAgIEU6IEV4ZWNTdGF0ZSoKICAgICBGOiBDYWxsRnJhbWUqCisg
ICAgRzogSlNHbG9iYWxPYmplY3QqCiAgICAgSTogU3RyaW5nSW1wbCoKICAgICBJY2Y6IElubGlu
ZUNhbGxGcmFtZSoKICAgICBJZGM6IGNvbnN0IElkZW50aWZpZXIqCkBAIC0xMjcsNiArMTI4LDcg
QEAgdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZQogdHlwZWRlZiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FQ1opKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIGludDMyX3QpOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJh
dGlvbl9FQ1pDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90LCBKU0NlbGwqKTsKIHR5cGVk
ZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUq
LCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19K
SVRPcGVyYXRpb25fRUdDKShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopOwog
dHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSWNmKShFeGVj
U3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9O
ICgqQ19KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVk
ZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpzYykoRXhlY1N0YXRl
KiwgSlNTY29wZSopOwpAQCAtMTU3LDEwICsxNTksMTIgQEAgdHlwZWRlZiBpbnQ2NF90IEpJVF9P
UEVSQVRJT04oKlFfSklUT3BlcgogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJ
VE9wZXJhdGlvbl9EKShkb3VibGUpOwogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpa
X0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFU
SU9OICgqWl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordHlwZWRlZiBp
bnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FR0MpKEV4ZWNTdGF0ZSosIEpT
R2xvYmFsT2JqZWN0KiwgSlNDZWxsKik7CiB0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAo
KlpfSklUT3BlcmF0aW9uX0VTSnNzKShFeGVjU3RhdGUqLCBzaXplX3QsIEpTU3RyaW5nKik7CiB0
eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0VKWikoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVS
QVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FSlpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
aW50MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRP
cGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgc2l6
ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FR0MpKEV4ZWNTdGF0ZSosIEpTR2xv
YmFsT2JqZWN0KiwgSlNDZWxsKik7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19K
SVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6
ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9O
ICgqU19KSVRPcGVyYXRpb25fRU9Kc3MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNTdHJpbmcq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5o
CShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFs
bFN0cmluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI2lm
bmRlZiBTbWFsbFN0cmluZ3NfaAogI2RlZmluZSBTbWFsbFN0cmluZ3NfaAogCisjaW5jbHVkZSAi
VHlwZW9mVHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogCkBAIC04NSw2ICs4NiwyOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIEpT
Q19DT01NT05fU1RSSU5HU19FQUNIX05BTUUoSlNDX0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RF
RklOSVRJT04pCiAjdW5kZWYgSlNDX0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RFRklOSVRJT04K
KyAgICAKKyAgICBKU1N0cmluZyogdHlwZVN0cmluZyhUeXBlb2ZUeXBlIHR5cGUpIGNvbnN0Cisg
ICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlb2ZUeXBlOjpV
bmRlZmluZWQ6CisgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkU3RyaW5nKCk7CisgICAgICAg
IGNhc2UgVHlwZW9mVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBib29sZWFuU3Ry
aW5nKCk7CisgICAgICAgIGNhc2UgVHlwZW9mVHlwZTo6TnVtYmVyOgorICAgICAgICAgICAgcmV0
dXJuIG51bWJlclN0cmluZygpOworICAgICAgICBjYXNlIFR5cGVvZlR5cGU6OlN0cmluZzoKKyAg
ICAgICAgICAgIHJldHVybiBzdHJpbmdTdHJpbmcoKTsKKyAgICAgICAgY2FzZSBUeXBlb2ZUeXBl
OjpTeW1ib2w6CisgICAgICAgICAgICByZXR1cm4gc3ltYm9sU3RyaW5nKCk7CisgICAgICAgIGNh
c2UgVHlwZW9mVHlwZTo6T2JqZWN0OgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdFN0cmluZygp
OworICAgICAgICBjYXNlIFR5cGVvZlR5cGU6OkZ1bmN0aW9uOgorICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAog
ICAgIEpTU3RyaW5nKiBudWxsT2JqZWN0U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9udWxsT2Jq
ZWN0U3RyaW5nOyB9CiAgICAgSlNTdHJpbmcqIHVuZGVmaW5lZE9iamVjdFN0cmluZygpIGNvbnN0
IHsgcmV0dXJuIG1fdW5kZWZpbmVkT2JqZWN0U3RyaW5nOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVvZlR5cGUuaCIKKworbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBUeXBlb2ZUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBUeXBlb2ZUeXBlOjpVbmRlZmluZWQ6CisgICAgICAgIG91dC5wcmludCgi
dW5kZWZpbmVkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVvZlR5cGU6OkJvb2xl
YW46CisgICAgICAgIG91dC5wcmludCgiYm9vbGVhbiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlb2ZUeXBlOjpOdW1iZXI6CisgICAgICAgIG91dC5wcmludCgibnVtYmVyIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVvZlR5cGU6OlN0cmluZzoKKyAgICAgICAgb3V0
LnByaW50KCJzdHJpbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9mVHlwZTo6
U3ltYm9sOgorICAgICAgICBvdXQucHJpbnQoInN5bWJvbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBUeXBlb2ZUeXBlOjpPYmplY3Q6CisgICAgICAgIG91dC5wcmludCgib2JqZWN0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVvZlR5cGU6OkZ1bmN0aW9uOgorICAgICAg
ICBvdXQucHJpbnQoImZ1bmN0aW9uIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlb2ZUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVvZlR5cGVfaAorI2RlZmluZSBUeXBl
b2ZUeXBlX2gKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsKKworZW51bSBjbGFzcyBUeXBlb2ZUeXBlIHsKKyAgICBVbmRlZmluZWQsCisgICAgQm9vbGVh
biwKKyAgICBOdW1iZXIsCisgICAgU3RyaW5nLAorICAgIFN5bWJvbCwKKyAgICBPYmplY3QsCisg
ICAgRnVuY3Rpb24gICAgCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdU
RiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OlR5cGVvZlR5
cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFR5cGVvZlR5cGVfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252237</attachid>
            <date>2015-05-02 10:50:51 -0700</date>
            <delta_ts>2015-05-02 12:19:58 -0700</delta_ts>
            <desc>with fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>69111</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzNzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDE1LTA1LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VHlwZU9mIHNob3VsZCBiZSBmYXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDQzOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIEFkZHMgY29tcHJlaGVuc2l2ZSBzdXBwb3J0IGZvciBmYXN0
IHR5cGVvZiB0byB0aGUgb3B0aW1pemluZyBKSVRzLiBDYWxscyBpbnRvIHRoZSBydW50aW1lCisg
ICAgICAgIGFyZSBvbmx5IHVzZWQgZm9yIHZlcnkgZXhvdGljIG9iamVjdHMgLSB0aGV5IG11c3Qg
aGF2ZSBlaXRoZXIgdGhlIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgb3IKKyAgICAgICAgVHlwZU9m
U2hvdWxkQ2FsbEdldENhbGxEYXRhIHR5cGUgZmxhZ3Mgc2V0LiBBbGwgb3RoZXIgY2FzZXMgYXJl
IGhhbmRsZWQgaW5saW5lLgorICAgICAgICAKKyAgICAgICAgVGhpcyBtZWFucyBvcHRpbWl6aW5n
IElzT2JqZWN0T3JOdWxsLCBJc0Z1bmN0aW9uLCBhbmQgVHlwZU9mIC0gYWxsIG5vZGUgdHlwZXMg
dGhhdCB1c2VkIHRvCisgICAgICAgIHJlbHkgaGVhdmlseSBvbiBDKysgY2FsbHMgdG8gZnVsZmls
bCB0aGVpciBmdW5jdGlvbi4KKyAgICAgICAgCisgICAgICAgIEJlY2F1c2UgVHlwZU9mIGlzIG5v
dyBzbyBmYXN0LCB3ZSBubyBsb25nZXIgbmVlZCB0byBkbyBhbnkgc3BlY3VsYXRpb25zIG9uIHRo
aXMgbm9kZS4KKyAgICAgICAgCisgICAgICAgIEluIHRoZSBGVEwsIHdlIHRha2UgdGhpcyBmdXJ0
aGVyIGJ5IHF1ZXJ5aW5nIEFJIGZvciBlYWNoIGJyYW5jaCBpbiB0aGUgVHlwZU9mIGRlY2lzaW9u
IHRyZWUuCisgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgVHlwZU9mIGlzIGRvbWluYXRl
ZCBieSBhbnkgdHlwZSBjaGVja3MsIHdlIHdpbGwgYXV0b21hdGljYWxseSBwcnVuZQorICAgICAg
ICBvdXQgY2FzZXMgdGhhdCB0aGF0IGFyZSByZWR1bmRhbnQuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6
OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdIZWFw
TG9jYXRpb24uY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBk
ZmcvREZHSGVhcExvY2F0aW9uLmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlz
T2JqZWN0T3JOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUlzRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
VHlwZU9mKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Ymxlc3NlZEJvb2xlYW5SZXN1bHQpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICog
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6
CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBp
bGVJc09iamVjdE9yTnVsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVJc0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZVR5cGVPZik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJ1aWxkVHlw
ZU9mKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aXNFeG90aWNGb3JUeXBl
b2YpOgorICAgICAgICAqIGZ0bC9GVExTd2l0Y2hDYXNlLmg6CisgICAgICAgIChKU0M6OkZUTDo6
U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90RXF1YWwpOgorICAg
ICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmRXF1YWwpOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTnVtYmVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpicmFuY2hJZk5vdE51bWJlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6YnJhbmNoSWZCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpi
cmFuY2hJZk5vdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJveEJv
b2xlYW5QYXlsb2FkKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpib3hCb29sZWFu
KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VHlwZU9mKToKKyAgICAgICAg
KiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvU21hbGxTdHJpbmdzLmg6
CisgICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6dHlwZVN0cmluZyk6CisgICAgICAgICogcnVu
dGltZS9UeXBlb2ZUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIHJ1bnRpbWUvVHlwZW9mVHlwZS5oOiBBZGRlZC4KKwogMjAxNS0wNS0wMSAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDbGFzcyBzeW50YXgg
c2hvdWxkIGFsbG93IHN0cmluZyBhbmQgbnVtZXJpYyBpZGVudGlmaWVycyBmb3IgbWV0aG9kIG5h
bWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODM3
MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTU4MSw2ICs1ODEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUlVOVElNRV9TT1VSQ0VT
CiAgICAgcnVudGltZS9UeXBlU2V0LmNwcAogICAgIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xs
ZXIuY3BwCiAgICAgcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAKKyAgICBydW50aW1lL1R5cGVv
ZlR5cGUuY3BwCiAgICAgcnVudGltZS9WTS5jcHAKICAgICBydW50aW1lL1ZNRW50cnlTY29wZS5j
cHAKICAgICBydW50aW1lL1Zhck9mZnNldC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtODQxLDYgKzg0MSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFRlc3RSdW5uZXJVdGlscy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheVR5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxUeXBlb2ZUeXBlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZUxvY2F0aW9uQ2FjaGUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlUHJvZmlsZXIuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlUHJvZmlsZXJMb2cuY3BwIiAvPgpAQCAtMTY4OCw2
ICsxNjg5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlw
ZWRBcnJheUlubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
VHlwZWRBcnJheVR5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
VHlwZW9mVHlwZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBl
TG9jYXRpb25DYWNoZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxU
eXBlUHJvZmlsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlw
ZVByb2ZpbGVyTG9nLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcyNiw2ICs3MjYsOCBA
QAogCQkwRkY5MjJENDE0RjQ2QjQxMDA0MUEyNEUgLyogTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEEx
MTRCQTdGODIwMEJGRTI3MiAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3BwICovOyB9OwogCQkw
RkZBNTQ5NzE2Qjg4MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMjE2NTFDNjk3MDBBODBBRkUg
LyogQTY0RE9wY29kZS5jcHAgKi87IH07CiAJCTBGRkE1NDk4MTZCODgzNTMwMEIzQTk4MiAvKiBB
NjRET3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NTJBM0EyMzE2NTFDNjk3MDBBODBBRkUgLyogQTY0RE9wY29kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRkI2QzM4MUFGNDhEREMwMERC
MUJGNyAvKiBUeXBlb2ZUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkI2QzM2MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmNwcCAq
LzsgfTsKKwkJMEZGQjZDMzkxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkI2QzM3MUFGNDhEREMw
MERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMTgxNkQwMkVCMjAwNTVBNURCIC8qIERGR0FsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1
MTkxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFBMTZEMDJFQzUwMDU1QTVEQiAv
KiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZGQjkyMUIxNkQwMkYwMTAwNTVBNURCIC8qIERGR05vZGVBbGxvY2F0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTFGMTZCNjI3NzIw
MDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0NjIsNiArMjQ2NCw4IEBACiAJCTBGRjhCREU4MUFE
NENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRjkyMkNGMTRGNDZCMTMwMDQxQTI0RSAvKiBKU0NMTEludE9m
ZnNldHNFeHRyYWN0b3IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsg
cGF0aCA9IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rvcjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKKwkJMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZW9mVHlwZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkI2QzM3MUFGNDhEREMwMERCMUJGNyAvKiBU
eXBlb2ZUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVvZlR5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFC
IC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25z
dGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMx
ODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9p
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4MDA5
QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQ1MSw5ICs0NDU1LDkgQEAKIAkJCQlCQzlCQjk1
QjBFMTk2ODA2MDBERjg4NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2
N0EwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQk4NkJGNjQy
QTE0OERCMkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8sCisJCQkJRkU0RDU1QjcxQUU3MTZD
QTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovLAogCQkJCTcwMTEzRDQ5MUE4REIwOTMw
MDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLAogCQkJCTcwMTEzRDRBMUE4REIw
OTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLywKLQkJCQlGRTRENTVCNzFBRTcx
NkNBMDA1MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggKi8sCiAJCQkJOTNBREZDRTYwQ0NCRDdB
QzAwRDMwQjA4IC8qIEpTQXJyYXkuY3BwICovLAogCQkJCTkzODc3MkU1MDM4QkZFMTkwMDg2MzVD
RSAvKiBKU0FycmF5LmggKi8sCiAJCQkJMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXIuY3BwICovLApAQCAtNDczOSw2ICs0NzQzLDggQEAKIAkJCQkwRjJCNjZERDE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLywKIAkJCQk1MkIzMTBGRTE5NzVCNDI0
MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuY3BwICovLAogCQkJCTUyQjMxMTAwMTk3NUI0
NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oICovLAorCQkJCTBGRkI2QzM2MUFGNDhE
REMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmNwcCAqLywKKwkJCQkwRkZCNkMzNzFBRjQ4RERDMDBE
QjFCRjcgLyogVHlwZW9mVHlwZS5oICovLAogCQkJCTUyQzk1MkI4MTlBMjhBMUMwMDY5QjM4NiAv
KiBUeXBlUHJvZmlsZXIuY3BwICovLAogCQkJCTUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBU
eXBlUHJvZmlsZXIuaCAqLywKIAkJCQkwRjJENERERjE5ODMyRDkxMDA3RDRCMTkgLyogVHlwZVBy
b2ZpbGVyTG9nLmNwcCAqLywKQEAgLTU3MTEsNiArNTcxNyw3IEBACiAJCQkJQkMxOEMzRjQwRTE2
RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0VB
MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZGQjZDMzkxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0NDgzNkU3MTMyREE3QkUwMDVCRTc4NSAvKiBDb25zZXJ2YXRpdmVSb290cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwN0ExODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNz
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3NDE4OUIwMzhDMDA2MzMyMzEgLyogQ29u
c29sZVR5cGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTczNjEsNiArNzM2OCw3IEBACiAJCQkJMTQ3
RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0Y5OTM2MDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkZCNkMzODFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyogSlNQcm9maWxl
clByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMUExN0JFREJEMzAwN0NCNjNB
IC8qIEpTUHJvbWlzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NEUyMjE3QkVFMjQwMDA3
Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgzNzA4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OSw2ICsxNTksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgY2FzZSBHZXRFeGVjdXRhYmxl
OgogICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgY2FzZSBUeXBlT2Y6CiAgICAgICAgIGRlZihQ
dXJlVmFsdWUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIApAQCAtMzYyLDExICsz
NjMsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAg
IGRlZihIZWFwTG9jYXRpb24oSXNGdW5jdGlvbkxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQx
KCkpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIFR5cGVPZjoK
LSAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBl
T2ZMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7Ci0gICAgICAgIHJldHVy
bjsKLQogICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNl
IFB1dEJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NiwxNCArMzQ2LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBUeXBlT2Y6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRT
cGVjdWxhdGVDZWxsKCkpCi0gICAgICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0xMjQxLDYgKzEyMzMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhp
bnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToK
KyAgICAgICAgY2FzZSBUeXBlT2Y6CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAg
IGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uY3BwCShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEwICs2OCw2IEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICAgICAgb3V0LnByaW50
KCJJc0Z1bmN0aW9uTG9jIik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY2FzZSBU
eXBlT2ZMb2M6Ci0gICAgICAgIG91dC5wcmludCgiVHlwZU9mTG9jIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCiAgICAgY2FzZSBHZXR0ZXJMb2M6CiAgICAgICAgIG91dC5wcmludCgiR2V0
dGVyTG9jIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyAr
NTMsNiBAQCBlbnVtIExvY2F0aW9uS2luZCB7CiAgICAgTmFtZWRQcm9wZXJ0eUxvYywKICAgICBT
ZXR0ZXJMb2MsCiAgICAgU3RydWN0dXJlTG9jLAotICAgIFR5cGVPZkxvYywKICAgICBUeXBlZEFy
cmF5Qnl0ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25XYXRjaHBvaW50TG9jLAogICAgIFN0
YWNrTG9jLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjAsMjEgKzg2MCw4NCBAQCBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNPYmplY3RPck51bGwoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk9iamVjdElzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDZWxsKiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIGpzSXNPYmplY3RUeXBlT3JO
dWxsKGV4ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAg
QVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihvYmplY3QpKTsKKyAgICAKKyAgICBpZiAo
b2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGdsb2JhbE9iamVj
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0LT50eXBlKCkgPT0gSlNG
dW5jdGlvblR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0LT5pbmxp
bmVUeXBlRmxhZ3MoKSAmIFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkgeworICAgICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOwogfQogCi1zaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29kZWRKU1ZhbHVlIHZhbHVl
KQorc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQog
ewotICAgIHJldHVybiBqc0lzRnVuY3Rpb25UeXBlKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworCisgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihvYmpl
Y3QpKTsKKyAgICAKKyAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKGdsb2JhbE9iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
b2JqZWN0LT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGlmIChvYmplY3QtPmlubGluZVR5cGVGbGFncygpICYgVHlwZU9mU2hvdWxkQ2FsbEdldENh
bGxEYXRhKSB7CisgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICBpZiAob2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhKG9iamVjdCwgY2FsbERhdGEpICE9IENhbGxU
eXBlTm9uZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2YoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIHZhbHVlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblR5cGVPZk9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIHJldHVybiBqc1R5
cGVTdHJpbmdGb3JWYWx1ZShleGVjLCBKU1ZhbHVlKHZhbHVlKSkuYXNDZWxsKCk7CisKKyAgICBB
U1NFUlQoanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KG9iamVjdCkpOworICAgIAorICAgIGlmIChv
YmplY3QtPnN0cnVjdHVyZSh2bSktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZ2xvYmFsT2JqZWN0
KSkKKyAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKTsKKyAg
ICBpZiAob2JqZWN0LT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUpCisgICAgICAgIHJldHVybiB2
bS5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKTsKKyAgICBpZiAob2JqZWN0LT5pbmxpbmVU
eXBlRmxhZ3MoKSAmIFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkgeworICAgICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKKyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRD
YWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpCisgICAgICAgICAgICBy
ZXR1cm4gdm0uc21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCk7CisgICAgfQorICAgIAorICAg
IHJldHVybiB2bS5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCk7Cit9CisKK2ludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKK3sKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKworICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0
KSk7CisgICAgCisgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKHZtKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZChnbG9iYWxPYmplY3QpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJf
dD4oVHlwZW9mVHlwZTo6VW5kZWZpbmVkKTsKKyAgICBpZiAob2JqZWN0LT50eXBlKCkgPT0gSlNG
dW5jdGlvblR5cGUpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZU
eXBlOjpGdW5jdGlvbik7CisgICAgaWYgKG9iamVjdC0+aW5saW5lVHlwZUZsYWdzKCkgJiBUeXBl
T2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpIHsKKyAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Cisg
ICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBj
YWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludDMyX3Q+KFR5cGVvZlR5cGU6OkZ1bmN0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6Ok9iamVjdCk7CiB9CiAKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENh
cGFjaXR5KEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMywxMCBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlU2NvCiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChFeGVjU3Rh
dGUqLCBJbmxpbmVDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgaW50MzJfdCBhcmd1bWVudENvdW50
KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIGludDMyX3Qg
bGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUpOwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Jc09iamVjdE9yTnVsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSkgV1RGX0lOVEVSTkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5j
dGlvbihFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblR5cGVPZihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitzaXpl
X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBK
U0NlbGwqKSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlw
ZU9mT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikgV1RGX0lOVEVS
TkFMOworaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZk9iamVjdEFzVHlwZW9m
VHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsK
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRo
SW5pdGlhbENhcGFjaXR5KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90
IG5ld1NpemUpIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHko
RXhlY1N0YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlz
aW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMDcsODYgKzQxMDcsMTYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgSXNP
YmplY3RPck51bGw6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsK
LSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAg
ICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklzT2JqZWN0T3JOdWxsLCByZXN1bHRHUFIsIHZh
bHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpOwotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVJc09iamVjdE9yTnVsbChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBJc0Z1bmN0aW9uOiB7Ci0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVn
IHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVBheWxv
YWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0
IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
LSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Jc0Z1bmN0aW9uLCByZXN1bHRHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpOwot
ICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIGNvbXBp
bGVJc0Z1bmN0aW9uKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUeXBl
T2Y6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIEdQUlJlZyB0YWdHUFIgPSB2YWx1
ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BS
KCk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBHUFJSZWcgdGVt
cEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0
aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmVKdW1wczsKLQotICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOwotCi0gICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7
Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkKLSAg
ICAgICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiks
IG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKTsKLQotICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSB8fCBub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3RTdHJpbmcgPSBtX2ppdC5icmFuY2hJZk5vdFN0cmluZyhwYXlsb2FkR1BSKTsKLSAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKQotICAgICAgICAg
ICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5v
ZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nLCBub3RTdHJpbmcpOwotICAgICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmco
KSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAo
KSk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFN0cmluZ1Vz
ZSkgewotICAgICAgICAgICAgICAgIG5vdFN0cmluZy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgcGF5bG9hZEdQ
Uik7Ci0gICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgcGF5bG9hZEdQUik7Ci0gICAgICAgICAgICBkb25l
SnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKLSAgICAgICAgICAgIGlzTm90
Q2VsbC5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgdGFnR1BSLCB0ZW1wR1BSKTsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dE51bWJlciA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIHRlbXBH
UFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOwot
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3Ry
aW5ncy5udW1iZXJTdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBub3ROdW1iZXIubGluaygmbV9qaXQp
OwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RVbmRlZmluZWQgPSBtX2ppdC5i
cmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlVuZGVmaW5lZFRhZykpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKSksIHJlc3VsdEdQUik7
Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAg
ICBub3RVbmRlZmluZWQubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBub3ROdWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB0YWdH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSk7Ci0gICAgICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygp
KSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgp
KTsKLSAgICAgICAgICAgIG5vdE51bGwubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICAvLyBP
bmx5IGJvb2xlYW4gbGVmdAotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1f
aml0LnZtKCktPnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkpLCByZXN1bHRHUFIpOwotICAg
ICAgICB9Ci0gICAgICAgIGRvbmVKdW1wcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZVR5cGVPZihub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxNDgsODIgKzQxNDgsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgSXNPYmplY3RPck51bGw6IHsKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVz
dWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklz
T2JqZWN0T3JOdWxsLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKLSAgICAgICAgbV9qaXQub3IzMihU
cnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgY29t
cGlsZUlzT2JqZWN0T3JOdWxsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBj
YXNlIElzRnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAg
ICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklzRnVuY3Rpb24sIHJlc3VsdEdQUiwgdmFsdWVH
UFIpOwotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOworICAgICAgICBjb21waWxlSXNGdW5jdGlvbihub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBUeXBlT2Y6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJGbHVz
aGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lSnVtcHM7Ci0K
LSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNl
KTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJ
Zk5vdENlbGwoSlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQotICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0so
SlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCwgaXNOb3RD
ZWxsKTsKLQotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmpl
Y3QoKSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RTdHJpbmcgPSBtX2ppdC5icmFuY2hJZk5vdFN0cmlu
Zyh2YWx1ZUdQUik7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IFN0cmluZ1VzZSkKLSAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291cmNl
KHZhbHVlR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG5vdFN0cmluZyk7Ci0gICAg
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdz
LnN0cmluZ1N0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBl
bmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgIT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICAgICAgbm90U3RyaW5nLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblR5cGVPZiwgcmVzdWx0
R1BSLCB2YWx1ZUdQUik7Ci0gICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwotICAgICAg
ICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7Ci0gICAgICAg
ICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90TnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCB2YWx1
ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5n
KCkpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwotICAgICAgICAgICAgbm90TnVtYmVyLmxpbmsoJm1faml0KTsKLQotICAgICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90VW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NChWYWx1ZVVu
ZGVmaW5lZCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZt
KCktPnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAg
ICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBub3RVbmRl
ZmluZWQubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RO
dWxsID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKTsKLSAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkp
LCByZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OwotICAgICAgICAgICAgbm90TnVsbC5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIC8vIE9u
bHkgYm9vbGVhbiBsZWZ0Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9q
aXQudm0oKS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAg
ICAgIH0KLSAgICAgICAgZG9uZUp1bXBzLmxpbmsoJm1faml0KTsKLSAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlVHlwZU9mKG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgx
NSw2ICs0ODE1LDExOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhO
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc09i
amVjdE9yTnVsbChOb2RlKiBub2RlKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OworICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgIAor
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0NlbGwgPSBtX2ppdC5i
cmFuY2hJZkNlbGwodmFsdWVSZWdzKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc051
bGwgPSBtX2ppdC5icmFuY2hJZkVxdWFsKHZhbHVlUmVncywganNOdWxsKCkpOworICAgIEpJVENv
bXBpbGVyOjpKdW1wIGlzTm9uTnVsbE5vbkNlbGwgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAg
aXNDZWxsLmxpbmsoJm1faml0KTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0Z1bmN0aW9uID0g
bV9qaXQuYnJhbmNoSWZGdW5jdGlvbih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RPYmplY3QgPSBtX2ppdC5icmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJl
Z3MucGF5bG9hZEdQUigpKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9
IG1faml0LmJyYW5jaFRlc3Q4KAorICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKKyAgICAg
ICAgSklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCB8IFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkpOworICAgIAorICAgIGlz
TnVsbC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAK
KyAgICBpc05vbk51bGxOb25DZWxsLmxpbmsoJm1faml0KTsKKyAgICBpc0Z1bmN0aW9uLmxpbmso
Jm1faml0KTsKKyAgICBub3RPYmplY3QubGluaygmbV9qaXQpOworICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3Bl
cmF0aW9uT2JqZWN0SXNPYmplY3QsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0LAorICAgICAgICAg
ICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgIAorICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgIAorICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzRnVuY3Rpb24oTm9kZSogbm9kZSkKK3sK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdz
ID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgCisgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3Mp
OworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzRnVuY3Rpb24gPSBtX2ppdC5icmFuY2hJZkZ1bmN0
aW9uKHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE9i
amVjdCA9IG1faml0LmJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwor
ICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoVGVzdDgo
CisgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAorICAgICAgICBKSVRDb21waWxlcjo6QWRk
cmVzcyh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksCisgICAgICAgIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgVHlwZU9m
U2hvdWxkQ2FsbEdldENhbGxEYXRhKSk7CisgICAgCisgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7
CisgICAgbm90T2JqZWN0LmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOworICAgIAorICAgIGlzRnVuY3Rpb24ubGluaygmbV9qaXQpOworICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywg
b3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbiwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3QsCisgICAg
ICAgICAgICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgCisgICAgZG9uZS5saW5rKCZt
X2ppdCk7CisgICAgCisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVHlwZU9mKE5vZGUqIG5vZGUpCit7
CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgCisgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIAorICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRo
OworICAgIG1faml0LmVtaXRUeXBlT2YoCisgICAgICAgIHZhbHVlUmVncywgcmVzdWx0R1BSLAor
ICAgICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSwgYm9vbCBmYWxsc1Rocm91Z2gpIHsKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mu
dHlwZVN0cmluZyh0eXBlKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoIWZhbGxzVGhy
b3VnaCkKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAg
ICB9LAorICAgICAgICBbJl0gKEpJVENvbXBpbGVyOjpKdW1wIHRoZVNsb3dQYXRoKSB7CisgICAg
ICAgICAgICBzbG93UGF0aCA9IHRoZVNsb3dQYXRoOworICAgICAgICB9KTsKKyAgICBkb25lLmxp
bmsoJm1faml0KTsKKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0
aENhbGwoCisgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uVHlwZU9mT2JqZWN0
LCByZXN1bHRHUFIsIGdsb2JhbE9iamVjdCwKKyAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCkpKTsKKyAgICAKKyAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBu
b2RlKQogewogICAgIGlmIChub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJ
bmRleGluZ0hlYWRlcigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTc5MiwxMyAr
NzkyLDcgQEAgcHVibGljOgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVnLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBtb2RlKTsKICNlbHNlCi0gICAgICAg
IGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKLSAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5v
ZGUpOwotCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52
aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckJvb2xlYW4pOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwotICAg
ICAgICBpbmZvLmluaXRCb29sZWFuKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlZyk7CisgICAg
ICAgIGJvb2xlYW5SZXN1bHQocmVnLCBub2RlLCBtb2RlKTsKICNlbmRpZgogICAgIH0KICAgICB2
b2lkIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQoR1BSUmVnIHJlZywgTm9kZSogbm9kZSwgVXNlQ2hp
bGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCkBAIC0xMDYwLDYgKzEwNTQsMTggQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FR0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGdsb2Jh
bE9iamVjdCksIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FR0Mgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBHUFJSZWcgYXJnMikKKyAg
ICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1t
UHRyKGdsb2JhbE9iamVjdCksIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKc3NfSklUT3BlcmF0aW9uX0VaIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CkBAIC0yMjE0LDYgKzIyMjAsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVOb3RpZnlXcml0ZShOb2RlKik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhw
RXhlYyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51bGwoTm9kZSopOworICAg
IHZvaWQgY29tcGlsZUlzRnVuY3Rpb24oTm9kZSopOworICAgIHZvaWQgY29tcGlsZVR5cGVPZihO
b2RlKik7CiAgICAgCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CiAgICAgdm9pZCBtb3Zl
RmFsc2VUbyhHUFJSZWcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNiArMTg5
LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2Ug
R2V0TXlBcmd1bWVudEJ5VmFsOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBT
d2l0Y2g6CisgICAgY2FzZSBUeXBlT2Y6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJZGVudGl0eToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxODM3MDgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAko
d29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAgICAgbWFjcm8oQ19KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZShpbnRQdHIs
IGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VDWiwgZnVuY3Rp
b25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludDMyKSkgXAogICAgIG1hY3JvKENfSklU
T3BlcmF0aW9uX0VDWkMsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnQz
MiwgaW50UHRyKSkgXAorICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VHQywgZnVuY3Rpb25UeXBl
KGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhDX0pJVE9wZXJh
dGlvbl9FSiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKICAgICBtYWNy
byhDX0pJVE9wZXJhdGlvbl9FSnNzSnNzLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGlu
dFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VKc3NKc3NKc3MsIGZ1
bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKQEAg
LTk3LDYgKzk4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3Jv
KFBfSklUT3BlcmF0aW9uX0VTdFosIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRy
LCBpbnQzMikpIFwKICAgICBtYWNybyhRX0pJVE9wZXJhdGlvbl9ELCBmdW5jdGlvblR5cGUoaW50
NjQsIGRvdWJsZVR5cGUpKSBcCiAgICAgbWFjcm8oUV9KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25U
eXBlKGludDY0LCBpbnQ2NCkpIFwKKyAgICBtYWNybyhTX0pJVE9wZXJhdGlvbl9FR0MsIGZ1bmN0
aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oU19K
SVRPcGVyYXRpb25fRUosIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50NjQpKSBcCiAg
ICAgbWFjcm8oU19KSVRPcGVyYXRpb25fRUpKLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIs
IGludDY0LCBpbnQ2NCkpIFwKICAgICBtYWNybyhTX0pJVE9wZXJhdGlvbl9KLCBmdW5jdGlvblR5
cGUoaW50UHRyLCBpbnQ2NCkpIFwKQEAgLTExMiw2ICsxMTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVuY3Rpb25UeXBl
KHZvaWRUeXBlLCBpbnQzMikpIFwKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9ELCBmdW5jdGlv
blR5cGUoaW50MzIsIGRvdWJsZVR5cGUpKSBcCiAgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUMs
IGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIpKSBcCisgICAgbWFjcm8oWl9KSVRP
cGVyYXRpb25fRUdDLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIp
KSBcCiAgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUpaLCBmdW5jdGlvblR5cGUoaW50MzIsIGlu
dFB0ciwgaW50NjQsIGludDMyKSkgXAogICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0VTSnNzLCBm
dW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShy
ZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk2LDYgKzc5Niw5IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgSXNGdW5jdGlvbjoKICAgICAgICAgICAgIGNvbXBpbGVJc0Z1bmN0aW9uKCk7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlT2Y6CisgICAgICAgICAgICBj
b21waWxlVHlwZU9mKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDaGVja0hh
c0luc3RhbmNlOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrSGFzSW5zdGFuY2UoKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNDYyMywxNiArNDYyNiwxMTcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKCkKICAgICB7Ci0gICAgICAgIExWYWx1ZSBwb2ludGVy
UmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbklz
T2JqZWN0T3JOdWxsKSwgbV9jYWxsRnJhbWUsIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkp
OwotICAgICAgICBzZXRCb29sZWFuKG1fb3V0Lm5vdE51bGwocG9pbnRlclJlc3VsdCkpOworICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAKKyAgICAgICAgRWRnZSBjaGls
ZCA9IG1fbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUo
Y2hpbGQpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgbm90RnVuY3Rpb25DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVj
dE9yTnVsbCBub3QgZnVuY3Rpb24gY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb2JqZWN0
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgb2JqZWN0IGNhc2Ui
KSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJJc09iamVjdE9yTnVsbCBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdENl
bGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBub3QgY2VsbCBj
YXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJl
KGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisgICAgICAgIAorICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RGdW5jdGlvbkNh
c2UpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBpc0Z1bmN0aW9uUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAg
ICAgIGlzRnVuY3Rpb24odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKKyAgICAgICAgICAgIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90RnVuY3Rpb25DYXNlKSk7CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhub3RGdW5jdGlvbkNhc2UsIG9iamVjdENhc2UpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBub3RPYmplY3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
Ym9vbGVhbkZhbHNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNPYmpl
Y3QodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKKyAgICAgICAgICAgIHVuc3VyZShvYmplY3RD
YXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8ob2JqZWN0Q2FzZSwgc2xvd1BhdGgpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBvYmpl
Y3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJvdmVuVHlw
ZShjaGlsZCkpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51
YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RD
ZWxsQ2FzZSk7CisgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSB2bUNhbGwoCisgICAg
ICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uT2JqZWN0SXNPYmplY3QpLCBtX2NhbGxG
cmFtZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKKyAgICAgICAgICAgIHZhbHVlKTsKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3RO
dWxsKHNsb3dSZXN1bHRWYWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0
aW9uKTsKKyAgICAgICAgTFZhbHVlIG5vdENlbGxSZXN1bHRWYWx1ZSA9IG1fb3V0LmVxdWFsKHZh
bHVlLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihub3RDZWxsUmVz
dWx0VmFsdWUpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaSgKKyAgICAgICAgICAgIG1fb3V0LmJvb2xlYW4sCisg
ICAgICAgICAgICBpc0Z1bmN0aW9uUmVzdWx0LCBub3RPYmplY3RSZXN1bHQsIG9iamVjdFJlc3Vs
dCwgc2xvd1Jlc3VsdCwgbm90Q2VsbFJlc3VsdCk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbigpCiAgICAgewotICAg
ICAgICBMVmFsdWUgcG9pbnRlclJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25Jc0Z1bmN0aW9uKSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgp
KSk7Ci0gICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90TnVsbChwb2ludGVyUmVzdWx0KSk7Cisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIAorICAgICAgICBFZGdlIGNo
aWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1
ZShjaGlsZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlv
biBub3QgZnVuY3Rpb24gY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gc2xvdyBwYXRoIikpOworICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rp
b24gY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90
Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBt
X291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQp
KSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90
RnVuY3Rpb25DYXNlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZnVuY3Rpb25SZXN1bHQgPSBt
X291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCisgICAgICAg
ICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEZ1bmN0aW9uQ2FzZSkpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RnVuY3Rpb25DYXNlLCBzbG93UGF0aCk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9iamVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291
dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0V4
b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAgICAgICAgICAgcmFy
ZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUg
c2xvd1Jlc3VsdFZhbHVlID0gdm1DYWxsKAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvbk9iamVjdElzRnVuY3Rpb24pLCBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwKKyAgICAgICAgICAgIHZhbHVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3ROdWxsKHNsb3dSZXN1bHRWYWx1ZSkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IG1fb3V0LnBoaSgKKyAgICAgICAgICAgIG1fb3V0LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQs
IGZ1bmN0aW9uUmVzdWx0LCBvYmplY3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgICAgICBzZXRC
b29sZWFuKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVR5cGVPZigpCisg
ICAgeworICAgICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGlsZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlR5cGVPZiBjb250aW51
YXRpb24iKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3
QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFs
dWVGcm9tQmxvY2s+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBidWlsZFR5cGVPZigKKyAg
ICAgICAgICAgIGNoaWxkLCB2YWx1ZSwKKyAgICAgICAgICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBl
KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHdlYWtQb2lu
dGVyKHZtKCkuc21hbGxTdHJpbmdzLnR5cGVTdHJpbmcodHlwZSkpKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgfSk7CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlSW4oKQpAQCAtNjM1Niw2ICs2NDYwLDE0MyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgV2VpZ2h0KGRhdGEtPmZhbGxUaHJvdWdoLmNvdW50KSk7CiAgICAgfQogICAg
IAorICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIGF0IHRoZSBwb2ludCBvZiBjb2RlIGdlbmVyYXRp
b24gd2hlcmUgd2Uga25vdyB3aGF0IHRoZSByZXN1bHQgdHlwZSBpcy4KKyAgICAvLyBZb3UgY2Fu
IGVtaXQgd2hhdGV2ZXIgY29kZSB5b3UgbGlrZSBhdCB0aGF0IHBvaW50LiBFeHBlY3RzIHlvdSB0
byB0ZXJtaW5hdGUgdGhlIGJhc2ljIGJsb2NrLgorICAgIC8vIFdoZW4gYnVpbGRUeXBlT2YoKSBy
ZXR1cm5zLCBpdCB3aWxsIGhhdmUgdGVybWluYXRlZCBhbGwgYmFzaWMgYmxvY2tzIHRoYXQgaXQg
Y3JlYXRlZC4gU28sIGlmCisgICAgLy8geW91IGFyZW4ndCB1c2luZyB0aGlzIGFzIHRoZSB0ZXJt
aW5hdG9yIG9mIGEgaGlnaC1sZXZlbCBibG9jaywgeW91IHNob3VsZCBjcmVhdGUgeW91ciBvd24K
KyAgICAvLyBjb250aW5hdGlvbiBhbmQgc2V0IGl0IGFzIHRoZSBuZXh0QmxvY2sgKG1fb3V0Lmlu
c2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pKSBiZWZvcmUKKyAgICAvLyBjYWxsaW5n
IHRoaXMuIEZvciBleGFtcGxlOgorICAgIC8vCisgICAgLy8gTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNeSBjb250aW51YXRpb24iKSk7CisgICAgLy8g
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGlu
dWF0aW9uKTsKKyAgICAvLyBidWlsZFR5cGVPZigKKyAgICAvLyAgICAgY2hpbGQsIHZhbHVlLAor
ICAgIC8vICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSkgeworICAgIC8vICAgICAgICAgIGRvIHRo
aW5nczsKKyAgICAvLyAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgLy8g
ICAgIH0pOworICAgIC8vIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBidWlsZFR5cGVPZihFZGdl
IGNoaWxkLCBMVmFsdWUgdmFsdWUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAKKyAgICAgICAgLy8gSW1wbGVt
ZW50cyB0aGUgZm9sbG93aW5nIGJyYW5jaGluZyBzdHJ1Y3R1cmU6CisgICAgICAgIC8vCisgICAg
ICAgIC8vIGlmIChpcyBjZWxsKSB7CisgICAgICAgIC8vICAgICBpZiAoaXMgb2JqZWN0KSB7Cisg
ICAgICAgIC8vICAgICAgICAgaWYgKGlzIGZ1bmN0aW9uKSB7CisgICAgICAgIC8vICAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbjsKKyAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKGRvZXNu
J3QgaGF2ZSBjYWxsIHRyYXAgYW5kIGRvZXNuJ3QgbWFzcXVlcmFkZSBhcyB1bmRlZmluZWQpIHsK
KyAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIG9iamVjdAorICAgICAgICAvLyAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBzbG93UGF0aCgpOworICAg
ICAgICAvLyAgICAgICAgIH0KKyAgICAgICAgLy8gICAgIH0gZWxzZSBpZiAoaXMgc3RyaW5nKSB7
CisgICAgICAgIC8vICAgICAgICAgcmV0dXJuIHN0cmluZworICAgICAgICAvLyAgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gICAgICAgICByZXR1cm4gc3ltYm9sCisgICAgICAgIC8vICAgICB9Cisg
ICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgbnVtYmVyKSB7CisgICAgICAgIC8vICAgICByZXR1cm4g
bnVtYmVyCisgICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgbnVsbCkgeworICAgICAgICAvLyAgICAg
cmV0dXJuIG9iamVjdAorICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIGJvb2xlYW4pIHsKKyAgICAg
ICAgLy8gICAgIHJldHVybiBib29sZWFuCisgICAgICAgIC8vIH0gZWxzZSB7CisgICAgICAgIC8v
ICAgICByZXR1cm4gdW5kZWZpbmVkCisgICAgICAgIC8vIH0KKyAgICAgICAgCisgICAgICAgIExC
YXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBj
ZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG9iamVjdENhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG9iamVjdCBjYXNlIikpOworICAgICAgICBMQmFzaWNC
bG9jayBmdW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIGZ1
bmN0aW9uIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IGZ1bmN0aW9uIGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIHJlYWxseU9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoImJ1aWxkVHlwZU9mIHJlYWxseSBvYmplY3QgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIHNsb3cgcGF0
aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgdW5yZWFjaGFibGUgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImJ1aWxkVHlwZU9mIHVucmVhY2hhYmxlIikpOworICAgICAgICBMQmFzaWNCbG9jayBu
b3RPYmplY3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3Qgb2Jq
ZWN0IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHN0cmluZ0Nhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIHN0cmluZyBjYXNlIikpOworICAgICAgICBMQmFzaWNC
bG9jayBzeW1ib2xDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBzeW1i
b2wgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIG51bWJlckNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG51
bWJlciBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3ROdW1iZXJDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3QgbnVtYmVyIGNhc2UiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIG5vdE51bGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5
cGVPZiBub3QgbnVsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBib29sZWFuQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgYm9vbGVhbiBjYXNlIikpOworICAg
ICAgICBMQmFzaWNCbG9jayB1bmRlZmluZWRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJi
dWlsZFR5cGVPZiB1bmRlZmluZWQgY2FzZSIpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJy
YW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwg
dW5zdXJlKG5vdENlbGxDYXNlKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBvYmplY3RDYXNlKTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKGlzT2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksIHVuc3VyZShvYmpl
Y3RDYXNlKSwgdW5zdXJlKG5vdE9iamVjdENhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG9iamVjdENhc2UsIGZ1bmN0aW9uQ2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgIGlzRnVuY3Rpb24odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgU3Bl
Y09iamVjdCksCisgICAgICAgICAgICB1bnN1cmUoZnVuY3Rpb25DYXNlKSwgdW5zdXJlKG5vdEZ1
bmN0aW9uQ2FzZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZnVuY3Rpb25D
YXNlLCBub3RGdW5jdGlvbkNhc2UpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OkZ1bmN0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEZ1bmN0aW9uQ2FzZSwg
cmVhbGx5T2JqZWN0Q2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlz
RXhvdGljRm9yVHlwZW9mKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIChTcGVjT2JqZWN0IC0g
U3BlY0Z1bmN0aW9uKSksCisgICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KHJl
YWxseU9iamVjdENhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHJlYWxs
eU9iamVjdENhc2UsIHNsb3dQYXRoKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpPYmpl
Y3QpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIHVucmVhY2hh
YmxlKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUpLCBtX2NhbGxGcmFt
ZSwKKyAgICAgICAgICAgIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHZhbHVlKTsKKyAgICAg
ICAgVmVjdG9yPFN3aXRjaENhc2UsIDM+IGNhc2VzOworICAgICAgICBjYXNlcy5hcHBlbmQoU3dp
dGNoQ2FzZShtX291dC5jb25zdEludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6
OlVuZGVmaW5lZCkpLCB1bmRlZmluZWRDYXNlKSk7CisgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0
Y2hDYXNlKG1fb3V0LmNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVHlwZW9mVHlwZTo6
T2JqZWN0KSksIHJlYWxseU9iamVjdENhc2UpKTsKKyAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRj
aENhc2UobV9vdXQuY29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpG
dW5jdGlvbikpLCBmdW5jdGlvbkNhc2UpKTsKKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rp
b24ocmVzdWx0LCBjYXNlcywgdW5yZWFjaGFibGUsIFdlaWdodCgpKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHVucmVhY2hhYmxlLCBub3RPYmplY3RDYXNlKTsKKyAgICAgICAg
bV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5v
dE9iamVjdENhc2UsIHN0cmluZ0Nhc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBpc1N0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkgJiAoU3BlY0NlbGwgLSBTcGVj
T2JqZWN0KSksCisgICAgICAgICAgICB1bnN1cmUoc3RyaW5nQ2FzZSksIHVuc3VyZShzeW1ib2xD
YXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJpbmdDYXNlLCBzeW1i
b2xDYXNlKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpTdHJpbmcpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3ltYm9sQ2FzZSwgbm90Q2VsbENhc2UpOworICAgICAg
ICBmdW5jdG9yKFR5cGVvZlR5cGU6OlN5bWJvbCk7CisgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhub3RDZWxsQ2FzZSwgbnVtYmVyQ2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgIGlzTnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIH5TcGVjQ2Vs
bCksCisgICAgICAgICAgICB1bnN1cmUobnVtYmVyQ2FzZSksIHVuc3VyZShub3ROdW1iZXJDYXNl
KSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhudW1iZXJDYXNlLCBub3ROdW1i
ZXJDYXNlKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpOdW1iZXIpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90TnVtYmVyQ2FzZSwgbm90TnVsbENhc2UpOworICAg
ICAgICBMVmFsdWUgaXNOdWxsOworICAgICAgICBpZiAocHJvdmVuVHlwZShjaGlsZCkgJiBTcGVj
T3RoZXIpCisgICAgICAgICAgICBpc051bGwgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29u
c3RJbnQ2NChWYWx1ZU51bGwpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXNOdWxsID0g
bV9vdXQuYm9vbGVhbkZhbHNlOworICAgICAgICBtX291dC5icmFuY2goaXNOdWxsLCB1bnN1cmUo
cmVhbGx5T2JqZWN0Q2FzZSksIHVuc3VyZShub3ROdWxsQ2FzZSkpOworICAgICAgICAKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obm90TnVsbENhc2UsIGJvb2xlYW5DYXNlKTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKAorICAgICAgICAgICAgaXNCb29sZWFuKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxk
KSAmIH4oU3BlY0NlbGwgfCBTcGVjRnVsbE51bWJlcikpLAorICAgICAgICAgICAgdW5zdXJlKGJv
b2xlYW5DYXNlKSwgdW5zdXJlKHVuZGVmaW5lZENhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGJvb2xlYW5DYXNlLCB1bmRlZmluZWRDYXNlKTsKKyAgICAgICAgZnVuY3Rv
cihUeXBlb2ZUeXBlOjpCb29sZWFuKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KHVuZGVmaW5lZENhc2UsIGxhc3ROZXh0KTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpV
bmRlZmluZWQpOworICAgIH0KKyAgICAKICAgICBMVmFsdWUgZG91YmxlVG9JbnQzMihMVmFsdWUg
ZG91YmxlVmFsdWUsIGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoLCBib29sIGlzU2lnbmVkID0gdHJ1
ZSkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIGdyZWF0RW5vdWdoID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJkb3VibGVUb0ludDMyIGdyZWF0RW5vdWdoIikpOwpAQCAtNzE3Nyw2ICs3NDE4
LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gcHJvdmVuOwogICAgICAgICByZXR1
cm4gaXNOb3RUeXBlKGNlbGwsIEpTRnVuY3Rpb25UeXBlKTsKICAgICB9CisgICAgICAgICAgICAK
KyAgICBMVmFsdWUgaXNFeG90aWNGb3JUeXBlb2YoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBl
IHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmICghKHR5cGUgJiBTcGVjT2Jq
ZWN0T3RoZXIpKQorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICAg
ICAgcmV0dXJuIG1fb3V0LnRlc3ROb25aZXJvOCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4KGNl
bGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAorICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQ4KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERh
dGEpKTsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVlIGlzVHlwZShMVmFsdWUgY2VsbCwgSlNUeXBl
IHR5cGUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hD
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hD
YXNlLmgJKHJldmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogCi0gICAgU3dpdGNoQ2FzZShMVmFsdWUgdmFsdWUsIExCYXNpY0Jsb2NrIHRhcmdl
dCwgV2VpZ2h0IHdlaWdodCkKKyAgICBTd2l0Y2hDYXNlKExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxv
Y2sgdGFyZ2V0LCBXZWlnaHQgd2VpZ2h0ID0gV2VpZ2h0KCkpCiAgICAgICAgIDogbV92YWx1ZSh2
YWx1ZSkKICAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCiAgICAgICAgICwgbV93ZWlnaHQod2Vp
Z2h0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CShyZXZpc2lvbiAxODM3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiR1BS
SW5mby5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5o
IgorI2luY2x1ZGUgIlR5cGVvZlR5cGUuaCIKICNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTM2Nyw2ICszNjgsMzYgQEAgcHVibGljOgogICAgICAgICBzdG9yZVB0cih0YWcs
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAg
IH0KICNlbmRpZgorICAgIAorICAgIEp1bXBMaXN0IGJyYW5jaElmTm90RXF1YWwoSlNWYWx1ZVJl
Z3MgcmVncywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaDY0KE5vdEVxdWFsLCByZWdzLmdwcigpLCBUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKHZhbHVlKSkpOworI2Vsc2UKKyAgICAgICAgSnVtcExpc3QgcmVzdWx0Owor
ICAgICAgICByZXN1bHQuYXBwZW5kKE5vdEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1t
MzIodmFsdWUudGFnKCkpKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCB2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgLy8gVGhlc2Ug
ZG9uJ3QgaGF2ZSBhbnl0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgcGF5bG9hZC4KKyAgICAgICAg
cmVzdWx0LmFwcGVuZChOb3RFcXVhbCwgcmVncy5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMih2
YWx1ZS5wYXlsb2FkKCkpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorICAgIH0K
KyAgICAKKyAgICBKdW1wIGJyYW5jaElmRXF1YWwoSlNWYWx1ZVJlZ3MgcmVncywgSlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIGJyYW5jaDY0
KEVxdWFsLCByZWdzLmdwcigpLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSkp
OworI2Vsc2UKKyAgICAgICAgSnVtcCBub3RFcXVhbDsKKyAgICAgICAgLy8gVGhlc2UgZG9uJ3Qg
aGF2ZSBhbnl0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgcGF5bG9hZC4KKyAgICAgICAgaWYgKCF2
YWx1ZS5pc0VtcHR5KCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAg
ICBub3RFcXVhbCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdzLnBheWxvYWRHUFIoKSwgVHJ1c3Rl
ZEltbTMyKHZhbHVlLnBheWxvYWQoKSkpOworICAgICAgICBKdW1wIHJlc3VsdCA9IGJyYW5jaDMy
KEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIodmFsdWUudGFnKCkpKTsKKyAgICAg
ICAgaWYgKG5vdEVxdWFsLmlzU2V0KCkpCisgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRoaXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCisgICAgfQogCiAgICAgSnVtcCBicmFu
Y2hJZk5vdENlbGwoR1BSUmVnIHJlZykKICAgICB7CkBAIC00MjYsNiArNDU3LDU0IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIH0KICAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIHRlbXBHUFIgaXMg
bm90IHVzZWQgaW4gNjQtYml0IG1vZGUuCisgICAgSnVtcCBicmFuY2hJZk51bWJlcihKU1ZhbHVl
UmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHRlbXBHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0
KE5vblplcm8sIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Cisj
ZWxzZQorICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ3MudGFnR1BSKCksIHRlbXBH
UFIpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoQmVsb3csIHRlbXBHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSk7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgLy8g
Tm90ZSB0aGF0IHRoZSB0ZW1wR1BSIGlzIG5vdCB1c2VkIGluIDY0LWJpdCBtb2RlLgorICAgIEp1
bXAgYnJhbmNoSWZOb3ROdW1iZXIoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIpCisg
ICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIFVOVVNFRF9QQVJBTSh0ZW1wR1BSKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWdzLmdwcigpLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworI2Vsc2UKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdzLnRhZ0dQUigpLCB0ZW1wR1BSKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEp
KTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGUgdGVtcEdQUiBpcyBub3Qg
dXNlZCBpbiAzMi1iaXQgbW9kZS4KKyAgICBKdW1wIGJyYW5jaElmQm9vbGVhbihKU1ZhbHVlUmVn
cyByZWdzLCBHUFJSZWcgdGVtcEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgbW92ZShyZWdzLmdwcigpLCB0ZW1wR1BSKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgdGVtcEdQUik7CisgICAgICAgIHJl
dHVybiBicmFuY2hUZXN0NjQoWmVybywgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KH4xKSkpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFsLCBy
ZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOworI2VuZGlm
CisgICAgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgdGVtcEdQUiBpcyBub3QgdXNlZCBp
biAzMi1iaXQgbW9kZS4KKyAgICBKdW1wIGJyYW5jaElmTm90Qm9vbGVhbihKU1ZhbHVlUmVncyBy
ZWdzLCBHUFJSZWcgdGVtcEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
bW92ZShyZWdzLmdwcigpLCB0ZW1wR1BSKTsKKyAgICAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgdGVtcEdQUik7CisgICAgICAgIHJldHVy
biBicmFuY2hUZXN0NjQoTm9uWmVybywgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KH4xKSkpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOworI2Vu
ZGlmCisgICAgfQorICAgIAogICAgIEp1bXAgYnJhbmNoSWZPYmplY3QoR1BSUmVnIGNlbGxHUFIp
CiAgICAgewogICAgICAgICByZXR1cm4gYnJhbmNoOCgKQEAgLTcwNyw2ICs3ODYsMjMgQEAgcHVi
bGljOgogICAgIH0KICNlbmRpZgogICAgIAorICAgIHZvaWQgYm94Qm9vbGVhblBheWxvYWQoR1BS
UmVnIGJvb2xHUFIsIEdQUlJlZyBwYXlsb2FkR1BSKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIGJvb2xHUFIsIHBheWxv
YWRHUFIpOworI2Vsc2UKKyAgICAgICAgbW92ZShib29sR1BSLCBwYXlsb2FkR1BSKTsKKyNlbmRp
ZgorICAgIH0KKworICAgIHZvaWQgYm94Qm9vbGVhbihHUFJSZWcgYm9vbEdQUiwgSlNWYWx1ZVJl
Z3MgYm94ZWRSZWdzKQorICAgIHsKKyAgICAgICAgYm94Qm9vbGVhblBheWxvYWQoYm9vbEdQUiwg
Ym94ZWRSZWdzLnBheWxvYWRHUFIoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIGJveGVkUmVncy50YWdHUFIo
KSk7CisjZW5kaWYKKyAgICB9CisgICAgCiAgICAgdm9pZCBjYWxsRXhjZXB0aW9uRnV6eigpOwog
ICAgIAogICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tLaW5kIHsgTm9ybWFsRXhjZXB0aW9uQ2hlY2ss
IEludmVydGVkRXhjZXB0aW9uQ2hlY2sgfTsKQEAgLTg0Myw2ICs5MzksODIgQEAgcHVibGljOgog
ICAgICAgICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY2Vs
bCkgKyBKU0NlbGw6OmdjRGF0YU9mZnNldCgpOwogICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDgo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3Mo
YWRkcmVzcykpOwogICAgIH0KKyAgICAKKyAgICAvLyBFbWl0cyB0aGUgYnJhbmNoIHN0cnVjdHVy
ZSBmb3IgdHlwZW9mLiBUaGUgY29kZSBlbWl0dGVkIGJ5IHRoaXMgZG9lc24ndCBmYWxsIHRocm91
Z2guIFRoZQorICAgIC8vIGZ1bmN0b3IgaXMgY2FsbGVkIGF0IHRob3NlIHBvaW50cyB3aGVyZSB3
ZSBoYXZlIHBpbnBvaW50ZWQgYSB0eXBlLiBPbmUgd2F5IHRvIHVzZSB0aGlzIGlzIHRvCisgICAg
Ly8gaGF2ZSB0aGUgZnVuY3RvciBlbWl0IHRoZSBjb2RlIHRvIHB1dCB0aGUgdHlwZSBzdHJpbmcg
aW50byBhbiBhcHByb3ByaWF0ZSByZWdpc3RlciBhbmQgdGhlbgorICAgIC8vIGp1bXAgb3V0LiBB
IHNlY29uZGFyeSBmdW5jdG9yIGlzIHVzZWQgZm9yIHRoZSBjYWxsIHRyYXAgYW5kIG1hc3F1ZXJh
ZGVzLWFzLXVuZGVmaW5lZCBzbG93CisgICAgLy8gY2FzZS4gSXQgaXMgcGFzc2VkIHRoZSB1bmxp
bmtlZCBqdW1wIHRvIHRoZSBzbG93IGNhc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
ciwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdG9yPgorICAgIHZvaWQgZW1pdFR5cGVPZigKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IsCisgICAgICAgIGNvbnN0IFNsb3dQYXRoRnVuY3RvciYgc2xvd1BhdGhGdW5jdG9yKQorICAg
IHsKKyAgICAgICAgLy8gSW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIGJyYW5jaGluZyBzdHJ1Y3R1
cmU6CisgICAgICAgIC8vCisgICAgICAgIC8vIGlmIChpcyBjZWxsKSB7CisgICAgICAgIC8vICAg
ICBpZiAoaXMgb2JqZWN0KSB7CisgICAgICAgIC8vICAgICAgICAgaWYgKGlzIGZ1bmN0aW9uKSB7
CisgICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbjsKKyAgICAgICAgLy8gICAg
ICAgICB9IGVsc2UgaWYgKGRvZXNuJ3QgaGF2ZSBjYWxsIHRyYXAgYW5kIGRvZXNuJ3QgbWFzcXVl
cmFkZSBhcyB1bmRlZmluZWQpIHsKKyAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIG9iamVj
dAorICAgICAgICAvLyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vICAgICAgICAgICAgIHJl
dHVybiBzbG93UGF0aCgpOworICAgICAgICAvLyAgICAgICAgIH0KKyAgICAgICAgLy8gICAgIH0g
ZWxzZSBpZiAoaXMgc3RyaW5nKSB7CisgICAgICAgIC8vICAgICAgICAgcmV0dXJuIHN0cmluZwor
ICAgICAgICAvLyAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gICAgICAgICByZXR1cm4gc3ltYm9s
CisgICAgICAgIC8vICAgICB9CisgICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgbnVtYmVyKSB7Cisg
ICAgICAgIC8vICAgICByZXR1cm4gbnVtYmVyCisgICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgbnVs
bCkgeworICAgICAgICAvLyAgICAgcmV0dXJuIG9iamVjdAorICAgICAgICAvLyB9IGVsc2UgaWYg
KGlzIGJvb2xlYW4pIHsKKyAgICAgICAgLy8gICAgIHJldHVybiBib29sZWFuCisgICAgICAgIC8v
IH0gZWxzZSB7CisgICAgICAgIC8vICAgICByZXR1cm4gdW5kZWZpbmVkCisgICAgICAgIC8vIH0K
KyAgICAgICAgCisgICAgICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdzKTsK
KyAgICAgICAgCisgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gcmVncy5wYXlsb2FkR1BSKCk7Cisg
ICAgICAgIEp1bXAgbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RPYmplY3QoY2VsbEdQUik7CisgICAg
ICAgIAorICAgICAgICBKdW1wIG5vdEZ1bmN0aW9uID0gYnJhbmNoSWZOb3RGdW5jdGlvbihjZWxs
R1BSKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpGdW5jdGlvbiwgZmFsc2UpOworICAg
ICAgICAKKyAgICAgICAgbm90RnVuY3Rpb24ubGluayh0aGlzKTsKKyAgICAgICAgc2xvd1BhdGhG
dW5jdG9yKAorICAgICAgICAgICAgYnJhbmNoVGVzdDgoCisgICAgICAgICAgICAgICAgTm9uWmVy
bywKKyAgICAgICAgICAgICAgICBBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCB8IFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkpKTsKKyAgICAgICAgZnVuY3Rv
cihUeXBlb2ZUeXBlOjpPYmplY3QsIGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIG5vdE9iamVj
dC5saW5rKHRoaXMpOworICAgICAgICAKKyAgICAgICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hJ
Zk5vdFN0cmluZyhjZWxsR1BSKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpTdHJpbmcs
IGZhbHNlKTsKKyAgICAgICAgbm90U3RyaW5nLmxpbmsodGhpcyk7CisgICAgICAgIGZ1bmN0b3Io
VHlwZW9mVHlwZTo6U3ltYm9sLCBmYWxzZSk7CisgICAgICAgIAorICAgICAgICBub3RDZWxsLmxp
bmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3ROdW1iZXIgPSBicmFuY2hJZk5vdE51bWJlcihy
ZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpOdW1iZXIsIGZhbHNl
KTsKKyAgICAgICAgbm90TnVtYmVyLmxpbmsodGhpcyk7CisgICAgICAgIAorICAgICAgICBKdW1w
TGlzdCBub3ROdWxsID0gYnJhbmNoSWZOb3RFcXVhbChyZWdzLCBqc051bGwoKSk7CisgICAgICAg
IGZ1bmN0b3IoVHlwZW9mVHlwZTo6T2JqZWN0LCBmYWxzZSk7CisgICAgICAgIG5vdE51bGwubGlu
ayh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgbm90Qm9vbGVhbiA9IGJyYW5jaElmTm90
Qm9vbGVhbihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpCb29s
ZWFuLCBmYWxzZSk7CisgICAgICAgIG5vdEJvb2xlYW4ubGluayh0aGlzKTsKKyAgICAgICAgCisg
ICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6VW5kZWZpbmVkLCB0cnVlKTsKKyAgICB9CiAKICAg
ICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBGb3IoQ29k
ZUJsb2NrKik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkocmV2aXNpb24gMTgzNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAgZXh0ZXJuICJD
IiB7CiAgICAgRDogZG91YmxlCiAgICAgRTogRXhlY1N0YXRlKgogICAgIEY6IENhbGxGcmFtZSoK
KyAgICBHOiBKU0dsb2JhbE9iamVjdCoKICAgICBJOiBTdHJpbmdJbXBsKgogICAgIEljZjogSW5s
aW5lQ2FsbEZyYW1lKgogICAgIElkYzogY29uc3QgSWRlbnRpZmllcioKQEAgLTEyNyw2ICsxMjgs
NyBAQCB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlCiB0eXBlZGVmIEpT
Q2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3Bl
cmF0aW9uX0VDWkMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QsIEpTQ2VsbCopOwogdHlw
ZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpD
X0pJVE9wZXJhdGlvbl9FR0MpKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKik7
CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VJY2YpKEV4
ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gKCpDX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlw
ZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSnNjKShFeGVjU3Rh
dGUqLCBKU1Njb3BlKik7CkBAIC0xNTcsMTAgKzE1OSwxMiBAQCB0eXBlZGVmIGludDY0X3QgSklU
X09QRVJBVElPTigqUV9KSVRPcGVyCiB0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpf
SklUT3BlcmF0aW9uX0QpKGRvdWJsZSk7CiB0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAo
KlpfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBpbnQzMl90IEpJVF9PUEVS
QVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVm
IGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0VHQykoRXhlY1N0YXRlKiwg
SlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9O
ICgqWl9KSVRPcGVyYXRpb25fRVNKc3MpKEV4ZWNTdGF0ZSosIHNpemVfdCwgSlNTdHJpbmcqKTsK
IHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRUpaKShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CiB0eXBlZGVmIGludDMyX3QgSklUX09Q
RVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0VKWlopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBpbnQzMl90LCBpbnQzMl90KTsKIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJ
VE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBz
aXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VHQykoRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqLCBKU0NlbGwqKTsKIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpT
X0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBz
aXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJ
T04gKCpTX0pJVE9wZXJhdGlvbl9FT0pzcykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1N0cmlu
ZyopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdz
LmgJKHJldmlzaW9uIDE4MzcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nt
YWxsU3RyaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAj
aWZuZGVmIFNtYWxsU3RyaW5nc19oCiAjZGVmaW5lIFNtYWxsU3RyaW5nc19oCiAKKyNpbmNsdWRl
ICJUeXBlb2ZUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAKQEAgLTg1LDYgKzg2LDI5IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
SlNDX0NPTU1PTl9TVFJJTkdTX0VBQ0hfTkFNRShKU0NfQ09NTU9OX1NUUklOR1NfQUNDRVNTT1Jf
REVGSU5JVElPTikKICN1bmRlZiBKU0NfQ09NTU9OX1NUUklOR1NfQUNDRVNTT1JfREVGSU5JVElP
TgorICAgIAorICAgIEpTU3RyaW5nKiB0eXBlU3RyaW5nKFR5cGVvZlR5cGUgdHlwZSkgY29uc3QK
KyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGVvZlR5cGU6
OlVuZGVmaW5lZDoKKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRTdHJpbmcoKTsKKyAgICAg
ICAgY2FzZSBUeXBlb2ZUeXBlOjpCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5T
dHJpbmcoKTsKKyAgICAgICAgY2FzZSBUeXBlb2ZUeXBlOjpOdW1iZXI6CisgICAgICAgICAgICBy
ZXR1cm4gbnVtYmVyU3RyaW5nKCk7CisgICAgICAgIGNhc2UgVHlwZW9mVHlwZTo6U3RyaW5nOgor
ICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1N0cmluZygpOworICAgICAgICBjYXNlIFR5cGVvZlR5
cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiBzeW1ib2xTdHJpbmcoKTsKKyAgICAgICAg
Y2FzZSBUeXBlb2ZUeXBlOjpPYmplY3Q6CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0U3RyaW5n
KCk7CisgICAgICAgIGNhc2UgVHlwZW9mVHlwZTo6RnVuY3Rpb246CisgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb25TdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQog
CiAgICAgSlNTdHJpbmcqIG51bGxPYmplY3RTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX251bGxP
YmplY3RTdHJpbmc7IH0KICAgICBKU1N0cmluZyogdW5kZWZpbmVkT2JqZWN0U3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gbV91bmRlZmluZWRPYmplY3RTdHJpbmc7IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZW9mVHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHlwZW9mVHlwZS5oIgorCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGVvZlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIFR5cGVvZlR5cGU6OlVuZGVmaW5lZDoKKyAgICAgICAgb3V0LnByaW50
KCJ1bmRlZmluZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9mVHlwZTo6Qm9v
bGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJib29sZWFuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFR5cGVvZlR5cGU6Ok51bWJlcjoKKyAgICAgICAgb3V0LnByaW50KCJudW1iZXIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9mVHlwZTo6U3RyaW5nOgorICAgICAgICBv
dXQucHJpbnQoInN0cmluZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlb2ZUeXBl
OjpTeW1ib2w6CisgICAgICAgIG91dC5wcmludCgic3ltYm9sIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFR5cGVvZlR5cGU6Ok9iamVjdDoKKyAgICAgICAgb3V0LnByaW50KCJvYmplY3Qi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9mVHlwZTo6RnVuY3Rpb246CisgICAg
ICAgIG91dC5wcmludCgiZnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZW9mVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZW9mVHlwZV9oCisjZGVmaW5lIFR5
cGVvZlR5cGVfaAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitlbnVtIGNsYXNzIFR5cGVvZlR5cGUgeworICAgIFVuZGVmaW5lZCwKKyAgICBCb29s
ZWFuLAorICAgIE51bWJlciwKKyAgICBTdHJpbmcsCisgICAgU3ltYm9sLAorICAgIE9iamVjdCwK
KyAgICBGdW5jdGlvbiAgICAKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2Ug
V1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6VHlwZW9m
VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVHlwZW9mVHlwZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdHlwZS1vZi1mdW5jdGlv
bnMtYW5kLW9iamVjdHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy90eXBlLW9mLWZ1bmN0aW9ucy1hbmQtb2JqZWN0cy5qcwkocmV2aXNpb24gMTgz
NzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90eXBlLW9mLWZ1bmN0
aW9ucy1hbmQtb2JqZWN0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjYsNDggKzI2LDYxIEBAIG5v
SW5saW5lKGJhcik7CiBub0lubGluZShiYXopOwogbm9JbmxpbmUoZnV6eik7CiAKLWZ1bmN0aW9u
IGV4cGVjdChmLCB2LCBleHBlY3RlZCkgewotICAgIHZhciByZXN1bHQgPSBmKHYpOwotICAgIGlm
IChyZXN1bHQgIT0gZXhwZWN0ZWQpCi0gICAgICAgIHRocm93ICJFcnJvcjogIiArIGYubmFtZSAr
ICIoIiArIHYgKyAiKSByZXR1cm5lZCAiICsgcmVzdWx0ICsgIiBpbnN0ZWFkIG9mICIgKyBleHBl
Y3RlZDsKLX0KK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIGVycm9ycyA9IFtdOworCisgICAg
ZnVuY3Rpb24gdGVzdFZhbHVlKHYsIGV4cGVjdGVkKSB7CisgICAgICAgIGZ1bmN0aW9uIGV4cGVj
dChmLCBleHBlY3RlZCkgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGYodik7CisgICAgICAg
ICAgICBpZiAocmVzdWx0ICE9IGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIGVycm9ycy5wdXNo
KGYubmFtZSArICIoIiArIHYgKyAiKSByZXR1cm5lZCAiICsgcmVzdWx0ICsgIiBpbnN0ZWFkIG9m
ICIgKyBleHBlY3RlZCk7CisgICAgICAgIH0KIAotZnVuY3Rpb24gdGVzdCh2LCBleHBlY3RlZCkg
ewotICAgIHN3aXRjaCAoZXhwZWN0ZWQpIHsKLSAgICBjYXNlICJmdW5jdGlvbiI6Ci0gICAgICAg
IGV4cGVjdChmb28sIHYsICJmdW5jdGlvbiIpOwotICAgICAgICBleHBlY3QoYmFyLCB2LCAyKTsK
LSAgICAgICAgZXhwZWN0KGJheiwgdiwgdHJ1ZSk7Ci0gICAgICAgIGV4cGVjdChmdXp6LCB2LCBm
YWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIm9iamVjdCI6Ci0gICAgICAgIGV4cGVj
dChmb28sIHYsICJvYmplY3QiKTsKLSAgICAgICAgZXhwZWN0KGJhciwgdiwgMSk7Ci0gICAgICAg
IGV4cGVjdChiYXosIHYsIGZhbHNlKTsKLSAgICAgICAgZXhwZWN0KGZ1enosIHYsIHRydWUpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlICJvdGhlciI6Ci0gICAgICAgIHZhciByZXN1bHQgPSBm
b28odik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gIm9iamVjdCIgfHwgcmVzdWx0ID09ICJmdW5j
dGlvbiIpCi0gICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGZvbygiICsgdiArICIpIHJldHVybmVk
ICIgKyByZXN1bHQgKyAiIGJ1dCBleHBlY3RlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBvYmplY3Qg
b3IgZnVuY3Rpb24iOwotICAgICAgICBleHBlY3QoYmFyLCB2LCAzKTsKLSAgICAgICAgZXhwZWN0
KGJheiwgdiwgZmFsc2UpOwotICAgICAgICBleHBlY3QoZnV6eiwgdiwgZmFsc2UpOwotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICB0aHJvdyAiQmFkIGV4cGVjdGVkIGNhc2Ui
OworICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkKSB7CisgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoK
KyAgICAgICAgICAgIGV4cGVjdChmb28sICJmdW5jdGlvbiIpOworICAgICAgICAgICAgZXhwZWN0
KGJhciwgMik7CisgICAgICAgICAgICBleHBlY3QoYmF6LCB0cnVlKTsKKyAgICAgICAgICAgIGV4
cGVjdChmdXp6LCBmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAib2Jq
ZWN0IjoKKyAgICAgICAgICAgIGV4cGVjdChmb28sICJvYmplY3QiKTsKKyAgICAgICAgICAgIGV4
cGVjdChiYXIsIDEpOworICAgICAgICAgICAgZXhwZWN0KGJheiwgZmFsc2UpOworICAgICAgICAg
ICAgZXhwZWN0KGZ1enosIHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Im90aGVyIjoKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBmb28odik7CisgICAgICAgICAgICBp
ZiAocmVzdWx0ID09ICJvYmplY3QiIHx8IHJlc3VsdCA9PSAiZnVuY3Rpb24iKQorICAgICAgICAg
ICAgICAgIGVycm9ycy5wdXNoKCJmb28oIiArIHYgKyAiKSByZXR1cm5lZCAiICsgcmVzdWx0ICsg
IiBidXQgZXhwZWN0ZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIik7
CisgICAgICAgICAgICBleHBlY3QoYmFyLCAzKTsKKyAgICAgICAgICAgIGV4cGVjdChiYXosIGZh
bHNlKTsKKyAgICAgICAgICAgIGV4cGVjdChmdXp6LCBmYWxzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHRocm93ICJCYWQgZXhwZWN0ZWQgY2Fz
ZSI7CisgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdGVzdFZhbHVlKHt9LCAib2JqZWN0Iik7
CisgICAgdGVzdFZhbHVlKGZ1bmN0aW9uKCkgeyB9LCAiZnVuY3Rpb24iKTsKKyAgICB0ZXN0VmFs
dWUoImhlbGxvIiwgIm90aGVyIik7CisgICAgdGVzdFZhbHVlKDQyLCAib3RoZXIiKTsKKyAgICB0
ZXN0VmFsdWUobnVsbCwgIm9iamVjdCIpOworICAgIHRlc3RWYWx1ZSh2b2lkIDAsICJvdGhlciIp
OworICAgIHRlc3RWYWx1ZSg0Mi41LCAib3RoZXIiKTsKKyAgICB0ZXN0VmFsdWUoTWFwLCAiZnVu
Y3Rpb24iKTsKKyAgICB0ZXN0VmFsdWUoRGF0ZSwgImZ1bmN0aW9uIik7CisgICAgdGVzdFZhbHVl
KE1hcC5wcm90b3R5cGUsICJvYmplY3QiKTsKKyAgICAKKyAgICBpZiAoIWVycm9ycy5sZW5ndGgp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9ycy5s
ZW5ndGg7ICsraSkKKyAgICAgICAgcHJpbnQoIkVycm9yOiAiICsgZXJyb3JzW2ldKTsKKyAgICB0
aHJvdyAiRW5jb3VudGVyZWQgZXJyb3JzIGR1cmluZyB0ZXN0IHJ1bi4iOwogfQogCi1mb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICB0ZXN0KHt9LCAib2JqZWN0Iik7Ci0gICAg
dGVzdChmdW5jdGlvbigpIHsgfSwgImZ1bmN0aW9uIik7Ci0gICAgdGVzdCgiaGVsbG8iLCAib3Ro
ZXIiKTsKLSAgICB0ZXN0KDQyLCAib3RoZXIiKTsKLSAgICB0ZXN0KG51bGwsICJvYmplY3QiKTsK
LSAgICB0ZXN0KHZvaWQgMCwgIm90aGVyIik7Ci0gICAgdGVzdCg0Mi41LCAib3RoZXIiKTsKLSAg
ICB0ZXN0KE1hcCwgImZ1bmN0aW9uIik7Ci0gICAgdGVzdChEYXRlLCAiZnVuY3Rpb24iKTsKLSAg
ICB0ZXN0KE1hcC5wcm90b3R5cGUsICJvYmplY3QiKTsKLX0KK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDA7ICsraSkKKyAgICB0ZXN0KCk7CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252243</attachid>
            <date>2015-05-02 12:19:58 -0700</date>
            <delta_ts>2015-05-02 15:21:32 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>69816</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzNzE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBA
CisyMDE1LTA1LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VHlwZU9mIHNob3VsZCBiZSBmYXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDQzOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIEFkZHMgY29tcHJlaGVuc2l2ZSBzdXBwb3J0IGZvciBmYXN0
IHR5cGVvZiB0byB0aGUgb3B0aW1pemluZyBKSVRzLiBDYWxscyBpbnRvIHRoZSBydW50aW1lCisg
ICAgICAgIGFyZSBvbmx5IHVzZWQgZm9yIHZlcnkgZXhvdGljIG9iamVjdHMgLSB0aGV5IG11c3Qg
aGF2ZSBlaXRoZXIgdGhlIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgb3IKKyAgICAgICAgVHlwZU9m
U2hvdWxkQ2FsbEdldENhbGxEYXRhIHR5cGUgZmxhZ3Mgc2V0LiBBbGwgb3RoZXIgY2FzZXMgYXJl
IGhhbmRsZWQgaW5saW5lLgorICAgICAgICAKKyAgICAgICAgVGhpcyBtZWFucyBvcHRpbWl6aW5n
IElzT2JqZWN0T3JOdWxsLCBJc0Z1bmN0aW9uLCBhbmQgVHlwZU9mIC0gYWxsIG5vZGUgdHlwZXMg
dGhhdCB1c2VkIHRvCisgICAgICAgIHJlbHkgaGVhdmlseSBvbiBDKysgY2FsbHMgdG8gZnVsZmls
bCB0aGVpciBmdW5jdGlvbi4KKyAgICAgICAgCisgICAgICAgIEJlY2F1c2UgVHlwZU9mIGlzIG5v
dyBzbyBmYXN0LCB3ZSBubyBsb25nZXIgbmVlZCB0byBkbyBhbnkgc3BlY3VsYXRpb25zIG9uIHRo
aXMgbm9kZS4KKyAgICAgICAgCisgICAgICAgIEluIHRoZSBGVEwsIHdlIHRha2UgdGhpcyBmdXJ0
aGVyIGJ5IHF1ZXJ5aW5nIEFJIGZvciBlYWNoIGJyYW5jaCBpbiB0aGUgVHlwZU9mIGRlY2lzaW9u
IHRyZWUuCisgICAgICAgIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgVHlwZU9mIGlzIGRvbWluYXRl
ZCBieSBhbnkgdHlwZSBjaGVja3MsIHdlIHdpbGwgYXV0b21hdGljYWxseSBwcnVuZQorICAgICAg
ICBvdXQgY2FzZXMgdGhhdCBhcmUgcmVkdW5kYW50LgorICAgICAgICAKKyAgICAgICAgVGhpcyBw
YXRjaCBhbnRpY2lwYXRlcyB0aGUgYWRkaXRpb24gb2YgU3dpdGNoVHlwZU9mIG9yIHNvbWV0aGlu
ZyBsaWtlIHRoYXQuIFNvLCB0aGUgVHlwZU9mCisgICAgICAgIGNvZGUgZ2VuZXJhdGlvbiBpcyBk
ZXNpZ25lZCB0byBiZSByZXVzYWJsZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBzcGVl
ZC11cCBvbiBtb3N0IHR5cGVvZiBiZW5jaG1hcmtzLiBCdXQsIGl0IGlzIGEgc2xvdy1kb3duIG9u
IGJlbmNobWFya3MgdGhhdCB0YWtlCisgICAgICAgIHRoZSBleG90aWMgY2FsbCB0cmFwIGhvb2su
IFRoYXQgaG9vayBpcyBub3cgaW4gYSBkZWVwZXIgc2xvdyBwYXRoIHRoYW4gYmVmb3JlLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKTogVHlwZU9mIHdhcyBwdXJlIGFsbCBhbG9uZywg
YnV0IHdlIGZhaWxlZCB0byByZWFsaXplIHRoaXMuCisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAg
ICAgICogZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJu
YWwpOgorICAgICAgICAqIGRmZy9ERkdIZWFwTG9jYXRpb24uaDoKKyAgICAgICAgKiBkZmcvREZH
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlSXNPYmplY3RPck51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlSXNGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVUeXBlT2YpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpibGVzc2VkQm9vbGVhblJl
c3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24p
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5o
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUlzT2JqZWN0T3JOdWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUlzRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlVHlwZU9mKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6YnVpbGRUeXBlT2YpOiBSZXVzYWJsZSBUeXBlT2YgYnVpbGRpbmcgZm9yIHRoZSBG
VEwuCisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmlzRXhvdGljRm9yVHlwZW9m
KToKKyAgICAgICAgKiBmdGwvRlRMU3dpdGNoQ2FzZS5oOgorICAgICAgICAoSlNDOjpGVEw6OlN3
aXRjaENhc2U6OlN3aXRjaENhc2UpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdEVxdWFsKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZkVxdWFsKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk51bWJlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6YnJhbmNoSWZOb3ROdW1iZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmQm9vbGVhbik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZOb3RCb29sZWFuKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpib3hCb29s
ZWFuUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Ym94Qm9vbGVhbik6
CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFR5cGVPZik6IFJldXNhYmxlIFR5
cGVPZiBidWlsZGluZyBmb3IgYXNzZW1ibHkgSklUcy4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvU21hbGxTdHJpbmdzLmg6CisgICAgICAgIChKU0M6
OlNtYWxsU3RyaW5nczo6dHlwZVN0cmluZyk6CisgICAgICAgICogcnVudGltZS9UeXBlb2ZUeXBl
LmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIHJ1
bnRpbWUvVHlwZW9mVHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvdHlwZS1v
Zi1mdW5jdGlvbnMtYW5kLW9iamVjdHMuanM6IE1vZGlmaWVkIHRoaXMgdGVzdCB0byBnaXZlIG1v
cmUgY29tcHJlaGVuc2l2ZSBmZWVkYmFjay4KKwogMjAxNS0wNS0wMiAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGFkZCBhIEZJWE1FIHJlZmVy
ZW5jaW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ1MjcuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODM3MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTU4MSw2ICs1ODEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUlVOVElNRV9TT1VSQ0VTCiAgICAg
cnVudGltZS9UeXBlU2V0LmNwcAogICAgIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3Bw
CiAgICAgcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAKKyAgICBydW50aW1lL1R5cGVvZlR5cGUu
Y3BwCiAgICAgcnVudGltZS9WTS5jcHAKICAgICBydW50aW1lL1ZNRW50cnlTY29wZS5jcHAKICAg
ICBydW50aW1lL1Zhck9mZnNldC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvagkocmV2aXNpb24gMTgzNzE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtODQxLDYgKzg0MSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XFRlc3RSdW5uZXJVdGlscy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheVR5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxUeXBlb2ZUeXBlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcVHlwZUxvY2F0aW9uQ2FjaGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxUeXBlUHJvZmlsZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxUeXBlUHJvZmlsZXJMb2cuY3BwIiAvPgpAQCAtMTY4OCw2ICsxNjg5
LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheUNvbnRy
b2xsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJh
eUlubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRB
cnJheVR5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZW9m
VHlwZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlTG9jYXRp
b25DYWNoZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlUHJv
ZmlsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZVByb2Zp
bGVyTG9nLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTgzNzE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcyNiw2ICs3MjYsOCBAQAogCQkw
RkY5MjJENDE0RjQ2QjQxMDA0MUEyNEUgLyogTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEExMTRCQTdG
ODIwMEJGRTI3MiAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3BwICovOyB9OwogCQkwRkZBNTQ5
NzE2Qjg4MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMjE2NTFDNjk3MDBBODBBRkUgLyogQTY0
RE9wY29kZS5jcHAgKi87IH07CiAJCTBGRkE1NDk4MTZCODgzNTMwMEIzQTk4MiAvKiBBNjRET3Bj
b2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJB
M0EyMzE2NTFDNjk3MDBBODBBRkUgLyogQTY0RE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRkI2QzM4MUFGNDhEREMwMERCMUJGNyAv
KiBUeXBlb2ZUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRkI2QzM2MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmNwcCAqLzsgfTsK
KwkJMEZGQjZDMzkxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkI2QzM3MUFGNDhEREMwMERCMUJG
NyAvKiBUeXBlb2ZUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZGQjkyMTgxNkQwMkVCMjAwNTVBNURCIC8qIERGR0FsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MTkxNkI2
Mjc3MjAwM0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkI5MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdC
YXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZG
QjkyMUIxNkQwMkYwMTAwNTVBNURCIC8qIERGR05vZGVBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTFGMTZCNjI3NzIwMDNGNjk2
QiAvKiBERkdOb2RlQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTI0NjIsNiArMjQ2NCw4IEBACiAJCTBGRjhCREU4MUFENENGNzEw
MERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluZmVycmVkVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRjkyMkNGMTRGNDZCMTMwMDQxQTI0RSAvKiBKU0NMTEludE9mZnNldHNF
eHRyYWN0b3IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rvcjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKKwkJMEZGQjZDMzYxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZW9mVHlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkI2QzM3MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVvZlR5cGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENv
bnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1v
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMx
MEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDOTlEMzE4NEVFMzE4MDA5QzEwQUIg
LyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDQ1MSw5ICs0NDU1LDkgQEAKIAkJCQlCQzlCQjk1QjBFMTk2
ODA2MDBERjg4NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0EwRTE5
OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQk4NkJGNjQyQTE0OERC
MkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8sCisJCQkJRkU0RDU1QjcxQUU3MTZDQTAwNTJF
NDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oICovLAogCQkJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhD
NCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLAogCQkJCTcwMTEzRDRBMUE4REIwOTMwMDM4
NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLywKLQkJCQlGRTRENTVCNzFBRTcxNkNBMDA1
MkU0NTkgLyogSXRlcmF0aW9uU3RhdHVzLmggKi8sCiAJCQkJOTNBREZDRTYwQ0NCRDdBQzAwRDMw
QjA4IC8qIEpTQXJyYXkuY3BwICovLAogCQkJCTkzODc3MkU1MDM4QkZFMTkwMDg2MzVDRSAvKiBK
U0FycmF5LmggKi8sCiAJCQkJMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXIuY3BwICovLApAQCAtNDczOSw2ICs0NzQzLDggQEAKIAkJCQkwRjJCNjZERDE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLywKIAkJCQk1MkIzMTBGRTE5NzVCNDI0MDA4MDg1
N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuY3BwICovLAogCQkJCTUyQjMxMTAwMTk3NUI0NjcwMDgw
ODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oICovLAorCQkJCTBGRkI2QzM2MUFGNDhEREMwMERC
MUJGNyAvKiBUeXBlb2ZUeXBlLmNwcCAqLywKKwkJCQkwRkZCNkMzNzFBRjQ4RERDMDBEQjFCRjcg
LyogVHlwZW9mVHlwZS5oICovLAogCQkJCTUyQzk1MkI4MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBl
UHJvZmlsZXIuY3BwICovLAogCQkJCTUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJv
ZmlsZXIuaCAqLywKIAkJCQkwRjJENERERjE5ODMyRDkxMDA3RDRCMTkgLyogVHlwZVByb2ZpbGVy
TG9nLmNwcCAqLywKQEAgLTU3MTEsNiArNTcxNyw3IEBACiAJCQkJQkMxOEMzRjQwRTE2RjVDRDAw
QjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0VBMTc0ODk2
QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZG
QjZDMzkxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0NDgzNkU3MTMyREE3QkUwMDVCRTc4NSAvKiBDb25zZXJ2YXRpdmVSb290cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTVGRDAwN0ExODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3NDE4OUIwMzhDMDA2MzMyMzEgLyogQ29uc29sZVR5
cGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTczNjEsNiArNzM2OCw3IEBACiAJCQkJMTQ3RjM5RDQx
MDdFQzM3NjAwNDI3QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJC
N0U0MEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBN0Y5OTM2MDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkZCNkMzODFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyogSlNQcm9maWxlclByaXZh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMUExN0JFREJEMzAwN0NCNjNBIC8qIEpT
UHJvbWlzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NEUyMjE3QkVFMjQwMDA3Q0I2M0Eg
LyogSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgzNzE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1OSw2ICsxNTksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgY2FzZSBHZXRFeGVjdXRhYmxlOgogICAg
IGNhc2UgQm90dG9tVmFsdWU6CisgICAgY2FzZSBUeXBlT2Y6CiAgICAgICAgIGRlZihQdXJlVmFs
dWUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIApAQCAtMzYyLDExICszNjMsNiBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSXNGdW5jdGlvbkxvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBu
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIFR5cGVPZjoKLSAgICAg
ICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihUeXBlT2ZMb2Ms
IE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgbm9kZSk7Ci0gICAgICAgIHJldHVybjsKLQog
ICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIFB1dEJ5
SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHJldmlzaW9uIDE4MzcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NiwxNCArMzQ2LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBU
eXBlT2Y6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
U3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxh
dGVDZWxsKCkpCi0gICAgICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC0xMjQxLDYgKzEyMzMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAg
ICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAg
ICAgY2FzZSBUeXBlT2Y6CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1
bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
Y3BwCShyZXZpc2lvbiAxODM3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hl
YXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEwICs2OCw2IEBAIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICAgICAgb3V0LnByaW50KCJJc0Z1
bmN0aW9uTG9jIik7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY2FzZSBUeXBlT2ZM
b2M6Ci0gICAgICAgIG91dC5wcmludCgiVHlwZU9mTG9jIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCiAgICAgY2FzZSBHZXR0ZXJMb2M6CiAgICAgICAgIG91dC5wcmludCgiR2V0dGVyTG9j
Iik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMTgzNzE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBA
QCBlbnVtIExvY2F0aW9uS2luZCB7CiAgICAgTmFtZWRQcm9wZXJ0eUxvYywKICAgICBTZXR0ZXJM
b2MsCiAgICAgU3RydWN0dXJlTG9jLAotICAgIFR5cGVPZkxvYywKICAgICBUeXBlZEFycmF5Qnl0
ZU9mZnNldExvYywKICAgICBWYXJJbmplY3Rpb25XYXRjaHBvaW50TG9jLAogICAgIFN0YWNrTG9j
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAxODM3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjAsMjEgKzg2MCw4NCBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNPYmplY3RPck51bGwoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9i
amVjdElzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDZWxsKiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIGpzSXNPYmplY3RUeXBlT3JOdWxsKGV4
ZWMsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgQVNTRVJU
KGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihvYmplY3QpKTsKKyAgICAKKyAgICBpZiAob2JqZWN0
LT5zdHJ1Y3R1cmUodm0pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGdsb2JhbE9iamVjdCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0LT50eXBlKCkgPT0gSlNGdW5jdGlv
blR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0LT5pbmxpbmVUeXBl
RmxhZ3MoKSAmIFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkgeworICAgICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKKyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxs
RGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOwogfQogCi1zaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Jc0Z1bmN0aW9uKEVuY29kZWRKU1ZhbHVlIHZhbHVlKQorc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQogewotICAg
IHJldHVybiBqc0lzRnVuY3Rpb25UeXBlKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworCisgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihvYmplY3QpKTsK
KyAgICAKKyAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKGdsb2JhbE9iamVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0
LT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
IChvYmplY3QtPmlubGluZVR5cGVGbGFncygpICYgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRh
KSB7CisgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICBpZiAob2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmdldENhbGxEYXRhKG9iamVjdCwgY2FsbERhdGEpICE9IENhbGxUeXBlTm9u
ZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25UeXBlT2YoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIHZhbHVlKQorSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5
cGVPZk9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIHJldHVybiBqc1R5cGVTdHJp
bmdGb3JWYWx1ZShleGVjLCBKU1ZhbHVlKHZhbHVlKSkuYXNDZWxsKCk7CisKKyAgICBBU1NFUlQo
anNEeW5hbWljQ2FzdDxKU09iamVjdCo+KG9iamVjdCkpOworICAgIAorICAgIGlmIChvYmplY3Qt
PnN0cnVjdHVyZSh2bSktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZ2xvYmFsT2JqZWN0KSkKKyAg
ICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKTsKKyAgICBpZiAo
b2JqZWN0LT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUpCisgICAgICAgIHJldHVybiB2bS5zbWFs
bFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKTsKKyAgICBpZiAob2JqZWN0LT5pbmxpbmVUeXBlRmxh
Z3MoKSAmIFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkgeworICAgICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICAgICAgaWYgKG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0
YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpCisgICAgICAgICAgICByZXR1cm4g
dm0uc21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCk7CisgICAgfQorICAgIAorICAgIHJldHVy
biB2bS5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCk7Cit9CisKK2ludDMyX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKK3sKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKworICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ob2JqZWN0KSk7Cisg
ICAgCisgICAgaWYgKG9iamVjdC0+c3RydWN0dXJlKHZtKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZChnbG9iYWxPYmplY3QpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4oVHlw
ZW9mVHlwZTo6VW5kZWZpbmVkKTsKKyAgICBpZiAob2JqZWN0LT50eXBlKCkgPT0gSlNGdW5jdGlv
blR5cGUpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpG
dW5jdGlvbik7CisgICAgaWYgKG9iamVjdC0+aW5saW5lVHlwZUZsYWdzKCkgJiBUeXBlT2ZTaG91
bGRDYWxsR2V0Q2FsbERhdGEpIHsKKyAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgICAg
IGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0
YSkgIT0gQ2FsbFR5cGVOb25lKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMy
X3Q+KFR5cGVvZlR5cGU6OkZ1bmN0aW9uKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6Ok9iamVjdCk7CiB9CiAKIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5
KEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiAxODM3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMywxMCBAQCBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlU2NvCiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChFeGVjU3RhdGUqLCBJ
bmxpbmVDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgaW50MzJfdCBhcmd1bWVudENvdW50KTsKIEpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIGludDMyX3QgbGVuZ3Ro
LCBKU0Z1bmN0aW9uKiBjYWxsZWUpOwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1v
ZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1zaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Jc09iamVjdE9yTnVsbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkg
V1RGX0lOVEVSTkFMOwotc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSXNGdW5jdGlvbihF
bmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblR5cGVPZihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitzaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK3NpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwq
KSBXVEZfSU5URVJOQUw7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHlwZU9mT2Jq
ZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwor
aW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblR5cGVPZk9iamVjdEFzVHlwZW9mVHlwZShF
eGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiwgc2l6ZV90IG5ld1Np
emUpIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0
ZUJ1dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkoRXhlY1N0
YXRlKiwgSlNPYmplY3QqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE4
MzcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMDcsODYgKzQxMDcsMTYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgSXNPYmplY3RP
ck51bGw6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICAg
ICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbklzT2JqZWN0T3JOdWxsLCByZXN1bHRHUFIsIHZhbHVlVGFn
R1BSLCB2YWx1ZVBheWxvYWRHUFIpOwotICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVJc09iamVjdE9yTnVsbChub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBJc0Z1bmN0aW9uOiB7Ci0gICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIHZhbHVl
VGFnR1BSID0gdmFsdWUudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIg
PSB2YWx1ZS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Jc0Z1
bmN0aW9uLCByZXN1bHRHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpOwotICAgICAg
ICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVJc0Z1
bmN0aW9uKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUeXBlT2Y6IHsK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIEdQUlJlZyB0YWdHUFIgPSB2YWx1ZS50YWdH
UFIoKTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBHUFJSZWcgdGVtcEdQUiA9
IHRlbXAuZ3ByKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsK
LSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IGRvbmVKdW1wczsKLQotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwot
Ci0gICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8
fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05v
dENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7Ci0gICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkKLSAgICAgICAg
ICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUt
PmNoaWxkMSgpLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKTsKLQotICAgICAgICBpZiAoIW5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RTdHJp
bmcgPSBtX2ppdC5icmFuY2hJZk5vdFN0cmluZyhwYXlsb2FkR1BSKTsKLSAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKQotICAgICAgICAgICAgICAg
IERGR19UWVBFX0NIRUNLKEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNo
aWxkMSgpLCBTcGVjU3RyaW5nLCBub3RTdHJpbmcpOwotICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSksIHJl
c3VsdEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0g
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFN0cmluZ1VzZSkgewot
ICAgICAgICAgICAgICAgIG5vdFN0cmluZy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgcGF5bG9hZEdQUik7Ci0g
ICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25UeXBlT2YsIHJlc3VsdEdQUiwgcGF5bG9hZEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKLSAgICAgICAgICAgIGlzTm90Q2VsbC5s
aW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
dGFnR1BSLCB0ZW1wR1BSKTsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bWJl
ciA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIHRlbXBHUFIsIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOwotICAgICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNtYWxsU3RyaW5ncy5u
dW1iZXJTdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBkb25lSnVtcHMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBub3ROdW1iZXIubGluaygmbV9qaXQpOwotCi0g
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RVbmRlZmluZWQgPSBtX2ppdC5icmFuY2gz
MihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVu
ZGVmaW5lZFRhZykpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0
LnZtKCktPnNtYWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAg
ICAgICAgICBkb25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBub3RV
bmRlZmluZWQubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3ROdWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLm9iamVjdFN0cmluZygpKSwgcmVz
dWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAg
ICAgICAgICAgIG5vdE51bGwubGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICAvLyBPbmx5IGJv
b2xlYW4gbGVmdAotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZt
KCktPnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkpLCByZXN1bHRHUFIpOwotICAgICAgICB9
Ci0gICAgICAgIGRvbmVKdW1wcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZVR5cGVPZihub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MzcxOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
NDgsODIgKzQxNDgsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgSXNPYmplY3RPck51bGw6IHsKLSAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRo
aXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklzT2JqZWN0
T3JOdWxsLCByZXN1bHRHUFIsIHZhbHVlR1BSKTsKLSAgICAgICAgbV9qaXQub3IzMihUcnVzdGVk
SW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgY29tcGlsZUlz
T2JqZWN0T3JOdWxsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIElz
RnVuY3Rpb246IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbklzRnVuY3Rpb24sIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwot
ICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsK
LSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jv
b2xlYW4pOworICAgICAgICBjb21waWxlSXNGdW5jdGlvbihub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCiAgICAgY2FzZSBUeXBlT2Y6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lSnVtcHM7Ci0KLSAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gQ2VsbFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKLQot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENl
bGwoSlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQotICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soSlNWYWx1
ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKTsK
LQotICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSB8
fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RTdHJpbmcgPSBtX2ppdC5icmFuY2hJZk5vdFN0cmluZyh2YWx1
ZUdQUik7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFN0cmlu
Z1VzZSkKLSAgICAgICAgICAgICAgICBERkdfVFlQRV9DSEVDSyhKU1ZhbHVlU291cmNlKHZhbHVl
R1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG5vdFN0cmluZyk7Ci0gICAgICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c21hbGxTdHJpbmdzLnN0cmlu
Z1N0cmluZygpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGRvbmVKdW1wcy5hcHBlbmQobV9q
aXQuanVtcCgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0g
U3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICAgICAgbm90U3RyaW5nLmxpbmsoJm1faml0KTsKLSAg
ICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblR5cGVPZiwgcmVzdWx0R1BSLCB2
YWx1ZUdQUik7Ci0gICAgICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UeXBlT2YsIHJlc3VsdEdQUiwgdmFsdWVHUFIpOwotICAgICAgICAgICAg
ZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7Ci0gICAgICAgICAgICBp
c05vdENlbGwubGluaygmbV9qaXQpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90
TnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCB2YWx1ZUdQUiwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3MubnVtYmVyU3RyaW5nKCkpLCBy
ZXN1bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwot
ICAgICAgICAgICAgbm90TnVtYmVyLmxpbmsoJm1faml0KTsKLQotICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgbm90VW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLCB2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NChWYWx1ZVVuZGVmaW5l
ZCkpOwotICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnNt
YWxsU3RyaW5ncy51bmRlZmluZWRTdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBk
b25lSnVtcHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgICAgICBub3RVbmRlZmluZWQu
bGluaygmbV9qaXQpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3ROdWxsID0g
bV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpLCByZXN1
bHRHUFIpOwotICAgICAgICAgICAgZG9uZUp1bXBzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAg
ICAgICAgICAgbm90TnVsbC5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgICAgIC8vIE9ubHkgYm9v
bGVhbiBsZWZ0Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobV9qaXQudm0o
KS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIH0K
LSAgICAgICAgZG9uZUp1bXBzLmxpbmsoJm1faml0KTsKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlVHlwZU9mKG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODM3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgxNSw2ICs0
ODE1LDExOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc09iamVjdE9y
TnVsbChOb2RlKiBub2RlKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBt
X2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAg
IAorICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBK
U1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVncygpOworICAgIAorICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0NlbGwgPSBtX2ppdC5icmFuY2hJ
ZkNlbGwodmFsdWVSZWdzKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bGwgPSBt
X2ppdC5icmFuY2hJZkVxdWFsKHZhbHVlUmVncywganNOdWxsKCkpOworICAgIEpJVENvbXBpbGVy
OjpKdW1wIGlzTm9uTnVsbE5vbkNlbGwgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgaXNDZWxs
LmxpbmsoJm1faml0KTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0Z1bmN0aW9uID0gbV9qaXQu
YnJhbmNoSWZGdW5jdGlvbih2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RPYmplY3QgPSBtX2ppdC5icmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0
LmJyYW5jaFRlc3Q4KAorICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKKyAgICAgICAgSklU
Q29tcGlsZXI6OkFkZHJlc3ModmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCB8IFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkpOworICAgIAorICAgIGlzTnVsbC5s
aW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7
CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICBp
c05vbk51bGxOb25DZWxsLmxpbmsoJm1faml0KTsKKyAgICBpc0Z1bmN0aW9uLmxpbmsoJm1faml0
KTsKKyAgICBub3RPYmplY3QubGluaygmbV9qaXQpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKDApLCByZXN1bHRHUFIpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAg
ICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
T2JqZWN0SXNPYmplY3QsIHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0LAorICAgICAgICAgICAgdmFs
dWVSZWdzLnBheWxvYWRHUFIoKSkpOworICAgIAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
IAorICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzRnVuY3Rpb24oTm9kZSogbm9kZSkKK3sKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFs
dWUuanNWYWx1ZVJlZ3MoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwor
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgCisgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZVJlZ3MpOworICAg
IEpJVENvbXBpbGVyOjpKdW1wIGlzRnVuY3Rpb24gPSBtX2ppdC5icmFuY2hJZkZ1bmN0aW9uKHZh
bHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE9iamVjdCA9
IG1faml0LmJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOworICAgIAor
ICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoVGVzdDgoCisgICAg
ICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAorICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyh2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksCisg
ICAgICAgIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgVHlwZU9mU2hvdWxk
Q2FsbEdldENhbGxEYXRhKSk7CisgICAgCisgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAg
bm90T2JqZWN0LmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwor
ICAgIAorICAgIGlzRnVuY3Rpb24ubGluaygmbV9qaXQpOworICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAor
ICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0
aW9uT2JqZWN0SXNGdW5jdGlvbiwgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3QsCisgICAgICAgICAg
ICB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisgICAgCisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQor
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVHlwZU9mKE5vZGUqIG5vZGUpCit7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZh
bHVlLmpzVmFsdWVSZWdzKCk7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIAorICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBkb25lOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOworICAg
IG1faml0LmVtaXRUeXBlT2YoCisgICAgICAgIHZhbHVlUmVncywgcmVzdWx0R1BSLAorICAgICAg
ICBbJl0gKFR5cGVvZlR5cGUgdHlwZSwgYm9vbCBmYWxsc1Rocm91Z2gpIHsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zbWFsbFN0cmluZ3MudHlwZVN0
cmluZyh0eXBlKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAoIWZhbGxzVGhyb3VnaCkK
KyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICB9LAor
ICAgICAgICBbJl0gKEpJVENvbXBpbGVyOjpKdW1wIHRoZVNsb3dQYXRoKSB7CisgICAgICAgICAg
ICBzbG93UGF0aCA9IHRoZVNsb3dQYXRoOworICAgICAgICB9KTsKKyAgICBkb25lLmxpbmsoJm1f
aml0KTsKKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENhbGwo
CisgICAgICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uVHlwZU9mT2JqZWN0LCByZXN1
bHRHUFIsIGdsb2JhbE9iamVjdCwKKyAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkp
KTsKKyAgICAKKyAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQog
ewogICAgIGlmIChub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGlu
Z0hlYWRlcigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODM3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTc5MiwxMyArNzkyLDcg
QEAgcHVibGljOgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVn
LCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBtb2RlKTsKICNlbHNlCi0gICAgICAgIGlmICht
b2RlID09IENhbGxVc2VDaGlsZHJlbikKLSAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwot
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFs
UmVnaXN0ZXIoKTsKLSAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckJvb2xlYW4pOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVy
YXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICBp
bmZvLmluaXRCb29sZWFuKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlZyk7CisgICAgICAgIGJv
b2xlYW5SZXN1bHQocmVnLCBub2RlLCBtb2RlKTsKICNlbmRpZgogICAgIH0KICAgICB2b2lkIHVu
Ymxlc3NlZEJvb2xlYW5SZXN1bHQoR1BSUmVnIHJlZywgTm9kZSogbm9kZSwgVXNlQ2hpbGRyZW5N
b2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCkBAIC0xMDYwLDYgKzEwNTQsMTggQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9FR0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVj
dCksIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FR0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBHUFJSZWcgYXJnMikKKyAgICB7Cisg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGds
b2JhbE9iamVjdCksIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKc3NfSklUT3BlcmF0aW9uX0VaIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CkBAIC0yMjE0LDYgKzIyMjAsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVOb3RpZnlXcml0ZShOb2RlKik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhO
b2RlKik7CisgICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51bGwoTm9kZSopOworICAgIHZvaWQg
Y29tcGlsZUlzRnVuY3Rpb24oTm9kZSopOworICAgIHZvaWQgY29tcGlsZVR5cGVPZihOb2RlKik7
CiAgICAgCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CiAgICAgdm9pZCBtb3ZlRmFsc2VU
byhHUFJSZWcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkocmV2aXNpb24gMTgzNzE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNiArMTg5LDcgQEAg
aW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsOgogICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBTd2l0Y2g6
CisgICAgY2FzZSBUeXBlT2Y6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJZGVudGl0eToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxODM3MTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAgICAgbWFjcm8oQ19KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0
ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VDWiwgZnVuY3Rpb25UeXBl
KGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludDMyKSkgXAogICAgIG1hY3JvKENfSklUT3BlcmF0
aW9uX0VDWkMsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgaW50
UHRyKSkgXAorICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VHQywgZnVuY3Rpb25UeXBlKGludFB0
ciwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhDX0pJVE9wZXJhdGlvbl9F
SiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKICAgICBtYWNybyhDX0pJ
VE9wZXJhdGlvbl9FSnNzSnNzLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0ciwg
aW50UHRyKSkgXAogICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VKc3NKc3NKc3MsIGZ1bmN0aW9u
VHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKQEAgLTk3LDYg
Kzk4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFBfSklU
T3BlcmF0aW9uX0VTdFosIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnQz
MikpIFwKICAgICBtYWNybyhRX0pJVE9wZXJhdGlvbl9ELCBmdW5jdGlvblR5cGUoaW50NjQsIGRv
dWJsZVR5cGUpKSBcCiAgICAgbWFjcm8oUV9KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKGlu
dDY0LCBpbnQ2NCkpIFwKKyAgICBtYWNybyhTX0pJVE9wZXJhdGlvbl9FR0MsIGZ1bmN0aW9uVHlw
ZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oU19KSVRPcGVy
YXRpb25fRUosIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50NjQpKSBcCiAgICAgbWFj
cm8oU19KSVRPcGVyYXRpb25fRUpKLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludDY0
LCBpbnQ2NCkpIFwKICAgICBtYWNybyhTX0pJVE9wZXJhdGlvbl9KLCBmdW5jdGlvblR5cGUoaW50
UHRyLCBpbnQ2NCkpIFwKQEAgLTExMiw2ICsxMTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVuY3Rpb25UeXBlKHZvaWRU
eXBlLCBpbnQzMikpIFwKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9ELCBmdW5jdGlvblR5cGUo
aW50MzIsIGRvdWJsZVR5cGUpKSBcCiAgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0
aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIpKSBcCisgICAgbWFjcm8oWl9KSVRPcGVyYXRp
b25fRUdDLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCiAg
ICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUpaLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwg
aW50NjQsIGludDMyKSkgXAogICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0VTSnNzLCBmdW5jdGlv
blR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lv
biAxODM3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk2LDYgKzc5Niw5IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgSXNGdW5jdGlvbjoKICAgICAgICAgICAgIGNvbXBpbGVJc0Z1bmN0aW9uKCk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlT2Y6CisgICAgICAgICAgICBjb21waWxl
VHlwZU9mKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDaGVja0hhc0luc3Rh
bmNlOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrSGFzSW5zdGFuY2UoKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtNDYyMywxNiArNDYyNiwxMTcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29t
cGlsZUlzT2JqZWN0T3JOdWxsKCkKICAgICB7Ci0gICAgICAgIExWYWx1ZSBwb2ludGVyUmVzdWx0
ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbklzT2JqZWN0
T3JOdWxsKSwgbV9jYWxsRnJhbWUsIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpOwotICAg
ICAgICBzZXRCb29sZWFuKG1fb3V0Lm5vdE51bGwocG9pbnRlclJlc3VsdCkpOworICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAKKyAgICAgICAgRWRnZSBjaGlsZCA9IG1f
bm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoY2hpbGQp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgbm90RnVuY3Rpb25DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVs
bCBub3QgZnVuY3Rpb24gY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb2JqZWN0Q2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgb2JqZWN0IGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09i
amVjdE9yTnVsbCBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBub3QgY2VsbCBjYXNlIikp
OworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIklzT2JqZWN0T3JOdWxsIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxD
YXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RGdW5jdGlvbkNhc2UpOwor
ICAgICAgICBWYWx1ZUZyb21CbG9jayBpc0Z1bmN0aW9uUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlz
RnVuY3Rpb24odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKKyAgICAgICAgICAgIHVuc3VyZShj
b250aW51YXRpb24pLCB1bnN1cmUobm90RnVuY3Rpb25DYXNlKSk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5hcHBlbmRUbyhub3RGdW5jdGlvbkNhc2UsIG9iamVjdENhc2UpOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBub3RPYmplY3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVh
bkZhbHNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNPYmplY3QodmFs
dWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKKyAgICAgICAgICAgIHVuc3VyZShvYmplY3RDYXNlKSwg
dW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
b2JqZWN0Q2FzZSwgc2xvd1BhdGgpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBvYmplY3RSZXN1
bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJvdmVuVHlwZShjaGls
ZCkpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24p
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RDZWxsQ2Fz
ZSk7CisgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSB2bUNhbGwoCisgICAgICAgICAg
ICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uT2JqZWN0SXNPYmplY3QpLCBtX2NhbGxGcmFtZSwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKKyAgICAgICAgICAgIHZhbHVlKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3ROdWxsKHNs
b3dSZXN1bHRWYWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsK
KyAgICAgICAgTFZhbHVlIG5vdENlbGxSZXN1bHRWYWx1ZSA9IG1fb3V0LmVxdWFsKHZhbHVlLCBt
X291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihub3RDZWxsUmVzdWx0VmFs
dWUpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IG1fb3V0LnBoaSgKKyAgICAgICAgICAgIG1fb3V0LmJvb2xlYW4sCisgICAgICAg
ICAgICBpc0Z1bmN0aW9uUmVzdWx0LCBub3RPYmplY3RSZXN1bHQsIG9iamVjdFJlc3VsdCwgc2xv
d1Jlc3VsdCwgbm90Q2VsbFJlc3VsdCk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbigpCiAgICAgewotICAgICAgICBM
VmFsdWUgcG9pbnRlclJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25Jc0Z1bmN0aW9uKSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSk7Ci0g
ICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90TnVsbChwb2ludGVyUmVzdWx0KSk7CisgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIAorICAgICAgICBFZGdlIGNoaWxkID0g
bV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGls
ZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiSXNGdW5jdGlvbiBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IG5vdEZ1bmN0aW9uQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBub3Qg
ZnVuY3Rpb24gY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gY29u
dGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5z
dXJlKGNlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90RnVuY3Rp
b25DYXNlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZnVuY3Rpb25SZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBpc0Z1bmN0aW9uKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCisgICAgICAgICAgICB1
bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEZ1bmN0aW9uQ2FzZSkpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RnVuY3Rpb25DYXNlLCBzbG93UGF0aCk7CisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIG9iamVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29s
ZWFuRmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0V4b3RpY0Zv
clR5cGVvZih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAgICAgICAgICAgcmFyZWx5KHNs
b3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgc2xvd1Jl
c3VsdFZhbHVlID0gdm1DYWxsKAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bk9iamVjdElzRnVuY3Rpb24pLCBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwKKyAgICAgICAgICAgIHZhbHVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3Vs
dCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3ROdWxsKHNsb3dSZXN1bHRWYWx1ZSkpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1f
b3V0LnBoaSgKKyAgICAgICAgICAgIG1fb3V0LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQsIGZ1bmN0
aW9uUmVzdWx0LCBvYmplY3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgICAgICBzZXRCb29sZWFu
KHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVR5cGVPZigpCisgICAgewor
ICAgICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZhbHVlIHZh
bHVlID0gbG93SlNWYWx1ZShjaGlsZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlR5cGVPZiBjb250aW51YXRpb24i
KSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tz
QmVmb3JlKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVGcm9t
QmxvY2s+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBidWlsZFR5cGVPZigKKyAgICAgICAg
ICAgIGNoaWxkLCB2YWx1ZSwKKyAgICAgICAgICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBlKSB7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHdlYWtQb2ludGVyKHZt
KCkuc21hbGxTdHJpbmdzLnR5cGVTdHJpbmcodHlwZSkpKSk7CisgICAgICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlSW4oKQpAQCAtNjM1Niw2ICs2NDYwLDE0MyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgV2VpZ2h0KGRhdGEtPmZhbGxUaHJvdWdoLmNvdW50KSk7CiAgICAgfQogICAgIAorICAg
IC8vIENhbGxzIHRoZSBmdW5jdG9yIGF0IHRoZSBwb2ludCBvZiBjb2RlIGdlbmVyYXRpb24gd2hl
cmUgd2Uga25vdyB3aGF0IHRoZSByZXN1bHQgdHlwZSBpcy4KKyAgICAvLyBZb3UgY2FuIGVtaXQg
d2hhdGV2ZXIgY29kZSB5b3UgbGlrZSBhdCB0aGF0IHBvaW50LiBFeHBlY3RzIHlvdSB0byB0ZXJt
aW5hdGUgdGhlIGJhc2ljIGJsb2NrLgorICAgIC8vIFdoZW4gYnVpbGRUeXBlT2YoKSByZXR1cm5z
LCBpdCB3aWxsIGhhdmUgdGVybWluYXRlZCBhbGwgYmFzaWMgYmxvY2tzIHRoYXQgaXQgY3JlYXRl
ZC4gU28sIGlmCisgICAgLy8geW91IGFyZW4ndCB1c2luZyB0aGlzIGFzIHRoZSB0ZXJtaW5hdG9y
IG9mIGEgaGlnaC1sZXZlbCBibG9jaywgeW91IHNob3VsZCBjcmVhdGUgeW91ciBvd24KKyAgICAv
LyBjb250aW5hdGlvbiBhbmQgc2V0IGl0IGFzIHRoZSBuZXh0QmxvY2sgKG1fb3V0Lmluc2VydE5l
d0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pKSBiZWZvcmUKKyAgICAvLyBjYWxsaW5nIHRoaXMu
IEZvciBleGFtcGxlOgorICAgIC8vCisgICAgLy8gTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJNeSBjb250aW51YXRpb24iKSk7CisgICAgLy8gTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9u
KTsKKyAgICAvLyBidWlsZFR5cGVPZigKKyAgICAvLyAgICAgY2hpbGQsIHZhbHVlLAorICAgIC8v
ICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSkgeworICAgIC8vICAgICAgICAgIGRvIHRoaW5nczsK
KyAgICAvLyAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgLy8gICAgIH0p
OworICAgIC8vIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBidWlsZFR5cGVPZihFZGdlIGNoaWxk
LCBMVmFsdWUgdmFsdWUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAKKyAgICAgICAgLy8gSW1wbGVtZW50cyB0
aGUgZm9sbG93aW5nIGJyYW5jaGluZyBzdHJ1Y3R1cmU6CisgICAgICAgIC8vCisgICAgICAgIC8v
IGlmIChpcyBjZWxsKSB7CisgICAgICAgIC8vICAgICBpZiAoaXMgb2JqZWN0KSB7CisgICAgICAg
IC8vICAgICAgICAgaWYgKGlzIGZ1bmN0aW9uKSB7CisgICAgICAgIC8vICAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbjsKKyAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKGRvZXNuJ3QgaGF2
ZSBjYWxsIHRyYXAgYW5kIGRvZXNuJ3QgbWFzcXVlcmFkZSBhcyB1bmRlZmluZWQpIHsKKyAgICAg
ICAgLy8gICAgICAgICAgICAgcmV0dXJuIG9iamVjdAorICAgICAgICAvLyAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBzbG93UGF0aCgpOworICAgICAgICAv
LyAgICAgICAgIH0KKyAgICAgICAgLy8gICAgIH0gZWxzZSBpZiAoaXMgc3RyaW5nKSB7CisgICAg
ICAgIC8vICAgICAgICAgcmV0dXJuIHN0cmluZworICAgICAgICAvLyAgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gICAgICAgICByZXR1cm4gc3ltYm9sCisgICAgICAgIC8vICAgICB9CisgICAgICAg
IC8vIH0gZWxzZSBpZiAoaXMgbnVtYmVyKSB7CisgICAgICAgIC8vICAgICByZXR1cm4gbnVtYmVy
CisgICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgbnVsbCkgeworICAgICAgICAvLyAgICAgcmV0dXJu
IG9iamVjdAorICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIGJvb2xlYW4pIHsKKyAgICAgICAgLy8g
ICAgIHJldHVybiBib29sZWFuCisgICAgICAgIC8vIH0gZWxzZSB7CisgICAgICAgIC8vICAgICBy
ZXR1cm4gdW5kZWZpbmVkCisgICAgICAgIC8vIH0KKyAgICAgICAgCisgICAgICAgIExCYXNpY0Js
b2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBjZWxsIGNh
c2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImJ1aWxkVHlwZU9mIG9iamVjdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBm
dW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIGZ1bmN0aW9u
IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IGZ1bmN0aW9uIGNhc2UiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIHJlYWxseU9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1
aWxkVHlwZU9mIHJlYWxseSBvYmplY3QgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xv
d1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIHNsb3cgcGF0aCIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgdW5yZWFjaGFibGUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImJ1aWxkVHlwZU9mIHVucmVhY2hhYmxlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3RPYmpl
Y3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3Qgb2JqZWN0IGNh
c2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHN0cmluZ0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImJ1aWxkVHlwZU9mIHN0cmluZyBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBz
eW1ib2xDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBzeW1ib2wgY2Fz
ZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImJ1aWxkVHlwZU9mIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IG51bWJlckNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG51bWJlciBj
YXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3ROdW1iZXJDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJidWlsZFR5cGVPZiBub3QgbnVtYmVyIGNhc2UiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdE51bGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBu
b3QgbnVsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBib29sZWFuQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgYm9vbGVhbiBjYXNlIikpOworICAgICAgICBM
QmFzaWNCbG9jayB1bmRlZmluZWRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5
cGVPZiB1bmRlZmluZWQgY2FzZSIpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaChp
c0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJl
KG5vdENlbGxDYXNlKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBvYmplY3RDYXNlKTsKKyAgICAgICAgbV9vdXQuYnJh
bmNoKGlzT2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksIHVuc3VyZShvYmplY3RDYXNl
KSwgdW5zdXJlKG5vdE9iamVjdENhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG9iamVjdENhc2UsIGZ1bmN0aW9uQ2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAg
ICAgICAgICAgIGlzRnVuY3Rpb24odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgU3BlY09iamVj
dCksCisgICAgICAgICAgICB1bnN1cmUoZnVuY3Rpb25DYXNlKSwgdW5zdXJlKG5vdEZ1bmN0aW9u
Q2FzZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZnVuY3Rpb25DYXNlLCBu
b3RGdW5jdGlvbkNhc2UpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OkZ1bmN0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEZ1bmN0aW9uQ2FzZSwgcmVhbGx5
T2JqZWN0Q2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzRXhvdGlj
Rm9yVHlwZW9mKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIChTcGVjT2JqZWN0IC0gU3BlY0Z1
bmN0aW9uKSksCisgICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KHJlYWxseU9i
amVjdENhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHJlYWxseU9iamVj
dENhc2UsIHNsb3dQYXRoKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpPYmplY3QpOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIHVucmVhY2hhYmxlKTsK
KyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUpLCBtX2NhbGxGcmFtZSwKKyAg
ICAgICAgICAgIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHZhbHVlKTsKKyAgICAgICAgVmVj
dG9yPFN3aXRjaENhc2UsIDM+IGNhc2VzOworICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2Fz
ZShtX291dC5jb25zdEludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6OlVuZGVm
aW5lZCkpLCB1bmRlZmluZWRDYXNlKSk7CisgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNl
KG1fb3V0LmNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVHlwZW9mVHlwZTo6T2JqZWN0
KSksIHJlYWxseU9iamVjdENhc2UpKTsKKyAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2Uo
bV9vdXQuY29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpGdW5jdGlv
bikpLCBmdW5jdGlvbkNhc2UpKTsKKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24ocmVz
dWx0LCBjYXNlcywgdW5yZWFjaGFibGUsIFdlaWdodCgpKTsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHVucmVhY2hhYmxlLCBub3RPYmplY3RDYXNlKTsKKyAgICAgICAgbV9vdXQu
dW5yZWFjaGFibGUoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdE9iamVj
dENhc2UsIHN0cmluZ0Nhc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBp
c1N0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkgJiAoU3BlY0NlbGwgLSBTcGVjT2JqZWN0
KSksCisgICAgICAgICAgICB1bnN1cmUoc3RyaW5nQ2FzZSksIHVuc3VyZShzeW1ib2xDYXNlKSk7
CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJpbmdDYXNlLCBzeW1ib2xDYXNl
KTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpTdHJpbmcpOworICAgICAgICAKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oc3ltYm9sQ2FzZSwgbm90Q2VsbENhc2UpOworICAgICAgICBmdW5j
dG9yKFR5cGVvZlR5cGU6OlN5bWJvbCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhub3RDZWxsQ2FzZSwgbnVtYmVyQ2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAg
ICAgICAgIGlzTnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIH5TcGVjQ2VsbCksCisg
ICAgICAgICAgICB1bnN1cmUobnVtYmVyQ2FzZSksIHVuc3VyZShub3ROdW1iZXJDYXNlKSk7Cisg
ICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhudW1iZXJDYXNlLCBub3ROdW1iZXJDYXNl
KTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpOdW1iZXIpOworICAgICAgICAKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obm90TnVtYmVyQ2FzZSwgbm90TnVsbENhc2UpOworICAgICAgICBM
VmFsdWUgaXNOdWxsOworICAgICAgICBpZiAocHJvdmVuVHlwZShjaGlsZCkgJiBTcGVjT3RoZXIp
CisgICAgICAgICAgICBpc051bGwgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2
NChWYWx1ZU51bGwpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXNOdWxsID0gbV9vdXQu
Ym9vbGVhbkZhbHNlOworICAgICAgICBtX291dC5icmFuY2goaXNOdWxsLCB1bnN1cmUocmVhbGx5
T2JqZWN0Q2FzZSksIHVuc3VyZShub3ROdWxsQ2FzZSkpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm90TnVsbENhc2UsIGJvb2xlYW5DYXNlKTsKKyAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgaXNCb29sZWFuKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIH4o
U3BlY0NlbGwgfCBTcGVjRnVsbE51bWJlcikpLAorICAgICAgICAgICAgdW5zdXJlKGJvb2xlYW5D
YXNlKSwgdW5zdXJlKHVuZGVmaW5lZENhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGJvb2xlYW5DYXNlLCB1bmRlZmluZWRDYXNlKTsKKyAgICAgICAgZnVuY3RvcihUeXBl
b2ZUeXBlOjpCb29sZWFuKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHVuZGVm
aW5lZENhc2UsIGxhc3ROZXh0KTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpVbmRlZmlu
ZWQpOworICAgIH0KKyAgICAKICAgICBMVmFsdWUgZG91YmxlVG9JbnQzMihMVmFsdWUgZG91Ymxl
VmFsdWUsIGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoLCBib29sIGlzU2lnbmVkID0gdHJ1ZSkKICAg
ICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIGdyZWF0RW5vdWdoID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJkb3VibGVUb0ludDMyIGdyZWF0RW5vdWdoIikpOwpAQCAtNzE3Nyw2ICs3NDE4LDE1IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gcHJvdmVuOwogICAgICAgICByZXR1cm4gaXNO
b3RUeXBlKGNlbGwsIEpTRnVuY3Rpb25UeXBlKTsKICAgICB9CisgICAgICAgICAgICAKKyAgICBM
VmFsdWUgaXNFeG90aWNGb3JUeXBlb2YoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
PSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmICghKHR5cGUgJiBTcGVjT2JqZWN0T3Ro
ZXIpKQorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICAgICAgcmV0
dXJuIG1fb3V0LnRlc3ROb25aZXJvOCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4KGNlbGwsIG1f
aGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ4
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpKTsK
KyAgICB9CiAgICAgCiAgICAgTFZhbHVlIGlzVHlwZShMVmFsdWUgY2VsbCwgSlNUeXBlIHR5cGUp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTd2l0Y2hDYXNlLmgJ
KHJldmlzaW9uIDE4MzcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3dpdGNo
Q2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCi0gICAgU3dpdGNoQ2FzZShMVmFsdWUgdmFsdWUsIExCYXNpY0Jsb2NrIHRhcmdldCwgV2Vp
Z2h0IHdlaWdodCkKKyAgICBTd2l0Y2hDYXNlKExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxvY2sgdGFy
Z2V0LCBXZWlnaHQgd2VpZ2h0ID0gV2VpZ2h0KCkpCiAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkK
ICAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCiAgICAgICAgICwgbV93ZWlnaHQod2VpZ2h0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZp
c2lvbiAxODM3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiR1BSSW5mby5o
IgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2lu
Y2x1ZGUgIlR5cGVvZlR5cGUuaCIKICNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTM2Nyw2ICszNjgsMzYgQEAgcHVibGljOgogICAgICAgICBzdG9yZVB0cih0YWcsIEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNl
bmRpZgorICAgIAorICAgIEp1bXBMaXN0IGJyYW5jaElmTm90RXF1YWwoSlNWYWx1ZVJlZ3MgcmVn
cywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0
dXJuIGJyYW5jaDY0KE5vdEVxdWFsLCByZWdzLmdwcigpLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKSkpOworI2Vsc2UKKyAgICAgICAgSnVtcExpc3QgcmVzdWx0OworICAgICAg
ICByZXN1bHQuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVk
SW1tMzIodmFsdWUudGFnKCkpKSk7CisgICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkgfHwgdmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7IC8vIFRo
ZXNlIGRvbid0IGhhdmUgYW55dGhpbmcgaW50ZXJlc3RpbmcgaW4gdGhlIHBheWxvYWQuCisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ3MucGF5bG9hZEdQUigpLCBU
cnVzdGVkSW1tMzIodmFsdWUucGF5bG9hZCgpKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
I2VuZGlmCisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoSWZFcXVhbChKU1ZhbHVlUmVncyBy
ZWdzLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBy
ZXR1cm4gYnJhbmNoNjQoRXF1YWwsIHJlZ3MuZ3ByKCksIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUodmFsdWUpKSk7CisjZWxzZQorICAgICAgICBKdW1wIG5vdEVxdWFsOworICAgICAgICAv
LyBUaGVzZSBkb24ndCBoYXZlIGFueXRoaW5nIGludGVyZXN0aW5nIGluIHRoZSBwYXlsb2FkLgor
ICAgICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgICAgIG5vdEVxdWFsID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ3MucGF5bG9h
ZEdQUigpLCBUcnVzdGVkSW1tMzIodmFsdWUucGF5bG9hZCgpKSk7CisgICAgICAgIEp1bXAgcmVz
dWx0ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMih2YWx1ZS50
YWcoKSkpOworICAgICAgICBpZiAobm90RXF1YWwuaXNTZXQoKSkKKyAgICAgICAgICAgIG5vdEVx
dWFsLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYKKyAgICB9CiAK
ICAgICBKdW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVnKQogICAgIHsKQEAgLTQyNiw2ICs0
NTcsNTYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAorICAgIC8vIE5vdGUgdGhhdCB0
aGUgdGVtcEdQUiBpcyBub3QgdXNlZCBpbiA2NC1iaXQgbW9kZS4KKyAgICBKdW1wIGJyYW5jaElm
TnVtYmVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQorICAgIHsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICBVTlVTRURfUEFSQU0odGVtcEdQUik7CisgICAgICAgIHJldHVy
biBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKKyNlbHNlCisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVncy50
YWdHUFIoKSwgdGVtcEdQUik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihCZWxvdywgdGVtcEdQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpKTsKKyNlbmRpZgorICAgIH0K
KyAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIHRlbXBHUFIgaXMgbm90IHVzZWQgaW4gNjQtYml0
IG1vZGUuCisgICAgSnVtcCBicmFuY2hJZk5vdE51bWJlcihKU1ZhbHVlUmVncyByZWdzLCBHUFJS
ZWcgdGVtcEdQUikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgVU5VU0VEX1BB
UkFNKHRlbXBHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZ3MuZ3By
KCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisjZWxzZQorICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ3MudGFnR1BSKCksIHRlbXBHUFIpOworICAgICAgICByZXR1
cm4gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnICsgMSkpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoZSB0
ZW1wR1BSIGlzIG5vdCB1c2VkIGluIDMyLWJpdCBtb2RlLgorICAgIEp1bXAgYnJhbmNoSWZCb29s
ZWFuKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQorICAgIHsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICBtb3ZlKHJlZ3MuZ3ByKCksIHRlbXBHUFIpOworICAgICAgICB4b3I2
NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCB0ZW1wR1BS
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCB0ZW1wR1BSLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFS
QU0odGVtcEdQUik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgcmVncy50YWdHUFIo
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKTsKKyNlbmRpZgorICAgIH0KKyAg
ICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIHRlbXBHUFIgaXMgbm90IHVzZWQgaW4gMzItYml0IG1v
ZGUuCisgICAgSnVtcCBicmFuY2hJZk5vdEJvb2xlYW4oSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVn
IHRlbXBHUFIpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1vdmUocmVncy5n
cHIoKSwgdGVtcEdQUik7CisgICAgICAgIHhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIHRlbXBHUFIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dDY0KE5vblplcm8sIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTSh0ZW1wR1BSKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Qm9vbGVhblRhZykpOworI2VuZGlmCisgICAgfQorICAgIAogICAgIEp1bXAgYnJhbmNoSWZP
YmplY3QoR1BSUmVnIGNlbGxHUFIpCiAgICAgewogICAgICAgICByZXR1cm4gYnJhbmNoOCgKQEAg
LTcwNyw2ICs3ODgsMjMgQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogICAgIAorICAgIHZvaWQg
Ym94Qm9vbGVhblBheWxvYWQoR1BSUmVnIGJvb2xHUFIsIEdQUlJlZyBwYXlsb2FkR1BSKQorICAg
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoVmFsdWVG
YWxzZSksIGJvb2xHUFIsIHBheWxvYWRHUFIpOworI2Vsc2UKKyAgICAgICAgbW92ZShib29sR1BS
LCBwYXlsb2FkR1BSKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgYm94Qm9vbGVhbihHUFJS
ZWcgYm9vbEdQUiwgSlNWYWx1ZVJlZ3MgYm94ZWRSZWdzKQorICAgIHsKKyAgICAgICAgYm94Qm9v
bGVhblBheWxvYWQoYm9vbEdQUiwgYm94ZWRSZWdzLnBheWxvYWRHUFIoKSk7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRh
ZyksIGJveGVkUmVncy50YWdHUFIoKSk7CisjZW5kaWYKKyAgICB9CisgICAgCiAgICAgdm9pZCBj
YWxsRXhjZXB0aW9uRnV6eigpOwogICAgIAogICAgIGVudW0gRXhjZXB0aW9uQ2hlY2tLaW5kIHsg
Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEludmVydGVkRXhjZXB0aW9uQ2hlY2sgfTsKQEAgLTg0Myw2
ICs5NDEsODIgQEAgcHVibGljOgogICAgICAgICB1aW50OF90KiBhZGRyZXNzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oY2VsbCkgKyBKU0NlbGw6OmdjRGF0YU9mZnNldCgpOwogICAgICAg
ICByZXR1cm4gYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1i
bGVyOjpBYnNvbHV0ZUFkZHJlc3MoYWRkcmVzcykpOwogICAgIH0KKyAgICAKKyAgICAvLyBFbWl0
cyB0aGUgYnJhbmNoIHN0cnVjdHVyZSBmb3IgdHlwZW9mLiBUaGUgY29kZSBlbWl0dGVkIGJ5IHRo
aXMgZG9lc24ndCBmYWxsIHRocm91Z2guIFRoZQorICAgIC8vIGZ1bmN0b3IgaXMgY2FsbGVkIGF0
IHRob3NlIHBvaW50cyB3aGVyZSB3ZSBoYXZlIHBpbnBvaW50ZWQgYSB0eXBlLiBPbmUgd2F5IHRv
IHVzZSB0aGlzIGlzIHRvCisgICAgLy8gaGF2ZSB0aGUgZnVuY3RvciBlbWl0IHRoZSBjb2RlIHRv
IHB1dCB0aGUgdHlwZSBzdHJpbmcgaW50byBhbiBhcHByb3ByaWF0ZSByZWdpc3RlciBhbmQgdGhl
bgorICAgIC8vIGp1bXAgb3V0LiBBIHNlY29uZGFyeSBmdW5jdG9yIGlzIHVzZWQgZm9yIHRoZSBj
YWxsIHRyYXAgYW5kIG1hc3F1ZXJhZGVzLWFzLXVuZGVmaW5lZCBzbG93CisgICAgLy8gY2FzZS4g
SXQgaXMgcGFzc2VkIHRoZSB1bmxpbmtlZCBqdW1wIHRvIHRoZSBzbG93IGNhc2UuCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3RvciwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdG9yPgorICAgIHZv
aWQgZW1pdFR5cGVPZigKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIs
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsCisgICAgICAgIGNvbnN0IFNsb3dQYXRoRnVuY3RvciYg
c2xvd1BhdGhGdW5jdG9yKQorICAgIHsKKyAgICAgICAgLy8gSW1wbGVtZW50cyB0aGUgZm9sbG93
aW5nIGJyYW5jaGluZyBzdHJ1Y3R1cmU6CisgICAgICAgIC8vCisgICAgICAgIC8vIGlmIChpcyBj
ZWxsKSB7CisgICAgICAgIC8vICAgICBpZiAoaXMgb2JqZWN0KSB7CisgICAgICAgIC8vICAgICAg
ICAgaWYgKGlzIGZ1bmN0aW9uKSB7CisgICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbjsKKyAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKGRvZXNuJ3QgaGF2ZSBjYWxsIHRy
YXAgYW5kIGRvZXNuJ3QgbWFzcXVlcmFkZSBhcyB1bmRlZmluZWQpIHsKKyAgICAgICAgLy8gICAg
ICAgICAgICAgcmV0dXJuIG9iamVjdAorICAgICAgICAvLyAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vICAgICAgICAgICAgIHJldHVybiBzbG93UGF0aCgpOworICAgICAgICAvLyAgICAgICAg
IH0KKyAgICAgICAgLy8gICAgIH0gZWxzZSBpZiAoaXMgc3RyaW5nKSB7CisgICAgICAgIC8vICAg
ICAgICAgcmV0dXJuIHN0cmluZworICAgICAgICAvLyAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
ICAgICAgICByZXR1cm4gc3ltYm9sCisgICAgICAgIC8vICAgICB9CisgICAgICAgIC8vIH0gZWxz
ZSBpZiAoaXMgbnVtYmVyKSB7CisgICAgICAgIC8vICAgICByZXR1cm4gbnVtYmVyCisgICAgICAg
IC8vIH0gZWxzZSBpZiAoaXMgbnVsbCkgeworICAgICAgICAvLyAgICAgcmV0dXJuIG9iamVjdAor
ICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIGJvb2xlYW4pIHsKKyAgICAgICAgLy8gICAgIHJldHVy
biBib29sZWFuCisgICAgICAgIC8vIH0gZWxzZSB7CisgICAgICAgIC8vICAgICByZXR1cm4gdW5k
ZWZpbmVkCisgICAgICAgIC8vIH0KKyAgICAgICAgCisgICAgICAgIEp1bXAgbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdzKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBjZWxsR1BSID0g
cmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgIEp1bXAgbm90T2JqZWN0ID0gYnJhbmNoSWZOb3RP
YmplY3QoY2VsbEdQUik7CisgICAgICAgIAorICAgICAgICBKdW1wIG5vdEZ1bmN0aW9uID0gYnJh
bmNoSWZOb3RGdW5jdGlvbihjZWxsR1BSKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpG
dW5jdGlvbiwgZmFsc2UpOworICAgICAgICAKKyAgICAgICAgbm90RnVuY3Rpb24ubGluayh0aGlz
KTsKKyAgICAgICAgc2xvd1BhdGhGdW5jdG9yKAorICAgICAgICAgICAgYnJhbmNoVGVzdDgoCisg
ICAgICAgICAgICAgICAgTm9uWmVybywKKyAgICAgICAgICAgICAgICBBZGRyZXNzKGNlbGxHUFIs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8IFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0
YSkpKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpPYmplY3QsIGZhbHNlKTsKKyAgICAg
ICAgCisgICAgICAgIG5vdE9iamVjdC5saW5rKHRoaXMpOworICAgICAgICAKKyAgICAgICAgSnVt
cCBub3RTdHJpbmcgPSBicmFuY2hJZk5vdFN0cmluZyhjZWxsR1BSKTsKKyAgICAgICAgZnVuY3Rv
cihUeXBlb2ZUeXBlOjpTdHJpbmcsIGZhbHNlKTsKKyAgICAgICAgbm90U3RyaW5nLmxpbmsodGhp
cyk7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6U3ltYm9sLCBmYWxzZSk7CisgICAgICAg
IAorICAgICAgICBub3RDZWxsLmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3ROdW1iZXIg
PSBicmFuY2hJZk5vdE51bWJlcihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgZnVuY3RvcihUeXBl
b2ZUeXBlOjpOdW1iZXIsIGZhbHNlKTsKKyAgICAgICAgbm90TnVtYmVyLmxpbmsodGhpcyk7Cisg
ICAgICAgIAorICAgICAgICBKdW1wTGlzdCBub3ROdWxsID0gYnJhbmNoSWZOb3RFcXVhbChyZWdz
LCBqc051bGwoKSk7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6T2JqZWN0LCBmYWxzZSk7
CisgICAgICAgIG5vdE51bGwubGluayh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgbm90
Qm9vbGVhbiA9IGJyYW5jaElmTm90Qm9vbGVhbihyZWdzLCB0ZW1wR1BSKTsKKyAgICAgICAgZnVu
Y3RvcihUeXBlb2ZUeXBlOjpCb29sZWFuLCBmYWxzZSk7CisgICAgICAgIG5vdEJvb2xlYW4ubGlu
ayh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6VW5kZWZpbmVk
LCB0cnVlKTsKKyAgICB9CiAKICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYg
ZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJsb2NrKik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTgzNzE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDYgKzYzLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgRDogZG91YmxlCiAgICAgRTogRXhlY1N0YXRl
KgogICAgIEY6IENhbGxGcmFtZSoKKyAgICBHOiBKU0dsb2JhbE9iamVjdCoKICAgICBJOiBTdHJp
bmdJbXBsKgogICAgIEljZjogSW5saW5lQ2FsbEZyYW1lKgogICAgIElkYzogY29uc3QgSWRlbnRp
ZmllcioKQEAgLTEyNyw2ICsxMjgsNyBAQCB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAo
KkNfSklUT3BlCiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9u
X0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogSklU
X09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDWkMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGlu
dDMyX3QsIEpTQ2VsbCopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9w
ZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwordHlwZWRlZiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FR0MpKEV4ZWNTdGF0ZSosIEpTR2xv
YmFsT2JqZWN0KiwgSlNDZWxsKik7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNf
SklUT3BlcmF0aW9uX0VJY2YpKEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRl
ZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9w
ZXJhdGlvbl9FSnNjKShFeGVjU3RhdGUqLCBKU1Njb3BlKik7CkBAIC0xNTcsMTAgKzE1OSwxMiBA
QCB0eXBlZGVmIGludDY0X3QgSklUX09QRVJBVElPTigqUV9KSVRPcGVyCiB0eXBlZGVmIGludDMy
X3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0QpKGRvdWJsZSk7CiB0eXBlZGVmIGlu
dDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlw
ZWRlZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRl
KiwgSlNDZWxsKik7Cit0eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0
aW9uX0VHQykoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKTsKIHR5cGVkZWYg
aW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRVNKc3MpKEV4ZWNTdGF0ZSos
IHNpemVfdCwgSlNTdHJpbmcqKTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9K
SVRPcGVyYXRpb25fRUpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CiB0
eXBlZGVmIGludDMyX3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0VKWlopKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBpbnQzMl90KTsKIHR5cGVkZWYgc2l6ZV90
IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEpTQ2VsbCopOwordHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9u
X0VHQykoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKTsKIHR5cGVkZWYgc2l6
ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUpOwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9u
X0VKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVk
ZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FT0pzcykoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1N0cmluZyopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU21hbGxTdHJpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU21hbGxTdHJpbmdzLmgJKHJldmlzaW9uIDE4MzcxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTUgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFNtYWxsU3RyaW5nc19oCiAjZGVmaW5lIFNtYWxs
U3RyaW5nc19oCiAKKyNpbmNsdWRlICJUeXBlb2ZUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJy
aWVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTg1LDYgKzg2LDI5IEBA
IHB1YmxpYzoKICAgICB9CiAgICAgSlNDX0NPTU1PTl9TVFJJTkdTX0VBQ0hfTkFNRShKU0NfQ09N
TU9OX1NUUklOR1NfQUNDRVNTT1JfREVGSU5JVElPTikKICN1bmRlZiBKU0NfQ09NTU9OX1NUUklO
R1NfQUNDRVNTT1JfREVGSU5JVElPTgorICAgIAorICAgIEpTU3RyaW5nKiB0eXBlU3RyaW5nKFR5
cGVvZlR5cGUgdHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIFR5cGVvZlR5cGU6OlVuZGVmaW5lZDoKKyAgICAgICAgICAgIHJldHVybiB1bmRl
ZmluZWRTdHJpbmcoKTsKKyAgICAgICAgY2FzZSBUeXBlb2ZUeXBlOjpCb29sZWFuOgorICAgICAg
ICAgICAgcmV0dXJuIGJvb2xlYW5TdHJpbmcoKTsKKyAgICAgICAgY2FzZSBUeXBlb2ZUeXBlOjpO
dW1iZXI6CisgICAgICAgICAgICByZXR1cm4gbnVtYmVyU3RyaW5nKCk7CisgICAgICAgIGNhc2Ug
VHlwZW9mVHlwZTo6U3RyaW5nOgorICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1N0cmluZygpOwor
ICAgICAgICBjYXNlIFR5cGVvZlR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiBzeW1i
b2xTdHJpbmcoKTsKKyAgICAgICAgY2FzZSBUeXBlb2ZUeXBlOjpPYmplY3Q6CisgICAgICAgICAg
ICByZXR1cm4gb2JqZWN0U3RyaW5nKCk7CisgICAgICAgIGNhc2UgVHlwZW9mVHlwZTo6RnVuY3Rp
b246CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25TdHJpbmcoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQogCiAgICAgSlNTdHJpbmcqIG51bGxPYmplY3RTdHJpbmcoKSBj
b25zdCB7IHJldHVybiBtX251bGxPYmplY3RTdHJpbmc7IH0KICAgICBKU1N0cmluZyogdW5kZWZp
bmVkT2JqZWN0U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV91bmRlZmluZWRPYmplY3RTdHJpbmc7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVvZlR5cGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZW9mVHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVHlwZW9mVHlwZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGVvZlR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVvZlR5cGU6OlVuZGVmaW5l
ZDoKKyAgICAgICAgb3V0LnByaW50KCJ1bmRlZmluZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgVHlwZW9mVHlwZTo6Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJib29sZWFuIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVvZlR5cGU6Ok51bWJlcjoKKyAgICAgICAg
b3V0LnByaW50KCJudW1iZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9mVHlw
ZTo6U3RyaW5nOgorICAgICAgICBvdXQucHJpbnQoInN0cmluZyIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBUeXBlb2ZUeXBlOjpTeW1ib2w6CisgICAgICAgIG91dC5wcmludCgic3ltYm9s
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVvZlR5cGU6Ok9iamVjdDoKKyAgICAg
ICAgb3V0LnByaW50KCJvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZW9m
VHlwZTo6RnVuY3Rpb246CisgICAgICAgIG91dC5wcmludCgiZnVuY3Rpb24iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZW9mVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVvZlR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVvZlR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlw
ZW9mVHlwZV9oCisjZGVmaW5lIFR5cGVvZlR5cGVfaAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIGNsYXNzIFR5cGVvZlR5cGUgeworICAg
IFVuZGVmaW5lZCwKKyAgICBCb29sZWFuLAorICAgIE51bWJlciwKKyAgICBTdHJpbmcsCisgICAg
U3ltYm9sLAorICAgIE9iamVjdCwKKyAgICBGdW5jdGlvbiAgICAKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIEpTQzo6VHlwZW9mVHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gVHlwZW9mVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvdHlwZS1vZi1mdW5jdGlvbnMtYW5kLW9iamVjdHMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90eXBlLW9mLWZ1bmN0aW9ucy1hbmQtb2Jq
ZWN0cy5qcwkocmV2aXNpb24gMTgzNzE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy90eXBlLW9mLWZ1bmN0aW9ucy1hbmQtb2JqZWN0cy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjYsNDggKzI2LDYxIEBAIG5vSW5saW5lKGJhcik7CiBub0lubGluZShiYXopOwogbm9Jbmxp
bmUoZnV6eik7CiAKLWZ1bmN0aW9uIGV4cGVjdChmLCB2LCBleHBlY3RlZCkgewotICAgIHZhciBy
ZXN1bHQgPSBmKHYpOwotICAgIGlmIChyZXN1bHQgIT0gZXhwZWN0ZWQpCi0gICAgICAgIHRocm93
ICJFcnJvcjogIiArIGYubmFtZSArICIoIiArIHYgKyAiKSByZXR1cm5lZCAiICsgcmVzdWx0ICsg
IiBpbnN0ZWFkIG9mICIgKyBleHBlY3RlZDsKLX0KK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFy
IGVycm9ycyA9IFtdOworCisgICAgZnVuY3Rpb24gdGVzdFZhbHVlKHYsIGV4cGVjdGVkKSB7Cisg
ICAgICAgIGZ1bmN0aW9uIGV4cGVjdChmLCBleHBlY3RlZCkgeworICAgICAgICAgICAgdmFyIHJl
c3VsdCA9IGYodik7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IGV4cGVjdGVkKQorICAgICAg
ICAgICAgICAgIGVycm9ycy5wdXNoKGYubmFtZSArICIoIiArIHYgKyAiKSByZXR1cm5lZCAiICsg
cmVzdWx0ICsgIiBpbnN0ZWFkIG9mICIgKyBleHBlY3RlZCk7CisgICAgICAgIH0KIAotZnVuY3Rp
b24gdGVzdCh2LCBleHBlY3RlZCkgewotICAgIHN3aXRjaCAoZXhwZWN0ZWQpIHsKLSAgICBjYXNl
ICJmdW5jdGlvbiI6Ci0gICAgICAgIGV4cGVjdChmb28sIHYsICJmdW5jdGlvbiIpOwotICAgICAg
ICBleHBlY3QoYmFyLCB2LCAyKTsKLSAgICAgICAgZXhwZWN0KGJheiwgdiwgdHJ1ZSk7Ci0gICAg
ICAgIGV4cGVjdChmdXp6LCB2LCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgIm9i
amVjdCI6Ci0gICAgICAgIGV4cGVjdChmb28sIHYsICJvYmplY3QiKTsKLSAgICAgICAgZXhwZWN0
KGJhciwgdiwgMSk7Ci0gICAgICAgIGV4cGVjdChiYXosIHYsIGZhbHNlKTsKLSAgICAgICAgZXhw
ZWN0KGZ1enosIHYsIHRydWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICJvdGhlciI6Ci0g
ICAgICAgIHZhciByZXN1bHQgPSBmb28odik7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gIm9iamVj
dCIgfHwgcmVzdWx0ID09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGZv
bygiICsgdiArICIpIHJldHVybmVkICIgKyByZXN1bHQgKyAiIGJ1dCBleHBlY3RlZCBzb21ldGhp
bmcgb3RoZXIgdGhhbiBvYmplY3Qgb3IgZnVuY3Rpb24iOwotICAgICAgICBleHBlY3QoYmFyLCB2
LCAzKTsKLSAgICAgICAgZXhwZWN0KGJheiwgdiwgZmFsc2UpOwotICAgICAgICBleHBlY3QoZnV6
eiwgdiwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICB0aHJv
dyAiQmFkIGV4cGVjdGVkIGNhc2UiOworICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkKSB7CisgICAg
ICAgIGNhc2UgImZ1bmN0aW9uIjoKKyAgICAgICAgICAgIGV4cGVjdChmb28sICJmdW5jdGlvbiIp
OworICAgICAgICAgICAgZXhwZWN0KGJhciwgMik7CisgICAgICAgICAgICBleHBlY3QoYmF6LCB0
cnVlKTsKKyAgICAgICAgICAgIGV4cGVjdChmdXp6LCBmYWxzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAib2JqZWN0IjoKKyAgICAgICAgICAgIGV4cGVjdChmb28sICJvYmpl
Y3QiKTsKKyAgICAgICAgICAgIGV4cGVjdChiYXIsIDEpOworICAgICAgICAgICAgZXhwZWN0KGJh
eiwgZmFsc2UpOworICAgICAgICAgICAgZXhwZWN0KGZ1enosIHRydWUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgIm90aGVyIjoKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBm
b28odik7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09ICJvYmplY3QiIHx8IHJlc3VsdCA9PSAi
ZnVuY3Rpb24iKQorICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCJmb28oIiArIHYgKyAiKSBy
ZXR1cm5lZCAiICsgcmVzdWx0ICsgIiBidXQgZXhwZWN0ZWQgc29tZXRoaW5nIG90aGVyIHRoYW4g
b2JqZWN0IG9yIGZ1bmN0aW9uIik7CisgICAgICAgICAgICBleHBlY3QoYmFyLCAzKTsKKyAgICAg
ICAgICAgIGV4cGVjdChiYXosIGZhbHNlKTsKKyAgICAgICAgICAgIGV4cGVjdChmdXp6LCBmYWxz
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHRo
cm93ICJCYWQgZXhwZWN0ZWQgY2FzZSI7CisgICAgICAgIH0KICAgICB9CisgICAgCisgICAgdGVz
dFZhbHVlKHt9LCAib2JqZWN0Iik7CisgICAgdGVzdFZhbHVlKGZ1bmN0aW9uKCkgeyB9LCAiZnVu
Y3Rpb24iKTsKKyAgICB0ZXN0VmFsdWUoImhlbGxvIiwgIm90aGVyIik7CisgICAgdGVzdFZhbHVl
KDQyLCAib3RoZXIiKTsKKyAgICB0ZXN0VmFsdWUobnVsbCwgIm9iamVjdCIpOworICAgIHRlc3RW
YWx1ZSh2b2lkIDAsICJvdGhlciIpOworICAgIHRlc3RWYWx1ZSg0Mi41LCAib3RoZXIiKTsKKyAg
ICB0ZXN0VmFsdWUoTWFwLCAiZnVuY3Rpb24iKTsKKyAgICB0ZXN0VmFsdWUoRGF0ZSwgImZ1bmN0
aW9uIik7CisgICAgdGVzdFZhbHVlKE1hcC5wcm90b3R5cGUsICJvYmplY3QiKTsKKyAgICAKKyAg
ICBpZiAoIWVycm9ycy5sZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7ICsraSkKKyAgICAgICAgcHJpbnQoIkVycm9yOiAi
ICsgZXJyb3JzW2ldKTsKKyAgICB0aHJvdyAiRW5jb3VudGVyZWQgZXJyb3JzIGR1cmluZyB0ZXN0
IHJ1bi4iOwogfQogCi1mb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICB0ZXN0
KHt9LCAib2JqZWN0Iik7Ci0gICAgdGVzdChmdW5jdGlvbigpIHsgfSwgImZ1bmN0aW9uIik7Ci0g
ICAgdGVzdCgiaGVsbG8iLCAib3RoZXIiKTsKLSAgICB0ZXN0KDQyLCAib3RoZXIiKTsKLSAgICB0
ZXN0KG51bGwsICJvYmplY3QiKTsKLSAgICB0ZXN0KHZvaWQgMCwgIm90aGVyIik7Ci0gICAgdGVz
dCg0Mi41LCAib3RoZXIiKTsKLSAgICB0ZXN0KE1hcCwgImZ1bmN0aW9uIik7Ci0gICAgdGVzdChE
YXRlLCAiZnVuY3Rpb24iKTsKLSAgICB0ZXN0KE1hcC5wcm90b3R5cGUsICJvYmplY3QiKTsKLX0K
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkKKyAgICB0ZXN0KCk7CisK
</data>
<flag name="review"
          id="277081"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>