<?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>127639</bug_id>
          
          <creation_ts>2014-01-25 20:04:19 -0800</creation_ts>
          <short_desc>FTL should do polyvariant GetById inlining</short_desc>
          <delta_ts>2014-01-30 13:35:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>127646</dependson>
          <blocked>127325</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>972120</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-25 20:04:19 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972151</commentid>
    <comment_count>1</comment_count>
      <attachid>222257</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-25 22:44:10 -0800</bug_when>
    <thetext>Created attachment 222257
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972222</commentid>
    <comment_count>2</comment_count>
      <attachid>222279</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-26 10:50:56 -0800</bug_when>
    <thetext>Created attachment 222279
almost there

It inlined a GetById.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972231</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-26 12:16:09 -0800</bug_when>
    <thetext>This, combined with polyvariant Call/Construct inlining, is a 15-16% speed-up on Raytrace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972236</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-01-26 12:20:13 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; This, combined with polyvariant Call/Construct inlining, is a 15-16% speed-up on Raytrace.

ooh, nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972239</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-26 12:35:02 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; This, combined with polyvariant Call/Construct inlining, is a 15-16% speed-up on Raytrace.
&gt; 
&gt; ooh, nice

Yup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972241</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-26 12:39:12 -0800</bug_when>
    <thetext>Here&apos;s the combined impact of polyvariant call, construct, and get_by_id inlining, as well as our loosening of the restrictions on recursive inlining.


Benchmark report for SunSpider, Octane, Kraken, and AsmBench on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/cStack/OpenSource/WebKitBuild/Release/jsc (r162775)
&quot;Polyvariant&quot; at /Volumes/Data/fromMiniMe/cStack/OpenSource/WebKitBuild/Release/jsc (r162802)

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

                                                TipOfTree                Polyvariant                                    
SunSpider:
   3d-cube                                    8.2543+-0.0749            8.2333+-0.1511        
   3d-morph                                   9.2846+-0.2250            9.2691+-0.1157        
   3d-raytrace                                9.7788+-0.2722            9.7150+-0.0529        
   access-binary-trees                        2.7546+-0.0173     !      2.9426+-0.0121        ! definitely 1.0683x slower
   access-fannkuch                            8.1062+-0.1008     ?      8.1651+-0.0838        ?
   access-nbody                               4.6833+-0.1771            4.4671+-0.1296          might be 1.0484x faster
   access-nsieve                              5.5225+-0.2111            5.4650+-0.1239          might be 1.0105x faster
   bitops-3bit-bits-in-byte                   1.9982+-0.0312     ?      2.0090+-0.0279        ?
   bitops-bits-in-byte                        6.6814+-0.0321            6.6639+-0.0190        
   bitops-bitwise-and                         3.0589+-0.0673            3.0476+-0.0139        
   bitops-nsieve-bits                         5.8736+-0.0810            5.7569+-0.1250          might be 1.0203x faster
   controlflow-recursive                      3.9936+-0.0468     ^      3.3387+-0.0278        ^ definitely 1.1962x faster
   crypto-aes                                 6.2213+-0.0279     ?      6.2234+-0.0255        ?
   crypto-md5                                 3.8075+-0.0526     ^      3.6968+-0.0291        ^ definitely 1.0299x faster
   crypto-sha1                                3.7536+-0.0368     ?      3.7608+-0.0212        ?
   date-format-tofte                         12.3529+-0.0818     !     12.6441+-0.1839        ! definitely 1.0236x slower
   date-format-xparb                          8.9583+-0.0575     ^      8.7369+-0.0866        ^ definitely 1.0253x faster
   math-cordic                                4.8908+-0.0517            4.8886+-0.0249        
   math-partial-sums                         10.3546+-0.1096     ?     10.4173+-0.1506        ?
   math-spectral-norm                         3.2556+-0.0364     ?      3.2887+-0.0389        ? might be 1.0102x slower
   regexp-dna                                13.0241+-0.1945     ?     13.0838+-0.1657        ?
   string-base64                              5.9731+-0.0482     ?      5.9746+-0.0953        ?
   string-fasta                              11.1139+-0.2209           11.1097+-0.1173        
   string-tagcloud                           15.8351+-0.1706           15.6483+-0.2020          might be 1.0119x faster
   string-unpack-code                        33.6274+-0.6313     ?     33.8924+-0.1845        ?
   string-validate-input                      7.8653+-0.1073            7.8404+-0.0598        

   &lt;arithmetic&gt; *                             8.1163+-0.0253            8.0877+-0.0243          might be 1.0035x faster
   &lt;geometric&gt;                                6.6451+-0.0221     ^      6.5917+-0.0170        ^ definitely 1.0081x faster
   &lt;harmonic&gt;                                 5.5843+-0.0167     ^      5.5303+-0.0152        ^ definitely 1.0098x faster

                                                TipOfTree                Polyvariant                                    
Octane and V8v7:
   encrypt                                   0.41947+-0.00054    ?     0.42183+-0.00353       ?
   decrypt                                   7.59646+-0.05317          7.56945+-0.04025       
   deltablue                        x2       0.50688+-0.00434          0.50290+-0.00519       
   earley                                    0.98659+-0.02694          0.96930+-0.00832         might be 1.0178x faster
   boyer                                    12.25735+-0.09908         12.23577+-0.04478       
   raytrace                         x2       4.08674+-0.11312    ^     3.46633+-0.03018       ^ definitely 1.1790x faster
   regexp                           x2      32.47881+-0.10753    ?    32.58171+-0.17481       ?
   richards                         x2       0.21225+-0.00624          0.21141+-0.00340       
   splay                            x2       0.61052+-0.00422    ^     0.58871+-0.00244       ^ definitely 1.0370x faster
   navier-stokes                    x2       7.79889+-0.00486    ?     7.80587+-0.03070       ?
   closure                                   0.74937+-0.01671    ?     0.76622+-0.00554       ? might be 1.0225x slower
   jquery                                   10.81645+-0.07306    !    11.03254+-0.02684       ! definitely 1.0200x slower
   gbemu                            x2      69.14262+-0.79314    ^    62.30284+-0.78711       ^ definitely 1.1098x faster
   mandreel                         x2      97.96271+-2.83544         97.44957+-0.68272       
   pdfjs                            x2     101.85877+-0.27247    ?   102.26682+-0.30497       ?
   box2d                            x2      30.28804+-0.64902         30.23497+-0.16425       

V8v7:
   &lt;arithmetic&gt;                              7.04050+-0.01758    ^     6.96939+-0.02719       ^ definitely 1.0102x faster
   &lt;geometric&gt; *                             2.12872+-0.00887    ^     2.07182+-0.00711       ^ definitely 1.0275x faster
   &lt;harmonic&gt;                                0.75943+-0.00996          0.74952+-0.00610         might be 1.0132x faster

Octane including V8v7:
   &lt;arithmetic&gt;                             27.79685+-0.25170    ^    27.22375+-0.10254       ^ definitely 1.0211x faster
   &lt;geometric&gt; *                             6.30850+-0.01485    ^     6.16355+-0.01226       ^ definitely 1.0235x faster
   &lt;harmonic&gt;                                1.14888+-0.01537          1.13631+-0.00882         might be 1.0111x faster

                                                TipOfTree                Polyvariant                                    
