<?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>125711</bug_id>
          
          <creation_ts>2013-12-13 14:28:00 -0800</creation_ts>
          <short_desc>C calls in PolymorphicAccess shouldn&apos;t assume that the top of the stack looks like a JSC JIT frame and enable *ByIdFlush in FTL</short_desc>
          <delta_ts>2015-10-21 14:49:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>132356</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>959678</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-13 14:28:00 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973962</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-30 13:26:10 -0800</bug_when>
    <thetext>Some clarification: this is the reason why we don&apos;t support GetByIdFlush right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135045</commentid>
    <comment_count>2</comment_count>
      <attachid>263631</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-20 16:35:46 -0700</bug_when>
    <thetext>Created attachment 263631
WIP

This is probably the patch, I just want to run perf numbers before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135066</commentid>
    <comment_count>3</comment_count>
      <attachid>263637</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-20 17:09:00 -0700</bug_when>
    <thetext>Created attachment 263637
patch

Now with a changelog.
I think this patch is ready for review. I&apos;ll run and post performance numbers
before landing the patch (if performance is good/neutral).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135067</commentid>
    <comment_count>4</comment_count>
      <attachid>263637</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-20 17:09:47 -0700</bug_when>
    <thetext>Comment on attachment 263637
patch

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

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:1012
&gt; +            if (!numberOfBytesUsedToPreserveReusedRegisters) {
&gt; +                unsigned stackOffset = WTF::roundUpToMultipleOf(stackAlignmentBytes(), maxFrameExtentForSlowPathCall);
&gt; +                if (stackOffset) {
&gt; +                    jit.subPtr(
&gt; +                        CCallHelpers::TrustedImm32(stackOffset),
&gt; +                        CCallHelpers::stackPointerRegister);
&gt; +                }
&gt; +            }

This code and the respective incrementing of the stack may deserve its own helper function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135355</commentid>
    <comment_count>5</comment_count>
      <attachid>263722</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-21 13:10:31 -0700</bug_when>
    <thetext>Created attachment 263722
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135370</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-21 13:57:02 -0700</bug_when>
    <thetext>perf:
Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on Saams-Mac-Pro (MacPro6,1).

VMs tested:
&quot;og&quot; at /Volumes/Data/WK/os-a/OpenSource/WebKitBuild/Release/jsc (r191365)
&quot;FTLGetPutByIdFlush&quot; at /Volumes/Data/WK/os-b/OpenSource/WebKitBuild/Release/jsc (r191365)

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

                                                            og                FTLGetPutByIdFlush                                
SunSpider:
   3d-cube                                           10.3725+-0.3872           10.1750+-0.1102          might be 1.0194x faster
   3d-morph                                          10.1964+-0.0382     ?     10.2101+-0.0432        ?
   3d-raytrace                                       12.0210+-0.2383     ?     12.0833+-0.3436        ?
   access-binary-trees                                4.1777+-0.0669            4.1610+-0.0454        
   access-fannkuch                                   11.5863+-0.1631           11.5795+-0.0522        
   access-nbody                                       5.5217+-0.0118     ?      5.5600+-0.0859        ?
   access-nsieve                                      6.4817+-0.3064            6.3042+-0.0826          might be 1.0282x faster
   bitops-3bit-bits-in-byte                           2.3778+-0.0360            2.3449+-0.0120          might be 1.0140x faster
   bitops-bits-in-byte                                6.1410+-0.0370     ?      6.1576+-0.0927        ?
   bitops-bitwise-and                                 3.9586+-0.0152     ?      3.9844+-0.0319        ?
   bitops-nsieve-bits                                 5.6875+-0.0163     ?      5.6876+-0.0082        ?
   controlflow-recursive                              4.5168+-0.0248     ?      4.5639+-0.0643        ? might be 1.0104x slower
   crypto-aes                                         8.6504+-0.0555     ?      8.7662+-0.1921        ? might be 1.0134x slower
   crypto-md5                                         4.9954+-0.0529     ?      5.0013+-0.0470        ?
   crypto-sha1                                        4.7178+-0.0198            4.7044+-0.0250        
   date-format-tofte                                 17.0622+-0.2271           17.0246+-0.2811        
   date-format-xparb                                 10.2315+-0.3820           10.2137+-0.3240        
   math-cordic                                        5.4633+-0.0636            5.4453+-0.0331        
   math-partial-sums                                 10.3344+-0.0994     ^     10.2085+-0.0197        ^ definitely 1.0123x faster
   math-spectral-norm                                 3.8560+-0.0261            3.8335+-0.0212        
   regexp-dna                                        12.7555+-0.0904     ?     12.8246+-0.2510        ?
   string-base64                                      8.5485+-0.0293     ?      8.5811+-0.1173        ?
   string-fasta                                      11.5161+-0.0822     ?     11.5414+-0.1613        ?
   string-tagcloud                                   16.3588+-0.2577     ?     16.3630+-0.1434        ?
   string-unpack-code                                36.3672+-0.8336     ?     36.5715+-0.5530        ?
   string-validate-input                              8.5562+-0.2215     ?      8.5941+-0.1075        ?

   &lt;arithmetic&gt;                                       9.3251+-0.0508     ?      9.3263+-0.0169        ? might be 1.0001x slower

                                                            og                FTLGetPutByIdFlush                                
LongSpider:
   3d-cube                                         1580.3456+-5.4836     ?   1592.9001+-19.7890       ?
   3d-morph                                        2812.4348+-2.1632         2811.4871+-1.9699        
   3d-raytrace                                     1233.8668+-8.1091     ?   1235.6562+-2.5791        ?
   access-binary-trees                             1585.7750+-3.1075         1584.9970+-5.5826        
   access-fannkuch                                  646.0040+-12.4756    ?    650.2081+-10.7889       ?
   access-nbody                                    1081.8744+-0.1493     ?   1082.3600+-0.6360        ?
   access-nsieve                                    741.9214+-3.0885          741.5605+-5.1884        
   bitops-3bit-bits-in-byte                          68.8749+-0.7070           68.4581+-0.1216        
   bitops-bits-in-byte                              180.8797+-2.0931          180.6799+-2.0713        
   bitops-nsieve-bits                               798.5990+-0.7866          793.8543+-4.0834        
   controlflow-recursive                            884.9874+-0.3817     ?    885.2293+-0.5771        ?
   crypto-aes                                      1124.6741+-6.0099     ?   1129.3689+-5.6893        ?
   crypto-md5                                       950.5893+-12.7415         943.3004+-4.4041        
   crypto-sha1                                     1319.2210+-7.6587     ?   1324.0231+-7.0068        ?
   date-format-tofte                               1342.6245+-23.3287        1338.4073+-9.5761        
   date-format-xparb                               1461.1801+-62.0036        1419.8145+-31.1734         might be 1.0291x faster
   hash-map                                         295.1915+-1.9812          294.6568+-3.0448        
   math-cordic                                      989.5805+-2.6571          989.0898+-2.1950        
   math-partial-sums                                992.7599+-2.1071          990.7796+-1.1834        
   math-spectral-norm                              1043.9452+-3.7308         1042.2636+-2.9816        
   string-base64                                    717.4352+-35.4524    ?    733.4597+-46.5557       ? might be 1.0223x slower
   string-fasta                                     739.3921+-4.2592          736.6447+-4.2057        
   string-tagcloud                                  352.8330+-4.1245     ?    357.6675+-3.3820        ? might be 1.0137x slower

   &lt;geometric&gt;                                      801.7241+-1.1487          801.6068+-2.6903          might be 1.0001x faster

                                                            og                FTLGetPutByIdFlush                                
V8Spider:
   crypto                                            95.5741+-0.5418           95.4929+-0.5539        
   deltablue                                        119.3330+-3.5327     ?    120.9410+-2.9700        ? might be 1.0135x slower
   earley-boyer                                      80.9198+-0.2944     ?     80.9979+-0.6760        ?
   raytrace                                          55.3568+-0.4538           55.3074+-0.5770        
   regexp                                           132.3470+-0.5573     ?    132.9472+-0.9850        ?
   richards                                          99.4015+-0.4961     ?     99.4573+-0.5606        ?
   splay                                             65.0081+-0.7690           64.9568+-0.4893        

   &lt;geometric&gt;                                       88.8374+-0.5814     ?     89.0521+-0.3295        ? might be 1.0024x slower

                                                            og                FTLGetPutByIdFlush                                
Octane:
   encrypt                                           0.33779+-0.00769          0.33276+-0.00319         might be 1.0151x faster
   decrypt                                           6.00193+-0.01454    ?     6.01396+-0.01304       ?
   deltablue                                x2       0.27442+-0.00145          0.27378+-0.00141       
   earley                                            0.60919+-0.00092          0.60882+-0.00447       
   boyer                                             9.51924+-0.03316    ?     9.53118+-0.01656       ?
   navier-stokes                            x2       9.34622+-0.00890    ?     9.34854+-0.01075       ?
   raytrace                                 x2       1.76075+-0.00666          1.76054+-0.00811       
   richards                                 x2       0.19269+-0.00115          0.19268+-0.00069       
   splay                                    x2       0.60854+-0.00403    ?     0.60894+-0.00387       ?
   regexp                                   x2      49.35221+-0.09352    ?    49.39258+-0.17504       ?
   pdfjs                                    x2      77.47175+-0.23458         77.39958+-0.25844       
   mandreel                                 x2      95.27426+-0.27790         94.96508+-0.21365       
   gbemu                                    x2      94.04599+-11.03933        92.48634+-13.50797        might be 1.0169x faster
   closure                                           1.32149+-0.00460          1.31958+-0.00790       
   jquery                                           17.22774+-0.06414    ?    17.25588+-0.08644       ?
   box2d                                    x2      24.56562+-0.16015    ?    24.57202+-0.08285       ?
   zlib                                     x2     702.92336+-17.34491   ?   716.81132+-1.61492       ? might be 1.0198x slower
   typescript                               x2    1504.32111+-14.25991   ?  1513.29575+-7.16984       ?

   &lt;geometric&gt;                                      11.45254+-0.09137         11.44931+-0.10109         might be 1.0003x faster

                                                            og                FTLGetPutByIdFlush                                
Kraken:
   ai-astar                                          304.017+-2.562            301.133+-2.185         
   audio-beat-detection                               98.745+-0.469      ?      99.117+-0.575         ?
   audio-dft                                         192.111+-0.410      ?     192.139+-0.394         ?
   audio-fft                                          72.354+-0.411             72.315+-0.128         
   audio-oscillator                                  120.454+-0.351            119.977+-0.299         
   imaging-darkroom                                  126.911+-0.123      ?     127.274+-0.644         ?
   imaging-desaturate                                114.330+-0.552            114.154+-0.412         
   imaging-gaussian-blur                             202.789+-0.352            202.109+-2.623         
   json-parse-financial                               84.345+-0.465      ?      84.486+-0.274         ?
   json-stringify-tinderbox                           53.169+-0.875      ^      50.303+-0.093         ^ definitely 1.0570x faster
   stanford-crypto-aes                                87.697+-1.578             86.953+-1.140         
   stanford-crypto-ccm                                78.394+-2.258             78.161+-1.148         
   stanford-crypto-pbkdf2                            193.426+-3.415            190.834+-1.341           might be 1.0136x faster
   stanford-crypto-sha256-iterative                   76.236+-0.329      ?      77.423+-1.179         ? might be 1.0156x slower

   &lt;arithmetic&gt;                                      128.927+-0.284      ^     128.313+-0.254         ^ definitely 1.0048x faster

                                                            og                FTLGetPutByIdFlush                                
