<?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>143807</bug_id>
          
          <creation_ts>2015-04-15 17:24:05 -0700</creation_ts>
          <short_desc>Extract the allocation profile from JSFunction into a rare object</short_desc>
          <delta_ts>2015-04-19 09:21:01 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Basile Clement">basile_clement</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1085774</commentid>
    <comment_count>0</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-04-15 17:24:05 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085775</commentid>
    <comment_count>1</comment_count>
      <attachid>250885</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-04-15 17:26:08 -0700</bug_when>
    <thetext>Created attachment 250885
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085777</commentid>
    <comment_count>2</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-04-15 17:26:45 -0700</bug_when>
    <thetext>Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on Basiles-MacBook-Pro (MacBookPro11,3).



VMs tested:

&quot;Conf#1&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r182860)

&quot;Conf#2&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r182860)



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.



                                                          Conf#1                    Conf#2                                      

SunSpider:

   3d-cube                                            4.3513+-0.1785            4.3360+-0.1592        

   3d-morph                                           5.4240+-0.2413            5.3956+-0.1235        

   3d-raytrace                                        5.3105+-0.1665     ?      5.3206+-0.2631        ?

   access-binary-trees                                2.1284+-0.2883            2.0650+-0.1657          might be 1.0307x faster

   access-fannkuch                                    5.2994+-0.1189     ^      5.1220+-0.0457        ^ definitely 1.0346x faster

   access-nbody                                       2.6285+-0.1909            2.6151+-0.1385        

   access-nsieve                                      3.3890+-0.1249            3.3334+-0.1385          might be 1.0167x faster

   bitops-3bit-bits-in-byte                           1.4627+-0.0548     ?      1.4956+-0.1999        ? might be 1.0225x slower

   bitops-bits-in-byte                                3.2333+-0.0620     ?      3.2732+-0.1676        ? might be 1.0123x slower

   bitops-bitwise-and                                 2.1891+-0.1071     ?      2.2299+-0.2655        ? might be 1.0186x slower

   bitops-nsieve-bits                                 3.4100+-0.1431            3.3588+-0.0775          might be 1.0152x faster

   controlflow-recursive                              2.0201+-0.1349            1.9712+-0.2311          might be 1.0249x faster

   crypto-aes                                         3.6953+-0.2613     ?      3.8790+-0.5430        ? might be 1.0497x slower

   crypto-md5                                         2.1340+-0.0327     ?      2.1982+-0.0638        ? might be 1.0301x slower

   crypto-sha1                                        2.4345+-0.0927            2.4067+-0.0722          might be 1.0115x faster

   date-format-tofte                                  7.0014+-0.4243            7.0010+-0.2992        

   date-format-xparb                                  5.1174+-0.5043            5.0167+-0.2513          might be 1.0201x faster

   math-cordic                                        2.8093+-0.0494     ?      2.9795+-0.3261        ? might be 1.0606x slower

   math-partial-sums                                  4.9482+-0.5678            4.5165+-0.1615          might be 1.0956x faster

   math-spectral-norm                                 1.8149+-0.1162     ?      1.9406+-0.2506        ? might be 1.0693x slower

   regexp-dna                                         6.3341+-0.2084     ?      6.7853+-0.2775        ? might be 1.0712x slower

   string-base64                                      4.0452+-0.1517     ?      4.2826+-0.1629        ? might be 1.0587x slower

   string-fasta                                       6.0740+-0.1815            5.9692+-0.2017          might be 1.0176x faster

   string-tagcloud                                    8.9479+-0.5924            8.8315+-0.2544          might be 1.0132x faster

   string-unpack-code                                20.0675+-1.0627           19.7247+-1.5502          might be 1.0174x faster

   string-validate-input                              4.4497+-0.0519     ?      4.5726+-0.2648        ? might be 1.0276x slower



   &lt;arithmetic&gt;                                       4.6431+-0.0687            4.6393+-0.0905          might be 1.0008x faster



                                                          Conf#1                    Conf#2                                      

LongSpider:

   3d-cube                                          805.9812+-21.1292    ?    813.0506+-11.1882       ?

   3d-morph                                        1552.0595+-9.2674     ?   1560.3653+-9.6951        ?

   3d-raytrace                                      677.2637+-13.8804    ?    679.2043+-9.6171        ?

   access-binary-trees                              852.5469+-8.2149          850.5845+-10.6724       

   access-fannkuch                                  268.2402+-4.9708     ?    268.8646+-8.1638        ?

   access-nbody                                     561.8849+-3.9658          559.1225+-5.5987        

   access-nsieve                                    654.4847+-9.7351     ?    663.2570+-24.9499       ? might be 1.0134x slower

   bitops-3bit-bits-in-byte                          41.9596+-1.1038           41.4735+-1.0046          might be 1.0117x faster

   bitops-bits-in-byte                               85.4745+-5.5203     ?     87.4890+-4.2883        ? might be 1.0236x slower

   bitops-nsieve-bits                               682.3320+-5.7989     ?    685.3353+-8.4696        ?

   controlflow-recursive                            468.8551+-7.7111     ?    475.3370+-10.7655       ? might be 1.0138x slower

   crypto-aes                                       557.6466+-16.6942    ?    558.5888+-11.1633       ?

   crypto-md5                                       543.4281+-11.1941    ?    544.2752+-15.7457       ?

   crypto-sha1                                      584.4222+-18.9099    ?    601.1943+-22.1867       ? might be 1.0287x slower

   date-format-tofte                                535.7275+-5.1229          524.5095+-12.2826         might be 1.0214x faster

   date-format-xparb                                671.3372+-41.2631         648.0869+-18.9281         might be 1.0359x faster

   math-cordic                                      523.4803+-14.0231         519.3766+-10.0796       

   math-partial-sums                                430.4116+-6.2189     ?    433.1621+-5.9940        ?

   math-spectral-norm                               573.9135+-8.8926     ?    574.4497+-7.6372        ?

   string-base64                                    320.3403+-3.4645     ?    320.4820+-1.5651        ?

   string-fasta                                     391.5900+-3.5560          389.6848+-7.2312        

   string-tagcloud                                  206.1483+-11.5628    ?    207.6641+-8.3331        ?



   &lt;geometric&gt;                                      443.8034+-3.4514     ?    444.4876+-2.3120        ? might be 1.0015x slower



                                                          Conf#1                    Conf#2                                      

V8Spider:

   crypto                                            51.7504+-1.8540     ?     52.7356+-2.2131        ? might be 1.0190x slower

   deltablue                                         85.6441+-8.3407           78.0389+-7.2471          might be 1.0975x faster

   earley-boyer                                      38.3156+-1.3167     ?     39.1658+-0.9573        ? might be 1.0222x slower

   raytrace                                          31.5426+-1.3368           31.4274+-0.8680        

   regexp                                            59.2784+-2.6065     ?     60.9765+-4.2955        ? might be 1.0286x slower

   richards                                          73.1881+-3.1756           71.2199+-4.3579          might be 1.0276x faster

   splay                                             35.2180+-2.1385           35.0353+-3.2324        



   &lt;geometric&gt;                                       50.2885+-1.2212           49.8388+-1.4047          might be 1.0090x faster



                                                          Conf#1                    Conf#2                                      

Octane:

   encrypt                                           0.20917+-0.00291    ^     0.20275+-0.00312       ^ definitely 1.0316x faster

   decrypt                                           3.63869+-0.21103    ?     3.70599+-0.05919       ? might be 1.0185x slower

   deltablue                                x2       0.16576+-0.00505          0.16545+-0.00328       

   earley                                            0.48861+-0.00667    ^     0.47382+-0.00452       ^ definitely 1.0312x faster

   boyer                                             5.76205+-0.43739          5.73269+-0.19125       

   navier-stokes                            x2       5.24776+-0.06561          5.21805+-0.03738       

   raytrace                                 x2       1.04842+-0.04976    ?     1.09179+-0.04619       ? might be 1.0414x slower

   richards                                 x2       0.09695+-0.00279          0.09545+-0.00107         might be 1.0158x faster

   splay                                    x2       0.34778+-0.00360          0.34488+-0.00262       

   regexp                                   x2      29.27406+-0.34967         29.01738+-0.52917       

   pdfjs                                    x2      40.72890+-0.64434    ^    39.69891+-0.36499       ^ definitely 1.0259x faster

   mandreel                                 x2      47.66526+-0.53252         47.37911+-0.61930       

   gbemu                                    x2      31.40833+-0.36088    ?    32.11507+-1.59081       ? might be 1.0225x slower

   closure                                           0.50644+-0.00739    ?     0.50699+-0.01412       ?

   jquery                                            6.27980+-0.10694          6.20199+-0.06621         might be 1.0125x faster

   box2d                                    x2      10.56740+-0.13805    ?    10.66469+-0.11187       ?

   zlib                                     x2     375.41363+-18.39243       368.38181+-16.55848        might be 1.0191x faster

   typescript                               x2     690.40413+-17.49761       684.44393+-11.66221      



   &lt;geometric&gt;                                       5.92639+-0.05255          5.90409+-0.02452         might be 1.0038x faster



                                                          Conf#1                    Conf#2                                      

Kraken:

   ai-astar                                          283.567+-7.912      ?     290.582+-4.608         ? might be 1.0247x slower

   audio-beat-detection                              102.799+-1.283      ?     104.721+-2.821         ? might be 1.0187x slower

   audio-dft                                         166.767+-3.061      ?     173.423+-8.775         ? might be 1.0399x slower

   audio-fft                                          80.274+-3.549             79.426+-3.065           might be 1.0107x faster

   audio-oscillator                                  184.104+-5.671      ?     184.316+-2.930         ?

   imaging-darkroom                                   95.977+-1.004      ?      97.370+-2.378         ? might be 1.0145x slower

   imaging-desaturate                                 61.096+-4.870             58.605+-3.155           might be 1.0425x faster

   imaging-gaussian-blur                              89.670+-1.087      ?      90.760+-2.958         ? might be 1.0122x slower

   json-parse-financial                               37.007+-0.786      ?      37.426+-0.927         ? might be 1.0113x slower

   json-stringify-tinderbox                           53.990+-1.140             52.961+-2.414           might be 1.0194x faster

   stanford-crypto-aes                                58.041+-1.020      ?      58.267+-2.908         ?

   stanford-crypto-ccm                                48.891+-7.332             44.840+-4.612           might be 1.0904x faster

   stanford-crypto-pbkdf2                            154.977+-3.332            154.907+-6.089         

   stanford-crypto-sha256-iterative                   51.138+-1.856      ?      53.542+-3.257         ? might be 1.0470x slower



   &lt;arithmetic&gt;                                      104.878+-1.471      ?     105.796+-1.037         ? might be 1.0088x slower



                                                          Conf#1                    Conf#2                                      

JSRegress:

   abs-boolean                                        2.4470+-0.0717            2.4020+-0.0689          might be 1.0187x faster

   adapt-to-double-divide                            16.5470+-0.4568     ?     17.6393+-2.4509        ? might be 1.0660x slower

   aliased-arguments-getbyval                         1.0880+-0.0253     ?      1.2509+-0.4839        ? might be 1.1498x slower

   allocate-big-object                                2.3208+-0.1204            2.2062+-0.1695          might be 1.0520x faster

   arguments-named-and-reflective                    11.0983+-0.3014     ?     11.3414+-0.3893        ? might be 1.0219x slower

   arguments-out-of-bounds                           10.5700+-0.4304           10.4874+-0.4199        

   arguments-strict-mode                             10.1077+-0.1490     ?     10.3695+-0.5764        ? might be 1.0259x slower

   arguments                                          9.2575+-0.4066            9.1913+-0.3207        

   arity-mismatch-inlining                            0.7933+-0.0482     ?      0.8027+-0.0401        ? might be 1.0119x slower

   array-access-polymorphic-structure                 6.1383+-0.2885     ?      6.1785+-0.1563        ?

   array-nonarray-polymorhpic-access                 29.9244+-2.4530           28.9091+-1.1795          might be 1.0351x faster

   array-prototype-every                             81.1347+-2.5441     ?     82.1025+-2.2622        ? might be 1.0119x slower

   array-prototype-forEach                           79.9167+-1.0646     ?     81.9886+-1.9933        ? might be 1.0259x slower

   array-prototype-map                               87.9089+-2.4001           87.0442+-0.5808        

   array-prototype-some                              82.6800+-3.1647     ?     84.5488+-3.0160        ? might be 1.0226x slower

   array-splice-contiguous                           39.5854+-1.9664           39.2182+-0.7816        

   array-with-double-add                              3.4590+-0.1063            3.4455+-0.0669        

   array-with-double-increment                        3.0582+-0.0367     ?      3.1237+-0.0830        ? might be 1.0214x slower

   array-with-double-mul-add                          4.1863+-0.1335     ?      4.2050+-0.0578        ?

   array-with-double-sum                              3.1970+-0.0507     ?      3.2220+-0.0887        ?

   array-with-int32-add-sub                           6.2628+-0.5371            5.9781+-0.2515          might be 1.0476x faster

   array-with-int32-or-double-sum                     3.2559+-0.1113            3.2370+-0.0981        

   ArrayBuffer-DataView-alloc-large-long-lived   

                                                     29.2911+-2.1794           28.3682+-1.3741          might be 1.0325x faster

   ArrayBuffer-DataView-alloc-long-lived             13.0213+-0.5505     ?     13.1938+-1.3226        ? might be 1.0132x slower

   ArrayBuffer-Int32Array-byteOffset                  3.7203+-0.1995            3.6816+-0.1867          might be 1.0105x faster

   ArrayBuffer-Int8Array-alloc-large-long-lived   

                                                     28.6268+-1.8027     ?     29.6625+-2.5780        ? might be 1.0362x slower

   ArrayBuffer-Int8Array-alloc-long-lived-buffer   

                                                     22.9383+-2.2068           21.8558+-0.6083          might be 1.0495x faster

   ArrayBuffer-Int8Array-alloc-long-lived            12.0463+-0.4333     ?     12.4331+-0.8103        ? might be 1.0321x slower

   ArrayBuffer-Int8Array-alloc                       10.4162+-0.5165     ?     10.5004+-0.2224        ?

   asmjs_bool_bug                                     6.8307+-0.1466     ?      6.9816+-0.4124        ? might be 1.0221x slower

   assign-custom-setter-polymorphic                   2.5518+-0.0465     ?      2.5977+-0.1283        ? might be 1.0180x slower

   assign-custom-setter                               3.4644+-0.1091     ?      3.4959+-0.1295        ?

   basic-set                                          8.0380+-0.4414            7.9612+-0.4836        

   big-int-mul                                        3.4882+-0.0546     ?      3.5283+-0.1376        ? might be 1.0115x slower

   boolean-test                                       2.8894+-0.0869            2.8186+-0.0454          might be 1.0251x faster

   branch-fold                                        3.5740+-0.0814     ?      3.5741+-0.0552        ?

   by-val-generic                                     7.7531+-0.4641            7.6645+-0.2614          might be 1.0116x faster

   call-spread-apply                                 28.0690+-1.1195     ?     28.8062+-1.3833        ? might be 1.0263x slower

   call-spread-call                                  22.2289+-0.4870           21.7955+-0.5135          might be 1.0199x faster

   captured-assignments                               0.3833+-0.0161     ?      0.3995+-0.0459        ? might be 1.0425x slower

   cast-int-to-double                                 4.9596+-0.0722            4.8877+-0.0557          might be 1.0147x faster

   cell-argument                                      6.3247+-0.1647            6.2119+-0.1538          might be 1.0182x faster

   cfg-simplify                                       2.9167+-0.0889            2.9148+-0.0519        

   chain-getter-access                                9.2930+-0.2108            9.1744+-0.2308          might be 1.0129x faster

   cmpeq-obj-to-obj-other                            10.2631+-1.5007     ?     11.6333+-0.6556        ? might be 1.1335x slower

   constant-test                                      4.5138+-0.0899     ?      4.6021+-0.0345        ? might be 1.0196x slower

   create-lots-of-functions                          19.3610+-0.5056     ^     18.1178+-0.5121        ^ definitely 1.0686x faster

   DataView-custom-properties                        33.7576+-2.4577     ?     34.1814+-2.0969        ? might be 1.0126x slower

   deconstructing-parameters-overridden-by-function   

                                                      0.4246+-0.0426     ?      0.4714+-0.1571        ? might be 1.1103x slower

   delay-tear-off-arguments-strictmode               12.4769+-0.6749     ?     12.5562+-0.5191        ?

   deltablue-varargs                                145.9152+-3.1133          145.6403+-2.0731        

   destructuring-arguments                           12.9150+-0.2424     ?     13.4771+-0.4675        ? might be 1.0435x slower

   destructuring-swap                                 4.8110+-0.3235            4.7069+-0.1121          might be 1.0221x faster

   direct-arguments-getbyval                          1.1450+-0.1188            1.0568+-0.0284          might be 1.0834x faster

   div-boolean-double                                 5.4067+-0.0886     ?      5.4630+-0.1114        ? might be 1.0104x slower

   div-boolean                                        8.2948+-0.0783     ?      8.3210+-0.1594        ?

   double-get-by-val-out-of-bounds                    4.1602+-0.0719            4.0210+-0.1020          might be 1.0346x faster

   double-pollution-getbyval                          8.9152+-0.1050            8.8576+-0.1342        

   double-pollution-putbyoffset                       3.8286+-0.1303     ?      3.8502+-0.1062        ?

   double-to-int32-typed-array-no-inline              2.0328+-0.0462     ?      2.0838+-0.0829        ? might be 1.0251x slower

   double-to-int32-typed-array                        1.7736+-0.0949            1.7233+-0.0267          might be 1.0292x faster

   double-to-uint32-typed-array-no-inline             2.1069+-0.0449     ?      2.1945+-0.1496        ? might be 1.0416x slower

   double-to-uint32-typed-array                       1.7973+-0.0879     ?      1.9734+-0.1967        ? might be 1.0980x slower

   elidable-new-object-dag                           36.2705+-1.1591     ?     36.9351+-2.3367        ? might be 1.0183x slower

   elidable-new-object-roflcopter                    38.5317+-1.2620           38.0727+-0.5554          might be 1.0121x faster

   elidable-new-object-then-call                     30.7309+-1.9426     ?     31.6465+-1.5167        ? might be 1.0298x slower

   elidable-new-object-tree                          38.5294+-0.5985           37.4125+-1.3000          might be 1.0299x faster

   empty-string-plus-int                              4.7699+-0.1188     ?      4.8735+-0.3916        ? might be 1.0217x slower

   emscripten-cube2hash                              27.9970+-1.0466     ?     28.3249+-1.8332        ? might be 1.0117x slower

   exit-length-on-plain-object                       13.1510+-0.3428     ?     13.3556+-1.0776        ? might be 1.0156x slower

   external-arguments-getbyval                        1.1167+-0.0502     ?      1.2026+-0.1600        ? might be 1.0769x slower

   external-arguments-putbyval                        2.1879+-0.1548            2.1558+-0.0726          might be 1.0149x faster

   fixed-typed-array-storage-var-index                1.2823+-0.1551     ?      1.2834+-0.1316        ?

   fixed-typed-array-storage                          0.8455+-0.1221     ?      0.8700+-0.1142        ? might be 1.0290x slower

   Float32Array-matrix-mult                           4.0235+-0.2515            4.0002+-0.1814        

   Float32Array-to-Float64Array-set                  50.1787+-1.7765           50.0590+-2.0595        

   Float64Array-alloc-long-lived                     65.1996+-1.9900           63.8942+-4.0696          might be 1.0204x faster

   Float64Array-to-Int16Array-set                    59.5739+-2.5364     ?     63.1797+-2.9900        ? might be 1.0605x slower

   fold-double-to-int                                13.4412+-1.0650           12.7556+-0.4693          might be 1.0538x faster

   fold-get-by-id-to-multi-get-by-offset-rare-int   

                                                      9.5311+-0.2923     !     10.4165+-0.5644        ! definitely 1.0929x slower

   fold-get-by-id-to-multi-get-by-offset              7.9154+-0.4113     ?      8.0894+-0.6026        ? might be 1.0220x slower

   fold-multi-get-by-offset-to-get-by-offset   

                                                      7.1672+-0.8907            7.1663+-1.1202        

   fold-multi-get-by-offset-to-poly-get-by-offset   

                                                      7.1836+-0.6323     ?      7.2475+-1.4040        ?

   fold-multi-put-by-offset-to-poly-put-by-offset   

                                                      6.3281+-0.5629     ?      6.9726+-0.6157        ? might be 1.1018x slower

   fold-multi-put-by-offset-to-put-by-offset   

                                                      3.7879+-0.6619     ?      4.5599+-0.7657        ? might be 1.2038x slower

   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   

                                                      7.6506+-0.2611     ?      8.0191+-0.5272        ? might be 1.0482x slower

   fold-put-by-id-to-multi-put-by-offset              8.2140+-0.3295            7.7263+-0.5353          might be 1.0631x faster

   fold-put-structure                                 3.7931+-0.2473     ?      3.8881+-0.3441        ? might be 1.0251x slower

   for-of-iterate-array-entries                       4.3619+-0.1543     ?      4.3892+-0.2508        ?

   for-of-iterate-array-keys                          3.7457+-0.1248     ?      3.8086+-0.1485        ? might be 1.0168x slower

   for-of-iterate-array-values                        3.6927+-0.1684     ?      3.9528+-0.3635        ? might be 1.0705x slower

   fround                                            18.3245+-0.9290           17.7986+-0.5862          might be 1.0295x faster

   ftl-library-inlining-dataview                     62.4902+-1.6495     ?     63.4805+-2.9161        ? might be 1.0158x slower

   ftl-library-inlining                             109.1415+-3.6737     ?    109.1933+-3.0696        ?

   function-dot-apply                                 2.2162+-0.3892            1.9995+-0.0941          might be 1.1084x faster

   function-test                                      3.0187+-0.0624     ?      3.0838+-0.2756        ? might be 1.0216x slower

   function-with-eval                                90.8018+-1.8237     ?     91.1503+-5.5415        ?

   gcse-poly-get-less-obvious                        14.9247+-0.6754           14.9209+-0.4949        

   gcse-poly-get                                     16.8665+-0.6207           16.3741+-0.3081          might be 1.0301x faster

   gcse                                               3.9220+-0.1638            3.9197+-0.0743        

   get-by-id-bimorphic-check-structure-elimination-simple   

                                                      2.6029+-0.0676     ?      2.6348+-0.0724        ? might be 1.0123x slower

   get-by-id-bimorphic-check-structure-elimination   

                                                      5.9172+-0.2047            5.7904+-0.1125          might be 1.0219x faster

   get-by-id-chain-from-try-block                     6.9068+-0.4276            6.7198+-0.2121          might be 1.0278x faster

   get-by-id-check-structure-elimination              4.6242+-0.2982            4.3971+-0.0594          might be 1.0516x faster

   get-by-id-proto-or-self                           14.5816+-0.8079           14.5014+-0.2062        

   get-by-id-quadmorphic-check-structure-elimination-simple   

                                                      2.9205+-0.1074     ?      2.9373+-0.0759        ?

   get-by-id-self-or-proto                           15.2506+-0.7060           14.6537+-0.6429          might be 1.0407x faster

   get-by-val-out-of-bounds                           4.0247+-0.1105            3.9674+-0.3359          might be 1.0144x faster

   get_callee_monomorphic                             3.1870+-0.0588            3.1087+-0.1211          might be 1.0252x faster

   get_callee_polymorphic                             3.3073+-0.2544            3.2628+-0.2182          might be 1.0137x faster

   getter-no-activation                               4.8774+-0.1539     ?      4.9098+-0.1565        ?

   getter-richards                                  114.9438+-21.0411         106.4574+-7.6423          might be 1.0797x faster

   getter                                             5.3629+-0.5664     ?      5.6187+-0.5914        ? might be 1.0477x slower

   global-var-const-infer-fire-from-opt               0.9174+-0.1982            0.8186+-0.1018          might be 1.1207x faster

   global-var-const-infer                             0.8488+-0.1323            0.8268+-0.0589          might be 1.0267x faster

   HashMap-put-get-iterate-keys                      24.5997+-0.6597           24.2360+-0.4131          might be 1.0150x faster

   HashMap-put-get-iterate                           24.4452+-0.4996           23.9115+-0.7288          might be 1.0223x faster

   HashMap-string-put-get-iterate                    25.0247+-1.8637     ?     25.3269+-1.8388        ? might be 1.0121x slower

   hoist-make-rope                                    8.4273+-0.9837            8.0370+-0.5119          might be 1.0486x faster

   hoist-poly-check-structure-effectful-loop   

                                                      4.1768+-0.1928     ?      4.2096+-0.2305        ?

   hoist-poly-check-structure                         3.3617+-0.1426     ?      3.4393+-0.1364        ? might be 1.0231x slower

   imul-double-only                                   6.6837+-0.0837     ?      7.0327+-0.4151        ? might be 1.0522x slower

   imul-int-only                                      8.5438+-0.6180            8.4200+-0.8476          might be 1.0147x faster

   imul-mixed                                         6.6873+-0.2674            6.6116+-0.3278          might be 1.0114x faster

   in-four-cases                                     16.0926+-0.7004           15.5995+-0.5874          might be 1.0316x faster

   in-one-case-false                                  8.5703+-0.8041            8.4790+-0.5344          might be 1.0108x faster

   in-one-case-true                                   8.3352+-0.2441     ?      8.7532+-0.7984        ? might be 1.0502x slower

   in-two-cases                                       8.7413+-0.4121     ?      8.8831+-0.1606        ? might be 1.0162x slower

   indexed-properties-in-objects                      3.0389+-0.3934            2.7865+-0.0970          might be 1.0906x faster

   infer-closure-const-then-mov-no-inline             3.2487+-0.0299            3.2090+-0.0880          might be 1.0124x faster

   infer-closure-const-then-mov                      17.1023+-0.5943     ?     17.7515+-0.6377        ? might be 1.0380x slower

   infer-closure-const-then-put-to-scope-no-inline   

                                                     12.2264+-0.7531           12.2021+-1.0730        

   infer-closure-const-then-put-to-scope             24.1777+-1.0407     ?     24.7710+-1.7980        ? might be 1.0245x slower

   infer-closure-const-then-reenter-no-inline   

                                                     51.5117+-0.5737     ?     53.6785+-2.5452        ? might be 1.0421x slower

   infer-closure-const-then-reenter                  24.5851+-1.6039           24.1594+-1.0726          might be 1.0176x faster

   infer-constant-global-property                    30.2894+-0.3676     ?     30.8308+-1.4379        ? might be 1.0179x slower

   infer-constant-property                            2.6012+-0.0377     ?      2.6929+-0.1057        ? might be 1.0353x slower

   infer-one-time-closure-ten-vars                    8.5869+-0.2672            8.5217+-0.2592        

   infer-one-time-closure-two-vars                    8.3461+-0.4496            8.0946+-0.3877          might be 1.0311x faster

   infer-one-time-closure                             8.0044+-0.2049     ?      8.0071+-0.1362        ?

   infer-one-time-deep-closure                       12.8431+-0.2929           12.8362+-0.2785        

   inline-arguments-access                            3.6133+-0.0647     ?      3.8733+-0.2685        ? might be 1.0720x slower

   inline-arguments-aliased-access                    3.7615+-0.1298     ?      4.2146+-0.9004        ? might be 1.1204x slower

   inline-arguments-local-escape                      3.8512+-0.1097     ?      4.7598+-0.8653        ? might be 1.2359x slower

   inline-get-scoped-var                              4.6466+-0.1738     ?      4.7523+-0.1596        ? might be 1.0228x slower

   inlined-put-by-id-transition                       9.1040+-0.5404     ?      9.2681+-1.1541        ? might be 1.0180x slower

   int-or-other-abs-then-get-by-val                   4.8204+-0.0683     ?      4.8572+-0.0621        ?

   int-or-other-abs-zero-then-get-by-val             16.7458+-1.1446           16.1743+-0.4484          might be 1.0353x faster

   int-or-other-add-then-get-by-val                   4.7622+-0.9350            3.9939+-0.0848          might be 1.1924x faster

   int-or-other-add                                   4.8892+-0.2197     ?      4.8919+-0.1231        ?

   int-or-other-div-then-get-by-val                   3.8716+-0.1419            3.8261+-0.1023          might be 1.0119x faster

   int-or-other-max-then-get-by-val                   4.0236+-0.0957     ?      4.0723+-0.1084        ? might be 1.0121x slower

   int-or-other-min-then-get-by-val                   4.4017+-0.3416            4.2161+-0.2137          might be 1.0440x faster

   int-or-other-mod-then-get-by-val                   3.5405+-0.1954     ?      3.5422+-0.1543        ?

   int-or-other-mul-then-get-by-val                   3.7321+-0.1482            3.7158+-0.0562        

   int-or-other-neg-then-get-by-val                   4.3765+-0.1337     ?      4.4526+-0.3742        ? might be 1.0174x slower

   int-or-other-neg-zero-then-get-by-val             16.3265+-0.3323     ?     17.1420+-0.8509        ? might be 1.0500x slower

   int-or-other-sub-then-get-by-val                   4.1029+-0.0647            4.0551+-0.1018          might be 1.0118x faster

   int-or-other-sub                                   3.5291+-0.1039     ^      3.3637+-0.0232        ^ definitely 1.0492x faster

   int-overflow-local                                 4.3227+-0.2873            4.1696+-0.1362          might be 1.0367x faster

   Int16Array-alloc-long-lived                       44.9307+-1.8153     ?     44.9941+-2.6205        ?

   Int16Array-bubble-sort-with-byteLength            17.8456+-0.3220           17.4260+-0.3872          might be 1.0241x faster

   Int16Array-bubble-sort                            18.3149+-1.1043           17.8524+-0.9480          might be 1.0259x faster

   Int16Array-load-int-mul                            1.4119+-0.0552     ?      1.4187+-0.0616        ?

   Int16Array-to-Int32Array-set                      46.6766+-1.6102     ?     49.4229+-1.5800        ? might be 1.0588x slower

   Int32Array-alloc-large                            13.5403+-0.8172           12.9837+-1.2923          might be 1.0429x faster

   Int32Array-alloc-long-lived                       52.2821+-1.7672           51.1169+-2.4143          might be 1.0228x faster

   Int32Array-alloc                                   2.6732+-0.1611     ?      2.8685+-0.2351        ? might be 1.0731x slower

   Int32Array-Int8Array-view-alloc                    6.5135+-0.1935     ?      6.8676+-0.6793        ? might be 1.0544x slower

   int52-spill                                        6.1901+-0.1403     ?      6.2548+-0.3288        ? might be 1.0105x slower

   Int8Array-alloc-long-lived                        41.5637+-2.6369     ?     41.9657+-1.9899        ?

   Int8Array-load-with-byteLength                     3.3803+-0.0651     ?      3.4696+-0.1029        ? might be 1.0264x slower

   Int8Array-load                                     3.3928+-0.0504     ?      3.5075+-0.1899        ? might be 1.0338x slower

   integer-divide                                    10.8359+-0.1329           10.8241+-0.2211        

   integer-modulo                                     1.7508+-0.1243     ?      1.7933+-0.1891        ? might be 1.0243x slower

   large-int-captured                                 4.9695+-0.2195            4.7894+-0.0808          might be 1.0376x faster

   large-int-neg                                     14.7512+-0.3105     ?     14.9455+-0.3321        ? might be 1.0132x slower

   large-int                                         14.7057+-1.2848           14.1331+-0.3249          might be 1.0405x faster

   logical-not                                        4.3738+-0.5171            4.3016+-0.2493          might be 1.0168x faster

   lots-of-fields                                    10.2178+-0.4758     ?     10.4213+-0.2671        ? might be 1.0199x slower

   make-indexed-storage                               2.9106+-0.1317            2.8947+-0.3064        

   make-rope-cse                                      4.1259+-0.4273            3.8891+-0.3678          might be 1.0609x faster

   marsaglia-larger-ints                             33.0348+-0.7826     ?     33.1362+-0.9114        ?

   marsaglia-osr-entry                               21.5758+-0.8149     ?     21.6227+-1.0558        ?

   max-boolean                                        2.6696+-0.1082     ?      2.7087+-0.1518        ? might be 1.0146x slower

   method-on-number                                  17.2861+-0.1209     ?     18.2095+-1.3223        ? might be 1.0534x slower

   min-boolean                                        2.6209+-0.0893            2.6203+-0.0538        

   minus-boolean-double                               3.1611+-0.0886            3.1045+-0.1085          might be 1.0182x faster

   minus-boolean                                      2.3757+-0.1565            2.3493+-0.0650          might be 1.0112x faster

   misc-strict-eq                                    30.8309+-1.5289           29.3101+-0.8581          might be 1.0519x faster

   mod-boolean-double                                11.2475+-0.1101     ?     11.2770+-0.3256        ?

   mod-boolean                                        8.6964+-0.4684            8.4384+-0.0889          might be 1.0306x faster

   mul-boolean-double                                 3.6336+-0.0721     ?      3.6897+-0.1839        ? might be 1.0155x slower

   mul-boolean                                        2.8127+-0.0725            2.7802+-0.0611          might be 1.0117x faster

   neg-boolean                                        3.0795+-0.0420     ?      3.1750+-0.1171        ? might be 1.0310x slower

   negative-zero-divide                               0.3247+-0.0382            0.3243+-0.0304        

   negative-zero-modulo                               0.3616+-0.1617            0.2866+-0.0117          might be 1.2615x faster

   negative-zero-negate                               0.3037+-0.0235            0.2940+-0.0444          might be 1.0328x faster

   nested-function-parsing                           33.4737+-0.4162           33.1794+-0.5459        

   new-array-buffer-dead                              2.7588+-0.0951            2.6984+-0.0742          might be 1.0224x faster

   new-array-buffer-push                              5.5800+-0.3222     ?      5.9913+-0.4773        ? might be 1.0737x slower

   new-array-dead                                    10.1062+-0.5379            9.8837+-0.6697          might be 1.0225x faster

   new-array-push                                     3.5486+-0.1768     ?      3.6952+-0.3021        ? might be 1.0413x slower

   no-inline-constructor                             96.0861+-2.3181     ?    101.0527+-5.0416        ? might be 1.0517x slower

   number-test                                        2.8767+-0.1351     ?      2.9318+-0.1498        ? might be 1.0192x slower

   object-closure-call                                4.8381+-0.0924     ?      5.0502+-0.2476        ? might be 1.0438x slower

   object-test                                        2.8946+-0.1125            2.8885+-0.0972        

   obvious-sink-pathology-taken                     108.2443+-1.8968     ?    109.0769+-2.3924        ?

   obvious-sink-pathology                           105.2601+-2.6540     ?    106.7945+-2.3189        ? might be 1.0146x slower

   obviously-elidable-new-object                     29.0853+-0.9474           28.0793+-1.6868          might be 1.0358x faster

   plus-boolean-arith                                 2.3867+-0.0238     ?      2.4349+-0.2101        ? might be 1.0202x slower

   plus-boolean-double                                3.3150+-0.5270     ?      3.3153+-0.4388        ?

   plus-boolean                                       2.6865+-0.3043            2.6433+-0.1416          might be 1.0163x faster

   poly-chain-access-different-prototypes-simple   

                                                      2.7579+-0.0734            2.7311+-0.0440        

   poly-chain-access-different-prototypes             2.6934+-0.1833            2.5474+-0.0483          might be 1.0573x faster

   poly-chain-access-simpler                          2.7611+-0.1065            2.7164+-0.0683          might be 1.0165x faster

   poly-chain-access                                  2.5560+-0.0736     ?      2.6841+-0.2057        ? might be 1.0501x slower

   poly-stricteq                                     49.9447+-2.3295     ?     50.9228+-2.1288        ? might be 1.0196x slower

   polymorphic-array-call                             1.3330+-0.2299            1.1597+-0.1140          might be 1.1495x faster

   polymorphic-get-by-id                              3.0607+-0.5783            2.8054+-0.0428          might be 1.0910x faster

   polymorphic-put-by-id                             25.2950+-1.9675     ?     25.3914+-1.0398        ?

   polymorphic-structure                             13.3582+-0.0774     ?     13.4792+-0.7486        ?

   polyvariant-monomorphic-get-by-id                  7.2417+-0.6198            6.3695+-0.3046          might be 1.1369x faster

   proto-getter-access                                9.2262+-0.1738     ?      9.3690+-0.2347        ? might be 1.0155x slower

   put-by-id-replace-and-transition                   7.9064+-0.2603     ?      8.1257+-1.5109        ? might be 1.0277x slower

   put-by-id-slightly-polymorphic                     2.5765+-0.0566     ?      2.6063+-0.0328        ? might be 1.0116x slower

   put-by-id                                         10.8564+-0.8895     ?     11.0350+-1.4826        ? might be 1.0165x slower

   put-by-val-direct                                  0.4960+-0.0188            0.4794+-0.0273          might be 1.0346x faster

   put-by-val-large-index-blank-indexing-type   

                                                      5.3332+-0.1801     ?      5.5276+-0.5819        ? might be 1.0364x slower

   put-by-val-machine-int                             2.4430+-0.3109            2.3938+-0.1683          might be 1.0206x faster

   rare-osr-exit-on-local                            14.5754+-0.1570     ?     14.7751+-0.2857        ? might be 1.0137x slower

   register-pressure-from-osr                        17.9425+-1.3491           17.2388+-0.3619          might be 1.0408x faster

   setter                                             5.7654+-0.3138     ?      5.9409+-0.6959        ? might be 1.0304x slower

   simple-activation-demo                            25.5822+-1.0465           24.4492+-0.3769          might be 1.0463x faster

   simple-getter-access                              12.2469+-0.2270     ?     12.4367+-0.6603        ? might be 1.0155x slower

   simple-poly-call-nested                            9.1729+-0.4342            8.7048+-0.5874          might be 1.0538x faster

   simple-poly-call                                   1.2172+-0.0516     ?      1.2383+-0.0791        ? might be 1.0173x slower

   sin-boolean                                       19.2640+-2.2581     ?     19.5773+-1.0929        ? might be 1.0163x slower

   singleton-scope                                   64.7191+-2.5280           64.3277+-2.3284        

   sinkable-new-object-dag                           59.3475+-1.4328           59.3381+-3.5678        

   sinkable-new-object-taken                         46.4440+-1.2259           45.6636+-1.9789          might be 1.0171x faster

   sinkable-new-object                               30.8000+-0.6025     ?     31.2879+-1.5587        ? might be 1.0158x slower

   slow-array-profile-convergence                     2.5523+-0.0920     ?      2.7250+-0.2071        ? might be 1.0677x slower

   slow-convergence                                   2.4540+-0.1392            2.3775+-0.0919          might be 1.0322x faster

   sorting-benchmark                                 19.9351+-0.2945     ?     20.1936+-0.6075        ? might be 1.0130x slower

   sparse-conditional                                 1.0732+-0.0236            1.0630+-0.0237        

   splice-to-remove                                  14.9857+-0.8762           14.2835+-0.4009          might be 1.0492x faster

   string-char-code-at                               15.5874+-1.6960           15.0841+-0.3360          might be 1.0334x faster

   string-concat-object                               2.0522+-0.0734            2.0415+-0.0671        

   string-concat-pair-object                          2.1482+-0.1470     ?      2.1695+-0.2370        ?

   string-concat-pair-simple                          9.8400+-0.6300            9.4590+-0.5268          might be 1.0403x faster

   string-concat-simple                               9.7713+-0.7697            9.6748+-0.3354        

   string-cons-repeat                                 7.4106+-0.8353            7.0088+-0.3639          might be 1.0573x faster

   string-cons-tower                                  6.7628+-0.2068     ?      6.8241+-0.5052        ?

   string-equality                                   16.0970+-0.2158           15.8285+-0.4133          might be 1.0170x faster

   string-get-by-val-big-char                         6.6118+-0.2895            6.6075+-0.2083        

   string-get-by-val-out-of-bounds-insane             3.9981+-0.1946            3.9610+-0.2683        

   string-get-by-val-out-of-bounds                    4.1211+-0.1380     ?      4.1410+-0.0970        ?

   string-get-by-val                                  2.9617+-0.4066            2.7778+-0.0485          might be 1.0662x faster

   string-hash                                        1.8992+-0.0726            1.8407+-0.0449          might be 1.0318x faster

   string-long-ident-equality                        13.5400+-0.5006           13.2640+-0.1854          might be 1.0208x faster

   string-out-of-bounds                              11.0115+-0.6230           10.8793+-0.3301          might be 1.0121x faster

   string-repeat-arith                               27.7100+-0.8342     ?     27.8004+-0.9779        ?

   string-sub                                        57.6659+-1.3248           57.4607+-3.0040        

   string-test                                        2.8607+-0.2511            2.8349+-0.3307        

   string-var-equality                               28.7307+-0.6587     ?     28.9283+-2.0548        ?

   structure-hoist-over-transitions                   2.5308+-0.3787            2.3550+-0.1144          might be 1.0746x faster

   substring-concat-weird                            34.7950+-1.9028     ?     35.1104+-1.4638        ?

   substring-concat                                  36.8240+-1.7533     ?     37.3585+-2.4048        ? might be 1.0145x slower

   substring                                         43.4368+-1.5777           42.6465+-2.1750          might be 1.0185x faster

   switch-char-constant                               2.6923+-0.0793     ?      2.7522+-0.2170        ? might be 1.0222x slower

   switch-char                                        5.8794+-0.8110     ?      6.1860+-0.5772        ? might be 1.0522x slower

   switch-constant                                    8.3120+-1.8192            7.6528+-1.3334          might be 1.0861x faster

   switch-string-basic-big-var                       13.1865+-0.6113           13.1327+-0.4918        

   switch-string-basic-big                           13.1063+-0.8972     ?     13.4681+-1.2100        ? might be 1.0276x slower

   switch-string-basic-var                           12.5857+-0.1542     ?     13.3750+-1.5991        ? might be 1.0627x slower

   switch-string-basic                               12.2845+-0.9972           12.2083+-0.8656        

   switch-string-big-length-tower-var                19.0946+-0.5982           18.8591+-0.8912          might be 1.0125x faster

   switch-string-length-tower-var                    13.1603+-0.4897           13.1156+-0.5273        

   switch-string-length-tower                        11.9500+-0.5492           11.5292+-0.4682          might be 1.0365x faster

   switch-string-short                               11.4360+-0.2374     ?     11.6886+-0.2499        ? might be 1.0221x slower

   switch                                            11.2175+-0.7249     ?     11.6713+-0.8491        ? might be 1.0404x slower

   tear-off-arguments-simple                          3.0621+-0.1749     ?      3.0950+-0.1255        ? might be 1.0107x slower

   tear-off-arguments                                 4.0537+-0.1320     ?      4.0640+-0.2690        ?

   temporal-structure                                12.8728+-1.0210           12.4593+-0.2351          might be 1.0332x faster

   to-int32-boolean                                  13.2303+-0.4304           13.0375+-0.2702          might be 1.0148x faster

   try-catch-get-by-val-cloned-arguments             14.0837+-1.2924           12.9720+-0.8019          might be 1.0857x faster

   try-catch-get-by-val-direct-arguments              5.6621+-0.1302     ?      5.9954+-0.6771        ? might be 1.0589x slower

   try-catch-get-by-val-scoped-arguments              6.8892+-0.3583     ?      7.0235+-0.5856        ? might be 1.0195x slower

   undefined-property-access                        221.7123+-4.4892     ?    224.6543+-6.6061        ? might be 1.0133x slower

   undefined-test                                     2.9931+-0.1423            2.8862+-0.0326          might be 1.0370x faster

   unprofiled-licm                                   14.4461+-0.7887     ?     14.4980+-0.5982        ?

   varargs-call                                      14.2791+-0.1581           13.9928+-0.3318          might be 1.0205x faster

   varargs-construct-inline                          17.1877+-0.3266     ?     18.6308+-1.4743        ? might be 1.0840x slower

   varargs-construct                                 30.2887+-1.6360           30.1033+-1.5078        

   varargs-inline                                     8.7581+-0.9182            8.5734+-0.3605          might be 1.0216x faster

   varargs-strict-mode                                9.4986+-1.0589     ?      9.6034+-0.9567        ? might be 1.0110x slower

   varargs                                            9.1910+-0.0851            9.1539+-0.1327        

   weird-inlining-const-prop                          2.1704+-0.3752            2.1100+-0.1346          might be 1.0286x faster



   &lt;geometric&gt;                                        7.7486+-0.0189     ?      7.7488+-0.0330        ? might be 1.0000x slower



                                                          Conf#1                    Conf#2                                      