Kraken:
   ai-astar                                  495.650+-0.810            495.638+-0.390         
   audio-beat-detection                      221.692+-1.536      ?     222.753+-1.646         ?
   audio-dft                                 301.221+-5.226            299.042+-6.949         
   audio-fft                                 130.039+-0.116      ?     131.248+-2.567         ?
   audio-oscillator                          592.556+-9.839      ^     578.174+-3.019         ^ definitely 1.0249x faster
   imaging-darkroom                          298.977+-0.823            298.561+-1.151         
   imaging-desaturate                        105.858+-0.138      ?     105.867+-0.526         ?
   imaging-gaussian-blur                     202.816+-35.705           189.334+-1.013           might be 1.0712x faster
   json-parse-financial                       82.880+-0.263             82.461+-0.503         
   json-stringify-tinderbox                  106.786+-2.419            104.643+-0.793           might be 1.0205x faster
   stanford-crypto-aes                       160.896+-2.225      ^     157.776+-0.839         ^ definitely 1.0198x faster
   stanford-crypto-ccm                       108.134+-3.806            106.794+-0.659           might be 1.0125x faster
   stanford-crypto-pbkdf2                    272.840+-3.271            271.732+-5.495         
   stanford-crypto-sha256-iterative          116.669+-0.647      ?     117.601+-2.366         ?

   &lt;arithmetic&gt; *                            228.358+-2.643            225.830+-0.827           might be 1.0112x faster
   &lt;geometric&gt;                               189.878+-2.074            188.136+-0.744           might be 1.0093x faster
   &lt;harmonic&gt;                                162.401+-1.325            161.188+-0.647           might be 1.0075x faster

                                                TipOfTree                Polyvariant                                    
AsmBench:
   bigfib.cpp                              1194.8333+-19.1009        1187.6722+-11.3044       
   cray.c                                    56.2320+-0.2700     ?     56.7966+-1.3339        ? might be 1.0100x slower
   dry.c                                    881.8271+-56.9067    ?    898.1438+-62.3191       ? might be 1.0185x slower
   FloatMM.c                               1777.0444+-28.7809        1762.6009+-1.0136        
   gcc-loops.cpp                           2177.6453+-1.1674     ?   2177.7537+-1.4576        ?
   n-body.c                                3069.9110+-1.4905     ?   3081.2242+-28.9799       ?
   Quicksort.c                               83.4500+-0.4061           83.0268+-0.3604        
   stepanov_container.cpp                  9341.3638+-31.3451        9304.7015+-39.0187       
   Towers.c                                  69.8374+-0.5867     ?     70.6055+-0.3869        ? might be 1.0110x slower

   &lt;arithmetic&gt;                            2072.4605+-5.4676         2069.1694+-7.9309          might be 1.0016x faster
   &lt;geometric&gt; *                            695.8181+-4.7783     ?    697.3273+-6.1953        ? might be 1.0022x slower
   &lt;harmonic&gt;                               189.4043+-0.7306     ?    190.5190+-1.8482        ? might be 1.0059x slower

                                                TipOfTree                Polyvariant                                    
All benchmarks:
   &lt;arithmetic&gt;                             303.7720+-0.8340          302.6966+-1.0118          might be 1.0036x faster
   &lt;geometric&gt;                               21.3231+-0.0741     ^     21.0623+-0.0531        ^ definitely 1.0124x faster
   &lt;harmonic&gt;                                 2.7351+-0.0305            2.7059+-0.0180          might be 1.0108x faster

                                                TipOfTree                Polyvariant                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                           53.4062+-0.2108     ^     52.9316+-0.1753        ^ definitely 1.0090x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972242</commentid>
    <comment_count>7</comment_count>
      <attachid>222282</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-26 12:45:50 -0800</bug_when>
    <thetext>Created attachment 222282
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972252</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-26 14:35:33 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/162811</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222257</attachid>
            <date>2014-01-25 22:44:10 -0800</date>
            <delta_ts>2014-01-26 10:50:56 -0800</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>5013</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDE2Mjc5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDE3ICsxMjgsMjcgQEAg
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogewogICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAgCi0gICAgVU5V
U0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4
KTsKLSAgICBVTlVTRURfUEFSQU0odWlkKTsKLSNpZiBFTkFCTEUoSklUKQotICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSk7
Ci0gICAgaWYgKCFzdHViSW5mbyB8fCAhc3R1YkluZm8tPnNlZW4pIHsKLSAgICAgICAgaWYgKGhh
c0V4aXRTaXRlKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkpCi0gICAgICAg
ICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICBHZXRC
eUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBw
cm9maWxlZEJsb2NrLCBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLCB1aWQpOwog
ICAgIAorICAgIGlmICghcmVzdWx0LnRha2VzU2xvd1BhdGgoKQorICAgICAgICAmJiAoaGFzRXhp
dFNpdGUobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KQorICAgICAgICAgICAg
fHwgcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UoYnl0ZWNvZGVJbmRleCkpKQor
ICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKworICAg
IGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJs
b2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwotICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygK
KyAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCisgICAgU3RyaW5nSW1wbCogdWlkKQorewor
I2lmIEVOQUJMRShKSVQpCisgICAgaWYgKCFzdHViSW5mbyB8fCAhc3R1YkluZm8tPnNlZW4pCisg
ICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAogICAgIGlm
IChzdHViSW5mby0+cmVzZXRCeUdDKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoLCB0cnVlKTsKQEAgLTE2NCwxNyArMTc0LDEyIEBAIEdldEJ5SWRTdGF0dXMgR2V0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVz
KE1ha2VzQ2FsbHMsIHRydWUpOwogICAgIH0KICAgICAKLSAgICAvLyBOZXh0IGNoZWNrIGlmIGl0
IHRha2VzIHNsb3cgY2FzZSwgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGJlIGtpbmQgb2YgY2Fy
ZWZ1bC4KLSAgICBpZiAocHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UoYnl0ZWNv
ZGVJbmRleCkKLSAgICAgICAgfHwgaGFzRXhpdFNpdGUobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBi
eXRlY29kZUluZGV4KSkKLSAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCwgdHJ1ZSk7Ci0gICAgCiAgICAgLy8gRmluYWxseSBmaWd1cmUgb3V0IGlmIHdlIGNhbiBkZXJp
dmUgYW4gYWNjZXNzIHN0cmF0ZWd5LgogICAgIEdldEJ5SWRTdGF0dXMgcmVzdWx0OwogICAgIHJl
c3VsdC5tX3dhc1NlZW5JbkpJVCA9IHRydWU7IC8vIFRoaXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5
dGVjb2RlIGR1bXBpbmcgb25seS4KICAgICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7
CiAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0gICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50
KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHVpZCk7CisgICAgICAgIHJldHVybiBHZXRC
eUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAgICAKICAgICBjYXNlIGFjY2Vzc19nZXRf
YnlfaWRfc2VsZjogewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51
LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CkBAIC0yNzUsMTEgKzI4MCwz
MyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgCiAgICAg
cmV0dXJuIHJlc3VsdDsKICNlbHNlIC8vIEVOQUJMRShKSVQpCi0gICAgVU5VU0VEX1BBUkFNKG1h
cCk7CisgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOworICAgIFVOVVNFRF9QQVJBTShz
dHViSW5mbyk7CisgICAgVU5VU0VEX1BBUkFNKHVpZCk7CiAgICAgcmV0dXJuIEdldEJ5SWRTdGF0
dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKK0dl
dEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIENvZGVCbG9jayogZGZnQmxvY2ssIFN0dWJJbmZvTWFwJiBiYXNlbGluZU1h
cCwKKyAgICBTdHViSW5mb01hcCYgZGZnTWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJp
bmdJbXBsKiB1aWQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRC
bG9jay0+bV9sb2NrKTsKKyAgICAKKyAgICBHZXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVG
b3JTdHViSW5mbygKKyAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBtYXAuZ2V0KENvZGVP
cmlnaW4oYnl0ZWNvZGVJbmRleCkpLCB1aWQpOworICAgIAorICAgIGlmICghcmVzdWx0LnRha2Vz
U2xvd1BhdGgoKQorICAgICAgICAmJiAoaGFzRXhpdFNpdGUobG9ja2VyLCBwcm9maWxlZEJsb2Nr
LCBieXRlY29kZUluZGV4KQorICAgICAgICAgICAgfHwgcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9U
YWtlU2xvd0Nhc2UoYnl0ZWNvZGVJbmRleCkpKQorICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1
cm4gY29tcHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwor
ICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1
aWQpCiB7CiAgICAgLy8gRm9yIG5vdyB3ZSBvbmx5IGhhbmRsZSB0aGUgc3VwZXIgc2ltcGxlIHNl
bGYgYWNjZXNzIGNhc2UuIFdlIGNvdWxkIGhhbmRsZSB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTYyNzk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBHZXRCeUlkU3RhdHVzX2gKICNkZWZp
bmUgR2V0QnlJZFN0YXR1c19oCiAKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAi
Q29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgi
CiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKQEAgLTc1LDYgKzc2LDggQEAgcHVibGljOgog
ICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgU3R1YkluZm9N
YXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIHN0YXRp
YyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoVk0mLCBTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1
aWQpOwogICAgIAorICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2Nr
KiBiYXNlbGluZUJsb2NrLCBDb2RlQmxvY2sqIGRmZ0Jsb2NrLCBTdHViSW5mb01hcCYgYmFzZWxp
bmVNYXAsIFN0dWJJbmZvTWFwJiBkZmdNYXAsIENvZGVPcmlnaW4sIFN0cmluZ0ltcGwqIHVpZCk7
CisgICAgCiAgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAg
CiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlv
bjsgfQpAQCAtOTIsNiArOTUsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgogICAgIHN0YXRp
YyBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sq
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21w
dXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayosIFN0
cnVjdHVyZVN0dWJJbmZvKiwgU3RyaW5nSW1wbCogdWlkKTsKICAgICBzdGF0aWMgdm9pZCBjb21w
dXRlRm9yQ2hhaW4oR2V0QnlJZFN0YXR1cyYgcmVzdWx0LCBDb2RlQmxvY2sqLCBTdHJpbmdJbXBs
KiB1aWQpOwogICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJs
b2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222279</attachid>
            <date>2014-01-26 10:50:56 -0800</date>
            <delta_ts>2014-01-26 12:45:50 -0800</delta_ts>
            <desc>almost there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15726</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyODA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDE0LTAxLTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBkbyBwb2x5dmFyaWFudCBHZXRCeUlkIGlubGluaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MzkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEl0J3Mgc3RhcnRpbmcg
