<?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>152955</bug_id>
          
          <creation_ts>2016-01-09 20:59:45 -0800</creation_ts>
          <short_desc>B3 should reduce Trunc(BitOr(value, constant)) where !(constant &amp; 0xffffffff) to Trunc(value)</short_desc>
          <delta_ts>2016-01-10 19:26:42 -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>WebKit 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>150507</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1154193</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-09 20:59:45 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154194</commentid>
    <comment_count>1</comment_count>
      <attachid>268639</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-09 21:01:26 -0800</bug_when>
    <thetext>Created attachment 268639
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154195</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-09 21:02:46 -0800</bug_when>
    <thetext>Attachment 268639 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:9014:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:9032:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:9051:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:9070:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 4 in 3 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>1154197</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-09 21:43:25 -0800</bug_when>
    <thetext>This is a 2x speed-up on AsmBench/FloatMM.  It&apos;s neutral elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154279</commentid>
    <comment_count>4</comment_count>
      <attachid>268639</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-10 15:02:49 -0800</bug_when>
    <thetext>Comment on attachment 268639
the patch

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

I have a few questions, maybe I&apos;m misunderstanding how some things.

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:809
&gt; +            case Add:

Wouldn&apos;t this produce zero?

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:810
&gt; +            case Sub:

is this signed or unsigned subtraction? If it&apos;s signed, why is this?
If it&apos;s unsigned, wouldn&apos;t this just be zero?

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:813
&gt; +            case BitAnd:
&gt; +            case BitOr:
&gt; +            case BitXor:

Wouldn&apos;t these produce zero?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154282</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-10 15:13:12 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 268639 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=268639&amp;action=review
&gt; 
&gt; I have a few questions, maybe I&apos;m misunderstanding how some things.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:809
&gt; &gt; +            case Add:
&gt; 
&gt; Wouldn&apos;t this produce zero?
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:810
&gt; &gt; +            case Sub:
&gt; 
&gt; is this signed or unsigned subtraction? If it&apos;s signed, why is this?
&gt; If it&apos;s unsigned, wouldn&apos;t this just be zero?
Never mind about signedness, my question is just if this would
always be zero?

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:813
&gt; &gt; +            case BitAnd:
&gt; &gt; +            case BitOr:
&gt; &gt; +            case BitXor:
&gt; 
&gt; Wouldn&apos;t these produce zero?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154286</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-10 16:51:51 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 268639 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=268639&amp;action=review
&gt; 
&gt; I have a few questions, maybe I&apos;m misunderstanding how some things.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:809
&gt; &gt; +            case Add:
&gt; 
&gt; Wouldn&apos;t this produce zero?

The expression in question is:

    static_cast&lt;int32_t&gt;(x + const)

Where &quot;static_cast&lt;int32&gt;()&quot; is Trunc and &quot;x + const&quot; is Add.

In this case, if const1 does not have any of its low 32 bits set, we are guaranteed that the expression is equivalent to:

    static_cast&lt;int32_t&gt;(x)

That&apos;s guaranteed because if const has zero in all of its low 32 bits, then &quot;x + const&quot; does not change anything about the low 32 bits of x.

That also means that this does not produce zero.  It does not produce zero because it simply produces static_cast&lt;int32&gt;(x).

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:810
&gt; &gt; +            case Sub:
&gt; 
&gt; is this signed or unsigned subtraction? If it&apos;s signed, why is this?
&gt; If it&apos;s unsigned, wouldn&apos;t this just be zero?

There is no difference between signed subtraction and unsigned subtraction.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:813
&gt; &gt; +            case BitAnd:
&gt; &gt; +            case BitOr:
&gt; &gt; +            case BitXor:
&gt; 
&gt; Wouldn&apos;t these produce zero?

No.  If you do:

    static_cast&lt;int32_t&gt;(x | 0xabcdef1200000000)

then it&apos;s equivalent to:

    static_cast&lt;int32_t&gt;(x)

Because the &quot;|&quot; operation could only have affected the top bits.  That&apos;s why there is a check that the constant has zero in all of its low bits.  If it has zero in all of its low bits, then we can short-circuit the Trunc around the &quot;|&quot;.