JSRegress:
   abc-forward-loop-equal                            85.3681+-0.1912           85.3050+-0.0252        
   abc-postfix-backward-loop                         84.7060+-0.2472     ?     85.2921+-0.7559        ?
   abc-simple-backward-loop                          83.9852+-0.2102     ?     84.2442+-0.1628        ?
   abc-simple-forward-loop                           84.1826+-0.2419           83.9957+-0.1831        
   abc-skippy-loop                                   58.0497+-0.1264     ?     58.1908+-0.3573        ?
   abs-boolean                                        4.8067+-0.0407            4.7954+-0.0240        
   adapt-to-double-divide                            29.5724+-0.2766     ?     29.6646+-0.3609        ?
   aliased-arguments-getbyval                         2.1718+-0.0290            2.1378+-0.0208          might be 1.0159x faster
   allocate-big-object                                4.1899+-0.1594            4.1239+-0.0898          might be 1.0160x faster
   arguments-named-and-reflective                    20.1117+-0.2172           20.0623+-0.2070        
   arguments-out-of-bounds                           22.3438+-0.2037           22.3190+-0.1035        
   arguments-strict-mode                             18.6299+-0.2481     ?     18.8603+-0.2797        ? might be 1.0124x slower
   arguments                                         17.0532+-0.8383           16.3791+-0.2296          might be 1.0412x faster
   arity-mismatch-inlining                            1.7612+-0.0193     ?      1.7631+-0.0268        ?
   array-access-polymorphic-structure                13.6253+-0.1567           13.4991+-0.1569        
   array-nonarray-polymorhpic-access                 54.2928+-0.9037     ?     54.4730+-0.5085        ?
   array-prototype-every                            154.2578+-2.9043     ?    154.5336+-1.4130        ?
   array-prototype-forEach                          152.9067+-2.1977     ?    153.8875+-1.8130        ?
   array-prototype-map                              170.5205+-2.5950     ?    170.6505+-2.5810        ?
   array-prototype-reduce                           150.7889+-3.2933     ?    151.1198+-1.3272        ?
   array-prototype-reduceRight                      149.3363+-1.2176     ?    151.7408+-1.3009        ? might be 1.0161x slower
   array-prototype-some                             156.1134+-3.2575          155.6481+-2.1535        
   array-splice-contiguous                           50.9550+-0.4414           50.9155+-0.3427        
   array-with-double-add                              7.7288+-0.0266     !      7.7689+-0.0119        ! definitely 1.0052x slower
   array-with-double-increment                        5.8878+-0.0265     ?      5.9155+-0.0223        ?
   array-with-double-mul-add                          9.1422+-0.0376     ?      9.1765+-0.0238        ?
   array-with-double-sum                              5.8358+-0.0294     ?      5.8380+-0.0241        ?
   array-with-int32-add-sub                          12.7670+-0.6119           12.5389+-0.0170          might be 1.0182x faster
   array-with-int32-or-double-sum                     6.0265+-0.0179     ?      6.0699+-0.1306        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     54.1938+-0.4999     ?     54.5628+-0.7535        ?
   ArrayBuffer-DataView-alloc-long-lived             24.8240+-0.3040           24.6711+-0.2116        
   ArrayBuffer-Int32Array-byteOffset                  6.8265+-0.0338     ?      6.8773+-0.0733        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     55.5953+-0.7491     ?     56.1251+-1.2189        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     39.5934+-0.5979     ?     40.0241+-1.0407        ? might be 1.0109x slower
   ArrayBuffer-Int8Array-alloc-long-lived            23.0624+-0.8783           22.8457+-0.4993        
   ArrayBuffer-Int8Array-alloc                       19.2609+-0.0758     ?     19.8217+-0.6022        ? might be 1.0291x slower
   arrowfunction-call                                20.7137+-0.1676           20.6395+-0.1115        
   asmjs_bool_bug                                    14.9890+-0.3748           14.9033+-0.4045        
   assign-custom-setter-polymorphic                   5.5747+-0.0437            5.5331+-0.0411        
   assign-custom-setter                               7.8242+-0.1303     !      8.0742+-0.0995        ! definitely 1.0319x slower
   basic-set                                         14.5491+-0.3083     ?     14.7232+-0.1395        ? might be 1.0120x slower
   big-int-mul                                        6.9890+-0.0669     ?      7.0496+-0.0254        ?
   boolean-test                                       5.6767+-0.0316     ?      5.6824+-0.0327        ?
   branch-fold                                        6.7221+-0.1411            6.7093+-0.0246        
   branch-on-string-as-boolean                       35.7447+-0.2712           35.4713+-0.2052        
   by-val-generic                                     4.4391+-0.0363     ?      4.4644+-0.1050        ?
   call-spread-apply                                 53.2908+-0.7220     ?     53.4774+-1.0109        ?
   call-spread-call                                  43.8798+-0.3060           43.4973+-0.4477        
   captured-assignments                               1.0222+-0.0326     ?      1.0380+-0.0313        ? might be 1.0154x slower
   cast-int-to-double                                 9.4923+-0.1341            9.4598+-0.1004        
   cell-argument                                     12.3694+-0.1964     ?     12.7226+-0.4203        ? might be 1.0286x slower
   cfg-simplify                                       5.0876+-0.0484     ?      5.1180+-0.0343        ?
   chain-getter-access                               16.2177+-0.2292     ?     16.2840+-0.2104        ?
   cmpeq-obj-to-obj-other                            17.8462+-0.0786     ^     17.1815+-0.0414        ^ definitely 1.0387x faster
   constant-test                                      8.7517+-0.0312            8.7136+-0.0153        
   create-lots-of-functions                          17.3912+-0.3288     ?     17.7879+-0.5122        ? might be 1.0228x slower
   cse-new-array-buffer                               4.1218+-0.0343            4.1158+-0.0308        
   cse-new-array                                      4.3859+-0.1069            4.3740+-0.2115        
   custom-setter-getter-as-put-get-by-id              1.1494+-0.0336     ?      1.1540+-0.0318        ?
   DataView-custom-properties                        64.0469+-0.6224           63.6169+-0.4280        
   delay-tear-off-arguments-strictmode               24.9060+-0.1224     ?     24.9414+-0.1201        ?
   deltablue-varargs                                383.3933+-4.5894          380.7089+-2.1257        
   destructuring-arguments                          316.7125+-1.6033     !    319.3188+-0.9073        ! definitely 1.0082x slower
   destructuring-parameters-overridden-by-function   
                                                      1.0587+-0.0317     ?      1.0732+-0.0119        ? might be 1.0137x slower
   destructuring-swap                                 9.1214+-0.0269            9.0988+-0.0204        
   direct-arguments-getbyval                          2.2987+-0.3370            2.1663+-0.0400          might be 1.0611x faster
   div-boolean-double                                 9.1550+-0.0723            9.1339+-0.0478        
   div-boolean                                       13.7427+-0.0272     ?     13.9179+-0.4962        ? might be 1.0127x slower
   double-get-by-val-out-of-bounds                    8.2418+-0.0544            8.2118+-0.1723        
   double-pollution-getbyval                         15.1571+-0.0313     ?     15.1735+-0.0222        ?
   double-pollution-putbyoffset                       7.2459+-0.0911            7.2248+-0.1012        
   double-real-use                                   53.5548+-0.1248     ?     53.5651+-0.2315        ?
   double-to-int32-typed-array-no-inline              4.2538+-0.0319     ?      4.2965+-0.0620        ? might be 1.0100x slower
   double-to-int32-typed-array                        3.9852+-0.0304            3.9729+-0.0365        
   double-to-uint32-typed-array-no-inline             4.4416+-0.0737            4.4327+-0.0278        
   double-to-uint32-typed-array                       4.0005+-0.0973            3.9991+-0.0423        
   elidable-new-object-dag                           66.9291+-0.7013           66.6540+-0.5695        
   elidable-new-object-roflcopter                    63.0044+-2.5507           62.2899+-1.9158          might be 1.0115x faster
   elidable-new-object-then-call                     61.8832+-0.8398           61.4530+-0.6270        
   elidable-new-object-tree                          72.9371+-1.1744           72.8867+-0.7084        
   empty-string-plus-int                              9.7834+-0.0718            9.7708+-0.1160        
   emscripten-cube2hash                              68.1933+-0.7279     ?     68.5768+-0.3642        ?
   exit-length-on-plain-object                       29.0919+-0.2030     !     29.5722+-0.2435        ! definitely 1.0165x slower
   external-arguments-getbyval                        2.3919+-0.1402     ?      2.5451+-0.1096        ? might be 1.0641x slower
   external-arguments-putbyval                        4.2267+-0.0414            4.2253+-0.0378        
   fixed-typed-array-storage-var-index                2.5870+-0.3718            2.5723+-0.2766        
   fixed-typed-array-storage                          1.8824+-0.0207     ?      1.8961+-0.0290        ?
   Float32Array-matrix-mult                           8.9458+-0.0332     ?      8.9626+-0.0390        ?
   Float32Array-to-Float64Array-set                  99.5847+-0.3664     ^     95.9433+-0.3108        ^ definitely 1.0380x faster
   Float64Array-alloc-long-lived                    111.5900+-0.2546     ?    111.9474+-0.2020        ?
   Float64Array-to-Int16Array-set                   120.5672+-0.4181     ^    118.5944+-0.2612        ^ definitely 1.0166x faster
   fold-double-to-int                                25.2267+-0.0784     ?     25.2819+-0.2115        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     16.6762+-0.2251     ?     16.6899+-0.2231        ?
   fold-get-by-id-to-multi-get-by-offset             14.2857+-0.2109     ?     14.5710+-0.3157        ? might be 1.0200x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                     12.9852+-0.1400           12.9297+-0.0636        
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     13.3393+-0.0488     ?     13.3445+-0.0394        ?
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     16.3044+-0.0406     ?     16.3721+-0.1273        ?
   fold-multi-put-by-offset-to-put-by-offset   
                                                     15.3481+-0.0407           15.3390+-0.0659        
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     22.0314+-0.5361           21.8436+-0.7725        
   fold-put-by-id-to-multi-put-by-offset             18.5699+-0.4882           18.5117+-0.3316        
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     18.0268+-0.4847     ?     18.1188+-0.3427        ?
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     17.8917+-0.5266     ?     18.1972+-0.3260        ? might be 1.0171x slower
   fold-put-structure                                11.8939+-0.0849           11.8451+-0.0607        
   for-of-iterate-array-entries                      21.2741+-0.2934     ?     21.4276+-0.9025        ?
   for-of-iterate-array-keys                          7.1412+-0.1131            7.0732+-0.0864        
   for-of-iterate-array-values                        6.5757+-0.0837            6.5541+-0.0587        
   fround                                            32.9999+-0.2220           32.7177+-0.5092        
   ftl-library-inlining-dataview                    117.2252+-1.7921     !    132.3384+-10.4344       ! definitely 1.1289x slower
   ftl-library-inlining                             156.5293+-13.1582    ?    157.2976+-8.9383        ?
   function-call                                     20.7066+-0.1606           20.5782+-0.0652        
   function-dot-apply                                 4.1354+-0.1751            4.0782+-0.0338          might be 1.0140x faster
   function-test                                      5.1781+-0.0404     ?      5.1987+-0.0291        ?
   function-with-eval                               172.0475+-0.9153          171.0815+-0.1677        
   gcse-poly-get-less-obvious                        50.9582+-0.5482     ?     51.0291+-0.1717        ?
   gcse-poly-get                                     52.3052+-0.2477     ?     52.3203+-0.1658        ?
   gcse                                               7.2343+-0.0312            7.2030+-0.0165        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      4.7506+-0.0183     ?      4.7837+-0.0238        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      9.4083+-0.0309     ?      9.4117+-0.0238        ?
   get-by-id-chain-from-try-block                     4.5550+-0.0221     ?      4.5809+-0.0942        ?
   get-by-id-check-structure-elimination              8.1466+-0.0204     !      8.1884+-0.0181        ! definitely 1.0051x slower
   get-by-id-proto-or-self                           37.3012+-2.9477           36.4058+-2.8287          might be 1.0246x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      5.3814+-0.1172            5.3297+-0.0210        
   get-by-id-self-or-proto                           35.6140+-2.5088     ?     36.3205+-2.9752        ? might be 1.0198x slower
   get-by-val-out-of-bounds                           7.9756+-0.1618     ?      8.1555+-0.4071        ? might be 1.0225x slower
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      4.8148+-0.0387     ?      4.8545+-0.1275        ?
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                     12.3766+-0.4746           12.2062+-0.0608          might be 1.0140x faster
   get-by-val-with-string-chain-from-try-block   
                                                      4.6384+-0.0207     ?      4.6569+-0.0315        ?
   get-by-val-with-string-check-structure-elimination   
                                                     11.1704+-0.1457           11.1145+-0.0528        
   get-by-val-with-string-proto-or-self              36.6116+-2.7112           35.7188+-1.7972          might be 1.0250x faster
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      6.2597+-0.1620            6.1577+-0.0404          might be 1.0166x faster
   get-by-val-with-string-self-or-proto              35.7119+-1.7402     ?     37.9825+-2.8034        ? might be 1.0636x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      5.8000+-0.2142     ?      5.8661+-0.1840        ? might be 1.0114x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     23.6539+-0.0465           23.6182+-0.0327        
   get-by-val-with-symbol-chain-from-try-block   
                                                      4.6530+-0.0320            4.6292+-0.0228        
   get-by-val-with-symbol-check-structure-elimination   
                                                     22.5139+-0.0326           22.5033+-0.0162        
   get-by-val-with-symbol-proto-or-self              35.0397+-0.4510     ?     36.8731+-2.5530        ? might be 1.0523x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      7.6357+-0.0195     ?      7.6443+-0.0297        ?
   get-by-val-with-symbol-self-or-proto              36.0168+-2.4026           35.3152+-1.8512          might be 1.0199x faster
   get_callee_monomorphic                             4.0888+-0.0590            4.0529+-0.0679        
   get_callee_polymorphic                             6.0930+-0.0700     ?      6.0963+-0.0229        ?
   getter-no-activation                               8.4763+-0.0465     ?      8.4766+-0.0433        ?
   getter-prototype                                  18.9814+-0.3798           18.9234+-0.4320        
   getter-richards-try-catch                       2427.7096+-77.8439    ?   2461.7211+-77.1199       ? might be 1.0140x slower
   getter-richards                                  168.2614+-3.3601     ?    169.4704+-3.7890        ?
   getter                                             9.4460+-0.0326            9.4453+-0.0276        
   global-object-access-with-mutating-structure   
                                                     10.6314+-0.0789     !     10.7658+-0.0503        ! definitely 1.0126x slower
   global-var-const-infer-fire-from-opt               1.5548+-0.0214            1.5467+-0.0243        
   global-var-const-infer                             1.3994+-0.0204            1.3986+-0.0132        
   hard-overflow-check-equal                         69.6494+-0.6425           69.2942+-0.5508        
   hard-overflow-check                               68.9325+-0.5454     ?     69.1041+-0.6004        ?
   HashMap-put-get-iterate-keys                      43.8946+-0.1627     ?     44.0078+-0.3533        ?
   HashMap-put-get-iterate                           43.5743+-0.2427     ?     43.6506+-0.3978        ?
   HashMap-string-put-get-iterate                    46.0424+-0.5779           45.8444+-0.9980        
   hoist-make-rope                                   17.6725+-1.0729           16.7864+-0.5642          might be 1.0528x faster
   hoist-poly-check-structure-effectful-loop   
                                                      7.6285+-0.0273            7.6271+-0.0261        
   hoist-poly-check-structure                         5.7518+-0.0221     ?      5.7746+-0.0483        ?
   imul-double-only                                  14.0974+-0.7521           13.9581+-0.7220        
   imul-int-only                                     17.1264+-0.6628     ?     17.1895+-0.9760        ?
   imul-mixed                                        13.5335+-0.5036     ?     14.1002+-0.1497        ? might be 1.0419x slower
   in-four-cases                                     41.0514+-0.3826           40.6782+-0.2097        
   in-one-case-false                                 20.1124+-0.0478     ?     20.1367+-0.1401        ?
   in-one-case-true                                  20.1188+-0.1410           20.0545+-0.0335        
   in-two-cases                                      21.6656+-0.0578     ?     21.6812+-0.0914        ?
   indexed-properties-in-objects                      5.1957+-0.0300     ?      5.2269+-0.0588        ?
   infer-closure-const-then-mov-no-inline             7.1994+-0.0259     ?      7.3462+-0.4518        ? might be 1.0204x slower
   infer-closure-const-then-mov                      33.0612+-0.2680           33.0260+-0.1880        
   infer-closure-const-then-put-to-scope-no-inline   
                                                     23.8410+-0.0374           23.7730+-0.0576        
   infer-closure-const-then-put-to-scope             41.4582+-0.7928     ?     41.4979+-0.4188        ?
   infer-closure-const-then-reenter-no-inline   
                                                    103.8416+-1.3598          103.2195+-0.4080        
   infer-closure-const-then-reenter                  42.6625+-0.1761           42.6263+-0.2665        
   infer-constant-global-property                     6.3931+-0.0925            6.3829+-0.0974        
   infer-constant-property                            4.8495+-0.0391     ?      4.8653+-0.0583        ?
   infer-one-time-closure-ten-vars                   18.0676+-0.4956     ?     18.0711+-0.2092        ?
   infer-one-time-closure-two-vars                   17.2664+-0.1151           17.1810+-0.1688        
   infer-one-time-closure                            17.0318+-0.1379           16.9289+-0.3123        
   infer-one-time-deep-closure                       28.4378+-0.5821           28.0218+-0.2329          might be 1.0148x faster
   inline-arguments-access                            6.8061+-0.0508     ?      6.8215+-0.0692        ?
   inline-arguments-aliased-access                    6.9226+-0.0956     ?      6.9879+-0.1398        ?
   inline-arguments-local-escape                      6.8568+-0.1697     ?      6.9195+-0.1001        ?
   inline-get-scoped-var                              8.3065+-0.0552     ?      8.3205+-0.0569        ?
   inlined-put-by-id-transition                      17.0029+-0.1978           16.7458+-0.2066          might be 1.0154x faster
   inlined-put-by-val-with-string-transition   
                                                     84.1675+-0.2702     ?     84.8033+-1.4904        ?
   inlined-put-by-val-with-symbol-transition   
                                                     86.1176+-3.2509           84.3917+-0.5763          might be 1.0205x faster
   int-or-other-abs-then-get-by-val                   8.3141+-0.1378            8.2890+-0.0237        
   int-or-other-abs-zero-then-get-by-val             30.7524+-0.2816     ?     31.0280+-0.4371        ?
   int-or-other-add-then-get-by-val                   8.1826+-0.0991     ?      8.2074+-0.1088        ?
   int-or-other-add                                   9.5279+-0.0272            9.5114+-0.0343        
   int-or-other-div-then-get-by-val                   7.1582+-0.0299     ?      7.1664+-0.0491        ?
   int-or-other-max-then-get-by-val                   7.3717+-0.0517     ?      7.4885+-0.2187        ? might be 1.0158x slower
   int-or-other-min-then-get-by-val                   7.3527+-0.0745     ?      7.4600+-0.1591        ? might be 1.0146x slower
   int-or-other-mod-then-get-by-val                   6.7956+-0.0217            6.7914+-0.0114        
   int-or-other-mul-then-get-by-val                   6.9301+-0.0202     ?      6.9355+-0.0263        ?
   int-or-other-neg-then-get-by-val                   7.9812+-0.1323            7.9255+-0.0221        
   int-or-other-neg-zero-then-get-by-val             31.6789+-0.4432           31.3936+-0.4916        
   int-or-other-sub-then-get-by-val                   8.0915+-0.0466            8.0756+-0.0227        
   int-or-other-sub                                   6.3471+-0.0259            6.3435+-0.0213        
   int-overflow-local                                 7.8055+-0.0270     ?      7.8286+-0.0266        ?
   Int16Array-alloc-long-lived                       81.3041+-0.9086     ?     81.3646+-0.6915        ?
   Int16Array-bubble-sort-with-byteLength            45.8737+-0.3326     ?     46.0270+-0.6342        ?
   Int16Array-bubble-sort                            43.9430+-0.1229           43.9364+-0.1309        
   Int16Array-load-int-mul                            2.8747+-0.0137     ?      2.8873+-0.0193        ?
   Int16Array-to-Int32Array-set                      88.4954+-0.1909     ?     88.7872+-0.1719        ?
   Int32Array-alloc-large                            29.3000+-0.4887           28.9466+-0.8059          might be 1.0122x faster
   Int32Array-alloc-long-lived                       91.2803+-0.9897           91.0746+-0.8556        
   Int32Array-alloc                                   4.6165+-0.1146            4.5952+-0.0936        
   Int32Array-Int8Array-view-alloc                   12.1248+-0.0938     ?     12.3641+-0.5611        ? might be 1.0197x slower
   int52-spill                                        9.5803+-0.0655            9.5615+-0.0989        
   Int8Array-alloc-long-lived                        72.8364+-0.7395     ?     73.5012+-1.1232        ?
   Int8Array-load-with-byteLength                     6.1570+-0.4745            5.9619+-0.0240          might be 1.0327x faster
   Int8Array-load                                     5.9540+-0.0159     ?      5.9622+-0.0358        ?
   integer-divide                                    20.7567+-0.4882           20.6127+-0.1054        
   integer-modulo                                     3.5682+-0.0231     ?      3.5829+-0.0511        ?
   is-boolean-fold-tricky                             7.4779+-0.0444     ?      7.4855+-0.0553        ?
   is-boolean-fold                                    4.9799+-0.0416     ?      5.0550+-0.0379        ? might be 1.0151x slower
   is-function-fold-tricky-internal-function   
                                                     21.2739+-0.1031     ^     20.6641+-0.0300        ^ definitely 1.0295x faster
   is-function-fold-tricky                            7.6218+-0.0819     ?      7.6380+-0.0369        ?
   is-function-fold                                   5.1073+-0.0583            5.0987+-0.0492        
   is-number-fold-tricky                              7.4276+-0.0416     ?      7.4536+-0.0273        ?
   is-number-fold                                     5.0200+-0.0499     ?      5.0750+-0.0417        ? might be 1.0110x slower
   is-object-or-null-fold-functions                   5.1609+-0.0285     ?      5.2020+-0.0476        ?
   is-object-or-null-fold-less-tricky                 7.5947+-0.0486     ?      7.6184+-0.0658        ?
   is-object-or-null-fold-tricky                     10.3240+-0.1412           10.2633+-0.0283        
   is-object-or-null-fold                             5.0792+-0.0202     !      5.1456+-0.0195        ! definitely 1.0131x slower
   is-object-or-null-trickier-function                7.7266+-0.0160     ?      7.7642+-0.0385        ?
   is-object-or-null-trickier-internal-function   
                                                     21.4075+-0.0863     ^     21.0687+-0.0264        ^ definitely 1.0161x faster
   is-object-or-null-tricky-function                  7.6654+-0.0596            7.6627+-0.0230        
   is-object-or-null-tricky-internal-function   
                                                     16.0543+-0.1374     ^     15.7357+-0.1247        ^ definitely 1.0202x faster
   is-string-fold-tricky                              7.4278+-0.0155     ?      7.4727+-0.0413        ?
   is-string-fold                                     5.0075+-0.0287     ?      5.0380+-0.0387        ?
   is-undefined-fold-tricky                           6.1494+-0.0331     ?      6.1736+-0.0289        ?
   is-undefined-fold                                  4.9886+-0.0775     !      5.0932+-0.0230        ! definitely 1.0210x slower
   JSONP-negative-0                                   0.6369+-0.0148            0.6306+-0.0185        
   large-int-captured                                 7.7477+-0.1166     ?      7.7849+-0.1031        ?
   large-int-neg                                     28.0575+-0.1523           28.0425+-0.1469        
   large-int                                         25.6746+-0.2808           25.5233+-0.1804        
   load-varargs-elimination                          40.9541+-0.6825           40.8985+-0.4800        
   logical-not-weird-types                            6.1692+-0.0271            6.1602+-0.0631        
   logical-not                                        8.7360+-0.3905            8.4159+-0.0309          might be 1.0380x faster
   lots-of-fields                                    20.6995+-0.2132     ?     20.8606+-0.2723        ?
   make-indexed-storage                               5.4416+-0.1476     ?      5.4817+-0.1825        ?
   make-rope-cse                                      6.4436+-0.2653            6.3450+-0.1469          might be 1.0155x faster
   marsaglia-larger-ints                             66.5766+-0.7989           66.2080+-0.2125        
   marsaglia-osr-entry                               40.5694+-0.2763           40.4178+-0.1569        
   math-with-out-of-bounds-array-values              44.3014+-0.5410     ?     44.4602+-0.2765        ?
   max-boolean                                        4.4255+-0.0203     ?      4.4524+-0.0195        ?
   method-on-number                                  31.1813+-0.0529     ?     31.4272+-0.7938        ?
   min-boolean                                        4.5300+-0.0941     ?      4.5302+-0.0374        ?
   minus-boolean-double                               5.6627+-0.0246     ?      5.6868+-0.0284        ?
   minus-boolean                                      4.2082+-0.0356     ?      4.2339+-0.0400        ?
   misc-strict-eq                                    61.9693+-1.5829           61.6622+-1.7379        
   mod-boolean-double                                19.1882+-0.0432     ?     19.3311+-0.1779        ?
   mod-boolean                                       13.7003+-0.0408     ?     13.7772+-0.1164        ?
   mul-boolean-double                                 6.5946+-0.0182     ?      6.5998+-0.0156        ?
   mul-boolean                                        5.1310+-0.0194     ?      5.1385+-0.0192        ?
   neg-boolean                                        5.6645+-0.0217     !      5.7143+-0.0224        ! definitely 1.0088x slower
   negative-zero-divide                               0.8010+-0.0259     ?      0.8060+-0.0202        ?
   negative-zero-modulo                               0.8327+-0.0288            0.8152+-0.0110          might be 1.0214x faster
   negative-zero-negate                               0.7693+-0.0212     ?      0.7850+-0.0310        ? might be 1.0203x slower
   nested-function-parsing                           87.5898+-0.5250           87.5330+-0.6346        
   new-array-buffer-dead                            165.6927+-0.5502     ?    165.9374+-0.5705        ?
   new-array-buffer-push                             11.1824+-0.1074     ?     11.4153+-0.7916        ? might be 1.0208x slower
   new-array-dead                                    32.7068+-1.2177           32.5530+-0.7230        
   new-array-push                                     6.7115+-0.1125            6.6083+-0.1988          might be 1.0156x faster
   no-inline-constructor                             62.9956+-0.3948     ?     63.0029+-0.3544        ?
   number-test                                        5.5967+-0.0411            5.5959+-0.0457        
   object-closure-call                                9.3658+-0.0302     ?      9.4031+-0.0448        ?
   object-get-own-property-symbols-on-large-array   
                                                      6.8799+-0.1598            6.8211+-0.1017        
   object-test                                        5.2259+-0.0555            5.1663+-0.0170          might be 1.0115x faster
   obvious-sink-pathology-taken                     190.1294+-0.7152          189.9955+-0.4334        
   obvious-sink-pathology                            62.8655+-1.0029     ?     62.9855+-0.7232        ?
   obviously-elidable-new-object                     55.6400+-0.9208     ?     55.7052+-0.6361        ?
   plus-boolean-arith                                 4.5569+-0.0296            4.5476+-0.0065        
   plus-boolean-double                                5.7100+-0.0765     ?      5.7177+-0.0162        ?
   plus-boolean                                       4.3235+-0.0676     ?      4.4230+-0.2684        ? might be 1.0230x slower
   poly-chain-access-different-prototypes-simple   
                                                      4.7121+-0.0514     ?      4.7287+-0.1011        ?
   poly-chain-access-different-prototypes             4.7253+-0.0173            4.7179+-0.0255        
   poly-chain-access-simpler                          4.7114+-0.0380     ?      4.7851+-0.0690        ? might be 1.0157x slower
   poly-chain-access                                  4.7025+-0.0134     ?      4.7250+-0.0322        ?
   poly-stricteq                                    114.5341+-0.5295          114.4345+-0.3127        
   polymorphic-array-call                             2.6424+-0.0790            2.6259+-0.0767        
   polymorphic-get-by-id                              5.9923+-0.0258     ?      6.0103+-0.0328        ?
   polymorphic-put-by-id                             65.5204+-0.7493           64.4784+-1.2822          might be 1.0162x faster
   polymorphic-put-by-val-with-string                65.2015+-0.5418           64.8493+-0.2479        
   polymorphic-put-by-val-with-symbol                65.0817+-0.5825     ?     65.3294+-0.7287        ?
   polymorphic-structure                             24.2816+-0.2774           24.1552+-0.0710        
   polyvariant-monomorphic-get-by-id                 14.9125+-0.1108     ?     15.1008+-0.4929        ? might be 1.0126x slower
   proto-getter-access                               16.2392+-0.2435           16.1484+-0.2220        
   prototype-access-with-mutating-prototype          10.5198+-0.4503           10.2854+-0.1763          might be 1.0228x faster
   put-by-id-replace-and-transition                  14.9366+-0.1050           14.8921+-0.0897        
   put-by-id-slightly-polymorphic                     5.0859+-0.0279     ?      5.0967+-0.0314        ?
   put-by-id                                         18.5285+-0.1471     ?     18.6914+-0.1830        ?
   put-by-val-direct                                  0.7922+-0.0245     ?      0.8159+-0.0176        ? might be 1.0299x slower
   put-by-val-large-index-blank-indexing-type   
                                                      9.7188+-0.0855     ?      9.7729+-0.1213        ?
   put-by-val-machine-int                             4.6840+-0.0351            4.6756+-0.0304        
   put-by-val-with-string-replace-and-transition   
                                                     20.7287+-0.2146     ?     21.0356+-0.6102        ? might be 1.0148x slower
   put-by-val-with-string-slightly-polymorphic   
                                                      6.7187+-0.0271            6.7086+-0.0207        
   put-by-val-with-string                            19.4872+-0.1792     ?     19.6342+-0.1823        ?
   put-by-val-with-symbol-replace-and-transition   
                                                     22.9066+-0.1612           22.8580+-0.1220        
   put-by-val-with-symbol-slightly-polymorphic   
                                                      7.2638+-0.0277     ?      7.2836+-0.0411        ?
   put-by-val-with-symbol                            19.7312+-0.1860     ?     19.8092+-0.2834        ?
   rare-osr-exit-on-local                            26.8220+-0.1192     !     27.0959+-0.1244        ! definitely 1.0102x slower
   raytrace-with-empty-try-catch                     11.9933+-0.0971     ?     12.0152+-0.0782        ?
   raytrace-with-try-catch                           21.5003+-0.2895           21.3769+-0.1892        
   register-pressure-from-osr                        35.5052+-0.2556           35.3999+-0.0380        
   repeat-multi-get-by-offset                        42.0648+-0.0903     ?     42.1795+-0.1610        ?
   richards-empty-try-catch                         147.5727+-0.7587          147.1434+-0.5660        
   richards-try-catch                               494.5929+-2.0832          494.0771+-2.4288        
   setter-prototype                                  15.1339+-0.1194           15.0918+-0.1474        
   setter                                            10.1637+-0.0896           10.1127+-0.0304        
   simple-activation-demo                            45.6635+-0.0585     ?     45.8870+-0.2697        ?
   simple-getter-access                              20.4843+-0.1611           20.4467+-0.1790        
   simple-poly-call-nested                           14.6581+-0.0475     !     14.7422+-0.0167        ! definitely 1.0057x slower
   simple-poly-call                                   2.5637+-0.2220            2.4697+-0.0340          might be 1.0381x faster
   sin-boolean                                       35.2775+-2.5990     ?     35.3348+-2.8626        ?
   singleton-scope                                  121.3972+-2.1294     ?    122.6721+-1.4413        ? might be 1.0105x slower
   sink-function                                     18.4170+-0.1586           18.3340+-0.3410        
   sink-huge-activation                              30.9446+-1.3913           30.3179+-1.2999          might be 1.0207x faster
   sinkable-new-object-dag                          105.2189+-1.1255     ?    105.2568+-0.6089        ?
   sinkable-new-object-taken                         85.5034+-0.7254           84.7031+-0.4198        
   sinkable-new-object                               62.8872+-0.8398     ?     63.2575+-0.8551        ?
   slow-array-profile-convergence                     5.3979+-0.1369     ?      5.4180+-0.1325        ?
   slow-convergence                                   5.1206+-0.0739            5.0815+-0.0240        
   slow-ternaries                                    32.0678+-0.0426     ?     32.4976+-0.9741        ? might be 1.0134x slower
   sorting-benchmark                                 35.5613+-0.1854     ?     35.7093+-0.5414        ?
   sparse-conditional                                 2.3734+-0.0219            2.3543+-0.0189        
   splice-to-remove                                  28.5011+-2.8002           26.9030+-0.1393          might be 1.0594x faster
   string-char-code-at                               29.6239+-0.4911           29.5609+-0.2039        
   string-concat-object                               3.7933+-0.0489     ?      3.8067+-0.0574        ?
   string-concat-pair-object                          3.6752+-0.0331     ?      3.6846+-0.0512        ?
   string-concat-pair-simple                         17.7834+-0.1235     ?     17.8110+-0.1292        ?
   string-concat-simple                              18.6043+-0.1268     ?     18.9865+-0.7973        ? might be 1.0205x slower
   string-cons-repeat                                12.4345+-0.1155           12.3463+-0.1572        
   string-cons-tower                                 12.4148+-0.0684     ?     12.5934+-0.1392        ? might be 1.0144x slower
   string-equality                                   35.3358+-0.1243           35.2902+-0.0633        
   string-get-by-val-big-char                        12.6705+-0.0647     ?     12.7479+-0.0646        ?
   string-get-by-val-out-of-bounds-insane             6.7618+-0.0470     !      6.9408+-0.0738        ! definitely 1.0265x slower
   string-get-by-val-out-of-bounds                    9.1085+-0.0562     ?      9.1204+-0.0467        ?
   string-get-by-val                                  6.0040+-0.0212     !      6.1096+-0.0250        ! definitely 1.0176x slower
   string-hash                                        3.7377+-0.0168     ?      3.7392+-0.0240        ?
   string-long-ident-equality                        29.1707+-0.5335           28.9171+-0.1429        
   string-out-of-bounds                              23.7462+-0.4206     ?     23.7868+-0.1288        ?
   string-repeat-arith                               55.9512+-0.1744     !     58.3939+-0.5683        ! definitely 1.0437x slower
   string-sub                                        74.7477+-0.3702     !     80.2653+-0.7657        ! definitely 1.0738x slower
   string-test                                        5.3956+-0.0474            5.3894+-0.0453        
   string-var-equality                               65.0544+-0.7001           64.8870+-0.2226        
   structure-hoist-over-transitions                   4.2179+-0.0369     ?      4.2381+-0.0460        ?
   substring-concat-weird                            70.1210+-0.9000           69.5534+-0.2312        
   substring-concat                                  76.8485+-0.1353     ?     77.2716+-0.8613        ?
   substring                                         85.5503+-0.2092     ?     85.6616+-0.2008        ?
   switch-char-constant                               4.8457+-0.0311     ?      4.8786+-0.0487        ?
   switch-char                                       10.7303+-0.0267     ?     10.7539+-0.1221        ?
   switch-constant                                   13.0528+-0.1224           13.0367+-0.1313        
   switch-string-basic-big-var                       35.2575+-0.2870     ?     35.4896+-0.7119        ?
   switch-string-basic-big                           31.6585+-0.2047     ?     32.0469+-0.3005        ? might be 1.0123x slower
   switch-string-basic-var                           28.5310+-0.3082     ?     28.6630+-0.4614        ?
   switch-string-basic                               26.5439+-0.0918     ?     26.5644+-0.0658        ?
   switch-string-big-length-tower-var                36.1573+-0.0289     ?     36.1657+-0.0355        ?
   switch-string-length-tower-var                    28.0216+-0.0161           28.0180+-0.0206        
   switch-string-length-tower                        23.8513+-0.0409     ?     23.9830+-0.1049        ?
   switch-string-short                               23.9101+-0.1312           23.9025+-0.1161        
   switch                                            19.0180+-0.1233     ?     19.1775+-0.1802        ?
   tear-off-arguments-simple                          5.4194+-0.0482            5.4070+-0.0418        
   tear-off-arguments                                 7.2835+-0.0920     ?      7.3031+-0.1157        ?
   temporal-structure                                22.9243+-0.1078     ?     22.9559+-0.1197        ?
   to-int32-boolean                                  24.1005+-0.1284           24.0617+-0.0313        
   try-catch-get-by-val-cloned-arguments             18.3089+-0.0761           18.1134+-0.2439          might be 1.0108x faster
   try-catch-get-by-val-direct-arguments              3.7414+-0.0367     ?      3.7484+-0.0477        ?
   try-catch-get-by-val-scoped-arguments              8.0926+-0.3691            7.8751+-0.0944          might be 1.0276x faster
   typed-array-get-set-by-val-profiling              52.5433+-0.3906     ?     52.9340+-0.3226        ?
   undefined-property-access                        644.9998+-4.3870     ?    645.2288+-5.8836        ?
   undefined-test                                     5.6329+-0.0347            5.5793+-0.0460        
   unprofiled-licm                                   23.4185+-0.2414           23.3867+-0.2893        
   v8-raytrace-with-empty-try-catch                  65.8335+-1.2266           65.0331+-0.5574          might be 1.0123x faster
   v8-raytrace-with-try-catch                       142.7607+-1.1592          141.3521+-0.3575        
   varargs-call                                      25.3646+-0.0665     ?     25.4898+-0.1384        ?
   varargs-construct-inline                          43.9510+-0.5608           43.6809+-0.3368        
   varargs-construct                                 38.2410+-0.1350           38.1796+-0.0909        
   varargs-inline                                    17.5823+-0.0630     ?     17.5879+-0.0483        ?
   varargs-strict-mode                               19.5580+-0.1100           19.4368+-0.1687        
   varargs                                           19.3284+-0.1201     ?     19.5258+-0.5000        ? might be 1.0102x slower
   weird-inlining-const-prop                          4.0395+-0.0413     ?      4.0837+-0.0901        ? might be 1.0110x slower

   &lt;geometric&gt;                                       15.7624+-0.0187     ?     15.7789+-0.0153        ? might be 1.0010x slower

                                                            og                FTLGetPutByIdFlush                                
