<?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>15703</bug_id>
          
          <creation_ts>2007-10-25 23:24:43 -0700</creation_ts>
          <short_desc>fix numeric functions -- improve correctness and speed</short_desc>
          <delta_ts>2007-10-26 01:04:03 -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>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>59507</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-25 23:24:43 -0700</bug_when>
    <thetext>I noticed that our toInteger function was not doing what the specification said it should. And that toInt32 wasn&apos;t optimizing enough. So I went and optimized both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59516</commentid>
    <comment_count>1</comment_count>
      <attachid>16873</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-26 00:05:35 -0700</bug_when>
    <thetext>Created attachment 16873
patch with detailed change log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59519</commentid>
    <comment_count>2</comment_count>
      <attachid>16873</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-26 00:33:18 -0700</bug_when>
    <thetext>Comment on attachment 16873
patch with detailed change log

r=me with one comment:

please consider using trunc(d) instead of copysign(floor(fabs(d))). 

They should do the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59521</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-26 01:04:03 -0700</bug_when>
    <thetext>Committed revision 27095.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16873</attachid>
            <date>2007-10-26 00:05:35 -0700</date>
            <delta_ts>2007-10-26 00:33:18 -0700</delta_ts>
            <desc>patch with detailed change log</desc>
            <filename>NumberRoundingPatch.txt</filename>
            <type>text/plain</type>
            <size>21928</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MDg5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMDctMTAtMjUgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU3MDMKKyAgICAgICAgICBmaXggbnVtZXJpYyBmdW5jdGlvbnMgLS0gaW1wcm92ZSBjb3JyZWN0