The same is true for &quot;^&quot; and &quot;&amp;&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154287</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-10 16:52:08 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Comment on attachment 268639 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=268639&amp;action=review
&gt; &gt; 
&gt; &gt; I have a few questions, maybe I&apos;m misunderstanding how some things.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:809
&gt; &gt; &gt; +            case Add:
&gt; &gt; 
&gt; &gt; Wouldn&apos;t this produce zero?
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:810
&gt; &gt; &gt; +            case Sub:
&gt; &gt; 
&gt; &gt; is this signed or unsigned subtraction? If it&apos;s signed, why is this?
&gt; &gt; If it&apos;s unsigned, wouldn&apos;t this just be zero?
&gt; Never mind about signedness, my question is just if this would
&gt; always be zero?

Answered above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154293</commentid>
    <comment_count>8</comment_count>
      <attachid>268639</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-10 17:08:35 -0800</bug_when>
    <thetext>Comment on attachment 268639
the patch

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

&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:809
&gt;&gt;&gt;&gt;&gt; +            case Add:
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Wouldn&apos;t this produce zero?
&gt;&gt;&gt; 
&gt;&gt;&gt; Never mind about signedness, my question is just if this would
&gt;&gt;&gt; always be zero?
&gt;&gt; 
&gt;&gt; The expression in question is:
&gt;&gt; 
&gt;&gt;     static_cast&lt;int32_t&gt;(x + const)
&gt;&gt; 
&gt;&gt; Where &quot;static_cast&lt;int32&gt;()&quot; is Trunc and &quot;x + const&quot; is Add.
&gt;&gt; 
&gt;&gt; In this case, if const1 does not have any of its low 32 bits set, we are guaranteed that the expression is equivalent to:
&gt;&gt; 
&gt;&gt;     static_cast&lt;int32_t&gt;(x)
&gt;&gt; 
&gt;&gt; That&apos;s guaranteed because if const has zero in all of its low 32 bits, then &quot;x + const&quot; does not change anything about the low 32 bits of x.
&gt;&gt; 
&gt;&gt; That also means that this does not produce zero.  It does not produce zero because it simply produces static_cast&lt;int32&gt;(x).
&gt; 
&gt; Answered above.

I see. I had a total brain fart when I was reasoning about this. Thanks for the clarification. It makes sense.

&gt;&gt;&gt;&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:813
&gt;&gt;&gt;&gt; +            case BitXor:
&gt;&gt;&gt; 
&gt;&gt;&gt; Wouldn&apos;t these produce zero?
&gt;&gt; 
&gt;&gt; 
&gt; 
&gt; No.  If you do:
&gt; 
&gt;     static_cast&lt;int32_t&gt;(x | 0xabcdef1200000000)
&gt; 
&gt; then it&apos;s equivalent to:
&gt; 
&gt;     static_cast&lt;int32_t&gt;(x)
&gt; 
&gt; Because the &quot;|&quot; operation could only have affected the top bits.  That&apos;s why there is a check that the constant has zero in all of its low bits.  If it has zero in all of its low bits, then we can short-circuit the Trunc around the &quot;|&quot;.
&gt; 
&gt; The same is true for &quot;^&quot; and &quot;&amp;&quot;.

