<?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>38714</bug_id>
          
          <creation_ts>2010-05-06 20:28:40 -0700</creation_ts>
          <short_desc>Add result caching for Math.sin</short_desc>
          <delta_ts>2010-05-06 22:03:41 -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>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>222136</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-06 20:28:40 -0700</bug_when>
    <thetext>Math.sin is frequently called with the same operand, caching the result should improve performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222137</commentid>
    <comment_count>1</comment_count>
      <attachid>55335</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-06 20:34:13 -0700</bug_when>
    <thetext>Created attachment 55335
The patch

2% - 2.5% progression on SunSpider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222139</commentid>
    <comment_count>2</comment_count>
      <attachid>55335</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-06 20:43:37 -0700</bug_when>
    <thetext>Comment on attachment 55335
The patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222140</commentid>
    <comment_count>3</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-05-06 20:51:18 -0700</bug_when>
    <thetext>Perhaps it would be worth to tell in the ChangeLog why do you choose this hash function, how do you prove this is effective, why the cache size is 4096. In short, some explanation about the algorithm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222154</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-06 21:48:24 -0700</bug_when>
    <thetext>Hey Zoltan, will do, but the simple answer is this: there hasn&apos;t been a huge amount of thought go into this hash function. :-)

I deliberately picked something with the following properties:
* very cheap to calculate since we can&apos;t cache the hash value,
* something which we can easily implement in asm, so that we can do so in an thunk if we wish,
* something that tried to preserve as many bits from the float value as possible, without increasing the number of calculations.

The hash as implemented seems to work well enough, and I thought that by committing I get the code out in the public where others can improve on it too. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222162</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-05-06 22:03:41 -0700</bug_when>
    <thetext>Transmitting file data ......
Committed revision 58935.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55335</attachid>
            <date>2010-05-06 20:34:13 -0700</date>
            <delta_ts>2010-05-06 20:43:37 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>patch.sintable.txt</filename>
            <type>text/plain</type>
            <size>10267</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4OTMyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDUtMDYgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAzODcxNCAtIEFkZCByZXN1bHQgY2FjaGlu