Geomean of preferred means:
   &lt;scaled-result&gt;                                   49.9096+-0.0829           49.8963+-0.0515          might be 1.0003x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135404</commentid>
    <comment_count>7</comment_count>
      <attachid>263722</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-21 14:49:50 -0700</bug_when>
    <thetext>Comment on attachment 263722
patch

Clearing flags on attachment: 263722

Committed r191404: &lt;http://trac.webkit.org/changeset/191404&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135405</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-21 14:49:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263631</attachid>
            <date>2015-10-20 16:35:46 -0700</date>
            <delta_ts>2015-10-20 17:09:00 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>15314</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTkxMzUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyAr
NTUsNyBAQCBXYXRjaHBvaW50KiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmFkZFdhCiAKIHZvaWQg
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpyZXN0b3JlU2NyYXRjaCgpCiB7Ci0gICAgYWxsb2NhdG9y
LT5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKCpqaXQsIG51bWJlck9mQnl0ZXNVc2Vk
VG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyk7CisgICAgYWxsb2NhdG9yLT5yZXN0b3JlUmV1c2Vk
UmVnaXN0ZXJzQnlQb3BwaW5nKCpqaXQsIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNl
ZFJlZ2lzdGVycywgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5v
RXh0cmFTcGFjZSk7CiB9CiAKIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkK
QEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmNhbGN1bGF0ZUxp
dgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dC0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwogCiAgICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0Zv
ckNhbGwgPSBSZWdpc3RlclNldChtX2xpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25I
YW5kbGluZ0NhbGxTaXRlLCBhbGxvY2F0b3ItPnVzZWRSZWdpc3RlcnMoKSk7Ci0gICAgICAgIG1f
bGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVnaXN0ZXJzVG9Ob3RT
YXZlRm9yQ2FsbCgpKTsKKyAgICAgICAgbV9saXZlUmVnaXN0ZXJzRm9yQ2FsbC5leGNsdWRlKFJl
Z2lzdGVyU2V0OjpyZWdpc3RlcnNUb05vdFNhdmVGb3JKU0NhbGwoKSk7CiAgICAgfQogfQogCkBA
IC03NDQsMTIgKzc0NCwxMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVy
YXRpCiAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElT
dHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSAw
OwotICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHJvb20gZm9yIHRoZSBDIGNhbGwgc28gb3Vy
IHNwaWxsYWdlIGlzbid0IG92ZXJ3cml0dGVuLgotICAgICAgICAgICAgaWYgKHN0YXRlLm51bWJl
ck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbigpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQotICAgICAgICAgICAgICAg
ICAgICBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVu
dEJ5dGVzKCksIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSByb29tIGZvciB0aGUgQyBjYWxsIHNvIGFueSBv
ZiBvdXIgc3RhY2sgc3BpbGxhZ2UgaXNuJ3Qgb3ZlcndyaXR0ZW4uCisgICAgICAgICAgICAvLyBX
ZSBhbHNvIG5lZWQgdG8gbWFrZSByb29tIGJlY2F1c2Ugd2UgbWF5IGJlIGFuIGlubGluZSBjYWNo
ZSBpbiB0aGUgRlRMIGFuZCBub3QKKyAgICAgICAgICAgIC8vIGhhdmUgYSBKSVQgY2FsbCBmcmFt
ZS4KKyAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpOwogICAgICAgICAgICAgaWYgKHN0YWNrT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgaml0
LnN1YlB0cigKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
c3RhY2tPZmZzZXQpLApAQCAtODkzLDcgKzg5MSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2NyYXRjaEdQUjMg
PSBJbnZhbGlkR1BSUmVnOwogCi0gICAgICAgIHNpemVfdCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJl
c2VydmVSZXVzZWRSZWdpc3RlcnMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNC
eVB1c2hpbmcoaml0KTsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2
ZVJldXNlZFJlZ2lzdGVycyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVz
aGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFj
ZUZvckNDYWxsKTsKIAogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogCkBAIC0xMDA0LDggKzEwMDIsMjQgQEAg
dm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgLy8g
YmFycmllciBzbG93IHBhdGggd2FzIGp1c3QgdGhlIG5vcm1hbCBzbG93IHBhdGgsIGJlbG93Lgog
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
OTAzMAogICAgICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRj
aEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7CisgICAgICAg
ICAgICBpZiAoIW51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycykgewor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpOworICAgICAgICAgICAgICAgIGlmIChzdGFja09mZnNldCkgeworICAgICAgICAgICAgICAg
ICAgICBqaXQuc3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNl
R1BSKTsKICAgICAgICAgICAgIGNhbGxGbHVzaFdyaXRlQmFycmllckJ1ZmZlciA9IGppdC5jYWxs
KCk7CisgICAgICAgICAgICBpZiAoIW51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJl
Z2lzdGVycykgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpOworICAgICAgICAgICAgICAgIGlmIChzdGFja09mZnNldCkgeworICAg
ICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVVc2VkUmVn
aXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXJGb3JDYWxsKAogICAgICAgICAgICAgICAgIGppdCwgc2Ny
YXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOwogCkBAIC0xMDE4LDEzICsxMDMyLDIxIEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdp
c3RlcnNCeVBvcHBpbmcoaml0LCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdp
c3RlcnMpOworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGlu
ZyhqaXQsIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywgU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOwogICAg
ICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAKICAgICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAg
ICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgICAgICAgICAgYWxsb2NhdG9yLnJl
c3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJl
c2VydmVSZXVzZWRSZWdpc3RlcnMpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVz
ZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVz
ZWRSZWdpc3RlcnMsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpT
cGFjZUZvckNDYWxsKTsKICAgICAgICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVVzZWRSZWdpc3Rl
cnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBpZiAoIW51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lz
dGVycykgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpOworICAgICAgICAgICAgICAgIGlmIChzdGFja09mZnNldCkgeworICAgICAg
ICAgICAgICAgICAgICBqaXQuc3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAogICAgICAgICAgICAgICAgIGJhc2VHUFIsCkBAIC0x
MDM5LDYgKzEwNjEsMTQgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0
aQogICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZhbHVlUmVncy50YWdH
UFIoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25D
YWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGlmICghbnVtYmVyT2ZCeXRlc1VzZWRUb1By
ZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RhY2tP
ZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBt
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCk7CisgICAgICAgICAgICAgICAgaWYgKHN0YWNr
T2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja09mZnNldCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBhbGxvY2F0b3Iu
cmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNo
QnVmZmVyLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKIApAQCAt
MTI0MCw3ICsxMjcwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNz
OgogICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOwogICAgIHN0YXRlLmppdCA9
ICZqaXQ7CiAKLSAgICBzdGF0ZS5udW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdp
c3RlcnMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsK
KyAgICBzdGF0ZS5udW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMgPSBh
bGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKIAogICAgIGJv
b2wgYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgPSB0cnVlOwogICAgIGJvb2wgaGFzSlNHZXR0
ZXJTZXR0ZXJDYWxsID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxOTEzNTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw2
ICsxNTksNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAg
Y2FzZSBNYWtlUm9wZToKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CiAgICAgY2FzZSBHZXRC
eUlkOgorICAgIGNhc2UgR2V0QnlJZEZsdXNoOgogICAgIGNhc2UgVG9UaGlzOgogICAgIGNhc2Ug
TXVsdGlHZXRCeU9mZnNldDoKICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CkBAIC0yMjIsNiAr
MjIzLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgICAg
ICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgY2Fz
ZSBQdXRCeUlkOgorICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
cmV0dXJuIENhbm5vdENvbXBpbGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTkxMzUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU1NCw2ICs1NTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY29tcGlsZVB1dFN0cnVjdHVy
ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAg
Y2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgICAgICBjb21waWxlR2V0QnlJZCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW46CkBAIC01NjEsNiArNTYyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNh
c2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgICAgICAg
ICBjb21waWxlUHV0QnlJZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0
QnV0dGVyZmx5OgpAQCAtMjIxMiw5ICsyMjE0LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IGNvbXBpbGVHZXRCeUlkKCkKICAgICB7Ci0gICAgICAgIC8vIFByZXR0eSBtdWNoIHRoZSBvbmx5
IHJlYXNvbiB3aHkgd2UgZG9uJ3QgYWxzbyBzdXBwb3J0IEdldEJ5SWRGbHVzaCBpcyBiZWNhdXNl
OgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1
NzExCi0gICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CiAgICAgICAgIGNhc2UgQ2VsbFVzZTogewogICAgICAgICAgICAgc2V0SlNWYWx1ZShnZXRC
eUlkKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKQEAgLTg2MDAsNyArODU5OSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CiAKICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGJ5dGVzUHVzaGVkID0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1
c2hpbmcoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhlc2UsIHNvIHdoZW4g
d2UgbWFrZSBhIHNsb3cgcGF0aCBjYWxsLCB3ZSBkb24ndCBoYXZlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0byBzYXZlIHRoZW0gYWdhaW4uCkBAIC04NjIyLDcgKzg2MjEsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoMSwgc2NyYXRjaDIs
IENDYWxsSGVscGVyczo6U2NhbGVQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVy
c0J5UG9wcGluZyhqaXQsIGJ5dGVzUHVzaGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGpp
dCwgYnl0ZXNQdXNoZWQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNl
OjpTcGFjZUZvckNDYWxsKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVK
dW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKQEAgLTg2MzEsNyArODYzMCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycywgaml0LCBwYXJhbXMu
bGF6eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZl
ciwgSW52YWxpZEdQUlJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgYnl0ZXNQdXNoZWQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3Rl
cnNCeVBvcHBpbmcoaml0LCBieXRlc1B1c2hlZCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpF
eHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOwogICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJTZXQuY3BwCShyZXZpc2lvbiAxOTEzNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDExICszMDcsMTYgQEAg
UmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OndlYkFzc2VtYmx5Q2FsbAogfQogI2VuZGlmCiAKLVJl
Z2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpyZWdpc3RlcnNUb05vdFNhdmVGb3JDYWxsKCkKK1JlZ2lz
dGVyU2V0IFJlZ2lzdGVyU2V0OjpyZWdpc3RlcnNUb05vdFNhdmVGb3JKU0NhbGwoKQogewogICAg
IHJldHVybiBSZWdpc3RlclNldChSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCks
IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJk
d2FyZVJlZ2lzdGVycygpKTsKIH0KIAorUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVy
c1RvTm90U2F2ZUZvckNDYWxsKCkKK3sKKyAgICByZXR1cm4gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCks
IFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworfQorCiBSZWdpc3Rl
clNldCBSZWdpc3RlclNldDo6YWxsR1BScygpCiB7CiAgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMTkx
MzUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQg
YWxsRlBScygpOwogICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxSZWdpc3RlcnMoKTsKIAotICAg
IHN0YXRpYyBSZWdpc3RlclNldCByZWdpc3RlcnNUb05vdFNhdmVGb3JDYWxsKCk7CisgICAgc3Rh
dGljIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvTm90U2F2ZUZvckpTQ2FsbCgpOworICAgIHN0YXRp
YyBSZWdpc3RlclNldCByZWdpc3RlcnNUb05vdFNhdmVGb3JDQ2FsbCgpOwogICAgIAogICAgIHZv
aWQgc2V0KFJlZyByZWcsIGJvb2wgdmFsdWUgPSB0cnVlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDE5MTM1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBA
IHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgU2NyYXRjaFIKIEdQUlJlZyBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaEdQUigpIHsgcmV0dXJuIGFsbG9jYXRl
U2NyYXRjaDxHUFJJbmZvPigpOyB9CiBGUFJSZWcgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjph
bGxvY2F0ZVNjcmF0Y2hGUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNjcmF0Y2g8RlBSSW5mbz4oKTsg
fQogCi11bnNpZ25lZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmV1c2VkUmVn
aXN0ZXJzQnlQdXNoaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQpCit1bnNpZ25lZCBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKE1hY3JvQXNz
ZW1ibGVyJiBqaXQsIEV4dHJhU3RhY2tTcGFjZSBleHRyYVN0YWNrU3BhY2UpCiB7CiAgICAgaWYg
KCFkaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTExOSwxMyArMTE5
LDEzIEBAIHVuc2lnbmVkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2UKICAgICAgICAg
ICAgIHJlZ2lzdGVyc1RvU3BpbGwuc2V0KHJlZyk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgZXh0
cmFTdGFja0J5dGVzQXRUb3BPZlN0YWNrID0gbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGw7
CisgICAgdW5zaWduZWQgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0YWNrID0gZXh0cmFTdGFja1Nw
YWNlID09IEV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCA/IG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsIDogMDsKICAgICB1bnNpZ25lZCBzdGFja0FkanVzdG1lbnRTaXplID0gU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGpp
dCwgcmVnaXN0ZXJzVG9TcGlsbCwgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0YWNrKTsKIAogICAg
IHJldHVybiBzdGFja0FkanVzdG1lbnRTaXplOwogfQogCi12b2lkIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhNYWNyb0Fzc2VtYmxlciYg
aml0LCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMp
Cit2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZyhNYWNyb0Fzc2VtYmxlciYgaml0LCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzVXNlZFRv
UHJlc2VydmVSZXVzZWRSZWdpc3RlcnMsIEV4dHJhU3RhY2tTcGFjZSBleHRyYVN0YWNrU3BhY2Up
CiB7CiAgICAgaWYgKCFkaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICByZXR1cm47CkBAIC0x
NDIsNyArMTQyLDcgQEAgdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZQog
ICAgICAgICAgICAgcmVnaXN0ZXJzVG9GaWxsLnNldChyZWcpOwogICAgIH0KIAotICAgIHVuc2ln
bmVkIGV4dHJhU3RhY2tCeXRlc0F0VG9wT2ZTdGFjayA9IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsOworICAgIHVuc2lnbmVkIGV4dHJhU3RhY2tCeXRlc0F0VG9wT2ZTdGFjayA9IGV4dHJh
U3RhY2tTcGFjZSA9PSBFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwgPyBtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCA6IDA7CiAgICAgUmVnaXN0ZXJTZXQgZG9udFJlc3RvcmU7IC8v
IEVtcHR5IHNldC4gV2Ugd2FudCB0byByZXN0b3JlIGV2ZXJ5dGhpbmcuCiAgICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIHJl
Z2lzdGVyc1RvRmlsbCwgZG9udFJlc3RvcmUsIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVycywgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0YWNrKTsKIH0KQEAgLTE1MCw3
ICsxNTAsNyBAQCB2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlCiBSZWdp
c3RlclNldCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnVzZWRSZWdpc3RlcnNGb3JDYWxsKCkg
Y29uc3QKIHsKICAgICBSZWdpc3RlclNldCByZXN1bHQgPSBtX3VzZWRSZWdpc3RlcnM7Ci0gICAg
cmVzdWx0LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNhbGwoKSk7
CisgICAgcmVzdWx0LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckpT
Q2FsbCgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHJldmlzaW9u
IDE5MTM1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEyICs2Niw5IEBAIHB1YmxpYzoKIAogICAg
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3Rl
cnM7IH0KICAgICAKLSAgICAvLyBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZygpIHJl
dHVybnMgdGhlIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIHVzZWQgdG8ga2VlcCB0aGUgc3RhY2sK
LSAgICAvLyBwb2ludGVyIHByb3Blcmx5IGFsaWduZWQgYW5kIHRvIHJlc2VydmUgcm9vbSBmb3Ig
Y2FsbGluZyBhIEMgaGVscGVyLiBUaGlzIG51bWJlciBvZiBwYWRkaW5nCi0gICAgLy8gYnl0ZXMg
bXVzdCBiZSBwcm92aWRlZCB0byByZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKCkgaW4g
b3JkZXIgdG8gcmV2ZXJzZSB0aGUgd29yayBkb25lCi0gICAgLy8gYnkgcHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnNCeVB1c2hpbmcoKS4KLSAgICB1bnNpZ25lZCBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVy
c0J5UHVzaGluZyhNYWNyb0Fzc2VtYmxlciYgaml0KTsKLSAgICB2b2lkIHJlc3RvcmVSZXVzZWRS
ZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCwgdW5zaWduZWQgbnVtYmVyT2ZC
eXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKTsKKyAgICBlbnVtIGNsYXNzIEV4dHJh
U3RhY2tTcGFjZSB7IFNwYWNlRm9yQ0NhbGwsIE5vRXh0cmFTcGFjZSB9OworICAgIHVuc2lnbmVk
IHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEV4
dHJhU3RhY2tTcGFjZSk7CisgICAgdm9pZCByZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KE1hY3JvQXNzZW1ibGVyJiBqaXQsIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2
ZVJldXNlZFJlZ2lzdGVycywgRXh0cmFTdGFja1NwYWNlKTsKICAgICAKICAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzRm9yQ2FsbCgpIGNvbnN0OwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263637</attachid>
            <date>2015-10-20 17:09:00 -0700</date>
            <delta_ts>2015-10-21 13:10:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>18125</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxMzY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBA
CisyMDE1LTEwLTIwICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEMgY2FsbHMgaW4gUG9seW1vcnBoaWNBY2Nlc3Mgc2hvdWxkbid0IGFzc3VtZSB0aGF0IHRoZSB0
b3Agb2YgdGhlIHN0YWNrIGxvb2tzIGxpa2UgYSBKU0MgSklUIGZyYW1lIGFuZCBlbmFibGUgKkJ5
SWRGbHVzaCBpbiBGVEwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNTcxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IGFueXRpbWUgd2UgbmVlZCB0byBtYWtlIGEg
QyBjYWxsIGluc2lkZQorICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcywgd2UgZW5zdXJlIHRoZXJl
IGlzIGVub3VnaCBzcGFjZSBvbiB0aGUgc3RhY2sgdG8gZG8gc28uCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIGVuYWJsZXMgR2V0QnlJZEZsdXNoL1B1dEJ5SWRGbHVzaCBpbnNpZGUgdGhlIEZU
TC4KKyAgICAgICAgQmVjYXVzZSBQb2x5bW9ycGhpY0FjY2VzcyBub3cgc3BpbGxzIHRoZSBuZWNl
c3NhcnkgcmVnaXN0ZXJzCisgICAgICAgIGJlZm9yZSBtYWtpbmcgYSBKUy9DIGNhbGwsIGFueSBy
ZWdpc3RlcnMgdGhhdCBMTFZNIHJlcG9ydCBhcworICAgICAgICBiZWluZyBpbiB1c2UgZm9yIHRo
ZSBwYXRjaHBvaW50IHdpbGwgYmUgc3BpbGxlZCBiZWZvcmUgbWFraW5nCisgICAgICAgIGEgY2Fs
bCBieSBQb2x5bW9ycGhpY0FjY2Vzcy4KKworICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpyZXN0b3Jl
U2NyYXRjaCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6c3VjY2VlZCk6
CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2ZVJlZ2lz
dGVyc0ZvckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJh
dGUpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRCeUlkKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjplbWl0U3RvcmVCYXJyaWVyKToK
KyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNl
dDo6d2ViQXNzZW1ibHlDYWxsZWVTYXZlUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6UmVnaXN0
ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckpTQ2FsbCk6CisgICAgICAgIChKU0M6OlJlZ2lz
dGVyU2V0OjpyZWdpc3RlcnNUb05vdFNhdmVGb3JDQ2FsbCk6CisgICAgICAgIChKU0M6OlJlZ2lz
dGVyU2V0OjphbGxHUFJzKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1Rv
Tm90U2F2ZUZvckNhbGwpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5oOgor
ICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6c2V0KToKKyAgICAgICAgKiBqaXQvU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjphbGxvY2F0ZVNjcmF0Y2hHUFIpOgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaEZQUik6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcpOgorICAgICAg
ICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcpOgorICAgICAgICBUaGVzZSBtZXRob2RzIG5vdyB0YWtlIGFuIGV4dHJhIHBhcmFt
ZXRlciBpbmRpY2F0aW5nIGlmIHRoZXkKKyAgICAgICAgc2hvdWxkIGNyZWF0ZSBzcGFjZSBmb3Ig
YSBDIGNhbGwgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sgaWYKKyAgICAgICAgdGhlcmUgYXJlIGFu
eSByZXVzZWQgcmVnaXN0ZXJzIHRvIHNwaWxsLgorCisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6dXNlZFJlZ2lzdGVyc0ZvckNhbGwpOgorICAgICAgICAqIGppdC9TY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjp1c2VkUmVnaXN0ZXJzKToKKwogMjAxNS0xMC0yMCAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgWWFyclBhdHRlcm5Db25zdHJ1Y3Rvcjo6Y29udGFpbnND
YXB0dXJpbmdUZXJtcygpIHNob3VsZCBub3QgYXNzdW1lIHRoYXQgaXRzIHRlcm1zLnNpemUoKSBp
cyBncmVhdGVyIHRoYW4gMC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMTkxMzUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBXYXRjaHBvaW50KiBBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGU6OmFkZFdhCiAKIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpyZXN0b3JlU2NyYXRjaCgp
CiB7Ci0gICAgYWxsb2NhdG9yLT5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKCpqaXQs
IG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyk7CisgICAgYWxsb2Nh
dG9yLT5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKCpqaXQsIG51bWJlck9mQnl0ZXNV
c2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpF
eHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CiB9CiAKIHZvaWQgQWNjZXNzR2VuZXJhdGlv
blN0YXRlOjpzdWNjZWVkKCkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9u
U3RhdGU6OmNhbGN1bGF0ZUxpdgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwogCiAgICAgICAg
IG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwgPSBSZWdpc3RlclNldChtX2xpdmVSZWdpc3RlcnNUb1By
ZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLCBhbGxvY2F0b3ItPnVzZWRSZWdpc3Rl
cnMoKSk7Ci0gICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShSZWdpc3RlclNl
dDo6cmVnaXN0ZXJzVG9Ob3RTYXZlRm9yQ2FsbCgpKTsKKyAgICAgICAgbV9saXZlUmVnaXN0ZXJz
Rm9yQ2FsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZWdpc3RlcnNUb05vdFNhdmVGb3JKU0NhbGwo
KSk7CiAgICAgfQogfQogCkBAIC03NDQsMTIgKzc0NCwxMCBAQCB2b2lkIEFjY2Vzc0Nhc2U6Omdl
bmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCh2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwog
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdW5zaWdu
ZWQgc3RhY2tPZmZzZXQgPSAwOwotICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHJvb20gZm9y
IHRoZSBDIGNhbGwgc28gb3VyIHNwaWxsYWdlIGlzbid0IG92ZXJ3cml0dGVuLgotICAgICAgICAg
ICAgaWYgKHN0YXRlLm51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlv
bigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KQotICAgICAgICAgICAgICAgICAgICBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE5lZWQgdG8gbWFrZSByb29tIGZvciB0
aGUgQyBjYWxsIHNvIGFueSBvZiBvdXIgc3RhY2sgc3BpbGxhZ2UgaXNuJ3Qgb3ZlcndyaXR0ZW4u
CisgICAgICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gbWFrZSByb29tIGJlY2F1c2Ugd2UgbWF5
IGJlIGFuIGlubGluZSBjYWNoZSBpbiB0aGUgRlRMIGFuZCBub3QKKyAgICAgICAgICAgIC8vIGhh
dmUgYSBKSVQgY2FsbCBmcmFtZS4KKyAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpOwogICAgICAgICAgICAgaWYgKHN0YWNrT2Zmc2V0KSB7CiAg
ICAgICAgICAgICAgICAgaml0LnN1YlB0cigKICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLApAQCAtODkzLDcgKzg5MSw3IEBAIHZvaWQg
QWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgc2NyYXRjaEdQUjMgPSBJbnZhbGlkR1BSUmVnOwogCi0gICAgICAgIHNpemVfdCBudW1i
ZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMgPSBhbGxvY2F0b3IucHJlc2Vy
dmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKyAgICAgICAgc2l6ZV90IG51bWJlck9m
Qnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyA9IGFsbG9jYXRvci5wcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0
cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKIAogICAgICAgICBBU1NFUlQoc3RydWN0dXJl
KCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogCkBAIC0x
MDA0LDggKzEwMDIsMjQgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0
aQogICAgICAgICAgICAgLy8gYmFycmllciBzbG93IHBhdGggd2FzIGp1c3QgdGhlIG5vcm1hbCBz
bG93IHBhdGgsIGJlbG93LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0OTAzMAogICAgICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlVXNl
ZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3Jh
dGNoR1BSMik7CisgICAgICAgICAgICBpZiAoIW51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVycykgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpOworICAgICAgICAgICAgICAgIGlmIChzdGFja09mZnNldCkg
eworICAgICAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShiYXNlR1BSKTsKICAgICAgICAgICAgIGNhbGxGbHVzaFdyaXRlQmFycmll
ckJ1ZmZlciA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBpZiAoIW51bWJlck9mQnl0ZXNVc2Vk
VG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycykgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0
YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMo
KSwgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpOworICAgICAgICAgICAgICAgIGlmIChz
dGFja09mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgYWxsb2Nh
dG9yLnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZmZXJGb3JDYWxsKAogICAgICAg
ICAgICAgICAgIGppdCwgc2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEdQUjIpOwogCkBAIC0xMDE4LDEz
ICsxMDMyLDIxIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGUoQWNjZXNzR2VuZXJhdGkKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgYWxsb2NhdG9y
LnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBudW1iZXJPZkJ5dGVzVXNlZFRv
UHJlc2VydmVSZXVzZWRSZWdpc3RlcnMpOworICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNl
ZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNl
ZFJlZ2lzdGVycywgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNw
YWNlRm9yQ0NhbGwpOwogICAgICAgICBzdGF0ZS5zdWNjZWVkKCk7CiAKICAgICAgICAgaWYgKG5l
d1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgICAg
ICAgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBudW1i
ZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMpOworICAgICAgICAgICAgYWxs
b2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBudW1iZXJPZkJ5dGVz
VXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6
RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKICAgICAgICAgICAgIGFsbG9jYXRvci5w
cmVzZXJ2ZVVzZWRSZWdpc3RlcnNUb1NjcmF0Y2hCdWZmZXJGb3JDYWxsKGppdCwgc2NyYXRjaEJ1
ZmZlciwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBpZiAoIW51bWJlck9mQnl0ZXNVc2VkVG9Q
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVycykgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNr
T2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwg
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpOworICAgICAgICAgICAgICAgIGlmIChzdGFj
a09mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBqaXQuc3ViUHRyKAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAogICAgICAgICAgICAg
ICAgIGJhc2VHUFIsCkBAIC0xMDM5LDYgKzEwNjEsMTQgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BS
KCksIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGlmICghbnVt
YmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKSB7CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRCeXRlcygpLCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCk7CisgICAgICAg
ICAgICAgICAgaWYgKHN0YWNrT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5hZGRQ
dHIoCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihz
dGFja09mZnNldCksCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZv
ckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHN0YXRl
LnN1Y2NlZWQoKTsKIApAQCAtMTI0MCw3ICsxMjcwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IFBvbHltb3JwaGljQWNjZXNzOgogICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2sp
OwogICAgIHN0YXRlLmppdCA9ICZqaXQ7CiAKLSAgICBzdGF0ZS5udW1iZXJPZkJ5dGVzVXNlZFRv
UHJlc2VydmVSZXVzZWRSZWdpc3RlcnMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3Rl
cnNCeVB1c2hpbmcoaml0KTsKKyAgICBzdGF0ZS5udW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVS
ZXVzZWRSZWdpc3RlcnMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hp
bmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRy
YVNwYWNlKTsKIAogICAgIGJvb2wgYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgPSB0cnVlOwog
ICAgIGJvb2wgaGFzSlNHZXR0ZXJTZXR0ZXJDYWxsID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxOTEzNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1OSw2ICsxNTksNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNv
bXBpbGUoTm9kZSogCiAgICAgY2FzZSBNYWtlUm9wZToKICAgICBjYXNlIE5ld0FycmF5V2l0aFNp
emU6CiAgICAgY2FzZSBHZXRCeUlkOgorICAgIGNhc2UgR2V0QnlJZEZsdXNoOgogICAgIGNhc2Ug
VG9UaGlzOgogICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKICAgICBjYXNlIE11bHRpUHV0QnlP
ZmZzZXQ6CkBAIC0yMjIsNiArMjIzLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKE5vZGUqIAogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBjYXNlIFB1dEJ5
SWREaXJlY3Q6CiAgICAgY2FzZSBQdXRCeUlkOgorICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTkx
MzUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1NCw2ICs1NTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Y29tcGlsZVB1dFN0cnVjdHVyZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
R2V0QnlJZDoKKyAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgICAgICBjb21waWxl
R2V0QnlJZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW46CkBAIC01NjEs
NiArNTYyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFB1
dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeUlk
Rmx1c2g6CiAgICAgICAgICAgICBjb21waWxlUHV0QnlJZCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgpAQCAtMjIxMiw5ICsyMjE0LDYgQEAgcHJpdmF0
ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkKCkKICAgICB7Ci0gICAgICAgIC8vIFBy
ZXR0eSBtdWNoIHRoZSBvbmx5IHJlYXNvbiB3aHkgd2UgZG9uJ3QgYWxzbyBzdXBwb3J0IEdldEJ5
SWRGbHVzaCBpcyBiZWNhdXNlOgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI1NzExCi0gICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgQ2VsbFVzZTogewogICAgICAgICAg
ICAgc2V0SlNWYWx1ZShnZXRCeUlkKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKQEAgLTg2
MDAsNyArODU5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaDIgPSBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVzUHVzaGVkID0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucHJlc2VydmVS
ZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hp
bmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VG
b3JDQ2FsbCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc2F2
ZWQgdGhlc2UsIHNvIHdoZW4gd2UgbWFrZSBhIHNsb3cgcGF0aCBjYWxsLCB3ZSBkb24ndCBoYXZl
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzYXZlIHRoZW0gYWdhaW4uCkBAIC04NjIy
LDcgKzg2MjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
Y3JhdGNoMSwgc2NyYXRjaDIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkp
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVz
dG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIGJ5dGVzUHVzaGVkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVn
aXN0ZXJzQnlQb3BwaW5nKGppdCwgYnl0ZXNQdXNoZWQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKIAogICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKQEAgLTg2MzEsNyAr
ODYzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lz
dGVycywgaml0LCBwYXJhbXMubGF6eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzLCBvcGVyYXRpb25GbHVz
aFdyaXRlQmFycmllckJ1ZmZlciwgSW52YWxpZEdQUlJlZywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgYnl0ZXNQdXNo
ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJl
c3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBieXRlc1B1c2hlZCwgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCShyZXZpc2lvbiAxOTEzNTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzA3LDExICszMDcsMTYgQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OndlYkFzc2VtYmx5Q2Fs
bAogfQogI2VuZGlmCiAKLVJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpyZWdpc3RlcnNUb05vdFNh
dmVGb3JDYWxsKCkKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpyZWdpc3RlcnNUb05vdFNhdmVG
b3JKU0NhbGwoKQogewogICAgIHJldHVybiBSZWdpc3RlclNldChSZWdpc3RlclNldDo6dm1DYWxs
ZWVTYXZlUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3Rl
clNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKIH0KIAorUmVnaXN0ZXJTZXQgUmVn
aXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZvckNDYWxsKCkKK3sKKyAgICByZXR1cm4gUmVn
aXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6
OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJz
KCkpOworfQorCiBSZWdpc3RlclNldCBSZWdpc3RlclNldDo6YWxsR1BScygpCiB7CiAgICAgUmVn
aXN0ZXJTZXQgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJT
ZXQuaAkocmV2aXNpb24gMTkxMzUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVnaXN0ZXJTZXQgYWxsRlBScygpOwogICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxS
ZWdpc3RlcnMoKTsKIAotICAgIHN0YXRpYyBSZWdpc3RlclNldCByZWdpc3RlcnNUb05vdFNhdmVG
b3JDYWxsKCk7CisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvTm90U2F2ZUZvckpT
Q2FsbCgpOworICAgIHN0YXRpYyBSZWdpc3RlclNldCByZWdpc3RlcnNUb05vdFNhdmVGb3JDQ2Fs
bCgpOwogICAgIAogICAgIHZvaWQgc2V0KFJlZyByZWcsIGJvb2wgdmFsdWUgPSB0cnVlKQogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE5MTM1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAyLDcgKzEwMiw3IEBAIHR5cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgU2NyYXRj
aFIKIEdQUlJlZyBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaEdQUigp
IHsgcmV0dXJuIGFsbG9jYXRlU2NyYXRjaDxHUFJJbmZvPigpOyB9CiBGUFJSZWcgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjphbGxvY2F0ZVNjcmF0Y2hGUFIoKSB7IHJldHVybiBhbGxvY2F0ZVNj
cmF0Y2g8RlBSSW5mbz4oKTsgfQogCi11bnNpZ25lZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6
OnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQpCit1
bnNpZ25lZCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJz
QnlQdXNoaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEV4dHJhU3RhY2tTcGFjZSBleHRyYVN0YWNr
U3BhY2UpCiB7CiAgICAgaWYgKCFkaWRSZXVzZVJlZ2lzdGVycygpKQogICAgICAgICByZXR1cm4g
MDsKQEAgLTExOSwxMyArMTE5LDEzIEBAIHVuc2lnbmVkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6cHJlc2UKICAgICAgICAgICAgIHJlZ2lzdGVyc1RvU3BpbGwuc2V0KHJlZyk7CiAgICAgfQog
Ci0gICAgdW5zaWduZWQgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0YWNrID0gbWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGw7CisgICAgdW5zaWduZWQgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0
YWNrID0gZXh0cmFTdGFja1NwYWNlID09IEV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCA/
IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsIDogMDsKICAgICB1bnNpZ25lZCBzdGFja0Fk
anVzdG1lbnRTaXplID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVy
c1RvU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9TcGlsbCwgZXh0cmFTdGFja0J5dGVzQXRU
b3BPZlN0YWNrKTsKIAogICAgIHJldHVybiBzdGFja0FkanVzdG1lbnRTaXplOwogfQogCi12b2lk
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGlu
ZyhNYWNyb0Fzc2VtYmxlciYgaml0LCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2Vy
dmVSZXVzZWRSZWdpc3RlcnMpCit2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9y
ZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhNYWNyb0Fzc2VtYmxlciYgaml0LCB1bnNpZ25lZCBu
dW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMsIEV4dHJhU3RhY2tTcGFj
ZSBleHRyYVN0YWNrU3BhY2UpCiB7CiAgICAgaWYgKCFkaWRSZXVzZVJlZ2lzdGVycygpKQogICAg
ICAgICByZXR1cm47CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBTY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3I6OnJlc3RvcmVSZQogICAgICAgICAgICAgcmVnaXN0ZXJzVG9GaWxsLnNldChyZWcpOwog
ICAgIH0KIAotICAgIHVuc2lnbmVkIGV4dHJhU3RhY2tCeXRlc0F0VG9wT2ZTdGFjayA9IG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsOworICAgIHVuc2lnbmVkIGV4dHJhU3RhY2tCeXRlc0F0
VG9wT2ZTdGFjayA9IGV4dHJhU3RhY2tTcGFjZSA9PSBFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9y
Q0NhbGwgPyBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCA6IDA7CiAgICAgUmVnaXN0ZXJT
ZXQgZG9udFJlc3RvcmU7IC8vIEVtcHR5IHNldC4gV2Ugd2FudCB0byByZXN0b3JlIGV2ZXJ5dGhp
bmcuCiAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0
YWNrRm9yQ2FsbChqaXQsIHJlZ2lzdGVyc1RvRmlsbCwgZG9udFJlc3RvcmUsIG51bWJlck9mQnl0
ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0
YWNrKTsKIH0KQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6cmVzdG9yZVJlCiBSZWdpc3RlclNldCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnVzZWRS
ZWdpc3RlcnNGb3JDYWxsKCkgY29uc3QKIHsKICAgICBSZWdpc3RlclNldCByZXN1bHQgPSBtX3Vz
ZWRSZWdpc3RlcnM7Ci0gICAgcmVzdWx0LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1Rv
Tm90U2F2ZUZvckNhbGwoKSk7CisgICAgcmVzdWx0LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlZ2lz
dGVyc1RvTm90U2F2ZUZvckpTQ2FsbCgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmgJKHJldmlzaW9uIDE5MTM1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEyICs2Niw5
IEBAIHB1YmxpYzoKIAogICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJl
dHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KICAgICAKLSAgICAvLyBwcmVzZXJ2ZVJldXNlZFJlZ2lz
dGVyc0J5UHVzaGluZygpIHJldHVybnMgdGhlIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIHVzZWQg
dG8ga2VlcCB0aGUgc3RhY2sKLSAgICAvLyBwb2ludGVyIHByb3Blcmx5IGFsaWduZWQgYW5kIHRv
IHJlc2VydmUgcm9vbSBmb3IgY2FsbGluZyBhIEMgaGVscGVyLiBUaGlzIG51bWJlciBvZiBwYWRk
aW5nCi0gICAgLy8gYnl0ZXMgbXVzdCBiZSBwcm92aWRlZCB0byByZXN0b3JlUmV1c2VkUmVnaXN0
ZXJzQnlQb3BwaW5nKCkgaW4gb3JkZXIgdG8gcmV2ZXJzZSB0aGUgd29yayBkb25lCi0gICAgLy8g
YnkgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoKS4KLSAgICB1bnNpZ25lZCBwcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhNYWNyb0Fzc2VtYmxlciYgaml0KTsKLSAgICB2
b2lkIHJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCwg
dW5zaWduZWQgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzKTsKKyAg
ICBlbnVtIGNsYXNzIEV4dHJhU3RhY2tTcGFjZSB7IFNwYWNlRm9yQ0NhbGwsIE5vRXh0cmFTcGFj
ZSB9OworICAgIHVuc2lnbmVkIHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKE1hY3Jv
QXNzZW1ibGVyJiBqaXQsIEV4dHJhU3RhY2tTcGFjZSk7CisgICAgdm9pZCByZXN0b3JlUmV1c2Vk
UmVnaXN0ZXJzQnlQb3BwaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQsIHVuc2lnbmVkIG51bWJlck9m
Qnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywgRXh0cmFTdGFja1NwYWNlKTsKICAg
ICAKICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzRm9yQ2FsbCgpIGNvbnN0OwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263722</attachid>
            <date>2015-10-21 13:10:31 -0700</date>
            <delta_ts>2015-10-21 14:49:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>19840</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxMzk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBA
CisyMDE1LTEwLTIxICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEMgY2FsbHMgaW4gUG9seW1vcnBoaWNBY2Nlc3Mgc2hvdWxkbid0IGFzc3VtZSB0aGF0IHRoZSB0
b3Agb2YgdGhlIHN0YWNrIGxvb2tzIGxpa2UgYSBKU0MgSklUIGZyYW1lIGFuZCBlbmFibGUgKkJ5
SWRGbHVzaCBpbiBGVEwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNTcxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IGFueXRpbWUgd2UgbmVlZCB0byBtYWtlIGEg
QyBjYWxsIGluc2lkZQorICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzcywgd2UgZW5zdXJlIHRoZXJl
IGlzIGVub3VnaCBzcGFjZSBvbiB0aGUgc3RhY2sgdG8gZG8gc28uCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIGVuYWJsZXMgR2V0QnlJZEZsdXNoL1B1dEJ5SWRGbHVzaCBpbnNpZGUgdGhlIEZU
TC4KKyAgICAgICAgQmVjYXVzZSBQb2x5bW9ycGhpY0FjY2VzcyBub3cgc3BpbGxzIHRoZSBuZWNl
c3NhcnkgcmVnaXN0ZXJzCisgICAgICAgIGJlZm9yZSBtYWtpbmcgYSBKUy9DIGNhbGwsIGFueSBy
ZWdpc3RlcnMgdGhhdCBMTFZNIHJlcG9ydCBhcworICAgICAgICBiZWluZyBpbiB1c2UgZm9yIHRo
ZSBwYXRjaHBvaW50IHdpbGwgYmUgc3BpbGxlZCBiZWZvcmUgbWFraW5nCisgICAgICAgIGEgY2Fs
bCBieSBQb2x5bW9ycGhpY0FjY2Vzcy4KKworICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzR2VuZXJhdGlvblN0YXRlOjpyZXN0b3Jl
U2NyYXRjaCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6c3VjY2VlZCk6
CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6Y2FsY3VsYXRlTGl2ZVJlZ2lz
dGVyc0ZvckNhbGxBbmRFeGNlcHRpb25IYW5kbGluZyk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJh
dGUpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRCeUlkKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjplbWl0U3RvcmVCYXJyaWVyKToK
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6ZW1pdFR5cGVPZik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bWFr
ZVNwYWNlT25TdGFja0ZvckNDYWxsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpy
ZWNsYWltU3BhY2VPblN0YWNrRm9yQ0NhbGwpOgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5j
cHA6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojp3ZWJBc3NlbWJseUNhbGxlZVNhdmVSZWdp
c3RlcnMpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6cmVnaXN0ZXJzVG9Ob3RTYXZlRm9y
SlNDYWxsKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90U2F2ZUZv
ckNDYWxsKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmFsbEdQUnMpOgorICAgICAgICAo
SlNDOjpSZWdpc3RlclNldDo6cmVnaXN0ZXJzVG9Ob3RTYXZlRm9yQ2FsbCk6IERlbGV0ZWQuCisg
ICAgICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpz
ZXQpOgorICAgICAgICAqIGppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaEdQUik6Cisg
ICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6YWxsb2NhdGVTY3JhdGNoRlBS
KToKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJldXNl
ZFJlZ2lzdGVyc0J5UHVzaGluZyk6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6cmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyk6CisgICAgICAgIFRoZXNlIG1l
dGhvZHMgbm93IHRha2UgYW4gZXh0cmEgcGFyYW1ldGVyIGluZGljYXRpbmcgaWYgdGhleQorICAg
ICAgICBzaG91bGQgY3JlYXRlIHNwYWNlIGZvciBhIEMgY2FsbCBhdCB0aGUgdG9wIG9mIHRoZSBz
dGFjayBpZgorICAgICAgICB0aGVyZSBhcmUgYW55IHJldXNlZCByZWdpc3RlcnMgdG8gc3BpbGwu
CisKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjp1c2VkUmVnaXN0ZXJz
Rm9yQ2FsbCk6CisgICAgICAgICogaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOgorICAg
ICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnVzZWRSZWdpc3RlcnMpOgorCiAy
MDE1LTEwLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRmFp
bHVyZXMgaW4gUHV0U3RhY2tTaW5raW5nUGhhc2Ugc2hvdWxkIGJlIGxlc3Mgc2V2ZXJlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAJKHJldmlzaW9uIDE5MTM5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYg
QEAKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbC5oIgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmVTdHViSW5mby5oIgpAQCAtNTUsNyArNTQsNyBAQCBXYXRjaHBvaW50KiBBY2Nlc3NHZW5lcmF0
aW9uU3RhdGU6OmFkZFdhCiAKIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjpyZXN0b3JlU2Ny
YXRjaCgpCiB7Ci0gICAgYWxsb2NhdG9yLT5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5n
KCpqaXQsIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyk7CisgICAg
YWxsb2NhdG9yLT5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKCpqaXQsIG51bWJlck9m
Qnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CiB9CiAKIHZvaWQgQWNjZXNzR2Vu
ZXJhdGlvblN0YXRlOjpzdWNjZWVkKCkKQEAgLTc1LDcgKzc0LDcgQEAgdm9pZCBBY2Nlc3NHZW5l
cmF0aW9uU3RhdGU6OmNhbGN1bGF0ZUxpdgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklU
Q29kZTo6aXNPcHRpbWl6aW5nSklUKGppdC0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSkpOwogCiAg
ICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwgPSBSZWdpc3RlclNldChtX2xpdmVSZWdpc3Rl
cnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLCBhbGxvY2F0b3ItPnVzZWRS
ZWdpc3RlcnMoKSk7Ci0gICAgICAgIG1fbGl2ZVJlZ2lzdGVyc0ZvckNhbGwuZXhjbHVkZShSZWdp
c3RlclNldDo6cmVnaXN0ZXJzVG9Ob3RTYXZlRm9yQ2FsbCgpKTsKKyAgICAgICAgbV9saXZlUmVn
aXN0ZXJzRm9yQ2FsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZWdpc3RlcnNUb05vdFNhdmVGb3JK
U0NhbGwoKSk7CiAgICAgfQogfQogCkBAIC03NDQsMTcgKzc0MywxMiBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgICAgICAgICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KSkpOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
dW5zaWduZWQgc3RhY2tPZmZzZXQgPSAwOwotICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHJv
b20gZm9yIHRoZSBDIGNhbGwgc28gb3VyIHNwaWxsYWdlIGlzbid0IG92ZXJ3cml0dGVuLgotICAg
ICAgICAgICAgaWYgKHN0YXRlLm51bWJlck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNl
cnZhdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQotICAgICAgICAgICAgICAgICAgICBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGFja09mZnNldCkgewot
ICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICAvLyBOZWVkIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIEMgY2FsbCBzbyBhbnkgb2Ygb3VyIHN0
YWNrIHNwaWxsYWdlIGlzbid0IG92ZXJ3cml0dGVuLgorICAgICAgICAgICAgLy8gV2UgYWxzbyBu
ZWVkIHRvIG1ha2Ugcm9vbSBiZWNhdXNlIHdlIG1heSBiZSBhbiBpbmxpbmUgY2FjaGUgaW4gdGhl
IEZUTCBhbmQgbm90CisgICAgICAgICAgICAvLyBoYXZlIGEgSklUIGNhbGwgZnJhbWUuCisgICAg
ICAgICAgICBib29sIG5lZWRzVG9NYWtlUm9vbU9uU3RhY2tGb3JDQ2FsbCA9IHN0YXRlLm51bWJl
ck9mU3RhY2tCeXRlc1VzZWRGb3JSZWdpc3RlclByZXNlcnZhdGlvbigpIHx8IGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVDsKKyAgICAgICAgICAgIGlmIChuZWVkc1RvTWFr
ZVJvb21PblN0YWNrRm9yQ0NhbGwpCisgICAgICAgICAgICAgICAgaml0Lm1ha2VTcGFjZU9uU3Rh
Y2tGb3JDQ2FsbCgpOwogCiAgICAgICAgICAgICAvLyBnZXR0ZXI6IEVuY29kZWRKU1ZhbHVlICgq
R2V0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogc2xvdEJhc2UsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIC8vIHNldHRlcjogdm9p
ZCAoKlB1dFZhbHVlRnVuYykoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2UsIEVuY29kZWRKU1Zh
bHVlIHRoaXNPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKTsKQEAgLTc4MywxMiArNzc3LDgg
QEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0aQogICAgICAgICAgICAg
b3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CiAgICAgICAgICAgICBpZiAobV90eXBlID09IEN1
c3RvbUdldHRlcikKICAgICAgICAgICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7
Ci0KLSAgICAgICAgICAgIGlmIChzdGFja09mZnNldCkgewotICAgICAgICAgICAgICAgIGppdC5h
ZGRQdHIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0
YWNrT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobmVlZHNUb01ha2VS
b29tT25TdGFja0ZvckNDYWxsKQorICAgICAgICAgICAgICAgIGppdC5yZWNsYWltU3BhY2VPblN0
YWNrRm9yQ0NhbGwoKTsKIAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vRXhjZXB0
aW9uID0KICAgICAgICAgICAgICAgICBqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVy
czo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CkBAIC04OTMsMTEgKzg4MywxMiBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHNjcmF0Y2hHUFIzID0gSW52YWxpZEdQUlJlZzsKIAotICAgICAgICBzaXplX3QgbnVtYmVy
T2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzID0gYWxsb2NhdG9yLnByZXNlcnZl
UmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCk7CisgICAgICAgIHNpemVfdCBudW1iZXJPZkJ5
dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVz
ZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJh
U3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7CiAKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgp
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKIAogICAgICAg
ICBib29sIHNjcmF0Y2hHUFJIYXNTdG9yYWdlID0gZmFsc2U7CisgICAgICAgIGJvb2wgbmVlZHNU
b01ha2VSb29tT25TdGFja0ZvckNDYWxsID0gIW51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJl
dXNlZFJlZ2lzdGVycyAmJiBjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQ7
CiAKICAgICAgICAgaWYgKG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBzaXplX3QgbmV3
U2l6ZSA9IG5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFs
dWUpOwpAQCAtMTAwNCw4ICs5OTUsMTIgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nl
c3NHZW5lcmF0aQogICAgICAgICAgICAgLy8gYmFycmllciBzbG93IHBhdGggd2FzIGp1c3QgdGhl
IG5vcm1hbCBzbG93IHBhdGgsIGJlbG93LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTAzMAogICAgICAgICAgICAgYWxsb2NhdG9yLnBy
ZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoaml0LCBzY3JhdGNoQnVm
ZmVyLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBpZiAobmVlZHNUb01ha2VSb29tT25TdGFj
a0ZvckNDYWxsKQorICAgICAgICAgICAgICAgIGppdC5tYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwo
KTsKICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUdQUik7
CiAgICAgICAgICAgICBjYWxsRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQuY2FsbCgpOwor
ICAgICAgICAgICAgaWYgKG5lZWRzVG9NYWtlUm9vbU9uU3RhY2tGb3JDQ2FsbCkKKyAgICAgICAg
ICAgICAgICBqaXQucmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgICAgICAgICBh
bGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZvckNhbGwoCiAg
ICAgICAgICAgICAgICAgaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSMik7CiAKQEAgLTEw
MTgsMTMgKzEwMTMsMTUgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nlc3NHZW5lcmF0
aQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBhbGxv
Y2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51bWJlck9mQnl0ZXNV
c2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgbnVtYmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZl
UmV1c2VkUmVnaXN0ZXJzLCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFj
ZTo6U3BhY2VGb3JDQ2FsbCk7CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKIAogICAgICAgICBp
ZiAobmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Ci0g
ICAgICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQs
IG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycyk7CisgICAgICAgICAg
ICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51bWJlck9m
Qnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOwogICAgICAgICAgICAgYWxsb2Nh
dG9yLnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlckZvckNhbGwoaml0LCBzY3Jh
dGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1RvTWFrZVJvb21P
blN0YWNrRm9yQ0NhbGwpCisgICAgICAgICAgICAgICAgaml0Lm1ha2VTcGFjZU9uU3RhY2tGb3JD
Q2FsbCgpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKAogICAgICAgICAgICAgICAgIGJhc2VHUFIsCkBAIC0xMDM5LDYgKzEw
MzYsOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRpCiAgICAgICAg
ICAgICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzLnRhZ0dQUigpKTsKICNl
bmRpZgogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQu
Y2FsbCgpOworICAgICAgICAgICAgaWYgKG5lZWRzVG9NYWtlUm9vbU9uU3RhY2tGb3JDQ2FsbCkK
KyAgICAgICAgICAgICAgICBqaXQucmVjbGFpbVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAg
ICAgICAgICBhbGxvY2F0b3IucmVzdG9yZVVzZWRSZWdpc3RlcnNGcm9tU2NyYXRjaEJ1ZmZlckZv
ckNhbGwoaml0LCBzY3JhdGNoQnVmZmVyLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHN0YXRl
LnN1Y2NlZWQoKTsKIApAQCAtMTI0MCw3ICsxMjM5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IFBvbHltb3JwaGljQWNjZXNzOgogICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2sp
OwogICAgIHN0YXRlLmppdCA9ICZqaXQ7CiAKLSAgICBzdGF0ZS5udW1iZXJPZkJ5dGVzVXNlZFRv
UHJlc2VydmVSZXVzZWRSZWdpc3RlcnMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3Rl
cnNCeVB1c2hpbmcoaml0KTsKKyAgICBzdGF0ZS5udW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVS
ZXVzZWRSZWdpc3RlcnMgPSBhbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hp
bmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6Tm9FeHRy
YVNwYWNlKTsKIAogICAgIGJvb2wgYWxsR3VhcmRlZEJ5U3RydWN0dXJlQ2hlY2sgPSB0cnVlOwog
ICAgIGJvb2wgaGFzSlNHZXR0ZXJTZXR0ZXJDYWxsID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxOTEzOTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1OSw2ICsxNTksNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNv
bXBpbGUoTm9kZSogCiAgICAgY2FzZSBNYWtlUm9wZToKICAgICBjYXNlIE5ld0FycmF5V2l0aFNp
emU6CiAgICAgY2FzZSBHZXRCeUlkOgorICAgIGNhc2UgR2V0QnlJZEZsdXNoOgogICAgIGNhc2Ug
VG9UaGlzOgogICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKICAgICBjYXNlIE11bHRpUHV0QnlP
ZmZzZXQ6CkBAIC0yMjIsNiArMjIzLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKE5vZGUqIAogICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBjYXNlIFB1dEJ5
SWREaXJlY3Q6CiAgICAgY2FzZSBQdXRCeUlkOgorICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTkx
Mzk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1NCw2ICs1NTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Y29tcGlsZVB1dFN0cnVjdHVyZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
R2V0QnlJZDoKKyAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgICAgICBjb21waWxl
R2V0QnlJZCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW46CkBAIC01NjEs
NiArNTYyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFB1
dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeUlk
Rmx1c2g6CiAgICAgICAgICAgICBjb21waWxlUHV0QnlJZCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgpAQCAtMjIxMiw5ICsyMjE0LDYgQEAgcHJpdmF0
ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkKCkKICAgICB7Ci0gICAgICAgIC8vIFBy
ZXR0eSBtdWNoIHRoZSBvbmx5IHJlYXNvbiB3aHkgd2UgZG9uJ3QgYWxzbyBzdXBwb3J0IEdldEJ5
SWRGbHVzaCBpcyBiZWNhdXNlOgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI1NzExCi0gICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgQ2VsbFVzZTogewogICAgICAgICAg
ICAgc2V0SlNWYWx1ZShnZXRCeUlkKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKQEAgLTg1
OTYsNyArODU5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaDIgPSBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVzUHVzaGVkID0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucHJlc2VydmVS
ZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hp
bmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VG
b3JDQ2FsbCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc2F2
ZWQgdGhlc2UsIHNvIHdoZW4gd2UgbWFrZSBhIHNsb3cgcGF0aCBjYWxsLCB3ZSBkb24ndCBoYXZl
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzYXZlIHRoZW0gYWdhaW4uCkBAIC04NjE4
LDcgKzg2MTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
Y3JhdGNoMSwgc2NyYXRjaDIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkp
OwogCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVz
dG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIGJ5dGVzUHVzaGVkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVn
aXN0ZXJzQnlQb3BwaW5nKGppdCwgYnl0ZXNQdXNoZWQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKIAogICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKQEAgLTg2MjcsNyAr
ODYyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lz
dGVycywgaml0LCBwYXJhbXMubGF6eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzLCBvcGVyYXRpb25GbHVz
aFdyaXRlQmFycmllckJ1ZmZlciwgSW52YWxpZEdQUlJlZywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgYnl0ZXNQdXNo
ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJl
c3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBieXRlc1B1c2hlZCwgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTkxMzk2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIklubGluZUNhbGxGcmFtZS5oIgogI2luY2x1
ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIk1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNl
dExpc3QuaCIKICNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIlR5cGVvZlR5cGUu
aCIKQEAgLTEzMjIsNiArMTMyMywyMCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwor
CisgICAgdm9pZCBtYWtlU3BhY2VPblN0YWNrRm9yQ0NhbGwoKQorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRCeXRlcygpLCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCk7CisgICAgICAgIGlmIChz
dGFja09mZnNldCkKKyAgICAgICAgICAgIHN1YlB0cihUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgfQorCisgICAgdm9pZCByZWNsYWltU3BhY2VP
blN0YWNrRm9yQ0NhbGwoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCk7CisgICAgICAgIGlmIChzdGFja09mZnNldCkKKyAgICAgICAg
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgfQogICAgIAogcHJvdGVjdGVkOgogICAgIFZNKiBtX3ZtOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHJldmlzaW9uIDE5MTM5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDcsMTEgKzMwNywxNiBAQCBSZWdpc3RlclNldCBSZWdpc3RlclNldDo6d2ViQXNzZW1i
bHlDYWxsCiB9CiAjZW5kaWYKIAotUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1Rv
Tm90U2F2ZUZvckNhbGwoKQorUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnJlZ2lzdGVyc1RvTm90
U2F2ZUZvckpTQ2FsbCgpCiB7CiAgICAgcmV0dXJuIFJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0Ojp2
bUNhbGxlZVNhdmVSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJl
Z2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOwogfQogCitSZWdpc3RlclNl
dCBSZWdpc3RlclNldDo6cmVnaXN0ZXJzVG9Ob3RTYXZlRm9yQ0NhbGwoKQoreworICAgIHJldHVy
biBSZWdpc3RlclNldChSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLCBSZWdpc3Rl
clNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdp
c3RlcnMoKSk7Cit9CisKIFJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCkKIHsKICAg
ICBSZWdpc3RlclNldCByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCShyZXZpc2lvbiAxOTEzOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDggQEAgcHVibGljOgog
ICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxGUFJzKCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0
IGFsbFJlZ2lzdGVycygpOwogCi0gICAgc3RhdGljIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvTm90
U2F2ZUZvckNhbGwoKTsKKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzVG9Ob3RTYXZl
Rm9ySlNDYWxsKCk7CisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1RvTm90U2F2ZUZv
ckNDYWxsKCk7CiAgICAgCiAgICAgdm9pZCBzZXQoUmVnIHJlZywgYm9vbCB2YWx1ZSA9IHRydWUp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTkxMzk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlwZSBT
Y3JhdGNoUgogR1BSUmVnIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6YWxsb2NhdGVTY3JhdGNo
R1BSKCkgeyByZXR1cm4gYWxsb2NhdGVTY3JhdGNoPEdQUkluZm8+KCk7IH0KIEZQUlJlZyBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3I6OmFsbG9jYXRlU2NyYXRjaEZQUigpIHsgcmV0dXJuIGFsbG9j
YXRlU2NyYXRjaDxGUFJJbmZvPigpOyB9CiAKLXVuc2lnbmVkIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6cHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGpp
dCkKK3Vuc2lnbmVkIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZXVzZWRSZWdp
c3RlcnNCeVB1c2hpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCwgRXh0cmFTdGFja1NwYWNlIGV4dHJh
U3RhY2tTcGFjZSkKIHsKICAgICBpZiAoIWRpZFJldXNlUmVnaXN0ZXJzKCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTE5LDEzICsxMTksMTMgQEAgdW5zaWduZWQgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpwcmVzZQogICAgICAgICAgICAgcmVnaXN0ZXJzVG9TcGlsbC5zZXQocmVnKTsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCBleHRyYVN0YWNrQnl0ZXNBdFRvcE9mU3RhY2sgPSBtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbDsKKyAgICB1bnNpZ25lZCBleHRyYVN0YWNrQnl0ZXNBdFRv
cE9mU3RhY2sgPSBleHRyYVN0YWNrU3BhY2UgPT0gRXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckND
YWxsID8gbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwgOiAwOwogICAgIHVuc2lnbmVkIHN0
YWNrQWRqdXN0bWVudFNpemUgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNlcnZlUmVn
aXN0ZXJzVG9TdGFja0ZvckNhbGwoaml0LCByZWdpc3RlcnNUb1NwaWxsLCBleHRyYVN0YWNrQnl0
ZXNBdFRvcE9mU3RhY2spOwogCiAgICAgcmV0dXJuIHN0YWNrQWRqdXN0bWVudFNpemU7CiB9CiAK
LXZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQ
b3BwaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQsIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNVc2VkVG9Q
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVycykKK3ZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpy
ZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQsIHVuc2ln
bmVkIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywgRXh0cmFTdGFj
a1NwYWNlIGV4dHJhU3RhY2tTcGFjZSkKIHsKICAgICBpZiAoIWRpZFJldXNlUmVnaXN0ZXJzKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6cmVzdG9yZVJlCiAgICAgICAgICAgICByZWdpc3RlcnNUb0ZpbGwuc2V0KHJl
Zyk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgZXh0cmFTdGFja0J5dGVzQXRUb3BPZlN0YWNrID0g
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGw7CisgICAgdW5zaWduZWQgZXh0cmFTdGFja0J5
dGVzQXRUb3BPZlN0YWNrID0gZXh0cmFTdGFja1NwYWNlID09IEV4dHJhU3RhY2tTcGFjZTo6U3Bh
Y2VGb3JDQ2FsbCA/IG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsIDogMDsKICAgICBSZWdp
c3RlclNldCBkb250UmVzdG9yZTsgLy8gRW1wdHkgc2V0LiBXZSB3YW50IHRvIHJlc3RvcmUgZXZl
cnl0aGluZy4KICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVSZWdpc3RlcnNG
cm9tU3RhY2tGb3JDYWxsKGppdCwgcmVnaXN0ZXJzVG9GaWxsLCBkb250UmVzdG9yZSwgbnVtYmVy
T2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzLCBleHRyYVN0YWNrQnl0ZXNBdFRv
cE9mU3RhY2spOwogfQpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpyZXN0b3JlUmUKIFJlZ2lzdGVyU2V0IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6
dXNlZFJlZ2lzdGVyc0ZvckNhbGwoKSBjb25zdAogewogICAgIFJlZ2lzdGVyU2V0IHJlc3VsdCA9
IG1fdXNlZFJlZ2lzdGVyczsKLSAgICByZXN1bHQuZXhjbHVkZShSZWdpc3RlclNldDo6cmVnaXN0
ZXJzVG9Ob3RTYXZlRm9yQ2FsbCgpKTsKKyAgICByZXN1bHQuZXhjbHVkZShSZWdpc3RlclNldDo6
cmVnaXN0ZXJzVG9Ob3RTYXZlRm9ySlNDYWxsKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0
ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24gMTkxMzk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTIg
KzY2LDkgQEAgcHVibGljOgogCiAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVyczsgfQogICAgIAotICAgIC8vIHByZXNlcnZlUmV1c2Vk
UmVnaXN0ZXJzQnlQdXNoaW5nKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMg
dXNlZCB0byBrZWVwIHRoZSBzdGFjawotICAgIC8vIHBvaW50ZXIgcHJvcGVybHkgYWxpZ25lZCBh
bmQgdG8gcmVzZXJ2ZSByb29tIGZvciBjYWxsaW5nIGEgQyBoZWxwZXIuIFRoaXMgbnVtYmVyIG9m
IHBhZGRpbmcKLSAgICAvLyBieXRlcyBtdXN0IGJlIHByb3ZpZGVkIHRvIHJlc3RvcmVSZXVzZWRS
ZWdpc3RlcnNCeVBvcHBpbmcoKSBpbiBvcmRlciB0byByZXZlcnNlIHRoZSB3b3JrIGRvbmUKLSAg
ICAvLyBieSBwcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZygpLgotICAgIHVuc2lnbmVk
IHByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKE1hY3JvQXNzZW1ibGVyJiBqaXQpOwot
ICAgIHZvaWQgcmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhNYWNyb0Fzc2VtYmxlciYg
aml0LCB1bnNpZ25lZCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMp
OworICAgIGVudW0gY2xhc3MgRXh0cmFTdGFja1NwYWNlIHsgU3BhY2VGb3JDQ2FsbCwgTm9FeHRy
YVNwYWNlIH07CisgICAgdW5zaWduZWQgcHJlc2VydmVSZXVzZWRSZWdpc3RlcnNCeVB1c2hpbmco
TWFjcm9Bc3NlbWJsZXImIGppdCwgRXh0cmFTdGFja1NwYWNlKTsKKyAgICB2b2lkIHJlc3RvcmVS
ZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoTWFjcm9Bc3NlbWJsZXImIGppdCwgdW5zaWduZWQgbnVt
YmVyT2ZCeXRlc1VzZWRUb1ByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzLCBFeHRyYVN0YWNrU3BhY2Up
OwogICAgIAogICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnNGb3JDYWxsKCkgY29uc3Q7CiAg
ICAgCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>