I agree with BitOr and BitXor.
For BitAnd, this seems wrong. If we&apos;re ANDing something with something else with all lower 32-bits are zero, we should transform this into zero.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154294</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-10 17:16:21 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 268639 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=268639&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:809
&gt; &gt;&gt;&gt;&gt;&gt; +            case Add:
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; Wouldn&apos;t this produce zero?
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Never mind about signedness, my question is just if this would
&gt; &gt;&gt;&gt; always be zero?
&gt; &gt;&gt; 
&gt; &gt;&gt; The expression in question is:
&gt; &gt;&gt; 
&gt; &gt;&gt;     static_cast&lt;int32_t&gt;(x + const)
&gt; &gt;&gt; 
&gt; &gt;&gt; Where &quot;static_cast&lt;int32&gt;()&quot; is Trunc and &quot;x + const&quot; is Add.
&gt; &gt;&gt; 
&gt; &gt;&gt; In this case, if const1 does not have any of its low 32 bits set, we are guaranteed that the expression is equivalent to:
&gt; &gt;&gt; 
&gt; &gt;&gt;     static_cast&lt;int32_t&gt;(x)
&gt; &gt;&gt; 
&gt; &gt;&gt; That&apos;s guaranteed because if const has zero in all of its low 32 bits, then &quot;x + const&quot; does not change anything about the low 32 bits of x.
&gt; &gt;&gt; 
&gt; &gt;&gt; That also means that this does not produce zero.  It does not produce zero because it simply produces static_cast&lt;int32&gt;(x).
&gt; &gt; 
&gt; &gt; Answered above.
&gt; 
&gt; I see. I had a total brain fart when I was reasoning about this. Thanks for
&gt; the clarification. It makes sense.
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:813
&gt; &gt;&gt;&gt;&gt; +            case BitXor:
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Wouldn&apos;t these produce zero?
&gt; &gt;&gt; 
&gt; &gt;&gt; 
&gt; &gt; 
&gt; &gt; No.  If you do:
&gt; &gt; 
&gt; &gt;     static_cast&lt;int32_t&gt;(x | 0xabcdef1200000000)
&gt; &gt; 
&gt; &gt; then it&apos;s equivalent to:
&gt; &gt; 
&gt; &gt;     static_cast&lt;int32_t&gt;(x)
&gt; &gt; 
&gt; &gt; Because the &quot;|&quot; operation could only have affected the top bits.  That&apos;s why there is a check that the constant has zero in all of its low bits.  If it has zero in all of its low bits, then we can short-circuit the Trunc around the &quot;|&quot;.
&gt; &gt; 
&gt; &gt; The same is true for &quot;^&quot; and &quot;&amp;&quot;.
&gt; 
&gt; I agree with BitOr and BitXor.
&gt; For BitAnd, this seems wrong. If we&apos;re ANDing something with something else
&gt; with all lower 32-bits are zero, we should transform this into zero.

Good point.  I&apos;ll remove the BitAnd from the switch statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154295</commentid>
    <comment_count>10</comment_count>
      <attachid>268667</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-10 17:16:56 -0800</bug_when>
    <thetext>Created attachment 268667
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154296</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-10 17:18:21 -0800</bug_when>
    <thetext>Attachment 268667 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:9015:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:9033:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:9052:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:9071:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 4 in 3 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>1154299</commentid>
    <comment_count>12</comment_count>
      <attachid>268667</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-10 17:49:49 -0800</bug_when>
    <thetext>Comment on attachment 268667
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154304</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-10 19:26:42 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/194836</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268639</attachid>
            <date>2016-01-09 21:01:26 -0800</date>
            <delta_ts>2016-01-10 17:16:56 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>6542</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0ODI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDE2LTAxLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIHJlZHVjZSBUcnVuYyhCaXRPcih2YWx1ZSwgY29uc3RhbnQpKSB3aGVyZSAhKGNv
