<?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>212032</bug_id>
          
          <creation_ts>2020-05-18 10:32:31 -0700</creation_ts>
          <short_desc>Implement a faster findBitInWord() using the hardware ctz instruction.</short_desc>
          <delta_ts>2020-05-18 13:18:57 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1653656</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-18 10:32:31 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653658</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-18 10:33:00 -0700</bug_when>
    <thetext>&lt;rdar://problem/63348086&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653682</commentid>
    <comment_count>2</comment_count>
      <attachid>399659</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-18 11:19:06 -0700</bug_when>
    <thetext>Created attachment 399659
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653694</commentid>
    <comment_count>3</comment_count>
      <attachid>399659</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-05-18 11:47:10 -0700</bug_when>
    <thetext>Comment on attachment 399659
proposed patch.

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

r=me

&gt; Source/bmalloc/bmalloc/Algorithm.h:239
&gt; +    if ((index &lt; endIndex) &amp;&amp; word) {

I don&apos;t think we need the first (index &lt; endIndex) check.

Also, I&apos;d expect this algorithm below of ctz to just work on zero too, since that&apos;d put us past the endIndex.

however, as you said, maybe ctz doesn&apos;t do good things for zero? I just find that very surprising

Ditto about WTF code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1653730</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-18 13:18:57 -0700</bug_when>
    <thetext>Thanks for the review.  I&apos;ve removed the extra check.

Landed in r261827: &lt;http://trac.webkit.org/r261827&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>399659</attachid>
            <date>2020-05-18 11:19:06 -0700</date>
            <delta_ts>2020-05-18 11:47:10 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-212032.patch</filename>
            <type>text/plain</type>
            <size>18595</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjE3OTEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBACisyMDIwLTA1LTE4ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYSBmYXN0ZXIgZmluZEJpdEluV29yZCgp
IHVzaW5nIHRoZSBoYXJkd2FyZSBjdHogaW5zdHJ1Y3Rpb24uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTIwMzIKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzYzMzQ4MDg2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEJhc2VkIG9uIGxvY2FsIG1pY3JvYmVuY2htYXJraW5nOgorICAgICAgICAgICAgT24g
QVJNNjQsIHVzaW5nIGN0eiBpcyAzMSUgLSA5NSUgZmFzdGVyIHRoYW4gdGhlIGxvb3AuCisgICAg
ICAgICAgICBPbiBYODZfNjQsIHVzaW5nIGN0eiBpcyA0JSBzbG93ZXIgdG8gOTAlIGZhc3RlciB0
aGFuIHRoZSBsb29wLgorCisgICAgICAgIFRoZSBsYXJnZXN0IHBlcmYgcmVncmVzc2lvbnMgZm9y
IGN0eiB2cyB0aGUgbG9vcCwgYXJlIHdoZW4gZmluZGluZyAxIGluIGEgbW9zdGx5CisgICAgICAg
IHNldCB3b3JkIG9yIGZpbmRpbmcgMCBpbiBhIG1vc3RseSBjbGVhcmVkIHdvcmQuIEZvciBleGFt
cGxlLCBvbiBYODZfNjQ6CisgICAgICAgICAgICBGaW5kIDEgaW4gMHhmZmZmZmZmZmZmZmZmZmZm
OiB1c2luZyBsb29wIDguODIgbXMsIHVzaW5nIGN0eiA4Ljk3IG1zLCBkZWx0YSAtMS43MSAlCisg
ICAgICAgICAgICBGaW5kIDAgaW4gMHg4MDAwMDAwMDAwMDAwMDAwOiB1c2luZyBsb29wIDkuMzEg
bXMsIHVzaW5nIGN0eiA5LjcwIG1zLCBkZWx0YSAtNC4yMCAlCisKKyAgICAgICAgVGhlIGxhcmdl
c3QgcGVyZiBwcm9ncmVzc2lvbnMgZm9yIGN0eiB2cyB0aGUgbG9vcCwgYXJlIHRoZSBvcHBvc2l0
ZTogZmluZGluZyAxIGluCisgICAgICAgIGEgbW9zdGx5IGNsZWFyZWQgd29yZCwgb3IgZmluZGlu
ZyBhIDAgaW4gYSBtb3N0bHkgc2V0IHdvcmQuIEZvciBleGFtcGxlLCBvbiBYODZfNjQ6CisgICAg
ICAgICAgICBGaW5kIDEgaW4gMHg4MDAwMDAwMDAwMDAwMDAwOiB1c2luZyBsb29wIDkxLjAgbXMs
IHVzaW5nIGN0eiA4Ljc1IG1zLCBkZWx0YSA5MC40ICUKKyAgICAgICAgICAgIEZpbmQgMCBpbiAw
eGZmZmZmZmZmZmZmZmZmZmY6IHVzaW5nIGxvb3AgOTEuOCBtcywgdXNpbmcgY3R6IDkuNzEgbXMs
IGRlbHRhIDg5LjQgJQorCisgICAgICAgIFdlIGNhbiBzZWUgdGhhdCB1c2luZyBjdHogb24gWDg2
XzY0LCBldmVuIHdoZW4gc2xvd2VyLCBpcyBub3QgdGhhdCBzbG93IHJlbGF0aXZlCisgICAgICAg
IHRvIHRoZSBsb29wIGltcGxlbWVudGF0aW9uLiAgQnV0IHdoZW4gaXQncyBmYXN0ZXIsIGl0IGlz
IGFib3V0IGFuIG9yZGVyIG9mCisgICAgICAgIG1hZ25pdHVkZSBmYXN0ZXIuCisKKyAgICAgICAg
T24gQVJNNjQsIHVzaW5nIGN0eiBpcyBhbHdheXMgYSB3aW4uCisKKyAgICAgICAgVEw7RFI6IHRo
ZSBtaWNyb2JlbmNobWFyayBtZXRob2RvbG9neSB1c2VkOgorCisgICAgICAgIGZpbmRCaXRJbldv
cmQoKSB0YWtlczoKKyAgICAgICAgICAgIGEuIHdvcmQgdG8gc2NhbgorICAgICAgICAgICAgYi4g
c3RhcnRJbmRleAorICAgICAgICAgICAgYy4gZW5kSW5kZXgKKyAgICAgICAgICAgIGQuIGJvb2wg
dmFsdWUgdG8gc2NhbiBmb3IsIGVpdGhlciAxIG9yIDAuCisKKyAgICAgICAgMS4gUmFuZG9tbHkg
c2VsZWN0IDEwMDAgc3RhcnRJbmRleCBhbmQgZW5kSW5kZXggcGFpcnMuCisgICAgICAgICAgIFRo
ZSBlbmRJbmRleCBpcyBndWFyYW50ZWVkIHRvIGJlID49IHN0YXJ0SW5kZXguCisKKyAgICAgICAg
Mi4gVXNpbmcgYSBiYXNlIHdvcmQgb2YgMHhmZmZmZmZmZmZmZmZmZmZmIChvciB1aW50NjRfdCkg
YW5kIDB4ZmZmZmZmZmYgKGZvciB1aW50MzJfdCksCisgICAgICAgICAgIHNoaWZ0IGxlZnQgYnkg
MCAtIE4gKHdoZXJlIE4gaXMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSB3b3JkKSB0byBnZW5l
cmF0ZQorICAgICAgICAgICBOICsgMSB3b3JkcyBmb3IgdGhlIHRlc3QuICBUaGlzIHByb2R1Y2Vz
IHdvcmRzIHdpdGggY29udGlndW91cyBsZW5ndGhzIG9mIDFzCisgICAgICAgICAgIGFuZCAwcy4g
IFdlJ3JlIGNob29zaW5nIHRoZXNlIHdvcmRzIHRvIGRlbGliZXJhdGVseSBtZWFzdXJlIHRoZSBl
ZmZlY3RzIG8KKyAgICAgICAgICAgcnVuIGxlbmd0aHMgb2YgMHMgb3IgMXMgb24gdGhlIGFsZ29y
aXRobSBpbiB1c2UuCisKKyAgICAgICAgMy4gRm9yIGVhY2ggdGVzdCB3b3JkLCBjYWxsIGZpbmRC
aXRJbldvcmQoKSB3aXRoIHRoZSBzdGFydCBhbmQgZW5kIGluZGV4ZXMgY2hvc2VuCisgICAgICAg
ICAgIGluIDEgZm9yIGEgMTAwIGl0ZXJhdGlvbnMuCisKKyAgICAgICAgNC4gUnVuICgzKSBvbmNl
IHRvIHNlYXJjaCBmb3IgYSB0cnVlIHZhbHVlLCBhbmQgb25jZSB0byBzZWFyY2ggZm9yIGEgZmFs
c2UgdmFsdWUuCisKKyAgICAgICAgNS4gUHJpbnQgdGhlIHJlc3VsdHMgZm9yIGVhY2ggdGVzdCB3
b3JkIGFuZCB2YWx1ZSBwYWlyLgorCisgICAgICAgICogd3RmL0JpdFZlY3Rvci5jcHA6CisgICAg
ICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAg
ICAgKFdURjo6ZmluZEJpdEluV29yZCk6CisKIDIwMjAtMDUtMTUgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIGhvc3QgcGFyc2VyIGZh
aWwgb24gXgpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCShyZXZpc2lvbiAyNjE3OTEpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkocmV2
aXNpb24gMjYxNzkxKQorKysgU291cmNlL1dURi93dGYvQml0bWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDggKzIyLDggQEAKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3dGYvQXRvbWlj
cy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkSW50RXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRz
PgogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjYxNzkxKQorKysgU291cmNl
L1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNywyMCArMzE3LDQ0
IEBAIGJvb2wgY2hlY2tBbmRTZXQoVCYgbGVmdCwgVSByaWdodCkKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLWJvb2wgZmluZEJpdEluV29yZChUIHdvcmQsIHNpemVfdCYgaW5kZXgsIHNpemVf
dCBlbmRJbmRleCwgYm9vbCB2YWx1ZSkKK2lubGluZSB1bnNpZ25lZCBjdHooVCB2YWx1ZSk7IC8v
IENsaWVudHMgd2lsbCBhbHNvIG5lZWQgdG8gI2luY2x1ZGUgTWF0aEV4dHJhcy5oCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Citib29sIGZpbmRCaXRJbldvcmQoVCB3b3JkLCBzaXplX3QmIHN0YXJ0
T3JSZXN1bHRJbmRleCwgc2l6ZV90IGVuZEluZGV4LCBib29sIHZhbHVlKQogewogICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUsICJUeXBlIHVzZWQgaW4gZmluZEJp
dEluV29yZCBtdXN0IGJlIHVuc2lnbmVkIik7Ci0gICAgCisKKyAgICBjb25zdGV4cHIgc2l6ZV90
IGJpdHNJbldvcmQgPSBzaXplb2Yod29yZCkgKiA4OworICAgIEFTU0VSVF9VTlVTRUQoYml0c0lu
V29yZCwgc3RhcnRPclJlc3VsdEluZGV4IDw9IGJpdHNJbldvcmQgJiYgZW5kSW5kZXggPD0gYml0
c0luV29yZCk7CisKKyAgICBzaXplX3QgaW5kZXggPSBzdGFydE9yUmVzdWx0SW5kZXg7CiAgICAg
d29yZCA+Pj0gaW5kZXg7Ci0gICAgCisKKyNpZiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkgJiYg
KENQVShYODZfNjQpIHx8IENQVShBUk02NCkpCisgICAgLy8gV2Ugc2hvdWxkIG9ubHkgdXNlIGN0
eigpIHdoZW4gd2Uga25vdyB0aGF0IGN0eigpIGlzIGltcGxlbWVudGF0ZWQgdXNpbmcKKyAgICAv
LyBhIGZhc3QgaGFyZHdhcmUgaW5zdHJ1Y3Rpb24uIE90aGVyd2lzZSwgdGhpcyB3aWxsIGFjdHVh
bGx5IHJlc3VsdCBpbgorICAgIC8vIHdvcnNlIHBlcmZvcm1hbmNlLgorCisgICAgd29yZCBePSAo
c3RhdGljX2Nhc3Q8VD4odmFsdWUpIC0gMSk7CisgICAgaWYgKChpbmRleCA8IGVuZEluZGV4KSAm
JiB3b3JkKSB7CisgICAgICAgIGluZGV4ICs9IGN0eih3b3JkKTsKKyAgICAgICAgaWYgKGluZGV4
IDwgZW5kSW5kZXgpIHsKKyAgICAgICAgICAgIHN0YXJ0T3JSZXN1bHRJbmRleCA9IGluZGV4Owor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQogICAgIHdo
aWxlIChpbmRleCA8IGVuZEluZGV4KSB7Ci0gICAgICAgIGlmICgod29yZCAmIDEpID09IHN0YXRp
Y19jYXN0PFQ+KHZhbHVlKSkKKyAgICAgICAgaWYgKCh3b3JkICYgMSkgPT0gc3RhdGljX2Nhc3Q8
VD4odmFsdWUpKSB7CisgICAgICAgICAgICBzdGFydE9yUmVzdWx0SW5kZXggPSBpbmRleDsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgICAgIGluZGV4Kys7CiAgICAg
ICAgIHdvcmQgPj49IDE7CiAgICAgfQotICAgIAotICAgIGluZGV4ID0gZW5kSW5kZXg7CisjZW5k
aWYKKworICAgIHN0YXJ0T3JSZXN1bHRJbmRleCA9IGVuZEluZGV4OwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwkocmV2aXNpb24gMjYxNzkxKQorKysgU291cmNlL2JtYWxs
b2MvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDUtMTgg
IE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBhIGZh
c3RlciBmaW5kQml0SW5Xb3JkKCkgdXNpbmcgdGhlIGhhcmR3YXJlIGN0eiBpbnN0cnVjdGlvbi4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjAzMgor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjMzNDgwODY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXBwbHkgc2FtZSBjaGFuZ2VzIHRvIGJtYWxsb2Mn
cyBjb3B5IG9mIGZpbmRCaXRJbldvcmQoKS4KKworICAgICAgICAqIGJtYWxsb2MvQWxnb3JpdGht
Lmg6CisgICAgICAgIChibWFsbG9jOjpjdHopOgorICAgICAgICAoYm1hbGxvYzo6ZmluZEJpdElu
V29yZCk6CisKIDIwMjAtMDUtMTMgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbYm1hbGxvY10gSW50cm9kdWNlIGxvY2stbGVzcyBPYmplY3RUeXBlIHF1ZXJ5
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsZ29yaXRobS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxnb3JpdGhtLmgJKHJldmlzaW9uIDI2MTc5MSkKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxnb3JpdGhtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTc2LDI0
ICsxNzYsNiBAQCBjb25zdGV4cHIgdW5zaWduZWQgbG9uZyBsb2cyKHVuc2lnbmVkIGxvCiAKICNk
ZWZpbmUgQk9GRlNFVE9GKGNsYXNzLCBmaWVsZCkgKHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90
PigmKHJlaW50ZXJwcmV0X2Nhc3Q8Y2xhc3MqPigweDQwMDApLT5maWVsZCkpIC0gMHg0MDAwKQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYm9vbCBmaW5kQml0SW5Xb3JkKFQgd29yZCwgc2l6ZV90
JiBpbmRleCwgc2l6ZV90IGVuZEluZGV4LCBib29sIHZhbHVlKQotewotICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUsICJUeXBlIHVzZWQgaW4gZmluZEJpdEluV29y
ZCBtdXN0IGJlIHVuc2lnbmVkIik7Ci0gICAgCi0gICAgd29yZCA+Pj0gaW5kZXg7Ci0gICAgCi0g
ICAgd2hpbGUgKGluZGV4IDwgZW5kSW5kZXgpIHsKLSAgICAgICAgaWYgKCh3b3JkICYgMSkgPT0g
c3RhdGljX2Nhc3Q8VD4odmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGluZGV4Kys7Ci0gICAgICAgIHdvcmQgPj49IDE7Ci0gICAgfQotICAgIAotICAgIGluZGV4ID0g
ZW5kSW5kZXg7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
IGNvbnN0ZXhwciB1bnNpZ25lZCBjdHpDb25zdGV4cHIoVCB2YWx1ZSkKIHsKQEAgLTIxNCw2ICsx
OTYsNjkgQEAgY29uc3RleHByIHVuc2lnbmVkIGN0ekNvbnN0ZXhwcihUIHZhbHVlKQogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHVuc2lnbmVkIGN0eihUIHZhbHVlKQoreworICAg
IGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7CisKKyAg
ICB1c2luZyBVVCA9IHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZTsKKyAgICBV
VCB1VmFsdWUgPSB2YWx1ZTsKKworI2lmIEJDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKKyAgICBp
ZiAodVZhbHVlKQorICAgICAgICByZXR1cm4gX19idWlsdGluX2N0emxsKHVWYWx1ZSk7CisgICAg
cmV0dXJuIGJpdFNpemU7CisjZWxpZiBCQ09NUElMRVIoTVNWQykgJiYgIUJDUFUoWDg2KQorICAg
IHVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKKyAgICBpZiAoX0JpdFNjYW5Gb3J3YXJkNjQoJnJldCwg
dVZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gYml0U2l6ZTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGJpdFNpemUpOworICAgIFVOVVNFRF9QQVJBTSh1VmFsdWUpOwor
ICAgIHJldHVybiBjdHpDb25zdGV4cHIodmFsdWUpOworI2VuZGlmCit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Citib29sIGZpbmRCaXRJbldvcmQoVCB3b3JkLCBzaXplX3QmIHN0YXJ0T3JSZXN1
bHRJbmRleCwgc2l6ZV90IGVuZEluZGV4LCBib29sIHZhbHVlKQoreworICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUsICJUeXBlIHVzZWQgaW4gZmluZEJpdEluV29y
ZCBtdXN0IGJlIHVuc2lnbmVkIik7CisgICAgY29uc3RleHByIHNpemVfdCBiaXRzSW5Xb3JkID0g
c2l6ZW9mKHdvcmQpICogODsKKyAgICBCQVNTRVJUKHN0YXJ0T3JSZXN1bHRJbmRleCA8PSBiaXRz
SW5Xb3JkICYmIGVuZEluZGV4IDw9IGJpdHNJbldvcmQpOworICAgIEJVTlVTRUQoYml0c0luV29y
ZCk7CisgICAgCisgICAgc2l6ZV90IGluZGV4ID0gc3RhcnRPclJlc3VsdEluZGV4OworICAgIHdv
cmQgPj49IGluZGV4OworCisjaWYgQkNPTVBJTEVSKEdDQ19DT01QQVRJQkxFKSAmJiAoQkNQVShY
ODZfNjQpIHx8IEJDUFUoQVJNNjQpKQorICAgIC8vIFdlIHNob3VsZCBvbmx5IHVzZSBjdHooKSB3
aGVuIHdlIGtub3cgdGhhdCBjdHooKSBpcyBpbXBsZW1lbnRhdGVkIHVzaW5nCisgICAgLy8gYSBm
YXN0IGhhcmR3YXJlIGluc3RydWN0aW9uLiBPdGhlcndpc2UsIHRoaXMgd2lsbCBhY3R1YWxseSBy
ZXN1bHQgaW4KKyAgICAvLyB3b3JzZSBwZXJmb3JtYW5jZS4KKworICAgIHdvcmQgXj0gKHN0YXRp
Y19jYXN0PFQ+KHZhbHVlKSAtIDEpOworICAgIGlmICgoaW5kZXggPCBlbmRJbmRleCkgJiYgd29y
ZCkgeworICAgICAgICBpbmRleCArPSBjdHood29yZCk7CisgICAgICAgIGlmIChpbmRleCA8IGVu
ZEluZGV4KSB7CisgICAgICAgICAgICBzdGFydE9yUmVzdWx0SW5kZXggPSBpbmRleDsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICB3aGlsZSAo
aW5kZXggPCBlbmRJbmRleCkgeworICAgICAgICBpZiAoKHdvcmQgJiAxKSA9PSBzdGF0aWNfY2Fz
dDxUPih2YWx1ZSkpIHsKKyAgICAgICAgICAgIHN0YXJ0T3JSZXN1bHRJbmRleCA9IGluZGV4Owor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaW5kZXgrKzsKKyAg
ICAgICAgd29yZCA+Pj0gMTsKKyAgICB9CisjZW5kaWYKKworICAgIHN0YXJ0T3JSZXN1bHRJbmRl
eCA9IGVuZEluZGV4OworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KIGNvbnN0ZXhwciB1bnNpZ25lZCBnZXRMU0JTZXROb25aZXJvQ29uc3RleHByKFQgdCkKIHsK
ICAgICByZXR1cm4gY3R6Q29uc3RleHByKHQpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYxODE4KQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDUtMTggIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBhIGZhc3RlciBm
aW5kQml0SW5Xb3JkKCkgdXNpbmcgdGhlIGhhcmR3YXJlIGN0eiBpbnN0cnVjdGlvbi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjAzMgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNjMzNDgwODY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjdHog
aW1wbGVtZW50YXRpb24gbWF0Y2hlcyB0aGUgbG9vcCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBp
biBiZWhhdmlvci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RkTGliRXh0cmFzLmNw
cDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0RmluZEJpdEluV29yZCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMC0wNS0xOCAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGl0ZXJhdG9yIGNoZWNraW5nIHRvIExp
c3RIYXNoU2V0CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2
MTc5MSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDYgKzgzLDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgIFRlc3RzL1dURi9T
Y29wZS5jcHAKICAgICBUZXN0cy9XVEYvU2NvcGVkTGFtYmRhLmNwcAogICAgIFRlc3RzL1dURi9T
ZXRGb3JTY29wZS5jcHAKKyAgICBUZXN0cy9XVEYvU3RkTGliRXh0cmFzLmNwcAogICAgIFRlc3Rz
L1dURi9TdHJpbmdCdWlsZGVyLmNwcAogICAgIFRlc3RzL1dURi9TdHJpbmdDb25jYXRlbmF0ZS5j
cHAKICAgICBUZXN0cy9XVEYvU3RyaW5nSGFzaGVyLmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDI2MTc5MSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQzLDYg
KzExNDMsNyBAQAogCQlGNkI3QkU5NzE3NDY5Qjk2MDA4QTM0NDUgLyogYXNzb2NpYXRlLWZvcm0t
Y29udHJvbHMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNkI3QkU5NjE3NDY5QjdFMDA4QTM0NDUgLyogYXNzb2NpYXRlLWZvcm0tY29u
dHJvbHMuaHRtbCAqLzsgfTsKIAkJRjZGNDlDNkIxNTU0NUNBNzAwMDdGMzlEIC8qIERPTVdpbmRv
d0V4dGVuc2lvbk5vQ2FjaGVfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY2RjQ5QzY2MTU1NDVDOEQwMDA3RjM5RCAvKiBET01XaW5kb3dF
eHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHAgKi87IH07CiAJCUY2RkREREQ2MTQyNDFDNkYwMDRG
MTcyOSAvKiBwdXNoLXN0YXRlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjZGRERERDUxNDI0MUM0ODAwNEYxNzI5IC8qIHB1c2gtc3Rh
dGUuaHRtbCAqLzsgfTsKKwkJRkUyQkNEQzcyNDcwRkRBMzAwREVDMzNCIC8qIFN0ZExpYkV4dHJh
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTJC
Q0RDNjI0NzBGQzcwMDBERUMzM0IgLyogU3RkTGliRXh0cmFzLmNwcCAqLzsgfTsKIAkJRkUyRDk0
NzQyNDVFQjJGNDAwRTQ4MTM1IC8qIEJpdG1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTJEOTQ3MzI0NUVCMkRGMDBFNDgxMzUgLyogQml0bWFw
LmNwcCAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCkBAIC0yODEzLDYg
KzI4MTQsNyBAQAogCQlGNkY0OUM2NzE1NTQ1QzhEMDAwN0YzOUQgLyogRE9NV2luZG93RXh0ZW5z
aW9uTm9DYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01X
aW5kb3dFeHRlbnNpb25Ob0NhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjZGRERERDIxNDI0MUFENDAwNEYxNzI5IC8qIFByaXZhdGVCcm93c2luZ1B1c2hTdGF0ZU5vSGlz
dG9yeUNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBy
aXZhdGVCcm93c2luZ1B1c2hTdGF0ZU5vSGlzdG9yeUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjZGRERERDUxNDI0MUM0ODAwNEYxNzI5IC8qIHB1c2gtc3RhdGUu
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJwdXNoLXN0YXRlLmh0bWwiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTJCQ0RDNjI0NzBGQzcwMDBERUMzM0IgLyogU3Rk
TGliRXh0cmFzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0ZExp
YkV4dHJhcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMkQ5NDczMjQ1RUIy
REYwMEU0ODEzNSAvKiBCaXRtYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQml0bWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVCNkY3NEUx
QjJCQTQ0RTAwOUU0OTIyIC8qIE5ha2VkUHRyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE5ha2VkUHRyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8q
IEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KQEAgLTQwMjYsNiArNDAyOCw3IEBACiAJ
CQkJMEJDRDg1NjkxNDg1Qzk4QjAwRUEyMDAzIC8qIFNldEZvclNjb3BlLmNwcCAqLywKIAkJCQlD
RDUzOTNDOTE3NTdCQUM0MDBDMDcxMjMgLyogU0hBMS5jcHAgKi8sCiAJCQkJRTM5NTNGOTUxRjJD
RjMyMTAwQTc2QTJFIC8qIFNpZ25hbHMuY3BwICovLAorCQkJCUZFMkJDREM2MjQ3MEZDNzAwMERF
QzMzQiAvKiBTdGRMaWJFeHRyYXMuY3BwICovLAogCQkJCTgxQjUwMTkyMTQwRjIzMjMwMEQ5RUI1
OCAvKiBTdHJpbmdCdWlsZGVyLmNwcCAqLywKIAkJCQk3Q0Q0QzI2QzFFMkMwRTZFMDA5Mjk0NzAg
LyogU3RyaW5nQ29uY2F0ZW5hdGUuY3BwICovLAogCQkJCTkzQUJBODA4MTZEREFCOTEwMDJEQjJG
QSAvKiBTdHJpbmdIYXNoZXIuY3BwICovLApAQCAtNDY5NCw2ICs0Njk3LDcgQEAKIAkJCQk3Qzgz
REVENDFEMEE1OTBDMDBGRUJDRjMgLyogSGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
QzhCRkY3MTIzQzAxMDdBMDBDMDA5QjMgLyogSGV4TnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDODNERUUwMUQwQTU5MEMwMEZFQkNGMyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9u
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFMkJDREM3MjQ3MEZEQTMwMERFQzMzQiAvKiBTdGRM
aWJFeHRyYXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTNGQ0RFNkIyMjlFRkZCOTAwNTk4RUNG
IC8qIElzb0hlYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NFQjYyQUIyMjM2MDlERTAwNjlD
QkIwIC8qIEl0ZXJhdG9yUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0EwNTA5NDExRkI5
RjA2NDAwQjMzRkI4IC8qIEpTT05WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0ZExpYkV4dHJhcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RkTGliRXh0cmFzLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdGRMaWJFeHRyYXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlci5oPgorCituYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdvcmRUeXBlPgordm9pZCB0ZXN0
RmluZEJpdEluV29yZCgpCit7CisgICAgY29uc3RleHByIHNpemVfdCBiaXRzSW5Xb3JkID0gc2l6
ZW9mKFdvcmRUeXBlKSAqIDg7CisgICAgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNoaWZ0VmFs
dWVzID0gYml0c0luV29yZCArIDE7CisgICAgY29uc3RleHByIHNpemVfdCB0ZXN0UGVybXV0YXRp
b25zUGVyU2hpZnQgPSAxMDA7CisKKyAgICBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mVGVzdFZh
bHVlcyA9IG51bWJlck9mU2hpZnRWYWx1ZXMgKiB0ZXN0UGVybXV0YXRpb25zUGVyU2hpZnQ7Cisg
ICAgdWludDhfdCBzdGFydEluZGV4W251bWJlck9mVGVzdFZhbHVlc107CisgICAgdWludDhfdCBl
bmRJbmRleFtudW1iZXJPZlRlc3RWYWx1ZXNdOworCisgICAgYXV0byBpbml0VGVzdFZhbHVlcyA9
IFsmXSAoKSB7CisgICAgICAgIC8vIFNldCBzb21lIGludGVybmFsIGFuZCBib3VuZGFyeSBjYXNl
cy4KKyAgICAgICAgdWludDhfdCBzcGVjaWFsQ2FzZXNbXSA9IHsKKyAgICAgICAgICAgIDAsCisg
ICAgICAgICAgICBiaXRzSW5Xb3JkIC8gMiwKKyAgICAgICAgICAgIGJpdHNJbldvcmQgLSAxLAor
ICAgICAgICAgICAgYml0c0luV29yZCwKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mU3BlY2lhbENhc2VzID0gc2l6ZW9mKHNwZWNpYWxDYXNlcykgLyBzaXpl
b2Yoc3BlY2lhbENhc2VzWzBdKTsKKworICAgICAgICBzaXplX3QgbmV4dFRlc3RWYWx1ZSA9IDA7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTcGVjaWFsQ2FzZXM7ICsr
aSkgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBudW1iZXJPZlNwZWNpYWxD
YXNlczsgKytqKSB7CisgICAgICAgICAgICAgICAgc3RhcnRJbmRleFtuZXh0VGVzdFZhbHVlXSA9
IHNwZWNpYWxDYXNlc1tpXTsKKyAgICAgICAgICAgICAgICBlbmRJbmRleFtuZXh0VGVzdFZhbHVl
KytdID0gc3BlY2lhbENhc2VzW2pdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gRmlsbCBpbiBzb21lIHJhbmRvbSBjYXNlcy4KKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IG5leHRUZXN0VmFsdWU7IGkgPCBudW1iZXJPZlRlc3RWYWx1ZXM7ICsraSkgeworICAgICAgICAg
ICAgc3RhcnRJbmRleFtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJhbmRvbU51bWJlcigpICog
Yml0c0luV29yZCk7CisgICAgICAgICAgICB1aW50OF90IHJlbWFpbmluZ0JpdHMgPSBiaXRzSW5X
b3JkIC0gc3RhcnRJbmRleFtpXTsKKyAgICAgICAgICAgIGVuZEluZGV4W2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4ocmFuZG9tTnVtYmVyKCkgKiByZW1haW5pbmdCaXRzKSArIHN0YXJ0SW5kZXhb
aV07CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXV0byBleHBlY3RlZEJpdEluV29yZCA9IFtd
IChXb3JkVHlwZSB3b3JkLCBzaXplX3QmIGluZGV4LCBzaXplX3QgZW5kSW5kZXgsIGJvb2wgdmFs
dWUpIC0+IGJvb2wgeworICAgICAgICB3b3JkID4+PSBpbmRleDsKKyAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgZW5kSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICgod29yZCAmIDEpID09IHN0YXRpY19j
YXN0PFdvcmRUeXBlPih2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgd29yZCA+Pj0gMTsKKyAgICAgICAgfQorICAg
ICAgICBpbmRleCA9IGVuZEluZGV4OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKwor
ICAgIGF1dG8gdGVzdCA9IFsmXSAoYm9vbCB2YWx1ZSwgc2l6ZV90IHNoaWZ0KSB7CisgICAgICAg
IGNvbnN0ZXhwciB1aW50NjRfdCBiYXNlV29yZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0
X3Q+OjptYXgoKTsKKyAgICAgICAgdWludDY0X3Qgd29yZCA9IChzaGlmdCA8IGJpdHNJbldvcmQp
ID8gYmFzZVdvcmQgPDwgc2hpZnQgOiAwOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZUZXN0VmFsdWVzOyArK2kpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbmRleCA9
IHN0YXJ0SW5kZXhbaV07CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZpbmRCaXRJbldvcmQo
d29yZCwgaW5kZXgsIGVuZEluZGV4W2ldLCB2YWx1ZSk7CisKKyAgICAgICAgICAgIHNpemVfdCBl
eHBlY3RlZEluZGV4ID0gc3RhcnRJbmRleFtpXTsKKyAgICAgICAgICAgIGJvb2wgZXhwZWN0ZWRS
ZXN1bHQgPSBleHBlY3RlZEJpdEluV29yZCh3b3JkLCBleHBlY3RlZEluZGV4LCBlbmRJbmRleFtp
XSwgdmFsdWUpOworCisgICAgICAgICAgICBBU1NFUlRfRVEocmVzdWx0LCBleHBlY3RlZFJlc3Vs
dCk7CisgICAgICAgICAgICBBU1NFUlRfRVEoaW5kZXgsIGV4cGVjdGVkSW5kZXgpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIGluaXRUZXN0VmFsdWVzKCk7CisKKyAgICAvLyBUZXN0aW5nIGZp
bmQgYSBzZXQgYml0LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTaGlmdFZh
bHVlczsgKytpKQorICAgICAgICB0ZXN0KHRydWUsIGkpOworCisgICAgLy8gVGVzdGluZyBmaW5k
IGEgY2xlYXJlZCBiaXQuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlNoaWZ0
VmFsdWVzOyArK2kpCisgICAgICAgIHRlc3QoZmFsc2UsIGkpOworfQorCitURVNUKFdURl9TdGRM
aWJFeHRyYXMsIGZpbmRCaXRJbldvcmRfdWludDMyX3QpIHsgdGVzdEZpbmRCaXRJbldvcmQ8dWlu
dDMyX3Q+KCk7IH0KK1RFU1QoV1RGX1N0ZExpYkV4dHJhcywgZmluZEJpdEluV29yZF91aW50NjRf
dCkgeyB0ZXN0RmluZEJpdEluV29yZDx1aW50NjRfdD4oKTsgfQorCit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="415069"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>