AsmBench:

   bigfib.cpp                                       457.7183+-2.2443     ?    462.6533+-3.7366        ? might be 1.0108x slower

   cray.c                                           404.8771+-3.7259     ?    406.6829+-5.3605        ?

   dry.c                                            445.7400+-18.9474         431.0726+-16.3180         might be 1.0340x faster

   FloatMM.c                                        719.1459+-16.9821         710.0690+-8.3355          might be 1.0128x faster

   gcc-loops.cpp                                   3649.7099+-46.4415        3608.2496+-31.4029         might be 1.0115x faster

   n-body.c                                         852.5490+-10.7679         851.9524+-6.0051        

   Quicksort.c                                      407.8164+-7.5912     ?    412.7252+-7.8622        ? might be 1.0120x slower

   stepanov_container.cpp                          3762.6456+-41.7441        3729.1539+-22.3776       

   Towers.c                                         243.8719+-2.6687     ?    246.5487+-5.7779        ? might be 1.0110x slower



   &lt;geometric&gt;                                      743.0915+-3.1920          740.7067+-3.8797          might be 1.0032x faster



                                                          Conf#1                    Conf#2                                      

CompressionBench:

   huffman                                          320.0449+-4.4448     ?    322.8716+-5.5127        ?

   arithmetic-simple                                353.8173+-4.7846          349.5854+-2.0231          might be 1.0121x faster

   arithmetic-precise                               273.1763+-3.3772          270.0466+-2.5023          might be 1.0116x faster

   arithmetic-complex-precise                       271.0485+-2.6181          270.5658+-1.4383        

   arithmetic-precise-order-0                       378.9841+-10.3023    ?    384.0884+-13.1022       ? might be 1.0135x slower

   arithmetic-precise-order-1                       311.5114+-2.3965          308.6568+-3.8442        

   arithmetic-precise-order-2                       350.6539+-4.4347          346.0896+-2.2586          might be 1.0132x faster

   arithmetic-simple-order-1                        344.7344+-5.9207     ?    345.8405+-7.9524        ?

   arithmetic-simple-order-2                        394.4603+-3.9589     ?    396.3191+-5.6523        ?

   lz-string                                        347.5848+-8.3916     ?    349.2193+-11.8821       ?



   &lt;geometric&gt;                                      332.2468+-1.2255          331.8051+-1.2837          might be 1.0013x faster



                                                          Conf#1                    Conf#2                                      

Geomean of preferred means:

   &lt;scaled-result&gt;                                   57.7180+-0.2085           57.6611+-0.2612          might be 1.0010x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085790</commentid>
    <comment_count>3</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-04-15 18:45:17 -0700</bug_when>
    <thetext>I forgot to remove the destroy() functions in JSCallee/JSFunction/JSBoundFunction (should be dead code now). I am preparing an updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085794</commentid>
    <comment_count>4</comment_count>
      <attachid>250889</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-04-15 19:05:36 -0700</bug_when>
    <thetext>Created attachment 250889
Fixed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085795</commentid>
    <comment_count>5</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-04-15 19:07:02 -0700</bug_when>
    <thetext>The bench results should still be valid for the new patch, but I will rerun them tomorrow to double check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085813</commentid>
    <comment_count>6</comment_count>
      <attachid>250889</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-15 20:25:56 -0700</bug_when>
    <thetext>Comment on attachment 250889
Fixed patch

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

LGTM other than maybe using one too many GPRs.  When you&apos;re ready to request review and have the reviewed patch committed, please set the review bit to &quot;?&quot; and the commit-queue bit to &quot;?&quot; as well.  Then whoever reviews this can set both bits to &quot;+&quot; which will trigger the automatic commit bot.

Our usual procedure for posting patches is:

- Create a bug and upload a patch as you have done.
- Post performance results as you have done, if applicable (some patches can safely be presumed to be perf-neutral).
- Mark the patch r?/cq?.
- Add appropriate reviewers to the CC on the bug.  That would be me, ggaren@apple.com, and msaboff@apple.com.  Maybe others.
- Send e-mail to the reviewers to poke them.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:3490
&gt; +        GPRTemporary rareData(this);

See below...

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:3561
&gt; +        GPRTemporary rareData(this);

Note that this increases the GPR usage of this code snippet, which then evicts other things from registers in case of pressure.  It might be nice to avoid using a separate GPR for this...

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:3579
&gt; -        
&gt; -        m_jit.loadPtr(JITCompiler::Address(calleeGPR, JSFunction::offsetOfAllocationProfile() + ObjectAllocationProfile::offsetOfAllocator()), allocatorGPR);
&gt; -        m_jit.loadPtr(JITCompiler::Address(calleeGPR, JSFunction::offsetOfAllocationProfile() + ObjectAllocationProfile::offsetOfStructure()), structureGPR);
&gt; -        slowPath.append(m_jit.branchTestPtr(MacroAssembler::Zero, allocatorGPR));
&gt; +
&gt; +        m_jit.loadPtr(JITCompiler::Address(calleeGPR, JSFunction::offsetOfRareData()), rareDataGPR);
&gt; +        slowPath.append(m_jit.branchTestPtr(MacroAssembler::Zero, rareDataGPR));
&gt; +        m_jit.loadPtr(JITCompiler::Address(rareDataGPR, FunctionRareData::offsetOfAllocationProfile() + ObjectAllocationProfile::offsetOfAllocator()), allocatorGPR);
&gt; +        m_jit.loadPtr(JITCompiler::Address(rareDataGPR, FunctionRareData::offsetOfAllocationProfile() + ObjectAllocationProfile::offsetOfStructure()), structureGPR);

Is it clear that you need a separate GPR for rareDataGPR?  Could you instead use structureGPR?  I believe that this code would work fine:

        m_jit.loadPtr(JITCompiler::Address(calleeGPR, JSFunction::offsetOfRareData()), structureGPR);
        slowPath.append(m_jit.branchTestPtr(MacroAssembler::Zero, structureGPR));
        m_jit.loadPtr(JITCompiler::Address(structureGPR, FunctionRareData::offsetOfAllocationProfile() + ObjectAllocationProfile::offsetOfAllocator()), allocatorGPR);
        m_jit.loadPtr(JITCompiler::Address(structureGPR, FunctionRareData::offsetOfAllocationProfile() + ObjectAllocationProfile::offsetOfStructure()), structureGPR);

This works because we only need the rareData until we load the structure, and it&apos;s OK to issue a load instruction that uses/defs the same register.  Such a sequence would be strictly better from a register pressure perspective.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085957</commentid>
    <comment_count>7</comment_count>
      <attachid>250927</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-04-16 10:24:49 -0700</bug_when>
    <thetext>Created attachment 250927
Remove additional GPR</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085959</commentid>
    <comment_count>8</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-04-16 10:25:39 -0700</bug_when>
    <thetext>Here is the new benchmark w/ the additional GPR removed.

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on Basiles-MacBook-Pro (MacBookPro11,3).

VMs tested:
&quot;Conf#1&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r182874)
&quot;Conf#2&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r182874)

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.

                                                          Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                            4.2751+-0.1618     ?      4.3051+-0.1287        ?
   3d-morph                                           5.2443+-0.1484     ?      5.4814+-0.6629        ? might be 1.0452x slower
   3d-raytrace                                        5.6020+-0.3578            5.5575+-0.7740        
   access-binary-trees                                1.9568+-0.1172     ?      2.0829+-0.1869        ? might be 1.0644x slower
   access-fannkuch                                    5.2535+-0.1691            5.1101+-0.0772          might be 1.0281x faster
   access-nbody                                       2.7100+-0.4389            2.5473+-0.0688          might be 1.0639x faster
   access-nsieve                                      3.2419+-0.0328     ?      3.3524+-0.1971        ? might be 1.0341x slower
   bitops-3bit-bits-in-byte                           1.5218+-0.2325            1.4383+-0.0574          might be 1.0580x faster
   bitops-bits-in-byte                                3.2115+-0.1585            3.1365+-0.1147          might be 1.0239x faster
   bitops-bitwise-and                                 2.0138+-0.0356     ?      2.0474+-0.0820        ? might be 1.0167x slower
   bitops-nsieve-bits                                 3.3853+-0.1453            3.3663+-0.1296        
   controlflow-recursive                              2.0552+-0.2885            1.9727+-0.1284          might be 1.0418x faster
   crypto-aes                                         3.6840+-0.1291     ?      3.7177+-0.3822        ?
   crypto-md5                                         2.1862+-0.0626     ?      2.2449+-0.0968        ? might be 1.0269x slower
   crypto-sha1                                        2.7869+-0.7359            2.3460+-0.0608          might be 1.1879x faster
   date-format-tofte                                  6.9065+-0.2500     ?      6.9370+-0.3947        ?
   date-format-xparb                                  4.8311+-0.1972     ?      5.1482+-0.7599        ? might be 1.0656x slower
   math-cordic                                        2.9469+-0.1004            2.8778+-0.1447          might be 1.0240x faster
   math-partial-sums                                  4.4467+-0.0884     ?      4.5785+-0.6243        ? might be 1.0296x slower
   math-spectral-norm                                 1.8158+-0.0585            1.7428+-0.0627          might be 1.0419x faster
   regexp-dna                                         6.4248+-0.4988     ?      6.5942+-0.2221        ? might be 1.0264x slower
   string-base64                                      4.2583+-0.4344            4.2490+-0.2877        
   string-fasta                                       5.8477+-0.0182            5.7767+-0.0836          might be 1.0123x faster
   string-tagcloud                                    8.9775+-0.7981     ?      9.2810+-0.5547        ? might be 1.0338x slower
   string-unpack-code                                20.1492+-1.2473           20.1485+-2.1006        
   string-validate-input                              4.3938+-0.1725     ?      4.4193+-0.1910        ?

   &lt;arithmetic&gt;                                       4.6203+-0.0876     ?      4.6331+-0.0990        ? might be 1.0028x slower

                                                          Conf#1                    Conf#2                                      
LongSpider:
   3d-cube                                          787.7651+-9.8427     ?    796.0437+-20.7486       ? might be 1.0105x slower
   3d-morph                                        1540.5809+-25.6819    ?   1558.0421+-41.3556       ? might be 1.0113x slower
   3d-raytrace                                      667.0268+-7.1077     ?    667.0935+-3.9206        ?
   access-binary-trees                              849.0704+-15.3632         838.3417+-5.5639          might be 1.0128x faster
   access-fannkuch                                  269.5464+-3.1122          268.2630+-6.3289        
   access-nbody                                     561.4915+-9.6159          552.8761+-2.9952          might be 1.0156x faster
   access-nsieve                                    626.1717+-2.9813     ?    632.7624+-12.9957       ? might be 1.0105x slower
   bitops-3bit-bits-in-byte                          42.1627+-1.7482           41.2813+-0.9975          might be 1.0214x faster
   bitops-bits-in-byte                               83.7639+-4.4055     ?     84.8185+-2.5604        ? might be 1.0126x slower
   bitops-nsieve-bits                               666.4224+-6.5566     ?    673.1970+-20.9553       ? might be 1.0102x slower
   controlflow-recursive                            460.3107+-6.1788     ?    464.1873+-4.3324        ?
   crypto-aes                                       542.3236+-3.5903     ?    552.6162+-11.5164       ? might be 1.0190x slower
   crypto-md5                                       536.6162+-14.5443         532.3539+-6.7520        
   crypto-sha1                                      569.9403+-3.3739     ?    571.6066+-4.7282        ?
   date-format-tofte                                526.3601+-9.9023          512.6865+-5.3605          might be 1.0267x faster
   date-format-xparb                                639.4729+-5.2480     ?    646.0918+-14.8343       ? might be 1.0104x slower
   math-cordic                                      508.6027+-4.6132     ?    510.7360+-6.0197        ?
   math-partial-sums                                429.7371+-5.4419     ?    431.0619+-8.8535        ?
   math-spectral-norm                               566.4093+-6.4445          565.0580+-6.0389        
   string-base64                                    311.8376+-2.2076     ?    312.4631+-4.2592        ?
   string-fasta                                     386.3601+-5.6181     ?    387.3623+-5.0983        ?
   string-tagcloud                                  199.1064+-1.8685     ?    200.0346+-1.6738        ?

   &lt;geometric&gt;                                      435.9213+-2.3074     ?    436.3434+-2.0647        ? might be 1.0010x slower

                                                          Conf#1                    Conf#2                                      
V8Spider:
   crypto                                            50.3978+-2.3073     ?     51.6629+-0.9042        ? might be 1.0251x slower
   deltablue                                         82.4384+-15.1605          80.5931+-3.6272          might be 1.0229x faster
   earley-boyer                                      37.9593+-1.3837     ?     39.1320+-2.3473        ? might be 1.0309x slower
   raytrace                                          30.1717+-1.3167           29.9217+-1.2822        
   regexp                                            59.0181+-3.2129           57.6798+-2.2841          might be 1.0232x faster
   richards                                          72.4204+-1.9720           71.4766+-3.2119          might be 1.0132x faster
   splay                                             34.0970+-1.6166     ?     34.4194+-2.0485        ?

   &lt;geometric&gt;                                       49.0755+-2.0930     ?     49.1080+-1.0401        ? might be 1.0007x slower

                                                          Conf#1                    Conf#2                                      
Octane:
   encrypt                                           0.20550+-0.00385          0.20005+-0.00199         might be 1.0272x faster
   decrypt                                           3.49846+-0.12777    ?     3.54832+-0.09333       ? might be 1.0143x slower
   deltablue                                x2       0.16207+-0.00250    ?     0.16282+-0.00317       ?
   earley                                            0.48211+-0.00339          0.47404+-0.01014         might be 1.0170x faster
   boyer                                             5.46286+-0.04075    ?     5.59242+-0.13028       ? might be 1.0237x slower
   navier-stokes                            x2       5.15667+-0.06815          5.10363+-0.02446         might be 1.0104x faster
   raytrace                                 x2       1.08411+-0.05752          1.06021+-0.07440         might be 1.0225x faster
   richards                                 x2       0.09403+-0.00267    ?     0.09456+-0.00252       ?
   splay                                    x2       0.33789+-0.00379          0.33675+-0.00250       
   regexp                                   x2      28.68248+-0.38623    ?    29.60008+-0.70429       ? might be 1.0320x slower
   pdfjs                                    x2      39.56257+-0.38752    ^    38.81180+-0.29667       ^ definitely 1.0193x faster
   mandreel                                 x2      46.02229+-0.61381    ?    46.29461+-0.79539       ?
   gbemu                                    x2      32.32424+-2.22576         31.91316+-2.05484         might be 1.0129x faster
   closure                                           0.49442+-0.00877          0.49034+-0.00333       
   jquery                                            6.08931+-0.06100    ?     6.09142+-0.03743       ?
   box2d                                    x2      10.36411+-0.18492         10.36032+-0.06904       
   zlib                                     x2     362.89091+-20.03586       362.28285+-20.28446      
   typescript                               x2     666.81181+-20.02114       659.87366+-15.16640        might be 1.0105x faster

   &lt;geometric&gt;                                       5.80919+-0.06247          5.79342+-0.03336         might be 1.0027x faster

                                                          Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                          286.500+-6.354      ?     292.718+-19.973        ? might be 1.0217x slower
   audio-beat-detection                              101.844+-1.012      !     103.840+-0.725         ! definitely 1.0196x slower
   audio-dft                                         162.694+-6.286            159.566+-5.307           might be 1.0196x faster
   audio-fft                                          79.286+-3.654      ?      80.434+-0.818         ? might be 1.0145x slower
   audio-oscillator                                  182.264+-6.132            180.000+-0.414           might be 1.0126x faster
   imaging-darkroom                                   96.516+-1.449      ?      99.429+-2.630         ? might be 1.0302x slower
   imaging-desaturate                                 56.418+-2.158      ?      57.375+-1.970         ? might be 1.0170x slower
   imaging-gaussian-blur                              88.543+-0.824      ?      89.199+-2.167         ?
   json-parse-financial                               37.575+-1.062             36.854+-0.482           might be 1.0196x faster
   json-stringify-tinderbox                           51.246+-1.471             50.792+-2.502         
   stanford-crypto-aes                                56.442+-2.649      ?      56.570+-2.526         ?
   stanford-crypto-ccm                                48.014+-5.335             42.459+-1.408           might be 1.1308x faster
   stanford-crypto-pbkdf2                            151.536+-2.661      ?     152.297+-3.602         ?
   stanford-crypto-sha256-iterative                   50.071+-1.195             49.422+-1.539           might be 1.0131x faster

   &lt;arithmetic&gt;                                      103.496+-0.706      ?     103.640+-1.910         ? might be 1.0014x slower

                                                          Conf#1                    Conf#2                                      
JSRegress:
   abs-boolean                                        2.4253+-0.0547            2.4064+-0.0631        
   adapt-to-double-divide                            16.4655+-0.5180     ?     16.9612+-1.0227        ? might be 1.0301x slower
   aliased-arguments-getbyval                         1.0874+-0.0771            1.0572+-0.0651          might be 1.0286x faster
   allocate-big-object                                2.2400+-0.3349     ?      2.2699+-0.2892        ? might be 1.0133x slower
   arguments-named-and-reflective                    10.9965+-0.1880           10.6622+-0.4047          might be 1.0314x faster
   arguments-out-of-bounds                           10.7717+-0.9990           10.3738+-0.2059          might be 1.0384x faster
   arguments-strict-mode                             10.0313+-0.4026     ?     10.3482+-0.7807        ? might be 1.0316x slower
   arguments                                          9.1912+-0.7071     ?      9.5975+-0.8339        ? might be 1.0442x slower
   arity-mismatch-inlining                            0.7798+-0.0498     ?      0.8905+-0.2364        ? might be 1.1419x slower
   array-access-polymorphic-structure                 5.9981+-0.2467     ?      6.2668+-0.4615        ? might be 1.0448x slower
   array-nonarray-polymorhpic-access                 28.4446+-0.7340     ?     28.9095+-1.6154        ? might be 1.0163x slower
   array-prototype-every                             78.7761+-1.2422     ?     79.6152+-3.0374        ? might be 1.0107x slower
   array-prototype-forEach                           79.7049+-1.1714     ?     86.6035+-19.8664       ? might be 1.0866x slower
   array-prototype-map                               88.1125+-2.0838     ?     88.1470+-2.0963        ?
   array-prototype-some                              79.1877+-1.5714     ?     79.2244+-1.2457        ?
   array-splice-contiguous                           38.5819+-0.9069     !     41.3791+-0.9371        ! definitely 1.0725x slower
   array-with-double-add                              3.4309+-0.0579     ?      3.6272+-0.4456        ? might be 1.0572x slower
   array-with-double-increment                        3.4398+-1.0136            3.1187+-0.2048          might be 1.1030x faster
   array-with-double-mul-add                          4.2877+-0.1775     ?      4.4434+-0.5505        ? might be 1.0363x slower
   array-with-double-sum                              3.4552+-0.5697            3.1757+-0.0660          might be 1.0880x faster
   array-with-int32-add-sub                           5.8816+-0.0707     ?      5.9617+-0.1507        ? might be 1.0136x slower
   array-with-int32-or-double-sum                     3.2307+-0.0217     ?      3.2357+-0.0943        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     27.1905+-0.4098     ?     28.3344+-1.4013        ? might be 1.0421x slower
   ArrayBuffer-DataView-alloc-long-lived             12.8779+-0.5630     ?     13.8155+-1.7907        ? might be 1.0728x slower
   ArrayBuffer-Int32Array-byteOffset                  3.6069+-0.1189            3.5895+-0.0773        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     28.3209+-1.2669           27.7727+-0.8127          might be 1.0197x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     21.3450+-1.9584     ?     22.3772+-2.1304        ? might be 1.0484x slower
   ArrayBuffer-Int8Array-alloc-long-lived            13.1410+-1.5683           12.2904+-0.8210          might be 1.0692x faster
   ArrayBuffer-Int8Array-alloc                       10.5734+-0.5631           10.3741+-0.5687          might be 1.0192x faster
   asmjs_bool_bug                                     6.7502+-0.3549     ?      6.7819+-0.6348        ?
   assign-custom-setter-polymorphic                   2.5687+-0.2027            2.5365+-0.0288          might be 1.0127x faster
   assign-custom-setter                               3.4005+-0.0532     ?      3.6321+-0.2512        ? might be 1.0681x slower
   basic-set                                          8.1024+-0.2638            7.9674+-0.0671          might be 1.0169x faster
   big-int-mul                                        3.4617+-0.0753     ?      3.5135+-0.0706        ? might be 1.0150x slower
   boolean-test                                       2.8417+-0.0589     ?      2.8741+-0.1223        ? might be 1.0114x slower
   branch-fold                                        3.5061+-0.0353     ?      3.5583+-0.0784        ? might be 1.0149x slower
   by-val-generic                                     7.6001+-0.2564     ?      7.9913+-1.5591        ? might be 1.0515x slower
   call-spread-apply                                 27.4773+-1.1754     ?     27.4915+-0.8092        ?
   call-spread-call                                  22.4423+-0.3723           22.1294+-0.8403          might be 1.0141x faster
   captured-assignments                               0.3779+-0.0148     ?      0.4134+-0.0678        ? might be 1.0939x slower
   cast-int-to-double                                 4.7893+-0.0422     ?      4.8827+-0.0964        ? might be 1.0195x slower
   cell-argument                                      6.3695+-0.4236            6.1362+-0.2429          might be 1.0380x faster
   cfg-simplify                                       2.8650+-0.1121            2.8528+-0.0732        
   chain-getter-access                                9.1663+-0.2283            9.0343+-0.0695          might be 1.0146x faster
   cmpeq-obj-to-obj-other                             9.5897+-1.2023     ?     10.7785+-1.0900        ? might be 1.1240x slower
   constant-test                                      4.5929+-0.0800     ?      4.6333+-0.2308        ?
   create-lots-of-functions                          20.1407+-0.9622           18.5049+-0.8428          might be 1.0884x faster
   DataView-custom-properties                        32.8149+-1.4559           32.5873+-0.6178        
   deconstructing-parameters-overridden-by-function   
                                                      0.3899+-0.0062     ?      0.4062+-0.0181        ? might be 1.0421x slower
   delay-tear-off-arguments-strictmode               12.0525+-0.2611     ?     12.8459+-0.6896        ? might be 1.0658x slower
   deltablue-varargs                                143.7742+-2.6878          143.3159+-1.7948        
   destructuring-arguments                           12.7889+-0.0834     ?     13.4400+-0.7770        ? might be 1.0509x slower
   destructuring-swap                                 4.8703+-0.4335            4.7046+-0.2682          might be 1.0352x faster
   direct-arguments-getbyval                          1.1826+-0.0781     ^      1.0310+-0.0553        ^ definitely 1.1470x faster
   div-boolean-double                                 5.3931+-0.1205     ?      5.4133+-0.0986        ?
   div-boolean                                        8.3207+-0.1673            8.2886+-0.1413        
   double-get-by-val-out-of-bounds                    4.3068+-0.1014            4.1623+-0.2769          might be 1.0347x faster
   double-pollution-getbyval                          8.8875+-0.2796            8.8141+-0.3121        
   double-pollution-putbyoffset                       3.7793+-0.1764     ?      3.8410+-0.0645        ? might be 1.0163x slower
   double-to-int32-typed-array-no-inline              2.0326+-0.0570     ?      2.2357+-0.4898        ? might be 1.1000x slower
   double-to-int32-typed-array                        1.7325+-0.0801     ?      1.7694+-0.0526        ? might be 1.0213x slower
   double-to-uint32-typed-array-no-inline             2.0872+-0.0800     ?      2.1844+-0.2554        ? might be 1.0466x slower
   double-to-uint32-typed-array                       1.7969+-0.0688            1.7878+-0.0763        
   elidable-new-object-dag                           35.8145+-2.3960           34.6637+-0.3052          might be 1.0332x faster
   elidable-new-object-roflcopter                    37.6876+-1.5823     ?     37.9375+-1.4487        ?
   elidable-new-object-then-call                     30.4771+-1.6195     ?     31.7274+-1.8811        ? might be 1.0410x slower
   elidable-new-object-tree                          37.5769+-2.4447           37.1602+-1.5025          might be 1.0112x faster
   empty-string-plus-int                              4.7122+-0.0974            4.6884+-0.0695        
   emscripten-cube2hash                              26.8267+-1.0050           26.2631+-1.2811          might be 1.0215x faster
   exit-length-on-plain-object                       14.0516+-2.3348           13.0482+-0.4074          might be 1.0769x faster
   external-arguments-getbyval                        1.1711+-0.1700            1.1231+-0.0502          might be 1.0428x faster
   external-arguments-putbyval                        2.1198+-0.0359            2.1015+-0.0763        
   fixed-typed-array-storage-var-index                1.1690+-0.0211     ?      1.2113+-0.0335        ? might be 1.0362x slower
   fixed-typed-array-storage                          0.8157+-0.0368            0.8071+-0.0211          might be 1.0107x faster
   Float32Array-matrix-mult                           3.8940+-0.1178            3.8417+-0.0935          might be 1.0136x faster
   Float32Array-to-Float64Array-set                  48.4830+-1.0277           48.1956+-0.7776        
   Float64Array-alloc-long-lived                     60.5223+-1.7589           58.9128+-1.7621          might be 1.0273x faster
   Float64Array-to-Int16Array-set                    60.3468+-1.8409           57.7170+-1.4610          might be 1.0456x faster
   fold-double-to-int                                13.2108+-1.3800           12.5582+-0.1574          might be 1.0520x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                      9.3741+-0.5859     ?     10.1509+-0.4207        ? might be 1.0829x slower
   fold-get-by-id-to-multi-get-by-offset              7.7845+-0.4339     ?      8.0470+-0.2838        ? might be 1.0337x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      7.2857+-1.4581     ?      7.4994+-0.6978        ? might be 1.0293x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.0432+-1.1428     ?      7.4090+-0.5497        ? might be 1.0519x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.0452+-0.6077     ?      7.3158+-0.6546        ? might be 1.0384x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.3656+-0.9825     ?      4.9283+-0.7889        ? might be 1.1289x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      7.9274+-0.4367     ?      8.1517+-0.9128        ? might be 1.0283x slower
   fold-put-by-id-to-multi-put-by-offset              8.1551+-0.5546            8.1152+-0.3387        
   fold-put-structure                                 3.7675+-0.2201     !      5.3345+-0.6416        ! definitely 1.4159x slower
   for-of-iterate-array-entries                       4.3303+-0.4416            4.1460+-0.0554          might be 1.0445x faster
   for-of-iterate-array-keys                          3.6171+-0.0804     ?      3.6784+-0.1246        ? might be 1.0170x slower
   for-of-iterate-array-values                        3.5393+-0.1232     ?      3.7362+-0.4044        ? might be 1.0556x slower
   fround                                            17.5203+-0.4389     ?     18.4511+-1.5430        ? might be 1.0531x slower
   ftl-library-inlining-dataview                     61.4627+-0.9979     ?     63.0803+-3.1148        ? might be 1.0263x slower
   ftl-library-inlining                             107.2616+-1.1114          106.5103+-1.1933        
   function-dot-apply                                 2.1187+-0.1115     ?      2.2769+-0.6803        ? might be 1.0747x slower
   function-test                                      3.0291+-0.0754            2.9628+-0.0366          might be 1.0224x faster
   function-with-eval                                88.9831+-3.5254           87.3103+-1.0255          might be 1.0192x faster
   gcse-poly-get-less-obvious                        14.5973+-0.4711           14.4822+-0.2445        
   gcse-poly-get                                     16.9070+-1.0756           16.5629+-1.3974          might be 1.0208x faster
   gcse                                               3.8595+-0.1215            3.8480+-0.1194        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.6497+-0.2264            2.5673+-0.0279          might be 1.0321x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.8747+-0.2094     ?      5.9242+-0.1731        ?
   get-by-id-chain-from-try-block                     6.5125+-0.1535     ?      6.5714+-0.2831        ?
   get-by-id-check-structure-elimination              4.3761+-0.0365            4.3717+-0.0304        
   get-by-id-proto-or-self                           14.5732+-0.7455           14.3267+-0.8293          might be 1.0172x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8561+-0.0442     ?      3.0031+-0.1819        ? might be 1.0514x slower
   get-by-id-self-or-proto                           14.6013+-0.5585     ?     14.7390+-0.6828        ?
   get-by-val-out-of-bounds                           3.9436+-0.0926     ?      4.0101+-0.3166        ? might be 1.0169x slower
   get_callee_monomorphic                             3.2609+-0.1400     ^      3.0098+-0.0520        ^ definitely 1.0834x faster
   get_callee_polymorphic                             3.1102+-0.1256            3.0718+-0.1813          might be 1.0125x faster
   getter-no-activation                               4.8482+-0.1916     ?      4.8616+-0.1485        ?
   getter-richards                                  110.1828+-4.0645           98.7890+-14.0624         might be 1.1153x faster
   getter                                             5.5140+-0.7201            5.4429+-0.3584          might be 1.0131x faster
   global-var-const-infer-fire-from-opt               0.8455+-0.1016     ?      0.9181+-0.1257        ? might be 1.0858x slower
   global-var-const-infer                             0.9364+-0.1566            0.8521+-0.0866          might be 1.0990x faster
   HashMap-put-get-iterate-keys                      24.4522+-0.8747           24.3848+-0.8135        
   HashMap-put-get-iterate                           24.0252+-0.9695     ?     24.1531+-1.1510        ?
   HashMap-string-put-get-iterate                    24.9566+-0.8440           23.6414+-1.3269          might be 1.0556x faster
   hoist-make-rope                                    7.9901+-0.8597     ?      8.0160+-0.6029        ?
   hoist-poly-check-structure-effectful-loop   
                                                      4.1823+-0.2727            4.1097+-0.0753          might be 1.0177x faster
   hoist-poly-check-structure                         3.2598+-0.0301     ?      3.5929+-0.7958        ? might be 1.1022x slower
   imul-double-only                                   6.7579+-0.3943     ?      7.1380+-0.8365        ? might be 1.0562x slower
   imul-int-only                                      8.5066+-0.1634     ?      8.5378+-0.7963        ?
   imul-mixed                                         6.5256+-0.2864            6.4133+-0.5065          might be 1.0175x faster
   in-four-cases                                     15.8869+-1.1673           15.6946+-0.7207          might be 1.0123x faster
   in-one-case-false                                  8.8659+-0.2761            8.3712+-0.5404          might be 1.0591x faster
   in-one-case-true                                   8.4403+-0.3225            8.3698+-0.5555        
   in-two-cases                                       8.7140+-0.4700     ?      8.7336+-0.4535        ?
   indexed-properties-in-objects                      2.7649+-0.0333     ?      2.7874+-0.0627        ?
   infer-closure-const-then-mov-no-inline             3.2762+-0.0476            3.2291+-0.0951          might be 1.0146x faster
   infer-closure-const-then-mov                      17.3016+-0.4253           17.0127+-0.6232          might be 1.0170x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.6837+-0.0673     ?     11.8806+-0.2863        ? might be 1.0169x slower
   infer-closure-const-then-put-to-scope             23.4230+-0.4832     ?     23.6299+-0.5041        ?
   infer-closure-const-then-reenter-no-inline   
                                                     51.0477+-0.7995     ?     52.0824+-1.4846        ? might be 1.0203x slower
   infer-closure-const-then-reenter                  24.3826+-1.7489           24.0758+-0.4362          might be 1.0127x faster
   infer-constant-global-property                    30.4815+-0.6021     ?     30.7343+-1.0456        ?
   infer-constant-property                            2.6450+-0.1969            2.5971+-0.0372          might be 1.0185x faster
   infer-one-time-closure-ten-vars                    8.6121+-0.6016            8.4577+-0.5584          might be 1.0183x faster
   infer-one-time-closure-two-vars                    8.4733+-0.6850            8.3830+-0.5156          might be 1.0108x faster
   infer-one-time-closure                             7.7824+-0.3900     ?      7.9609+-0.3392        ? might be 1.0229x slower
   infer-one-time-deep-closure                       13.3413+-0.8299           12.7989+-0.4471          might be 1.0424x faster
   inline-arguments-access                            3.6248+-0.1464     ?      3.7311+-0.1492        ? might be 1.0293x slower
   inline-arguments-aliased-access                    3.7082+-0.2284            3.6862+-0.1573        
   inline-arguments-local-escape                      4.0652+-0.2474     ?      4.2109+-0.3666        ? might be 1.0358x slower
   inline-get-scoped-var                              4.7482+-0.1553            4.5643+-0.1577          might be 1.0403x faster
   inlined-put-by-id-transition                       9.9195+-1.0575            9.1507+-0.8503          might be 1.0840x faster
   int-or-other-abs-then-get-by-val                   4.8241+-0.1258            4.7879+-0.0637        
   int-or-other-abs-zero-then-get-by-val             16.4194+-0.5018     ?     16.9959+-0.8305        ? might be 1.0351x slower
   int-or-other-add-then-get-by-val                   4.0264+-0.0575     ?      4.1186+-0.1818        ? might be 1.0229x slower
   int-or-other-add                                   4.8098+-0.0548     ?      4.8825+-0.1813        ? might be 1.0151x slower
   int-or-other-div-then-get-by-val                   3.7918+-0.1329     ?      3.8630+-0.1024        ? might be 1.0188x slower
   int-or-other-max-then-get-by-val                   4.0244+-0.1692            4.0211+-0.0280        
   int-or-other-min-then-get-by-val                   4.1376+-0.0616     ?      4.2601+-0.3949        ? might be 1.0296x slower
   int-or-other-mod-then-get-by-val                   3.4956+-0.1144            3.4520+-0.1074          might be 1.0126x faster
   int-or-other-mul-then-get-by-val                   3.8354+-0.3167     ?      3.9328+-0.6195        ? might be 1.0254x slower
   int-or-other-neg-then-get-by-val                   4.4007+-0.1327            4.3429+-0.1066          might be 1.0133x faster
   int-or-other-neg-zero-then-get-by-val             16.7015+-0.6755     ?     18.4434+-3.9153        ? might be 1.1043x slower
   int-or-other-sub-then-get-by-val                   4.0168+-0.0798     ?      4.2439+-0.5590        ? might be 1.0565x slower
   int-or-other-sub                                   3.3860+-0.0763     ?      3.4215+-0.1906        ? might be 1.0105x slower
   int-overflow-local                                 4.1371+-0.0629            4.1101+-0.1410        
   Int16Array-alloc-long-lived                       44.0789+-1.2521           43.5767+-1.3807          might be 1.0115x faster
   Int16Array-bubble-sort-with-byteLength            17.7168+-0.6866           17.4313+-0.3045          might be 1.0164x faster
   Int16Array-bubble-sort                            18.2169+-0.6875     ?     18.2614+-1.4162        ?
   Int16Array-load-int-mul                            1.6570+-0.3431            1.4141+-0.0342          might be 1.1718x faster
   Int16Array-to-Int32Array-set                      47.6087+-2.5706     ^     43.3835+-0.9072        ^ definitely 1.0974x faster
   Int32Array-alloc-large                            13.7923+-1.5062           12.9419+-0.5629          might be 1.0657x faster
   Int32Array-alloc-long-lived                       49.1785+-1.4400     ?     49.2195+-1.2585        ?
   Int32Array-alloc                                   2.6153+-0.2890     ?      2.8630+-0.0858        ? might be 1.0947x slower
   Int32Array-Int8Array-view-alloc                    6.8905+-0.6552            6.5783+-0.6346          might be 1.0475x faster
   int52-spill                                        6.1755+-0.1635            6.0326+-0.2274          might be 1.0237x faster
   Int8Array-alloc-long-lived                        40.1750+-1.0926     ?     40.2930+-1.1234        ?
   Int8Array-load-with-byteLength                     3.3608+-0.0469     ?      3.9194+-0.6340        ? might be 1.1662x slower
   Int8Array-load                                     3.3743+-0.0724     ?      3.4520+-0.1531        ? might be 1.0230x slower
   integer-divide                                    10.8687+-0.5938           10.8147+-0.3224        
   integer-modulo                                     1.6705+-0.0410            1.6561+-0.0663        
   large-int-captured                                 4.9358+-0.5756     ?      5.1535+-0.7557        ? might be 1.0441x slower
   large-int-neg                                     14.6199+-0.5272     ?     14.9428+-0.4370        ? might be 1.0221x slower
   large-int                                         13.9997+-0.3879           13.9205+-0.3089        
   logical-not                                        4.2502+-0.1684            4.1999+-0.0585          might be 1.0120x faster
   lots-of-fields                                    10.2783+-0.6760            9.8437+-0.3954          might be 1.0442x faster
   make-indexed-storage                               2.8179+-0.0901     ?      2.8739+-0.1819        ? might be 1.0199x slower
   make-rope-cse                                      3.7544+-0.3152            3.7182+-0.2138        
   marsaglia-larger-ints                             32.9640+-0.8257     ?     33.2148+-1.7994        ?
   marsaglia-osr-entry                               21.4915+-0.7509     ?     21.6992+-0.6374        ?
   max-boolean                                        2.7930+-0.3107            2.7744+-0.1257        
   method-on-number                                  17.7836+-0.2585     ?     18.1470+-0.7380        ? might be 1.0204x slower
   min-boolean                                        2.6247+-0.0772            2.6128+-0.0656        
   minus-boolean-double                               3.0473+-0.0361     ?      3.0660+-0.0515        ?
   minus-boolean                                      2.2905+-0.0535     ?      2.3911+-0.2052        ? might be 1.0439x slower
   misc-strict-eq                                    30.5200+-0.8780           29.9632+-1.4940          might be 1.0186x faster
   mod-boolean-double                                11.3050+-0.3207     ?     11.4355+-0.5964        ? might be 1.0116x slower
   mod-boolean                                        8.5099+-0.2415     ?      8.7018+-0.4722        ? might be 1.0225x slower
   mul-boolean-double                                 3.6392+-0.1872     ?      3.7623+-0.4463        ? might be 1.0338x slower
   mul-boolean                                        2.7601+-0.0491     ?      2.9755+-0.4895        ? might be 1.0780x slower
   neg-boolean                                        3.0451+-0.0394     ?      3.1639+-0.2370        ? might be 1.0390x slower
   negative-zero-divide                               0.3102+-0.0186     ?      0.3341+-0.0823        ? might be 1.0771x slower
   negative-zero-modulo                               0.3632+-0.1390            0.2892+-0.0093          might be 1.2558x faster
   negative-zero-negate                               0.2876+-0.0361            0.2849+-0.0176        
   nested-function-parsing                           33.0948+-0.4309           32.9700+-0.6320        
   new-array-buffer-dead                              2.7245+-0.0393     ?      2.8559+-0.2936        ? might be 1.0482x slower
   new-array-buffer-push                              5.6160+-0.2321            5.4071+-0.1266          might be 1.0386x faster
   new-array-dead                                     9.6222+-0.7578     ?     10.2517+-0.5217        ? might be 1.0654x slower
   new-array-push                                     3.4253+-0.0733     ?      3.4285+-0.1710        ?
   no-inline-constructor                             93.2178+-0.9571     !     96.1079+-1.1036        ! definitely 1.0310x slower
   number-test                                        2.8661+-0.0587            2.8026+-0.0352          might be 1.0227x faster
   object-closure-call                                4.9090+-0.1032     ?      4.9707+-0.2711        ? might be 1.0126x slower
   object-test                                        2.8779+-0.0553     ?      2.8799+-0.1055        ?
   obvious-sink-pathology-taken                     105.7966+-1.3470          105.5033+-0.9582        
   obvious-sink-pathology                           102.6165+-0.8497     ?    102.6909+-1.4135        ?
   obviously-elidable-new-object                     29.2012+-1.5757           27.8213+-1.6823          might be 1.0496x faster
   plus-boolean-arith                                 2.3575+-0.0341     ?      2.3865+-0.1052        ? might be 1.0123x slower
   plus-boolean-double                                3.1388+-0.1619            3.1181+-0.1651        
   plus-boolean                                       2.5264+-0.0492     ?      2.5435+-0.0557        ?
   poly-chain-access-different-prototypes-simple   
                                                      2.8221+-0.2408            2.6811+-0.0284          might be 1.0526x faster
   poly-chain-access-different-prototypes             2.5070+-0.0219     ?      2.6024+-0.2216        ? might be 1.0381x slower
   poly-chain-access-simpler                          2.7064+-0.0783     ?      2.8385+-0.2098        ? might be 1.0488x slower
   poly-chain-access                                  2.7332+-0.5697            2.5107+-0.0769          might be 1.0886x faster
   poly-stricteq                                     46.8513+-0.8306     ?     47.1350+-1.3848        ?
   polymorphic-array-call                             1.5173+-0.5028            1.0866+-0.0217          might be 1.3964x faster
   polymorphic-get-by-id                              2.8407+-0.1131     ?      2.9323+-0.1126        ? might be 1.0322x slower
   polymorphic-put-by-id                             25.7317+-1.7496           24.7096+-1.1782          might be 1.0414x faster
   polymorphic-structure                             13.5119+-0.4367           13.2628+-0.1687          might be 1.0188x faster
   polyvariant-monomorphic-get-by-id                  6.7093+-0.4398     ?      6.7334+-1.1091        ?
   proto-getter-access                                9.2640+-0.5346            9.1798+-0.2413        
   put-by-id-replace-and-transition                   7.7678+-0.5600            7.5546+-0.4096          might be 1.0282x faster
   put-by-id-slightly-polymorphic                     2.5647+-0.0540     ?      2.6203+-0.0749        ? might be 1.0217x slower
   put-by-id                                         10.3986+-0.2785     ?     11.1219+-1.0729        ? might be 1.0696x slower
   put-by-val-direct                                  0.5198+-0.0586            0.4955+-0.0282          might be 1.0491x faster
   put-by-val-large-index-blank-indexing-type   
                                                      5.3787+-0.4674     ?      5.4379+-0.5542        ? might be 1.0110x slower
   put-by-val-machine-int                             2.4644+-0.3083            2.4168+-0.2933          might be 1.0197x faster
   rare-osr-exit-on-local                            14.8348+-0.3328     ?     14.8352+-0.2769        ?
   register-pressure-from-osr                        17.3593+-0.6691           17.3053+-0.7614        
   setter                                             5.8640+-0.3722            5.5762+-0.0894          might be 1.0516x faster
   simple-activation-demo                            24.8625+-0.5394     ?     25.2721+-1.2430        ? might be 1.0165x slower
   simple-getter-access                              12.1474+-0.3561           11.9571+-0.1677          might be 1.0159x faster
   simple-poly-call-nested                            8.7076+-0.5250     ?      8.7722+-0.5166        ?
   simple-poly-call                                   1.2652+-0.1111            1.1844+-0.0374          might be 1.0683x faster
   sin-boolean                                       19.7186+-2.1929           19.3376+-2.0071          might be 1.0197x faster
   singleton-scope                                   64.5957+-2.3052           63.2055+-0.7072          might be 1.0220x faster
   sinkable-new-object-dag                           57.3196+-1.9989           56.9303+-1.4708        
   sinkable-new-object-taken                         43.8472+-0.5988     ?     45.0061+-1.3585        ? might be 1.0264x slower
   sinkable-new-object                               31.2967+-0.8339           30.3020+-1.4600          might be 1.0328x faster
   slow-array-profile-convergence                     2.5480+-0.0584     ?      2.7839+-0.5681        ? might be 1.0926x slower
   slow-convergence                                   2.6715+-0.5381            2.4023+-0.0460          might be 1.1121x faster
   sorting-benchmark                                 20.7828+-0.8336           20.0920+-0.8963          might be 1.0344x faster
   sparse-conditional                                 1.0531+-0.0426     ?      1.1358+-0.1746        ? might be 1.0785x slower
   splice-to-remove                                  15.0184+-0.5825     ?     15.1770+-0.9092        ? might be 1.0106x slower
   string-char-code-at                               14.8564+-0.2800     ?     15.3031+-1.5729        ? might be 1.0301x slower
   string-concat-object                               2.1226+-0.1249     ^      1.9085+-0.0368        ^ definitely 1.1122x faster
   string-concat-pair-object                          2.0865+-0.0899     ?      2.1217+-0.1293        ? might be 1.0169x slower
   string-concat-pair-simple                          9.3507+-0.2946     ?      9.9068+-0.9539        ? might be 1.0595x slower
   string-concat-simple                               9.5589+-0.5614     ?     10.1890+-0.9329        ? might be 1.0659x slower
   string-cons-repeat                                 6.7767+-0.5304     ?      7.0576+-0.7423        ? might be 1.0414x slower
   string-cons-tower                                  7.6886+-0.9195            7.2441+-1.1636          might be 1.0614x faster
   string-equality                                   16.1996+-0.7035     ?     16.9302+-0.9109        ? might be 1.0451x slower
   string-get-by-val-big-char                         6.4779+-0.1216     ?      6.7098+-0.2143        ? might be 1.0358x slower
   string-get-by-val-out-of-bounds-insane             3.8914+-0.3056            3.8872+-0.2498        
   string-get-by-val-out-of-bounds                    4.0902+-0.0636     ?      4.1570+-0.1443        ? might be 1.0163x slower
   string-get-by-val                                  2.7786+-0.0593     ?      2.8003+-0.1490        ?
   string-hash                                        1.8389+-0.0731     ?      1.8755+-0.0384        ? might be 1.0199x slower
   string-long-ident-equality                        13.6662+-0.8088           13.6368+-0.7725        
   string-out-of-bounds                              10.7582+-0.6152           10.7368+-0.3525        
   string-repeat-arith                               27.3470+-0.3819     ?     27.5798+-1.0265        ?
   string-sub                                        55.5684+-0.9498     ?     57.4611+-1.4236        ? might be 1.0341x slower
   string-test                                        2.7446+-0.0723            2.7073+-0.0496          might be 1.0138x faster
   string-var-equality                               28.3610+-0.8946     ?     28.3650+-0.4691        ?
   structure-hoist-over-transitions                   2.3448+-0.2035            2.3179+-0.0841          might be 1.0116x faster
   substring-concat-weird                            34.5034+-1.6816     ?     35.8158+-1.6434        ? might be 1.0380x slower
   substring-concat                                  36.5814+-0.7620           36.5397+-2.5861        
   substring                                         41.3188+-1.2838     ?     41.9881+-2.1414        ? might be 1.0162x slower
   switch-char-constant                               2.7214+-0.1025     ?      2.9080+-0.4961        ? might be 1.0686x slower
   switch-char                                        5.8513+-0.4269            5.8316+-0.4669        
   switch-constant                                    7.7212+-0.9823            7.5852+-0.9880          might be 1.0179x faster
   switch-string-basic-big-var                       12.5313+-0.2213     ?     12.8189+-0.2507        ? might be 1.0229x slower
   switch-string-basic-big                           13.0455+-1.1843           12.2990+-0.2062          might be 1.0607x faster
   switch-string-basic-var                           12.2968+-0.3578     ?     12.6713+-0.3710        ? might be 1.0305x slower
   switch-string-basic                               11.7838+-0.2815           11.7257+-0.2209        
   switch-string-big-length-tower-var                18.7553+-0.3507     ?     19.3801+-1.0468        ? might be 1.0333x slower
   switch-string-length-tower-var                    13.2185+-1.0873           12.7931+-0.3855          might be 1.0333x faster
   switch-string-length-tower                        11.7014+-0.9812           11.6498+-0.7806        
   switch-string-short                               11.4374+-0.5712           11.2316+-0.2924          might be 1.0183x faster
   switch                                            11.5144+-0.6931     ?     11.6128+-0.8495        ?
   tear-off-arguments-simple                          3.2976+-0.5800            3.0086+-0.1731          might be 1.0961x faster
   tear-off-arguments                                 4.0003+-0.1618     ?      4.0723+-0.1554        ? might be 1.0180x slower
   temporal-structure                                12.3168+-0.3434     ?     12.3615+-0.6382        ?
   to-int32-boolean                                  12.8783+-0.1467     ?     12.9539+-0.2884        ?
   try-catch-get-by-val-cloned-arguments             13.1721+-0.3996           12.8925+-0.3697          might be 1.0217x faster
   try-catch-get-by-val-direct-arguments              5.6501+-0.2499            5.5898+-0.1623          might be 1.0108x faster
   try-catch-get-by-val-scoped-arguments              6.7100+-0.2316     ?      7.1114+-0.5965        ? might be 1.0598x slower
   undefined-property-access                        215.9011+-1.4330     ?    215.9905+-2.1992        ?
   undefined-test                                     2.8682+-0.0402     ?      2.9000+-0.1897        ? might be 1.0111x slower
   unprofiled-licm                                   14.1552+-0.2850     ?     14.3551+-0.6636        ? might be 1.0141x slower
   varargs-call                                      13.9777+-0.2729     ?     14.0356+-0.4356        ?
   varargs-construct-inline                          16.7644+-0.5979     !     18.1422+-0.7033        ! definitely 1.0822x slower
   varargs-construct                                 29.1991+-0.7688           28.9882+-0.9022        
   varargs-inline                                     8.4107+-0.4951     ?      8.5150+-0.2732        ? might be 1.0124x slower
   varargs-strict-mode                                9.0990+-0.1030     ?      9.1029+-0.1380        ?
   varargs                                            9.1772+-0.3452     ?      9.8012+-0.8176        ? might be 1.0680x slower
   weird-inlining-const-prop                          2.0667+-0.1836     ?      2.2319+-0.3897        ? might be 1.0799x slower

   &lt;geometric&gt;                                        7.6638+-0.0253     ?      7.6909+-0.0407        ? might be 1.0035x slower

                                                          Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                                       449.0408+-1.7001     ?    449.9710+-1.9237        ?
   cray.c                                           398.9409+-2.9850     ?    399.9544+-2.4226        ?
   dry.c                                            449.2397+-20.2805         437.2972+-14.4663         might be 1.0273x faster
   FloatMM.c                                        705.2646+-16.2634         696.6644+-5.7120          might be 1.0123x faster
   gcc-loops.cpp                                   3563.5275+-20.1428    ?   3568.4141+-18.1991       ?
   n-body.c                                         833.3999+-3.8659     ?    839.1577+-5.5071        ?
   Quicksort.c                                      405.3527+-14.8943         404.4587+-10.3040       
   stepanov_container.cpp                          3617.3817+-69.2255        3584.6414+-38.2088       
   Towers.c                                         239.8610+-0.3823     ?    240.9253+-1.7825        ?

   &lt;geometric&gt;                                      730.4594+-6.7246          727.8200+-4.1081          might be 1.0036x faster

                                                          Conf#1                    Conf#2                                      