bnN0YW50ICYgMHhmZmZmZmZmZikgdG8gVHJ1bmModmFsdWUpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5NTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB3ZSBib3ggYW4g
aW50MzIgYW5kIHRoZW4gaW1tZWRpYXRlbHkgdW5ib3ggaXQuCisKKyAgICAgICAgKiBiMy9CM1Jl
ZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlND
OjpCMzo6dGVzdFBvd0RvdWJsZUJ5SW50ZWdlckxvb3ApOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dFRydW5jT3JIaWdoKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RUcnVuY09yTG93KToKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RCaXRBbmRPckhpZ2gpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJp
dEFuZE9yTG93KToKKyAgICAgICAgKEpTQzo6QjM6Onplcm8pOgorICAgICAgICAoSlNDOjpCMzo6
cnVuKToKKwogMjAxNi0wMS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIEFpciBzaG91bGQgc3VwcG9ydCBCcmFuY2g2NCB3aXRoIGltbWVkaWF0ZXMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlz
aW9uIDE5NDgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3Ro
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDYgKzQxOCwyNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoT3AodmFsdWUsIGNv
bnN0YW50MSksIGNvbnN0YW50MikKKyAgICAgICAgICAgIC8vICAgICB3aGVyZSAhKGNvbnN0YW50
MSAmIGNvbnN0YW50MikKKyAgICAgICAgICAgIC8vICAgICAgIGFuZCBPcCBpcyBCaXRPciBvciBC
aXRYb3IKKyAgICAgICAgICAgIC8vIGludG8gdGhpczogQml0QW5kKHZhbHVlLCBjb25zdGFudDIp
CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7CisgICAgICAg
ICAgICAgICAgaW50NjRfdCBjb25zdGFudDIgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKTsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgICAgICAgICAgY2FzZSBCaXRYb3I6
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhh
c0ludCgpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKS0+YXNJbnQoKSAmIGNvbnN0YW50MikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgQml0T3I6CkBAIC03NzksNiArODAwLDI3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBUcnVuYyhPcCh2YWx1ZSwg
Y29uc3RhbnQpKQorICAgICAgICAgICAgLy8gICAgIHdoZXJlICEoY29uc3RhbnQgJiAweGZmZmZm
ZmZmKQorICAgICAgICAgICAgLy8gICAgICAgYW5kIE9wIGlzIEFkZCwgU3ViLCBCaXRBbmQsIEJp
dE9yLCBvciBCaXRYb3IKKyAgICAgICAgICAgIC8vIGludG8gdGhpczogVHJ1bmModmFsdWUpCisg
ICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBBZGQ6CisgICAgICAgICAgICBjYXNlIFN1YjoKKyAgICAgICAgICAgIGNhc2Ug
Qml0QW5kOgorICAgICAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgICAgIGNhc2UgQml0WG9y
OgorICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0lu
dDY0KCkKKyAgICAgICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSktPmFzSW50NjQoKSAmIDB4ZmZmZmZmZmZsbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIEZsb2F0VG9Eb3VibGU6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTk0ODIxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4NjgsNiArODg2OCw4MCBA
QCB2b2lkIHRlc3RQb3dEb3VibGVCeUludGVnZXJMb29wKGRvdWJsZSB4CiAgICAgQ0hFQ0soaXNJ
ZGVudGljYWwoY29tcGlsZUFuZFJ1bjxkb3VibGU+KHByb2MsIHhPcGVyYW5kLCB5T3BlcmFuZCks
IHBvdyh4T3BlcmFuZCwgeU9wZXJhbmQpKSk7CiB9CiAKK3ZvaWQgdGVzdFRydW5jT3JIaWdoKCkK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEJpdE9yLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDB4MTAwMDAwMDAwKSkpKTsKKwor
ICAgIGludDY0X3QgdmFsdWUgPSAweDEyMzQ1Njc4MTIzNDsKKyAgICBDSEVDSyhjb21waWxlQW5k
UnVuPGludD4ocHJvYywgdmFsdWUpID09IDB4NTY3ODEyMzQpOworfQorCit2b2lkIHRlc3RUcnVu
Y09yTG93KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEJpdE9yLCBPcmln
aW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAgICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDB4MTAwMDAwMCkp
KSk7CisKKyAgICBpbnQ2NF90IHZhbHVlID0gMHgxMjM0NTY3ODEyMzQ7CisgICAgQ0hFQ0soY29t
cGlsZUFuZFJ1bjxpbnQ+KHByb2MsIHZhbHVlKSA9PSAweDU3NzgxMjM0KTsKK30KKwordm9pZCB0
ZXN0Qml0QW5kT3JIaWdoKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBC
aXRPciwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
eDgpKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9y
aWdpbigpLCAweDc3Nzc3Nzc3Nzc3NykpKTsKKworICAgIGludDY0X3QgdmFsdWUgPSAweDEyMzQ1
Njc4MTIzNDsKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIHZhbHVlKSA9
PSAweDEyMzQ1NjcwMTIzNGxsKTsKK30KKwordm9pZCB0ZXN0Qml0QW5kT3JMb3coKQoreworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEJpdE9yLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDB4MSkpLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDB4Nzc3Nzc3Nzc3Nzc3KSkp
OworCisgICAgaW50NjRfdCB2YWx1ZSA9IDB4MTIzNDU2NzgxMjM0OworICAgIENIRUNLKGNvbXBp
bGVBbmRSdW48aW50NjRfdD4ocHJvYywgdmFsdWUpID09IDB4MTIzNDU2NzAxMjM1bGwpOworfQor
CiAvLyBNYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGRvZXMgbm90IHRyeSB0byBvcHRpbWl6ZSBhbnl0
aGluZyBvdXQuCiBORVZFUl9JTkxJTkUgZG91YmxlIHplcm8oKQogewpAQCAtMTAxMDEsNiArMTAx
NzUsMTEgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0U2VsZWN0
SW52ZXJ0KCkpOwogICAgIFJVTl9CSU5BUlkodGVzdFBvd0RvdWJsZUJ5SW50ZWdlckxvb3AsIGZs
b2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCksIGludDY0T3BlcmFuZHMoKSk7CiAKKyAgICBS
VU4odGVzdFRydW5jT3JIaWdoKCkpOworICAgIFJVTih0ZXN0VHJ1bmNPckxvdygpKTsKKyAgICBS
VU4odGVzdEJpdEFuZE9ySGlnaCgpKTsKKyAgICBSVU4odGVzdEJpdEFuZE9yTG93KCkpOworCiAg
ICAgaWYgKHRhc2tzLmlzRW1wdHkoKSkKICAgICAgICAgdXNhZ2UoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268667</attachid>
            <date>2016-01-10 17:16:56 -0800</date>
            <delta_ts>2016-01-10 17:49:49 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>6645</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0ODI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBA
