<?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>68597</bug_id>
          
          <creation_ts>2011-09-22 00:39:48 -0700</creation_ts>
          <short_desc>DFG JIT should support integer division</short_desc>
          <delta_ts>2011-09-22 15:02:16 -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>68582</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>471405</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-22 00:39:48 -0700</bug_when>
    <thetext>It is entirely sensible to write the following piece of code:

a = b / 2;

And expect to be able to use &apos;a&apos; as an integer, if b is always a multiple of 2 and never larger than what an integer can hold.  It appears that some Kraken code does this.  Currently, the DFG always assumes that all division produces doubles, which results in some bad performance in some programs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471414</commentid>
    <comment_count>1</comment_count>
      <attachid>108290</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-22 01:01:45 -0700</bug_when>
    <thetext>Created attachment 108290
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471415</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-22 01:05:54 -0700</bug_when>
    <thetext>Attachment 108290 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/jit/JITArithmetic.cpp:1054:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471426</commentid>
    <comment_count>3</comment_count>
      <attachid>108293</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-22 01:29:04 -0700</bug_when>
    <thetext>Created attachment 108293
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471434</commentid>
    <comment_count>4</comment_count>
      <attachid>108295</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-22 02:08:17 -0700</bug_when>
    <thetext>Created attachment 108295
the patch - more goodness added

This is a small win by itself, and a big win when combined with https://bugs.webkit.org/show_bug.cgi?id=68582.


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;IntDiv&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc
&quot;IntDivStrCat&quot; at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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                 IntDiv               IntDivStrCat        IntDivStrCat v. TipOfTree 
SunSpider:
   3d-cube                                7.7031+-0.2217    ?     7.8395+-0.2910          7.6701+-0.1962       
   3d-morph                               7.5458+-0.1330          7.5094+-0.2132          7.4666+-0.2495         might be 1.0106x faster
   3d-raytrace                            7.5513+-0.2014    ?     7.8452+-0.3016          7.7827+-0.1491       ? might be 1.0306x slower
   access-binary-trees                    2.0995+-0.0579          2.0684+-0.0596    ?     2.1379+-0.1433       ? might be 1.0183x slower
   access-fannkuch                       11.8476+-0.3710         11.7814+-0.2936    ?    11.8475+-0.3008       
   access-nbody                           3.5674+-0.0885          3.4518+-0.0559    ?     3.5763+-0.0967       ?
   access-nsieve                          2.5801+-0.0738    ?     2.6087+-0.0895          2.5845+-0.0629       ?
   bitops-3bit-bits-in-byte               1.8394+-0.0448    ?     1.8507+-0.0570          1.8055+-0.0425         might be 1.0188x faster
   bitops-bits-in-byte                    2.8397+-0.0606    ?     2.8577+-0.0704          2.8486+-0.0719       ?
   bitops-bitwise-and                     3.7522+-0.1308          3.6579+-0.1029          3.6303+-0.1049         might be 1.0336x faster
   bitops-nsieve-bits                     5.3488+-0.1198          5.2944+-0.1290    ?     5.4255+-0.1257       ? might be 1.0143x slower
   controlflow-recursive                  2.2455+-0.0651          2.2167+-0.0437          2.2005+-0.0542         might be 1.0204x faster
   crypto-aes                             6.8923+-0.3697          6.3176+-0.2402          6.1573+-0.1484       ^ definitely 1.1194x faster
   crypto-md5                             2.8049+-0.0709    ^     2.5663+-0.0668          2.4669+-0.0729       ^ definitely 1.1370x faster
   crypto-sha1                            2.3478+-0.0652    ^     2.1351+-0.0607    ?     2.1476+-0.0806       ^ definitely 1.0932x faster
   date-format-tofte                     10.3161+-0.2810         10.2830+-0.2989    ?    10.4249+-0.2628       ? might be 1.0105x slower
   date-format-xparb                      8.7798+-0.2838          8.7494+-0.2496    ?     8.9220+-0.2599       ? might be 1.0162x slower
   math-cordic                            6.3076+-0.1537          6.1111+-0.1149          6.0745+-0.0764       ^ definitely 1.0384x faster
   math-partial-sums                      7.3659+-0.1267    ?     7.4812+-0.1393    ?     7.6897+-0.2075       ? might be 1.0440x slower
   math-spectral-norm                     2.7030+-0.1058    !     2.9985+-0.0863    ?     3.0546+-0.0794       ! definitely 1.1300x slower
   regexp-dna                            10.8762+-0.1921         10.8190+-0.1663    ?    10.9030+-0.2224       ?
   string-base64                          5.8533+-0.1371    ?     5.8618+-0.1759    ?     5.9906+-0.2396       ? might be 1.0235x slower
   string-fasta                           7.2075+-0.1744          7.1327+-0.1970          7.1087+-0.1609         might be 1.0139x faster
   string-tagcloud                       11.9179+-0.3311    ?    11.9804+-0.3916    ?    12.0016+-0.3266       ?
   string-unpack-code                    18.7440+-0.3804    ?    18.8508+-0.5263    ?    19.2606+-0.6360       ? might be 1.0276x slower
   string-validate-input                  6.4930+-0.0958    ?     6.6237+-0.2460          6.4775+-0.1372       

   &lt;arithmetic&gt;                           6.4435+-0.0377          6.4189+-0.0338    ?     6.4483+-0.0393       ?
   &lt;geometric&gt;                            5.3328+-0.0319          5.2913+-0.0219    ?     5.3018+-0.0402       
   &lt;harmonic&gt;                             4.3898+-0.0353          4.3388+-0.0330          4.3374+-0.0541         might be 1.0121x faster

                                            TipOfTree                 IntDiv               IntDivStrCat        IntDivStrCat v. TipOfTree 
V8:
   crypto                                71.2496+-0.2918    ?    71.3862+-0.3429         71.1184+-0.5196       
   deltablue                            237.3015+-1.4425    ?   237.3798+-1.0827        236.5956+-1.3604       
   earley-boyer                          88.2273+-0.3942         88.1260+-0.3059         87.9492+-0.3159       
   raytrace                              64.1057+-0.6186    ?    65.0615+-0.5036    ^    62.6563+-0.4224       ^ definitely 1.0231x faster
   regexp                               105.5161+-0.4444    !   106.6996+-0.3355    !   108.3552+-0.6639       ! definitely 1.0269x slower
   richards                             198.5336+-0.7411    ?   199.2889+-0.7026        199.0919+-0.6748       ?
   splay                                 98.3329+-0.2213    ?    98.5661+-0.5356         98.0713+-0.4491       

   &lt;arithmetic&gt;                         123.3238+-0.2493    ?   123.7869+-0.2621        123.4054+-0.1661       ?
   &lt;geometric&gt;                          110.1665+-0.2139    !   110.6913+-0.2509    ^   110.1008+-0.1791       
   &lt;harmonic&gt;                           100.1846+-0.2352    !   100.7525+-0.2618    ^    99.8989+-0.2373       

                                            TipOfTree                 IntDiv               IntDivStrCat        IntDivStrCat v. TipOfTree 