CompressionBench:
   huffman                                          309.0644+-2.0040     ?    310.5285+-6.1873        ?
   arithmetic-simple                                353.8047+-14.2702         344.2210+-1.2046          might be 1.0278x faster
   arithmetic-precise                               270.1401+-3.0966          266.3287+-8.9569          might be 1.0143x faster
   arithmetic-complex-precise                       270.1259+-6.8319          262.6709+-1.8474          might be 1.0284x faster
   arithmetic-precise-order-0                       372.2071+-7.1246          365.8042+-4.5539          might be 1.0175x faster
   arithmetic-precise-order-1                       304.0562+-2.5856          300.6914+-2.5431          might be 1.0112x faster
   arithmetic-precise-order-2                       341.8487+-0.8895          340.0347+-3.7666        
   arithmetic-simple-order-1                        334.9377+-3.9425     ?    341.0841+-6.0158        ? might be 1.0184x slower
   arithmetic-simple-order-2                        391.3536+-5.7737          388.9067+-8.0521        
   lz-string                                        328.5979+-14.3359         322.0613+-13.1032         might be 1.0203x faster

   &lt;geometric&gt;                                      325.3149+-2.9507          321.8685+-3.3202          might be 1.0107x faster

                                                          Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                   56.7866+-0.3746           56.7344+-0.2569          might be 1.0009x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085960</commentid>
    <comment_count>9</comment_count>
      <attachid>250927</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-16 10:27:08 -0700</bug_when>
    <thetext>Comment on attachment 250927
Remove additional GPR

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

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:3496
&gt; +        GPRReg rareDataGPR = rareData.gpr();

Does this compile?

Note that you need to do run-javascriptcore-tests --32-bit to test this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085966</commentid>
    <comment_count>10</comment_count>
      <attachid>250928</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-04-16 10:32:32 -0700</bug_when>
    <thetext>Created attachment 250928
Hopefully final patch

Also removes the additional GPR on DFGSpeculativeJIT32_64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085971</commentid>
    <comment_count>11</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-04-16 10:38:15 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 250927 [details]
&gt; Remove additional GPR
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250927&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:3496
&gt; &gt; +        GPRReg rareDataGPR = rareData.gpr();
&gt; 
&gt; Does this compile?
&gt; 
&gt; Note that you need to do run-javascriptcore-tests --32-bit to test this code.

No, that was a mistake (missed keystroke when saving), I updated the patch.
Didn&apos;t know about the --32-bit though, I will run that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085975</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-16 10:54:48 -0700</bug_when>
    <thetext>Attachment 250928 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSFunction.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:137:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSCallee.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/FunctionRareData.h:47:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/FunctionRareData.h:76:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/FunctionRareData.h:79:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 6 in 23 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>1085976</commentid>
    <comment_count>13</comment_count>
      <attachid>250928</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-16 10:55:30 -0700</bug_when>
    <thetext>Comment on attachment 250928
Hopefully final patch

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

Looks great!  Please change the license and reupload.  Then I can mark cq+.

&gt; Source/JavaScriptCore/runtime/FunctionRareData.cpp:19
&gt; +/*
&gt; + *  Copyright (C) 2015 Apple Inc. All rights reserved.
&gt; + *
&gt; + *  This library is free software; you can redistribute it and/or
&gt; + *  modify it under the terms of the GNU Library General Public
&gt; + *  License as published by the Free Software Foundation; either
&gt; + *  version 2 of the License, or (at your option) any later version.
&gt; + *
&gt; + *  This library is distributed in the hope that it will be useful,
&gt; + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; + *  Library General Public License for more details.
&gt; + *
&gt; + *  You should have received a copy of the GNU Library General Public License
&gt; + *  along with this library; see the file COPYING.LIB.  If not, write to
&gt; + *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; + *  Boston, MA 02110-1301, USA.
&gt; + *
&gt; + */

Newly created files should use the 2-clause BSD license: https://www.webkit.org/coding/bsd-license.html

&gt; Source/JavaScriptCore/runtime/FunctionRareData.h:19
&gt; +/*
&gt; + *  Copyright (C) 2015 Apple Inc. All rights reserved.
&gt; + *
&gt; + *  This library is free software; you can redistribute it and/or
&gt; + *  modify it under the terms of the GNU Library General Public
&gt; + *  License as published by the Free Software Foundation; either
&gt; + *  version 2 of the License, or (at your option) any later version.
&gt; + *
&gt; + *  This library is distributed in the hope that it will be useful,
&gt; + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; + *  Library General Public License for more details.
&gt; + *
&gt; + *  You should have received a copy of the GNU Library General Public License
&gt; + *  along with this library; see the file COPYING.LIB.  If not, write to
&gt; + *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; + *  Boston, MA 02110-1301, USA.
&gt; + *
&gt; + */

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085979</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-16 10:58:49 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Attachment 250928 [details] did not pass style-queue:
&gt; 

Would be good to address these style issues, too.

&gt; 
&gt; ERROR: Source/JavaScriptCore/runtime/JSFunction.h:30:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]

We like to sort our #include&apos;s.  Sometimes editing existing code reveals past style problems - even if it&apos;s a preexisting problem, we usually fix it if style bot complains.

&gt; ERROR: Source/JavaScriptCore/runtime/JSFunction.h:137:  The parameter name
&gt; &quot;exec&quot; adds no information, so it should be removed. 

Yeah, just remove the name.

&gt; [readability/parameter_name] [5]
&gt; ERROR: Source/JavaScriptCore/runtime/JSCallee.h:29:  Alphabetical sorting
&gt; problem.  [build/include_order] [4]

Ditto.

&gt; ERROR: Source/JavaScriptCore/runtime/FunctionRareData.h:47:  The parameter
&gt; name &quot;vm&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]
&gt; ERROR: Source/JavaScriptCore/runtime/FunctionRareData.h:76:  The parameter
&gt; name &quot;vm&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]
&gt; ERROR: Source/JavaScriptCore/runtime/FunctionRareData.h:79:  The parameter
&gt; name &quot;vm&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]

Ditto.

&gt; Total errors found: 6 in 23 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085981</commentid>
    <comment_count>15</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-04-16 11:06:23 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Newly created files should use the 2-clause BSD license:
&gt; https://www.webkit.org/coding/bsd-license.html

Oops, I just copied the license form JSFunction.cpp without thinking.