CisyMDE2LTAxLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIHJlZHVjZSBUcnVuYyhCaXRPcih2YWx1ZSwgY29uc3RhbnQpKSB3aGVyZSAhKGNv
bnN0YW50ICYgMHhmZmZmZmZmZikgdG8gVHJ1bmModmFsdWUpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI5NTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGhhcHBlbnMgd2hlbiB3ZSBib3ggYW4g
aW50MzIgYW5kIHRoZW4gaW1tZWRpYXRlbHkgdW5ib3ggaXQuCisKKyAgICAgICAgVGhpcyBtYWtl
cyBhbiBlbm9ybW91cyBkaWZmZXJlbmNlIG9uIEFzbUJlbmNoL0Zsb2F0TU0uIEl0J3MgYSAyeCBz
cGVlZC11cCBvbiB0aGF0CisgICAgICAgIGJlbmNobWFyay4gSXQncyBuZXV0cmFsIGVsc2V3aGVy
ZS4KKworICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL3Rl
c3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0UG93RG91YmxlQnlJbnRlZ2VyTG9vcCk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0VHJ1bmNPckhpZ2gpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdFRydW5jT3JMb3cpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJpdEFuZE9ySGlnaCk6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0QW5kT3JMb3cpOgorICAgICAgICAoSlNDOjpCMzo6emVy
byk6CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorCiAyMDE2LTAxLTA5ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQWlyIHNob3VsZCBzdXBwb3J0IEJyYW5jaDY0
IHdpdGggaW1tZWRpYXRlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNl
U3RyZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Jl
ZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMTk0ODIxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsNiArNDE4
LDI3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKICAgICAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IEJpdEFuZChPcCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgICAgICAgICAg
Ly8gICAgIHdoZXJlICEoY29uc3RhbnQxICYgY29uc3RhbnQyKQorICAgICAgICAgICAgLy8gICAg
ICAgYW5kIE9wIGlzIEJpdE9yIG9yIEJpdFhvcgorICAgICAgICAgICAgLy8gaW50byB0aGlzOiBC
aXRBbmQodmFsdWUsIGNvbnN0YW50MikKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgx
KS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGNvbnN0YW50MiA9IG1fdmFs
dWUtPmNoaWxkKDEpLT5hc0ludCgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAg
ICAgICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYm
ICEobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpICYgY29uc3RhbnQyKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBCaXRPcjoKQEAgLTc3OSw2ICs4
MDAsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IFRydW5jKE9wKHZhbHVlLCBjb25zdGFudCkpCisgICAgICAgICAgICAvLyAgICAgd2hl
cmUgIShjb25zdGFudCAmIDB4ZmZmZmZmZmYpCisgICAgICAgICAgICAvLyAgICAgICBhbmQgT3Ag
aXMgQWRkLCBTdWIsIEJpdE9yLCBvciBCaXRYb3IKKyAgICAgICAgICAgIC8vIGludG8gdGhpczog
VHJ1bmModmFsdWUpCisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNv
ZGUoKSkgeworICAgICAgICAgICAgY2FzZSBBZGQ6CisgICAgICAgICAgICBjYXNlIFN1YjoKKyAg
ICAgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQ2NCgpCisgICAg
ICAgICAgICAgICAgICAgICYmICEobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludDY0
KCkgJiAweGZmZmZmZmZmbGwpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxk
KDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgY2FzZSBGbG9hdFRvRG91YmxlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5jcHAJKHJldmlzaW9uIDE5NDgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODY4LDYgKzg4NjgsODAgQEAgdm9pZCB0ZXN0
UG93RG91YmxlQnlJbnRlZ2VyTG9vcChkb3VibGUgeAogICAgIENIRUNLKGlzSWRlbnRpY2FsKGNv
bXBpbGVBbmRSdW48ZG91YmxlPihwcm9jLCB4T3BlcmFuZCwgeU9wZXJhbmQpLCBwb3coeE9wZXJh
bmQsIHlPcGVyYW5kKSkpOwogfQogCit2b2lkIHRlc3RUcnVuY09ySGlnaCgpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAg
cHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBCaXRPciwgT3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25z
dDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAweDEwMDAwMDAwMCkpKSk7CisKKyAgICBpbnQ2NF90
IHZhbHVlID0gMHgxMjM0NTY3ODEyMzQ7CisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHBy
b2MsIHZhbHVlKSA9PSAweDU2NzgxMjM0KTsKK30KKwordm9pZCB0ZXN0VHJ1bmNPckxvdygpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBCaXRPciwgT3JpZ2luKCksCisgICAg
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAweDEwMDAwMDApKSkpOworCisgICAg
aW50NjRfdCB2YWx1ZSA9IDB4MTIzNDU2NzgxMjM0OworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48
aW50Pihwcm9jLCB2YWx1ZSkgPT0gMHg1Nzc4MTIzNCk7Cit9CisKK3ZvaWQgdGVzdEJpdEFuZE9y
SGlnaCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQml0T3IsIE9yaWdp
bigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMHg4KSksCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMHg3
Nzc3Nzc3Nzc3NzcpKSk7CisKKyAgICBpbnQ2NF90IHZhbHVlID0gMHgxMjM0NTY3ODEyMzQ7Cisg
ICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCB2YWx1ZSkgPT0gMHgxMjM0NTY3
MDEyMzRsbCk7Cit9CisKK3ZvaWQgdGVzdEJpdEFuZE9yTG93KCkKK3sKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBC
aXRBbmQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgICAgICBwcm9jLCBCaXRPciwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFs
dWU+KHByb2MsIE9yaWdpbigpLCAweDEpKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxD
b25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAweDc3Nzc3Nzc3Nzc3NykpKTsKKworICAgIGlu
dDY0X3QgdmFsdWUgPSAweDEyMzQ1Njc4MTIzNDsKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGlu
dDY0X3Q+KHByb2MsIHZhbHVlKSA9PSAweDEyMzQ1NjcwMTIzNWxsKTsKK30KKwogLy8gTWFrZSBz
dXJlIHRoZSBjb21waWxlciBkb2VzIG5vdCB0cnkgdG8gb3B0aW1pemUgYW55dGhpbmcgb3V0Lgog
TkVWRVJfSU5MSU5FIGRvdWJsZSB6ZXJvKCkKIHsKQEAgLTEwMTAxLDYgKzEwMTc1LDExIEBAIHZv
aWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFNlbGVjdEludmVydCgpKTsK
ICAgICBSVU5fQklOQVJZKHRlc3RQb3dEb3VibGVCeUludGVnZXJMb29wLCBmbG9hdGluZ1BvaW50
T3BlcmFuZHM8ZG91YmxlPigpLCBpbnQ2NE9wZXJhbmRzKCkpOwogCisgICAgUlVOKHRlc3RUcnVu
Y09ySGlnaCgpKTsKKyAgICBSVU4odGVzdFRydW5jT3JMb3coKSk7CisgICAgUlVOKHRlc3RCaXRB
bmRPckhpZ2goKSk7CisgICAgUlVOKHRlc3RCaXRBbmRPckxvdygpKTsKKwogICAgIGlmICh0YXNr
cy5pc0VtcHR5KCkpCiAgICAgICAgIHVzYWdlKCk7CiAK
</data>
<flag name="review"
          id="293650"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>