dG8gZG8gdGhpbmdzLiBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogYnl0ZWNvZGUvQ2Fs
bExpbmtTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZURG
R1N0YXR1c2VzKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Z2V0U3R1YkluZm9NYXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZFN0dWJJbmZvKToK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6aGFzRXhpdFNpdGUp
OgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnMuaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvc2ltcGxlLXBvbHl2YXJpYW50LWdldC1i
eS1pZC1pbmxpbmluZy1leGFtcGxlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAg
IChmdXp6KToKKyAgICAgICAgKGJhcik6CisKIDIwMTQtMDEtMjUgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBTdHViSW5mb01hcCBzaG91bGQgdXNlIENvZGVPcmln
aW5BcHByb3hpbWF0ZUhhc2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTYyODAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTgyLDEwICsxODIsMTAgQEAgdm9pZCBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZURGR1N0YXR1
c2VzKAogICAgICAgICAvLyBjaGFsbGVuZ2luZyBiZWNhdXNlIGl0IHdvdWxkIHJlcXVpcmUgY3Jl
YXRpbmcgYSBDb2RlT3JpZ2luLWJhc2VkIGRhdGFiYXNlIGluCiAgICAgICAgIC8vIGJhc2VsaW5l
IENvZGVCbG9ja3MsIGJ1dCB0aG9zZSBDb2RlQmxvY2tzIGRvbid0IHJlYWxseSBoYXZlIGEgcGxh
Y2UgdG8gcHV0IHRoZQogICAgICAgICAvLyBJbmxpbmVDYWxsRnJhbWVzLgorICAgICAgICBDb2Rl
QmxvY2sqIGN1cnJlbnRCYXNlbGluZSA9CisgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0Zv
ck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2Nr
KTsKICAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoYmFz
ZWxpbmVDb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGN1cnJlbnRC
YXNlbGluZSA9Ci0gICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAg
ICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjdXJyZW50QmFzZWxpbmUtPm1fbG9jayk7
CiAgICAgICAgICAgICB0YWtlU2xvd1BhdGggPQogICAgICAgICAgICAgICAgIGN1cnJlbnRCYXNl
bGluZS0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4LCBCYWRDYWNoZSwgRXhpdEZyb21GVEwpKQogICAgICAgICAgICAgICAg
IHx8IGN1cnJlbnRCYXNlbGluZS0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhp
dFNpdGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBCYWRDYWNoZVdhdGNocG9pbnQsIEV4aXRG
cm9tRlRMKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxNjI4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM0LDEyICs1MzQsNyBAQCB2b2lk
IENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgb3V0LnByaW50ZigiXG4i
KTsKICAgICAKICAgICBTdHViSW5mb01hcCBzdHViSW5mb3M7Ci0jaWYgRU5BQkxFKEpJVCkKLSAg
ICB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAg
IGdldFN0dWJJbmZvTWFwKGxvY2tlciwgc3R1YkluZm9zKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBn
ZXRTdHViSW5mb01hcChzdHViSW5mb3MpOwogICAgIAogICAgIGNvbnN0IEluc3RydWN0aW9uKiBi
ZWdpbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGVu
ZCA9IGluc3RydWN0aW9ucygpLmVuZCgpOwpAQCAtMjMzMCwxNiArMjMyNSwyNiBAQCB2b2lkIENv
ZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAjZW5kaWYKIH0KIAordm9pZCBDb2Rl
QmxvY2s6OmdldFN0dWJJbmZvTWFwKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHViSW5m
b01hcCYgcmVzdWx0KQorewogI2lmIEVOQUJMRShKSVQpCi1TdHJ1Y3R1cmVTdHViSW5mbyogQ29k
ZUJsb2NrOjphZGRTdHViSW5mbygpCisgICAgdG9IYXNoTWFwKG1fc3R1YkluZm9zLCBnZXRTdHJ1
Y3R1cmVTdHViSW5mb0NvZGVPcmlnaW4sIHJlc3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShyZXN1bHQpOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJsb2NrOjpnZXRTdHViSW5mb01hcChT
dHViSW5mb01hcCYgcmVzdWx0KQogewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7Ci0gICAgcmV0dXJuIG1fc3R1YkluZm9zLmFkZCgpOworICAgIGdldFN0dWJJbmZvTWFw
KGxvY2tlciwgcmVzdWx0KTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmdldFN0dWJJbmZvTWFwKGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHViSW5mb01hcCYgcmVzdWx0KQorI2lmIEVOQUJM
RShKSVQpCitTdHJ1Y3R1cmVTdHViSW5mbyogQ29kZUJsb2NrOjphZGRTdHViSW5mbygpCiB7Ci0g
ICAgdG9IYXNoTWFwKG1fc3R1YkluZm9zLCBnZXRTdHJ1Y3R1cmVTdHViSW5mb0NvZGVPcmlnaW4s
IHJlc3VsdCk7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBy
ZXR1cm4gbV9zdHViSW5mb3MuYWRkKCk7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpyZXNldFN0dWIo
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYyODAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiAr
MTc1LDkgQEAgcHVibGljOgogICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZz
ZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNl
dCwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pOwogCisgICAgdm9pZCBnZXRTdHVi
SW5mb01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3R1YkluZm9NYXAmIHJlc3VsdCk7
CisgICAgdm9pZCBnZXRTdHViSW5mb01hcChTdHViSW5mb01hcCYgcmVzdWx0KTsKKwogI2lmIEVO
QUJMRShKSVQpCiAgICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKCk7CiAgICAgQmFn
PFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZv
cy5iZWdpbigpOyB9CkBAIC0xODIsOCArMTg1LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNl
dFN0dWIoU3RydWN0dXJlU3R1YkluZm8mKTsKICAgICAKLSAgICB2b2lkIGdldFN0dWJJbmZvTWFw
KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBTdHViSW5mb01hcCYgcmVzdWx0KTsKLQogICAg
IEJ5VmFsSW5mbyYgZ2V0QnlWYWxJbmZvKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewog
ICAgICAgICByZXR1cm4gKihiaW5hcnlTZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZD4obV9ieVZh
bEluZm9zLCBtX2J5VmFsSW5mb3Muc2l6ZSgpLCBieXRlY29kZUluZGV4LCBnZXRCeVZhbEluZm9C
eXRlY29kZUluZGV4KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNjI4MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDEyICszNCwxMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCBHZXRCeUlkU3RhdHVzOjpo
YXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK2Jvb2wgR2V0QnlJZFN0YXR1
czo6aGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEV4aXRpbmdKSVRUeXBl
IGppdFR5cGUpCiB7Ci0gICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tl
ciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlKSkKLSAgICAg
ICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhp
dFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGVXYXRjaHBvaW50KSkKLSAgICAgICAgfHwgcHJv
ZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0
ZWNvZGVJbmRleCwgQmFkV2Vha0NvbnN0YW50Q2FjaGUpKQotICAgICAgICB8fCBwcm9maWxlZEJs
b2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUlu
ZGV4LCBCYWRXZWFrQ29uc3RhbnRDYWNoZVdhdGNocG9pbnQpKTsKKyAgICByZXR1cm4gcHJvZmls
ZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNv
ZGVJbmRleCwgQmFkQ2FjaGUsIGppdFR5cGUpKQorICAgICAgICB8fCBwcm9maWxlZEJsb2NrLT5o
YXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBC
YWRDYWNoZVdhdGNocG9pbnQsIGppdFR5cGUpKQorICAgICAgICB8fCBwcm9maWxlZEJsb2NrLT5o
YXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBC
YWRXZWFrQ29uc3RhbnRDYWNoZSwgaml0VHlwZSkpCisgICAgICAgIHx8IHByb2ZpbGVkQmxvY2st
Pmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgs
IEJhZFdlYWtDb25zdGFudENhY2hlV2F0Y2hwb2ludCwgaml0VHlwZSkpOwogfQogCiBHZXRCeUlk
U3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpCkBAIC0xMjgs
MTcgKzEyOCwyNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiB7
CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
ICAgICAKLSAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7Ci0gICAgVU5VU0VEX1BBUkFN
KGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTSh1aWQpOwotI2lmIEVOQUJMRShKSVQp
Ci0gICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5
dGVjb2RlSW5kZXgpKTsKLSAgICBpZiAoIXN0dWJJbmZvIHx8ICFzdHViSW5mby0+c2Vlbikgewot
ICAgICAgICBpZiAoaGFzRXhpdFNpdGUobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUlu
ZGV4KSkKLSAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIHRy
dWUpOworICAgIEdldEJ5SWRTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAg
ICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUlu
ZGV4KSksIHVpZCk7CiAgICAgCisgICAgaWYgKCFyZXN1bHQudGFrZXNTbG93UGF0aCgpCisgICAg
ICAgICYmIChoYXNFeGl0U2l0ZShsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgp
CisgICAgICAgICAgICB8fCBwcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShieXRl
Y29kZUluZGV4KSkpCisgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgs
IHRydWUpOworCisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxM
SW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHVpZCk7Ci0gICAgfQorICAgIAorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0dldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvclN0dWJJbmZvKAorICAgIGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sq
IHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywKKyAgICBTdHJpbmdJ
bXBsKiB1aWQpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoIXN0dWJJbmZvIHx8ICFzdHVi
SW5mby0+c2VlbikKKyAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5yZXNldEJ5R0MpCiAgICAgICAgIHJldHVybiBHZXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIHRydWUpOwpAQCAtMTY0LDE3ICsxNzQsMTIgQEAgR2V0
QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgcmV0dXJu
IEdldEJ5SWRTdGF0dXMoTWFrZXNDYWxscywgdHJ1ZSk7CiAgICAgfQogICAgIAotICAgIC8vIE5l
eHQgY2hlY2sgaWYgaXQgdGFrZXMgc2xvdyBjYXNlLCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8g
YmUga2luZCBvZiBjYXJlZnVsLgotICAgIGlmIChwcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VT
bG93Q2FzZShieXRlY29kZUluZGV4KQotICAgICAgICB8fCBoYXNFeGl0U2l0ZShsb2NrZXIsIHBy
b2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKQotICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKLSAgICAKICAgICAvLyBGaW5hbGx5IGZpZ3VyZSBvdXQg
aWYgd2UgY2FuIGRlcml2ZSBhbiBhY2Nlc3Mgc3RyYXRlZ3kuCiAgICAgR2V0QnlJZFN0YXR1cyBy
ZXN1bHQ7CiAgICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gdHJ1ZTsgLy8gVGhpcyBpcyBpbnRl
cmVzdGluZyBmb3IgYnl0ZWNvZGUgZHVtcGluZyBvbmx5LgogICAgIHN3aXRjaCAoc3R1YkluZm8t
PmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc191bnNldDoKLSAgICAgICAgcmV0dXJuIGNv
bXB1dGVGcm9tTExJbnQocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCwgdWlkKTsKKyAgICAg
ICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAogICAgIGNh
c2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOiB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKQEAg
LTI3NSwxMSArMjgwLDQwIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKLSAgICBV
TlVTRURfUEFSQU0obWFwKTsKKyAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CisgICAg
VU5VU0VEX1BBUkFNKHN0dWJJbmZvKTsKKyAgICBVTlVTRURfUEFSQU0odWlkKTsKICAgICByZXR1
cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCBmYWxzZSk7CiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKIH0KIAorR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAg
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQ29kZUJsb2NrKiBkZmdCbG9jaywgU3R1YkluZm9N
YXAmIGJhc2VsaW5lTWFwLAorICAgIFN0dWJJbmZvTWFwJiBkZmdNYXAsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgU3RyaW5nSW1wbCogdWlkKQoreworICAgIGlmIChkZmdCbG9jaykgeworICAgICAg
ICBHZXRCeUlkU3RhdHVzIHJlc3VsdDsKKyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIoZGZnQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICByZXN1bHQg
PSBjb21wdXRlRm9yU3R1YkluZm8obG9ja2VyLCBkZmdCbG9jaywgZGZnTWFwLmdldChjb2RlT3Jp
Z2luKSwgdWlkKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAocmVzdWx0LnRha2VzU2xv
d1BhdGgoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9j
ayk7CisgICAgICAgICAgICBpZiAoaGFzRXhpdFNpdGUobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEV4aXRGcm9tRlRMKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2NrLCBiYXNl
bGluZU1hcCwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCB1aWQpOworfQorCiBHZXRCeUlkU3Rh
dHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUgdGhl
IHN1cGVyIHNpbXBsZSBzZWxmIGFjY2VzcyBjYXNlLiBXZSBjb3VsZCBoYW5kbGUgdGhlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHJl
dmlzaW9uIDE2MjgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpZm5kZWYgR2V0QnlJ
ZFN0YXR1c19oCiAjZGVmaW5lIEdldEJ5SWRTdGF0dXNfaAogCisjaW5jbHVkZSAiQ29kZU9yaWdp
bi5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCisjaW5jbHVkZSAiRXhpdGluZ0pJ
VFR5cGUuaCIKICNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAi
UHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKQEAgLTc1LDYgKzc3
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJs
b2NrKiwgU3R1YkluZm9NYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1
aWQpOwogICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoVk0mLCBTdHJ1Y3R1cmUq
LCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIAorICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1
dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBDb2RlQmxvY2sqIGRmZ0Jsb2NrLCBTdHVi
SW5mb01hcCYgYmFzZWxpbmVNYXAsIFN0dWJJbmZvTWFwJiBkZmdNYXAsIENvZGVPcmlnaW4sIFN0
cmluZ0ltcGwqIHVpZCk7CisgICAgCiAgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlOyB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
IT0gTm9JbmZvcm1hdGlvbjsgfQpAQCAtOTEsNyArOTUsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCB3
YXNTZWVuSW5KSVQoKSBjb25zdCB7IHJldHVybiBtX3dhc1NlZW5JbkpJVDsgfQogICAgIAogcHJp
dmF0ZToKLSAgICBzdGF0aWMgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisgICAgc3RhdGljIGJv
b2wgaGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayosIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEV4aXRpbmdKSVRUeXBlID0gRXhpdEZyb21Bbnl0aGluZyk7
CisgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cmluZ0lt
cGwqIHVpZCk7CiAgICAgc3RhdGljIHZvaWQgY29tcHV0ZUZvckNoYWluKEdldEJ5SWRTdGF0dXMm
IHJlc3VsdCwgQ29kZUJsb2NrKiwgU3RyaW5nSW1wbCogdWlkKTsKICAgICBzdGF0aWMgR2V0QnlJ
ZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTYyODAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMzYsNyArMTEzNiw5IEBAIHByaXZhdGU6CiAgICAgLy8gd29yay1hcm91bmQgZm9y
IHRoZSBmYWN0IHRoYXQgSlNWYWx1ZU1hcCBjYW4ndCBoYW5kbGUgImVtcHR5IiB2YWx1ZXMuCiAg
ICAgdW5zaWduZWQgbV9lbXB0eUpTVmFsdWVJbmRleDsKICAgICAKKyAgICBDb2RlQmxvY2sqIG1f
ZGZnQ29kZUJsb2NrOwogICAgIENhbGxMaW5rU3RhdHVzOjpDb250ZXh0TWFwIG1fY2FsbENvbnRl
eHRNYXA7CisgICAgU3R1YkluZm9NYXAgbV9kZmdTdHViSW5mb3M7CiAgICAgCiAgICAgSW5zdHJ1
Y3Rpb24qIG1fY3VycmVudEluc3RydWN0aW9uOwogfTsKQEAgLTI1MTgsOCArMjUyMCw5IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZp
ZXJOdW1iZXJdOwogICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBnZXRCeUlkU3RhdHVzID0gR2V0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2ssIG1faW5saW5lU3RhY2tUb3AtPm1fc3R1YkluZm9zLAotICAgICAg
ICAgICAgICAgIG1fY3VycmVudEluZGV4LCB1aWQpOworICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9kZmdDb2RlQmxvY2ssCisgICAgICAgICAgICAg
ICAgbV9pbmxpbmVTdGFja1RvcC0+bV9zdHViSW5mb3MsIG1fZGZnU3R1YkluZm9zLAorICAgICAg
ICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICAgICAgY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCwgcHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgZ2V0QnlJ
ZFN0YXR1cyk7CkBAIC0zNzE3LDExICszNzIwLDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlKCkKICAgICAvLyBTZXQgZHVyaW5nIGNvbnN0cnVjdGlvbi4KICAgICBBU1NFUlQoIW1fY3Vy
cmVudEluZGV4KTsKICAgICAKLSAgICBpZiAoaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkKLSAg
ICAgICAgJiYgISFtX2dyYXBoLm1fcGxhbi5wcm9maWxlZERGR0NvZGVCbG9jawotICAgICAgICAm
JiBPcHRpb25zOjplbmFibGVQb2x5dmFyaWFudENhbGxJbmxpbmluZygpKSB7Ci0gICAgICAgIENh
bGxMaW5rU3RhdHVzOjpjb21wdXRlREZHU3RhdHVzZXMoCi0gICAgICAgICAgICBtX2dyYXBoLm1f
cGxhbi5wcm9maWxlZERGR0NvZGVCbG9jay5nZXQoKSwgbV9jYWxsQ29udGV4dE1hcCk7CisgICAg
aWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKSB7CisgICAgICAgIG1fZGZnQ29kZUJsb2Nr
ID0gbV9ncmFwaC5tX3BsYW4ucHJvZmlsZWRERkdDb2RlQmxvY2suZ2V0KCk7CisgICAgICAgIGlm
IChtX2RmZ0NvZGVCbG9jaykgeworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZVBvbHl2
YXJpYW50Q2FsbElubGluaW5nKCkpCisgICAgICAgICAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVERkdTdGF0dXNlcyhtX2RmZ0NvZGVCbG9jaywgbV9jYWxsQ29udGV4dE1hcCk7CisgICAg
ICAgICAgICBpZiAoT3B0aW9uczo6ZW5hYmxlUG9seXZhcmlhbnRCeUlkSW5saW5pbmcoKSkKKyAg
ICAgICAgICAgICAgICBtX2RmZ0NvZGVCbG9jay0+Z2V0U3R1YkluZm9NYXAobV9kZmdTdHViSW5m
b3MpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGlmIChtX2NvZGVCbG9jay0+Y2FwdHVy
ZUNvdW50KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHJldmlzaW9uIDE2MjgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTc2LDYgKzE3Niw3
IEBAIHR5cGVkZWYgT3B0aW9uUmFuZ2Ugb3B0aW9uUmFuZ2U7CiAgICAgdih1bnNpZ25lZCwgbWF4
aW11bUlubGluaW5nUmVjdXJzaW9uRm9yTXVzdElubGluZSwgMykgXAogICAgIFwKICAgICB2KGJv
b2wsIGVuYWJsZVBvbHl2YXJpYW50Q2FsbElubGluaW5nLCB0cnVlKSBcCisgICAgdihib29sLCBl
bmFibGVQb2x5dmFyaWFudEJ5SWRJbmxpbmluZywgdHJ1ZSkgXAogICAgIFwKICAgICB2KHVuc2ln
bmVkLCBtYXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNoQ2FzZUxlbmd0aCwgNTApIFwKICAgICB2KHVu
c2lnbmVkLCBtYXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNoVG90YWxMZW5ndGgsIDIwMDApIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2ltcGxlLXBvbHl2YXJpYW50
LWdldC1ieS1pZC1pbmxpbmluZy1leGFtcGxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2ltcGxlLXBvbHl2YXJpYW50LWdldC1ieS1pZC1pbmxp
bmluZy1leGFtcGxlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9zaW1wbGUtcG9seXZhcmlhbnQtZ2V0LWJ5LWlkLWlubGluaW5nLWV4YW1wbGUu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAg
ICByZXR1cm4gYmFyKG8pOworfQorCitmdW5jdGlvbiBmdXp6KG8pIHsKKyAgICByZXR1cm4gYmFy
KG8pOworfQorCitmdW5jdGlvbiBiYXIobykgeworICAgIHJldHVybiBvLmY7Cit9CisKK25vSW5s
aW5lKGZvbyk7Citub0lubGluZShmdXp6KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7
ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28oe2Y6NDJ9KTsKKyAgICBpZiAocmVzdWx0ICE9
IDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAg
dmFyIHJlc3VsdCA9IGZ1enooe2c6MjMsIGY6MjR9KTsKKyAgICBpZiAocmVzdWx0ICE9IDI0KQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222282</attachid>
            <date>2014-01-26 12:45:50 -0800</date>
            <delta_ts>2014-01-26 18:30:03 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16192</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyODA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDE0LTAxLTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBkbyBwb2x5dmFyaWFudCBHZXRCeUlkIGlubGluaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MzkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZG9lcyBwb2x5