(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; Attachment 250928 [details] did not pass style-queue:
&gt; &gt; 
&gt; 
&gt; Would be good to address these style issues, too.

Didn&apos;t know about the check-webkit-style script, fixing these now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085982</commentid>
    <comment_count>16</comment_count>
      <attachid>250931</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-04-16 11:09:45 -0700</bug_when>
    <thetext>Created attachment 250931
Fix style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085986</commentid>
    <comment_count>17</comment_count>
      <attachid>250931</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-16 11:26:34 -0700</bug_when>
    <thetext>Comment on attachment 250931
Fix style issues

Nice!  r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086009</commentid>
    <comment_count>18</comment_count>
      <attachid>250931</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-16 12:16:12 -0700</bug_when>
    <thetext>Comment on attachment 250931
Fix style issues

Clearing flags on attachment: 250931

Committed r182899: &lt;http://trac.webkit.org/changeset/182899&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086010</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-16 12:16:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086640</commentid>
    <comment_count>20</comment_count>
      <attachid>250931</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-19 09:15:00 -0700</bug_when>
    <thetext>Comment on attachment 250931
Fix style issues

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

&gt; WebKit.xcworkspace/contents.xcworkspacedata:13
&gt; +      location = &quot;group:Source/JavaScriptCore/runtime/FunctionRareData.cpp&quot;&gt;
&gt; +   &lt;/FileRef&gt;
&gt; +   &lt;FileRef
&gt; +      location = &quot;group:Source/JavaScriptCore/runtime/FunctionRareData.h&quot;&gt;
&gt; +   &lt;/FileRef&gt;
&gt; +   &lt;FileRef
&gt; +      location = &quot;group:Source&quot;&gt;
&gt; +   &lt;/FileRef&gt;
&gt; +   &lt;FileRef

You should not have committed this change. This has added a folder called &quot;Source&quot; to the workspace, duplicating all the files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086641</commentid>
    <comment_count>21</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-19 09:21:01 -0700</bug_when>
    <thetext>Workspace fixed in https://trac.webkit.org/changeset/182993</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250885</attachid>
            <date>2015-04-15 17:26:08 -0700</date>
            <delta_ts>2015-04-15 19:05:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>allocation_profile_rare.patch</filename>
            <type>text/plain</type>
            <size>38721</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjg3
MSkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA0
LTE1ICBCYXNpbGUgQ2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKworICAgICAg
ICBFeHRyYWN0IHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUgZnJvbSBKU0Z1bmN0aW9uIHRvIGEgcmFy
ZSBvYmplY3QKKwlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzODA3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJL
aXQueGN3b3Jrc3BhY2UvY29udGVudHMueGN3b3Jrc3BhY2VkYXRhOgorCiAyMDE1LTA0LTE1ICBU
aW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBDdXN0
b20gQ1NTIGN1cnNvcnMgZG8gbm90IHVzZSAtd2Via2l0LWltYWdlLXNldCBvbiByZXRpbmEgZGlz
cGxheXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4
Mjg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNDQ5LDYgKzQ0OSw3IEBACiAgICAgcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVE
dW1wLmNwcAogICAgIHJ1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcAogICAgIHJ1
bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9GdW5jdGlvblJhcmVEYXRh
LmNwcAogICAgIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmll
ci5jcHAKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkocmV2aXNpb24gMTgyODcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBACisyMDE1LTA0LTE1ICBCYXNpbGUg
Q2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKworICAgICAgICBFeHRyYWN0IHRo
ZSBhbGxvY2F0aW9uIHByb2ZpbGUgZnJvbSBKU0Z1bmN0aW9uIGludG8gYSByYXJlIG9iamVjdAor
CWh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM4MDcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwkKKwlUaGUgYWxsb2NhdGlvbiBwcm9maWxl
IGlzIG9ubHkgbmVlZGVkIGZvciB0aG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZAorCXRvIGNy
ZWF0ZSBvYmplY3RzIHdpdGggW25ld10uCisJRXh0cmFjdGluZyBpdCBpbnRvIGl0cyBvd24gSlND
ZWxsIHJlbW92ZXMgdGhlIG5lZWQgZm9yIEpTRnVuY3Rpb24gYW5kCisJSlNDYWxsZWUgdG8gYmUg
SlNEZXN0cnVjdGlibGVPYmplY3RzLCB3aGljaCBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZXMg
aW4gbW9zdAorCWNhc2VzIGF0IHRoZSBjb3N0IG9mIGFuIGV4dHJhIHBvaW50ZXIgZGVyZWZlcmVu
Y2Ugd2hlbiB0aGUgYWxsb2NhdGlvbiBwcm9maWxlCisJaXMgYWN0dWFsbHkgbmVlZGVkLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlv
bnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRp
bWUvRnVuY3Rpb25SYXJlRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGdW5jdGlvblJh
cmVEYXRhOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjpkZXN0cm95
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uUmFyZURhdGE6OkZ1bmN0aW9uUmFyZURhdGEpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvblJhcmVEYXRhOjp+RnVuY3Rpb25SYXJlRGF0YSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uUmFyZURhdGE6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9u
UmFyZURhdGEuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFyZURhdGE6Om9mZnNl
dE9mQWxsb2NhdGlvblByb2ZpbGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjph
bGxvY2F0aW9uUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFyZURhdGE6OmFsbG9j
YXRpb25TdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjphbGxvY2F0
aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDYWxsZWUuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0
aW9uOjpKU0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlUmFyZURh
dGEpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAg
KEpTQzo6SlNGdW5jdGlvbjo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5l
T3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVBbGxvY2F0aW9u
UHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEpOgorICAgICAgICAoSlNDOjpK
U0Z1bmN0aW9uOjpyYXJlRGF0YSk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmFsbG9jYXRp
b25TdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjphbGxvY2F0aW9uUHJvZmls
ZVdhdGNocG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpvZmZzZXRPZkFsbG9j
YXRpb25Qcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6YWxsb2Nh
dGlvblByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbklubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6SlNGdW5jdGlvbik6CisgICAgICAgICog
cnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGlt
ZS9WTS5oOgorCiAyMDE1LTA0LTE1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgb2Jzb2xldGUgVk1JbnNwZWN0b3IgZGVidWdnaW5nIHRvb2wuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4Mjg2MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcxNyw2ICs3MTcsNyBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25IYXNFeGVjdXRl
ZENhY2hlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rp
b25Qcm90b3R5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxG
dW5jdGlvblJhcmVEYXRhLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcR2V0dGVyU2V0dGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSWRlbnRpZmllci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEluZGV4aW5nVHlwZS5jcHAiIC8+CkBAIC0xNDk4LDYgKzE0OTksNyBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblByb3RvdHlw
ZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblJhcmVE
YXRhLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdlbmVyaWNBcmd1
bWVudHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2VuZXJpY0Fy
Z3VtZW50c0lubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
R2VuZXJpY09mZnNldC5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTgyODYwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5m
aWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC02MDksNiArNjA5LDkgQEAKICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25Qcm90b3R5cGUuY3BwIj4KICAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblJhcmVEYXRhLmNwcCI+CisgICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcR2V0dGVyU2V0dGVyLmNwcCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTI2MzksNiArMjY0Miw5IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uUHJvdG90eXBlLmgiPgogICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uUmFyZURhdGEuaCI+CisgICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcR2V0dGVyU2V0dGVyLmgiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTgyODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTk1Myw2ICs5NTMs
OCBAQAogCQk1REJCMTUxQjEzMUQwQjMxMDA1NkFEMzYgLyogdGVzdGFwaS5qcyBpbiBDb3B5IFN1
cHBvcnQgU2NyaXB0ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDg1Nzc0
MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICovOyB9OwogCQk1REJCMTUyNTEzMUQwQkQ3
MDA1NkFEMzYgLyogbWluaWRvbS5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTIxMTBEMEE0ODc4ODcwMDQ4MDI1NSAvKiBtaW5p
ZG9tLmpzICovOyB9OwogCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hf
dGFibGUgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjky
QTg1NDAyNTU1OTdEMDFGRjYwRjcgLyogY3JlYXRlX2hhc2hfdGFibGUgKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKKwkJNjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1
bmN0aW9uUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjJEMkQzOEQxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3Bw
ICovOyB9OworCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJEMkQzOEUx
QURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NTA3RDI5RTBFODcxRTVFMDBEN0Q4OTYg
LyogSlNUeXBlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjUwN0QyOTcwRTg3MUU0QTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NTExMjJGRDE0MDQ2QTRD
MDAyQjEwMUQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8q
IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJNjUxMTIyRkUxNDA0NkE0QzAwMkIx
MDFEIC8qIGxpYmVkaXQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RDVEOEFEMDBFMEQwRUJFMDBGOUM2OTIgLyogbGliZWRpdC5keWxpYiAq
LzsgfTsKQEAgLTI2NDYsNiArMjY0OCw4IEBACiAJCTVEQUZENkNCMTQ2QjY4NjMwMEZCRUZCNCAv
KiBKU0MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gSlNDLnhjY29uZmlnOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1RERERjQ0NjE0RkVFNzIyMDBCNEZCNEQgLyogTExJbnREZXNpcmVk
T2Zmc2V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludERlc2lyZWRP
ZmZzZXRzLmg7IHBhdGggPSBMTEludE9mZnNldHMvTExJbnREZXNpcmVkT2Zmc2V0cy5oOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1REUzRDBGNDBERDhEREZCMDA0Njg3
MTQgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYktpdEF2YWlsYWJpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2
MkQyRDM4RDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvblJhcmVEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJEMkQzOEUxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0
aW9uUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25S
YXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTA3RDI5NzBFODcxRTRB
MDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1R5cGVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MTEyMkU1MTQw
NDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IHRlc3RSZWdFeHAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2NTExMjMwNTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRh
YmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdFJlZ0V4cDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTQ0MDMsNiArNDQwNyw4IEBACiAJCQkJNTJCMzEw
RkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovLAogCQkJ
CUY2OTJBODVDMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5jcHAgKi8sCiAJ
CQkJRjY5MkE4NUQwMjU1NTk3RDAxRkY2MEY3IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggKi8sCisJ
CQkJNjJEMkQzOEQxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwICovLAor
CQkJCTYyRDJEMzhFMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi8sCiAJ
CQkJMEZFMDUwMTExQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHMuaCAqLywKIAkJ
CQkwRkUwNTAxMjFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCAq
LywKIAkJCQkwRkUwNTAxMzFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJpY09mZnNldC5oICovLApA
QCAtNTYzMCw2ICs1NjM2LDcgQEAKIAkJCQkwRjJCOUNGNzE5RDBCQUMxMDBCMUQxQjUgLyogRlRM
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdG
Mzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTExN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlQmFz
aWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8q
IEJ5dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzIzMEVEMUNF
MzMwMEYxRjY4MSAvKiBCeXRlY29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC03NDUy
LDYgKzc0NTksNyBAQAogCQkJCUE1QkExNUVDMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNw
ZWN0b3JEZWJ1Z2dhYmxlQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUVF
MTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyNEU1NTAxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFy
ZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8q
IFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDg4NTBFRDIxQzNE
MDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUMwRUM2
MUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMTgyODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSw3IEBACiAgICAgQVNTRVJU
KGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5tZXRob2RUYWJsZSh2bSktPmdldENv
bnN0cnVjdERhdGEoanNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksIGNvbnN0cnVjdERh
dGEpID09IENvbnN0cnVjdFR5cGVKUyk7CiAjZW5kaWYKICAgICAKLSAgICByZXR1cm4gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciktPmFs
bG9jYXRpb25Qcm9maWxlKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+c3RydWN0dXJlKCkpOworICAg
IHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNv
bnN0cnVjdG9yKS0+cmFyZURhdGEoZXhlYywgaW5saW5lQ2FwYWNpdHkpLT5hbGxvY2F0aW9uUHJv
ZmlsZSgpLT5zdHJ1Y3R1cmUoKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAx
ODI4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDg3LDEyICszNDg3LDE0IEBACiAgICAgICAgIC8v
IG90aGVyd2lzZSB3ZSdkIHN0YXJ0IHRha2luZyBzbG93IHBhdGggYSBsb3QpLgogICAgICAgICAK
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2FsbGVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJhcmVEYXRhKHRoaXMpOwogICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgYWxsb2NhdG9yKHRoaXMp
OwogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIg
PSBjYWxsZWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByYXJlRGF0YUdQUiA9IHJhcmVEYXRhLmdw
cigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICBH
UFJSZWcgYWxsb2NhdG9yR1BSID0gYWxsb2NhdG9yLmdwcigpOwogICAgICAgICBHUFJSZWcgc3Ry
dWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwpAQCAtMzUwMCw5ICszNTAyLDEwIEBACiAgICAg
ICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKLSAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rp
b246Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
OjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yR1BSKTsKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9m
QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0
cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGFsbG9jYXRvckdQUikpOworICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5j
dGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFHUFIpOworICAgICAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmFyZURh
dGFHUFIpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJl
RGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JH
UFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRh
R1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZUdQUik7
CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yR1BSLCBz
dHJ1Y3R1cmVHUFIsIFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKIAog
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMs
IG9wZXJhdGlvbkNyZWF0ZVRoaXMsIHJlc3VsdEdQUiwgY2FsbGVlR1BSLCBub2RlLT5pbmxpbmVD
YXBhY2l0eSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4Mjg2MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
NTgsMjIgKzM1NTgsMjUgQEAKICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlJ2Qgc3RhcnQgdGFraW5n
IHNsb3cgcGF0aCBhIGxvdCkuCiAgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBjYWxsZWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmFy
ZURhdGEodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBhbGxvY2F0b3IodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1
Y3R1cmUodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAg
ICAKICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJhcmVEYXRhR1BSID0gcmFyZURhdGEuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBhbGxvY2F0b3JHUFIgPSBhbGxvY2F0
b3IuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7
CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgICAgIAotICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNl
dE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0
aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJl
KCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYWxsb2NhdG9yR1BSKSk7CisKKyAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246
Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BS
KSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFH
UFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yR1BSKTsK
KyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvckdQUiwgc3RydWN0
dXJlR1BSLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAKICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVy
YXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIGNhbGxlZUdQUiwgbm9kZS0+aW5saW5lQ2FwYWNp
dHkoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShy
ZXZpc2lvbiAxODI4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTUsMTUgKzY5NSwxNyBAQAogewogICAgIGludCBjYWxs
ZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIFJlZ2lzdGVySUQgY2Fs
bGVlUmVnID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1QwOwogICAg
IFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JS
ZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QyOwogICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjYWxsZWUsIGNhbGxlZVJlZyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcpOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUo
KSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0
dXJlUmVnKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRvclJl
ZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9m
UmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRy
KFplcm8sIHJhcmVEYXRhUmVnKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBG
dW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkFs
bG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1
Y3R1cmUoKSksIHN0cnVjdHVyZVJlZyk7CiAKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChhbGxv
Y2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgcmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2
aXNpb24gMTgyODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTQsMTUgKzkxNCwxNyBAQAogewogICAgIGludCBj
YWxsZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIFJlZ2lzdGVySUQg
Y2FsbGVlUmVnID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1QwOwog
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0
b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QyOwogICAg
IFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGNh
bGxlZSwgY2FsbGVlUmVnKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVS
ZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2NhdG9yUmVnKSk7
CisgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJl
RGF0YSgpKSwgcmFyZURhdGFSZWcpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVy
bywgcmFyZURhdGFSZWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mQWxsb2Nh
dGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVy
ZSgpKSwgc3RydWN0dXJlUmVnKTsKIAogICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KGFsbG9jYXRv
clJlZywgc3RydWN0dXJlUmVnLCByZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRTdG9y
ZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxODI4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAt
NzQwLDkgKzc0MCwxMCBAQAogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkaSA4W1BDXSwg
dDAKICAgICBsb2FkcCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0MAotICAgIGxvYWRwIEpT
RnVuY3Rpb246Om1fYWxsb2NhdGlvblByb2ZpbGUgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6
bV9hbGxvY2F0b3JbdDBdLCB0MQotICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fYWxsb2NhdGlvblBy
b2ZpbGUgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6bV9zdHJ1Y3R1cmVbdDBdLCB0MgotICAg
IGJ0cHogdDEsIC5vcENyZWF0ZVRoaXNTbG93CisgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9yYXJl
RGF0YVt0MF0sIHQ0CisgICAgYnRweiB0NCwgLm9wQ3JlYXRlVGhpc1Nsb3cKKyAgICBsb2FkcCBG
dW5jdGlvblJhcmVEYXRhOjptX2FsbG9jYXRpb25Qcm9maWxlICsgT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU6Om1fYWxsb2NhdG9yW3Q0XSwgdDEKKyAgICBsb2FkcCBGdW5jdGlvblJhcmVEYXRhOjpt
X2FsbG9jYXRpb25Qcm9maWxlICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om1fc3RydWN0dXJl
W3Q0XSwgdDIKICAgICBhbGxvY2F0ZUpTT2JqZWN0KHQxLCB0MiwgdDAsIHQzLCAub3BDcmVhdGVU
aGlzU2xvdykKICAgICBsb2FkaSA0W1BDXSwgdDEKICAgICBzdG9yZWkgQ2VsbFRhZywgVGFnT2Zm
c2V0W2NmciwgdDEsIDhdCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTgyODYwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTYyNiw5ICs2MjYsMTAgQEAKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQwKQogICAgIGxvYWRwIFtjZnIsIHQwLCA4XSwgdDAK
LSAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2FsbG9jYXRpb25Qcm9maWxlICsgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGU6Om1fYWxsb2NhdG9yW3QwXSwgdDEKLSAgICBsb2FkcCBKU0Z1bmN0aW9uOjpt
X2FsbG9jYXRpb25Qcm9maWxlICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om1fc3RydWN0dXJl
W3QwXSwgdDIKLSAgICBidHB6IHQxLCAub3BDcmVhdGVUaGlzU2xvdworICAgIGxvYWRwIEpTRnVu
Y3Rpb246Om1fcmFyZURhdGFbdDBdLCB0NAorICAgIGJ0cHogdDQsIC5vcENyZWF0ZVRoaXNTbG93
CisgICAgbG9hZHAgRnVuY3Rpb25SYXJlRGF0YTo6bV9hbGxvY2F0aW9uUHJvZmlsZSArIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlOjptX2FsbG9jYXRvclt0NF0sIHQxCisgICAgbG9hZHAgRnVuY3Rp
b25SYXJlRGF0YTo6bV9hbGxvY2F0aW9uUHJvZmlsZSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
OjptX3N0cnVjdHVyZVt0NF0sIHQyCiAgICAgYWxsb2NhdGVKU09iamVjdCh0MSwgdDIsIHQwLCB0
MywgLm9wQ3JlYXRlVGhpc1Nsb3cpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQog
ICAgIHN0b3JlcSB0MCwgW2NmciwgdDEsIDhdCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE4Mjg2MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNiw3ICsyMzYsNyBAQAogI2VuZGlmCiAKICAgICBzaXplX3QgaW5saW5l
Q2FwYWNpdHkgPSBwY1szXS51Lm9wZXJhbmQ7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBj
b25zdHJ1Y3Rvci0+YWxsb2NhdGlvblByb2ZpbGUoZXhlYywgaW5saW5lQ2FwYWNpdHkpLT5zdHJ1
Y3R1cmUoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbnN0cnVjdG9yLT5yYXJlRGF0
YShleGVjLCBpbmxpbmVDYXBhY2l0eSktPmFsbG9jYXRpb25Qcm9maWxlKCktPnN0cnVjdHVyZSgp
OwogICAgIFJFVFVSTihjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25S
YXJlRGF0YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25S
YXJlRGF0YS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY29uc3QgQ2xhc3NJbmZvIEZ1bmN0aW9uUmFyZURhdGE6OnNfaW5mbyA9IHsgIkZ1bmN0aW9u
UmFyZURhdGEiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uUmFyZURhdGEpIH07
CisKK0Z1bmN0aW9uUmFyZURhdGEqIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZShWTSYgdm0sIEpT
T2JqZWN0KiBwcm90b3R5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSkKK3sKKyAgICBGdW5jdGlv
blJhcmVEYXRhKiByYXJlRGF0YSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9u
UmFyZURhdGE+KHZtLmhlYXApKSBGdW5jdGlvblJhcmVEYXRhKHZtKTsKKyAgICByYXJlRGF0YS0+
ZmluaXNoQ3JlYXRpb24odm0sIHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpOworICAgIHJldHVy
biByYXJlRGF0YTsKK30KKwordm9pZCBGdW5jdGlvblJhcmVEYXRhOjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IHN0YXRpY19jYXN0PEZ1
bmN0aW9uUmFyZURhdGEqPihjZWxsKTsKKyAgICByYXJlRGF0YS0+RnVuY3Rpb25SYXJlRGF0YTo6
fkZ1bmN0aW9uUmFyZURhdGEoKTsKK30KKworU3RydWN0dXJlKiBGdW5jdGlvblJhcmVEYXRhOjpj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworfQorCit2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBGdW5jdGlvblJhcmVEYXRhKiBy
YXJlRGF0YSA9IGpzQ2FzdDxGdW5jdGlvblJhcmVEYXRhKj4oY2VsbCk7CisKKyAgICByYXJlRGF0
YS0+bV9hbGxvY2F0aW9uUHJvZmlsZS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworRnVu
Y3Rpb25SYXJlRGF0YTo6RnVuY3Rpb25SYXJlRGF0YShWTSYgdm0pCisgICAgOiBCYXNlKHZtLCB2
bS5mdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9hbGxvY2F0aW9uUHJv
ZmlsZSgpCisgICAgLy8gV2UgaW5pdGlhbGl6ZSBibGluZCBzbyB0aGF0IGNoYW5nZXMgdG8gdGhl
IHByb3RvdHlwZSBhZnRlciBmdW5jdGlvbiBjcmVhdGlvbiBidXQgYmVmb3JlCisgICAgLy8gdGhl
IG9wdGltaXplciBraWNrcyBpbiBkb24ndCBkaXNhYmxlIG9wdGltaXphdGlvbnMuIE9uY2UgdGhl
IG9wdGltaXplciBraWNrcyBpbiwgdGhlCisgICAgLy8gd2F0Y2hwb2ludCB3aWxsIHN0YXJ0IHdh
dGNoaW5nIGFuZCBhbnkgY2hhbmdlcyB3aWxsIGJvdGggZm9yY2UgZGVvcHRpbWl6YXRpb24gYW5k
IGRpc2FibGUKKyAgICAvLyBmdXR1cmUgYXR0ZW1wdHMgdG8gb3B0aW1pemUuIFRoaXMgaXMgbmVj
ZXNzYXJ5IGJlY2F1c2Ugd2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGUKKyAgICAvLyBhbGxvY2F0
aW9uIHByb2ZpbGUgaXMgY2hhbmdlZCBleGFjdGx5IG9uY2UgcHJpb3IgdG8gb3B0aW1pemF0aW9u
cyBraWNraW5nIGluLiBXZSBjb3VsZCBiZQorICAgIC8vIHNtYXJ0ZXIgYW5kIGNvdW50IHRoZSBu
dW1iZXIgb2YgdGltZXMgdGhlIHByb3RvdHlwZSBpcyBjbG9iYmVyZWQgYW5kIG9ubHkgb3B0aW1p
emUgaWYgaXQKKyAgICAvLyB3YXMgY2xvYmJlcmVkIGV4YWN0bHkgb25jZSwgYnV0IHRoYXQgc2Vl
bXMgbGlrZSBvdmVya2lsbC4gSW4gYWxtb3N0IGFsbCBjYXNlcyBpdCB3aWxsIGJlCisgICAgLy8g
Y2xvYmJlcmVkIG9uY2UsIGFuZCBpZiBpdCdzIGNsb2JiZXJlZCBtb3JlIHRoYW4gb25jZSwgdGhh
dCB3aWxsIHByb2JhYmx5IG9ubHkgb2NjdXIKKyAgICAvLyBiZWZvcmUgd2Ugc3RhcnRlZCBvcHRp
bWl6aW5nLCBhbnl3YXkuCisgICAgLCBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludChDbGVh
cldhdGNocG9pbnQpCit7Cit9CisKK0Z1bmN0aW9uUmFyZURhdGE6On5GdW5jdGlvblJhcmVEYXRh
KCkKK3sKK30KKwordm9pZCBGdW5jdGlvblJhcmVEYXRhOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTT2JqZWN0KiBwcm90b3R5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSkKK3sKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgbV9hbGxvY2F0aW9uUHJvZmlsZS5pbml0aWFsaXpl
KHZtLCB0aGlzLCBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5KTsKK30KKworfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aWZuZGVmIEZ1bmN0aW9uUmFyZURhdGFfaAorI2RlZmluZSBGdW5jdGlvblJhcmVEYXRhX2gKKwor
I2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIk9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgi
CisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNH
bG9iYWxPYmplY3Q7CitjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CituYW1lc3BhY2UgREZH
IHsKK2NsYXNzIFNwZWN1bGF0aXZlSklUOworY2xhc3MgSklUQ29tcGlsZXI7Cit9CisKK2NsYXNz
IEZ1bmN0aW9uUmFyZURhdGEgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICBmcmllbmQgY2xhc3MgSklU
OworICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOworICAgIGZyaWVuZCBjbGFz
cyBERkc6OkpJVENvbXBpbGVyOworICAgIGZyaWVuZCBjbGFzcyBWTTsKKyAgICAKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsK
KworICAgIHN0YXRpYyBGdW5jdGlvblJhcmVEYXRhKiBjcmVhdGUoVk0mIHZtLCBKU09iamVjdCog
cHJvdG90eXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpOworCisgICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisg
ICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uUmFyZURhdGEsIG1f
YWxsb2NhdGlvblByb2ZpbGUpOworICAgIH0KKworICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
KiBhbGxvY2F0aW9uUHJvZmlsZSgpCisgICAgeworICAgICAgICByZXR1cm4gJm1fYWxsb2NhdGlv
blByb2ZpbGU7CisgICAgfQorCisgICAgU3RydWN0dXJlKiBhbGxvY2F0aW9uU3RydWN0dXJlKCkg
eyByZXR1cm4gbV9hbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsgfQorCisgICAgSW5saW5l
V2F0Y2hwb2ludFNldCYgYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICBGdW5jdGlvblJhcmVEYXRhKFZNJiB2bSk7CisgICAgfkZ1bmN0aW9uUmFy
ZURhdGEoKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogcHJv
dG90eXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpOworICAgIHVzaW5nIEJhc2U6OmZpbmlzaENy
ZWF0aW9uOworCitwcml2YXRlOgorCisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKKworICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlIG1fYWxsb2NhdGlvblByb2ZpbGU7
CisgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRnVuY3Rpb25SYXJlRGF0YV9o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHJldmlzaW9u
IDE4Mjg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgSlNDYWxsZWVfaAogI2RlZmlu
ZSBKU0NhbGxlZV9oCiAKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgorI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJK
U1Njb3BlLmgiCiAKQEAgLTM2LDcgKzM2LDcgQEAKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKIAogCi1jbGFzcyBKU0NhbGxlZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7Citj
bGFzcyBKU0NhbGxlZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICBmcmllbmQgY2xh
c3MgSklUOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1
bGF0aXZlSklUOwpAQCAtNDUsNyArNDUsNyBAQAogICAgIGZyaWVuZCBjbGFzcyBWTTsKIAogcHVi
bGljOgotICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKKyAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZTsK
IAogICAgIHN0YXRpYyBKU0NhbGxlZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNTY29wZSogc2NvcGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTgyODYwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkz
LDE2ICs5Myw2IEBACiBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBCYXNlKHZtLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fZXhlY3V0YWJsZSgpCi0gICAgLy8gV2Ug
aW5pdGlhbGl6ZSBibGluZCBzbyB0aGF0IGNoYW5nZXMgdG8gdGhlIHByb3RvdHlwZSBhZnRlciBm
dW5jdGlvbiBjcmVhdGlvbiBidXQgYmVmb3JlCi0gICAgLy8gdGhlIG9wdGltaXplciBraWNrcyBp
biBkb24ndCBkaXNhYmxlIG9wdGltaXphdGlvbnMuIE9uY2UgdGhlIG9wdGltaXplciBraWNrcyBp
biwgdGhlCi0gICAgLy8gd2F0Y2hwb2ludCB3aWxsIHN0YXJ0IHdhdGNoaW5nIGFuZCBhbnkgY2hh
bmdlcyB3aWxsIGJvdGggZm9yY2UgZGVvcHRpbWl6YXRpb24gYW5kIGRpc2FibGUKLSAgICAvLyBm
dXR1cmUgYXR0ZW1wdHMgdG8gb3B0aW1pemUuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2Ug
YXJlIGd1YXJhbnRlZWQgdGhhdCB0aGUKLSAgICAvLyBhbGxvY2F0aW9uIHByb2ZpbGUgaXMgY2hh
bmdlZCBleGFjdGx5IG9uY2UgcHJpb3IgdG8gb3B0aW1pemF0aW9ucyBraWNraW5nIGluLiBXZSBj
b3VsZCBiZQotICAgIC8vIHNtYXJ0ZXIgYW5kIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhl
IHByb3RvdHlwZSBpcyBjbG9iYmVyZWQgYW5kIG9ubHkgb3B0aW1pemUgaWYgaXQKLSAgICAvLyB3
YXMgY2xvYmJlcmVkIGV4YWN0bHkgb25jZSwgYnV0IHRoYXQgc2VlbXMgbGlrZSBvdmVya2lsbC4g
SW4gYWxtb3N0IGFsbCBjYXNlcyBpdCB3aWxsIGJlCi0gICAgLy8gY2xvYmJlcmVkIG9uY2UsIGFu
ZCBpZiBpdCdzIGNsb2JiZXJlZCBtb3JlIHRoYW4gb25jZSwgdGhhdCB3aWxsIHByb2JhYmx5IG9u
bHkgb2NjdXIKLSAgICAvLyBiZWZvcmUgd2Ugc3RhcnRlZCBvcHRpbWl6aW5nLCBhbnl3YXkuCi0g
ICAgLCBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludChDbGVhcldhdGNocG9pbnQpCiB7CiB9
CiAKQEAgLTEyMywxNCArMTEzLDE1IEBACiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCi1PYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZSogSlNGdW5jdGlvbjo6Y3JlYXRlQWxsb2NhdGlvblByb2ZpbGUo
RXhlY1N0YXRlKiBleGVjLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpCitGdW5jdGlvblJhcmVEYXRh
KiBKU0Z1bmN0aW9uOjpjcmVhdGVSYXJlRGF0YShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTT2JqZWN0KiBw
cm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSkpOwogICAgIGlmICghcHJvdG90eXBlKQogICAgICAgICBwcm90b3R5
cGUgPSBnbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgbV9hbGxvY2F0aW9u
UHJvZmlsZS5pbml0aWFsaXplKGdsb2JhbE9iamVjdCgpLT52bSgpLCB0aGlzLCBwcm90b3R5cGUs
IGlubGluZUNhcGFjaXR5KTsKLSAgICByZXR1cm4gJm1fYWxsb2NhdGlvblByb2ZpbGU7CisgICAg
RnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGUodm0s
IHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpOworICAgIG1fcmFyZURhdGEuc2V0KHZtLCB0aGlz
LCByYXJlRGF0YSk7CisgICAgcmV0dXJuIG1fcmFyZURhdGEuZ2V0KCk7CiB9CiAKIFN0cmluZyBK
U0Z1bmN0aW9uOjpuYW1lKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE3Niw3ICsxNjcsOCBAQAogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9leGVjdXRhYmxlKTsKLSAgICB0aGlzT2JqZWN0LT5tX2Fs
bG9jYXRpb25Qcm9maWxlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIGlmICh0aGlzT2Jq
ZWN0LT5tX3JhcmVEYXRhKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9y
YXJlRGF0YSk7CiB9CiAKIENhbGxUeXBlIEpTRnVuY3Rpb246OmdldENhbGxEYXRhKEpTQ2VsbCog
Y2VsbCwgQ2FsbERhdGEmIGNhbGxEYXRhKQpAQCAtNDAyLDkgKzM5NCwxMSBAQAogICAgICAgICAv
LyBmb2xsb3dpbmcgdGhlIHJ1bGVzIHNldCBvdXQgaW4gRUNNQS0yNjIgOC4xMi45LgogICAgICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0KTsKICAgICAgICAgdGhpc09iamVjdC0+bWV0
aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2FsbG9jYXRpb25Q
cm9maWxlLmNsZWFyKCk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fYWxsb2NhdGlvblByb2ZpbGVX
YXRjaHBvaW50LmZpcmVBbGwoIlN0b3JlIHRvIHByb3RvdHlwZSBwcm9wZXJ0eSBvZiBhIGZ1bmN0
aW9uIik7Ci0gICAgICAgIC8vIERvbid0IGFsbG93IHRoaXMgdG8gYmUgY2FjaGVkLCBzaW5jZSBh
IFtbUHV0XV0gbXVzdCBjbGVhciBtX2FsbG9jYXRpb25Qcm9maWxlLgorICAgICAgICBpZiAodGhp
c09iamVjdC0+bV9yYXJlRGF0YSkgeworICAgICAgICAgICAgdGhpc09iamVjdC0+bV9yYXJlRGF0
YS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkuZmlyZUFsbCgiU3RvcmUgdG8gcHJv
dG90eXBlIHByb3BlcnR5IG9mIGEgZnVuY3Rpb24iKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3Qt
Pm1fcmFyZURhdGEuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBEb24ndCBhbGxvdyB0
aGlzIHRvIGJlIGNhY2hlZCwgc2luY2UgYSBbW1B1dF1dIG11c3QgY2xlYXIgbV9yYXJlRGF0YS4K
ICAgICAgICAgUHV0UHJvcGVydHlTbG90IGRvbnRDYWNoZSh0aGlzT2JqZWN0KTsKICAgICAgICAg
QmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGRvbnRDYWNo
ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ0OSw4ICs0NDMsMTAgQEAKICAgICAgICAgLy8gZm9s
bG93aW5nIHRoZSBydWxlcyBzZXQgb3V0IGluIEVDTUEtMjYyIDguMTIuOS4KICAgICAgICAgUHJv
cGVydHlTbG90IHNsb3QodGhpc09iamVjdCk7CiAgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9hbGxvY2F0aW9uUHJvZmls
ZS5jbGVhcigpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hw
b2ludC5maXJlQWxsKCJTdG9yZSB0byBwcm90b3R5cGUgcHJvcGVydHkgb2YgYSBmdW5jdGlvbiIp
OworICAgICAgICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkgeworICAgICAgICAgICAgdGhp
c09iamVjdC0+bV9yYXJlRGF0YS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkuZmly
ZUFsbCgiU3RvcmUgdG8gcHJvdG90eXBlIHByb3BlcnR5IG9mIGEgZnVuY3Rpb24iKTsKKyAgICAg
ICAgICAgIHRoaXNPYmplY3QtPm1fcmFyZURhdGEuY2xlYXIoKTsKKyAgICAgICAgfQogICAgICAg
ICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE4Mjg2MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU0NhbGxlZS5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIKLSNpbmNsdWRlICJPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZS5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uUmFyZURhdGEuaCIKICNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDgsNyArNDgsNyBAQAog
SlNfRVhQT1JUX1BSSVZBVEUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1
bmN0aW9uQXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKIAogSlNfRVhQT1JUX1BSSVZBVEUgU3Ry
aW5nIGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShDYWxsRnJhbWUqLCBKU09iamVjdCopOwotICAg
IAorCiBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTQ2FsbGVlIHsKICAgICBmcmllbmQgY2xh
c3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwpAQCAtMTAwLDIz
ICsxMDAsMjggQEAKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBt
X2V4ZWN1dGFibGUpOwogICAgIH0KIAotICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNl
dE9mQWxsb2NhdGlvblByb2ZpbGUoKQorICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNl
dE9mUmFyZURhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Z1
bmN0aW9uLCBtX2FsbG9jYXRpb25Qcm9maWxlKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU0Z1bmN0aW9uLCBtX3JhcmVEYXRhKTsKICAgICB9CiAKLSAgICBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZSogYWxsb2NhdGlvblByb2ZpbGUoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
bmxpbmVDYXBhY2l0eSkKKyAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YShFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQogICAgIHsKLSAgICAgICAgaWYgKFVOTElL
RUxZKG1fYWxsb2NhdGlvblByb2ZpbGUuaXNOdWxsKCkpKQotICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUFsbG9jYXRpb25Qcm9maWxlKGV4ZWMsIGlubGluZUNhcGFjaXR5KTsKLSAgICAgICAgcmV0
dXJuICZtX2FsbG9jYXRpb25Qcm9maWxlOworICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmFyZURh
dGEpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJhcmVEYXRhKGV4ZWMsIGlubGluZUNhcGFj
aXR5KTsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEuZ2V0KCk7CiAgICAgfQogCi0gICAgU3Ry
dWN0dXJlKiBhbGxvY2F0aW9uU3RydWN0dXJlKCkgeyByZXR1cm4gbV9hbGxvY2F0aW9uUHJvZmls
ZS5zdHJ1Y3R1cmUoKTsgfQorICAgIFN0cnVjdHVyZSogYWxsb2NhdGlvblN0cnVjdHVyZSgpCisg
ICAgeworICAgICAgICBBU1NFUlQobV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBtX3JhcmVE
YXRhLmdldCgpLT5hbGxvY2F0aW9uU3RydWN0dXJlKCk7CisgICAgfQogCiAgICAgSW5saW5lV2F0
Y2hwb2ludFNldCYgYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDsKKyAgICAgICAgQVNTRVJU
KG1fcmFyZURhdGEpOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS5nZXQoKS0+YWxsb2NhdGlv
blByb2ZpbGVXYXRjaHBvaW50U2V0KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0hvc3RPckJ1aWx0
aW5GdW5jdGlvbigpIGNvbnN0OwpAQCAtMTMxLDcgKzEzNiw3IEBACiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcm
IG5hbWUpOwogICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwogCi0gICAgT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUqIGNyZWF0ZUFsbG9jYXRpb25Qcm9maWxlKEV4ZWNTdGF0ZSosIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSk7CisgICAgRnVuY3Rpb25SYXJlRGF0YSogY3JlYXRlUmFyZURhdGEo
RXhlY1N0YXRlKiBleGVjLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpOwogCiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSA9IEVudW1lcmF0aW9uTW9kZSgpKTsKQEAgLTE2MCw4ICsxNjUsNyBAQAogICAgIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBuYW1lR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIFByb3BlcnR5TmFtZSk7CiAKICAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJs
ZUJhc2U+IG1fZXhlY3V0YWJsZTsKLSAgICBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSBtX2FsbG9j
YXRpb25Qcm9maWxlOwotICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9hbGxvY2F0aW9uUHJvZmls
ZVdhdGNocG9pbnQ7CisgICAgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uUmFyZURhdGE+IG1fcmFyZURh
dGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAkocmV2aXNpb24gMTgyODYwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogaW5saW5lIEpTRnVuY3Rpb246OkpTRnVuY3Rp
b24oVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3Bl
KQogICAgIDogQmFzZSh2bSwgc2NvcGUsIHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25T
dHJ1Y3R1cmUoKSkKICAgICAsIG1fZXhlY3V0YWJsZSh2bSwgdGhpcywgZXhlY3V0YWJsZSkKLSAg
ICAsIG1fYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50KENsZWFyV2F0Y2hwb2ludCkgLy8gU2Vl
IGNvbW1lbnQgaW4gSlNGdW5jdGlvbi5jcHAgY29uY2VybmluZyB0aGUgcmVhc29uIGZvciB1c2lu
ZyBDbGVhcldhdGNocG9pbnQgYXMgb3Bwb3NlZCB0byBJc1dhdGNoZWQuCisgICAgLCBtX3JhcmVE
YXRhKCkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2
aXNpb24gMTgyODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzEsNiArMjMxLDcgQEAKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0
dXJlLnNldCgqdGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogICAgIHdlYWtNYXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERh
dGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBpbmZlcnJlZFZh
bHVlU3RydWN0dXJlLnNldCgqdGhpcywgSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOworICAgIGZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAgIHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9t
aXNlUmVhY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTgyODYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDYgKzI3
MSw3IEBACiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlUYWJsZVN0cnVjdHVyZTsKICAg
ICBTdHJvbmc8U3RydWN0dXJlPiB3ZWFrTWFwRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBpbmZlcnJlZFZhbHVlU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1
bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmU7CiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0
dXJlPiBwcm9taXNlUmVhY3Rpb25TdHJ1Y3R1cmU7CkluZGV4OiBXZWJLaXQueGN3b3Jrc3BhY2Uv
Y29udGVudHMueGN3b3Jrc3BhY2VkYXRhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC54Y3dvcmtzcGFj
ZS9jb250ZW50cy54Y3dvcmtzcGFjZWRhdGEJKHJldmlzaW9uIDE4Mjg2MCkKKysrIFdlYktpdC54
Y3dvcmtzcGFjZS9jb250ZW50cy54Y3dvcmtzcGFjZWRhdGEJKHdvcmtpbmcgY29weSkKQEAgLTIs
NiArMiwxNSBAQAogPFdvcmtzcGFjZQogICAgdmVyc2lvbiA9ICIxLjAiPgogICAgPEZpbGVSZWYK
KyAgICAgIGxvY2F0aW9uID0gImdyb3VwOlNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUmFyZURhdGEuY3BwIj4KKyAgIDwvRmlsZVJlZj4KKyAgIDxGaWxlUmVmCisgICAgICBs
b2NhdGlvbiA9ICJncm91cDpTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJh
cmVEYXRhLmgiPgorICAgPC9GaWxlUmVmPgorICAgPEZpbGVSZWYKKyAgICAgIGxvY2F0aW9uID0g
Imdyb3VwOlNvdXJjZSI+CisgICA8L0ZpbGVSZWY+CisgICA8RmlsZVJlZgogICAgICAgbG9jYXRp
b24gPSAiZ3JvdXA6U291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2oiPgogICAgPC9GaWxl
UmVmPgogICAgPEZpbGVSZWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250889</attachid>
            <date>2015-04-15 19:05:36 -0700</date>
            <delta_ts>2015-04-16 10:24:49 -0700</delta_ts>
            <desc>Fixed patch</desc>
            <filename>function_allocation_profile_fixed.patch</filename>
            <type>text/plain</type>
            <size>41513</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjg3
NCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA0
LTE1ICBCYXNpbGUgQ2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKworICAgICAg
ICBFeHRyYWN0IHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUgZnJvbSBKU0Z1bmN0aW9uIGludG8gYSBy
YXJlIG9iamVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJLaXQueGN3b3Jrc3BhY2UvY29udGVudHMueGN3b3Jrc3BhY2VkYXRhOgorCiAyMDE1
LTA0LTE1ICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDdXN0b20gQ1NTIGN1cnNvcnMgZG8gbm90IHVzZSAtd2Via2l0LWltYWdlLXNldCBvbiBy
ZXRpbmEgZGlzcGxheXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNDQ4LDYgKzQ0OCw3IEBACiAgICAgcnVudGltZS9GdW5jdGlvbkV4
ZWN1dGFibGVEdW1wLmNwcAogICAgIHJ1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNw
cAogICAgIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9GdW5jdGlv
blJhcmVEYXRhLmNwcAogICAgIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAogICAgIHJ1bnRpbWUv
SWRlbnRpZmllci5jcHAKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE1LTA0LTE1
ICBCYXNpbGUgQ2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKyAKKyAgICAgICAg
RXh0cmFjdCB0aGUgYWxsb2NhdGlvbiBwcm9maWxlIGZyb20gSlNGdW5jdGlvbiBpbnRvIGEgcmFy
ZSBvYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MzgwNworIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAKKyAgICAg
ICAgVGhlIGFsbG9jYXRpb24gcHJvZmlsZSBpcyBvbmx5IG5lZWRlZCBmb3IgdGhvc2UgZnVuY3Rp
b25zIHRoYXQgYXJlIHVzZWQKKyAgICAgICAgdG8gY3JlYXRlIG9iamVjdHMgd2l0aCBbbmV3XS4K
KyAgICAgICAgRXh0cmFjdGluZyBpdCBpbnRvIGl0cyBvd24gSlNDZWxsIHJlbW92ZXMgdGhlIG5l
ZWQgZm9yIEpTRnVuY3Rpb24gYW5kCisgICAgICAgIEpTQ2FsbGVlIHRvIGJlIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0cywgd2hpY2ggc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2VzIGluIG1vc3QKKyAg
ICAgICAgY2FzZXMgYXQgdGhlIGNvc3Qgb2YgYW4gZXh0cmEgcG9pbnRlciBkZXJlZmVyZW5jZSB3
aGVuIHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUKKyAgICAgICAgaXMgYWN0dWFsbHkgbmVlZGVkLgor
IAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAg
ICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBy
dW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25SYXJlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKToKKyAgICAgICAgKEpT
Qzo6RnVuY3Rpb25SYXJlRGF0YTo6fkZ1bmN0aW9uUmFyZURhdGEpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvblJhcmVEYXRhOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9GdW5j
dGlvblJhcmVEYXRhLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0
YTo6YWxsb2NhdGlvblByb2ZpbGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjph
bGxvY2F0aW9uU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6YWxs
b2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQm91bmRGdW5jdGlvbjo6ZGVzdHJveSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2FsbGVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDYWxsZWU6OmRlc3Ryb3kpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDYWxsZWUuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlUmFyZURhdGEpOgorICAgICAgICAoSlND
OjpKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
cHV0KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6Y3JlYXRlQWxsb2NhdGlvblByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpvZmZzZXRP
ZlJhcmVEYXRhKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6cmFyZURhdGEpOgorICAgICAg
ICAoSlNDOjpKU0Z1bmN0aW9uOjphbGxvY2F0aW9uU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246OmFsbG9jYXRpb25Qcm9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTRnVuY3Rp
b246OkpTRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlND
OjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAKIDIwMTUtMDQtMTUgIEpvcmRh
biBIYXJiYW5kICA8bGpoYXJiQGdtYWlsLmNvbT4KIAogICAgICAgICBTdHJpbmcucHJvdG90eXBl
LnN0YXJ0c1dpdGgvZW5kc1dpdGgvaW5jbHVkZXMgaGF2ZSB3cm9uZyBsZW5ndGggaW4gcjE4MjY3
MwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAx
ODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MTYsNiArNzE2LDcgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25FeGVjdXRhYmxlRHVt
cC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEZ1bmN0aW9uUHJvdG90eXBlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRnVuY3Rpb25SYXJlRGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXEdldHRlclNldHRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXElkZW50aWZpZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxJbmRleGluZ1R5cGUuY3BwIiAvPgpAQCAtMTQ5Niw2ICsxNDk3LDcgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25Q
cm90b3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rp
b25SYXJlRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxHZW5l
cmljQXJndW1lbnRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEdlbmVyaWNPZmZzZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtNjA2LDYgKzYwNiw5IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uUHJvdG90eXBlLmNwcCI+CiAgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25SYXJlRGF0YS5jcHAiPgorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEdldHRlclNldHRlci5jcHAiPgogICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0yNjMzLDYgKzI2MzYsOSBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblByb3RvdHlwZS5oIj4KICAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblJhcmVEYXRhLmgiPgorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEdldHRlclNldHRlci5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NTMs
NiArOTUzLDggQEAKIAkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGkuanMgaW4g
Q29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLzsgfTsKIAkJNURCQjE1MjUx
MzFEMEJENzAwNTZBRDM2IC8qIG1pbmlkb20uanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUg
LyogbWluaWRvbS5qcyAqLzsgfTsKIAkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0
ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjY5MkE4NTQwMjU1NTk3RDAxRkY2MEY3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CisJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZD
MSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVE
YXRhLmNwcCAqLzsgfTsKKwkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFy
ZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYy
RDJEMzhFMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjUwN0QyOUUwRTg3MUU1RTAw
RDdEODk2IC8qIEpTVHlwZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjUxMTIyRkQx
NDA0NkE0QzAwMkIxMDFEIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDcz
Njk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCTY1MTEyMkZFMTQwNDZB
NEMwMDJCMTAxRCAvKiBsaWJlZGl0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1RDhBRDAwRTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVkaXQu
ZHlsaWIgKi87IH07CkBAIC0yNjQ0LDYgKzI2NDYsOCBAQAogCQk1REFGRDZDQjE0NkI2ODYzMDBG
QkVGQjQgLyogSlNDLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEpTQy54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUREREY0NDYxNEZFRTcyMjAwQjRGQjREIC8qIExMSW50
RGVzaXJlZE9mZnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRE
ZXNpcmVkT2Zmc2V0cy5oOyBwYXRoID0gTExJbnRPZmZzZXRzL0xMSW50RGVzaXJlZE9mZnNldHMu
aDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNURFM0QwRjQwREQ4RERG
QjAwNDY4NzE0IC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJLaXRBdmFpbGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNjJEMkQzOEQxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25SYXJlRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyRDJEMzhFMUFERjEwM0YwMDAyMDZDMSAv
KiBGdW5jdGlvblJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUwN0QyOTcw
RTg3MUU0QTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNUeXBlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTEx
MjJFNTE0MDQ2OUJBMDAyQjEwMUQgLyogdGVzdFJlZ0V4cC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSB0ZXN0UmVnRXhwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8u
ZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RSZWdFeHA7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC00Mzk3LDYgKzQ0MDEsOCBAQAogCQkJ
CTUyQjMxMEZBMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAq
LywKIAkJCQlGNjkyQTg1QzAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUuY3Bw
ICovLAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5o
ICovLAorCQkJCTYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNw
cCAqLywKKwkJCQk2MkQyRDM4RTFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5o
ICovLAogCQkJCTBGRTA1MDExMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1lbnRzLmgg
Ki8sCiAJCQkJMEZFMDUwMTIxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmggKi8sCiAJCQkJMEZFMDUwMTMxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNPZmZzZXQu
aCAqLywKQEAgLTU2MjQsNiArNTYzMCw3IEBACiAJCQkJMEYyQjlDRjcxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRl
Y29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFDMjdGMTRCRUFBODIwMEFE
QzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcy
MzBFRDFDRTMzMDBGMUY2ODEgLyogQnl0ZWNvZGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtNzQ0NSw2ICs3NDUyLDcgQEAKIAkJCQlBNUJBMTVFQzE4MjM0MEI0MDBBODJFNjkgLyogUmVt
b3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQlB
NUJBMTVFRTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNo
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5j
dGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4
RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4ODUw
RUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQAogICAg
IEFTU0VSVChqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKS0+bWV0aG9kVGFibGUodm0p
LT5nZXRDb25zdHJ1Y3REYXRhKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLCBjb25z
dHJ1Y3REYXRhKSA9PSBDb25zdHJ1Y3RUeXBlSlMpOwogI2VuZGlmCiAgICAgCi0gICAgcmV0dXJu
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0
b3IpLT5hbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxpbmVDYXBhY2l0eSktPnN0cnVjdHVyZSgp
KTsKKyAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywganNDYXN0PEpTRnVuY3Rp
b24qPihjb25zdHJ1Y3RvciktPnJhcmVEYXRhKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+YWxsb2Nh
dGlvblByb2ZpbGUoKS0+c3RydWN0dXJlKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4NywxMiArMzQ4NywxNCBAQAogICAg
ICAgICAvLyBvdGhlcndpc2Ugd2UnZCBzdGFydCB0YWtpbmcgc2xvdyBwYXRoIGEgbG90KS4KICAg
ICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNhbGxlZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByYXJlRGF0YSh0aGlzKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGFsbG9jYXRv
cih0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgY2Fs
bGVlR1BSID0gY2FsbGVlLmdwcigpOworICAgICAgICBHUFJSZWcgcmFyZURhdGFHUFIgPSByYXJl
RGF0YS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIGFsbG9jYXRvckdQUiA9IGFsbG9jYXRvci5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKQEAgLTM1MDAsOSArMzUwMiwxMCBA
QAogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwog
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvckdQUik7Ci0gICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zm
c2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhbGxvY2F0b3JHUFIp
KTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIs
IEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKKyAgICAgICAg
c2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHJhcmVEYXRhR1BSKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mQWxsb2NhdGlvblByb2Zp
bGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxs
b2NhdG9yR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhy
YXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgp
ICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1
cmVHUFIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRv
ckdQUiwgc3RydWN0dXJlR1BSLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzbG93UGF0
aCk7CiAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRo
LCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIGNhbGxlZUdQUiwgbm9kZS0+
aW5saW5lQ2FwYWNpdHkoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTU4LDIyICszNTU4LDI1IEBACiAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSdkIHN0YXJ0
IHRha2luZyBzbG93IHBhdGggYSBsb3QpLgogICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgY2FsbGVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJhcmVEYXRhKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
ICAgICAgICBHUFJUZW1wb3JhcnkgYWxsb2NhdG9yKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3Jh
cnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
ICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByYXJlRGF0YUdQUiA9IHJhcmVEYXRhLmdwcigpOwogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICBHUFJSZWcgYWxsb2NhdG9yR1BSID0g
YWxsb2NhdG9yLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJl
LmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgICAgICAKLSAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rp
b246Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
OjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yR1BSKTsKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9m
QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0
cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGFsbG9jYXRvckdQUikpOworCisg
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1
bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YUdQUik7CisgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJl
RGF0YUdQUikpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJh
cmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkg
KyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRv
ckdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURh
dGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BS
KTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3JHUFIs
IHN0cnVjdHVyZUdQUiwgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwog
CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhp
cywgb3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0R1BSLCBjYWxsZWVHUFIsIG5vZGUtPmlubGlu
ZUNhcGFjaXR5KCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk1LDE1ICs2OTUsMTcgQEAKIHsKICAgICBp
bnQgY2FsbGVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBSZWdpc3Rl
cklEIGNhbGxlZVJlZyA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdU
MDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxs
b2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMjsK
ICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVS
ZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkFsbG9jYXRpb25Q
cm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSks
IHN0cnVjdHVyZVJlZyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBhbGxv
Y2F0b3JSZWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0
YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNl
dE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVSZWcpOwogCiAgICAgZW1pdEFsbG9jYXRlSlNPYmpl
Y3QoYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTE0LDE1ICs5MTQsMTcgQEAKIHsKICAg
ICBpbnQgY2FsbGVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBSZWdp
c3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSBy
ZWdUMDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQg
YWxsb2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdU
MjsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAogICAgIGVtaXRMb2FkUGF5
bG9hZChjYWxsZWUsIGNhbGxlZVJlZyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mQWxsb2NhdGlvblByb2Zp
bGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3Ry
dWN0dXJlUmVnKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRv
clJlZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNl
dE9mUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
UHRyKFplcm8sIHJhcmVEYXRhUmVnKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVn
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRP
ZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZT
dHJ1Y3R1cmUoKSksIHN0cnVjdHVyZVJlZyk7CiAKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChh
bGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgcmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBl
bWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3VsdFJlZyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTc0MCw5ICs3NDAsMTAgQEAKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGkg
OFtQQ10sIHQwCiAgICAgbG9hZHAgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XSwgdDAKLSAgICBs
b2FkcCBKU0Z1bmN0aW9uOjptX2FsbG9jYXRpb25Qcm9maWxlICsgT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGU6Om1fYWxsb2NhdG9yW3QwXSwgdDEKLSAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2FsbG9j
YXRpb25Qcm9maWxlICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om1fc3RydWN0dXJlW3QwXSwg
dDIKLSAgICBidHB6IHQxLCAub3BDcmVhdGVUaGlzU2xvdworICAgIGxvYWRwIEpTRnVuY3Rpb246
Om1fcmFyZURhdGFbdDBdLCB0NAorICAgIGJ0cHogdDQsIC5vcENyZWF0ZVRoaXNTbG93CisgICAg
bG9hZHAgRnVuY3Rpb25SYXJlRGF0YTo6bV9hbGxvY2F0aW9uUHJvZmlsZSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjptX2FsbG9jYXRvclt0NF0sIHQxCisgICAgbG9hZHAgRnVuY3Rpb25SYXJl
RGF0YTo6bV9hbGxvY2F0aW9uUHJvZmlsZSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjptX3N0
cnVjdHVyZVt0NF0sIHQyCiAgICAgYWxsb2NhdGVKU09iamVjdCh0MSwgdDIsIHQwLCB0MywgLm9w
Q3JlYXRlVGhpc1Nsb3cpCiAgICAgbG9hZGkgNFtQQ10sIHQxCiAgICAgc3RvcmVpIENlbGxUYWcs
IFRhZ09mZnNldFtjZnIsIHQxLCA4XQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE4Mjg3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC02MjYsOSArNjI2LDEwIEBACiAgICAgdHJhY2VFeGVjdXRpb24o
KQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MCkKICAgICBsb2FkcCBbY2ZyLCB0MCwg
OF0sIHQwCi0gICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9hbGxvY2F0aW9uUHJvZmlsZSArIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlOjptX2FsbG9jYXRvclt0MF0sIHQxCi0gICAgbG9hZHAgSlNGdW5j
dGlvbjo6bV9hbGxvY2F0aW9uUHJvZmlsZSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjptX3N0
cnVjdHVyZVt0MF0sIHQyCi0gICAgYnRweiB0MSwgLm9wQ3JlYXRlVGhpc1Nsb3cKKyAgICBsb2Fk
cCBKU0Z1bmN0aW9uOjptX3JhcmVEYXRhW3QwXSwgdDQKKyAgICBidHB6IHQ0LCAub3BDcmVhdGVU
aGlzU2xvdworICAgIGxvYWRwIEZ1bmN0aW9uUmFyZURhdGE6Om1fYWxsb2NhdGlvblByb2ZpbGUg
KyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6bV9hbGxvY2F0b3JbdDRdLCB0MQorICAgIGxvYWRw
IEZ1bmN0aW9uUmFyZURhdGE6Om1fYWxsb2NhdGlvblByb2ZpbGUgKyBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZTo6bV9zdHJ1Y3R1cmVbdDRdLCB0MgogICAgIGFsbG9jYXRlSlNPYmplY3QodDEsIHQy
LCB0MCwgdDMsIC5vcENyZWF0ZVRoaXNTbG93KQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigx
LCB0MSkKICAgICBzdG9yZXEgdDAsIFtjZnIsIHQxLCA4XQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODI4
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNyArMjM2LDcgQEAKICNlbmRpZgogCiAgICAgc2l6ZV90
IGlubGluZUNhcGFjaXR5ID0gcGNbM10udS5vcGVyYW5kOwotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gY29uc3RydWN0b3ItPmFsbG9jYXRpb25Qcm9maWxlKGV4ZWMsIGlubGluZUNhcGFjaXR5
KS0+c3RydWN0dXJlKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25zdHJ1Y3Rvci0+
cmFyZURhdGEoZXhlYywgaW5saW5lQ2FwYWNpdHkpLT5hbGxvY2F0aW9uUHJvZmlsZSgpLT5zdHJ1
Y3R1cmUoKTsKICAgICBSRVRVUk4oY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJl
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFy
ZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUmFyZURhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZ1
bmN0aW9uUmFyZURhdGEuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBGdW5jdGlvblJhcmVEYXRhOjpzX2luZm8gPSB7ICJG
dW5jdGlvblJhcmVEYXRhIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShGdW5jdGlvblJhcmVE
YXRhKSB9OworCitGdW5jdGlvblJhcmVEYXRhKiBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGUoVk0m
IHZtLCBKU09iamVjdCogcHJvdG90eXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpCit7CisgICAg
RnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxG
dW5jdGlvblJhcmVEYXRhPih2bS5oZWFwKSkgRnVuY3Rpb25SYXJlRGF0YSh2bSk7CisgICAgcmFy
ZURhdGEtPmZpbmlzaENyZWF0aW9uKHZtLCBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5KTsKKyAg
ICByZXR1cm4gcmFyZURhdGE7Cit9CisKK3ZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCit7CisgICAgRnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSBzdGF0aWNf
Y2FzdDxGdW5jdGlvblJhcmVEYXRhKj4oY2VsbCk7CisgICAgcmFyZURhdGEtPkZ1bmN0aW9uUmFy
ZURhdGE6On5GdW5jdGlvblJhcmVEYXRhKCk7Cit9CisKK1N0cnVjdHVyZSogRnVuY3Rpb25SYXJl
RGF0YTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBGdW5jdGlvblJhcmVEYXRhOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRnVuY3Rpb25SYXJl
RGF0YSogcmFyZURhdGEgPSBqc0Nhc3Q8RnVuY3Rpb25SYXJlRGF0YSo+KGNlbGwpOworCisgICAg
cmFyZURhdGEtPm1fYWxsb2NhdGlvblByb2ZpbGUudmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Cit9
CisKK0Z1bmN0aW9uUmFyZURhdGE6OkZ1bmN0aW9uUmFyZURhdGEoVk0mIHZtKQorICAgIDogQmFz
ZSh2bSwgdm0uZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fYWxsb2Nh
dGlvblByb2ZpbGUoKQorICAgIC8vIFdlIGluaXRpYWxpemUgYmxpbmQgc28gdGhhdCBjaGFuZ2Vz
IHRvIHRoZSBwcm90b3R5cGUgYWZ0ZXIgZnVuY3Rpb24gY3JlYXRpb24gYnV0IGJlZm9yZQorICAg
IC8vIHRoZSBvcHRpbWl6ZXIga2lja3MgaW4gZG9uJ3QgZGlzYWJsZSBvcHRpbWl6YXRpb25zLiBP
bmNlIHRoZSBvcHRpbWl6ZXIga2lja3MgaW4sIHRoZQorICAgIC8vIHdhdGNocG9pbnQgd2lsbCBz
dGFydCB3YXRjaGluZyBhbmQgYW55IGNoYW5nZXMgd2lsbCBib3RoIGZvcmNlIGRlb3B0aW1pemF0
aW9uIGFuZCBkaXNhYmxlCisgICAgLy8gZnV0dXJlIGF0dGVtcHRzIHRvIG9wdGltaXplLiBUaGlz
IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIGFyZSBndWFyYW50ZWVkIHRoYXQgdGhlCisgICAgLy8g
YWxsb2NhdGlvbiBwcm9maWxlIGlzIGNoYW5nZWQgZXhhY3RseSBvbmNlIHByaW9yIHRvIG9wdGlt
aXphdGlvbnMga2lja2luZyBpbi4gV2UgY291bGQgYmUKKyAgICAvLyBzbWFydGVyIGFuZCBjb3Vu
dCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBwcm90b3R5cGUgaXMgY2xvYmJlcmVkIGFuZCBvbmx5
IG9wdGltaXplIGlmIGl0CisgICAgLy8gd2FzIGNsb2JiZXJlZCBleGFjdGx5IG9uY2UsIGJ1dCB0
aGF0IHNlZW1zIGxpa2Ugb3ZlcmtpbGwuIEluIGFsbW9zdCBhbGwgY2FzZXMgaXQgd2lsbCBiZQor
ICAgIC8vIGNsb2JiZXJlZCBvbmNlLCBhbmQgaWYgaXQncyBjbG9iYmVyZWQgbW9yZSB0aGFuIG9u
Y2UsIHRoYXQgd2lsbCBwcm9iYWJseSBvbmx5IG9jY3VyCisgICAgLy8gYmVmb3JlIHdlIHN0YXJ0
ZWQgb3B0aW1pemluZywgYW55d2F5LgorICAgICwgbV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9p
bnQoQ2xlYXJXYXRjaHBvaW50KQoreworfQorCitGdW5jdGlvblJhcmVEYXRhOjp+RnVuY3Rpb25S
YXJlRGF0YSgpCit7Cit9CisKK3ZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBKU09iamVjdCogcHJvdG90eXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fYWxsb2NhdGlvblByb2ZpbGUuaW5p
dGlhbGl6ZSh2bSwgdGhpcywgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSk7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRh
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
blJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBGdW5jdGlvblJhcmVEYXRhX2gKKyNkZWZpbmUgRnVuY3Rpb25SYXJlRGF0
YV9oCisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworbmFtZXNw
YWNlIERGRyB7CitjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKK2NsYXNzIEpJVENvbXBpbGVyOworfQor
CitjbGFzcyBGdW5jdGlvblJhcmVEYXRhIDogcHVibGljIEpTQ2VsbCB7CisgICAgZnJpZW5kIGNs
YXNzIEpJVDsKKyAgICBmcmllbmQgY2xhc3MgREZHOjpTcGVjdWxhdGl2ZUpJVDsKKyAgICBmcmll
bmQgY2xhc3MgREZHOjpKSVRDb21waWxlcjsKKyAgICBmcmllbmQgY2xhc3MgVk07CisgICAgCitw
dWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJl
RmxhZ3M7CisKKyAgICBzdGF0aWMgRnVuY3Rpb25SYXJlRGF0YSogY3JlYXRlKFZNJiB2bSwgSlNP
YmplY3QqIHByb3RvdHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5KTsKKworICAgIHN0YXRpYyBj
b25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERFQ0xBUkVfSU5G
TzsKKworICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdGlvblByb2Zp
bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvblJhcmVE
YXRhLCBtX2FsbG9jYXRpb25Qcm9maWxlKTsKKyAgICB9CisKKyAgICBPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSogYWxsb2NhdGlvblByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX2Fs
bG9jYXRpb25Qcm9maWxlOworICAgIH0KKworICAgIFN0cnVjdHVyZSogYWxsb2NhdGlvblN0cnVj
dHVyZSgpIHsgcmV0dXJuIG1fYWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7IH0KKworICAg
IElubGluZVdhdGNocG9pbnRTZXQmIGFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgRnVuY3Rpb25SYXJlRGF0YShWTSYgdm0pOworICAgIH5GdW5j
dGlvblJhcmVEYXRhKCk7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmpl
Y3QqIHByb3RvdHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5KTsKKyAgICB1c2luZyBCYXNlOjpm
aW5pc2hDcmVhdGlvbjsKKworcHJpdmF0ZToKKworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CisKKyAgICBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSBtX2FsbG9jYXRpb25Q
cm9maWxlOworICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNo
cG9pbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEZ1bmN0aW9uUmFy
ZURhdGFfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jv
dW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMSAr
ODYsNiBAQAogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIAotdm9pZCBKU0JvdW5kRnVuY3Rpb246
OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0PEpTQm91bmRGdW5jdGlv
bio+KGNlbGwpLT5KU0JvdW5kRnVuY3Rpb246On5KU0JvdW5kRnVuY3Rpb24oKTsKLX0KLQogYm9v
bCBKU0JvdW5kRnVuY3Rpb246OmN1c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICByZXR1cm4ganNDYXN0PEpTQm91
bmRGdW5jdGlvbio+KG9iamVjdCktPm1fdGFyZ2V0RnVuY3Rpb24tPmhhc0luc3RhbmNlKGV4ZWMs
IHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5j
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91
bmRGdW5jdGlvbi5oCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsNiBA
QAogCiAgICAgc3RhdGljIEpTQm91bmRGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU1ZhbHVl
IGJvdW5kQXJncywgaW50LCBjb25zdCBTdHJpbmcmKTsKICAgICAKLSAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwotCiAgICAgc3RhdGljIGJvb2wgY3VzdG9tSGFzSW5zdGFuY2UoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKIAogICAgIEpTT2JqZWN0KiB0YXJnZXRGdW5j
dGlvbigpIHsgcmV0dXJuIG1fdGFyZ2V0RnVuY3Rpb24uZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHJldmlzaW9uIDE4Mjg3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksMTEgKzM5LDYgQEAKIAogY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGVlOjpzX2luZm8g
PSB7ICJDYWxsZWUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQ2Fs
bGVlKSB9OwogCi12b2lkIEpTQ2FsbGVlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBz
dGF0aWNfY2FzdDxKU0NhbGxlZSo+KGNlbGwpLT5KU0NhbGxlZTo6fkpTQ2FsbGVlKCk7Ci19Ci0K
IEpTQ2FsbGVlOjpKU0NhbGxlZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQogICAgICwg
bV9zY29wZSh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NhbGxlZS5oCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaWZuZGVmIEpTQ2FsbGVlX2gKICNkZWZpbmUgSlNDYWxsZWVfaAogCi0jaW5jbHVkZSAi
SlNEZXN0cnVjdGlibGVPYmplY3QuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTY29wZS5oIgogCkBAIC0zNiw3ICszNiw3
IEBACiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKIAotY2xhc3MgSlNDYWxsZWUgOiBw
dWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgeworY2xhc3MgSlNDYWxsZWUgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICBmcmllbmQgY2xhc3MgREZHOjpTcGVjdWxhdGl2ZUpJVDsKQEAgLTQ1LDcgKzQ1LDcg
QEAKICAgICBmcmllbmQgY2xhc3MgVk07CiAKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAg
ICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2U7CiAKICAgICBzdGF0aWMgSlNDYWxsZWUqIGNy
ZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU2NvcGUqIHNjb3Bl
KQpAQCAtNTUsOCArNTUsNiBAQAogICAgICAgICByZXR1cm4gY2FsbGVlOwogICAgIH0KICAgICAK
LSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCiAgICAgSlNTY29wZSogc2NvcGUo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc2NvcGUuZ2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTgyODc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDI0ICs4NSw5IEBACiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCi12b2lk
IEpTRnVuY3Rpb246OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0PEpT
RnVuY3Rpb24qPihjZWxsKS0+SlNGdW5jdGlvbjo6fkpTRnVuY3Rpb24oKTsKLX0KLQogSlNGdW5j
dGlvbjo6SlNGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpCiAgICAgLCBtX2V4ZWN1dGFibGUoKQotICAgIC8vIFdlIGluaXRpYWxpemUgYmxpbmQgc28g
dGhhdCBjaGFuZ2VzIHRvIHRoZSBwcm90b3R5cGUgYWZ0ZXIgZnVuY3Rpb24gY3JlYXRpb24gYnV0
IGJlZm9yZQotICAgIC8vIHRoZSBvcHRpbWl6ZXIga2lja3MgaW4gZG9uJ3QgZGlzYWJsZSBvcHRp
bWl6YXRpb25zLiBPbmNlIHRoZSBvcHRpbWl6ZXIga2lja3MgaW4sIHRoZQotICAgIC8vIHdhdGNo
cG9pbnQgd2lsbCBzdGFydCB3YXRjaGluZyBhbmQgYW55IGNoYW5nZXMgd2lsbCBib3RoIGZvcmNl
IGRlb3B0aW1pemF0aW9uIGFuZCBkaXNhYmxlCi0gICAgLy8gZnV0dXJlIGF0dGVtcHRzIHRvIG9w
dGltaXplLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIGFyZSBndWFyYW50ZWVkIHRoYXQg
dGhlCi0gICAgLy8gYWxsb2NhdGlvbiBwcm9maWxlIGlzIGNoYW5nZWQgZXhhY3RseSBvbmNlIHBy
aW9yIHRvIG9wdGltaXphdGlvbnMga2lja2luZyBpbi4gV2UgY291bGQgYmUKLSAgICAvLyBzbWFy
dGVyIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBwcm90b3R5cGUgaXMgY2xvYmJl
cmVkIGFuZCBvbmx5IG9wdGltaXplIGlmIGl0Ci0gICAgLy8gd2FzIGNsb2JiZXJlZCBleGFjdGx5
IG9uY2UsIGJ1dCB0aGF0IHNlZW1zIGxpa2Ugb3ZlcmtpbGwuIEluIGFsbW9zdCBhbGwgY2FzZXMg
aXQgd2lsbCBiZQotICAgIC8vIGNsb2JiZXJlZCBvbmNlLCBhbmQgaWYgaXQncyBjbG9iYmVyZWQg
bW9yZSB0aGFuIG9uY2UsIHRoYXQgd2lsbCBwcm9iYWJseSBvbmx5IG9jY3VyCi0gICAgLy8gYmVm
b3JlIHdlIHN0YXJ0ZWQgb3B0aW1pemluZywgYW55d2F5LgotICAgICwgbV9hbGxvY2F0aW9uUHJv
ZmlsZVdhdGNocG9pbnQoQ2xlYXJXYXRjaHBvaW50KQogewogfQogCkBAIC0xMjMsMTQgKzEwOCwx
NSBAQAogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIAotT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUq
IEpTRnVuY3Rpb246OmNyZWF0ZUFsbG9jYXRpb25Qcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgc2l6
ZV90IGlubGluZUNhcGFjaXR5KQorRnVuY3Rpb25SYXJlRGF0YSogSlNGdW5jdGlvbjo6Y3JlYXRl
UmFyZURhdGEoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWlj
Q2FzdDxKU09iamVjdCo+KGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpKTsK
ICAgICBpZiAoIXByb3RvdHlwZSkKICAgICAgICAgcHJvdG90eXBlID0gZ2xvYmFsT2JqZWN0KCkt
Pm9iamVjdFByb3RvdHlwZSgpOwotICAgIG1fYWxsb2NhdGlvblByb2ZpbGUuaW5pdGlhbGl6ZShn
bG9iYWxPYmplY3QoKS0+dm0oKSwgdGhpcywgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSk7Ci0g
ICAgcmV0dXJuICZtX2FsbG9jYXRpb25Qcm9maWxlOworICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJh
cmVEYXRhID0gRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlKHZtLCBwcm90b3R5cGUsIGlubGluZUNh
cGFjaXR5KTsKKyAgICBtX3JhcmVEYXRhLnNldCh2bSwgdGhpcywgcmFyZURhdGEpOworICAgIHJl
dHVybiBtX3JhcmVEYXRhLmdldCgpOwogfQogCiBTdHJpbmcgSlNGdW5jdGlvbjo6bmFtZShFeGVj
U3RhdGUqIGV4ZWMpCkBAIC0xNzYsNyArMTYyLDggQEAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fZXhlY3V0YWJsZSk7Ci0gICAgdGhpc09iamVjdC0+bV9hbGxvY2F0aW9uUHJvZmlsZS52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkKKyAg
ICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmFyZURhdGEpOwogfQogCiBDYWxs
VHlwZSBKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwsIENhbGxEYXRhJiBjYWxs
RGF0YSkKQEAgLTQwMiw5ICszODksMTEgQEAKICAgICAgICAgLy8gZm9sbG93aW5nIHRoZSBydWxl
cyBzZXQgb3V0IGluIEVDTUEtMjYyIDguMTIuOS4KICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qo
dGhpc09iamVjdCk7CiAgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9hbGxvY2F0aW9uUHJvZmlsZS5jbGVhcigpOwotICAg
ICAgICB0aGlzT2JqZWN0LT5tX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludC5maXJlQWxsKCJT
dG9yZSB0byBwcm90b3R5cGUgcHJvcGVydHkgb2YgYSBmdW5jdGlvbiIpOwotICAgICAgICAvLyBE
b24ndCBhbGxvdyB0aGlzIHRvIGJlIGNhY2hlZCwgc2luY2UgYSBbW1B1dF1dIG11c3QgY2xlYXIg
bV9hbGxvY2F0aW9uUHJvZmlsZS4KKyAgICAgICAgaWYgKHRoaXNPYmplY3QtPm1fcmFyZURhdGEp
IHsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fcmFyZURhdGEtPmFsbG9jYXRpb25Qcm9maWxl
V2F0Y2hwb2ludFNldCgpLmZpcmVBbGwoIlN0b3JlIHRvIHByb3RvdHlwZSBwcm9wZXJ0eSBvZiBh
IGZ1bmN0aW9uIik7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3JhcmVEYXRhLmNsZWFyKCk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyB0byBiZSBjYWNoZWQsIHNp
bmNlIGEgW1tQdXRdXSBtdXN0IGNsZWFyIG1fcmFyZURhdGEuCiAgICAgICAgIFB1dFByb3BlcnR5
U2xvdCBkb250Q2FjaGUodGhpc09iamVjdCk7CiAgICAgICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBkb250Q2FjaGUpOwogICAgICAgICByZXR1cm47
CkBAIC00NDksOCArNDM4LDEwIEBACiAgICAgICAgIC8vIGZvbGxvd2luZyB0aGUgcnVsZXMgc2V0
IG91dCBpbiBFQ01BLTI2MiA4LjEyLjkuCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNP
YmplY3QpOwogICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0g
ICAgICAgIHRoaXNPYmplY3QtPm1fYWxsb2NhdGlvblByb2ZpbGUuY2xlYXIoKTsKLSAgICAgICAg
dGhpc09iamVjdC0+bV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQuZmlyZUFsbCgiU3RvcmUg
dG8gcHJvdG90eXBlIHByb3BlcnR5IG9mIGEgZnVuY3Rpb24iKTsKKyAgICAgICAgaWYgKHRoaXNP
YmplY3QtPm1fcmFyZURhdGEpIHsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fcmFyZURhdGEt
PmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpLmZpcmVBbGwoIlN0b3JlIHRvIHByb3Rv
dHlwZSBwcm9wZXJ0eSBvZiBhIGZ1bmN0aW9uIik7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5t
X3JhcmVEYXRhLmNsZWFyKCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEJhc2U6OmRlZmlu
ZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJv
d0V4Y2VwdGlvbik7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAK
ICNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsZWUuaCIKICNp
bmNsdWRlICJKU1Njb3BlLmgiCi0jaW5jbHVkZSAiT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCIK
KyNpbmNsdWRlICJGdW5jdGlvblJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQ4LDcgKzQ4LDcgQEAKIEpTX0VYUE9SVF9QUklWQVRFIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3Io
RXhlY1N0YXRlKik7CiAKIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBnZXRDYWxjdWxhdGVkRGlz
cGxheU5hbWUoQ2FsbEZyYW1lKiwgSlNPYmplY3QqKTsKLSAgICAKKwogY2xhc3MgSlNGdW5jdGlv
biA6IHB1YmxpYyBKU0NhbGxlZSB7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBmcmllbmQg
Y2xhc3MgREZHOjpTcGVjdWxhdGl2ZUpJVDsKQEAgLTY3LDggKzY3LDYgQEAKIAogICAgIHN0YXRp
YyBKU0Z1bmN0aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFi
bGUqLCBKU0dsb2JhbE9iamVjdCopOwogCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKLQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBuYW1lKEV4ZWNTdGF0ZSopOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBkaXNwbGF5TmFtZShFeGVjU3RhdGUqKTsKICAgICBj
b25zdCBTdHJpbmcgY2FsY3VsYXRlZERpc3BsYXlOYW1lKEV4ZWNTdGF0ZSopOwpAQCAtMTAwLDIz
ICs5OCwyOCBAQAogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1f
ZXhlY3V0YWJsZSk7CiAgICAgfQogCi0gICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0
T2ZBbGxvY2F0aW9uUHJvZmlsZSgpCisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qgb2Zmc2V0
T2ZSYXJlRGF0YSgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fYWxsb2NhdGlvblByb2ZpbGUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTRnVuY3Rpb24sIG1fcmFyZURhdGEpOwogICAgIH0KIAotICAgIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKiBhbGxvY2F0aW9uUHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlu
bGluZUNhcGFjaXR5KQorICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhKEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCiAgICAgewotICAgICAgICBpZiAoVU5MSUtF
TFkobV9hbGxvY2F0aW9uUHJvZmlsZS5pc051bGwoKSkpCi0gICAgICAgICAgICByZXR1cm4gY3Jl
YXRlQWxsb2NhdGlvblByb2ZpbGUoZXhlYywgaW5saW5lQ2FwYWNpdHkpOwotICAgICAgICByZXR1
cm4gJm1fYWxsb2NhdGlvblByb2ZpbGU7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9yYXJlRGF0
YSkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmFyZURhdGEoZXhlYywgaW5saW5lQ2FwYWNp
dHkpOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS5nZXQoKTsKICAgICB9CiAKLSAgICBTdHJ1
Y3R1cmUqIGFsbG9jYXRpb25TdHJ1Y3R1cmUoKSB7IHJldHVybiBtX2FsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpOyB9CisgICAgU3RydWN0dXJlKiBhbGxvY2F0aW9uU3RydWN0dXJlKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURh
dGEuZ2V0KCktPmFsbG9jYXRpb25TdHJ1Y3R1cmUoKTsKKyAgICB9CiAKICAgICBJbmxpbmVXYXRj
aHBvaW50U2V0JiBhbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OworICAgICAgICBBU1NFUlQo
bV9yYXJlRGF0YSk7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLmdldCgpLT5hbGxvY2F0aW9u
UHJvZmlsZVdhdGNocG9pbnRTZXQoKTsKICAgICB9CiAKICAgICBib29sIGlzSG9zdE9yQnVpbHRp
bkZ1bmN0aW9uKCkgY29uc3Q7CkBAIC0xMzEsNyArMTM0LDcgQEAKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247CiAKLSAgICBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSogY3JlYXRlQWxsb2NhdGlvblByb2ZpbGUoRXhlY1N0YXRlKiwgc2l6ZV90
IGlubGluZUNhcGFjaXR5KTsKKyAgICBGdW5jdGlvblJhcmVEYXRhKiBjcmVhdGVSYXJlRGF0YShF
eGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSk7CiAKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlID0gRW51bWVyYXRpb25Nb2RlKCkpOwpAQCAtMTYwLDggKzE2Myw3IEBACiAgICAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIG5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIAogICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxl
QmFzZT4gbV9leGVjdXRhYmxlOwotICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlIG1fYWxsb2Nh
dGlvblByb2ZpbGU7Ci0gICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2FsbG9jYXRpb25Qcm9maWxl
V2F0Y2hwb2ludDsKKyAgICBXcml0ZUJhcnJpZXI8RnVuY3Rpb25SYXJlRGF0YT4gbV9yYXJlRGF0
YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCShyZXZpc2lvbiAxODI4NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiBpbmxpbmUgSlNGdW5jdGlvbjo6SlNGdW5jdGlv
bihWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUp
CiAgICAgOiBCYXNlKHZtLCBzY29wZSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0
cnVjdHVyZSgpKQogICAgICwgbV9leGVjdXRhYmxlKHZtLCB0aGlzLCBleGVjdXRhYmxlKQotICAg
ICwgbV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQoQ2xlYXJXYXRjaHBvaW50KSAvLyBTZWUg
Y29tbWVudCBpbiBKU0Z1bmN0aW9uLmNwcCBjb25jZXJuaW5nIHRoZSByZWFzb24gZm9yIHVzaW5n
IENsZWFyV2F0Y2hwb2ludCBhcyBvcHBvc2VkIHRvIElzV2F0Y2hlZC4KKyAgICAsIG1fcmFyZURh
dGEoKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZp
c2lvbiAxODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzMSw2ICsyMzEsNyBAQAogICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgd2Vha01hcERhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0
YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGluZmVycmVkVmFs
dWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CisgICAgZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZS5zZXQoKnRo
aXMsIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAgcHJvbWlzZURlZmVycmVkU3RydWN0dXJlLnNl
dCgqdGhpcywgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBwcm9taXNlUmVhY3Rpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21p
c2VSZWFjdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcx
LDcgQEAKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwogICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IGluZmVycmVkVmFsdWVTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVu
Y3Rpb25SYXJlRGF0YVN0cnVjdHVyZTsKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsKSW5kZXg6IFdlYktpdC54Y3dvcmtzcGFjZS9j
b250ZW50cy54Y3dvcmtzcGFjZWRhdGEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Lnhjd29ya3NwYWNl
L2NvbnRlbnRzLnhjd29ya3NwYWNlZGF0YQkocmV2aXNpb24gMTgyODc0KQorKysgV2ViS2l0Lnhj
d29ya3NwYWNlL2NvbnRlbnRzLnhjd29ya3NwYWNlZGF0YQkod29ya2luZyBjb3B5KQpAQCAtMiw2
ICsyLDE1IEBACiA8V29ya3NwYWNlCiAgICB2ZXJzaW9uID0gIjEuMCI+CiAgICA8RmlsZVJlZgor
ICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25SYXJlRGF0YS5jcHAiPgorICAgPC9GaWxlUmVmPgorICAgPEZpbGVSZWYKKyAgICAgIGxv
Y2F0aW9uID0gImdyb3VwOlNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFy
ZURhdGEuaCI+CisgICA8L0ZpbGVSZWY+CisgICA8RmlsZVJlZgorICAgICAgbG9jYXRpb24gPSAi
Z3JvdXA6U291cmNlIj4KKyAgIDwvRmlsZVJlZj4KKyAgIDxGaWxlUmVmCiAgICAgICBsb2NhdGlv
biA9ICJncm91cDpTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvaiI+CiAgICA8L0ZpbGVS
ZWY+CiAgICA8RmlsZVJlZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250927</attachid>
            <date>2015-04-16 10:24:49 -0700</date>
            <delta_ts>2015-04-16 10:32:32 -0700</delta_ts>
            <desc>Remove additional GPR</desc>
            <filename>allocation_profile_rare_fixed_gpr.patch</filename>
            <type>text/plain</type>
            <size>41143</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjg3
NCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA0
LTE1ICBCYXNpbGUgQ2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKworICAgICAg
ICBFeHRyYWN0IHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUgZnJvbSBKU0Z1bmN0aW9uIGludG8gYSBy
YXJlIG9iamVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJLaXQueGN3b3Jrc3BhY2UvY29udGVudHMueGN3b3Jrc3BhY2VkYXRhOgorCiAyMDE1
LTA0LTE1ICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDdXN0b20gQ1NTIGN1cnNvcnMgZG8gbm90IHVzZSAtd2Via2l0LWltYWdlLXNldCBvbiBy
ZXRpbmEgZGlzcGxheXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNDQ4LDYgKzQ0OCw3IEBACiAgICAgcnVudGltZS9GdW5jdGlvbkV4
ZWN1dGFibGVEdW1wLmNwcAogICAgIHJ1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNw
cAogICAgIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9GdW5jdGlv
blJhcmVEYXRhLmNwcAogICAgIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAogICAgIHJ1bnRpbWUv
SWRlbnRpZmllci5jcHAKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE1LTA0LTE1
ICBCYXNpbGUgQ2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKyAKKyAgICAgICAg
RXh0cmFjdCB0aGUgYWxsb2NhdGlvbiBwcm9maWxlIGZyb20gSlNGdW5jdGlvbiBpbnRvIGEgcmFy
ZSBvYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MzgwNworIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAKKyAgICAg
ICAgVGhlIGFsbG9jYXRpb24gcHJvZmlsZSBpcyBvbmx5IG5lZWRlZCBmb3IgdGhvc2UgZnVuY3Rp
b25zIHRoYXQgYXJlIHVzZWQKKyAgICAgICAgdG8gY3JlYXRlIG9iamVjdHMgd2l0aCBbbmV3XS4K
KyAgICAgICAgRXh0cmFjdGluZyBpdCBpbnRvIGl0cyBvd24gSlNDZWxsIHJlbW92ZXMgdGhlIG5l
ZWQgZm9yIEpTRnVuY3Rpb24gYW5kCisgICAgICAgIEpTQ2FsbGVlIHRvIGJlIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0cywgd2hpY2ggc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2VzIGluIG1vc3QKKyAg
ICAgICAgY2FzZXMgYXQgdGhlIGNvc3Qgb2YgYW4gZXh0cmEgcG9pbnRlciBkZXJlZmVyZW5jZSB3
aGVuIHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUKKyAgICAgICAgaXMgYWN0dWFsbHkgbmVlZGVkLgor
IAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAg
ICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBy
dW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25SYXJlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKToKKyAgICAgICAgKEpT
Qzo6RnVuY3Rpb25SYXJlRGF0YTo6fkZ1bmN0aW9uUmFyZURhdGEpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvblJhcmVEYXRhOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9GdW5j
dGlvblJhcmVEYXRhLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0
YTo6YWxsb2NhdGlvblByb2ZpbGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjph
bGxvY2F0aW9uU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6YWxs
b2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQm91bmRGdW5jdGlvbjo6ZGVzdHJveSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2FsbGVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDYWxsZWU6OmRlc3Ryb3kpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDYWxsZWUuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlUmFyZURhdGEpOgorICAgICAgICAoSlND
OjpKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
cHV0KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6Y3JlYXRlQWxsb2NhdGlvblByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpvZmZzZXRP
ZlJhcmVEYXRhKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6cmFyZURhdGEpOgorICAgICAg
ICAoSlNDOjpKU0Z1bmN0aW9uOjphbGxvY2F0aW9uU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246OmFsbG9jYXRpb25Qcm9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTRnVuY3Rp
b246OkpTRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlND
OjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAKIDIwMTUtMDQtMTUgIEpvcmRh
biBIYXJiYW5kICA8bGpoYXJiQGdtYWlsLmNvbT4KIAogICAgICAgICBTdHJpbmcucHJvdG90eXBl
LnN0YXJ0c1dpdGgvZW5kc1dpdGgvaW5jbHVkZXMgaGF2ZSB3cm9uZyBsZW5ndGggaW4gcjE4MjY3
MwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAx
ODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MTYsNiArNzE2LDcgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25FeGVjdXRhYmxlRHVt
cC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEZ1bmN0aW9uUHJvdG90eXBlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRnVuY3Rpb25SYXJlRGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXEdldHRlclNldHRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXElkZW50aWZpZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxJbmRleGluZ1R5cGUuY3BwIiAvPgpAQCAtMTQ5Niw2ICsxNDk3LDcgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25Q
cm90b3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rp
b25SYXJlRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxHZW5l
cmljQXJndW1lbnRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEdlbmVyaWNPZmZzZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtNjA2LDYgKzYwNiw5IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uUHJvdG90eXBlLmNwcCI+CiAgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25SYXJlRGF0YS5jcHAiPgorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEdldHRlclNldHRlci5jcHAiPgogICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0yNjMzLDYgKzI2MzYsOSBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblByb3RvdHlwZS5oIj4KICAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblJhcmVEYXRhLmgiPgorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEdldHRlclNldHRlci5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NTMs
NiArOTUzLDggQEAKIAkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGkuanMgaW4g
Q29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLzsgfTsKIAkJNURCQjE1MjUx
MzFEMEJENzAwNTZBRDM2IC8qIG1pbmlkb20uanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUg
LyogbWluaWRvbS5qcyAqLzsgfTsKIAkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0
ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjY5MkE4NTQwMjU1NTk3RDAxRkY2MEY3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CisJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZD
MSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVE
YXRhLmNwcCAqLzsgfTsKKwkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFy
ZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYy
RDJEMzhFMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjUwN0QyOUUwRTg3MUU1RTAw
RDdEODk2IC8qIEpTVHlwZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjUxMTIyRkQx
NDA0NkE0QzAwMkIxMDFEIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDcz
Njk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCTY1MTEyMkZFMTQwNDZB
NEMwMDJCMTAxRCAvKiBsaWJlZGl0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1RDhBRDAwRTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVkaXQu
ZHlsaWIgKi87IH07CkBAIC0yNjQ0LDYgKzI2NDYsOCBAQAogCQk1REFGRDZDQjE0NkI2ODYzMDBG
QkVGQjQgLyogSlNDLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEpTQy54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUREREY0NDYxNEZFRTcyMjAwQjRGQjREIC8qIExMSW50
RGVzaXJlZE9mZnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRE
ZXNpcmVkT2Zmc2V0cy5oOyBwYXRoID0gTExJbnRPZmZzZXRzL0xMSW50RGVzaXJlZE9mZnNldHMu
aDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNURFM0QwRjQwREQ4RERG
QjAwNDY4NzE0IC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJLaXRBdmFpbGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNjJEMkQzOEQxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25SYXJlRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyRDJEMzhFMUFERjEwM0YwMDAyMDZDMSAv
KiBGdW5jdGlvblJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUwN0QyOTcw
RTg3MUU0QTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNUeXBlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTEx
MjJFNTE0MDQ2OUJBMDAyQjEwMUQgLyogdGVzdFJlZ0V4cC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSB0ZXN0UmVnRXhwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8u
ZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RSZWdFeHA7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC00Mzk3LDYgKzQ0MDEsOCBAQAogCQkJ
CTUyQjMxMEZBMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAq
LywKIAkJCQlGNjkyQTg1QzAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUuY3Bw
ICovLAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5o
ICovLAorCQkJCTYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNw
cCAqLywKKwkJCQk2MkQyRDM4RTFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5o
ICovLAogCQkJCTBGRTA1MDExMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1lbnRzLmgg
Ki8sCiAJCQkJMEZFMDUwMTIxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmggKi8sCiAJCQkJMEZFMDUwMTMxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNPZmZzZXQu
aCAqLywKQEAgLTU2MjQsNiArNTYzMCw3IEBACiAJCQkJMEYyQjlDRjcxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRl
Y29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFDMjdGMTRCRUFBODIwMEFE
QzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcy
MzBFRDFDRTMzMDBGMUY2ODEgLyogQnl0ZWNvZGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtNzQ0NSw2ICs3NDUyLDcgQEAKIAkJCQlBNUJBMTVFQzE4MjM0MEI0MDBBODJFNjkgLyogUmVt
b3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQlB
NUJBMTVFRTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNo
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5j
dGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4
RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4ODUw
RUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQAogICAg
IEFTU0VSVChqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKS0+bWV0aG9kVGFibGUodm0p
LT5nZXRDb25zdHJ1Y3REYXRhKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLCBjb25z
dHJ1Y3REYXRhKSA9PSBDb25zdHJ1Y3RUeXBlSlMpOwogI2VuZGlmCiAgICAgCi0gICAgcmV0dXJu
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0
b3IpLT5hbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxpbmVDYXBhY2l0eSktPnN0cnVjdHVyZSgp
KTsKKyAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywganNDYXN0PEpTRnVuY3Rp
b24qPihjb25zdHJ1Y3RvciktPnJhcmVEYXRhKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+YWxsb2Nh
dGlvblByb2ZpbGUoKS0+c3RydWN0dXJlKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ5MywxNiArMzQ5MywyMSBAQAogICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJl
ZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByYXJlRGF0YUdQUiA9
IHJhcmVEYXRhLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwogICAgICAgICBHUFJSZWcgYWxsb2NhdG9yR1BSID0gYWxsb2NhdG9yLmdwcigpOwogICAgICAg
ICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIC8vIFJhcmUgZGF0YSBpcyBvbmx5
IHVzZWQgdG8gYWNjZXNzIHRoZSBhbGxvY2F0b3IgJiBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gV2Ug
Y2FuIGF2b2lkIHVzaW5nIGFuIGFkZGl0aW9uYWwgR1BSIHRoaXMgd2F5CisgICAgICAgIEdQUlJl
ZyByYXJlRGF0YUdQUiA9IHN0cnVjdHVyZUdQUjsKICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9u
UHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkp
LCBhbGxvY2F0b3JHUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVH
UFIpOwotICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgYWxsb2NhdG9yR1BSKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRh
KCkpLCByYXJlRGF0YUdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0YUdQUikpOworICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVE
YXRhOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvckdQUik7CisgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6
Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpv
ZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgZW1pdEFsbG9jYXRl
SlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQUiwgVHJ1c3RlZElt
bVB0cigwKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogCiAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpcywg
cmVzdWx0R1BSLCBjYWxsZWVHUFIsIG5vZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
cmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU2OCwxMiArMzU2OCwxNiBAQAogICAg
ICAgICBHUFJSZWcgYWxsb2NhdG9yR1BSID0gYWxsb2NhdG9yLmdwcigpOwogICAgICAgICBHUFJS
ZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIC8vIFJhcmUgZGF0YSBpcyBvbmx5IHVzZWQg
dG8gYWNjZXNzIHRoZSBhbGxvY2F0b3IgJiBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gV2UgY2FuIGF2
b2lkIHVzaW5nIGFuIGFkZGl0aW9uYWwgR1BSIHRoaXMgd2F5CisgICAgICAgIEdQUlJlZyByYXJl
RGF0YUdQUiA9IHN0cnVjdHVyZUdQUjsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Qgc2xvd1BhdGg7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmls
ZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxv
Y2F0b3JHUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNh
bGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVHUFIpOwot
ICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgYWxsb2NhdG9yR1BSKSk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSks
IHJhcmVEYXRhR1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSKSk7CisgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6
Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpv
ZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNl
dE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09i
amVjdChyZXN1bHRHUFIsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBUcnVzdGVkSW1tUHRy
KDApLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1
bHRHUFIsIGNhbGxlZUdQUiwgbm9kZS0+aW5saW5lQ2FwYWNpdHkoKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxODI4NzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OTUsMTUgKzY5NSwxNyBAQAogewogICAgIGludCBjYWxsZWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CisgICAg
UmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVn
ID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdp
c3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QyOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9
IHJlZ1QzOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxv
Y2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2Nh
dG9yKCkpLCBhbGxvY2F0b3JSZWcpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpT
RnVuY3Rpb246Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Q
cm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRvclJlZykpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRh
UmVnKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnKSk7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZz
ZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0
T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVE
YXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZVJl
Zyk7CiAKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJl
ZywgcmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTgyODc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MTQsMTUgKzkxNCwxNyBAQAogewogICAgIGludCBjYWxsZWUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7Cisg
ICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmVzdWx0
UmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBS
ZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QyOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJl
ZyA9IHJlZ1QzOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGNhbGxlZSwgY2FsbGVlUmVnKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkFsbG9jYXRp
b25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3Io
KSksIGFsbG9jYXRvclJlZyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5j
dGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVSZWcpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2NhdG9yUmVnKSk7CisgICAgbG9hZFB0cihBZGRyZXNz
KGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcpKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9m
QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFs
bG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFS
ZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsK
IAogICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBy
ZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZp
c2lvbiAxODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNzQwLDkgKzc0MCwxMCBAQAogICAg
IHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkaSA4W1BDXSwgdDAKICAgICBsb2FkcCBQYXlsb2Fk
T2Zmc2V0W2NmciwgdDAsIDhdLCB0MAotICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fYWxsb2NhdGlv
blByb2ZpbGUgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6bV9hbGxvY2F0b3JbdDBdLCB0MQot
ICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fYWxsb2NhdGlvblByb2ZpbGUgKyBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZTo6bV9zdHJ1Y3R1cmVbdDBdLCB0MgotICAgIGJ0cHogdDEsIC5vcENyZWF0ZVRo
aXNTbG93CisgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9yYXJlRGF0YVt0MF0sIHQ0CisgICAgYnRw
eiB0NCwgLm9wQ3JlYXRlVGhpc1Nsb3cKKyAgICBsb2FkcCBGdW5jdGlvblJhcmVEYXRhOjptX2Fs
bG9jYXRpb25Qcm9maWxlICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om1fYWxsb2NhdG9yW3Q0
XSwgdDEKKyAgICBsb2FkcCBGdW5jdGlvblJhcmVEYXRhOjptX2FsbG9jYXRpb25Qcm9maWxlICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om1fc3RydWN0dXJlW3Q0XSwgdDIKICAgICBhbGxvY2F0
ZUpTT2JqZWN0KHQxLCB0MiwgdDAsIHQzLCAub3BDcmVhdGVUaGlzU2xvdykKICAgICBsb2FkaSA0
W1BDXSwgdDEKICAgICBzdG9yZWkgQ2VsbFRhZywgVGFnT2Zmc2V0W2NmciwgdDEsIDhdCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYyNiw5ICs2
MjYsMTAgQEAKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9u
KDIsIHQwKQogICAgIGxvYWRwIFtjZnIsIHQwLCA4XSwgdDAKLSAgICBsb2FkcCBKU0Z1bmN0aW9u
OjptX2FsbG9jYXRpb25Qcm9maWxlICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om1fYWxsb2Nh
dG9yW3QwXSwgdDEKLSAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2FsbG9jYXRpb25Qcm9maWxlICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om1fc3RydWN0dXJlW3QwXSwgdDIKLSAgICBidHB6IHQx
LCAub3BDcmVhdGVUaGlzU2xvdworICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fcmFyZURhdGFbdDBd
LCB0NAorICAgIGJ0cHogdDQsIC5vcENyZWF0ZVRoaXNTbG93CisgICAgbG9hZHAgRnVuY3Rpb25S
YXJlRGF0YTo6bV9hbGxvY2F0aW9uUHJvZmlsZSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpt
X2FsbG9jYXRvclt0NF0sIHQxCisgICAgbG9hZHAgRnVuY3Rpb25SYXJlRGF0YTo6bV9hbGxvY2F0
aW9uUHJvZmlsZSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjptX3N0cnVjdHVyZVt0NF0sIHQy
CiAgICAgYWxsb2NhdGVKU09iamVjdCh0MSwgdDIsIHQwLCB0MywgLm9wQ3JlYXRlVGhpc1Nsb3cp
CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQogICAgIHN0b3JlcSB0MCwgW2Nmciwg
dDEsIDhdCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw3ICsy
MzYsNyBAQAogI2VuZGlmCiAKICAgICBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSBwY1szXS51Lm9w
ZXJhbmQ7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25zdHJ1Y3Rvci0+YWxsb2NhdGlv
blByb2ZpbGUoZXhlYywgaW5saW5lQ2FwYWNpdHkpLT5zdHJ1Y3R1cmUoKTsKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGNvbnN0cnVjdG9yLT5yYXJlRGF0YShleGVjLCBpbmxpbmVDYXBhY2l0
eSktPmFsbG9jYXRpb25Qcm9maWxlKCktPnN0cnVjdHVyZSgpOwogICAgIFJFVFVSTihjb25zdHJ1
Y3RFbXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25SYXJlRGF0YS5oIgorCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEZ1
bmN0aW9uUmFyZURhdGE6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uUmFyZURhdGEiLCAwLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uUmFyZURhdGEpIH07CisKK0Z1bmN0aW9uUmFyZURhdGEq
IEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZShWTSYgdm0sIEpTT2JqZWN0KiBwcm90b3R5cGUsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSkKK3sKKyAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uUmFyZURhdGE+KHZtLmhlYXApKSBG
dW5jdGlvblJhcmVEYXRhKHZtKTsKKyAgICByYXJlRGF0YS0+ZmluaXNoQ3JlYXRpb24odm0sIHBy
b3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpOworICAgIHJldHVybiByYXJlRGF0YTsKK30KKwordm9p
ZCBGdW5jdGlvblJhcmVEYXRhOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBGdW5jdGlv
blJhcmVEYXRhKiByYXJlRGF0YSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uUmFyZURhdGEqPihjZWxs
KTsKKyAgICByYXJlRGF0YS0+RnVuY3Rpb25SYXJlRGF0YTo6fkZ1bmN0aW9uUmFyZURhdGEoKTsK
K30KKworU3RydWN0dXJlKiBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEZ1
bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IGpzQ2FzdDxGdW5j
dGlvblJhcmVEYXRhKj4oY2VsbCk7CisKKyAgICByYXJlRGF0YS0+bV9hbGxvY2F0aW9uUHJvZmls
ZS52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworRnVuY3Rpb25SYXJlRGF0YTo6RnVuY3Rp
b25SYXJlRGF0YShWTSYgdm0pCisgICAgOiBCYXNlKHZtLCB2bS5mdW5jdGlvblJhcmVEYXRhU3Ry
dWN0dXJlLmdldCgpKQorICAgICwgbV9hbGxvY2F0aW9uUHJvZmlsZSgpCisgICAgLy8gV2UgaW5p
dGlhbGl6ZSBibGluZCBzbyB0aGF0IGNoYW5nZXMgdG8gdGhlIHByb3RvdHlwZSBhZnRlciBmdW5j
dGlvbiBjcmVhdGlvbiBidXQgYmVmb3JlCisgICAgLy8gdGhlIG9wdGltaXplciBraWNrcyBpbiBk
b24ndCBkaXNhYmxlIG9wdGltaXphdGlvbnMuIE9uY2UgdGhlIG9wdGltaXplciBraWNrcyBpbiwg
dGhlCisgICAgLy8gd2F0Y2hwb2ludCB3aWxsIHN0YXJ0IHdhdGNoaW5nIGFuZCBhbnkgY2hhbmdl
cyB3aWxsIGJvdGggZm9yY2UgZGVvcHRpbWl6YXRpb24gYW5kIGRpc2FibGUKKyAgICAvLyBmdXR1
cmUgYXR0ZW1wdHMgdG8gb3B0aW1pemUuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgYXJl
IGd1YXJhbnRlZWQgdGhhdCB0aGUKKyAgICAvLyBhbGxvY2F0aW9uIHByb2ZpbGUgaXMgY2hhbmdl
ZCBleGFjdGx5IG9uY2UgcHJpb3IgdG8gb3B0aW1pemF0aW9ucyBraWNraW5nIGluLiBXZSBjb3Vs
ZCBiZQorICAgIC8vIHNtYXJ0ZXIgYW5kIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHBy
b3RvdHlwZSBpcyBjbG9iYmVyZWQgYW5kIG9ubHkgb3B0aW1pemUgaWYgaXQKKyAgICAvLyB3YXMg
Y2xvYmJlcmVkIGV4YWN0bHkgb25jZSwgYnV0IHRoYXQgc2VlbXMgbGlrZSBvdmVya2lsbC4gSW4g
YWxtb3N0IGFsbCBjYXNlcyBpdCB3aWxsIGJlCisgICAgLy8gY2xvYmJlcmVkIG9uY2UsIGFuZCBp
ZiBpdCdzIGNsb2JiZXJlZCBtb3JlIHRoYW4gb25jZSwgdGhhdCB3aWxsIHByb2JhYmx5IG9ubHkg
b2NjdXIKKyAgICAvLyBiZWZvcmUgd2Ugc3RhcnRlZCBvcHRpbWl6aW5nLCBhbnl3YXkuCisgICAg
LCBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludChDbGVhcldhdGNocG9pbnQpCit7Cit9CisK
K0Z1bmN0aW9uUmFyZURhdGE6On5GdW5jdGlvblJhcmVEYXRhKCkKK3sKK30KKwordm9pZCBGdW5j
dGlvblJhcmVEYXRhOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBwcm90b3R5cGUs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgbV9hbGxvY2F0aW9uUHJvZmlsZS5pbml0aWFsaXplKHZtLCB0aGlzLCBwcm90b3R5cGUs
IGlubGluZUNhcGFjaXR5KTsKK30KKworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDkyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZ1bmN0aW9uUmFyZURh
dGFfaAorI2RlZmluZSBGdW5jdGlvblJhcmVEYXRhX2gKKworI2luY2x1ZGUgIkpTQ2VsbC5oIgor
I2luY2x1ZGUgIk9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2lu
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CituYW1lc3BhY2UgREZHIHsKK2NsYXNzIFNwZWN1bGF0aXZl
SklUOworY2xhc3MgSklUQ29tcGlsZXI7Cit9CisKK2NsYXNzIEZ1bmN0aW9uUmFyZURhdGEgOiBw
dWJsaWMgSlNDZWxsIHsKKyAgICBmcmllbmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBjbGFzcyBE
Rkc6OlNwZWN1bGF0aXZlSklUOworICAgIGZyaWVuZCBjbGFzcyBERkc6OkpJVENvbXBpbGVyOwor
ICAgIGZyaWVuZCBjbGFzcyBWTTsKKyAgICAKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBC
YXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVy
ZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyBGdW5jdGlv
blJhcmVEYXRhKiBjcmVhdGUoVk0mIHZtLCBKU09iamVjdCogcHJvdG90eXBlLCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHkpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9
IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIGlubGluZSBwdHJk
aWZmX3Qgb2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpCisgICAgeworICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uUmFyZURhdGEsIG1fYWxsb2NhdGlvblByb2ZpbGUpOwor
ICAgIH0KKworICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBhbGxvY2F0aW9uUHJvZmlsZSgp
CisgICAgeworICAgICAgICByZXR1cm4gJm1fYWxsb2NhdGlvblByb2ZpbGU7CisgICAgfQorCisg
ICAgU3RydWN0dXJlKiBhbGxvY2F0aW9uU3RydWN0dXJlKCkgeyByZXR1cm4gbV9hbGxvY2F0aW9u
UHJvZmlsZS5zdHJ1Y3R1cmUoKTsgfQorCisgICAgSW5saW5lV2F0Y2hwb2ludFNldCYgYWxsb2Nh
dGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FsbG9j
YXRpb25Qcm9maWxlV2F0Y2hwb2ludDsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBGdW5jdGlv
blJhcmVEYXRhKFZNJiB2bSk7CisgICAgfkZ1bmN0aW9uUmFyZURhdGEoKTsKKworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogcHJvdG90eXBlLCBzaXplX3QgaW5saW5l
Q2FwYWNpdHkpOworICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOworCitwcml2YXRlOgor
CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKworICAgIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlIG1fYWxsb2NhdGlvblByb2ZpbGU7CisgICAgSW5saW5lV2F0Y2hwb2lu
dFNldCBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRnVuY3Rpb25SYXJlRGF0YV9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE4
Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDExICs4Niw2IEBACiAgICAgcmV0dXJuIGZ1bmN0aW9u
OwogfQogCi12b2lkIEpTQm91bmRGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0g
ICAgc3RhdGljX2Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oY2VsbCktPkpTQm91bmRGdW5jdGlvbjo6
fkpTQm91bmRGdW5jdGlvbigpOwotfQotCiBib29sIEpTQm91bmRGdW5jdGlvbjo6Y3VzdG9tSGFz
SW5zdGFuY2UoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIHJldHVybiBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4ob2JqZWN0KS0+bV90YXJn
ZXRGdW5jdGlvbi0+aGFzSW5zdGFuY2UoZXhlYywgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDE4Mjg3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw2IEBACiAKICAgICBzdGF0aWMgSlNCb3VuZEZ1bmN0
aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlv
biwgSlNWYWx1ZSBib3VuZFRoaXMsIEpTVmFsdWUgYm91bmRBcmdzLCBpbnQsIGNvbnN0IFN0cmlu
ZyYpOwogICAgIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KICAgICBzdGF0
aWMgYm9vbCBjdXN0b21IYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUp
OwogCiAgICAgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uKCkgeyByZXR1cm4gbV90YXJnZXRGdW5j
dGlvbi5nZXQoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxs
ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Fs
bGVlLmNwcAkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksNiBAQAogCiBjb25z
dCBDbGFzc0luZm8gSlNDYWxsZWU6OnNfaW5mbyA9IHsgIkNhbGxlZSIsICZCYXNlOjpzX2luZm8s
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsZWUpIH07CiAKLXZvaWQgSlNDYWxsZWU6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0PEpTQ2FsbGVlKj4oY2VsbCkt
PkpTQ2FsbGVlOjp+SlNDYWxsZWUoKTsKLX0KLQogSlNDYWxsZWU6OkpTQ2FsbGVlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3Njb3BlKHZtLCB0aGlzLCBnbG9iYWxPYmpl
Y3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHJldmlz
aW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgSlNDYWxsZWVfaAogI2Rl
ZmluZSBKU0NhbGxlZV9oCiAKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgorI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRl
ICJKU1Njb3BlLmgiCiAKQEAgLTM2LDcgKzM2LDcgQEAKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIAogCi1jbGFzcyBKU0NhbGxlZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7
CitjbGFzcyBKU0NhbGxlZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICBmcmllbmQg
Y2xhc3MgSklUOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGZyaWVuZCBjbGFzcyBERkc6OlNw
ZWN1bGF0aXZlSklUOwpAQCAtNDUsNyArNDUsNyBAQAogICAgIGZyaWVuZCBjbGFzcyBWTTsKIAog
cHVibGljOgotICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKKyAgICB0eXBl
ZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEltcGxlbWVudHNIYXNJbnN0YW5j
ZTsKIAogICAgIHN0YXRpYyBKU0NhbGxlZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNTY29wZSogc2NvcGUpCkBAIC01NSw4ICs1NSw2IEBACiAgICAgICAg
IHJldHVybiBjYWxsZWU7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7Ci0KICAgICBKU1Njb3BlKiBzY29wZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9z
Y29wZS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMjQgKzg1LDkgQEAKICAg
ICByZXR1cm4gZnVuY3Rpb247CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwq
IGNlbGwpCi17Ci0gICAgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpLT5KU0Z1bmN0aW9u
Ojp+SlNGdW5jdGlvbigpOwotfQotCiBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBC
YXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fZXhlY3V0YWJsZSgpCi0g
ICAgLy8gV2UgaW5pdGlhbGl6ZSBibGluZCBzbyB0aGF0IGNoYW5nZXMgdG8gdGhlIHByb3RvdHlw
ZSBhZnRlciBmdW5jdGlvbiBjcmVhdGlvbiBidXQgYmVmb3JlCi0gICAgLy8gdGhlIG9wdGltaXpl
ciBraWNrcyBpbiBkb24ndCBkaXNhYmxlIG9wdGltaXphdGlvbnMuIE9uY2UgdGhlIG9wdGltaXpl
ciBraWNrcyBpbiwgdGhlCi0gICAgLy8gd2F0Y2hwb2ludCB3aWxsIHN0YXJ0IHdhdGNoaW5nIGFu
ZCBhbnkgY2hhbmdlcyB3aWxsIGJvdGggZm9yY2UgZGVvcHRpbWl6YXRpb24gYW5kIGRpc2FibGUK
LSAgICAvLyBmdXR1cmUgYXR0ZW1wdHMgdG8gb3B0aW1pemUuIFRoaXMgaXMgbmVjZXNzYXJ5IGJl
Y2F1c2Ugd2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGUKLSAgICAvLyBhbGxvY2F0aW9uIHByb2Zp
bGUgaXMgY2hhbmdlZCBleGFjdGx5IG9uY2UgcHJpb3IgdG8gb3B0aW1pemF0aW9ucyBraWNraW5n
IGluLiBXZSBjb3VsZCBiZQotICAgIC8vIHNtYXJ0ZXIgYW5kIGNvdW50IHRoZSBudW1iZXIgb2Yg
dGltZXMgdGhlIHByb3RvdHlwZSBpcyBjbG9iYmVyZWQgYW5kIG9ubHkgb3B0aW1pemUgaWYgaXQK
LSAgICAvLyB3YXMgY2xvYmJlcmVkIGV4YWN0bHkgb25jZSwgYnV0IHRoYXQgc2VlbXMgbGlrZSBv
dmVya2lsbC4gSW4gYWxtb3N0IGFsbCBjYXNlcyBpdCB3aWxsIGJlCi0gICAgLy8gY2xvYmJlcmVk
IG9uY2UsIGFuZCBpZiBpdCdzIGNsb2JiZXJlZCBtb3JlIHRoYW4gb25jZSwgdGhhdCB3aWxsIHBy
b2JhYmx5IG9ubHkgb2NjdXIKLSAgICAvLyBiZWZvcmUgd2Ugc3RhcnRlZCBvcHRpbWl6aW5nLCBh
bnl3YXkuCi0gICAgLCBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludChDbGVhcldhdGNocG9p
bnQpCiB7CiB9CiAKQEAgLTEyMywxNCArMTA4LDE1IEBACiAgICAgcmV0dXJuIGZ1bmN0aW9uOwog
fQogCi1PYmplY3RBbGxvY2F0aW9uUHJvZmlsZSogSlNGdW5jdGlvbjo6Y3JlYXRlQWxsb2NhdGlv
blByb2ZpbGUoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpCitGdW5jdGlv
blJhcmVEYXRhKiBKU0Z1bmN0aW9uOjpjcmVhdGVSYXJlRGF0YShFeGVjU3RhdGUqIGV4ZWMsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpT
T2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSkpOwogICAgIGlmICghcHJvdG90eXBlKQogICAgICAg
ICBwcm90b3R5cGUgPSBnbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgbV9h
bGxvY2F0aW9uUHJvZmlsZS5pbml0aWFsaXplKGdsb2JhbE9iamVjdCgpLT52bSgpLCB0aGlzLCBw
cm90b3R5cGUsIGlubGluZUNhcGFjaXR5KTsKLSAgICByZXR1cm4gJm1fYWxsb2NhdGlvblByb2Zp
bGU7CisgICAgRnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSBGdW5jdGlvblJhcmVEYXRhOjpj
cmVhdGUodm0sIHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpOworICAgIG1fcmFyZURhdGEuc2V0
KHZtLCB0aGlzLCByYXJlRGF0YSk7CisgICAgcmV0dXJuIG1fcmFyZURhdGEuZ2V0KCk7CiB9CiAK
IFN0cmluZyBKU0Z1bmN0aW9uOjpuYW1lKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE3Niw3ICsxNjIs
OCBAQAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9leGVjdXRhYmxlKTsKLSAgICB0aGlzT2Jq
ZWN0LT5tX2FsbG9jYXRpb25Qcm9maWxlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIGlm
ICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRhKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9yYXJlRGF0YSk7CiB9CiAKIENhbGxUeXBlIEpTRnVuY3Rpb246OmdldENhbGxEYXRh
KEpTQ2VsbCogY2VsbCwgQ2FsbERhdGEmIGNhbGxEYXRhKQpAQCAtNDAyLDkgKzM4OSwxMSBAQAog
ICAgICAgICAvLyBmb2xsb3dpbmcgdGhlIHJ1bGVzIHNldCBvdXQgaW4gRUNNQS0yNjIgOC4xMi45
LgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0KTsKICAgICAgICAgdGhpc09i
amVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2Fs
bG9jYXRpb25Qcm9maWxlLmNsZWFyKCk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fYWxsb2NhdGlv
blByb2ZpbGVXYXRjaHBvaW50LmZpcmVBbGwoIlN0b3JlIHRvIHByb3RvdHlwZSBwcm9wZXJ0eSBv
ZiBhIGZ1bmN0aW9uIik7Ci0gICAgICAgIC8vIERvbid0IGFsbG93IHRoaXMgdG8gYmUgY2FjaGVk
LCBzaW5jZSBhIFtbUHV0XV0gbXVzdCBjbGVhciBtX2FsbG9jYXRpb25Qcm9maWxlLgorICAgICAg
ICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkgeworICAgICAgICAgICAgdGhpc09iamVjdC0+
bV9yYXJlRGF0YS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkuZmlyZUFsbCgiU3Rv
cmUgdG8gcHJvdG90eXBlIHByb3BlcnR5IG9mIGEgZnVuY3Rpb24iKTsKKyAgICAgICAgICAgIHRo
aXNPYmplY3QtPm1fcmFyZURhdGEuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBEb24n
dCBhbGxvdyB0aGlzIHRvIGJlIGNhY2hlZCwgc2luY2UgYSBbW1B1dF1dIG11c3QgY2xlYXIgbV9y
YXJlRGF0YS4KICAgICAgICAgUHV0UHJvcGVydHlTbG90IGRvbnRDYWNoZSh0aGlzT2JqZWN0KTsK
ICAgICAgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IGRvbnRDYWNoZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ0OSw4ICs0MzgsMTAgQEAKICAgICAg
ICAgLy8gZm9sbG93aW5nIHRoZSBydWxlcyBzZXQgb3V0IGluIEVDTUEtMjYyIDguMTIuOS4KICAg
ICAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCk7CiAgICAgICAgIHRoaXNPYmplY3Qt
Pm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9hbGxvY2F0
aW9uUHJvZmlsZS5jbGVhcigpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2FsbG9jYXRpb25Qcm9m
aWxlV2F0Y2hwb2ludC5maXJlQWxsKCJTdG9yZSB0byBwcm90b3R5cGUgcHJvcGVydHkgb2YgYSBm
dW5jdGlvbiIpOworICAgICAgICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkgeworICAgICAg
ICAgICAgdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50
U2V0KCkuZmlyZUFsbCgiU3RvcmUgdG8gcHJvdG90eXBlIHByb3BlcnR5IG9mIGEgZnVuY3Rpb24i
KTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fcmFyZURhdGEuY2xlYXIoKTsKKyAgICAgICAg
fQogICAgICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE4
Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJKU0NhbGxlZS5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIKLSNpbmNsdWRl
ICJPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uUmFyZURhdGEu
aCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDgsNyAr
NDgsNyBAQAogSlNfRVhQT1JUX1BSSVZBVEUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKIAogSlNfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShDYWxsRnJhbWUqLCBKU09iamVj
dCopOwotICAgIAorCiBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTQ2FsbGVlIHsKICAgICBm
cmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwpA
QCAtNjcsOCArNjcsNiBAQAogCiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUJ1aWx0aW5G
dW5jdGlvbihWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIG5hbWUoRXhlY1N0YXRlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGRp
c3BsYXlOYW1lKEV4ZWNTdGF0ZSopOwogICAgIGNvbnN0IFN0cmluZyBjYWxjdWxhdGVkRGlzcGxh
eU5hbWUoRXhlY1N0YXRlKik7CkBAIC0xMDAsMjMgKzk4LDI4IEBACiAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkKKyAgICBz
dGF0aWMgaW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJhcmVEYXRhKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9hbGxvY2F0aW9uUHJvZmlsZSk7
CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9yYXJlRGF0YSk7
CiAgICAgfQogCi0gICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUqIGFsbG9jYXRpb25Qcm9maWxl
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCisgICAgRnVuY3Rpb25S
YXJlRGF0YSogcmFyZURhdGEoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0
eSkKICAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShtX2FsbG9jYXRpb25Qcm9maWxlLmlzTnVs
bCgpKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVBbGxvY2F0aW9uUHJvZmlsZShleGVjLCBp
bmxpbmVDYXBhY2l0eSk7Ci0gICAgICAgIHJldHVybiAmbV9hbGxvY2F0aW9uUHJvZmlsZTsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFtX3JhcmVEYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVh
dGVSYXJlRGF0YShleGVjLCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIHJldHVybiBtX3JhcmVE
YXRhLmdldCgpOwogICAgIH0KIAotICAgIFN0cnVjdHVyZSogYWxsb2NhdGlvblN0cnVjdHVyZSgp
IHsgcmV0dXJuIG1fYWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7IH0KKyAgICBTdHJ1Y3R1
cmUqIGFsbG9jYXRpb25TdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmFyZURh
dGEpOworICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS5nZXQoKS0+YWxsb2NhdGlvblN0cnVjdHVy
ZSgpOworICAgIH0KIAogICAgIElubGluZVdhdGNocG9pbnRTZXQmIGFsbG9jYXRpb25Qcm9maWxl
V2F0Y2hwb2ludFNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9hbGxvY2F0aW9uUHJvZmls
ZVdhdGNocG9pbnQ7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0dXJu
IG1fcmFyZURhdGEuZ2V0KCktPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpOwogICAg
IH0KIAogICAgIGJvb2wgaXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSBjb25zdDsKQEAgLTEzMSw3
ICsxMzQsNyBAQAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxl
KiwgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB1c2luZyBCYXNlOjpmaW5p
c2hDcmVhdGlvbjsKIAotICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBjcmVhdGVBbGxvY2F0
aW9uUHJvZmlsZShFeGVjU3RhdGUqLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpOworICAgIEZ1bmN0
aW9uUmFyZURhdGEqIGNyZWF0ZVJhcmVEYXRhKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5KTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFbnVtZXJhdGlvbk1vZGUoKSk7
CkBAIC0xNjAsOCArMTYzLDcgQEAKICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgbmFtZUdldHRl
cihFeGVjU3RhdGUqLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwog
CiAgICAgV3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBtX2V4ZWN1dGFibGU7Ci0gICAgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUgbV9hbGxvY2F0aW9uUHJvZmlsZTsKLSAgICBJbmxpbmVXYXRj
aHBvaW50U2V0IG1fYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OworICAgIFdyaXRlQmFycmll
cjxGdW5jdGlvblJhcmVEYXRhPiBtX3JhcmVEYXRhOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25J
bmxpbmVzLmgJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAK
IGlubGluZSBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKICAgICA6IEJhc2Uodm0sIHNjb3BlLCBzY29w
ZS0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCkpCiAgICAgLCBtX2V4ZWN1dGFi
bGUodm0sIHRoaXMsIGV4ZWN1dGFibGUpCi0gICAgLCBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hw
b2ludChDbGVhcldhdGNocG9pbnQpIC8vIFNlZSBjb21tZW50IGluIEpTRnVuY3Rpb24uY3BwIGNv
bmNlcm5pbmcgdGhlIHJlYXNvbiBmb3IgdXNpbmcgQ2xlYXJXYXRjaHBvaW50IGFzIG9wcG9zZWQg
dG8gSXNXYXRjaGVkLgorICAgICwgbV9yYXJlRGF0YSgpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIzMSw3
IEBACiAgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFibGU6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWFrTWFwRGF0YVN0
cnVjdHVyZS5zZXQoKnRoaXMsIFdlYWtNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVy
cmVkVmFsdWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBmdW5j
dGlvblJhcmVEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2lmIEVOQUJMRShQUk9NSVNFUykKICAg
ICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZlcnJlZDo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb21pc2VSZWFjdGlv
blN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZVJlYWN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsyNzEsNyBAQAogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vha01hcERh
dGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRWYWx1ZVN0cnVjdHVy
ZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlOwogI2lm
IEVOQUJMRShQUk9NSVNFUykKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRT
dHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJl
OwpJbmRleDogV2ViS2l0Lnhjd29ya3NwYWNlL2NvbnRlbnRzLnhjd29ya3NwYWNlZGF0YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQueGN3b3Jrc3BhY2UvY29udGVudHMueGN3b3Jrc3BhY2VkYXRhCShy
ZXZpc2lvbiAxODI4NzQpCisrKyBXZWJLaXQueGN3b3Jrc3BhY2UvY29udGVudHMueGN3b3Jrc3Bh
Y2VkYXRhCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsMTUgQEAKIDxXb3Jrc3BhY2UKICAgIHZl
cnNpb24gPSAiMS4wIj4KICAgIDxGaWxlUmVmCisgICAgICBsb2NhdGlvbiA9ICJncm91cDpTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcCI+CisgICA8L0Zp
bGVSZWY+CisgICA8RmlsZVJlZgorICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6U291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oIj4KKyAgIDwvRmlsZVJlZj4KKyAg
IDxGaWxlUmVmCisgICAgICBsb2NhdGlvbiA9ICJncm91cDpTb3VyY2UiPgorICAgPC9GaWxlUmVm
PgorICAgPEZpbGVSZWYKICAgICAgIGxvY2F0aW9uID0gImdyb3VwOlNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MueGNvZGVwcm9qIj4KICAgIDwvRmlsZVJlZj4KICAgIDxGaWxlUmVmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250928</attachid>
            <date>2015-04-16 10:32:32 -0700</date>
            <delta_ts>2015-04-16 11:10:22 -0700</delta_ts>
            <desc>Hopefully final patch</desc>
            <filename>allocation_profile_rare_fixed_gpr2.patch</filename>
            <type>text/plain</type>
            <size>40966</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjg3
NCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA0
LTE1ICBCYXNpbGUgQ2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKworICAgICAg
ICBFeHRyYWN0IHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUgZnJvbSBKU0Z1bmN0aW9uIGludG8gYSBy
YXJlIG9iamVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJLaXQueGN3b3Jrc3BhY2UvY29udGVudHMueGN3b3Jrc3BhY2VkYXRhOgorCiAyMDE1
LTA0LTE1ICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDdXN0b20gQ1NTIGN1cnNvcnMgZG8gbm90IHVzZSAtd2Via2l0LWltYWdlLXNldCBvbiBy
ZXRpbmEgZGlzcGxheXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNDQ4LDYgKzQ0OCw3IEBACiAgICAgcnVudGltZS9GdW5jdGlvbkV4
ZWN1dGFibGVEdW1wLmNwcAogICAgIHJ1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNw
cAogICAgIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9GdW5jdGlv
blJhcmVEYXRhLmNwcAogICAgIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAogICAgIHJ1bnRpbWUv
SWRlbnRpZmllci5jcHAKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE1LTA0LTE1
ICBCYXNpbGUgQ2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKyAKKyAgICAgICAg
RXh0cmFjdCB0aGUgYWxsb2NhdGlvbiBwcm9maWxlIGZyb20gSlNGdW5jdGlvbiBpbnRvIGEgcmFy
ZSBvYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MzgwNworIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAKKyAgICAg
ICAgVGhlIGFsbG9jYXRpb24gcHJvZmlsZSBpcyBvbmx5IG5lZWRlZCBmb3IgdGhvc2UgZnVuY3Rp
b25zIHRoYXQgYXJlIHVzZWQKKyAgICAgICAgdG8gY3JlYXRlIG9iamVjdHMgd2l0aCBbbmV3XS4K
KyAgICAgICAgRXh0cmFjdGluZyBpdCBpbnRvIGl0cyBvd24gSlNDZWxsIHJlbW92ZXMgdGhlIG5l
ZWQgZm9yIEpTRnVuY3Rpb24gYW5kCisgICAgICAgIEpTQ2FsbGVlIHRvIGJlIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0cywgd2hpY2ggc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2VzIGluIG1vc3QKKyAg
ICAgICAgY2FzZXMgYXQgdGhlIGNvc3Qgb2YgYW4gZXh0cmEgcG9pbnRlciBkZXJlZmVyZW5jZSB3
aGVuIHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUKKyAgICAgICAgaXMgYWN0dWFsbHkgbmVlZGVkLgor
IAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAg
ICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBy
dW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25SYXJlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKToKKyAgICAgICAgKEpT
Qzo6RnVuY3Rpb25SYXJlRGF0YTo6fkZ1bmN0aW9uUmFyZURhdGEpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvblJhcmVEYXRhOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9GdW5j
dGlvblJhcmVEYXRhLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0
YTo6YWxsb2NhdGlvblByb2ZpbGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjph
bGxvY2F0aW9uU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6YWxs
b2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQm91bmRGdW5jdGlvbjo6ZGVzdHJveSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2FsbGVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDYWxsZWU6OmRlc3Ryb3kpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDYWxsZWUuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlUmFyZURhdGEpOgorICAgICAgICAoSlND
OjpKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
cHV0KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6Y3JlYXRlQWxsb2NhdGlvblByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpvZmZzZXRP
ZlJhcmVEYXRhKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6cmFyZURhdGEpOgorICAgICAg
ICAoSlNDOjpKU0Z1bmN0aW9uOjphbGxvY2F0aW9uU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246OmFsbG9jYXRpb25Qcm9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTRnVuY3Rp
b246OkpTRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlND
OjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAKIDIwMTUtMDQtMTUgIEpvcmRh
biBIYXJiYW5kICA8bGpoYXJiQGdtYWlsLmNvbT4KIAogICAgICAgICBTdHJpbmcucHJvdG90eXBl
LnN0YXJ0c1dpdGgvZW5kc1dpdGgvaW5jbHVkZXMgaGF2ZSB3cm9uZyBsZW5ndGggaW4gcjE4MjY3
MwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAx
ODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MTYsNiArNzE2LDcgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25FeGVjdXRhYmxlRHVt
cC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEZ1bmN0aW9uUHJvdG90eXBlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRnVuY3Rpb25SYXJlRGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXEdldHRlclNldHRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXElkZW50aWZpZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxJbmRleGluZ1R5cGUuY3BwIiAvPgpAQCAtMTQ5Niw2ICsxNDk3LDcgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25Q
cm90b3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rp
b25SYXJlRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxHZW5l
cmljQXJndW1lbnRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEdlbmVyaWNPZmZzZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtNjA2LDYgKzYwNiw5IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uUHJvdG90eXBlLmNwcCI+CiAgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25SYXJlRGF0YS5jcHAiPgorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEdldHRlclNldHRlci5jcHAiPgogICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0yNjMzLDYgKzI2MzYsOSBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblByb3RvdHlwZS5oIj4KICAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblJhcmVEYXRhLmgiPgorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEdldHRlclNldHRlci5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NTMs
NiArOTUzLDggQEAKIAkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGkuanMgaW4g
Q29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLzsgfTsKIAkJNURCQjE1MjUx
MzFEMEJENzAwNTZBRDM2IC8qIG1pbmlkb20uanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUg
LyogbWluaWRvbS5qcyAqLzsgfTsKIAkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0
ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjY5MkE4NTQwMjU1NTk3RDAxRkY2MEY3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CisJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZD
MSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVE
YXRhLmNwcCAqLzsgfTsKKwkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFy
ZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYy
RDJEMzhFMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjUwN0QyOUUwRTg3MUU1RTAw
RDdEODk2IC8qIEpTVHlwZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjUxMTIyRkQx
NDA0NkE0QzAwMkIxMDFEIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDcz
Njk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCTY1MTEyMkZFMTQwNDZB
NEMwMDJCMTAxRCAvKiBsaWJlZGl0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1RDhBRDAwRTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVkaXQu
ZHlsaWIgKi87IH07CkBAIC0yNjQ0LDYgKzI2NDYsOCBAQAogCQk1REFGRDZDQjE0NkI2ODYzMDBG
QkVGQjQgLyogSlNDLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEpTQy54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUREREY0NDYxNEZFRTcyMjAwQjRGQjREIC8qIExMSW50
RGVzaXJlZE9mZnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRE
ZXNpcmVkT2Zmc2V0cy5oOyBwYXRoID0gTExJbnRPZmZzZXRzL0xMSW50RGVzaXJlZE9mZnNldHMu
aDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNURFM0QwRjQwREQ4RERG
QjAwNDY4NzE0IC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJLaXRBdmFpbGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNjJEMkQzOEQxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25SYXJlRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyRDJEMzhFMUFERjEwM0YwMDAyMDZDMSAv
KiBGdW5jdGlvblJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUwN0QyOTcw
RTg3MUU0QTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNUeXBlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTEx
MjJFNTE0MDQ2OUJBMDAyQjEwMUQgLyogdGVzdFJlZ0V4cC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSB0ZXN0UmVnRXhwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8u
ZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RSZWdFeHA7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC00Mzk3LDYgKzQ0MDEsOCBAQAogCQkJ
CTUyQjMxMEZBMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAq
LywKIAkJCQlGNjkyQTg1QzAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUuY3Bw
ICovLAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5o
ICovLAorCQkJCTYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNw
cCAqLywKKwkJCQk2MkQyRDM4RTFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5o
ICovLAogCQkJCTBGRTA1MDExMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1lbnRzLmgg
Ki8sCiAJCQkJMEZFMDUwMTIxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmggKi8sCiAJCQkJMEZFMDUwMTMxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNPZmZzZXQu
aCAqLywKQEAgLTU2MjQsNiArNTYzMCw3IEBACiAJCQkJMEYyQjlDRjcxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRl
Y29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFDMjdGMTRCRUFBODIwMEFE
QzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcy
MzBFRDFDRTMzMDBGMUY2ODEgLyogQnl0ZWNvZGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtNzQ0NSw2ICs3NDUyLDcgQEAKIAkJCQlBNUJBMTVFQzE4MjM0MEI0MDBBODJFNjkgLyogUmVt
b3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQlB
NUJBMTVFRTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNo
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5j
dGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4
RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4ODUw
RUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQAogICAg
IEFTU0VSVChqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKS0+bWV0aG9kVGFibGUodm0p
LT5nZXRDb25zdHJ1Y3REYXRhKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLCBjb25z
dHJ1Y3REYXRhKSA9PSBDb25zdHJ1Y3RUeXBlSlMpOwogI2VuZGlmCiAgICAgCi0gICAgcmV0dXJu
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0
b3IpLT5hbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxpbmVDYXBhY2l0eSktPnN0cnVjdHVyZSgp
KTsKKyAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywganNDYXN0PEpTRnVuY3Rp
b24qPihjb25zdHJ1Y3RvciktPnJhcmVEYXRhKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+YWxsb2Nh
dGlvblByb2ZpbGUoKS0+c3RydWN0dXJlKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ5NywxMiArMzQ5NywxNiBAQAogICAg
ICAgICBHUFJSZWcgYWxsb2NhdG9yR1BSID0gYWxsb2NhdG9yLmdwcigpOwogICAgICAgICBHUFJS
ZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIC8vIFJhcmUgZGF0YSBpcyBvbmx5IHVzZWQg
dG8gYWNjZXNzIHRoZSBhbGxvY2F0b3IgJiBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gV2UgY2FuIGF2
b2lkIHVzaW5nIGFuIGFkZGl0aW9uYWwgR1BSIHRoaXMgd2F5CisgICAgICAgIEdQUlJlZyByYXJl
RGF0YUdQUiA9IHN0cnVjdHVyZUdQUjsKICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmls
ZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxv
Y2F0b3JHUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNh
bGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVHUFIpOwot
ICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgYWxsb2NhdG9yR1BSKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCBy
YXJlRGF0YUdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0YUdQUikpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zm
c2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvckdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNl
dE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmpl
Y3QocmVzdWx0R1BSLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQUiwgVHJ1c3RlZEltbVB0cigw
KSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0
R1BSLCBjYWxsZWVHUFIsIG5vZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU2OCwxMiArMzU2OCwxNiBAQAogICAgICAgICBH
UFJSZWcgYWxsb2NhdG9yR1BSID0gYWxsb2NhdG9yLmdwcigpOwogICAgICAgICBHUFJSZWcgc3Ry
dWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIC8vIFJhcmUgZGF0YSBpcyBvbmx5IHVzZWQgdG8gYWNj
ZXNzIHRoZSBhbGxvY2F0b3IgJiBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gV2UgY2FuIGF2b2lkIHVz
aW5nIGFuIGFkZGl0aW9uYWwgR1BSIHRoaXMgd2F5CisgICAgICAgIEdQUlJlZyByYXJlRGF0YUdQ
UiA9IHN0cnVjdHVyZUdQUjsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d1BhdGg7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JH
UFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQ
UiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAg
ICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgYWxsb2NhdG9yR1BSKSk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVE
YXRhR1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNl
dE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZB
bGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3Ry
dWN0dXJlKCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChy
ZXN1bHRHUFIsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBUcnVzdGVkSW1tUHRyKDApLCBz
Y3JhdGNoR1BSLCBzbG93UGF0aCk7CiAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIs
IGNhbGxlZUdQUiwgbm9kZS0+aW5saW5lQ2FwYWNpdHkoKSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTUs
MTUgKzY5NSwxNyBAQAogewogICAgIGludCBjYWxsZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CisgICAgUmVnaXN0
ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVn
VDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklE
IHN0cnVjdHVyZVJlZyA9IHJlZ1QyOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1Qz
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9u
UHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkp
LCBhbGxvY2F0b3JSZWcpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rp
b246Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
OjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRvclJlZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhj
YWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsK
KyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnKSk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkFs
bG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxv
Y2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVn
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZVJlZyk7CiAK
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgcmVz
dWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MTQsMTUgKzkxNCwxNyBAQAogewogICAgIGludCBjYWxsZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CisgICAgUmVn
aXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0g
cmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3Rl
cklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QyOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJl
Z1QzOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGNhbGxlZSwgY2FsbGVlUmVnKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9m
aWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFs
bG9jYXRvclJlZyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6
b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9m
ZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVSZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoWmVybywgYWxsb2NhdG9yUmVnKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxl
ZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcpKTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mQWxsb2Nh
dGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRv
cigpKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1
bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKIAogICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCByZXN1bHRS
ZWcsIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAx
ODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNzQwLDkgKzc0MCwxMCBAQAogICAgIHRyYWNl
RXhlY3V0aW9uKCkKICAgICBsb2FkaSA4W1BDXSwgdDAKICAgICBsb2FkcCBQYXlsb2FkT2Zmc2V0
W2NmciwgdDAsIDhdLCB0MAotICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fYWxsb2NhdGlvblByb2Zp
bGUgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6bV9hbGxvY2F0b3JbdDBdLCB0MQotICAgIGxv
YWRwIEpTRnVuY3Rpb246Om1fYWxsb2NhdGlvblByb2ZpbGUgKyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZTo6bV9zdHJ1Y3R1cmVbdDBdLCB0MgotICAgIGJ0cHogdDEsIC5vcENyZWF0ZVRoaXNTbG93
CisgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9yYXJlRGF0YVt0MF0sIHQ0CisgICAgYnRweiB0NCwg
Lm9wQ3JlYXRlVGhpc1Nsb3cKKyAgICBsb2FkcCBGdW5jdGlvblJhcmVEYXRhOjptX2FsbG9jYXRp
b25Qcm9maWxlICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om1fYWxsb2NhdG9yW3Q0XSwgdDEK
KyAgICBsb2FkcCBGdW5jdGlvblJhcmVEYXRhOjptX2FsbG9jYXRpb25Qcm9maWxlICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om1fc3RydWN0dXJlW3Q0XSwgdDIKICAgICBhbGxvY2F0ZUpTT2Jq
ZWN0KHQxLCB0MiwgdDAsIHQzLCAub3BDcmVhdGVUaGlzU2xvdykKICAgICBsb2FkaSA0W1BDXSwg
dDEKICAgICBzdG9yZWkgQ2VsbFRhZywgVGFnT2Zmc2V0W2NmciwgdDEsIDhdCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYyNiw5ICs2MjYsMTAg
QEAKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQw
KQogICAgIGxvYWRwIFtjZnIsIHQwLCA4XSwgdDAKLSAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2Fs
bG9jYXRpb25Qcm9maWxlICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om1fYWxsb2NhdG9yW3Qw
XSwgdDEKLSAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2FsbG9jYXRpb25Qcm9maWxlICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om1fc3RydWN0dXJlW3QwXSwgdDIKLSAgICBidHB6IHQxLCAub3BD
cmVhdGVUaGlzU2xvdworICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fcmFyZURhdGFbdDBdLCB0NAor
ICAgIGJ0cHogdDQsIC5vcENyZWF0ZVRoaXNTbG93CisgICAgbG9hZHAgRnVuY3Rpb25SYXJlRGF0
YTo6bV9hbGxvY2F0aW9uUHJvZmlsZSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjptX2FsbG9j
YXRvclt0NF0sIHQxCisgICAgbG9hZHAgRnVuY3Rpb25SYXJlRGF0YTo6bV9hbGxvY2F0aW9uUHJv
ZmlsZSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjptX3N0cnVjdHVyZVt0NF0sIHQyCiAgICAg
YWxsb2NhdGVKU09iamVjdCh0MSwgdDIsIHQwLCB0MywgLm9wQ3JlYXRlVGhpc1Nsb3cpCiAgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQogICAgIHN0b3JlcSB0MCwgW2NmciwgdDEsIDhd
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw3ICsyMzYsNyBA
QAogI2VuZGlmCiAKICAgICBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSBwY1szXS51Lm9wZXJhbmQ7
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25zdHJ1Y3Rvci0+YWxsb2NhdGlvblByb2Zp
bGUoZXhlYywgaW5saW5lQ2FwYWNpdHkpLT5zdHJ1Y3R1cmUoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGNvbnN0cnVjdG9yLT5yYXJlRGF0YShleGVjLCBpbmxpbmVDYXBhY2l0eSktPmFs
bG9jYXRpb25Qcm9maWxlKCktPnN0cnVjdHVyZSgpOwogICAgIFJFVFVSTihjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25SYXJlRGF0YS5oIgorCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEZ1bmN0aW9u
UmFyZURhdGE6OnNfaW5mbyA9IHsgIkZ1bmN0aW9uUmFyZURhdGEiLCAwLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEZ1bmN0aW9uUmFyZURhdGEpIH07CisKK0Z1bmN0aW9uUmFyZURhdGEqIEZ1bmN0
aW9uUmFyZURhdGE6OmNyZWF0ZShWTSYgdm0sIEpTT2JqZWN0KiBwcm90b3R5cGUsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSkKK3sKKyAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uUmFyZURhdGE+KHZtLmhlYXApKSBGdW5jdGlv
blJhcmVEYXRhKHZtKTsKKyAgICByYXJlRGF0YS0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3RvdHlw
ZSwgaW5saW5lQ2FwYWNpdHkpOworICAgIHJldHVybiByYXJlRGF0YTsKK30KKwordm9pZCBGdW5j
dGlvblJhcmVEYXRhOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBGdW5jdGlvblJhcmVE
YXRhKiByYXJlRGF0YSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uUmFyZURhdGEqPihjZWxsKTsKKyAg
ICByYXJlRGF0YS0+RnVuY3Rpb25SYXJlRGF0YTo6fkZ1bmN0aW9uUmFyZURhdGEoKTsKK30KKwor
U3RydWN0dXJlKiBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEZ1bmN0aW9u
UmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IGpzQ2FzdDxGdW5jdGlvblJh
cmVEYXRhKj4oY2VsbCk7CisKKyAgICByYXJlRGF0YS0+bV9hbGxvY2F0aW9uUHJvZmlsZS52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKK30KKworRnVuY3Rpb25SYXJlRGF0YTo6RnVuY3Rpb25SYXJl
RGF0YShWTSYgdm0pCisgICAgOiBCYXNlKHZtLCB2bS5mdW5jdGlvblJhcmVEYXRhU3RydWN0dXJl
LmdldCgpKQorICAgICwgbV9hbGxvY2F0aW9uUHJvZmlsZSgpCisgICAgLy8gV2UgaW5pdGlhbGl6
ZSBibGluZCBzbyB0aGF0IGNoYW5nZXMgdG8gdGhlIHByb3RvdHlwZSBhZnRlciBmdW5jdGlvbiBj
cmVhdGlvbiBidXQgYmVmb3JlCisgICAgLy8gdGhlIG9wdGltaXplciBraWNrcyBpbiBkb24ndCBk
aXNhYmxlIG9wdGltaXphdGlvbnMuIE9uY2UgdGhlIG9wdGltaXplciBraWNrcyBpbiwgdGhlCisg
ICAgLy8gd2F0Y2hwb2ludCB3aWxsIHN0YXJ0IHdhdGNoaW5nIGFuZCBhbnkgY2hhbmdlcyB3aWxs
IGJvdGggZm9yY2UgZGVvcHRpbWl6YXRpb24gYW5kIGRpc2FibGUKKyAgICAvLyBmdXR1cmUgYXR0
ZW1wdHMgdG8gb3B0aW1pemUuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgYXJlIGd1YXJh
bnRlZWQgdGhhdCB0aGUKKyAgICAvLyBhbGxvY2F0aW9uIHByb2ZpbGUgaXMgY2hhbmdlZCBleGFj
dGx5IG9uY2UgcHJpb3IgdG8gb3B0aW1pemF0aW9ucyBraWNraW5nIGluLiBXZSBjb3VsZCBiZQor
ICAgIC8vIHNtYXJ0ZXIgYW5kIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHByb3RvdHlw
ZSBpcyBjbG9iYmVyZWQgYW5kIG9ubHkgb3B0aW1pemUgaWYgaXQKKyAgICAvLyB3YXMgY2xvYmJl
cmVkIGV4YWN0bHkgb25jZSwgYnV0IHRoYXQgc2VlbXMgbGlrZSBvdmVya2lsbC4gSW4gYWxtb3N0
IGFsbCBjYXNlcyBpdCB3aWxsIGJlCisgICAgLy8gY2xvYmJlcmVkIG9uY2UsIGFuZCBpZiBpdCdz
IGNsb2JiZXJlZCBtb3JlIHRoYW4gb25jZSwgdGhhdCB3aWxsIHByb2JhYmx5IG9ubHkgb2NjdXIK
KyAgICAvLyBiZWZvcmUgd2Ugc3RhcnRlZCBvcHRpbWl6aW5nLCBhbnl3YXkuCisgICAgLCBtX2Fs
bG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludChDbGVhcldhdGNocG9pbnQpCit7Cit9CisKK0Z1bmN0
aW9uUmFyZURhdGE6On5GdW5jdGlvblJhcmVEYXRhKCkKK3sKK30KKwordm9pZCBGdW5jdGlvblJh
cmVEYXRhOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBwcm90b3R5cGUsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAg
bV9hbGxvY2F0aW9uUHJvZmlsZS5pbml0aWFsaXplKHZtLCB0aGlzLCBwcm90b3R5cGUsIGlubGlu
ZUNhcGFjaXR5KTsKK30KKworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25SYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDkyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEZ1bmN0aW9uUmFyZURhdGFfaAor
I2RlZmluZSBGdW5jdGlvblJhcmVEYXRhX2gKKworI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1
ZGUgIk9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CituYW1lc3BhY2UgREZHIHsKK2NsYXNzIFNwZWN1bGF0aXZlSklUOwor
Y2xhc3MgSklUQ29tcGlsZXI7Cit9CisKK2NsYXNzIEZ1bmN0aW9uUmFyZURhdGEgOiBwdWJsaWMg
SlNDZWxsIHsKKyAgICBmcmllbmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBjbGFzcyBERkc6OlNw
ZWN1bGF0aXZlSklUOworICAgIGZyaWVuZCBjbGFzcyBERkc6OkpJVENvbXBpbGVyOworICAgIGZy
aWVuZCBjbGFzcyBWTTsKKyAgICAKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1t
b3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyBGdW5jdGlvblJhcmVE
YXRhKiBjcmVhdGUoVk0mIHZtLCBKU09iamVjdCogcHJvdG90eXBlLCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHkpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUpOworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIGlubGluZSBwdHJkaWZmX3Qg
b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEZ1bmN0aW9uUmFyZURhdGEsIG1fYWxsb2NhdGlvblByb2ZpbGUpOworICAgIH0K
KworICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBhbGxvY2F0aW9uUHJvZmlsZSgpCisgICAg
eworICAgICAgICByZXR1cm4gJm1fYWxsb2NhdGlvblByb2ZpbGU7CisgICAgfQorCisgICAgU3Ry
dWN0dXJlKiBhbGxvY2F0aW9uU3RydWN0dXJlKCkgeyByZXR1cm4gbV9hbGxvY2F0aW9uUHJvZmls
ZS5zdHJ1Y3R1cmUoKTsgfQorCisgICAgSW5saW5lV2F0Y2hwb2ludFNldCYgYWxsb2NhdGlvblBy
b2ZpbGVXYXRjaHBvaW50U2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FsbG9jYXRpb25Q
cm9maWxlV2F0Y2hwb2ludDsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBGdW5jdGlvblJhcmVE
YXRhKFZNJiB2bSk7CisgICAgfkZ1bmN0aW9uUmFyZURhdGEoKTsKKworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogcHJvdG90eXBlLCBzaXplX3QgaW5saW5lQ2FwYWNp
dHkpOworICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOworCitwcml2YXRlOgorCisgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKworICAgIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlIG1fYWxsb2NhdGlvblByb2ZpbGU7CisgICAgSW5saW5lV2F0Y2hwb2ludFNldCBt
X2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRnVuY3Rpb25SYXJlRGF0YV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE4Mjg3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg2LDExICs4Niw2IEBACiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQog
Ci12b2lkIEpTQm91bmRGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAgc3Rh
dGljX2Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4oY2VsbCktPkpTQm91bmRGdW5jdGlvbjo6fkpTQm91
bmRGdW5jdGlvbigpOwotfQotCiBib29sIEpTQm91bmRGdW5jdGlvbjo6Y3VzdG9tSGFzSW5zdGFu
Y2UoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewog
ICAgIHJldHVybiBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4ob2JqZWN0KS0+bV90YXJnZXRGdW5j
dGlvbi0+aGFzSW5zdGFuY2UoZXhlYywgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmgJKHJldmlzaW9uIDE4Mjg3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw4ICs0MCw2IEBACiAKICAgICBzdGF0aWMgSlNCb3VuZEZ1bmN0aW9uKiBj
cmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNW
YWx1ZSBib3VuZFRoaXMsIEpTVmFsdWUgYm91bmRBcmdzLCBpbnQsIGNvbnN0IFN0cmluZyYpOwog
ICAgIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KICAgICBzdGF0aWMgYm9v
bCBjdXN0b21IYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogCiAg
ICAgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uKCkgeyByZXR1cm4gbV90YXJnZXRGdW5jdGlvbi5n
ZXQoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNw
cAkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
YWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksNiBAQAogCiBjb25zdCBDbGFz
c0luZm8gSlNDYWxsZWU6OnNfaW5mbyA9IHsgIkNhbGxlZSIsICZCYXNlOjpzX2luZm8sIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNDYWxsZWUpIH07CiAKLXZvaWQgSlNDYWxsZWU6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0PEpTQ2FsbGVlKj4oY2VsbCktPkpTQ2Fs
bGVlOjp+SlNDYWxsZWUoKTsKLX0KLQogSlNDYWxsZWU6OkpTQ2FsbGVlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX3Njb3BlKHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHJldmlzaW9uIDE4
Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgSlNDYWxsZWVfaAogI2RlZmluZSBK
U0NhbGxlZV9oCiAKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgorI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU1Nj
b3BlLmgiCiAKQEAgLTM2LDcgKzM2LDcgQEAKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
IAogCi1jbGFzcyBKU0NhbGxlZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitjbGFz
cyBKU0NhbGxlZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICBmcmllbmQgY2xhc3Mg
SklUOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0
aXZlSklUOwpAQCAtNDUsNyArNDUsNyBAQAogICAgIGZyaWVuZCBjbGFzcyBWTTsKIAogcHVibGlj
OgotICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKKyAgICB0eXBlZGVmIEpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZTsKIAog
ICAgIHN0YXRpYyBKU0NhbGxlZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNTY29wZSogc2NvcGUpCkBAIC01NSw4ICs1NSw2IEBACiAgICAgICAgIHJldHVy
biBjYWxsZWU7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
Ci0KICAgICBKU1Njb3BlKiBzY29wZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zY29wZS5n
ZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
Y3BwCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMjQgKzg1LDkgQEAKICAgICByZXR1
cm4gZnVuY3Rpb247CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
Ci17Ci0gICAgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpLT5KU0Z1bmN0aW9uOjp+SlNG
dW5jdGlvbigpOwotfQotCiBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBCYXNlKHZt
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fZXhlY3V0YWJsZSgpCi0gICAgLy8g
V2UgaW5pdGlhbGl6ZSBibGluZCBzbyB0aGF0IGNoYW5nZXMgdG8gdGhlIHByb3RvdHlwZSBhZnRl
ciBmdW5jdGlvbiBjcmVhdGlvbiBidXQgYmVmb3JlCi0gICAgLy8gdGhlIG9wdGltaXplciBraWNr
cyBpbiBkb24ndCBkaXNhYmxlIG9wdGltaXphdGlvbnMuIE9uY2UgdGhlIG9wdGltaXplciBraWNr
cyBpbiwgdGhlCi0gICAgLy8gd2F0Y2hwb2ludCB3aWxsIHN0YXJ0IHdhdGNoaW5nIGFuZCBhbnkg
Y2hhbmdlcyB3aWxsIGJvdGggZm9yY2UgZGVvcHRpbWl6YXRpb24gYW5kIGRpc2FibGUKLSAgICAv
LyBmdXR1cmUgYXR0ZW1wdHMgdG8gb3B0aW1pemUuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ug
d2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGUKLSAgICAvLyBhbGxvY2F0aW9uIHByb2ZpbGUgaXMg
Y2hhbmdlZCBleGFjdGx5IG9uY2UgcHJpb3IgdG8gb3B0aW1pemF0aW9ucyBraWNraW5nIGluLiBX
ZSBjb3VsZCBiZQotICAgIC8vIHNtYXJ0ZXIgYW5kIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMg
dGhlIHByb3RvdHlwZSBpcyBjbG9iYmVyZWQgYW5kIG9ubHkgb3B0aW1pemUgaWYgaXQKLSAgICAv
LyB3YXMgY2xvYmJlcmVkIGV4YWN0bHkgb25jZSwgYnV0IHRoYXQgc2VlbXMgbGlrZSBvdmVya2ls
bC4gSW4gYWxtb3N0IGFsbCBjYXNlcyBpdCB3aWxsIGJlCi0gICAgLy8gY2xvYmJlcmVkIG9uY2Us
IGFuZCBpZiBpdCdzIGNsb2JiZXJlZCBtb3JlIHRoYW4gb25jZSwgdGhhdCB3aWxsIHByb2JhYmx5
IG9ubHkgb2NjdXIKLSAgICAvLyBiZWZvcmUgd2Ugc3RhcnRlZCBvcHRpbWl6aW5nLCBhbnl3YXku
Ci0gICAgLCBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludChDbGVhcldhdGNocG9pbnQpCiB7
CiB9CiAKQEAgLTEyMywxNCArMTA4LDE1IEBACiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQogCi1P
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSogSlNGdW5jdGlvbjo6Y3JlYXRlQWxsb2NhdGlvblByb2Zp
bGUoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpCitGdW5jdGlvblJhcmVE
YXRhKiBKU0Z1bmN0aW9uOjpjcmVhdGVSYXJlRGF0YShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTT2JqZWN0
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMsIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSkpOwogICAgIGlmICghcHJvdG90eXBlKQogICAgICAgICBwcm90
b3R5cGUgPSBnbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgbV9hbGxvY2F0
aW9uUHJvZmlsZS5pbml0aWFsaXplKGdsb2JhbE9iamVjdCgpLT52bSgpLCB0aGlzLCBwcm90b3R5
cGUsIGlubGluZUNhcGFjaXR5KTsKLSAgICByZXR1cm4gJm1fYWxsb2NhdGlvblByb2ZpbGU7Cisg
ICAgRnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSBGdW5jdGlvblJhcmVEYXRhOjpjcmVhdGUo
dm0sIHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpOworICAgIG1fcmFyZURhdGEuc2V0KHZtLCB0
aGlzLCByYXJlRGF0YSk7CisgICAgcmV0dXJuIG1fcmFyZURhdGEuZ2V0KCk7CiB9CiAKIFN0cmlu
ZyBKU0Z1bmN0aW9uOjpuYW1lKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE3Niw3ICsxNjIsOCBAQAog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9leGVjdXRhYmxlKTsKLSAgICB0aGlzT2JqZWN0LT5t
X2FsbG9jYXRpb25Qcm9maWxlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIGlmICh0aGlz
T2JqZWN0LT5tX3JhcmVEYXRhKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9yYXJlRGF0YSk7CiB9CiAKIENhbGxUeXBlIEpTRnVuY3Rpb246OmdldENhbGxEYXRhKEpTQ2Vs
bCogY2VsbCwgQ2FsbERhdGEmIGNhbGxEYXRhKQpAQCAtNDAyLDkgKzM4OSwxMSBAQAogICAgICAg
ICAvLyBmb2xsb3dpbmcgdGhlIHJ1bGVzIHNldCBvdXQgaW4gRUNNQS0yNjIgOC4xMi45LgogICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0KTsKICAgICAgICAgdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2FsbG9jYXRp
b25Qcm9maWxlLmNsZWFyKCk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fYWxsb2NhdGlvblByb2Zp
bGVXYXRjaHBvaW50LmZpcmVBbGwoIlN0b3JlIHRvIHByb3RvdHlwZSBwcm9wZXJ0eSBvZiBhIGZ1
bmN0aW9uIik7Ci0gICAgICAgIC8vIERvbid0IGFsbG93IHRoaXMgdG8gYmUgY2FjaGVkLCBzaW5j
ZSBhIFtbUHV0XV0gbXVzdCBjbGVhciBtX2FsbG9jYXRpb25Qcm9maWxlLgorICAgICAgICBpZiAo
dGhpc09iamVjdC0+bV9yYXJlRGF0YSkgeworICAgICAgICAgICAgdGhpc09iamVjdC0+bV9yYXJl
RGF0YS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkuZmlyZUFsbCgiU3RvcmUgdG8g
cHJvdG90eXBlIHByb3BlcnR5IG9mIGEgZnVuY3Rpb24iKTsKKyAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fcmFyZURhdGEuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBEb24ndCBhbGxv
dyB0aGlzIHRvIGJlIGNhY2hlZCwgc2luY2UgYSBbW1B1dF1dIG11c3QgY2xlYXIgbV9yYXJlRGF0
YS4KICAgICAgICAgUHV0UHJvcGVydHlTbG90IGRvbnRDYWNoZSh0aGlzT2JqZWN0KTsKICAgICAg
ICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGRvbnRD
YWNoZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ0OSw4ICs0MzgsMTAgQEAKICAgICAgICAgLy8g
Zm9sbG93aW5nIHRoZSBydWxlcyBzZXQgb3V0IGluIEVDTUEtMjYyIDguMTIuOS4KICAgICAgICAg
UHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCk7CiAgICAgICAgIHRoaXNPYmplY3QtPm1ldGhv
ZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9hbGxvY2F0aW9uUHJv
ZmlsZS5jbGVhcigpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2FsbG9jYXRpb25Qcm9maWxlV2F0
Y2hwb2ludC5maXJlQWxsKCJTdG9yZSB0byBwcm90b3R5cGUgcHJvcGVydHkgb2YgYSBmdW5jdGlv
biIpOworICAgICAgICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkgeworICAgICAgICAgICAg
dGhpc09iamVjdC0+bV9yYXJlRGF0YS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCku
ZmlyZUFsbCgiU3RvcmUgdG8gcHJvdG90eXBlIHByb3BlcnR5IG9mIGEgZnVuY3Rpb24iKTsKKyAg
ICAgICAgICAgIHRoaXNPYmplY3QtPm1fcmFyZURhdGEuY2xlYXIoKTsKKyAgICAgICAgfQogICAg
ICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE4Mjg3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU0NhbGxlZS5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIKLSNpbmNsdWRlICJPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uUmFyZURhdGEuaCIKICNp
bmNsdWRlICJXYXRjaHBvaW50LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDgsNyArNDgsNyBA
QAogSlNfRVhQT1JUX1BSSVZBVEUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9z
dEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKIAogSlNfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShDYWxsRnJhbWUqLCBKU09iamVjdCopOwot
ICAgIAorCiBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTQ2FsbGVlIHsKICAgICBmcmllbmQg
Y2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwpAQCAtNjcs
OCArNjcsNiBAQAogCiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUJ1aWx0aW5GdW5jdGlv
bihWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5n
IG5hbWUoRXhlY1N0YXRlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGRpc3BsYXlO
YW1lKEV4ZWNTdGF0ZSopOwogICAgIGNvbnN0IFN0cmluZyBjYWxjdWxhdGVkRGlzcGxheU5hbWUo
RXhlY1N0YXRlKik7CkBAIC0xMDAsMjMgKzk4LDI4IEBACiAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
aW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkKKyAgICBzdGF0aWMg
aW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJhcmVEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9hbGxvY2F0aW9uUHJvZmlsZSk7CisgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9yYXJlRGF0YSk7CiAgICAg
fQogCi0gICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUqIGFsbG9jYXRpb25Qcm9maWxlKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCisgICAgRnVuY3Rpb25SYXJlRGF0
YSogcmFyZURhdGEoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKICAg
ICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShtX2FsbG9jYXRpb25Qcm9maWxlLmlzTnVsbCgpKSkK
LSAgICAgICAgICAgIHJldHVybiBjcmVhdGVBbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxpbmVD
YXBhY2l0eSk7Ci0gICAgICAgIHJldHVybiAmbV9hbGxvY2F0aW9uUHJvZmlsZTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFtX3JhcmVEYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYXJl
RGF0YShleGVjLCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLmdl
dCgpOwogICAgIH0KIAotICAgIFN0cnVjdHVyZSogYWxsb2NhdGlvblN0cnVjdHVyZSgpIHsgcmV0
dXJuIG1fYWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7IH0KKyAgICBTdHJ1Y3R1cmUqIGFs
bG9jYXRpb25TdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOwor
ICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS5nZXQoKS0+YWxsb2NhdGlvblN0cnVjdHVyZSgpOwor
ICAgIH0KIAogICAgIElubGluZVdhdGNocG9pbnRTZXQmIGFsbG9jYXRpb25Qcm9maWxlV2F0Y2hw
b2ludFNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNo
cG9pbnQ7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0dXJuIG1fcmFy
ZURhdGEuZ2V0KCktPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpOwogICAgIH0KIAog
ICAgIGJvb2wgaXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSBjb25zdDsKQEAgLTEzMSw3ICsxMzQs
NyBAQAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgaW50
IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB1c2luZyBCYXNlOjpmaW5pc2hDcmVh
dGlvbjsKIAotICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBjcmVhdGVBbGxvY2F0aW9uUHJv
ZmlsZShFeGVjU3RhdGUqLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpOworICAgIEZ1bmN0aW9uUmFy
ZURhdGEqIGNyZWF0ZVJhcmVEYXRhKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IGlubGluZUNhcGFj
aXR5KTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFbnVtZXJhdGlvbk1vZGUoKSk7CkBAIC0x
NjAsOCArMTYzLDcgQEAKICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgbmFtZUdldHRlcihFeGVj
U3RhdGUqLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAg
V3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBtX2V4ZWN1dGFibGU7Ci0gICAgT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUgbV9hbGxvY2F0aW9uUHJvZmlsZTsKLSAgICBJbmxpbmVXYXRjaHBvaW50
U2V0IG1fYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OworICAgIFdyaXRlQmFycmllcjxGdW5j
dGlvblJhcmVEYXRhPiBtX3JhcmVEYXRhOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVz
LmgJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb25JbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKIGlubGlu
ZSBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKICAgICA6IEJhc2Uodm0sIHNjb3BlLCBzY29wZS0+Z2xv
YmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCkpCiAgICAgLCBtX2V4ZWN1dGFibGUodm0s
IHRoaXMsIGV4ZWN1dGFibGUpCi0gICAgLCBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludChD
bGVhcldhdGNocG9pbnQpIC8vIFNlZSBjb21tZW50IGluIEpTRnVuY3Rpb24uY3BwIGNvbmNlcm5p
bmcgdGhlIHJlYXNvbiBmb3IgdXNpbmcgQ2xlYXJXYXRjaHBvaW50IGFzIG9wcG9zZWQgdG8gSXNX
YXRjaGVkLgorICAgICwgbV9yYXJlRGF0YSgpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIzMSw3IEBACiAg
ICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWFrTWFwRGF0YVN0cnVjdHVy
ZS5zZXQoKnRoaXMsIFdlYWtNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CiAgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEluZmVycmVkVmFs
dWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBmdW5jdGlvblJh
cmVEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2lmIEVOQUJMRShQUk9NSVNFUykKICAgICBwcm9t
aXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb21pc2VSZWFjdGlvblN0cnVj
dHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZVJlYWN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlz
aW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3MSw2ICsyNzEsNyBAQAogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3Bl
cnR5VGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1
Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZTsKKyAg
ICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvblJhcmVEYXRhU3RydWN0dXJlOwogI2lmIEVOQUJM
RShQUk9NSVNFUykKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1
cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlOwpJbmRl
eDogV2ViS2l0Lnhjd29ya3NwYWNlL2NvbnRlbnRzLnhjd29ya3NwYWNlZGF0YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQueGN3b3Jrc3BhY2UvY29udGVudHMueGN3b3Jrc3BhY2VkYXRhCShyZXZpc2lv
biAxODI4NzQpCisrKyBXZWJLaXQueGN3b3Jrc3BhY2UvY29udGVudHMueGN3b3Jrc3BhY2VkYXRh
CSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsMTUgQEAKIDxXb3Jrc3BhY2UKICAgIHZlcnNpb24g
PSAiMS4wIj4KICAgIDxGaWxlUmVmCisgICAgICBsb2NhdGlvbiA9ICJncm91cDpTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcCI+CisgICA8L0ZpbGVSZWY+
CisgICA8RmlsZVJlZgorICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6U291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oIj4KKyAgIDwvRmlsZVJlZj4KKyAgIDxGaWxl
UmVmCisgICAgICBsb2NhdGlvbiA9ICJncm91cDpTb3VyY2UiPgorICAgPC9GaWxlUmVmPgorICAg
PEZpbGVSZWYKICAgICAgIGxvY2F0aW9uID0gImdyb3VwOlNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mu
eGNvZGVwcm9qIj4KICAgIDwvRmlsZVJlZj4KICAgIDxGaWxlUmVmCg==
</data>
<flag name="review"
          id="275734"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="275735"
          type_id="3"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250931</attachid>
            <date>2015-04-16 11:09:45 -0700</date>
            <delta_ts>2015-04-16 12:16:12 -0700</delta_ts>
            <desc>Fix style issues</desc>
            <filename>allocation_profile_rare_fixed_gpr3.patch</filename>
            <type>text/plain</type>
            <size>41987</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mjg3
NCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA0
LTE1ICBCYXNpbGUgQ2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKworICAgICAg
ICBFeHRyYWN0IHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUgZnJvbSBKU0Z1bmN0aW9uIGludG8gYSBy
YXJlIG9iamVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJLaXQueGN3b3Jrc3BhY2UvY29udGVudHMueGN3b3Jrc3BhY2VkYXRhOgorCiAyMDE1
LTA0LTE1ICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDdXN0b20gQ1NTIGN1cnNvcnMgZG8gbm90IHVzZSAtd2Via2l0LWltYWdlLXNldCBvbiBy
ZXRpbmEgZGlzcGxheXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNDQ4LDYgKzQ0OCw3IEBACiAgICAgcnVudGltZS9GdW5jdGlvbkV4
ZWN1dGFibGVEdW1wLmNwcAogICAgIHJ1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNw
cAogICAgIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCisgICAgcnVudGltZS9GdW5jdGlv
blJhcmVEYXRhLmNwcAogICAgIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAogICAgIHJ1bnRpbWUv
SWRlbnRpZmllci5jcHAKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE1LTA0LTE1
ICBCYXNpbGUgQ2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKyAKKyAgICAgICAg
RXh0cmFjdCB0aGUgYWxsb2NhdGlvbiBwcm9maWxlIGZyb20gSlNGdW5jdGlvbiBpbnRvIGEgcmFy
ZSBvYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MzgwNworIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAKKyAgICAg
ICAgVGhlIGFsbG9jYXRpb24gcHJvZmlsZSBpcyBvbmx5IG5lZWRlZCBmb3IgdGhvc2UgZnVuY3Rp
b25zIHRoYXQgYXJlIHVzZWQKKyAgICAgICAgdG8gY3JlYXRlIG9iamVjdHMgd2l0aCBbbmV3XS4K
KyAgICAgICAgRXh0cmFjdGluZyBpdCBpbnRvIGl0cyBvd24gSlNDZWxsIHJlbW92ZXMgdGhlIG5l
ZWQgZm9yIEpTRnVuY3Rpb24gYW5kCisgICAgICAgIEpTQ2FsbGVlIHRvIGJlIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0cywgd2hpY2ggc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2VzIGluIG1vc3QKKyAg
ICAgICAgY2FzZXMgYXQgdGhlIGNvc3Qgb2YgYW4gZXh0cmEgcG9pbnRlciBkZXJlZmVyZW5jZSB3
aGVuIHRoZSBhbGxvY2F0aW9uIHByb2ZpbGUKKyAgICAgICAgaXMgYWN0dWFsbHkgbmVlZGVkLgor
IAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMpOgorICAg
ICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBy
dW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25SYXJlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKToKKyAgICAgICAgKEpT
Qzo6RnVuY3Rpb25SYXJlRGF0YTo6fkZ1bmN0aW9uUmFyZURhdGEpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvblJhcmVEYXRhOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9GdW5j
dGlvblJhcmVEYXRhLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0
YTo6YWxsb2NhdGlvblByb2ZpbGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvblJhcmVEYXRhOjph
bGxvY2F0aW9uU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25SYXJlRGF0YTo6YWxs
b2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQm91bmRGdW5jdGlvbjo6ZGVzdHJveSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2FsbGVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDYWxsZWU6OmRlc3Ryb3kpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDYWxsZWUuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlUmFyZURhdGEpOgorICAgICAgICAoSlND
OjpKU0Z1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
cHV0KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6Y3JlYXRlQWxsb2NhdGlvblByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpvZmZzZXRP
ZlJhcmVEYXRhKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6cmFyZURhdGEpOgorICAgICAg
ICAoSlNDOjpKU0Z1bmN0aW9uOjphbGxvY2F0aW9uU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTRnVuY3Rpb246OmFsbG9jYXRpb25Qcm9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTRnVuY3Rp
b246OkpTRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlND
OjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAKIDIwMTUtMDQtMTUgIEpvcmRh
biBIYXJiYW5kICA8bGpoYXJiQGdtYWlsLmNvbT4KIAogICAgICAgICBTdHJpbmcucHJvdG90eXBl
LnN0YXJ0c1dpdGgvZW5kc1dpdGgvaW5jbHVkZXMgaGF2ZSB3cm9uZyBsZW5ndGggaW4gcjE4MjY3
MwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAx
ODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MTYsNiArNzE2LDcgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25FeGVjdXRhYmxlRHVt
cC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEZ1bmN0aW9uUHJvdG90eXBlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRnVuY3Rpb25SYXJlRGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXEdldHRlclNldHRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXElkZW50aWZpZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxJbmRleGluZ1R5cGUuY3BwIiAvPgpAQCAtMTQ5Niw2ICsxNDk3LDcgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25Q
cm90b3R5cGUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rp
b25SYXJlRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxHZW5l
cmljQXJndW1lbnRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEdlbmVyaWNPZmZzZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtNjA2LDYgKzYwNiw5IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uUHJvdG90eXBlLmNwcCI+CiAgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25SYXJlRGF0YS5jcHAiPgorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEdldHRlclNldHRlci5jcHAiPgogICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0yNjMzLDYgKzI2MzYsOSBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblByb3RvdHlwZS5oIj4KICAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblJhcmVEYXRhLmgiPgorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEdldHRlclNldHRlci5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NTMs
NiArOTUzLDggQEAKIAkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGkuanMgaW4g
Q29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLzsgfTsKIAkJNURCQjE1MjUx
MzFEMEJENzAwNTZBRDM2IC8qIG1pbmlkb20uanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUg
LyogbWluaWRvbS5qcyAqLzsgfTsKIAkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0
ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjY5MkE4NTQwMjU1NTk3RDAxRkY2MEY3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CisJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZD
MSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVE
YXRhLmNwcCAqLzsgfTsKKwkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFy
ZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYy
RDJEMzhFMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjUwN0QyOUUwRTg3MUU1RTAw
RDdEODk2IC8qIEpTVHlwZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjUxMTIyRkQx
NDA0NkE0QzAwMkIxMDFEIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDcz
Njk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCTY1MTEyMkZFMTQwNDZB
NEMwMDJCMTAxRCAvKiBsaWJlZGl0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1RDhBRDAwRTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVkaXQu
ZHlsaWIgKi87IH07CkBAIC0yNjQ0LDYgKzI2NDYsOCBAQAogCQk1REFGRDZDQjE0NkI2ODYzMDBG
QkVGQjQgLyogSlNDLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEpTQy54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUREREY0NDYxNEZFRTcyMjAwQjRGQjREIC8qIExMSW50
RGVzaXJlZE9mZnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRE
ZXNpcmVkT2Zmc2V0cy5oOyBwYXRoID0gTExJbnRPZmZzZXRzL0xMSW50RGVzaXJlZE9mZnNldHMu
aDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNURFM0QwRjQwREQ4RERG
QjAwNDY4NzE0IC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJLaXRBdmFpbGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNjJEMkQzOEQxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25SYXJlRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyRDJEMzhFMUFERjEwM0YwMDAyMDZDMSAv
KiBGdW5jdGlvblJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1
bmN0aW9uUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUwN0QyOTcw
RTg3MUU0QTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNUeXBlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTEx
MjJFNTE0MDQ2OUJBMDAyQjEwMUQgLyogdGVzdFJlZ0V4cC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSB0ZXN0UmVnRXhwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8u
ZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RSZWdFeHA7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC00Mzk3LDYgKzQ0MDEsOCBAQAogCQkJ
CTUyQjMxMEZBMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAq
LywKIAkJCQlGNjkyQTg1QzAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUuY3Bw
ICovLAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5o
ICovLAorCQkJCTYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNw
cCAqLywKKwkJCQk2MkQyRDM4RTFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5o
ICovLAogCQkJCTBGRTA1MDExMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1lbnRzLmgg
Ki8sCiAJCQkJMEZFMDUwMTIxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmggKi8sCiAJCQkJMEZFMDUwMTMxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNPZmZzZXQu
aCAqLywKQEAgLTU2MjQsNiArNTYzMCw3IEBACiAJCQkJMEYyQjlDRjcxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkNBRTExMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRl
Y29kZUJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFDMjdGMTRCRUFBODIwMEFE
QzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDcy
MzBFRDFDRTMzMDBGMUY2ODEgLyogQnl0ZWNvZGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtNzQ0NSw2ICs3NDUyLDcgQEAKIAkJCQlBNUJBMTVFQzE4MjM0MEI0MDBBODJFNjkgLyogUmVt
b3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQlB
NUJBMTVFRTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNo
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5j
dGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4
RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4ODUw
RUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQAogICAg
IEFTU0VSVChqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKS0+bWV0aG9kVGFibGUodm0p
LT5nZXRDb25zdHJ1Y3REYXRhKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLCBjb25z
dHJ1Y3REYXRhKSA9PSBDb25zdHJ1Y3RUeXBlSlMpOwogI2VuZGlmCiAgICAgCi0gICAgcmV0dXJu
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0
b3IpLT5hbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxpbmVDYXBhY2l0eSktPnN0cnVjdHVyZSgp
KTsKKyAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywganNDYXN0PEpTRnVuY3Rp
b24qPihjb25zdHJ1Y3RvciktPnJhcmVEYXRhKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+YWxsb2Nh
dGlvblByb2ZpbGUoKS0+c3RydWN0dXJlKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ5NywxMiArMzQ5NywxNiBAQAogICAg
ICAgICBHUFJSZWcgYWxsb2NhdG9yR1BSID0gYWxsb2NhdG9yLmdwcigpOwogICAgICAgICBHUFJS
ZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIC8vIFJhcmUgZGF0YSBpcyBvbmx5IHVzZWQg
dG8gYWNjZXNzIHRoZSBhbGxvY2F0b3IgJiBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gV2UgY2FuIGF2
b2lkIHVzaW5nIGFuIGFkZGl0aW9uYWwgR1BSIHRoaXMgd2F5CisgICAgICAgIEdQUlJlZyByYXJl
RGF0YUdQUiA9IHN0cnVjdHVyZUdQUjsKICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmls
ZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxv
Y2F0b3JHUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNh
bGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVHUFIpOwot
ICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgYWxsb2NhdG9yR1BSKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCBy
YXJlRGF0YUdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByYXJlRGF0YUdQUikpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zm
c2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvckdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNl
dE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmpl
Y3QocmVzdWx0R1BSLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQUiwgVHJ1c3RlZEltbVB0cigw
KSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0
R1BSLCBjYWxsZWVHUFIsIG5vZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU2OCwxMiArMzU2OCwxNiBAQAogICAgICAgICBH
UFJSZWcgYWxsb2NhdG9yR1BSID0gYWxsb2NhdG9yLmdwcigpOwogICAgICAgICBHUFJSZWcgc3Ry
dWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIC8vIFJhcmUgZGF0YSBpcyBvbmx5IHVzZWQgdG8gYWNj
ZXNzIHRoZSBhbGxvY2F0b3IgJiBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gV2UgY2FuIGF2b2lkIHVz
aW5nIGFuIGFkZGl0aW9uYWwgR1BSIHRoaXMgd2F5CisgICAgICAgIEdQUlJlZyByYXJlRGF0YUdQ
UiA9IHN0cnVjdHVyZUdQUjsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d1BhdGg7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JH
UFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQ
UiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVHUFIpOwotICAgICAg
ICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgYWxsb2NhdG9yR1BSKSk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVE
YXRhR1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNl
dE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZB
bGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3Ry
dWN0dXJlKCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChy
ZXN1bHRHUFIsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBUcnVzdGVkSW1tUHRyKDApLCBz
Y3JhdGNoR1BSLCBzbG93UGF0aCk7CiAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIs
IGNhbGxlZUdQUiwgbm9kZS0+aW5saW5lQ2FwYWNpdHkoKSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTUs
MTUgKzY5NSwxNyBAQAogewogICAgIGludCBjYWxsZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CisgICAgUmVnaXN0
ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVn
VDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3RlcklE
IHN0cnVjdHVyZVJlZyA9IHJlZ1QyOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1Qz
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZBbGxvY2F0aW9u
UHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkp
LCBhbGxvY2F0b3JSZWcpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rp
b246Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
OjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hUZXN0UHRyKFplcm8sIGFsbG9jYXRvclJlZykpOworICAgIGxvYWRQdHIoQWRkcmVzcyhj
YWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsK
KyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnKSk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkFs
bG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxv
Y2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVn
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZVJlZyk7CiAK
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgcmVz
dWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MTQsMTUgKzkxNCwxNyBAQAogewogICAgIGludCBjYWxsZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CisgICAgUmVn
aXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0g
cmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKICAgICBSZWdpc3Rl
cklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QyOwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJl
Z1QzOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGNhbGxlZSwgY2FsbGVlUmVnKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkFsbG9jYXRpb25Qcm9m
aWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFs
bG9jYXRvclJlZyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6
b2Zmc2V0T2ZBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9m
ZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVSZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoWmVybywgYWxsb2NhdG9yUmVnKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxl
ZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcpKTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mQWxsb2Nh
dGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRv
cigpKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1
bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKIAogICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCByZXN1bHRS
ZWcsIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAx
ODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNzQwLDkgKzc0MCwxMCBAQAogICAgIHRyYWNl
RXhlY3V0aW9uKCkKICAgICBsb2FkaSA4W1BDXSwgdDAKICAgICBsb2FkcCBQYXlsb2FkT2Zmc2V0
W2NmciwgdDAsIDhdLCB0MAotICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fYWxsb2NhdGlvblByb2Zp
bGUgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6bV9hbGxvY2F0b3JbdDBdLCB0MQotICAgIGxv
YWRwIEpTRnVuY3Rpb246Om1fYWxsb2NhdGlvblByb2ZpbGUgKyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZTo6bV9zdHJ1Y3R1cmVbdDBdLCB0MgotICAgIGJ0cHogdDEsIC5vcENyZWF0ZVRoaXNTbG93
CisgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9yYXJlRGF0YVt0MF0sIHQ0CisgICAgYnRweiB0NCwg
Lm9wQ3JlYXRlVGhpc1Nsb3cKKyAgICBsb2FkcCBGdW5jdGlvblJhcmVEYXRhOjptX2FsbG9jYXRp
b25Qcm9maWxlICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om1fYWxsb2NhdG9yW3Q0XSwgdDEK
KyAgICBsb2FkcCBGdW5jdGlvblJhcmVEYXRhOjptX2FsbG9jYXRpb25Qcm9maWxlICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om1fc3RydWN0dXJlW3Q0XSwgdDIKICAgICBhbGxvY2F0ZUpTT2Jq
ZWN0KHQxLCB0MiwgdDAsIHQzLCAub3BDcmVhdGVUaGlzU2xvdykKICAgICBsb2FkaSA0W1BDXSwg
dDEKICAgICBzdG9yZWkgQ2VsbFRhZywgVGFnT2Zmc2V0W2NmciwgdDEsIDhdCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkocmV2aXNpb24gMTgyODc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTYyNiw5ICs2MjYsMTAg
QEAKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQw
KQogICAgIGxvYWRwIFtjZnIsIHQwLCA4XSwgdDAKLSAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2Fs
bG9jYXRpb25Qcm9maWxlICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om1fYWxsb2NhdG9yW3Qw
XSwgdDEKLSAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2FsbG9jYXRpb25Qcm9maWxlICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGU6Om1fc3RydWN0dXJlW3QwXSwgdDIKLSAgICBidHB6IHQxLCAub3BD
cmVhdGVUaGlzU2xvdworICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fcmFyZURhdGFbdDBdLCB0NAor
ICAgIGJ0cHogdDQsIC5vcENyZWF0ZVRoaXNTbG93CisgICAgbG9hZHAgRnVuY3Rpb25SYXJlRGF0
YTo6bV9hbGxvY2F0aW9uUHJvZmlsZSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjptX2FsbG9j
YXRvclt0NF0sIHQxCisgICAgbG9hZHAgRnVuY3Rpb25SYXJlRGF0YTo6bV9hbGxvY2F0aW9uUHJv
ZmlsZSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjptX3N0cnVjdHVyZVt0NF0sIHQyCiAgICAg
YWxsb2NhdGVKU09iamVjdCh0MSwgdDIsIHQwLCB0MywgLm9wQ3JlYXRlVGhpc1Nsb3cpCiAgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQogICAgIHN0b3JlcSB0MCwgW2NmciwgdDEsIDhd
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAJKHJldmlzaW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw3ICsyMzYsNyBA
QAogI2VuZGlmCiAKICAgICBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSBwY1szXS51Lm9wZXJhbmQ7
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25zdHJ1Y3Rvci0+YWxsb2NhdGlvblByb2Zp
bGUoZXhlYywgaW5saW5lQ2FwYWNpdHkpLT5zdHJ1Y3R1cmUoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGNvbnN0cnVjdG9yLT5yYXJlRGF0YShleGVjLCBpbmxpbmVDYXBhY2l0eSktPmFs
bG9jYXRpb25Qcm9maWxlKCktPnN0cnVjdHVyZSgpOwogICAgIFJFVFVSTihjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdW5jdGlv
blJhcmVEYXRhLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjb25zdCBDbGFzc0luZm8gRnVuY3Rpb25SYXJlRGF0YTo6c19pbmZvID0geyAiRnVuY3Rp
b25SYXJlRGF0YSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRnVuY3Rpb25SYXJlRGF0YSkg
fTsKKworRnVuY3Rpb25SYXJlRGF0YSogRnVuY3Rpb25SYXJlRGF0YTo6Y3JlYXRlKFZNJiB2bSwg
SlNPYmplY3QqIHByb3RvdHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5KQoreworICAgIEZ1bmN0
aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rp
b25SYXJlRGF0YT4odm0uaGVhcCkpIEZ1bmN0aW9uUmFyZURhdGEodm0pOworICAgIHJhcmVEYXRh
LT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSk7CisgICAgcmV0
dXJuIHJhcmVEYXRhOworfQorCit2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQoreworICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gc3RhdGljX2Nhc3Q8
RnVuY3Rpb25SYXJlRGF0YSo+KGNlbGwpOworICAgIHJhcmVEYXRhLT5GdW5jdGlvblJhcmVEYXRh
Ojp+RnVuY3Rpb25SYXJlRGF0YSgpOworfQorCitTdHJ1Y3R1cmUqIEZ1bmN0aW9uUmFyZURhdGE6
OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25SYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEZ1bmN0aW9uUmFyZURhdGEq
IHJhcmVEYXRhID0ganNDYXN0PEZ1bmN0aW9uUmFyZURhdGEqPihjZWxsKTsKKworICAgIHJhcmVE
YXRhLT5tX2FsbG9jYXRpb25Qcm9maWxlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworfQorCitG
dW5jdGlvblJhcmVEYXRhOjpGdW5jdGlvblJhcmVEYXRhKFZNJiB2bSkKKyAgICA6IEJhc2Uodm0s
IHZtLmZ1bmN0aW9uUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2FsbG9jYXRpb25Q
cm9maWxlKCkKKyAgICAvLyBXZSBpbml0aWFsaXplIGJsaW5kIHNvIHRoYXQgY2hhbmdlcyB0byB0
aGUgcHJvdG90eXBlIGFmdGVyIGZ1bmN0aW9uIGNyZWF0aW9uIGJ1dCBiZWZvcmUKKyAgICAvLyB0
aGUgb3B0aW1pemVyIGtpY2tzIGluIGRvbid0IGRpc2FibGUgb3B0aW1pemF0aW9ucy4gT25jZSB0
aGUgb3B0aW1pemVyIGtpY2tzIGluLCB0aGUKKyAgICAvLyB3YXRjaHBvaW50IHdpbGwgc3RhcnQg
d2F0Y2hpbmcgYW5kIGFueSBjaGFuZ2VzIHdpbGwgYm90aCBmb3JjZSBkZW9wdGltaXphdGlvbiBh
bmQgZGlzYWJsZQorICAgIC8vIGZ1dHVyZSBhdHRlbXB0cyB0byBvcHRpbWl6ZS4gVGhpcyBpcyBu
ZWNlc3NhcnkgYmVjYXVzZSB3ZSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoZQorICAgIC8vIGFsbG9j
YXRpb24gcHJvZmlsZSBpcyBjaGFuZ2VkIGV4YWN0bHkgb25jZSBwcmlvciB0byBvcHRpbWl6YXRp
b25zIGtpY2tpbmcgaW4uIFdlIGNvdWxkIGJlCisgICAgLy8gc21hcnRlciBhbmQgY291bnQgdGhl
IG51bWJlciBvZiB0aW1lcyB0aGUgcHJvdG90eXBlIGlzIGNsb2JiZXJlZCBhbmQgb25seSBvcHRp
bWl6ZSBpZiBpdAorICAgIC8vIHdhcyBjbG9iYmVyZWQgZXhhY3RseSBvbmNlLCBidXQgdGhhdCBz
ZWVtcyBsaWtlIG92ZXJraWxsLiBJbiBhbG1vc3QgYWxsIGNhc2VzIGl0IHdpbGwgYmUKKyAgICAv
LyBjbG9iYmVyZWQgb25jZSwgYW5kIGlmIGl0J3MgY2xvYmJlcmVkIG1vcmUgdGhhbiBvbmNlLCB0
aGF0IHdpbGwgcHJvYmFibHkgb25seSBvY2N1cgorICAgIC8vIGJlZm9yZSB3ZSBzdGFydGVkIG9w
dGltaXppbmcsIGFueXdheS4KKyAgICAsIG1fYWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50KENs
ZWFyV2F0Y2hwb2ludCkKK3sKK30KKworRnVuY3Rpb25SYXJlRGF0YTo6fkZ1bmN0aW9uUmFyZURh
dGEoKQoreworfQorCit2b2lkIEZ1bmN0aW9uUmFyZURhdGE6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNPYmplY3QqIHByb3RvdHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5KQoreworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBtX2FsbG9jYXRpb25Qcm9maWxlLmluaXRpYWxp
emUodm0sIHRoaXMsIHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpOworfQorCit9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblJhcmVEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJl
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGdW5jdGlvblJhcmVEYXRhX2gK
KyNkZWZpbmUgRnVuY3Rpb25SYXJlRGF0YV9oCisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNs
dWRlICJPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOworbmFtZXNwYWNlIERGRyB7CitjbGFzcyBTcGVjdWxhdGl2ZUpJVDsK
K2NsYXNzIEpJVENvbXBpbGVyOworfQorCitjbGFzcyBGdW5jdGlvblJhcmVEYXRhIDogcHVibGlj
IEpTQ2VsbCB7CisgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBmcmllbmQgY2xhc3MgREZHOjpT
cGVjdWxhdGl2ZUpJVDsKKyAgICBmcmllbmQgY2xhc3MgREZHOjpKSVRDb21waWxlcjsKKyAgICBm
cmllbmQgY2xhc3MgVk07CisgICAgCitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0lt
bW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMgRnVuY3Rpb25SYXJl
RGF0YSogY3JlYXRlKFZNJiwgSlNPYmplY3QqIHByb3RvdHlwZSwgc2l6ZV90IGlubGluZUNhcGFj
aXR5KTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwor
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBl
KTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBpbmxpbmUgcHRyZGlmZl90IG9m
ZnNldE9mQWxsb2NhdGlvblByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihGdW5jdGlvblJhcmVEYXRhLCBtX2FsbG9jYXRpb25Qcm9maWxlKTsKKyAgICB9CisK
KyAgICBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSogYWxsb2NhdGlvblByb2ZpbGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuICZtX2FsbG9jYXRpb25Qcm9maWxlOworICAgIH0KKworICAgIFN0cnVj
dHVyZSogYWxsb2NhdGlvblN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fYWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7IH0KKworICAgIElubGluZVdhdGNocG9pbnRTZXQmIGFsbG9jYXRpb25Qcm9m
aWxlV2F0Y2hwb2ludFNldCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9hbGxvY2F0aW9uUHJv
ZmlsZVdhdGNocG9pbnQ7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgRnVuY3Rpb25SYXJlRGF0
YShWTSYpOworICAgIH5GdW5jdGlvblJhcmVEYXRhKCk7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgSlNPYmplY3QqIHByb3RvdHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5KTsKKyAg
ICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKKworcHJpdmF0ZToKKworICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisKKyAgICBPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSBtX2FsbG9jYXRpb25Qcm9maWxlOworICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9hbGxvY2F0
aW9uUHJvZmlsZVdhdGNocG9pbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEZ1bmN0aW9uUmFyZURhdGFfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NiwxMSArODYsNiBAQAogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIAotdm9pZCBK
U0JvdW5kRnVuY3Rpb246OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0
PEpTQm91bmRGdW5jdGlvbio+KGNlbGwpLT5KU0JvdW5kRnVuY3Rpb246On5KU0JvdW5kRnVuY3Rp
b24oKTsKLX0KLQogYm9vbCBKU0JvdW5kRnVuY3Rpb246OmN1c3RvbUhhc0luc3RhbmNlKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICByZXR1
cm4ganNDYXN0PEpTQm91bmRGdW5jdGlvbio+KG9iamVjdCktPm1fdGFyZ2V0RnVuY3Rpb24tPmhh
c0luc3RhbmNlKGV4ZWMsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQm91bmRGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5oCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsOCArNDAsNiBAQAogCiAgICAgc3RhdGljIEpTQm91bmRGdW5jdGlvbiogY3JlYXRlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91
bmRUaGlzLCBKU1ZhbHVlIGJvdW5kQXJncywgaW50LCBjb25zdCBTdHJpbmcmKTsKICAgICAKLSAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCiAgICAgc3RhdGljIGJvb2wgY3VzdG9t
SGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKIAogICAgIEpTT2Jq
ZWN0KiB0YXJnZXRGdW5jdGlvbigpIHsgcmV0dXJuIG1fdGFyZ2V0RnVuY3Rpb24uZ2V0KCk7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5jcHAJKHJldmlz
aW9uIDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FsbGVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDYgQEAKIAogY29uc3QgQ2xhc3NJbmZvIEpT
Q2FsbGVlOjpzX2luZm8gPSB7ICJDYWxsZWUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTQ2FsbGVlKSB9OwogCi12b2lkIEpTQ2FsbGVlOjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKLXsKLSAgICBzdGF0aWNfY2FzdDxKU0NhbGxlZSo+KGNlbGwpLT5KU0NhbGxlZTo6fkpT
Q2FsbGVlKCk7Ci19Ci0KIEpTQ2FsbGVlOjpKU0NhbGxlZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQogICAgICwgbV9zY29wZSh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCShyZXZpc2lvbiAxODI4NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NhbGxlZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIEpTQ2FsbGVlX2gKICNkZWZpbmUgSlNDYWxsZWVf
aAogCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTY29wZS5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM2LDcgKzM2LDcgQEAKIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKIAogCi1jbGFzcyBKU0NhbGxlZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVj
dCB7CitjbGFzcyBKU0NhbGxlZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICBmcmll
bmQgY2xhc3MgSklUOwogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGZyaWVuZCBjbGFzcyBERkc6
OlNwZWN1bGF0aXZlSklUOwpAQCAtNDUsNyArNDUsNyBAQAogICAgIGZyaWVuZCBjbGFzcyBWTTsK
IAogcHVibGljOgotICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKKyAgICB0
eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKICAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEltcGxlbWVudHNIYXNJbnN0
YW5jZTsKIAogICAgIHN0YXRpYyBKU0NhbGxlZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogc2NvcGUpCkBAIC01NSw4ICs1NSw2IEBACiAgICAg
ICAgIHJldHVybiBjYWxsZWU7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7Ci0KICAgICBKU1Njb3BlKiBzY29wZSgpCiAgICAgewogICAgICAgICByZXR1cm4g
bV9zY29wZS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMjQgKzg1LDkgQEAK
ICAgICByZXR1cm4gZnVuY3Rpb247CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCi17Ci0gICAgc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpLT5KU0Z1bmN0
aW9uOjp+SlNGdW5jdGlvbigpOwotfQotCiBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
OiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKICAgICAsIG1fZXhlY3V0YWJsZSgp
Ci0gICAgLy8gV2UgaW5pdGlhbGl6ZSBibGluZCBzbyB0aGF0IGNoYW5nZXMgdG8gdGhlIHByb3Rv
dHlwZSBhZnRlciBmdW5jdGlvbiBjcmVhdGlvbiBidXQgYmVmb3JlCi0gICAgLy8gdGhlIG9wdGlt
aXplciBraWNrcyBpbiBkb24ndCBkaXNhYmxlIG9wdGltaXphdGlvbnMuIE9uY2UgdGhlIG9wdGlt
aXplciBraWNrcyBpbiwgdGhlCi0gICAgLy8gd2F0Y2hwb2ludCB3aWxsIHN0YXJ0IHdhdGNoaW5n
IGFuZCBhbnkgY2hhbmdlcyB3aWxsIGJvdGggZm9yY2UgZGVvcHRpbWl6YXRpb24gYW5kIGRpc2Fi
bGUKLSAgICAvLyBmdXR1cmUgYXR0ZW1wdHMgdG8gb3B0aW1pemUuIFRoaXMgaXMgbmVjZXNzYXJ5
IGJlY2F1c2Ugd2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGUKLSAgICAvLyBhbGxvY2F0aW9uIHBy
b2ZpbGUgaXMgY2hhbmdlZCBleGFjdGx5IG9uY2UgcHJpb3IgdG8gb3B0aW1pemF0aW9ucyBraWNr
aW5nIGluLiBXZSBjb3VsZCBiZQotICAgIC8vIHNtYXJ0ZXIgYW5kIGNvdW50IHRoZSBudW1iZXIg
b2YgdGltZXMgdGhlIHByb3RvdHlwZSBpcyBjbG9iYmVyZWQgYW5kIG9ubHkgb3B0aW1pemUgaWYg
aXQKLSAgICAvLyB3YXMgY2xvYmJlcmVkIGV4YWN0bHkgb25jZSwgYnV0IHRoYXQgc2VlbXMgbGlr
ZSBvdmVya2lsbC4gSW4gYWxtb3N0IGFsbCBjYXNlcyBpdCB3aWxsIGJlCi0gICAgLy8gY2xvYmJl
cmVkIG9uY2UsIGFuZCBpZiBpdCdzIGNsb2JiZXJlZCBtb3JlIHRoYW4gb25jZSwgdGhhdCB3aWxs
IHByb2JhYmx5IG9ubHkgb2NjdXIKLSAgICAvLyBiZWZvcmUgd2Ugc3RhcnRlZCBvcHRpbWl6aW5n
LCBhbnl3YXkuCi0gICAgLCBtX2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludChDbGVhcldhdGNo
cG9pbnQpCiB7CiB9CiAKQEAgLTEyMywxNCArMTA4LDE1IEBACiAgICAgcmV0dXJuIGZ1bmN0aW9u
OwogfQogCi1PYmplY3RBbGxvY2F0aW9uUHJvZmlsZSogSlNGdW5jdGlvbjo6Y3JlYXRlQWxsb2Nh
dGlvblByb2ZpbGUoRXhlY1N0YXRlKiBleGVjLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpCitGdW5j
dGlvblJhcmVEYXRhKiBKU0Z1bmN0aW9uOjpjcmVhdGVSYXJlRGF0YShFeGVjU3RhdGUqIGV4ZWMs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZ2V0KGV4ZWMs
IHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSkpOwogICAgIGlmICghcHJvdG90eXBlKQogICAg
ICAgICBwcm90b3R5cGUgPSBnbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
bV9hbGxvY2F0aW9uUHJvZmlsZS5pbml0aWFsaXplKGdsb2JhbE9iamVjdCgpLT52bSgpLCB0aGlz
LCBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5KTsKLSAgICByZXR1cm4gJm1fYWxsb2NhdGlvblBy
b2ZpbGU7CisgICAgRnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSBGdW5jdGlvblJhcmVEYXRh
OjpjcmVhdGUodm0sIHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpOworICAgIG1fcmFyZURhdGEu
c2V0KHZtLCB0aGlzLCByYXJlRGF0YSk7CisgICAgcmV0dXJuIG1fcmFyZURhdGEuZ2V0KCk7CiB9
CiAKIFN0cmluZyBKU0Z1bmN0aW9uOjpuYW1lKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE3Niw3ICsx
NjIsOCBAQAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAK
ICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9leGVjdXRhYmxlKTsKLSAgICB0aGlz
T2JqZWN0LT5tX2FsbG9jYXRpb25Qcm9maWxlLnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAg
IGlmICh0aGlzT2JqZWN0LT5tX3JhcmVEYXRhKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9yYXJlRGF0YSk7CiB9CiAKIENhbGxUeXBlIEpTRnVuY3Rpb246OmdldENhbGxE
YXRhKEpTQ2VsbCogY2VsbCwgQ2FsbERhdGEmIGNhbGxEYXRhKQpAQCAtNDAyLDkgKzM4OSwxMSBA
QAogICAgICAgICAvLyBmb2xsb3dpbmcgdGhlIHJ1bGVzIHNldCBvdXQgaW4gRUNNQS0yNjIgOC4x
Mi45LgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0KTsKICAgICAgICAgdGhp
c09iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgICAgICB0aGlzT2JqZWN0LT5t
X2FsbG9jYXRpb25Qcm9maWxlLmNsZWFyKCk7Ci0gICAgICAgIHRoaXNPYmplY3QtPm1fYWxsb2Nh
dGlvblByb2ZpbGVXYXRjaHBvaW50LmZpcmVBbGwoIlN0b3JlIHRvIHByb3RvdHlwZSBwcm9wZXJ0
eSBvZiBhIGZ1bmN0aW9uIik7Ci0gICAgICAgIC8vIERvbid0IGFsbG93IHRoaXMgdG8gYmUgY2Fj
aGVkLCBzaW5jZSBhIFtbUHV0XV0gbXVzdCBjbGVhciBtX2FsbG9jYXRpb25Qcm9maWxlLgorICAg
ICAgICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkgeworICAgICAgICAgICAgdGhpc09iamVj
dC0+bV9yYXJlRGF0YS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkuZmlyZUFsbCgi
U3RvcmUgdG8gcHJvdG90eXBlIHByb3BlcnR5IG9mIGEgZnVuY3Rpb24iKTsKKyAgICAgICAgICAg
IHRoaXNPYmplY3QtPm1fcmFyZURhdGEuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBE
b24ndCBhbGxvdyB0aGlzIHRvIGJlIGNhY2hlZCwgc2luY2UgYSBbW1B1dF1dIG11c3QgY2xlYXIg
bV9yYXJlRGF0YS4KICAgICAgICAgUHV0UHJvcGVydHlTbG90IGRvbnRDYWNoZSh0aGlzT2JqZWN0
KTsKICAgICAgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIGRvbnRDYWNoZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ0OSw4ICs0MzgsMTAgQEAKICAg
ICAgICAgLy8gZm9sbG93aW5nIHRoZSBydWxlcyBzZXQgb3V0IGluIEVDTUEtMjYyIDguMTIuOS4K
ICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCk7CiAgICAgICAgIHRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKLSAgICAgICAgdGhpc09iamVjdC0+bV9hbGxv
Y2F0aW9uUHJvZmlsZS5jbGVhcigpOwotICAgICAgICB0aGlzT2JqZWN0LT5tX2FsbG9jYXRpb25Q
cm9maWxlV2F0Y2hwb2ludC5maXJlQWxsKCJTdG9yZSB0byBwcm90b3R5cGUgcHJvcGVydHkgb2Yg
YSBmdW5jdGlvbiIpOworICAgICAgICBpZiAodGhpc09iamVjdC0+bV9yYXJlRGF0YSkgeworICAg
ICAgICAgICAgdGhpc09iamVjdC0+bV9yYXJlRGF0YS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBv
aW50U2V0KCkuZmlyZUFsbCgiU3RvcmUgdG8gcHJvdG90eXBlIHByb3BlcnR5IG9mIGEgZnVuY3Rp
b24iKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fcmFyZURhdGEuY2xlYXIoKTsKKyAgICAg
ICAgfQogICAgICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9u
IDE4Mjg3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMjQsMTAgKzI0LDEwIEBACiAjaWZuZGVmIEpTRnVuY3Rpb25faAog
I2RlZmluZSBKU0Z1bmN0aW9uX2gKIAorI2luY2x1ZGUgIkZ1bmN0aW9uUmFyZURhdGEuaCIKICNp
bmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsZWUuaCIKICNpbmNs
dWRlICJKU1Njb3BlLmgiCi0jaW5jbHVkZSAiT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaCIKICNp
bmNsdWRlICJXYXRjaHBvaW50LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDgsNyArNDgsNyBA
QAogSlNfRVhQT1JUX1BSSVZBVEUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9z
dEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKIAogSlNfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShDYWxsRnJhbWUqLCBKU09iamVjdCopOwot
ICAgIAorCiBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTQ2FsbGVlIHsKICAgICBmcmllbmQg
Y2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwpAQCAtNjcs
OCArNjcsNiBAQAogCiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUJ1aWx0aW5GdW5jdGlv
bihWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kik7CiAKLSAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5n
IG5hbWUoRXhlY1N0YXRlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGRpc3BsYXlO
YW1lKEV4ZWNTdGF0ZSopOwogICAgIGNvbnN0IFN0cmluZyBjYWxjdWxhdGVkRGlzcGxheU5hbWUo
RXhlY1N0YXRlKik7CkBAIC0xMDAsMjMgKzk4LDI4IEBACiAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
aW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZkFsbG9jYXRpb25Qcm9maWxlKCkKKyAgICBzdGF0aWMg
aW5saW5lIHB0cmRpZmZfdCBvZmZzZXRPZlJhcmVEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9hbGxvY2F0aW9uUHJvZmlsZSk7CisgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9yYXJlRGF0YSk7CiAgICAg
fQogCi0gICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUqIGFsbG9jYXRpb25Qcm9maWxlKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCisgICAgRnVuY3Rpb25SYXJlRGF0
YSogcmFyZURhdGEoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKICAg
ICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShtX2FsbG9jYXRpb25Qcm9maWxlLmlzTnVsbCgpKSkK
LSAgICAgICAgICAgIHJldHVybiBjcmVhdGVBbGxvY2F0aW9uUHJvZmlsZShleGVjLCBpbmxpbmVD
YXBhY2l0eSk7Ci0gICAgICAgIHJldHVybiAmbV9hbGxvY2F0aW9uUHJvZmlsZTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFtX3JhcmVEYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYXJl
RGF0YShleGVjLCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLmdl
dCgpOwogICAgIH0KIAotICAgIFN0cnVjdHVyZSogYWxsb2NhdGlvblN0cnVjdHVyZSgpIHsgcmV0
dXJuIG1fYWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7IH0KKyAgICBTdHJ1Y3R1cmUqIGFs
bG9jYXRpb25TdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOwor
ICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS5nZXQoKS0+YWxsb2NhdGlvblN0cnVjdHVyZSgpOwor
ICAgIH0KIAogICAgIElubGluZVdhdGNocG9pbnRTZXQmIGFsbG9jYXRpb25Qcm9maWxlV2F0Y2hw
b2ludFNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNo
cG9pbnQ7CisgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKKyAgICAgICAgcmV0dXJuIG1fcmFy
ZURhdGEuZ2V0KCktPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpOwogICAgIH0KIAog
ICAgIGJvb2wgaXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSBjb25zdDsKQEAgLTEzMSw3ICsxMzQs
NyBAQAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgaW50
IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB1c2luZyBCYXNlOjpmaW5pc2hDcmVh
dGlvbjsKIAotICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBjcmVhdGVBbGxvY2F0aW9uUHJv
ZmlsZShFeGVjU3RhdGUqLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpOworICAgIEZ1bmN0aW9uUmFy
ZURhdGEqIGNyZWF0ZVJhcmVEYXRhKEV4ZWNTdGF0ZSosIHNpemVfdCBpbmxpbmVDYXBhY2l0eSk7
CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRW51bWVyYXRpb25Nb2RlKCkpOwpAQCAtMTYwLDgg
KzE2Myw3IEBACiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIG5hbWVHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIAogICAgIFdyaXRl
QmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9leGVjdXRhYmxlOwotICAgIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlIG1fYWxsb2NhdGlvblByb2ZpbGU7Ci0gICAgSW5saW5lV2F0Y2hwb2ludFNldCBt
X2FsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDsKKyAgICBXcml0ZUJhcnJpZXI8RnVuY3Rpb25S
YXJlRGF0YT4gbV9yYXJlRGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCShy
ZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiBpbmxpbmUgSlNG
dW5jdGlvbjo6SlNGdW5jdGlvbihWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSwgSlNTY29wZSogc2NvcGUpCiAgICAgOiBCYXNlKHZtLCBzY29wZSwgc2NvcGUtPmdsb2JhbE9i
amVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpKQogICAgICwgbV9leGVjdXRhYmxlKHZtLCB0aGlz
LCBleGVjdXRhYmxlKQotICAgICwgbV9hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQoQ2xlYXJX
YXRjaHBvaW50KSAvLyBTZWUgY29tbWVudCBpbiBKU0Z1bmN0aW9uLmNwcCBjb25jZXJuaW5nIHRo
ZSByZWFzb24gZm9yIHVzaW5nIENsZWFyV2F0Y2hwb2ludCBhcyBvcHBvc2VkIHRvIElzV2F0Y2hl
ZC4KKyAgICAsIG1fcmFyZURhdGEoKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw2ICsyMzEsNyBAQAogICAgIHBy
b3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgd2Vha01hcERhdGFTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwogICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFZhbHVlOjpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgZnVuY3Rpb25SYXJlRGF0
YVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAgcHJvbWlzZURl
ZmVycmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9taXNlUmVhY3Rpb25TdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBKU1Byb21pc2VSZWFjdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAx
ODI4NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzEsNiArMjcxLDcgQEAKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRh
YmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGluZmVycmVkVmFsdWVTdHJ1Y3R1cmU7CisgICAgU3Ry
b25nPFN0cnVjdHVyZT4gZnVuY3Rpb25SYXJlRGF0YVN0cnVjdHVyZTsKICNpZiBFTkFCTEUoUFJP
TUlTRVMpCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3RydWN0dXJlOwog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsKSW5kZXg6IFdl
YktpdC54Y3dvcmtzcGFjZS9jb250ZW50cy54Y3dvcmtzcGFjZWRhdGEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Lnhjd29ya3NwYWNlL2NvbnRlbnRzLnhjd29ya3NwYWNlZGF0YQkocmV2aXNpb24gMTgy
ODc0KQorKysgV2ViS2l0Lnhjd29ya3NwYWNlL2NvbnRlbnRzLnhjd29ya3NwYWNlZGF0YQkod29y
a2luZyBjb3B5KQpAQCAtMiw2ICsyLDE1IEBACiA8V29ya3NwYWNlCiAgICB2ZXJzaW9uID0gIjEu
MCI+CiAgICA8RmlsZVJlZgorICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6U291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25SYXJlRGF0YS5jcHAiPgorICAgPC9GaWxlUmVmPgorICAg
PEZpbGVSZWYKKyAgICAgIGxvY2F0aW9uID0gImdyb3VwOlNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUmFyZURhdGEuaCI+CisgICA8L0ZpbGVSZWY+CisgICA8RmlsZVJlZgor
ICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6U291cmNlIj4KKyAgIDwvRmlsZVJlZj4KKyAgIDxGaWxl
UmVmCiAgICAgICBsb2NhdGlvbiA9ICJncm91cDpTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2Rl
cHJvaiI+CiAgICA8L0ZpbGVSZWY+CiAgICA8RmlsZVJlZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>