ZyBmb3IgTWF0aC5zaW4KKworICAgICAgICBNYXRoLnNpbiBpcyBmcmVxdWVudGx5IGNhbGxlZCB3
aXRoIHRoZSBzYW1lIG9wZXJhbmQsIGNhY2hpbmcgdGhlIHJlc3VsdCBzaG91bGQKKyAgICAgICAg
aW1wcm92ZSBwZXJmb3JtYW5jZS4gIENhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24gYWRkcyBh
IGdlbmVyaWMgbWVjaGFuaXNtIHRvCisgICAgICAgIGNhY2hlIHJlc3VsdHMgZm9yIHB1cmUgZnVu
Y3Rpb25zIHdpdGggdGhlIHNpZ25hdHVyZSAiZG91YmxlIGZ1bmMoZG91YmxlKSIsIGFuZAorICAg
ICAgICB3aGVyZSBOYU4gbWFwcyB0byBOYU4uCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVkVHJhbnNj
ZW5kZW50YWxGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FjaGVkVHJhbnNjZW5k
ZW50YWxGdW5jdGlvbjo6Q2FjaGVkVHJhbnNjZW5kZW50YWxGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkNhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb246On5DYWNoZWRUcmFuc2NlbmRlbnRhbEZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkVHJhbnNjZW5kZW50YWxGdW5jdGlvbjo6b3Bl
cmF0b3IoKSk6CisgICAgICAgIChKU0M6OkNhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb246Omlu
aXRpYWxpemUpOgorICAgICAgICAoSlNDOjpDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uOjpo
YXNoKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAqIHJ1bnRp
bWUvTWF0aE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNTaW4pOgorICAg
ICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEwLTA1LTA2ICBHZW9mZnJleSBHYXJlbiAgPGdn
YXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93cyBidWlsZCBmaXguCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDU4OTI1KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjExLDYgKzIx
MSw3IEBACiAJCTg2OEJGQTYwMTE3RDA0ODIwMEI5MDhCMSAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2OEJGQTVG
MTE3RDA0ODIwMEI5MDhCMSAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4Njk4Qjg2OTEwRDQ0RDk0MDBEOEQw
MUIgLyogU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODY5OEI4NjgxMEQ0NEQ5NDAwRDhEMDFCIC8qIFN0cmluZ0J1aWxkZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4Njk4QkIz
OTEwRDg2QkFGMDBEOEQwMUIgLyogVVN0cmluZ0ltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2OThCQjM3MTBEODZCQUYwMEQ4RDAxQiAvKiBVU3Ry
aW5nSW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTg2OUQwNEFGMTE5M0I1NEQwMDgwMzQ3NSAvKiBDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjlE
MDRBRTExOTNCNTREMDA4MDM0NzUgLyogQ2FjaGVkVHJhbnNjZW5kZW50YWxGdW5jdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2OUVCQ0I3
MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjlFQkNCNjBFOEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0
VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTg2QTkwRUQwMEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QTkwRUNGMEVFN0Q1MUYwMEFC
MzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCAqLzsgfTsKIAkJODZBREQxNDUwRkRERUE5ODAwMDZF
RUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkFERDE0MzBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIu
aCAqLzsgfTsKQEAgLTc2Myw2ICs3NjQsNyBAQAogCQk4NjhCRkE1RjExN0QwNDgyMDBCOTA4QjEg
LyogU3RhdGljQ29uc3RydWN0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0YXRpY0NvbnN0cnVjdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Njk4
Qjg2ODEwRDQ0RDk0MDBEOEQwMUIgLyogU3RyaW5nQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHJpbmdCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2OThCQjM3MTBEODZCQUYwMEQ4RDAxQiAvKiBVU3RyaW5nSW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVU3RyaW5nSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4NjlEMDRBRTExOTNCNTREMDA4MDM0NzUgLyogQ2FjaGVkVHJhbnNjZW5k
ZW50YWxGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRU
cmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
OUVCQ0I2MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlc3VsdFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODZBOTBFQ0YwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQXJpdGhtZXRpYy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUREMTQzMEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUk12N0Fzc2VtYmxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUyMyw2ICsxNTI1LDcgQEAKIAkJ
CQk3MDRGRDM1MzA1Njk3RTZEMDAzREJFRDkgLyogQm9vbGVhbk9iamVjdC5oICovLAogCQkJCUJD
Nzk1MjM0MEUxNUVCNTYwMEE4OThBQiAvKiBCb29sZWFuUHJvdG90eXBlLmNwcCAqLywKIAkJCQlC
Qzc5NTIzNTBFMTVFQjU2MDBBODk4QUIgLyogQm9vbGVhblByb3RvdHlwZS5oICovLAorCQkJCTg2
OUQwNEFFMTE5M0I1NEQwMDgwMzQ3NSAvKiBDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmgg
Ki8sCiAJCQkJQkNBNjJERkUwRTI4MjYyMzAwMDRGMzBEIC8qIENhbGxEYXRhLmNwcCAqLywKIAkJ
CQkxNDVDNTA3RjBEOURGNjNCMDA4OEY2QjkgLyogQ2FsbERhdGEuaCAqLywKIAkJCQlCQzZBQUFF
NDBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggKi8sCkBAIC0yMTI2LDYgKzIxMjksNyBA
QAogCQkJCUE3NkM1MTc2MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1
bmtKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBU
aHVua0dlbmVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2OUQwNEFGMTE5M0I1NEQwMDgw
MzQ3NSAvKiBDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHJhbnNjZW5kZW50YWxGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHJhbnNjZW5kZW50
YWxGdW5jdGlvbi5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
Q2FjaGVkVHJhbnNjZW5kZW50YWxGdW5jdGlvbl9oCisjZGVmaW5lIENhY2hlZFRyYW5zY2VuZGVu
dGFsRnVuY3Rpb25faAorCisjaW5jbHVkZSAiSlNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworZXh0ZXJuIGNvbnN0IGRvdWJsZSBOYU47CisKK3R5cGVkZWYgZG91YmxlICgqVHJhbnNjZW5k
ZW50YWxGdW5jdGlvblB0cikoZG91YmxlKTsKKworLy8gQ2FjaGVkVHJhbnNjZW5kZW50YWxGdW5j
dGlvbiBwcm92aWRlcyBhIGdlbmVyaWMgbWVjaGFuaXNtIHRvIGNhY2hlIHJlc3VsdHMKKy8vIGZv
ciBwdXJlIGZ1bmN0aW9ucyB3aXRoIHRoZSBzaWduYXR1cmUgImRvdWJsZSBmdW5jKGRvdWJsZSki
LCBhbmQgd2hlcmUgTmFOCisvLyBtYXBzIHRvIE5hTi4KK3RlbXBsYXRlPFRyYW5zY2VuZGVudGFs
RnVuY3Rpb25QdHIgb3JpZ25hbEZ1bmN0aW9uPgorY2xhc3MgQ2FjaGVkVHJhbnNjZW5kZW50YWxG
dW5jdGlvbiB7CisgICAgc3RydWN0IENhY2hlRW50cnkgeworICAgICAgICBkb3VibGUgb3BlcmFu
ZDsKKyAgICAgICAgZG91YmxlIHJlc3VsdDsKKyAgICB9OworCitwdWJsaWM6CisgICAgQ2FjaGVk
VHJhbnNjZW5kZW50YWxGdW5jdGlvbigpCisgICAgICAgIDogbV9jYWNoZSgwKQorICAgIHsKKyAg
ICB9CisKKyAgICB+Q2FjaGVkVHJhbnNjZW5kZW50YWxGdW5jdGlvbigpCisgICAgeworICAgICAg
ICBpZiAobV9jYWNoZSkKKyAgICAgICAgICAgIGZhc3RGcmVlKG1fY2FjaGUpOworICAgIH0KKwor
ICAgIEpTVmFsdWUgb3BlcmF0b3IoKSAoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgb3BlcmFuZCkK
KyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9jYWNoZSkpCisgICAgICAgICAgICBpbml0
aWFsaXplKCk7CisgICAgICAgIENhY2hlRW50cnkqIGVudHJ5ID0gJm1fY2FjaGVbaGFzaChvcGVy
YW5kKV07CisKKyAgICAgICAgaWYgKGVudHJ5LT5vcGVyYW5kID09IG9wZXJhbmQpCisgICAgICAg
ICAgICByZXR1cm4ganNEb3VibGVOdW1iZXIoZXhlYywgZW50cnktPnJlc3VsdCk7CisgICAgICAg
IGRvdWJsZSByZXN1bHQgPSBvcmlnbmFsRnVuY3Rpb24ob3BlcmFuZCk7CisgICAgICAgIGVudHJ5
LT5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAgICAgZW50cnktPnJlc3VsdCA9IHJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4ZWMsIHJlc3VsdCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpCisgICAgeworICAgICAgICAvLyBMYXppbHkgYWxs
b2NhdGUgdGhlIHRhYmxlLCBwb3B1bGF0ZSB3aXRoIE5hTi0+TmFOIG1hcHBpbmcuCisgICAgICAg
IG1fY2FjaGUgPSBzdGF0aWNfY2FzdDxDYWNoZUVudHJ5Kj4oZmFzdE1hbGxvYyhzX2NhY2hlU2l6
ZSAqIHNpemVvZihDYWNoZUVudHJ5KSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4
IDwgc19jYWNoZVNpemU7ICsreCkgeworICAgICAgICAgICAgbV9jYWNoZVt4XS5vcGVyYW5kID0g
TmFOOworICAgICAgICAgICAgbV9jYWNoZVt4XS5yZXN1bHQgPSBOYU47CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChkb3VibGUgZCkKKyAgICB7CisgICAgICAg
IHVuaW9uIGRvdWJsZUFuZFVJbnQ2NCB7CisgICAgICAgICAgICBkb3VibGUgZDsKKyAgICAgICAg
ICAgIHVpbnQzMl90IGlzWzJdOworICAgICAgICB9IHU7CisgICAgICAgIHUuZCA9IGQ7CisKKyAg
ICAgICAgdW5zaWduZWQgeCA9IHUuaXNbMF0gXiB1LmlzWzFdOworICAgICAgICB4ID0gKHggPj4g
MjApIF4gKHggPj4gOCk7CisgICAgICAgIHJldHVybiB4ICYgKHNfY2FjaGVTaXplIC0gMSk7Cisg
ICAgfQorCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfY2FjaGVTaXplID0gMHgxMDAwOwor
ICAgIENhY2hlRW50cnkqIG1fY2FjaGU7Cit9OworCit9CisKKyNlbmRpZiAvLyBDYWNoZWRUcmFu
c2NlbmRlbnRhbEZ1bmN0aW9uX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuaAkocmV2aXNpb24gNTg5MjUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWZuZGVmIEpTR2xvYmFs
RGF0YV9oCiAjZGVmaW5lIEpTR2xvYmFsRGF0YV9oCiAKKyNpbmNsdWRlICJDYWNoZWRUcmFuc2Nl
bmRlbnRhbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiRGF0
ZUluc3RhbmNlQ2FjaGUuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCkBAIC0y
MTIsNiArMjEzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFRocmVhZElkZW50aWZpZXIg
ZXhjbHVzaXZlVGhyZWFkOwogI2VuZGlmCiAKKyAgICAgICAgQ2FjaGVkVHJhbnNjZW5kZW50YWxG
dW5jdGlvbjxzaW4+IGNhY2hlZFNpbjsKKwogICAgICAgICB2b2lkIHJlc2V0RGF0ZUNhY2hlKCk7
CiAKICAgICAgICAgdm9pZCBzdGFydFNhbXBsaW5nKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hdGhPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWF0aE9iamVjdC5jcHAJKHJldmlzaW9uIDU4OTI1KQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXRoT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3IEBAIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUm91bmQKIAogSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1bmNTaW4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGpzRG91YmxlTnVtYmVyKGV4
ZWMsIHNpbihhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgcmV0dXJuIGV4ZWMtPmds
b2JhbERhdGEoKS5jYWNoZWRTaW4oZXhlYywgYXJncy5hdCgwKS50b051bWJlcihleGVjKSk7CiB9
CiAKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jU3FydChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA1ODkyNSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0
Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NTksNiArODU5LDcgQEAKICNkZWZpbmUgRU5BQkxF
X0dMT0JBTF9GQVNUTUFMTE9DX05FVyAxCiAjZW5kaWYKIAorI2RlZmluZSBFTkFCTEVfREVCVUdf
V0lUSF9CUkVBS1BPSU5UIDAKICNkZWZpbmUgRU5BQkxFX1NBTVBMSU5HX0NPVU5URVJTIDAKICNk
ZWZpbmUgRU5BQkxFX1NBTVBMSU5HX0ZMQUdTIDAKICNkZWZpbmUgRU5BQkxFX09QQ09ERV9TQU1Q
TElORyAwCg==
</data>
<flag name="review"
          id="39498"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>