dmFyaWFudCBpbmxpbmluZyBmb3IgR2V0QnlJZHMuIEl0J3MgcHJldHR5IGVhc3kgdG8gZG8gdGhp
cywgbm93IHRoYXQgd2UKKyAgICAgICAgaGF2ZSBhbGwgb2YgdGhhdCBpbmZyYXN0cnVjdHVyZSBm
cm9tIHBvbHl2YXJpYW50IENhbGwvQ29uc3RydWN0IGlubGluaW5nLiBCYXNpY2FsbHkgd2UKKyAg
ICAgICAganVzdCBrZWVwIGFyb3VuZCB0aGUgU3R1YkluZm9NYXBzIG9mIHRoZSBERkcgY29kZSBi
bG9jayB3aGVuIGNvbXBpbGluZyB0aGUgRlRMIGNvZGUKKyAgICAgICAgYmxvY2suCisgICAgICAg
IAorICAgICAgICBUaGUgY29tYmluYXRpb24gb2YgQ2FsbCwgQ29uc3RydWN0LCBhbmQgR2V0QnlJ
ZCBpbmxpbmluZyBjYXVzZXMgYSAxNyUgc3BlZWQtdXAgb24KKyAgICAgICAgVjh2Ny9yYXl0cmFj
ZS4KKyAgICAgICAgCisgICAgICAgIEdldEJ5SWQgaW5saW5pbmcgYWxvbmUgYXBwZWFycyB0byBi
ZSBhIHNwZWVkLXVwIG9uIG90aGVyIGJlbmNobWFya3MgYXMgd2VsbC4KKworICAgICAgICAqIGJ5
dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVERkdTdGF0dXNlcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmdldFN0dWJJbmZvTWFwKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRT
dHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6Omhh
c0V4aXRTaXRlKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6Cisg
ICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAg
ICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbXBsZS1wb2x5dmFy
aWFudC1nZXQtYnktaWQtaW5saW5pbmctZXhhbXBsZS5qczogQWRkZWQuCisgICAgICAgIChmb28p
OgorICAgICAgICAoZnV6eik6CisgICAgICAgIChiYXIpOgorCiAyMDE0LTAxLTI1ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgU3R1YkluZm9NYXAgc2hvdWxkIHVz
ZSBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE2MjgwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MiwxMCArMTgyLDEwIEBAIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmNvbXB1
dGVERkdTdGF0dXNlcygKICAgICAgICAgLy8gY2hhbGxlbmdpbmcgYmVjYXVzZSBpdCB3b3VsZCBy
ZXF1aXJlIGNyZWF0aW5nIGEgQ29kZU9yaWdpbi1iYXNlZCBkYXRhYmFzZSBpbgogICAgICAgICAv
LyBiYXNlbGluZSBDb2RlQmxvY2tzLCBidXQgdGhvc2UgQ29kZUJsb2NrcyBkb24ndCByZWFsbHkg
aGF2ZSBhIHBsYWNlIHRvIHB1dCB0aGUKICAgICAgICAgLy8gSW5saW5lQ2FsbEZyYW1lcy4KKyAg
ICAgICAgQ29kZUJsb2NrKiBjdXJyZW50QmFzZWxpbmUgPQorICAgICAgICAgICAgYmFzZWxpbmVD
b2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBiYXNlbGlu
ZUNvZGVCbG9jayk7CiAgICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKGJhc2VsaW5lQ29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgQ29kZUJsb2Nr
KiBjdXJyZW50QmFzZWxpbmUgPQotICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9y
T3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2sp
OworICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY3VycmVudEJhc2VsaW5l
LT5tX2xvY2spOwogICAgICAgICAgICAgdGFrZVNsb3dQYXRoID0KICAgICAgICAgICAgICAgICBj
dXJyZW50QmFzZWxpbmUtPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRl
KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUsIEV4aXRGcm9tRlRMKSkKICAgICAg
ICAgICAgICAgICB8fCBjdXJyZW50QmFzZWxpbmUtPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpG
cmVxdWVudEV4aXRTaXRlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGVXYXRjaHBv
aW50LCBFeGl0RnJvbUZUTCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTYyODAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzNCwxMiArNTM0
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgIG91dC5w
cmludGYoIlxuIik7CiAgICAgCiAgICAgU3R1YkluZm9NYXAgc3R1YkluZm9zOwotI2lmIEVOQUJM
RShKSVQpCi0gICAgewotICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgICAgICBnZXRTdHViSW5mb01hcChsb2NrZXIsIHN0dWJJbmZvcyk7Ci0gICAgfQotI2Vu
ZGlmCisgICAgZ2V0U3R1YkluZm9NYXAoc3R1YkluZm9zKTsKICAgICAKICAgICBjb25zdCBJbnN0
cnVjdGlvbiogYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgIGNvbnN0IEluc3Ry
dWN0aW9uKiBlbmQgPSBpbnN0cnVjdGlvbnMoKS5lbmQoKTsKQEAgLTIzMzAsMTYgKzIzMjUsMjYg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogI2VuZGlmCiB9CiAK
K3ZvaWQgQ29kZUJsb2NrOjpnZXRTdHViSW5mb01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiwgU3R1YkluZm9NYXAmIHJlc3VsdCkKK3sKICNpZiBFTkFCTEUoSklUKQotU3RydWN0dXJlU3R1
YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZm8oKQorICAgIHRvSGFzaE1hcChtX3N0dWJJbmZv
cywgZ2V0U3RydWN0dXJlU3R1YkluZm9Db2RlT3JpZ2luLCByZXN1bHQpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0ocmVzdWx0KTsKKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6Z2V0U3R1
YkluZm9NYXAoU3R1YkluZm9NYXAmIHJlc3VsdCkKIHsKICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOwotICAgIHJldHVybiBtX3N0dWJJbmZvcy5hZGQoKTsKKyAgICBnZXRT
dHViSW5mb01hcChsb2NrZXIsIHJlc3VsdCk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpnZXRTdHVi
SW5mb01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3R1YkluZm9NYXAmIHJlc3VsdCkK
KyNpZiBFTkFCTEUoSklUKQorU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1Yklu
Zm8oKQogewotICAgIHRvSGFzaE1hcChtX3N0dWJJbmZvcywgZ2V0U3RydWN0dXJlU3R1YkluZm9D
b2RlT3JpZ2luLCByZXN1bHQpOworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgcmV0dXJuIG1fc3R1YkluZm9zLmFkZCgpOwogfQogCiB2b2lkIENvZGVCbG9jazo6
cmVzZXRTdHViKFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2MjgwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMTc1LDYgKzE3NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGV4cHJlc3Npb25SYW5nZUZvckJ5
dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGRpdm90LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBzdGFydE9mZnNldCwgaW50
JiBlbmRPZmZzZXQsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKTsKIAorICAgIHZv
aWQgZ2V0U3R1YkluZm9NYXAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFN0dWJJbmZvTWFw
JiByZXN1bHQpOworICAgIHZvaWQgZ2V0U3R1YkluZm9NYXAoU3R1YkluZm9NYXAmIHJlc3VsdCk7
CisKICNpZiBFTkFCTEUoSklUKQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbygp
OwogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g
bV9zdHViSW5mb3MuYmVnaW4oKTsgfQpAQCAtMTgyLDggKzE4NSw2IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgcmVzZXRTdHViKFN0cnVjdHVyZVN0dWJJbmZvJik7CiAgICAgCi0gICAgdm9pZCBnZXRT
dHViSW5mb01hcChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgU3R1YkluZm9NYXAmIHJlc3Vs
dCk7Ci0KICAgICBCeVZhbEluZm8mIGdldEJ5VmFsSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4
KQogICAgIHsKICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPEJ5VmFsSW5mbywgdW5zaWdu
ZWQ+KG1fYnlWYWxJbmZvcywgbV9ieVZhbEluZm9zLnNpemUoKSwgYnl0ZWNvZGVJbmRleCwgZ2V0
QnlWYWxJbmZvQnl0ZWNvZGVJbmRleCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTYyODAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCwxMiArMzQsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgR2V0QnlJ
ZFN0YXR1czo6aGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBD
b2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCitib29sIEdl
dEJ5SWRTdGF0dXM6Omhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tl
ciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBFeGl0
aW5nSklUVHlwZSBqaXRUeXBlKQogewotICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT5oYXNFeGl0
U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDYWNo
ZSkpCi0gICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpG
cmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlV2F0Y2hwb2ludCkpCi0gICAg
ICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4
aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZFdlYWtDb25zdGFudENhY2hlKSkKLSAgICAgICAgfHwg
cHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUo
Ynl0ZWNvZGVJbmRleCwgQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50KSk7CisgICAgcmV0
dXJuIHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRT
aXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlLCBqaXRUeXBlKSkKKyAgICAgICAgfHwgcHJvZmls
ZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNv
ZGVJbmRleCwgQmFkQ2FjaGVXYXRjaHBvaW50LCBqaXRUeXBlKSkKKyAgICAgICAgfHwgcHJvZmls
ZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNv
ZGVJbmRleCwgQmFkV2Vha0NvbnN0YW50Q2FjaGUsIGppdFR5cGUpKQorICAgICAgICB8fCBwcm9m
aWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRl
Y29kZUluZGV4LCBCYWRXZWFrQ29uc3RhbnRDYWNoZVdhdGNocG9pbnQsIGppdFR5cGUpKTsKIH0K
IAogR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlk
KQpAQCAtMTI4LDE3ICsxMjgsMjcgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAogewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2st
Pm1fbG9jayk7CiAgICAgCi0gICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwotICAgIFVO
VVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0odWlkKTsKLSNpZiBF
TkFCTEUoSklUKQotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29k
ZU9yaWdpbihieXRlY29kZUluZGV4KSk7Ci0gICAgaWYgKCFzdHViSW5mbyB8fCAhc3R1YkluZm8t
PnNlZW4pIHsKLSAgICAgICAgaWYgKGhhc0V4aXRTaXRlKGxvY2tlciwgcHJvZmlsZWRCbG9jaywg
Ynl0ZWNvZGVJbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoLCB0cnVlKTsKKyAgICBHZXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHVi
SW5mbygKKyAgICAgICAgbG9ja2VyLCBwcm9maWxlZEJsb2NrLCBtYXAuZ2V0KENvZGVPcmlnaW4o
Ynl0ZWNvZGVJbmRleCkpLCB1aWQpOwogICAgIAorICAgIGlmICghcmVzdWx0LnRha2VzU2xvd1Bh
dGgoKQorICAgICAgICAmJiAoaGFzRXhpdFNpdGUobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRl
Y29kZUluZGV4KQorICAgICAgICAgICAgfHwgcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xv
d0Nhc2UoYnl0ZWNvZGVJbmRleCkpKQorICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoLCB0cnVlKTsKKworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gY29t
cHV0ZUZyb21MTEludChwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4LCB1aWQpOwotICAgIH0K
KyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKKyAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwg
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCisg
ICAgU3RyaW5nSW1wbCogdWlkKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKCFzdHViSW5m
byB8fCAhc3R1YkluZm8tPnNlZW4pCisgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5m
b3JtYXRpb24pOwogICAgIAogICAgIGlmIChzdHViSW5mby0+cmVzZXRCeUdDKQogICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKQEAgLTE2NCwxNyArMTc0
LDEyIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAg
ICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMsIHRydWUpOwogICAgIH0KICAgICAK
LSAgICAvLyBOZXh0IGNoZWNrIGlmIGl0IHRha2VzIHNsb3cgY2FzZSwgaW4gd2hpY2ggY2FzZSB3
ZSB3YW50IHRvIGJlIGtpbmQgb2YgY2FyZWZ1bC4KLSAgICBpZiAocHJvZmlsZWRCbG9jay0+bGlr
ZWx5VG9UYWtlU2xvd0Nhc2UoYnl0ZWNvZGVJbmRleCkKLSAgICAgICAgfHwgaGFzRXhpdFNpdGUo
bG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KSkKLSAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7Ci0gICAgCiAgICAgLy8gRmluYWxseSBm
aWd1cmUgb3V0IGlmIHdlIGNhbiBkZXJpdmUgYW4gYWNjZXNzIHN0cmF0ZWd5LgogICAgIEdldEJ5
SWRTdGF0dXMgcmVzdWx0OwogICAgIHJlc3VsdC5tX3dhc1NlZW5JbkpJVCA9IHRydWU7IC8vIFRo
aXMgaXMgaW50ZXJlc3RpbmcgZm9yIGJ5dGVjb2RlIGR1bXBpbmcgb25seS4KICAgICBzd2l0Y2gg
KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6Ci0gICAgICAg
IHJldHVybiBjb21wdXRlRnJvbUxMSW50KHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHVp
ZCk7CisgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAg
ICAKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjogewogICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCk7CkBAIC0yNzUsMTEgKzI4MCw0MCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKICNlbHNlIC8vIEVOQUJMRShK
SVQpCi0gICAgVU5VU0VEX1BBUkFNKG1hcCk7CisgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxv
Y2spOworICAgIFVOVVNFRF9QQVJBTShzdHViSW5mbyk7CisgICAgVU5VU0VEX1BBUkFNKHVpZCk7
CiAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiB9CiAKK0dldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIENvZGVCbG9jayogZGZnQmxvY2ss
IFN0dWJJbmZvTWFwJiBiYXNlbGluZU1hcCwKKyAgICBTdHViSW5mb01hcCYgZGZnTWFwLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBpZiAoZGZnQmxvY2sp
IHsKKyAgICAgICAgR2V0QnlJZFN0YXR1cyByZXN1bHQ7CisgICAgICAgIHsKKyAgICAgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGRmZ0Jsb2NrLT5tX2xvY2spOworICAgICAgICAg
ICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKGxvY2tlciwgZGZnQmxvY2ssIGRmZ01hcC5n
ZXQoY29kZU9yaWdpbiksIHVpZCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKHJlc3Vs
dC50YWtlc1Nsb3dQYXRoKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAg
ICAgICB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihwcm9maWxlZEJs
b2NrLT5tX2xvY2spOworICAgICAgICAgICAgaWYgKGhhc0V4aXRTaXRlKGxvY2tlciwgcHJvZmls
ZWRCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBFeGl0RnJvbUZUTCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQuaXNTZXQoKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvbXB1dGVGb3IocHJvZmlsZWRC
bG9jaywgYmFzZWxpbmVNYXAsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgdWlkKTsKK30KKwog
R2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICAvLyBGb3Igbm93IHdlIG9ubHkg
aGFuZGxlIHRoZSBzdXBlciBzaW1wbGUgc2VsZiBhY2Nlc3MgY2FzZS4gV2UgY291bGQgaGFuZGxl
IHRoZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5oCShyZXZpc2lvbiAxNjI4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw5IEBACiAjaWZu
ZGVmIEdldEJ5SWRTdGF0dXNfaAogI2RlZmluZSBHZXRCeUlkU3RhdHVzX2gKIAorI2luY2x1ZGUg
IkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgorI2luY2x1ZGUg
IkV4aXRpbmdKSVRUeXBlLmgiCiAjaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgog
I2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCkBA
IC03NSw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRl
Rm9yKENvZGVCbG9jayosIFN0dWJJbmZvTWFwJiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3Ry
aW5nSW1wbCogdWlkKTsKICAgICBzdGF0aWMgR2V0QnlJZFN0YXR1cyBjb21wdXRlRm9yKFZNJiwg
U3RydWN0dXJlKiwgU3RyaW5nSW1wbCogdWlkKTsKICAgICAKKyAgICBzdGF0aWMgR2V0QnlJZFN0
YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgQ29kZUJsb2NrKiBkZmdC
bG9jaywgU3R1YkluZm9NYXAmIGJhc2VsaW5lTWFwLCBTdHViSW5mb01hcCYgZGZnTWFwLCBDb2Rl
T3JpZ2luLCBTdHJpbmdJbXBsKiB1aWQpOworICAgIAogICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KQEAgLTkxLDcgKzk1LDggQEAgcHVibGljOgog
ICAgIGJvb2wgd2FzU2VlbkluSklUKCkgY29uc3QgeyByZXR1cm4gbV93YXNTZWVuSW5KSVQ7IH0K
ICAgICAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYsIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAg
IHN0YXRpYyBib29sIGhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2Rl
QmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBFeGl0aW5nSklUVHlwZSA9IEV4aXRGcm9t
QW55dGhpbmcpOworICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mbyhj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8q
LCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVGb3JDaGFpbihHZXRC
eUlkU3RhdHVzJiByZXN1bHQsIENvZGVCbG9jayosIFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgc3Rh
dGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2Mjgw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTM2LDcgKzExMzYsOSBAQCBwcml2YXRlOgogICAgIC8vIHdvcmst
YXJvdW5kIGZvciB0aGUgZmFjdCB0aGF0IEpTVmFsdWVNYXAgY2FuJ3QgaGFuZGxlICJlbXB0eSIg
dmFsdWVzLgogICAgIHVuc2lnbmVkIG1fZW1wdHlKU1ZhbHVlSW5kZXg7CiAgICAgCisgICAgQ29k
ZUJsb2NrKiBtX2RmZ0NvZGVCbG9jazsKICAgICBDYWxsTGlua1N0YXR1czo6Q29udGV4dE1hcCBt
X2NhbGxDb250ZXh0TWFwOworICAgIFN0dWJJbmZvTWFwIG1fZGZnU3R1YkluZm9zOwogICAgIAog
ICAgIEluc3RydWN0aW9uKiBtX2N1cnJlbnRJbnN0cnVjdGlvbjsKIH07CkBAIC0yNTE4LDggKzI1
MjAsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMo
KVtpZGVudGlmaWVyTnVtYmVyXTsKICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgZ2V0QnlJZFN0
YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX3N0dWJJbmZv
cywKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRJbmRleCwgdWlkKTsKKyAgICAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1fZGZnQ29kZUJsb2NrLAorICAg
ICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fc3R1YkluZm9zLCBtX2RmZ1N0dWJJbmZv
cywKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKAogICAgICAgICAgICAgICAgIGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIGdldEJ5SWRTdGF0dXMpOwpAQCAtMzcxNywxMSArMzcyMCwxNCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZSgpCiAgICAgLy8gU2V0IGR1cmluZyBjb25zdHJ1Y3Rpb24uCiAgICAgQVNT
RVJUKCFtX2N1cnJlbnRJbmRleCk7CiAgICAgCi0gICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFu
Lm1vZGUpCi0gICAgICAgICYmICEhbV9ncmFwaC5tX3BsYW4ucHJvZmlsZWRERkdDb2RlQmxvY2sK
LSAgICAgICAgJiYgT3B0aW9uczo6ZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcoKSkgewot
ICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZURGR1N0YXR1c2VzKAotICAgICAgICAgICAg
bV9ncmFwaC5tX3BsYW4ucHJvZmlsZWRERkdDb2RlQmxvY2suZ2V0KCksIG1fY2FsbENvbnRleHRN
YXApOworICAgIGlmIChpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkgeworICAgICAgICBtX2Rm
Z0NvZGVCbG9jayA9IG1fZ3JhcGgubV9wbGFuLnByb2ZpbGVkREZHQ29kZUJsb2NrLmdldCgpOwor
ICAgICAgICBpZiAobV9kZmdDb2RlQmxvY2spIHsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjpl
bmFibGVQb2x5dmFyaWFudENhbGxJbmxpbmluZygpKQorICAgICAgICAgICAgICAgIENhbGxMaW5r
U3RhdHVzOjpjb21wdXRlREZHU3RhdHVzZXMobV9kZmdDb2RlQmxvY2ssIG1fY2FsbENvbnRleHRN
YXApOworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZVBvbHl2YXJpYW50QnlJZElubGlu
aW5nKCkpCisgICAgICAgICAgICAgICAgbV9kZmdDb2RlQmxvY2stPmdldFN0dWJJbmZvTWFwKG1f
ZGZnU3R1YkluZm9zKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAobV9jb2RlQmxv
Y2stPmNhcHR1cmVDb3VudCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCShyZXZpc2lvbiAxNjI4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3
Niw2ICsxNzYsNyBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJhbmdlOwogICAgIHYodW5z
aWduZWQsIG1heGltdW1JbmxpbmluZ1JlY3Vyc2lvbkZvck11c3RJbmxpbmUsIDMpIFwKICAgICBc
CiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudENhbGxJbmxpbmluZywgdHJ1ZSkgXAorICAg
IHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRCeUlkSW5saW5pbmcsIHRydWUpIFwKICAgICBcCiAg
ICAgdih1bnNpZ25lZCwgbWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaENhc2VMZW5ndGgsIDUwKSBc
CiAgICAgdih1bnNpZ25lZCwgbWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVuZ3RoLCAy
MDAwKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbXBsZS1w
b2x5dmFyaWFudC1nZXQtYnktaWQtaW5saW5pbmctZXhhbXBsZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbXBsZS1wb2x5dmFyaWFudC1nZXQt
YnktaWQtaW5saW5pbmctZXhhbXBsZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2ltcGxlLXBvbHl2YXJpYW50LWdldC1ieS1pZC1pbmxpbmlu
Zy1leGFtcGxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKK2Z1bmN0aW9uIGZv
byhvKSB7CisgICAgcmV0dXJuIGJhcihvKTsKK30KKworZnVuY3Rpb24gZnV6eihvKSB7CisgICAg
cmV0dXJuIGJhcihvKTsKK30KKworZnVuY3Rpb24gYmFyKG8pIHsKKyAgICByZXR1cm4gby5mOwor
fQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoZnV6eik7CisKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKHtmOjQyfSk7CisgICAgaWYg
KHJlc3VsdCAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVz
dWx0OworICAgIHZhciByZXN1bHQgPSBmdXp6KHtnOjIzLCBmOjI0fSk7CisgICAgaWYgKHJlc3Vs
dCAhPSAyNCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owor
fQorCg==
</data>
<flag name="review"
          id="246262"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>