bmVzcyBhbmQgc3BlZWQKKworICAgICAgICBHaXZlcyBhYm91dCAxJSBnYWluIG9uIFN1blNwaWRl
ci4KKworICAgICAgICAqIGtqcy92YWx1ZS5oOiBBZGRlZCB0b0ludGVnZXJQcmVzZXJ2ZU5hbiwg
cmVtb3ZlZCB0b1VJbnQxNi4KKyAgICAgICAgKEtKUzo6SlNWYWx1ZTo6dG9JbnQzMik6IENoYW5n
ZWQgdG8gY2FsbCBnZXRUcnVuY2F0ZWRJbnQzMiBpbiBhIHdheSB0aGF0IHdvcmtzCisgICAgICAg
IHdpdGggYm90aCBpbW1lZGlhdGUgYW5kIG51bWJlciB2YWx1ZXMuCisgICAgICAgIChLSlM6OkpT
VmFsdWU6OnRvVUludDMyKTogRGl0dG8uCisgICAgICAgICoga2pzL3ZhbHVlLmNwcDoKKyAgICAg
ICAgKEtKUzo6SlNWYWx1ZTo6dG9JbnRlZ2VyKTogTW92ZWQgdGhlIGxvZ2ljIGZyb20gcm91bmRW
YWx1ZSBoZXJlLCB3aXRoIGEgY291cGxlCisgICAgICAgIGRpZmZlcmVuY2VzLiBPbmUgaXMgdGhh
dCBpdCBub3cgY29ycmVjdGx5IHJldHVybnMgMCBmb3IgTmFOLCBhbmQgYW5vdGhlciBpcyB0aGF0
CisgICAgICAgIHRoZXJlJ3Mgbm8gc3BlY2lhbCBjYXNlIGZvciAwIG9yIGluZmluaXR5LCBzaW5j
ZSB0aGUgZ2VuZXJhbCBjYXNlIGFscmVhZHkgaGFuZGxlcworICAgICAgICB0aG9zZSBjb3JyZWN0
bHkuCisgICAgICAgIChLSlM6OkpTVmFsdWU6OnRvSW50ZWdlclByZXNlcnZlTmFOKTogQWRkZWQu
IExpa2UgdG9JbnRlZ2VyLCBidXQgd2l0aG91dCB0aGUKKyAgICAgICAgY2hlY2sgZm9yIE5hTi4K
KyAgICAgICAgKEtKUzo6SlNWYWx1ZTo6dG9JbnQzMlNsb3dDYXNlKTogQ2FsbCB0b051bWJlciBp
bnN0ZWFkIG9mIHJvdW5kVmFsdWUuIFRoZQorICAgICAgICB0cnVuY2F0aW9uIGRvbmUgYnkgdGhl
IHR5cGVjYXN0IGFscmVhZHkgZG9lcyB0aGUgbmVjZXNzYXJ5IHRydW5jYXRpb24gdGhhdAorICAg
ICAgICByb3VuZFZhbHVlIHdhcyBkb2luZy4KKyAgICAgICAgKEtKUzo6SlNWYWx1ZTo6dG9VSW50
MzJTbG93Q2FzZSk6IERpdHRvLgorICAgICAgICAoS0pTOjpKU1ZhbHVlOjp0b1VJbnQxNik6IFJl
bW92ZWQuCisKKyAgICAgICAgKiBranMvaW50ZXJuYWwuaDogUmVtb3ZlZCByb3VuZFZhbHVlLgor
ICAgICAgICAqIGtqcy9pbnRlcm5hbC5jcHA6IERpdHRvLgorCisgICAgICAgICoga2pzL2FycmF5
X29iamVjdC5jcHA6IChLSlM6OkFycmF5UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbik6IFJlbW92
ZSB1bm5lZWRlZAorICAgICAgICBjb2RlIHRvIGhhbmRsZSBOYU4gaW4gQXJyYXkuc2xpY2U7IHRv
SW50ZWdlciBub3cgbmV2ZXIgcmV0dXJucyBOYU4gYXMgc3BlY2lmaWVkLgorCisgICAgICAgICog
a2pzL2RhdGVfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6ZmlsbFN0cnVjdHVyZXNVc2luZ1Rp
bWVBcmdzKTogUmVwbGFjZWQgY2FsbCB0byByb3VuZFZhbHVlIHdpdGggYSBjYWxsIHRvCisgICAg
ICAgIHRvTnVtYmVyIGFzIHNwZWNpZmllZC4KKyAgICAgICAgKEtKUzo6RGF0ZVByb3RvRnVuYzo6
Y2FsbEFzRnVuY3Rpb24pOiBJbiBTZXRUaW1lIGNhc2UsIHJlcGxhY2VkIGNhbGwgdG8gcm91bmRW
YWx1ZQorICAgICAgICB3aXRoIGEgY2FsbCB0byB0b051bWJlciBhbmQgdGltZUNsaXAgYXMgc3Bl
Y2lmaWVkLgorICAgICAgICAoS0pTOjpEYXRlT2JqZWN0SW1wOjpjb25zdHJ1Y3QpOiBSZW1vdmVk
IHVubmVjZXNzYXJ5IGNoZWNrcyBvZiBudW1BcmdzIGluIGNhc2VzCisgICAgICAgIHdoZXJlIHRo
ZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRvSW50MzIgKHJldHVybmluZyAwKSB3YXMgYWxyZWFkeSBj
b3JyZWN0LiBSZXBsYWNlZAorICAgICAgICBjYWxsIHRvIHJvdW5kVmFsdWUgd2l0aCBhIGNhbGwg
dG8gdG9OdW1iZXIgYXMgc3BlY2lmaWVkLgorICAgICAgICAoS0pTOjpEYXRlT2JqZWN0RnVuY0lt
cDo6Y2FsbEFzRnVuY3Rpb24pOiBEaXR0by4KKworICAgICAgICAqIGtqcy9tYXRoX29iamVjdC5j
cHA6IChNYXRoRnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24pOiBSZW1vdmVkIHVubmVjZXNzYXJ5IHNw
ZWNpYWwKKyAgICAgICAgY2FzZXMgZm9yIHRoZSBwb3cgZnVuY3Rpb24gdGhhdCB0aGUgbGlicmFy
eSBhbHJlYWR5IGhhbmRsZXMgY29ycmVjdGx5LgorCisgICAgICAgICoga2pzL251bWJlcl9vYmpl
Y3QuY3BwOiAoTnVtYmVyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbik6IENoYW5nZWQgVG9TdHJp
bmcgdG8KKyAgICAgICAgY2FsbCB0b0ludGVnZXJQcmVzZXJ2ZU5hTiwgc28gd2UgY2FuIGNvbnRp
bnVlIHRvIGhhbmRsZSB0aGUgTmFOIGNhc2UgZGlmZmVyZW50bHkuCisgICAgICAgIFRoZSByZWFs
IHRvSW50ZWdlciBub3cgcmV0dXJucyAwIGZvciBOYU4uIFRvb2sgb3V0IHVubmVlZGVkIHNwZWNp
YWwgY2FzZSBpbgorICAgICAgICBUb0ZpeGVkIGZvciB1bmRlZmluZWQ7IHdhcyBvbmx5IG5lZWRl
ZCBiZWNhdXNlIG91ciB0b0ludGVnZXIgd2FzIHdyb25nLiBTYW1lCisgICAgICAgIHRoaW5nIGlu
IFRvRXhwb25lbnRpYWwuIENoYW5nZWQgVG9QcmVjaXNpb24gdG8gY2FsbCB0b0ludGVnZXJQcmVz
ZXJ2ZU5hTi4KKworICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtK
Uzo6U3RyaW5nUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbik6IFRvb2sgb3V0IENoYXJBdCBhbmQg
Q2hhckNvZGVBdCBzcGVjaWFsCisgICAgICAgIGNhc2VzIGZvciB1bmRlZmluZWQgdGhhdCB3ZXJl
IG9ubHkgbmVlZGVkIGJlY2F1c2UgdG9JbnRlZ2VyIHdhcyB3cm9uZy4gU2FtZSBpbgorICAgICAg
ICBJbmRleE9mLCBhbmQgd2FzIGFibGUgdG8gcmVtb3ZlIHNvbWUgc3BlY2lhbCBjYXNlcy4gSW4g
TGFzdEluZGV4T2YsIHVzZWQKKyAgICAgICAgdG9JbnRlZ2VyUHJlc2VydmVOYU4sIGJ1dCB3YXMg
YWJsZSB0byByZW1vdmUgc29tZSBzcGVjaWFsIGNhc2VzIHRoZXJlIHRvby4KKyAgICAgICAgQ2hh
bmdlZCBTdWJzdHIgaW1wbGVtZW50YXRpb24gdG8gcHJlc2VydmUgY29ycmVjdCBiZWhhdmlvciB3
aXRoIHRoZSBjaGFuZ2UKKyAgICAgICAgdG8gdG9JbnRlZ2VyIGFuZCBtYXRjaCB0aGUgc3BlY2lm
aWNhdGlvbi4gQWxzbyBtYWRlIHN1cmUgd2Ugd2VyZW4ndCBjb252ZXJ0aW5nCisgICAgICAgIGFu
IG91dCBvZiByYW5nZSBkb3VibGUgdG8gYW4gaW50LgorICAgICAgICAoS0pTOjpTdHJpbmdPYmpl
Y3RGdW5jSW1wOjpjYWxsQXNGdW5jdGlvbik6IENoYW5nZWQgY29uc3RydWN0b3IgdG8ganVzdCB1
c2UKKyAgICAgICAgdG9VSW50MzIsIGJlY2F1c2UgdHJ1bmNhdGluZyB0b1VJbnQzMiB0byAxNiBi
aXRzIGlzIHRoZSBzYW1lIHRoaW5nIGFuZCB0aGVyZSdzCisgICAgICAgIG5vIHJlYXNvbiB0byBo
YXZlIHRvVUludDE2IGFzIGEgc2Vjb25kLCBsZXNzLW9wdGltaXplZCBmdW5jdGlvbiB0aGF0J3Mg
b25seQorICAgICAgICBjYWxsZWQgYXQgdGhpcyBvbmUgY2FsbCBzaXRlLgorCiAyMDA3LTEwLTI1
ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgT2xpdmVyLgpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAJKHJldmlzaW9u
IDI3MDg4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1MywzMiArMjUzLDMwIEBAIEpTVmFsdWUqIEFycmF5UHJvdG9GdW5jOjpjYWxs
QXNGdW5jdGlvbigKICAgICAvLyBXZSByZXR1cm4gYSBuZXcgYXJyYXkKICAgICBKU09iamVjdCAq
cmVzT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oZXhlYy0+bGV4aWNhbEludGVycHJldGVy
KCktPmJ1aWx0aW5BcnJheSgpLT5jb25zdHJ1Y3QoZXhlYyxMaXN0OjplbXB0eSgpKSk7CiAgICAg
cmVzdWx0ID0gcmVzT2JqOwotICAgIGRvdWJsZSBiZWdpbiA9IDA7Ci0gICAgaWYgKCFhcmdzWzBd
LT5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgIGJlZ2luID0gYXJnc1swXS0+dG9JbnRlZ2VyKGV4
ZWMpOwotICAgICAgICBpZiAoYmVnaW4gPj0gMCkgeyAvLyBmYWxzZSBmb3IgTmFOCi0gICAgICAg
ICAgICBpZiAoYmVnaW4gPiBsZW5ndGgpCi0gICAgICAgICAgICAgICAgYmVnaW4gPSBsZW5ndGg7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBiZWdpbiArPSBsZW5ndGg7Ci0gICAgICAg
ICAgICBpZiAoIShiZWdpbiA+PSAwKSkgLy8gdHJ1ZSBmb3IgTmFOCi0gICAgICAgICAgICAgICAg
YmVnaW4gPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIGRvdWJsZSBlbmQgPSBsZW5ndGg7Ci0g
ICAgaWYgKCFhcmdzWzFdLT5pc1VuZGVmaW5lZCgpKSB7CisgICAgZG91YmxlIGJlZ2luID0gYXJn
c1swXS0+dG9JbnRlZ2VyKGV4ZWMpOworICAgIGlmIChiZWdpbiA+PSAwKSB7CisgICAgICBpZiAo
YmVnaW4gPiBsZW5ndGgpCisgICAgICAgIGJlZ2luID0gbGVuZ3RoOworICAgIH0gZWxzZSB7Cisg
ICAgICBiZWdpbiArPSBsZW5ndGg7CisgICAgICBpZiAoYmVnaW4gPCAwKQorICAgICAgICBiZWdp
biA9IDA7CisgICAgfQorICAgIGRvdWJsZSBlbmQ7CisgICAgaWYgKGFyZ3NbMV0tPmlzVW5kZWZp
bmVkKCkpCisgICAgICBlbmQgPSBsZW5ndGg7CisgICAgZWxzZSB7CiAgICAgICBlbmQgPSBhcmdz
WzFdLT50b0ludGVnZXIoZXhlYyk7Ci0gICAgICBpZiAoZW5kIDwgMCkgeyAvLyBmYWxzZSBmb3Ig
TmFOCisgICAgICBpZiAoZW5kIDwgMCkgewogICAgICAgICBlbmQgKz0gbGVuZ3RoOwogICAgICAg
ICBpZiAoZW5kIDwgMCkKICAgICAgICAgICBlbmQgPSAwOwogICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCEoZW5kIDw9IGxlbmd0aCkpIC8vIHRydWUgZm9yIE5hTgorICAgICAgICBpZiAoZW5k
ID4gbGVuZ3RoKQogICAgICAgICAgIGVuZCA9IGxlbmd0aDsKICAgICAgIH0KICAgICB9CiAKLSAg
ICAvL3ByaW50ZiggIlNsaWNpbmcgZnJvbSAlZCB0byAlZCBcbiIsIGJlZ2luLCBlbmQgKTsKICAg
ICBpbnQgbiA9IDA7CiAgICAgaW50IGIgPSBzdGF0aWNfY2FzdDxpbnQ+KGJlZ2luKTsKICAgICBp
bnQgZSA9IHN0YXRpY19jYXN0PGludD4oZW5kKTsKQEAgLTU0OSw3ICs1NDcsNyBAQCBKU1ZhbHVl
KiBBcnJheVByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oCiAgICAgICAvLyBEb2N1bWVudGF0aW9u
OiBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0XzEu
NV9SZWZlcmVuY2U6R2xvYmFsX09iamVjdHM6QXJyYXk6bGFzdEluZGV4T2YgCiAKICAgICBpbnQg
aW5kZXggPSBsZW5ndGggLSAxOwotICAgIGRvdWJsZSBkID0gYXJnc1sxXS0+dG9JbnRlZ2VyKGV4
ZWMpOworICAgIGRvdWJsZSBkID0gYXJnc1sxXS0+dG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7
CiAKICAgICBpZiAoZCA8IDApIHsKICAgICAgICAgZCArPSBsZW5ndGg7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9kYXRlX29iamVjdC5jcHAJKHJldmlzaW9uIDI3MDg4KQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL2RhdGVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDcgKzI3NSw3IEBAIHN0
YXRpYyB2b2lkIGZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncygKICAgICAKICAgICAvLyBtaWxs
aXNlY29uZHMKICAgICBpZiAoaWR4IDwgbnVtQXJncykgewotICAgICAgICBtaWxsaXNlY29uZHMg
Kz0gcm91bmRWYWx1ZShleGVjLCBhcmdzW2lkeF0pOworICAgICAgICBtaWxsaXNlY29uZHMgKz0g
YXJnc1tpZHhdLT50b051bWJlcihleGVjKTsKICAgICB9IGVsc2UgewogICAgICAgICBtaWxsaXNl
Y29uZHMgKz0gKm1zOwogICAgIH0KQEAgLTU1MSw3ICs1NTEsNyBAQCBKU1ZhbHVlICpEYXRlUHJv
dG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFCiAgIGNhc2UgR2V0VGltZXpvbmVPZmZzZXQ6CiAgICAg
cmV0dXJuIGpzTnVtYmVyKC1nbXRvZmZzZXQodCkgLyBtaW51dGVzUGVySG91cik7CiAgIGNhc2Ug
U2V0VGltZToKLSAgICBtaWxsaSA9IHJvdW5kVmFsdWUoZXhlYywgYXJnc1swXSk7CisgICAgbWls
bGkgPSB0aW1lQ2xpcChhcmdzWzBdLT50b051bWJlcihleGVjKSk7CiAgICAgcmVzdWx0ID0ganNO
dW1iZXIobWlsbGkpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7
CiAgICAgYnJlYWs7CkBAIC02NDgsMTEgKzY0OCwxMSBAQCBKU09iamVjdCAqRGF0ZU9iamVjdElt
cDo6Y29uc3RydWN0KEV4ZWNTCiAgICAgICB0LnllYXIgPSAoeWVhciA+PSAwICYmIHllYXIgPD0g
OTkpID8geWVhciA6IHllYXIgLSAxOTAwOwogICAgICAgdC5tb250aCA9IGFyZ3NbMV0tPnRvSW50
MzIoZXhlYyk7CiAgICAgICB0Lm1vbnRoRGF5ID0gKG51bUFyZ3MgPj0gMykgPyBhcmdzWzJdLT50
b0ludDMyKGV4ZWMpIDogMTsKLSAgICAgIHQuaG91ciA9IChudW1BcmdzID49IDQpID8gYXJnc1sz
XS0+dG9JbnQzMihleGVjKSA6IDA7Ci0gICAgICB0Lm1pbnV0ZSA9IChudW1BcmdzID49IDUpID8g
YXJnc1s0XS0+dG9JbnQzMihleGVjKSA6IDA7Ci0gICAgICB0LnNlY29uZCA9IChudW1BcmdzID49
IDYpID8gYXJnc1s1XS0+dG9JbnQzMihleGVjKSA6IDA7CisgICAgICB0LmhvdXIgPSBhcmdzWzNd
LT50b0ludDMyKGV4ZWMpOworICAgICAgdC5taW51dGUgPSBhcmdzWzRdLT50b0ludDMyKGV4ZWMp
OworICAgICAgdC5zZWNvbmQgPSBhcmdzWzVdLT50b0ludDMyKGV4ZWMpOwogICAgICAgdC5pc0RT
VCA9IC0xOwotICAgICAgZG91YmxlIG1zID0gKG51bUFyZ3MgPj0gNykgPyByb3VuZFZhbHVlKGV4
ZWMsIGFyZ3NbNl0pIDogMDsKKyAgICAgIGRvdWJsZSBtcyA9IChudW1BcmdzID49IDcpID8gYXJn
c1s2XS0+dG9OdW1iZXIoZXhlYykgOiAwOwogICAgICAgdmFsdWUgPSBncmVnb3JpYW5EYXRlVGlt
ZVRvTVModCwgbXMsIGZhbHNlKTsKICAgICB9CiAgIH0KQEAgLTcwMiwxMCArNzAyLDEwIEBAIEpT
VmFsdWUgKkRhdGVPYmplY3RGdW5jSW1wOjpjYWxsQXNGdW5jdGkKICAgICB0LnllYXIgPSAoeWVh
ciA+PSAwICYmIHllYXIgPD0gOTkpID8geWVhciA6IHllYXIgLSAxOTAwOwogICAgIHQubW9udGgg
PSBhcmdzWzFdLT50b0ludDMyKGV4ZWMpOwogICAgIHQubW9udGhEYXkgPSAobiA+PSAzKSA/IGFy
Z3NbMl0tPnRvSW50MzIoZXhlYykgOiAxOwotICAgIHQuaG91ciA9IChuID49IDQpID8gYXJnc1sz
XS0+dG9JbnQzMihleGVjKSA6IDA7Ci0gICAgdC5taW51dGUgPSAobiA+PSA1KSA/IGFyZ3NbNF0t
PnRvSW50MzIoZXhlYykgOiAwOwotICAgIHQuc2Vjb25kID0gKG4gPj0gNikgPyBhcmdzWzVdLT50
b0ludDMyKGV4ZWMpIDogMDsKLSAgICBkb3VibGUgbXMgPSAobiA+PSA3KSA/IHJvdW5kVmFsdWUo
ZXhlYywgYXJnc1s2XSkgOiAwOworICAgIHQuaG91ciA9IGFyZ3NbM10tPnRvSW50MzIoZXhlYyk7
CisgICAgdC5taW51dGUgPSBhcmdzWzRdLT50b0ludDMyKGV4ZWMpOworICAgIHQuc2Vjb25kID0g
YXJnc1s1XS0+dG9JbnQzMihleGVjKTsKKyAgICBkb3VibGUgbXMgPSAobiA+PSA3KSA/IGFyZ3Nb
Nl0tPnRvTnVtYmVyKGV4ZWMpIDogMDsKICAgICByZXR1cm4ganNOdW1iZXIoZ3JlZ29yaWFuRGF0
ZVRpbWVUb01TKHQsIG1zLCB0cnVlKSk7CiAgIH0KIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9pbnRlcm5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFs
LmNwcAkocmV2aXNpb24gMjcwODgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsMTUgKzI1MCw2IEBAIGJvb2wgSW50ZXJuYWxGdW5jdGlv
bkltcDo6aW1wbGVtZW50c0hhc0kKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IGdsb2JhbCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotZG91Ymxl
IHJvdW5kVmFsdWUoRXhlY1N0YXRlICpleGVjLCBKU1ZhbHVlICp2KQotewotICBkb3VibGUgZCA9
IHYtPnRvTnVtYmVyKGV4ZWMpOwotICBkb3VibGUgYWQgPSBmYWJzKGQpOwotICBpZiAoYWQgPT0g
MCB8fCBpc05hTihkKSB8fCBpc0luZihkKSkKLSAgICByZXR1cm4gZDsKLSAgcmV0dXJuIGNvcHlz
aWduKGZsb29yKGFkKSwgZCk7Ci19Ci0KICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8c3RkaW8u
aD4KIHZvaWQgcHJpbnRJbmZvKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgY2hhciAqcywgSlNWYWx1
ZSAqbywgaW50IGxpbmVubykKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCShyZXZpc2lvbiAyNzA4
OCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsOSArMTQ1LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgYm9vbCBpc0Fib3J0ZWQ7CiAgIH07
CiAKLSAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciB0b0ludGVnZXIsIHRvSW50MzIsIHRvVUludDMy
IGFuZCB0b1VJbnQxNgotICBkb3VibGUgcm91bmRWYWx1ZShFeGVjU3RhdGUgKiwgSlNWYWx1ZSAq
KTsKLQogI2lmbmRlZiBOREVCVUcKICAgdm9pZCBwcmludEluZm8oRXhlY1N0YXRlICpleGVjLCBj
b25zdCBjaGFyICpzLCBKU1ZhbHVlICosIGludCBsaW5lbm8gPSAtMSk7CiAjZW5kaWYKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9tYXRoX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmNwcAkocmV2aXNpb24gMjcwODgpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvbWF0aF9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTIgKzIw
Miw4IEBAIEpTVmFsdWUgKk1hdGhGdW5jSW1wOjpjYWxsQXNGdW5jdGlvbihFeGUKICAgICAvLyBF
Q01BIDE1LjguMi4xLjEzICg6OnBvdyB0YWtlcyBjYXJlIG9mIG1vc3Qgb2YgdGhlIGNyaXRlcmEp
CiAgICAgaWYgKGlzTmFOKGFyZzIpKQogICAgICAgcmVzdWx0ID0gTmFOOwotICAgIGVsc2UgaWYg
KGlzTmFOKGFyZykgJiYgYXJnMiAhPSAwKQorICAgIGVsc2UgaWYgKGlzSW5mKGFyZzIpICYmIGZh
YnMoYXJnKSA9PSAxKQogICAgICAgcmVzdWx0ID0gTmFOOwotICAgIGVsc2UgaWYgKGZhYnMoYXJn
KSA9PSAxICYmIGlzSW5mKGFyZzIpKQotICAgICAgcmVzdWx0ID0gTmFOOwotICAgIGVsc2UgaWYg
KGFyZzIgPT0gMCAmJiBhcmcgIT0gMCkKLSAgICAgIHJlc3VsdCA9IDE7CiAgICAgZWxzZQogICAg
ICAgcmVzdWx0ID0gOjpwb3coYXJnLCBhcmcyKTsKICAgICBicmVhazsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvbnVtYmVyX29iamVjdC5jcHAJKHJldmlzaW9uIDI3MDg4KQorKysgSmF2YVNjcmlwdENv
cmUva2pzL251bWJlcl9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcg
QEAgSlNWYWx1ZSAqTnVtYmVyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbgogICBjYXNlIFRvU3Ry
aW5nOiB7CiAgICAgZG91YmxlIGRyYWRpeCA9IDEwOwogICAgIGlmICghYXJncy5pc0VtcHR5KCkp
Ci0gICAgICBkcmFkaXggPSBhcmdzWzBdLT50b0ludGVnZXIoZXhlYyk7CisgICAgICBkcmFkaXgg
PSBhcmdzWzBdLT50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsKICAgICBpZiAoZHJhZGl4ID49
IDIgJiYgZHJhZGl4IDw9IDM2ICYmIGRyYWRpeCAhPSAxMCkgeyAvLyBmYWxzZSBmb3IgTmFOCiAg
ICAgICBpbnQgcmFkaXggPSBzdGF0aWNfY2FzdDxpbnQ+KGRyYWRpeCk7CiAgICAgICBjb25zdCBj
aGFyIGRpZ2l0c1tdID0gIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CkBA
IC0yMDgsOSArMjA4LDcgQEAgSlNWYWx1ZSAqTnVtYmVyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlv
bgogICB7CiAgICAgICBKU1ZhbHVlICpmcmFjdGlvbkRpZ2l0cyA9IGFyZ3NbMF07CiAgICAgICBk
b3VibGUgZGYgPSBmcmFjdGlvbkRpZ2l0cy0+dG9JbnRlZ2VyKGV4ZWMpOwotICAgICAgaWYgKGZy
YWN0aW9uRGlnaXRzLT5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgZGYgPSAwOwotICAgICAg
aWYgKCEoZGYgPj0gMCAmJiBkZiA8PSAyMCkpIC8vIHRydWUgZm9yIE5hTgorICAgICAgaWYgKCEo
ZGYgPj0gMCAmJiBkZiA8PSAyMCkpCiAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
UmFuZ2VFcnJvciwgInRvRml4ZWQoKSBkaWdpdHMgYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDAg
YW5kIDIwIik7CiAgICAgICBpbnQgZiA9IChpbnQpZGY7CiAgICAgICAKQEAgLTI1NSw3ICsyNTMs
NyBAQCBKU1ZhbHVlICpOdW1iZXJQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uCiAgICAgICAKICAg
ICAgIEpTVmFsdWUgKmZyYWN0aW9uRGlnaXRzID0gYXJnc1swXTsKICAgICAgIGRvdWJsZSBkZiA9
IGZyYWN0aW9uRGlnaXRzLT50b0ludGVnZXIoZXhlYyk7Ci0gICAgICBpZiAoIWZyYWN0aW9uRGln
aXRzLT5pc1VuZGVmaW5lZCgpICYmICEoZGYgPj0gMCAmJiBkZiA8PSAyMCkpIC8vIHRydWUgZm9y
IE5hTgorICAgICAgaWYgKCEoZGYgPj0gMCAmJiBkZiA8PSAyMCkpCiAgICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgUmFuZ2VFcnJvciwgInRvRXhwb25lbnRpYWwoKSBhcmd1bWVudCBt
dXN0IGJldHdlZW4gMCBhbmQgMjAiKTsKICAgICAgIGludCBmID0gKGludClkZjsKICAgICAgIApA
QCAtMzQyLDcgKzM0MCw3IEBAIEpTVmFsdWUgKk51bWJlclByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rp
b24KICAgICAgIGludCBlID0gMDsKICAgICAgIFVTdHJpbmcgbTsKICAgICAgIAotICAgICAgZG91
YmxlIGRwID0gYXJnc1swXS0+dG9JbnRlZ2VyKGV4ZWMpOworICAgICAgZG91YmxlIGRwID0gYXJn
c1swXS0+dG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7CiAgICAgICBkb3VibGUgeCA9IHYtPnRv
TnVtYmVyKGV4ZWMpOwogICAgICAgaWYgKGlzTmFOKGRwKSB8fCBpc05hTih4KSB8fCBpc0luZih4
KSkKICAgICAgICAgICByZXR1cm4ganNTdHJpbmcodi0+dG9TdHJpbmcoZXhlYykpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAkocmV2aXNpb24gMjcwODgpCisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Nywy
MCArNDU3LDE2IEBAIEpTVmFsdWUqIFN0cmluZ1Byb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24KICAg
ICAvLyBoYW5kbGVkIGFib3ZlCiAgICAgYnJlYWs7CiAgIGNhc2UgQ2hhckF0OgotICAgIC8vIE90
aGVyIGJyb3dzZXJzIHRyZWF0IGFuIG9taXR0ZWQgcGFyYW1ldGVyIGFzIDAgcmF0aGVyIHRoYW4g
TmFOLgotICAgIC8vIFRoYXQgZG9lc24ndCBtYXRjaCB0aGUgRUNNQSBzdGFuZGFyZCwgYnV0IGlz
IG5lZWRlZCBmb3Igc2l0ZSBjb21wYXRpYmlsaXR5LgotICAgIGRwb3MgPSBhMC0+aXNVbmRlZmlu
ZWQoKSA/IDAgOiBhMC0+dG9JbnRlZ2VyKGV4ZWMpOwotICAgIGlmIChkcG9zID49IDAgJiYgZHBv
cyA8IGxlbikgLy8gZmFsc2UgZm9yIE5hTgorICAgIGRwb3MgPSBhMC0+dG9JbnRlZ2VyKGV4ZWMp
OworICAgIGlmIChkcG9zID49IDAgJiYgZHBvcyA8IGxlbikKICAgICAgIHUgPSBzLnN1YnN0cihz
dGF0aWNfY2FzdDxpbnQ+KGRwb3MpLCAxKTsKICAgICBlbHNlCiAgICAgICB1ID0gIiI7CiAgICAg
cmVzdWx0ID0ganNTdHJpbmcodSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgQ2hhckNvZGVBdDoKLSAg
ICAvLyBPdGhlciBicm93c2VycyB0cmVhdCBhbiBvbWl0dGVkIHBhcmFtZXRlciBhcyAwIHJhdGhl
ciB0aGFuIE5hTi4KLSAgICAvLyBUaGF0IGRvZXNuJ3QgbWF0Y2ggdGhlIEVDTUEgc3RhbmRhcmQs
IGJ1dCBpcyBuZWVkZWQgZm9yIHNpdGUgY29tcGF0aWJpbGl0eS4KLSAgICBkcG9zID0gYTAtPmlz
VW5kZWZpbmVkKCkgPyAwIDogYTAtPnRvSW50ZWdlcihleGVjKTsKLSAgICBpZiAoZHBvcyA+PSAw
ICYmIGRwb3MgPCBsZW4pIC8vIGZhbHNlIGZvciBOYU4KKyAgICBkcG9zID0gYTAtPnRvSW50ZWdl
cihleGVjKTsKKyAgICBpZiAoZHBvcyA+PSAwICYmIGRwb3MgPCBsZW4pCiAgICAgICByZXN1bHQg
PSBqc051bWJlcihzW3N0YXRpY19jYXN0PGludD4oZHBvcyldLnVuaWNvZGUoKSk7CiAgICAgZWxz
ZQogICAgICAgcmVzdWx0ID0ganNOYU4oKTsKQEAgLTQ4NSwzMSArNDgxLDIxIEBAIEpTVmFsdWUq
IFN0cmluZ1Byb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24KICAgfQogICBjYXNlIEluZGV4T2Y6CiAg
ICAgdTIgPSBhMC0+dG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGExLT5pc1VuZGVmaW5lZCgpKQor
ICAgIGRwb3MgPSBhMS0+dG9JbnRlZ2VyKGV4ZWMpOworICAgIGlmIChkcG9zIDwgMCkKICAgICAg
IGRwb3MgPSAwOwotICAgIGVsc2UgewotICAgICAgZHBvcyA9IGExLT50b0ludGVnZXIoZXhlYyk7
Ci0gICAgICBpZiAoZHBvcyA+PSAwKSB7IC8vIGZhbHNlIGZvciBOYU4KLSAgICAgICAgaWYgKGRw
b3MgPiBsZW4pCi0gICAgICAgICAgZHBvcyA9IGxlbjsKLSAgICAgIH0gZWxzZQotICAgICAgICBk
cG9zID0gMDsKLSAgICB9CisgICAgZWxzZSBpZiAoZHBvcyA+IGxlbikKKyAgICAgIGRwb3MgPSBs
ZW47CiAgICAgcmVzdWx0ID0ganNOdW1iZXIocy5maW5kKHUyLCBzdGF0aWNfY2FzdDxpbnQ+KGRw
b3MpKSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgTGFzdEluZGV4T2Y6CiAgICAgdTIgPSBhMC0+dG9T
dHJpbmcoZXhlYyk7CiAgICAgZCA9IGExLT50b051bWJlcihleGVjKTsKLSAgICBpZiAoYTEtPmlz
VW5kZWZpbmVkKCkgfHwgS0pTOjppc05hTihkKSkKKyAgICBkcG9zID0gYTEtPnRvSW50ZWdlclBy
ZXNlcnZlTmFOKGV4ZWMpOworICAgIGlmIChkcG9zIDwgMCkKKyAgICAgIGRwb3MgPSAwOworICAg
IGVsc2UgaWYgKCEoZHBvcyA8PSBsZW4pKSAvLyB0cnVlIGZvciBOYU4KICAgICAgIGRwb3MgPSBs
ZW47Ci0gICAgZWxzZSB7Ci0gICAgICBkcG9zID0gYTEtPnRvSW50ZWdlcihleGVjKTsKLSAgICAg
IGlmIChkcG9zID49IDApIHsgLy8gZmFsc2UgZm9yIE5hTgotICAgICAgICBpZiAoZHBvcyA+IGxl
bikKLSAgICAgICAgICBkcG9zID0gbGVuOwotICAgICAgfSBlbHNlCi0gICAgICAgIGRwb3MgPSAw
OwotICAgIH0KICAgICByZXN1bHQgPSBqc051bWJlcihzLnJmaW5kKHUyLCBzdGF0aWNfY2FzdDxp
bnQ+KGRwb3MpKSk7CiAgICAgYnJlYWs7CiAgIGNhc2UgTWF0Y2g6CkBAIC02NTgsMjIgKzY0NCwy
MCBAQCBKU1ZhbHVlKiBTdHJpbmdQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uCiAgICAgfQogICAg
IGJyZWFrOwogICBjYXNlIFN1YnN0cjogewotICAgIGRvdWJsZSBkID0gYTAtPnRvSW50ZWdlcihl
eGVjKTsKLSAgICBkb3VibGUgZDIgPSBhMS0+dG9JbnRlZ2VyKGV4ZWMpOwotICAgIGlmICghKGQg
Pj0gMCkpIHsgLy8gdHJ1ZSBmb3IgTmFOCi0gICAgICBkICs9IGxlbjsKLSAgICAgIGlmICghKGQg
Pj0gMCkpIC8vIHRydWUgZm9yIE5hTgotICAgICAgICBkID0gMDsKLSAgICB9Ci0gICAgaWYgKGlz
TmFOKGQyKSkKLSAgICAgIGQyID0gbGVuIC0gZDsKLSAgICBlbHNlIHsKLSAgICAgIGlmIChkMiA8
IDApCi0gICAgICAgIGQyID0gMDsKLSAgICAgIGlmIChkMiA+IGxlbiAtIGQpCi0gICAgICAgIGQy
ID0gbGVuIC0gZDsKLSAgICB9Ci0gICAgcmVzdWx0ID0ganNTdHJpbmcocy5zdWJzdHIoc3RhdGlj
X2Nhc3Q8aW50PihkKSwgc3RhdGljX2Nhc3Q8aW50PihkMikpKTsKKyAgICBkb3VibGUgc3RhcnQg
PSBhMC0+dG9JbnRlZ2VyKGV4ZWMpOworICAgIGRvdWJsZSBsZW5ndGggPSBhMS0+aXNVbmRlZmlu
ZWQoKSA/IGxlbiA6IGExLT50b0ludGVnZXIoZXhlYyk7CisgICAgaWYgKHN0YXJ0ID49IGxlbikK
KyAgICAgIHJldHVybiBqc1N0cmluZygiIik7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICBy
ZXR1cm4ganNTdHJpbmcoIiIpOworICAgIGlmIChzdGFydCA8IDApIHsKKyAgICAgIHN0YXJ0ICs9
IGxlbjsKKyAgICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICB9Cisg
ICAgaWYgKGxlbmd0aCA+IGxlbiAtIGQpCisgICAgICBsZW5ndGggPSBsZW4gLSBkOworICAgIHJl
c3VsdCA9IGpzU3RyaW5nKHMuc3Vic3RyKHN0YXRpY19jYXN0PGludD4oc3RhcnQpLCBzdGF0aWNf
Y2FzdDxpbnQ+KGxlbmd0aCkpKTsKICAgICBicmVhazsKICAgfQogICBjYXNlIFN1YnN0cmluZzog
ewpAQCAtODUyLDcgKzgzNiw3IEBAIEpTVmFsdWUgKlN0cmluZ09iamVjdEZ1bmNJbXA6OmNhbGxB
c0Z1bmMKICAgICBVQ2hhciAqcCA9IGJ1ZjsKICAgICBMaXN0SXRlcmF0b3IgaXQgPSBhcmdzLmJl
Z2luKCk7CiAgICAgd2hpbGUgKGl0ICE9IGFyZ3MuZW5kKCkpIHsKLSAgICAgIHVuc2lnbmVkIHNo
b3J0IHUgPSBpdC0+dG9VSW50MTYoZXhlYyk7CisgICAgICB1bnNpZ25lZCBzaG9ydCB1ID0gaXQt
PnRvVUludDMyKGV4ZWMpOwogICAgICAgKnArKyA9IFVDaGFyKHUpOwogICAgICAgaXQrKzsKICAg
ICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5jcHAJKHJldmlzaW9uIDI3MDg4KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL3ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTQgKzYxLDI0IEBAIGRv
dWJsZSBKU1ZhbHVlOjp0b0ludGVnZXIoRXhlY1N0YXRlICpleGUKICAgICBpbnQzMl90IGk7CiAg
ICAgaWYgKGdldFRydW5jYXRlZEludDMyKGkpKQogICAgICAgICByZXR1cm4gaTsKLSAgICByZXR1
cm4gcm91bmRWYWx1ZShleGVjLCBjb25zdF9jYXN0PEpTVmFsdWUqPih0aGlzKSk7CisgICAgZG91
YmxlIGQgPSB0b051bWJlcihleGVjKTsKKyAgICByZXR1cm4gaXNOYU4oZCkgPyAwLjAgOiBjb3B5
c2lnbihmbG9vcihmYWJzKGQpKSwgZCk7Cit9CisKK2RvdWJsZSBKU1ZhbHVlOjp0b0ludGVnZXJQ
cmVzZXJ2ZU5hTihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0Cit7CisgICAgaW50MzJfdCBpOworICAg
IGlmIChnZXRUcnVuY2F0ZWRJbnQzMihpKSkKKyAgICAgICAgcmV0dXJuIGk7CisgICAgZG91Ymxl
IGQgPSB0b051bWJlcihleGVjKTsKKyAgICByZXR1cm4gY29weXNpZ24oZmxvb3IoZmFicyhkKSks
IGQpOwogfQogCiBpbnQzMl90IEpTVmFsdWU6OnRvSW50MzJTbG93Q2FzZShFeGVjU3RhdGUqIGV4
ZWMsIGJvb2wmIG9rKSBjb25zdAogewogICAgIG9rID0gdHJ1ZTsKIAotICAgIGRvdWJsZSBkID0g
cm91bmRWYWx1ZShleGVjLCBjb25zdF9jYXN0PEpTVmFsdWUqPih0aGlzKSk7CisgICAgZG91Ymxl
IGQgPSB0b051bWJlcihleGVjKTsKICAgICBpZiAoZCA+PSAtRDMyIC8gMiAmJiBkIDwgRDMyIC8g
MikKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KGQpOwogCkBAIC03Niw3ICs4
Niw4IEBAIGludDMyX3QgSlNWYWx1ZTo6dG9JbnQzMlNsb3dDYXNlKEV4ZWNTdGEKICAgICAgICAg
b2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGRvdWJsZSBkMzIgPSBm
bW9kKGQsIEQzMik7CisKKyAgICBkb3VibGUgZDMyID0gZm1vZChjb3B5c2lnbihmbG9vcihmYWJz
KGQpKSwgZCksIEQzMik7CiAKICAgICBpZiAoZDMyID49IEQzMiAvIDIpCiAgICAgICAgIGQzMiAt
PSBEMzI7CkBAIC05MCw3ICsxMDEsNyBAQCB1aW50MzJfdCBKU1ZhbHVlOjp0b1VJbnQzMlNsb3dD
YXNlKEV4ZWNTCiB7CiAgICAgb2sgPSB0cnVlOwogCi0gICAgZG91YmxlIGQgPSByb3VuZFZhbHVl
KGV4ZWMsIGNvbnN0X2Nhc3Q8SlNWYWx1ZSo+KHRoaXMpKTsKKyAgICBkb3VibGUgZCA9IHRvTnVt
YmVyKGV4ZWMpOwogICAgIGlmIChkID49IDAuMCAmJiBkIDwgRDMyKQogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGQpOwogCkBAIC05OCw3ICsxMDksOCBAQCB1aW50MzJfdCBK
U1ZhbHVlOjp0b1VJbnQzMlNsb3dDYXNlKEV4ZWNTCiAgICAgICAgIG9rID0gZmFsc2U7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KLSAgICBkb3VibGUgZDMyID0gZm1vZChkLCBEMzIpOworCisg
ICAgZG91YmxlIGQzMiA9IGZtb2QoY29weXNpZ24oZmxvb3IoZmFicyhkKSksIGQpLCBEMzIpOwog
CiAgICAgaWYgKGQzMiA8IDApCiAgICAgICAgIGQzMiArPSBEMzI7CkBAIC0xMDYsMjYgKzExOCw2
IEBAIHVpbnQzMl90IEpTVmFsdWU6OnRvVUludDMyU2xvd0Nhc2UoRXhlY1MKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGQzMik7CiB9CiAKLXVpbnQxNl90IEpTVmFsdWU6OnRvVUlu
dDE2KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKLXsKLSAgICB1aW50MzJfdCBpOwotICAgIGlmIChn
ZXRUcnVuY2F0ZWRVSW50MzIoaSkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZf
dD4oaSk7Ci0KLSAgICBkb3VibGUgZCA9IHJvdW5kVmFsdWUoZXhlYywgY29uc3RfY2FzdDxKU1Zh
bHVlKj4odGhpcykpOwotICAgIGlmIChkID49IDAuMCAmJiBkIDwgRDE2KQotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGQpOwotCi0gICAgaWYgKGlzTmFOKGQpIHx8IGlzSW5m
KGQpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBkb3VibGUgZDE2ID0gZm1vZChkLCBEMTYpOwot
Ci0gICAgaWYgKGQxNiA8IDApCi0gICAgICAgIGQxNiArPSBEMTY7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDE2X3Q+KGQxNik7Ci19Ci0KIGZsb2F0IEpTVmFsdWU6OnRvRmxvYXQoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odG9O
dW1iZXIoZXhlYykpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgJKHJldmlzaW9uIDI3MDg4KQorKysgSmF2
YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDExICs5MSwxMSBA
QCBwdWJsaWM6CiAKICAgICAvLyBJbnRlZ2VyIGNvbnZlcnNpb25zLgogICAgIGRvdWJsZSB0b0lu
dGVnZXIoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgZG91YmxlIHRvSW50ZWdlclByZXNlcnZlTmFO
KEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIGludDMyX3QgdG9JbnQzMihFeGVjU3RhdGUqKSBjb25z
dDsKICAgICBpbnQzMl90IHRvSW50MzIoRXhlY1N0YXRlKiwgYm9vbCYgb2spIGNvbnN0OwogICAg
IHVpbnQzMl90IHRvVUludDMyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIHVpbnQzMl90IHRvVUlu
dDMyKEV4ZWNTdGF0ZSosIGJvb2wmIG9rKSBjb25zdDsKLSAgICB1aW50MTZfdCB0b1VJbnQxNihF
eGVjU3RhdGUqKSBjb25zdDsKIAogICAgIC8vIEZsb2F0aW5nIHBvaW50IGNvbnZlcnNpb25zLgog
ICAgIGZsb2F0IHRvRmxvYXQoRXhlY1N0YXRlKikgY29uc3Q7CkBAIC00MDUsNyArNDA1LDcgQEAg
aW5saW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b09iamVjdChFeGVjUwogQUxXQVlTX0lOTElORSBp
bnQzMl90IEpTVmFsdWU6OnRvSW50MzIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIGlu
dDMyX3QgaTsKLSAgICBpZiAoSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHRoaXMpICYmIEpTSW1t
ZWRpYXRlOjpnZXRUcnVuY2F0ZWRJbnQzMih0aGlzLCBpKSkKKyAgICBpZiAoZ2V0VHJ1bmNhdGVk
SW50MzIoaSkpCiAgICAgICAgIHJldHVybiBpOwogICAgIGJvb2wgb2s7CiAgICAgcmV0dXJuIHRv
SW50MzJTbG93Q2FzZShleGVjLCBvayk7CkBAIC00MTQsNyArNDE0LDcgQEAgQUxXQVlTX0lOTElO
RSBpbnQzMl90IEpTVmFsdWU6OnRvSW50MzIoRQogaW5saW5lIHVpbnQzMl90IEpTVmFsdWU6OnRv
VUludDMyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICB1aW50MzJfdCBpOwotICAgIGlm
IChKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykgJiYgSlNJbW1lZGlhdGU6OmdldFRydW5j
YXRlZFVJbnQzMih0aGlzLCBpKSkKKyAgICBpZiAoZ2V0VHJ1bmNhdGVkVUludDMyKGkpKQogICAg
ICAgICByZXR1cm4gaTsKICAgICBib29sIG9rOwogICAgIHJldHVybiB0b1VJbnQzMlNsb3dDYXNl
KGV4ZWMsIG9rKTsKQEAgLTQyMyw3ICs0MjMsNyBAQCBpbmxpbmUgdWludDMyX3QgSlNWYWx1ZTo6
dG9VSW50MzIoRXhlY1N0CiBpbmxpbmUgaW50MzJfdCBKU1ZhbHVlOjp0b0ludDMyKEV4ZWNTdGF0
ZSogZXhlYywgYm9vbCYgb2spIGNvbnN0CiB7CiAgICAgaW50MzJfdCBpOwotICAgIGlmIChKU0lt
bWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykgJiYgSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZElu
dDMyKHRoaXMsIGkpKSB7CisgICAgaWYgKGdldFRydW5jYXRlZEludDMyKGkpKSB7CiAgICAgICAg
IG9rID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGk7CiAgICAgfQpAQCAtNDMzLDcgKzQzMyw3IEBA
IGlubGluZSBpbnQzMl90IEpTVmFsdWU6OnRvSW50MzIoRXhlY1N0YXQKIGlubGluZSB1aW50MzJf
dCBKU1ZhbHVlOjp0b1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rKSBjb25zdAogewog
ICAgIHVpbnQzMl90IGk7Ci0gICAgaWYgKEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh0aGlzKSAm
JiBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKHRoaXMsIGkpKSB7CisgICAgaWYgKGdl
dFRydW5jYXRlZFVJbnQzMihpKSkgewogICAgICAgICBvayA9IHRydWU7CiAgICAgICAgIHJldHVy
biBpOwogICAgIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MDkxKQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDctMTAtMjYgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIC0gdGVzdCBjaGFuZ2VzIGZvciBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTcwMworICAgICAgICAgIGZpeCBudW1lcmljIGZ1bmN0aW9u
cyAtLSBpbXByb3ZlIGNvcnJlY3RuZXNzIGFuZCBzcGVlZAorCisgICAgICAgICogZmFzdC9qcy9y
ZXNvdXJjZXMvY2hhci1hdC5qczogVXBkYXRlZCB0ZXN0IHRvIGV4cGVjdCB0aGF0IHdlIGdldCB0
aGUgZmlyc3QKKyAgICAgICAgY2hhcmFjdGVyIGlmIHdlIHBhc3MgTmFOIHRvIGNoYXJBdCBhbmQg
Y2hhckNvZGVBdDsgaXQncyB3aGF0IHRoZSBzcGVjaWZpY2F0aW9uCisgICAgICAgIGFza3MgZm9y
IGFuZCBtYXRjaGVzIG90aGVyIGJyb3dzZXJzIHRvby4KKyAgICAgICAgKiBmYXN0L2pzL2NoYXIt
YXQtZXhwZWN0ZWQudHh0OiBVcGRhdGVkLgorCiAyMDA3LTEwLTI1ICBBbGV4ZXkgUHJvc2t1cnlh
a292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvY2hhci1hdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9jaGFyLWF0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjcwODgp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2NoYXItYXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC01Myw4ICs1Myw4IEBAIFBBU1MgIngiLmNoYXJBdCgtMSkgaXMgIiIKIFBBU1MgIngi
LmNoYXJDb2RlQXQoLTEpIGlzIE5hTgogUEFTUyAieCIuY2hhckF0KC1JbmZpbml0eSkgaXMgIiIK
IFBBU1MgIngiLmNoYXJDb2RlQXQoLUluZmluaXR5KSBpcyBOYU4KLVBBU1MgIngiLmNoYXJBdChO
YU4pIGlzICIiCi1QQVNTICJ4Ii5jaGFyQ29kZUF0KE5hTikgaXMgTmFOCitQQVNTICJ4Ii5jaGFy
QXQoTmFOKSBpcyAieCIKK1BBU1MgIngiLmNoYXJDb2RlQXQoTmFOKSBpcyAxMjAKIFBBU1MgInh5
Ii5jaGFyQXQoKSBpcyAieCIKIFBBU1MgInh5Ii5jaGFyQ29kZUF0KCkgaXMgMTIwCiBQQVNTICJ4
eSIuY2hhckF0KHVuZGVmaW5lZCkgaXMgIngiCkBAIC03OSw4ICs3OSw4IEBAIFBBU1MgInh5Ii5j
aGFyQXQoLTEpIGlzICIiCiBQQVNTICJ4eSIuY2hhckNvZGVBdCgtMSkgaXMgTmFOCiBQQVNTICJ4
eSIuY2hhckF0KC1JbmZpbml0eSkgaXMgIiIKIFBBU1MgInh5Ii5jaGFyQ29kZUF0KC1JbmZpbml0
eSkgaXMgTmFOCi1QQVNTICJ4eSIuY2hhckF0KE5hTikgaXMgIiIKLVBBU1MgInh5Ii5jaGFyQ29k
ZUF0KE5hTikgaXMgTmFOCitQQVNTICJ4eSIuY2hhckF0KE5hTikgaXMgIngiCitQQVNTICJ4eSIu
Y2hhckNvZGVBdChOYU4pIGlzIDEyMAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQog
CiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9jaGFy
LWF0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2NoYXIt
YXQuanMJKHJldmlzaW9uIDI3MDg4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMv
Y2hhci1hdC5qcwkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2YXIgYW5zd2VycyA9
IFtbJyIiJywgJ05hTiddLAogWyciIicsICdOYU4nXSwKIFsnIiInLCAnTmFOJ10sCiBbJyIiJywg
J05hTiddLAotWyciIicsICdOYU4nXSwKK1snIngiJywgJzEyMCddLAogWycieCInLCAnMTIwJ10s
CiBbJyJ4IicsICcxMjAnXSwKIFsnIngiJywgJzEyMCddLApAQCAtODYsNyArODYsNyBAQCB2YXIg
YW5zd2VycyA9IFtbJyIiJywgJ05hTiddLAogWyciIicsICdOYU4nXSwKIFsnIiInLCAnTmFOJ10s
CiBbJyIiJywgJ05hTiddLAotWyciIicsICdOYU4nXV07CitbJyJ4IicsICcxMjAnXV07CiAKIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2FzZXMubGVuZ3RoOyArK2kpCiB7Cg==
</data>
<flag name="review"
          id="7146"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>