Kraken:
   ai-astar                             616.6539+-2.9734        611.4591+-4.2299    ?   615.3805+-4.1636       
   audio-beat-detection                 467.0274+-4.0021    ^   377.9344+-1.6609    ^   204.5658+-1.0722       ^ definitely 2.2830x faster
   audio-dft                            422.0664+-1.7690        421.1265+-2.1315        419.6968+-2.5885       
   audio-fft                            363.5815+-2.0561    ^   312.9141+-0.8157    ^   141.5586+-0.9472       ^ definitely 2.5684x faster
   audio-oscillator                     254.2253+-1.3820    !   258.3617+-1.3677    ?   258.4752+-1.0439       ! definitely 1.0167x slower
   imaging-darkroom                     422.4535+-1.9687        420.4771+-1.1829    ?   421.7214+-0.7025       
   imaging-desaturate                   208.7662+-0.5285    ?   208.9123+-0.7579    ?   210.1087+-1.2589       ?
   imaging-gaussian-blur                594.3785+-1.2263        594.0332+-0.8333    !   598.2852+-3.3919       ?
   json-parse-financial                  48.0277+-0.2236    !    48.6539+-0.3093         48.6490+-0.2884       ! definitely 1.0129x slower
   json-stringify-tinderbox              68.8110+-0.2238    ^    68.0999+-0.3462    !    70.1338+-0.5934       ! definitely 1.0192x slower
   stanford-crypto-aes                  137.5441+-0.4898    ^   134.0939+-1.0359    ?   135.0720+-0.7700       ^ definitely 1.0183x faster
   stanford-crypto-ccm                  109.4925+-0.5785    ^   104.6828+-0.9352    !   105.8698+-0.2324       ^ definitely 1.0342x faster
   stanford-crypto-pbkdf2               208.6068+-3.2304        204.5755+-0.9357    ?   205.3682+-1.0130         might be 1.0158x faster
   stanford-crypto-sha256-iterative      84.5903+-0.2556    ?    84.9048+-0.5000    ?    85.2254+-0.4590       ?

   &lt;arithmetic&gt;                         286.1589+-0.5195    ^   275.0164+-0.4482    ^   251.4365+-0.4675       ^ definitely 1.1381x faster
   &lt;geometric&gt;                          217.1089+-0.4842    ^   210.3265+-0.3279    ^   191.2333+-0.3325       ^ definitely 1.1353x faster
   &lt;harmonic&gt;                           155.4981+-0.3995    ^   153.0205+-0.3357    ^   144.4740+-0.3776       ^ definitely 1.0763x faster

                                            TipOfTree                 IntDiv               IntDivStrCat        IntDivStrCat v. TipOfTree 
All benchmarks:
   &lt;arithmetic&gt;                         107.1707+-0.1773    ^   103.9070+-0.1572    ^    96.8426+-0.1626       ^ definitely 1.1066x faster
   &lt;geometric&gt;                           25.2527+-0.0971    ^    24.9250+-0.0673    ^    24.2354+-0.1112       ^ definitely 1.0420x faster
   &lt;harmonic&gt;                             7.7267+-0.0608          7.6381+-0.0568          7.6281+-0.0927         might be 1.0129x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471676</commentid>
    <comment_count>5</comment_count>
      <attachid>108295</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-22 10:31:50 -0700</bug_when>
    <thetext>Comment on attachment 108295
the patch - more goodness added

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

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:549
&gt; +        // have speculatins in place that take care of that separately. We only

Typo: speculations

&gt; Source/JavaScriptCore/jit/JITArithmetic.cpp:1058
&gt; +    // in the heap to go doubly, resulting in double predictions getting predicted to all

What’s &quot;go doubly&quot;? Do you just mean &quot;go double&quot;? Or get a double value?

&gt; Source/JavaScriptCore/jit/JITArithmetic.cpp:1062
&gt; +    // FIXME: This will fail to do its magic if the result is zero.

This comment would be clearer if “fail to do its magic” was replaced by a more specific phrase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471744</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-22 11:44:57 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/jit/JITArithmetic.cpp:1058
&gt; &gt; +    // in the heap to go doubly, resulting in double predictions getting predicted to all
&gt; 
&gt; What’s &quot;go doubly&quot;? Do you just mean &quot;go double&quot;? Or get a double value?

I&apos;ve been using that to distinguish between something having actual honest doubles (i.e. formatted as double because they cannot be represented as integer) and having an odd mix of integers formatted as int32 and integers formatted as double for no reason other than somewhere in the code we were too lazy to realize we were producing integers.

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITArithmetic.cpp:1062
&gt; &gt; +    // FIXME: This will fail to do its magic if the result is zero.
&gt; 
&gt; This comment would be clearer if “fail to do its magic” was replaced by a more specific phrase.

&quot;fail to do its magic&quot; = convert the double back to an integer.  I&apos;ll fix that comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471881</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-22 15:02:16 -0700</bug_when>
    <thetext>Landed in r95754, with changes as per Darin&apos;s suggestions.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108290</attachid>
            <date>2011-09-22 01:01:45 -0700</date>
            <delta_ts>2011-09-22 01:29:04 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>intdiv_patch_1.diff</filename>
            <type>text/plain</type>
            <size>10286</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU3MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAK
KzIwMTEtMDktMjIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBzdXBwb3J0IGludGVnZXIgZGl2aXNpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTk3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgc3VwcG9ydCBm
b3IgQXJpdGhEaXYgc3BlY3VsYXRpbmcgaW50ZWdlciwgYW5kIHNwZWN1bGF0aW5nCisgICAgICAg
IHRoYXQgdGhlIHJlc3VsdCBpcyBpbnRlZ2VyIChpLmUuIHJlbWFpbmRlciA9IDApLgorICAgICAg
ICAKKyAgICAgICAgU3RpbGwgYSB3b3JrIGluIHByb2dyZXNzLCBuZWVkIHRvIHRlc3QgcGVyZm9y
bWFuY2UgaW1wYWN0LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6bWFrZURpdlNhZmUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0FyaXRoTm9kZUZsYWdzKToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhOb2Rl
RmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVk
aWN0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4dXBOb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kaXYpOgorCiAyMDExLTA5LTIxICBHYXZpbiBC
YXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgbWlzc2lu
ZyBhZGRQdHItPmFkZDMyIG1hcHBpbmcgZm9yIFg4Ni4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk1Njk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01Mzcs
NiArNTM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2Vu
ZXJpY0JpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUsIGludCwgZ2V0UmFyZUNhc2VQcm9maWxl
Qnl0ZWNvZGVPZmZzZXQ+KG1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMsIG1fc3BlY2lhbEZhc3RD
YXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAg
CisgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9m
ZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lhbEZhc3RDYXNlQ291
bnQgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpLT5tX2NvdW50ZXI7CisgICAgICAgICAgICByZXR1cm4gc3BlY2lhbEZhc3RDYXNlQ291bnQg
Pj0gc2xvd0Nhc2VUaHJlc2hvbGQoKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9v
bCBsaWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAg
ICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzbG93Q2FzZUNvdW50ID0gcmFyZUNhc2VQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7CkBAIC01NDQsNiAr
NTUwLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIChzbG93Q2FzZUNv
dW50IC0gc3BlY2lhbEZhc3RDYXNlQ291bnQpID49IHNsb3dDYXNlVGhyZXNob2xkKCk7CiAgICAg
ICAgIH0KICAgICAgICAgCisgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlQW55U2xvd0Nhc2UoaW50
IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBzbG93Q2Fz
ZUNvdW50ID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQp
LT5tX2NvdW50ZXI7CisgICAgICAgICAgICB1bnNpZ25lZCBzcGVjaWFsRmFzdENhc2VDb3VudCA9
IHNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkt
Pm1fY291bnRlcjsKKyAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3VudCArIHNwZWNpYWxG
YXN0Q2FzZUNvdW50KSA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOworICAgICAgICB9CisgICAgICAg
IAogICAgICAgICB2b2lkIHJlc2V0UmFyZUNhc2VQcm9maWxlcygpOwogI2VuZGlmCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiA5NTY5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsNiArNTQwLDI0IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgfQogICAgIAorICAgIE5vZGVJbmRleCBtYWtl
RGl2U2FmZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGhbbm9kZUluZGV4XS5vcCA9PSBBcml0aERpdik7CisgICAgICAgIAorICAgICAgICAvLyBUaGUg
bWFpbiBzbG93IGNhc2UgY291bnRlciBmb3Igb3BfZGl2IGluIHRoZSBvbGQgSklUIGNvdW50cyBv
bmx5IHdoZW4KKyAgICAgICAgLy8gdGhlIG9wZXJhbmRzIGFyZSBub3QgbnVtYmVycy4gV2UgZG9u
J3QgY2FyZSBhYm91dCB0aGF0IHNpbmNlIHdlIGFscmVhZHkKKyAgICAgICAgLy8gaGF2ZSBzcGVj
dWxhdGlucyBpbiBwbGFjZSB0aGF0IHRha2UgY2FyZSBvZiB0aGF0IHNlcGFyYXRlbHkuIFdlIG9u
bHkKKyAgICAgICAgLy8gY2FyZSBhYm91dCB3aGVuIHRoZSBvdXRjb21lIG9mIHRoZSBkaXZpc2lv
biBpcyBub3QgYW4gaW50ZWdlciwgd2hpY2gKKyAgICAgICAgLy8gaXMgd2hhdCB0aGUgc3BlY2lh
bCBmYXN0IGNhc2UgY291bnRlciB0ZWxscyB1cy4KKyAgICAgICAgCisgICAgICAgIGlmICghbV9w
cm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTcGVjaWFsRmFzdENhc2UobV9jdXJyZW50SW5kZXgp
KQorICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgCisgICAgICAgIG1fZ3Jh
cGhbbm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyB8IE5vZGVN
YXlOZWdaZXJvKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgfQor
ICAgIAogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CkBAIC05MTYsNyArOTM0
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBj
YXNlIG9wX2RpdjogewogICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvTnVtYmVyKGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTm9kZUluZGV4IG9w
MiA9IGdldFRvTnVtYmVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQXJp
dGhEaXYsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgbWFrZURpdlNhZmUoYWRkVG9HcmFwaChBcml0aERpdiwgT3BJbmZvKE5vZGVV
c2VCb3R0b20pLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Rpdik7
CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlz
aW9uIDk1Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4Nyw2ICs0ODcsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2Ug
QXJpdGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhNYXg6CiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6
CisgICAgICAgIGNhc2UgQXJpdGhEaXY6CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTU2OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTEsNyArMjExLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICBjYXNlIEFy
aXRoTXVsOgorICAgICAgICBjYXNlIEFyaXRoRGl2OiB7CiAgICAgICAgICAgICAvLyBBcyBzb29u
IGFzIGEgbXVsdGlwbHkgaGFwcGVucywgd2UgY2FuIGVhc2lseSBlbmQgdXAgaW4gdGhlIHBhcnQK
ICAgICAgICAgICAgIC8vIG9mIHRoZSBkb3VibGUgZG9tYWluIHdoZXJlIHRoZSBwb2ludCBhdCB3
aGljaCB5b3UgZG8gdHJ1bmNhdGlvbgogICAgICAgICAgICAgLy8gY2FuIGNoYW5nZSB0aGUgb3V0
Y29tZS4gU28sIEFyaXRoTXVsIGFsd2F5cyBjaGVja3MgZm9yIG92ZXJmbG93CkBAIC00MjIsNyAr
NDIzLDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcml0aFN1YjoKICAgICAgICAgY2FzZSBB
cml0aE11bDoKICAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDog
eworICAgICAgICBjYXNlIEFyaXRoTWF4OgorICAgICAgICBjYXNlIEFyaXRoRGl2OiB7CiAgICAg
ICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCld
OwogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJlZGljdGlvbnNbbm9kZS5j
aGlsZDIoKV07CiAgICAgICAgICAgICAKQEAgLTQzNSw3ICs0MzcsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
aXRoRGl2OgogICAgICAgICBjYXNlIEFyaXRoU3FydDogewogICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRp
Y3Rpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjQ3LDcgKzY0OCw4IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgQXJpdGhNdWw6CiAgICAgICAgIGNhc2UgQXJpdGhNaW46CiAgICAgICAg
IGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgIGNhc2UgQXJpdGhNb2Q6IHsKKyAgICAgICAgY2FzZSBB
cml0aE1vZDoKKyAgICAgICAgY2FzZSBBcml0aERpdjogewogICAgICAgICAgICAgaWYgKCFub2Rl
Q2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAg
ICAgICAgdG9Eb3VibGUobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgdG9Eb3VibGUo
bm9kZS5jaGlsZDIoKSk7CkBAIC02NjYsMTIgKzY2OCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhEaXY6
IHsKLSAgICAgICAgICAgIHRvRG91YmxlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgdG9E
b3VibGUobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhBYnM6IHsKICAgICAgICAgICAgIGlmICghbm9k
ZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAg
ICAgICAgIHRvRG91YmxlKG5vZGUuY2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1Njk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOTgsNiArMTA5OCw0MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aERpdjogeworICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSAmJiBu
b2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIo
KSk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4
KTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBlZHgodGhpcywgWDg2UmVnaXN0ZXJzOjplZHgp
OworICAgICAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBvcDJHUFIp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2FyZXMgYWJvdXQg
bmVnYXRpdmUgemVybywgdGhlbiBzcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWJvdXQKKyAgICAg
ICAgICAgIC8vIHRvIHByb2R1Y2UgbmVnYXRpdmUgemVyby4KKyAgICAgICAgICAgIGlmICghbm9k
ZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbnVtZXJhdG9yTm9uWmVybyA9IG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSKTsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBudW1lcmF0
b3JOb25aZXJvLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgR1BSUmVnIHRlbXAyID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgIGlmIChv
cDJHUFIgPT0gWDg2UmVnaXN0ZXJzOjplYXggfHwgb3AyR1BSID09IFg4NlJlZ2lzdGVyczo6ZWR4
KSB7CisgICAgICAgICAgICAgICAgdGVtcDIgPSBhbGxvY2F0ZSgpOworICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUob3AyR1BSLCB0ZW1wMik7CisgICAgICAgICAgICAgICAgb3AyR1BSID0gdGVt
cDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
b3AxR1BSLCBlYXguZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuY2RxKCk7
CisgICAgICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5pZGl2bF9yKG9wMkdQUik7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgd2FzIG5vIHJlbWFpbmRlci4g
SWYgdGhlcmUgaGFkIGJlZW4sIHRoZW4gd2UnZCBiZSBvYmxpZ2F0ZWQgdG8KKyAgICAgICAgICAg
IC8vIHByb2R1Y2UgYSBkb3VibGUgcmVzdWx0IGluc3RlYWQuCisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywgZWR4Lmdw
cigpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZWF4Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDk1Njk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0Nyw2ICsxMDQ3LDIyIEBAIHZvaWQgSklUOjplbWl0X29wX2RpdihJbnN0
cnVjdGlvbiogY3VycmUKICAgICAgICAgc2tpcERvdWJsZUxvYWQubGluayh0aGlzKTsKICAgICB9
CiAgICAgZGl2RG91YmxlKGZwUmVnVDEsIGZwUmVnVDApOworICAgIAorI2lmIEVOQUJMRShWQUxV
RV9QUk9GSUxFUikKKyAgICBpZiAobV9jYW5CZU9wdGltaXplZCkgeworICAgICAgICAvLyBJcyB0
aGUgcmVzdWx0IGFjdHVhbGx5IGFuIGludGVnZXI/IFRoZSBERkcgSklUIHdvdWxkIHJlYWxseSBs
aWtlIHRvIGtub3cuIElmIGl0J3MKKyAgICAgICAgLy8gbm90IGFuIGludGVnZXIsIHdlIGluY3Jl
bWVudCBhIGNvdW50LiAgSWYgdGhpcyB0b2dldGhlciB3aXRoIHRoZSBzbG93IGNhc2UgY291bnRl
cgorICAgICAgICAvLyBhcmUgYmVsb3cgdGhyZXNob2xkIHRoZW4gdGhlIERGRyBKSVQgd2lsbCBj
b21waWxlIHRoaXMgZGl2aXNpb24gd2l0aCBhIHNwZWN1YWx0aW9uCisgICAgICAgIC8vIHRoYXQg
dGhlIHJlbWFpbmRlciBpcyB6ZXJvLgorICAgICAgICAKKyAgICAgICAgSnVtcExpc3Qgbm90SW50
ZWdlcjsKKyAgICAgICAgYnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIoZnBSZWdUMCwgcmVnVDAs
IG5vdEludGVnZXIsIGZwUmVnVDEpOworICAgICAgICBKdW1wIGlzSW50ZWdlciA9IGp1bXAoKTsK
KyAgICAgICAgbm90SW50ZWdlci5saW5rKHRoaXMpOworICAgICAgICBhZGQzMihJbW0zMigxKSwg
QWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+YWRkU3BlY2lhbEZhc3RDYXNlUHJvZmlsZSht
X2J5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyKSk7CisgICAgICAgIGlzSW50ZWdlci5saW5rKHRo
aXMpOworICAgIH0KKyNlbmRpZgogCiAgICAgLy8gRG91YmxlIHJlc3VsdC4KICAgICBtb3ZlRG91
YmxlVG9QdHIoZnBSZWdUMCwgcmVnVDApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108293</attachid>
            <date>2011-09-22 01:29:04 -0700</date>
            <delta_ts>2011-09-22 02:08:17 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>intdiv_patch_2.diff</filename>
            <type>text/plain</type>
            <size>10798</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU3MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAK
KzIwMTEtMDktMjIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBzdXBwb3J0IGludGVnZXIgZGl2aXNpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTk3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgc3VwcG9ydCBm
b3IgQXJpdGhEaXYgc3BlY3VsYXRpbmcgaW50ZWdlciwgYW5kIHNwZWN1bGF0aW5nCisgICAgICAg
IHRoYXQgdGhlIHJlc3VsdCBpcyBpbnRlZ2VyIChpLmUuIHJlbWFpbmRlciA9IDApLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpcyBwZXJmb3JtYW5jZS1uZXV0cmFsLgorCisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZURpdlNhZmUpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyaXRoTm9kZUZsYWdzKToK
KyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJv
cGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6OlBy
b3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9k
aXYpOgorCiAyMDExLTA5LTIxICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgbWlzc2luZyBhZGRQdHItPmFkZDMyIG1hcHBpbmcgZm9yIFg4
Ni4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDk1Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC01MzcsNiArNTM3LDEyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2Zp
bGUsIGludCwgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+KG1fc3BlY2lhbEZhc3RD
YXNlUHJvZmlsZXMsIG1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9m
ZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlU3Bl
Y2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAg
dW5zaWduZWQgc3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7CisgICAgICAgICAgICBy
ZXR1cm4gc3BlY2lhbEZhc3RDYXNlQ291bnQgPj0gc2xvd0Nhc2VUaHJlc2hvbGQoKTsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2Uo
aW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzbG93
Q2FzZUNvdW50ID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpLT5tX2NvdW50ZXI7CkBAIC01NDQsNiArNTUwLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgcmV0dXJuIChzbG93Q2FzZUNvdW50IC0gc3BlY2lhbEZhc3RDYXNlQ291bnQpID49
IHNsb3dDYXNlVGhyZXNob2xkKCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGJvb2wg
bGlrZWx5VG9UYWtlQW55U2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBzbG93Q2FzZUNvdW50ID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7CisgICAgICAgICAgICB1bnNp
Z25lZCBzcGVjaWFsRmFzdENhc2VDb3VudCA9IHNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKKyAgICAgICAgICAgIHJldHVy
biAoc2xvd0Nhc2VDb3VudCArIHNwZWNpYWxGYXN0Q2FzZUNvdW50KSA+PSBzbG93Q2FzZVRocmVz
aG9sZCgpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICB2b2lkIHJlc2V0UmFyZUNhc2VQ
cm9maWxlcygpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTY5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NDAsNiArNTQwLDI0IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAg
fQogICAgIAorICAgIE5vZGVJbmRleCBtYWtlRGl2U2FmZShOb2RlSW5kZXggbm9kZUluZGV4KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCA9PSBBcml0aERpdik7
CisgICAgICAgIAorICAgICAgICAvLyBUaGUgbWFpbiBzbG93IGNhc2UgY291bnRlciBmb3Igb3Bf
ZGl2IGluIHRoZSBvbGQgSklUIGNvdW50cyBvbmx5IHdoZW4KKyAgICAgICAgLy8gdGhlIG9wZXJh
bmRzIGFyZSBub3QgbnVtYmVycy4gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGF0IHNpbmNlIHdlIGFs
cmVhZHkKKyAgICAgICAgLy8gaGF2ZSBzcGVjdWxhdGlucyBpbiBwbGFjZSB0aGF0IHRha2UgY2Fy
ZSBvZiB0aGF0IHNlcGFyYXRlbHkuIFdlIG9ubHkKKyAgICAgICAgLy8gY2FyZSBhYm91dCB3aGVu
IHRoZSBvdXRjb21lIG9mIHRoZSBkaXZpc2lvbiBpcyBub3QgYW4gaW50ZWdlciwgd2hpY2gKKyAg
ICAgICAgLy8gaXMgd2hhdCB0aGUgc3BlY2lhbCBmYXN0IGNhc2UgY291bnRlciB0ZWxscyB1cy4K
KyAgICAgICAgCisgICAgICAgIGlmICghbV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTcGVj
aWFsRmFzdENhc2UobV9jdXJyZW50SW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZs
YWdzKE5vZGVNYXlPdmVyZmxvdyB8IE5vZGVNYXlOZWdaZXJvKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBub2RlSW5kZXg7CisgICAgfQorICAgIAogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9i
YWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX3By
b2ZpbGVkQmxvY2s7CkBAIC05MTYsNyArOTM0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2RpdjogewogICAgICAgICAgICAgTm9k
ZUluZGV4IG9wMSA9IGdldFRvTnVtYmVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OwogICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRvTnVtYmVyKGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhEaXYsIG9wMSwgb3AyKSk7CisgICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgbWFrZURpdlNhZmUoYWRkVG9H
cmFwaChBcml0aERpdiwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcDEsIG9wMikpKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2Rpdik7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk1Njk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw2ICs0ODcsNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQXJpdGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhN
YXg6CiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgICAgIGNhc2UgQXJpdGhEaXY6CiAgICAg
ICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVm
YXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNw
cAkocmV2aXNpb24gOTU2OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3Bh
Z2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNyArMjExLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cml0aE11bDogeworICAgICAgICBjYXNlIEFyaXRoTXVsOgorICAgICAgICBjYXNlIEFyaXRoRGl2
OiB7CiAgICAgICAgICAgICAvLyBBcyBzb29uIGFzIGEgbXVsdGlwbHkgaGFwcGVucywgd2UgY2Fu
IGVhc2lseSBlbmQgdXAgaW4gdGhlIHBhcnQKICAgICAgICAgICAgIC8vIG9mIHRoZSBkb3VibGUg
ZG9tYWluIHdoZXJlIHRoZSBwb2ludCBhdCB3aGljaCB5b3UgZG8gdHJ1bmNhdGlvbgogICAgICAg
ICAgICAgLy8gY2FuIGNoYW5nZSB0aGUgb3V0Y29tZS4gU28sIEFyaXRoTXVsIGFsd2F5cyBjaGVj
a3MgZm9yIG92ZXJmbG93CkBAIC00MjIsNyArNDIzLDggQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBBcml0aFN1YjoKICAgICAgICAgY2FzZSBBcml0aE11bDoKICAgICAgICAgY2FzZSBBcml0aE1p
bjoKLSAgICAgICAgY2FzZSBBcml0aE1heDogeworICAgICAgICBjYXNlIEFyaXRoTWF4OgorICAg
ICAgICBjYXNlIEFyaXRoRGl2OiB7CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBt
X3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOwogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBy
aWdodCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDIoKV07CiAgICAgICAgICAgICAKQEAgLTQz
NSw3ICs0MzcsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoRGl2OgogICAgICAgICBjYXNlIEFyaXRoU3Fy
dDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9u
KFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNjQ3LDcgKzY0OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJpdGhNdWw6CiAgICAg
ICAgIGNhc2UgQXJpdGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgIGNhc2Ug
QXJpdGhNb2Q6IHsKKyAgICAgICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAgY2FzZSBBcml0aERp
djogewogICAgICAgICAgICAgaWYgKCFub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRo
Tm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICAgICAgdG9Eb3VibGUobm9kZS5jaGlsZDEoKSk7
CiAgICAgICAgICAgICAgICAgdG9Eb3VibGUobm9kZS5jaGlsZDIoKSk7CkBAIC02NjYsMTIgKzY2
OCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgICAgIHRvRG91YmxlKG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICAgICAgdG9Eb3VibGUobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhB
YnM6IHsKICAgICAgICAgICAgIGlmICghbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0
aE5vZGVGbGFncygpKSkgewogICAgICAgICAgICAgICAgIHRvRG91YmxlKG5vZGUuY2hpbGQxKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDk1Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOTgsNiArMTA5OCw0MyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2Fz
ZSBBcml0aERpdjogeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNo
aWxkMSgpLCBub2RlLmNoaWxkMigpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFy
aXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
ZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBl
ZHgodGhpcywgWDg2UmVnaXN0ZXJzOjplZHgpOworICAgICAgICAgICAgR1BSUmVnIG9wMUdQUiA9
IG9wMS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoVGVzdDMy
KEpJVENvbXBpbGVyOjpaZXJvLCBvcDJHUFIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gSWYgdGhlIHVzZXIgY2FyZXMgYWJvdXQgbmVnYXRpdmUgemVybywgdGhlbiBzcGVjdWxhdGUg
dGhhdCB3ZSdyZSBub3QgYWJvdXQKKyAgICAgICAgICAgIC8vIHRvIHByb2R1Y2UgbmVnYXRpdmUg
emVyby4KKyAgICAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFy
aXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bnVtZXJhdG9yTm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgb3AxR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkp
KTsKKyAgICAgICAgICAgICAgICBudW1lcmF0b3JOb25aZXJvLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHRlbXAyID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAgICAgICAgIGlmIChvcDJHUFIgPT0gWDg2UmVnaXN0ZXJzOjplYXggfHwg
b3AyR1BSID09IFg4NlJlZ2lzdGVyczo6ZWR4KSB7CisgICAgICAgICAgICAgICAgdGVtcDIgPSBh
bGxvY2F0ZSgpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCB0ZW1wMik7Cisg
ICAgICAgICAgICAgICAgb3AyR1BSID0gdGVtcDI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCBlYXguZ3ByKCkpOworICAgICAgICAg
ICAgbV9qaXQuYXNzZW1ibGVyKCkuY2RxKCk7CisgICAgICAgICAgICBtX2ppdC5hc3NlbWJsZXIo
KS5pZGl2bF9yKG9wMkdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgdGhlcmUgd2FzIG5vIHJlbWFpbmRlci4gSWYgdGhlcmUgaGFkIGJlZW4sIHRoZW4gd2UnZCBi
ZSBvYmxpZ2F0ZWQgdG8KKyAgICAgICAgICAgIC8vIHByb2R1Y2UgYSBkb3VibGUgcmVzdWx0IGlu
c3RlYWQuCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFRlc3QzMihK
SVRDb21waWxlcjo6Tm9uWmVybywgZWR4LmdwcigpKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGludGVnZXJSZXN1bHQoZWF4LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAJKHJldmlzaW9uIDk1Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0NywxMCArMTA0NywzNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgICAgIHNraXBE
b3VibGVMb2FkLmxpbmsodGhpcyk7CiAgICAgfQogICAgIGRpdkRvdWJsZShmcFJlZ1QxLCBmcFJl
Z1QwKTsKLQorICAgIAorI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICBpZiAobV9jYW5C
ZU9wdGltaXplZCkgeworICAgICAgICAvLyBJcyB0aGUgcmVzdWx0IGFjdHVhbGx5IGFuIGludGVn
ZXI/IFRoZSBERkcgSklUIHdvdWxkIHJlYWxseSBsaWtlIHRvIGtub3cuIElmIGl0J3MKKyAgICAg
ICAgLy8gbm90IGFuIGludGVnZXIsIHdlIGluY3JlbWVudCBhIGNvdW50LiBJZiB0aGlzIHRvZ2V0
aGVyIHdpdGggdGhlIHNsb3cgY2FzZSBjb3VudGVyCisgICAgICAgIC8vIGFyZSBiZWxvdyB0aHJl
c2hvbGQgdGhlbiB0aGUgREZHIEpJVCB3aWxsIGNvbXBpbGUgdGhpcyBkaXZpc2lvbiB3aXRoIGEg
c3BlY3VhbHRpb24KKyAgICAgICAgLy8gdGhhdCB0aGUgcmVtYWluZGVyIGlzIHplcm8uCisgICAg
ICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGZhaWwgdG8gZG8gaXRzIG1hZ2ljIGlm
IHRoZSByZXN1bHQgaXMgemVyby4KKyAgICAgICAgCisgICAgICAgIEp1bXBMaXN0IG5vdEludGVn
ZXI7CisgICAgICAgIGJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKGZwUmVnVDAsIHJlZ1QwLCBu
b3RJbnRlZ2VyLCBmcFJlZ1QxKTsKKyAgICAgICAgLy8gSWYgd2UndmUgZ290IGFuIGludGVnZXIs
IHdlIG1pZ2h0IGFzIHdlbGwgbWFrZSB0aGF0IHRoZSByZXN1bHQgb2YgdGhlIGRpdmlzaW9uLgor
ICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUocmVnVDAsIHJlZ1QwKTsKKyAgICAg
ICAgSnVtcCBpc0ludGVnZXIgPSBqdW1wKCk7CisgICAgICAgIG5vdEludGVnZXIubGluayh0aGlz
KTsKKyAgICAgICAgYWRkMzIoSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcygmbV9jb2RlQmxvY2st
PmFkZFNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUobV9ieXRlY29kZU9mZnNldCktPm1fY291bnRlcikp
OworICAgICAgICBtb3ZlRG91YmxlVG9QdHIoZnBSZWdUMCwgcmVnVDApOworICAgICAgICBzdWJQ
dHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIGlzSW50ZWdlci5saW5r
KHRoaXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIERvdWJsZSByZXN1bHQuCisgICAgICAg
IG1vdmVEb3VibGVUb1B0cihmcFJlZ1QwLCByZWdUMCk7CisgICAgICAgIHN1YlB0cih0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICB9CisjZWxzZQogICAgIC8vIERvdWJsZSByZXN1
bHQuCiAgICAgbW92ZURvdWJsZVRvUHRyKGZwUmVnVDAsIHJlZ1QwKTsKICAgICBzdWJQdHIodGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisjZW5kaWYKIAogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108295</attachid>
            <date>2011-09-22 02:08:17 -0700</date>
            <delta_ts>2011-09-22 10:31:49 -0700</delta_ts>
            <desc>the patch - more goodness added</desc>
            <filename>intdiv_patch_4.diff</filename>
            <type>text/plain</type>
            <size>10923</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU3MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAK
KzIwMTEtMDktMjIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHNob3VsZCBzdXBwb3J0IGludGVnZXIgZGl2aXNpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTk3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgc3VwcG9ydCBm
b3IgQXJpdGhEaXYgc3BlY3VsYXRpbmcgaW50ZWdlciwgYW5kIHNwZWN1bGF0aW5nCisgICAgICAg
IHRoYXQgdGhlIHJlc3VsdCBpcyBpbnRlZ2VyIChpLmUuIHJlbWFpbmRlciA9IDApLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpcyBhIDQlIHdpbiBvbiBLcmFrZW4gYW5kIGEgMSUgbG9zcyBvbiBW
OC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1h
a2VEaXZTYWZlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNBcml0aE5vZGVGbGFncyk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVOb2RlUHJlZGljdGlvbnMpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZGl2KToKKwogMjAxMS0wOS0yMSAgR2F2aW4gQmFycmFjbG91Z2gg
IDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIG1pc3NpbmcgYWRkUHRyLT5h
ZGQzMiBtYXBwaW5nIGZvciBYODYuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NTY5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTM3LDYgKzUzNywxMiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBXVEY6OmdlbmVyaWNCaW5hcnlT
ZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQsIGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zm
c2V0PihtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLCBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVz
LnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBi
b29sIGxpa2VseVRvVGFrZVNwZWNpYWxGYXN0Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID0gc3BlY2lh
bEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3Vu
dGVyOworICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID49IHNsb3dDYXNl
VGhyZXNob2xkKCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgbGlrZWx5VG9U
YWtlRGVlcGVzdFNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKICAgICAgICAgewogICAgICAg
ICAgICAgdW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwpAQCAtNTQ0LDYgKzU1MCwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3VudCAtIHNwZWNp
YWxGYXN0Q2FzZUNvdW50KSA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOwogICAgICAgICB9CiAgICAg
ICAgIAorICAgICAgICBib29sIGxpa2VseVRvVGFrZUFueVNsb3dDYXNlKGludCBieXRlY29kZU9m
ZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9IHJh
cmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVy
OworICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFz
dENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7
CisgICAgICAgICAgICByZXR1cm4gKHNsb3dDYXNlQ291bnQgKyBzcGVjaWFsRmFzdENhc2VDb3Vu
dCkgPj0gc2xvd0Nhc2VUaHJlc2hvbGQoKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
dm9pZCByZXNldFJhcmVDYXNlUHJvZmlsZXMoKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTU2
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQwLDYgKzU0MCwyNCBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gbm9kZUluZGV4OwogICAgIH0KICAgICAKKyAgICBOb2RlSW5kZXggbWFrZURpdlNhZmUoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGVJbmRl
eF0ub3AgPT0gQXJpdGhEaXYpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1haW4gc2xvdyBj
YXNlIGNvdW50ZXIgZm9yIG9wX2RpdiBpbiB0aGUgb2xkIEpJVCBjb3VudHMgb25seSB3aGVuCisg
ICAgICAgIC8vIHRoZSBvcGVyYW5kcyBhcmUgbm90IG51bWJlcnMuIFdlIGRvbid0IGNhcmUgYWJv
dXQgdGhhdCBzaW5jZSB3ZSBhbHJlYWR5CisgICAgICAgIC8vIGhhdmUgc3BlY3VsYXRpbnMgaW4g
cGxhY2UgdGhhdCB0YWtlIGNhcmUgb2YgdGhhdCBzZXBhcmF0ZWx5LiBXZSBvbmx5CisgICAgICAg
IC8vIGNhcmUgYWJvdXQgd2hlbiB0aGUgb3V0Y29tZSBvZiB0aGUgZGl2aXNpb24gaXMgbm90IGFu
IGludGVnZXIsIHdoaWNoCisgICAgICAgIC8vIGlzIHdoYXQgdGhlIHNwZWNpYWwgZmFzdCBjYXNl
IGNvdW50ZXIgdGVsbHMgdXMuCisgICAgICAgIAorICAgICAgICBpZiAoIW1fcHJvZmlsZWRCbG9j
ay0+bGlrZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNlKG1fY3VycmVudEluZGV4KSkKKyAgICAgICAg
ICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoW25vZGVJbmRl
eF0ubWVyZ2VBcml0aE5vZGVGbGFncyhOb2RlTWF5T3ZlcmZsb3cgfCBOb2RlTWF5TmVnWmVybyk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgIH0KKyAgICAKICAgICBK
U0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwog
ICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwpAQCAtOTE2LDcgKzkzNCw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9kaXY6
IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDIgPSBnZXRUb051
bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEFyaXRoRGl2LCBvcDEs
IG9wMikpOworICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IG1ha2VEaXZTYWZlKGFkZFRvR3JhcGgoQXJpdGhEaXYsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwg
b3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kaXYpOwogICAgICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NTY5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00ODcsNiArNDg3LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEFyaXRoTWluOgog
ICAgICAgICBjYXNlIEFyaXRoTWF4OgogICAgICAgICBjYXNlIEFyaXRoTW9kOgorICAgICAgICBj
YXNlIEFyaXRoRGl2OgogICAgICAgICBjYXNlIFZhbHVlQWRkOgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk1Njk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDcgKzIx
MSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgY2FzZSBBcml0aE11bDoKKyAg
ICAgICAgY2FzZSBBcml0aERpdjogewogICAgICAgICAgICAgLy8gQXMgc29vbiBhcyBhIG11bHRp
cGx5IGhhcHBlbnMsIHdlIGNhbiBlYXNpbHkgZW5kIHVwIGluIHRoZSBwYXJ0CiAgICAgICAgICAg
ICAvLyBvZiB0aGUgZG91YmxlIGRvbWFpbiB3aGVyZSB0aGUgcG9pbnQgYXQgd2hpY2ggeW91IGRv
IHRydW5jYXRpb24KICAgICAgICAgICAgIC8vIGNhbiBjaGFuZ2UgdGhlIG91dGNvbWUuIFNvLCBB
cml0aE11bCBhbHdheXMgY2hlY2tzIGZvciBvdmVyZmxvdwpAQCAtNDIyLDcgKzQyMyw4IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgQXJpdGhTdWI6CiAgICAgICAgIGNhc2UgQXJpdGhNdWw6CiAg
ICAgICAgIGNhc2UgQXJpdGhNaW46Ci0gICAgICAgIGNhc2UgQXJpdGhNYXg6IHsKKyAgICAgICAg
Y2FzZSBBcml0aE1heDoKKyAgICAgICAgY2FzZSBBcml0aERpdjogewogICAgICAgICAgICAgUHJl
ZGljdGVkVHlwZSBsZWZ0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKICAgICAgICAg
ICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQyKCldOwog
ICAgICAgICAgICAgCkBAIC00MzUsNyArNDM3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aERpdjoKICAg
ICAgICAgY2FzZSBBcml0aFNxcnQ6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTY0Nyw3ICs2NDgsOCBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIEFyaXRoTXVsOgogICAgICAgICBjYXNlIEFyaXRoTWluOgogICAgICAgICBjYXNlIEFyaXRo
TWF4OgotICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6Cisg
ICAgICAgIGNhc2UgQXJpdGhEaXY6IHsKICAgICAgICAgICAgIGlmICghbm9kZUNhblNwZWN1bGF0
ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAgICAgICAgIHRvRG91
YmxlKG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIHRvRG91YmxlKG5vZGUuY2hpbGQy
KCkpOwpAQCAtNjY2LDEyICs2NjgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAg
ICAgICB0b0RvdWJsZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHRvRG91YmxlKG5vZGUu
Y2hpbGQyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CiAgICAgICAgICAgICBpZiAoIW5vZGVDYW5TcGVjdWxh
dGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAgICAgICAgICAgICAgICB0b0Rv
dWJsZShub2RlLmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NTY5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDk4LDYgKzEwOTgsNDMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhEaXY6IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkgJiYgbm9kZUNhblNwZWN1
bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IGVheCh0aGlzLCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWR4KTsKKyAgICAgICAg
ICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgb3AyR1BS
ID0gb3AyLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgb3AyR1BSKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIElmIHRoZSB1c2VyIGNhcmVzIGFib3V0IG5lZ2F0aXZlIHpl
cm8sIHRoZW4gc3BlY3VsYXRlIHRoYXQgd2UncmUgbm90IGFib3V0CisgICAgICAgICAgICAvLyB0
byBwcm9kdWNlIG5lZ2F0aXZlIHplcm8uCisgICAgICAgICAgICBpZiAoIW5vZGVDYW5JZ25vcmVO
ZWdhdGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG51bWVyYXRvck5vblplcm8gPSBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUik7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIG9wMkdQ
UiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgbnVtZXJhdG9yTm9uWmVyby5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQ
UlJlZyB0ZW1wMiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgICAgICBpZiAob3AyR1BSID09IFg4
NlJlZ2lzdGVyczo6ZWF4IHx8IG9wMkdQUiA9PSBYODZSZWdpc3RlcnM6OmVkeCkgeworICAgICAg
ICAgICAgICAgIHRlbXAyID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KG9wMkdQUiwgdGVtcDIpOworICAgICAgICAgICAgICAgIG9wMkdQUiA9IHRlbXAyOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgZWF4
LmdwcigpKTsKKyAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLmNkcSgpOworICAgICAgICAg
ICAgbV9qaXQuYXNzZW1ibGVyKCkuaWRpdmxfcihvcDJHUFIpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBDaGVjayB0aGF0IHRoZXJlIHdhcyBubyByZW1haW5kZXIuIElmIHRoZXJlIGhh
ZCBiZWVuLCB0aGVuIHdlJ2QgYmUgb2JsaWdhdGVkIHRvCisgICAgICAgICAgICAvLyBwcm9kdWNl
IGEgZG91YmxlIHJlc3VsdCBpbnN0ZWFkLgorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIGVkeC5ncHIoKSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGVheC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAg
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiA5NTY5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNDcsMTAgKzEwNDcsMzUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KEluc3RydWN0aW9uKiBj
dXJyZQogICAgICAgICBza2lwRG91YmxlTG9hZC5saW5rKHRoaXMpOwogICAgIH0KICAgICBkaXZE
b3VibGUoZnBSZWdUMSwgZnBSZWdUMCk7Ci0KKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAg
ICAvLyBJcyB0aGUgcmVzdWx0IGFjdHVhbGx5IGFuIGludGVnZXI/IFRoZSBERkcgSklUIHdvdWxk
IHJlYWxseSBsaWtlIHRvIGtub3cuIElmIGl0J3MKKyAgICAvLyBub3QgYW4gaW50ZWdlciwgd2Ug
aW5jcmVtZW50IGEgY291bnQuIElmIHRoaXMgdG9nZXRoZXIgd2l0aCB0aGUgc2xvdyBjYXNlIGNv
dW50ZXIKKyAgICAvLyBhcmUgYmVsb3cgdGhyZXNob2xkIHRoZW4gdGhlIERGRyBKSVQgd2lsbCBj
b21waWxlIHRoaXMgZGl2aXNpb24gd2l0aCBhIHNwZWN1YWx0aW9uCisgICAgLy8gdGhhdCB0aGUg
cmVtYWluZGVyIGlzIHplcm8uCisgICAgCisgICAgLy8gQXMgd2VsbCwgdGhlcmUgYXJlIGNhc2Vz
IHdoZXJlIGEgZG91YmxlIHJlc3VsdCBoZXJlIHdvdWxkIGNhdXNlIGFuIGltcG9ydGFudCBmaWVs
ZAorICAgIC8vIGluIHRoZSBoZWFwIHRvIGdvIGRvdWJseSwgcmVzdWx0aW5nIGluIGRvdWJsZSBw
cmVkaWN0aW9ucyBnZXR0aW5nIHByZWRpY3RlZCB0byBhbGwKKyAgICAvLyB0aGUgd3JvbmcgcGxh
Y2VzLiBTbyBpZiB3ZSBhcmUgREZHIGNvbXBpbGluZyBhbnl0aGluZyBpbiB0aGUgcHJvZ3JhbSwg
d2Ugd2FudCB0aGlzCisgICAgLy8gY29kZSB0byBlbnN1cmUgdGhhdCBpdCBwcm9kdWNlcyBpbnRl
Z2VycyB3aGVuZXZlciBwb3NzaWJsZS4KKyAgICAKKyAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGZh
aWwgdG8gZG8gaXRzIG1hZ2ljIGlmIHRoZSByZXN1bHQgaXMgemVyby4KKyAgICAKKyAgICBKdW1w
TGlzdCBub3RJbnRlZ2VyOworICAgIGJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKGZwUmVnVDAs
IHJlZ1QwLCBub3RJbnRlZ2VyLCBmcFJlZ1QxKTsKKyAgICAvLyBJZiB3ZSd2ZSBnb3QgYW4gaW50
ZWdlciwgd2UgbWlnaHQgYXMgd2VsbCBtYWtlIHRoYXQgdGhlIHJlc3VsdCBvZiB0aGUgZGl2aXNp
b24uCisgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKHJlZ1QwLCByZWdUMCk7CisgICAg
SnVtcCBpc0ludGVnZXIgPSBqdW1wKCk7CisgICAgbm90SW50ZWdlci5saW5rKHRoaXMpOworICAg
IGFkZDMyKEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoJm1fY29kZUJsb2NrLT5hZGRTcGVjaWFs
RmFzdENhc2VQcm9maWxlKG1fYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXIpKTsKKyAgICBtb3Zl
RG91YmxlVG9QdHIoZnBSZWdUMCwgcmVnVDApOworICAgIHN1YlB0cih0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHJlZ1QwKTsKKyAgICBpc0ludGVnZXIubGluayh0aGlzKTsKKyNlbHNlCiAgICAgLy8g
RG91YmxlIHJlc3VsdC4KICAgICBtb3ZlRG91YmxlVG9QdHIoZnBSZWdUMCwgcmVnVDApOwogICAg
IHN1YlB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyNlbmRpZgogCiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKIH0K
</data>
<flag name="review"
          id="105231"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>