<?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>145526</bug_id>
          
          <creation_ts>2015-06-01 14:32:47 -0700</creation_ts>
          <short_desc>[Content Extensions] Reduce DFA memory usage.</short_desc>
          <delta_ts>2015-06-01 15:30:10 -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>WebCore Misc.</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1098591</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-01 14:32:47 -0700</bug_when>
    <thetext>std::pair&lt;uint8_t, uint32_t&gt; uses 8 bytes per transition, but we can reduce the memory usage of the DFA by about 3/8 by separating the characters from the destinations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098592</commentid>
    <comment_count>1</comment_count>
      <attachid>254013</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-01 14:34:23 -0700</bug_when>
    <thetext>Created attachment 254013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098603</commentid>
    <comment_count>2</comment_count>
      <attachid>254013</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-06-01 15:24:11 -0700</bug_when>
    <thetext>Comment on attachment 254013
Patch

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

&gt; Source/WebCore/contentextensions/DFA.cpp:43
&gt; +        + transitionCharacters.size() * sizeof(uint8_t)
&gt; +        + transitionDestinations.size() * sizeof(uint8_t)

This should be capacity(), not size().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098608</commentid>
    <comment_count>3</comment_count>
      <attachid>254013</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-01 15:29:34 -0700</bug_when>
    <thetext>Comment on attachment 254013
Patch

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

&gt;&gt; Source/WebCore/contentextensions/DFA.cpp:43
&gt;&gt; +        + transitionDestinations.size() * sizeof(uint8_t)
&gt; 
&gt; This should be capacity(), not size().

And destinations are uint32_t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1098609</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-01 15:30:10 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/185078</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254013</attachid>
            <date>2015-06-01 14:34:23 -0700</date>
            <delta_ts>2015-06-01 15:24:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145526-20150601143405.patch</filename>
            <type>text/plain</type>
            <size>11028</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTA3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE1LTA2LTAxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gUmVkdWNlIERGQSBtZW1vcnkgdXNhZ2UuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1MjYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBOjptZW1vcnlVc2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFOb2RlOjp0cmFuc2l0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTm9kZTo6ZmFsbGJh
Y2tUcmFuc2l0aW9uRGVzdGluYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkRGQU5vZGU6OmNoYW5nZUZhbGxiYWNrVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTm9kZTo6YWRkRmFsbGJhY2tUcmFuc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFOb2RlOjpjb250YWluc1Ry
YW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQU5vZGU6
OmtpbGwpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQS5oOgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL0RGQU1pbmltaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjptaW5pbWl6ZSk6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6Ok5GQVRvREZBOjpjb252ZXJ0KToKKyAgICAgICAgVXNlIHNlcGFyYXRlIFZlY3RvcnMg
Zm9yIHRoZSB0cmFuc2l0aW9uIGNoYXJhY3RlcnMgYW5kIGRlc3RpbmF0aW9ucyB0byBhdm9pZCB3
YXN0aW5nIG1lbW9yeSB0byBwYWRkaW5nIGEgc3RkOjpwYWlyLgorCiAyMDE1LTA2LTAxICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtDU1MgSklUXSBG
YWlsIHRvIGNvbXBpbGUgd2hlbiB3ZSBhcmUgb3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAJKHJldmlzaW9uIDE4NDk4
NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDggQEAgc2l6ZV90IERGQTo6bWVtb3J5VXNlZCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHNpemVvZihERkEpCiAgICAgICAgICsgYWN0aW9ucy5zaXplKCkgKiBzaXpl
b2YodWludDY0X3QpCi0gICAgICAgICsgdHJhbnNpdGlvbnMuc2l6ZSgpICogc2l6ZW9mKHN0ZDo6
cGFpcjx1aW50OF90LCB1aW50MzJfdD4pCisgICAgICAgICsgdHJhbnNpdGlvbkNoYXJhY3RlcnMu
c2l6ZSgpICogc2l6ZW9mKHVpbnQ4X3QpCisgICAgICAgICsgdHJhbnNpdGlvbkRlc3RpbmF0aW9u
cy5zaXplKCkgKiBzaXplb2YodWludDhfdCkKICAgICAgICAgKyBub2Rlcy5zaXplKCkgKiBzaXpl
b2YoREZBTm9kZSk7CiB9CiAKQEAgLTYwLDcgKzYxLDcgQEAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50
OF90LCB1aW50MzJfdD4+IERGQQogICAgIFZlY3RvcjxzdGQ6OnBhaXI8dWludDhfdCwgdWludDMy
X3Q+PiB2ZWN0b3I7CiAgICAgdmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodHJhbnNpdGlv
bnNMZW5ndGgoKSk7CiAgICAgZm9yICh1aW50MzJfdCBpID0gbV90cmFuc2l0aW9uc1N0YXJ0OyBp
IDwgbV90cmFuc2l0aW9uc1N0YXJ0ICsgbV90cmFuc2l0aW9uc0xlbmd0aDsgKytpKQotICAgICAg
ICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKGRmYS50cmFuc2l0aW9uc1tpXSk7CisgICAgICAgIHZl
Y3Rvci51bmNoZWNrZWRBcHBlbmQoc3RkOjptYWtlX3BhaXIoZGZhLnRyYW5zaXRpb25DaGFyYWN0
ZXJzW2ldLCBkZmEudHJhbnNpdGlvbkRlc3RpbmF0aW9uc1tpXSkpOwogICAgIHJldHVybiB2ZWN0
b3I7CiB9CiAKQEAgLTY5LDIxICs3MCwyNCBAQCB1aW50MzJfdCBERkFOb2RlOjpmYWxsYmFja1Ry
YW5zaXRpb25EZXN0CiAgICAgUkVMRUFTRV9BU1NFUlQoaGFzRmFsbGJhY2tUcmFuc2l0aW9uKCkp
OwogCiAgICAgLy8gSWYgdGhlcmUgaXMgYSBmYWxsYmFjayB0cmFuc2l0aW9uLCBpdCBpcyBqdXN0
IGFmdGVyIHRoZSBvdGhlciB0cmFuc2l0aW9ucyBhbmQgaGFzIGFuIGludmFsaWQgQVNDSUkgY2hh
cmFjdGVyIHRvIG1hcmsgaXQgYXMgYSBmYWxsYmFjayB0cmFuc2l0aW9uLgotICAgIEFTU0VSVChk
ZmEudHJhbnNpdGlvbnNbbV90cmFuc2l0aW9uc1N0YXJ0ICsgbV90cmFuc2l0aW9uc0xlbmd0aF0u
Zmlyc3QgPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpOwotICAgIHJldHVy
biBkZmEudHJhbnNpdGlvbnNbbV90cmFuc2l0aW9uc1N0YXJ0ICsgbV90cmFuc2l0aW9uc0xlbmd0
aF0uc2Vjb25kOworICAgIEFTU0VSVChkZmEudHJhbnNpdGlvbkNoYXJhY3RlcnNbbV90cmFuc2l0
aW9uc1N0YXJ0ICsgbV90cmFuc2l0aW9uc0xlbmd0aF0gPT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50OF90Pjo6bWF4KCkpOworICAgIHJldHVybiBkZmEudHJhbnNpdGlvbkRlc3RpbmF0aW9uc1tt
X3RyYW5zaXRpb25zU3RhcnQgKyBtX3RyYW5zaXRpb25zTGVuZ3RoXTsKIH0KIAogdm9pZCBERkFO
b2RlOjpjaGFuZ2VGYWxsYmFja1RyYW5zaXRpb24oREZBJiBkZmEsIHVpbnQzMl90IG5ld0Rlc3Rp
bmF0aW9uKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGhhc0ZhbGxiYWNrVHJhbnNpdGlvbigpKTsK
LSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGRmYS50cmFuc2l0aW9uc1ttX3RyYW5zaXRpb25zU3Rh
cnQgKyBtX3RyYW5zaXRpb25zTGVuZ3RoXS5maXJzdCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ4X3Q+OjptYXgoKSwgIldoZW4gY2hhbmdpbmcgYSBmYWxsYmFjayB0cmFuc2l0aW9uLCB0aGUg
ZmFsbGJhY2sgdHJhbnNpdGlvbiBzaG91bGQgYWxyZWFkeSBiZSBtYXJrZWQgYXMgc3VjaCIpOwot
ICAgIGRmYS50cmFuc2l0aW9uc1ttX3RyYW5zaXRpb25zU3RhcnQgKyBtX3RyYW5zaXRpb25zTGVu
Z3RoXSA9IHN0ZDo6cGFpcjx1aW50OF90LCB1aW50MzJfdD4oc3RkOjpudW1lcmljX2xpbWl0czx1
aW50OF90Pjo6bWF4KCksIG5ld0Rlc3RpbmF0aW9uKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KGRmYS50cmFuc2l0aW9uQ2hhcmFjdGVyc1ttX3RyYW5zaXRpb25zU3RhcnQgKyBtX3RyYW5zaXRp
b25zTGVuZ3RoXSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+OjptYXgoKSwgIldoZW4g
Y2hhbmdpbmcgYSBmYWxsYmFjayB0cmFuc2l0aW9uLCB0aGUgZmFsbGJhY2sgdHJhbnNpdGlvbiBz
aG91bGQgYWxyZWFkeSBiZSBtYXJrZWQgYXMgc3VjaCIpOworICAgIGRmYS50cmFuc2l0aW9uQ2hh
cmFjdGVyc1ttX3RyYW5zaXRpb25zU3RhcnQgKyBtX3RyYW5zaXRpb25zTGVuZ3RoXSA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpOworICAgIGRmYS50cmFuc2l0aW9uRGVzdGlu
YXRpb25zW21fdHJhbnNpdGlvbnNTdGFydCArIG1fdHJhbnNpdGlvbnNMZW5ndGhdID0gbmV3RGVz
dGluYXRpb247CiB9CiAKIHZvaWQgREZBTm9kZTo6YWRkRmFsbGJhY2tUcmFuc2l0aW9uKERGQSYg
ZGZhLCB1aW50MzJfdCBkZXN0aW5hdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoZGZhLnRyYW5zaXRpb25zLnNpemUoKSA9PSBtX3RyYW5zaXRpb25zU3RhcnQgKyBtX3Ry
YW5zaXRpb25zTGVuZ3RoLCAiQWRkaW5nIGEgZmFsbGJhY2sgdHJhbnNpdGlvbiBzaG91bGQgb25s
eSBoYXBwZW4gaWYgdGhlIG5vZGUgaXMgYXQgdGhlIGVuZCIpOwotICAgIGRmYS50cmFuc2l0aW9u
cy5hcHBlbmQoc3RkOjpwYWlyPHVpbnQ4X3QsIHVpbnQzMl90PihzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ4X3Q+OjptYXgoKSwgZGVzdGluYXRpb24pKTsKKyAgICBSRUxFQVNFX0FTU0VSVChkZmEu
dHJhbnNpdGlvbkNoYXJhY3RlcnMuc2l6ZSgpID09IGRmYS50cmFuc2l0aW9uRGVzdGluYXRpb25z
LnNpemUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKGRmYS50cmFuc2l0aW9u
Q2hhcmFjdGVycy5zaXplKCkgPT0gbV90cmFuc2l0aW9uc1N0YXJ0ICsgbV90cmFuc2l0aW9uc0xl
bmd0aCwgIkFkZGluZyBhIGZhbGxiYWNrIHRyYW5zaXRpb24gc2hvdWxkIG9ubHkgaGFwcGVuIGlm
IHRoZSBub2RlIGlzIGF0IHRoZSBlbmQiKTsKKyAgICBkZmEudHJhbnNpdGlvbkNoYXJhY3RlcnMu
YXBwZW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpKTsKKyAgICBkZmEudHJh
bnNpdGlvbkRlc3RpbmF0aW9ucy5hcHBlbmQoZGVzdGluYXRpb24pOwogICAgIEFTU0VSVCghKG1f
ZmxhZ3MgJiBIYXNGYWxsYmFja1RyYW5zaXRpb24pKTsKICAgICBtX2ZsYWdzIHw9IEhhc0ZhbGxi
YWNrVHJhbnNpdGlvbjsKIH0KQEAgLTkzLDcgKzk3LDcgQEAgYm9vbCBERkFOb2RlOjpjb250YWlu
c1RyYW5zaXRpb24odWludDhfdAogICAgIC8vIENhbGxlZCBmcm9tIERGQU1pbmltaXplciwgdGhp
cyBsb29wcyB0aG91Z2ggYSBtYXhpbXVtIG9mIDEyOCB0cmFuc2l0aW9ucywgc28gaXQncyBub3Qg
dG9vIHNsb3cuCiAgICAgQVNTRVJUKG1fdHJhbnNpdGlvbnNMZW5ndGggPD0gMTI4KTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX3RyYW5zaXRpb25zU3RhcnQ7IGkgPCBtX3RyYW5zaXRpb25zU3Rh
cnQgKyBtX3RyYW5zaXRpb25zTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGRmYS50cmFuc2l0
aW9uc1tpXS5maXJzdCA9PSB0cmFuc2l0aW9uKQorICAgICAgICBpZiAoZGZhLnRyYW5zaXRpb25D
aGFyYWN0ZXJzW2ldID09IHRyYW5zaXRpb24pCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA1LDggKzEwOSwxMCBAQCB2b2lkIERGQU5vZGU6
OmtpbGwoREZBJiBkZmEpCiAgICAgbV9mbGFncyA9IElzS2lsbGVkOyAvLyBLaWxsZWQgbm9kZXMg
ZG9uJ3QgaGF2ZSBhbnkgb3RoZXIgZmxhZ3MuCiAgICAgCiAgICAgLy8gSW52YWxpZGF0ZSB0aGUg
bm93LXVudXNlZCBtZW1vcnkgaW4gdGhlIERGQSB0byBtYWtlIGZpbmRpbmcgYnVncyBlYXNpZXIu
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV90cmFuc2l0aW9uc1N0YXJ0OyBpIDwgbV90cmFuc2l0
aW9uc1N0YXJ0ICsgbV90cmFuc2l0aW9uc0xlbmd0aDsgKytpKQotICAgICAgICBkZmEudHJhbnNp
dGlvbnNbaV0gPSBzdGQ6Om1ha2VfcGFpcihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+Ojpt
YXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3RyYW5zaXRpb25zU3RhcnQ7IGkgPCBtX3RyYW5zaXRpb25zU3RhcnQgKyBt
X3RyYW5zaXRpb25zTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZGZhLnRyYW5zaXRpb25DaGFyYWN0
ZXJzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCk7CisgICAgICAgIGRm
YS50cmFuc2l0aW9uRGVzdGluYXRpb25zW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpOworICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2FjdGlvbnNTdGFydDsg
aSA8IG1fYWN0aW9uc1N0YXJ0ICsgbV9hY3Rpb25zTGVuZ3RoOyArK2kpCiAgICAgICAgIGRmYS5h
Y3Rpb25zW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuaAkocmV2aXNpb24gMTg0OTg2KQor
KysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDggKzQ2LDggQEAgc3RydWN0IFdFQkNPUkVfRVhQT1JUIERGQSB7CiAjZW5kaWYKICAg
ICAKICAgICBWZWN0b3I8dWludDY0X3Q+IGFjdGlvbnM7Ci0gICAgLy8gRklYTUU6IHRyYW5zaXRp
b25zIGNvdWxkIGJlIHR3byBWZWN0b3JzIHRvIHNhdmUgZXZlbiBtb3JlIG1lbW9yeS4KLSAgICBW
ZWN0b3I8c3RkOjpwYWlyPHVpbnQ4X3QsIHVpbnQzMl90Pj4gdHJhbnNpdGlvbnM7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRyYW5zaXRpb25DaGFyYWN0ZXJzOworICAgIFZlY3Rvcjx1aW50MzJfdD4g
dHJhbnNpdGlvbkRlc3RpbmF0aW9uczsKICAgICBWZWN0b3I8REZBTm9kZT4gbm9kZXM7CiAgICAg
dW5zaWduZWQgcm9vdCB7IDAgfTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFNaW5pbWl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0RGQU1pbmltaXplci5jcHAJKHJldmlzaW9uIDE4NDk4NikKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQU1pbmltaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMCwxNCArMTAwLDE5IEBAIHN0YXRpYyB2b2lkIHNpbXBsaWZ5VHJhbnNpdGlv
bnMoREZBJiBkZmEKICAgICAgICAgCiAgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdFNsb3QgPSBk
ZmFOb2RlLnRyYW5zaXRpb25zU3RhcnQoKTsKICAgICAgICAgICAgIGRmYU5vZGUucmVzZXRUcmFu
c2l0aW9ucyhmaXJzdFNsb3QsIHRyYW5zaXRpb25zLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICAgICAgZGZhLnRyYW5zaXRpb25zW2ZpcnN0U2xvdCArIGldID0gdHJhbnNpdGlvbnNbaV07Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhbnNpdGlvbnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBkZmEudHJhbnNpdGlvbkNoYXJhY3RlcnNbZmlyc3RTbG90
ICsgaV0gPSB0cmFuc2l0aW9uc1tpXS5maXJzdDsKKyAgICAgICAgICAgICAgICBkZmEudHJhbnNp
dGlvbkRlc3RpbmF0aW9uc1tmaXJzdFNsb3QgKyBpXSA9IHRyYW5zaXRpb25zW2ldLnNlY29uZDsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRyYW5zaXRpb25z
LnNpemUoKTsgaSA8IGF2YWlsYWJsZVNsb3RDb3VudDsgKytpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gSW52YWxpZGF0ZSBub3ctdW51c2VkIG1lbW9yeSB0byBtYWtlIGZpbmRpbmcgYnVncyBlYXNp
ZXIuCi0gICAgICAgICAgICAgICAgZGZhLnRyYW5zaXRpb25zW2ZpcnN0U2xvdCArIGldID0gc3Rk
OjptYWtlX3BhaXIoc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCksIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSk7CisgICAgICAgICAgICAgICAgZGZhLnRyYW5z
aXRpb25DaGFyYWN0ZXJzW2ZpcnN0U2xvdCArIGldID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
OF90Pjo6bWF4KCk7CisgICAgICAgICAgICAgICAgZGZhLnRyYW5zaXRpb25EZXN0aW5hdGlvbnNb
Zmlyc3RTbG90ICsgaV0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAod2lsbEhhdmVGYWxsYmFjaykgeworICAgICAg
ICAgICAgICAgIGRmYS50cmFuc2l0aW9uQ2hhcmFjdGVyc1tmaXJzdFNsb3QgKyB0cmFuc2l0aW9u
cy5zaXplKCldID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCk7CisgICAgICAg
ICAgICAgICAgZGZhLnRyYW5zaXRpb25EZXN0aW5hdGlvbnNbZmlyc3RTbG90ICsgdHJhbnNpdGlv
bnMuc2l6ZSgpXSA9IG5ld0ZhbGxiYWNrRGVzdGluYXRpb247CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAod2lsbEhhdmVGYWxsYmFjaykKLSAgICAgICAgICAgICAgICBkZmEudHJhbnNp
dGlvbnNbZmlyc3RTbG90ICsgdHJhbnNpdGlvbnMuc2l6ZSgpXSA9IHN0ZDo6bWFrZV9wYWlyKHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpLCBuZXdGYWxsYmFja0Rlc3RpbmF0aW9u
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTU0MSw3ICs1NDYsNyBAQCB2b2lkIERGQU1pbmlt
aXplcjo6bWluaW1pemUoREZBJiBkZmEpCiAgICAgZm9yIChERkFOb2RlJiBub2RlIDogZGZhLm5v
ZGVzKSB7CiAgICAgICAgIGF1dG8gbm9kZVRyYW5zaXRpb25zID0gbm9kZS50cmFuc2l0aW9ucyhk
ZmEpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS50cmFuc2l0aW9uc0xl
bmd0aCgpOyArK2kpCi0gICAgICAgICAgICBkZmEudHJhbnNpdGlvbnNbbm9kZS50cmFuc2l0aW9u
c1N0YXJ0KCkgKyBpXS5zZWNvbmQgPSByZWxvY2F0aW9uVmVjdG9yW25vZGVUcmFuc2l0aW9uc1tp
XS5zZWNvbmRdOworICAgICAgICAgICAgZGZhLnRyYW5zaXRpb25EZXN0aW5hdGlvbnNbbm9kZS50
cmFuc2l0aW9uc1N0YXJ0KCkgKyBpXSA9IHJlbG9jYXRpb25WZWN0b3Jbbm9kZVRyYW5zaXRpb25z
W2ldLnNlY29uZF07CiAgICAgICAgIGlmIChub2RlLmhhc0ZhbGxiYWNrVHJhbnNpdGlvbigpKQog
ICAgICAgICAgICAgbm9kZS5jaGFuZ2VGYWxsYmFja1RyYW5zaXRpb24oZGZhLCByZWxvY2F0aW9u
VmVjdG9yW25vZGUuZmFsbGJhY2tUcmFuc2l0aW9uRGVzdGluYXRpb24oZGZhKV0pOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHAJ
KHJldmlzaW9uIDE4NDk4NikKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05G
QVRvREZBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzczLDcgKzM3Myw4IEBAIERGQSBORkFUb0RG
QTo6Y29udmVydChORkEmIG5mYSkKICAgICAgICAgTm9kZUlkU2V0IHNldEZhbGxiYWNrVHJhbnNp
dGlvbjsKICAgICAgICAgcG9wdWxhdGVUcmFuc2l0aW9ucyh0cmFuc2l0aW9uc0Zyb21DbG9zZWRT
ZXQsIHNldEZhbGxiYWNrVHJhbnNpdGlvbiwgKnVuaXF1ZU5vZGVJZFNldEltcGwsIG5mYUdyYXBo
LCBuZmFOb2RlQ2xvc3VyZXMpOwogCi0gICAgICAgIHVuc2lnbmVkIHRyYW5zaXRpb25zU3RhcnQg
PSBkZmEudHJhbnNpdGlvbnMuc2l6ZSgpOworICAgICAgICB1bnNpZ25lZCB0cmFuc2l0aW9uc1N0
YXJ0ID0gZGZhLnRyYW5zaXRpb25DaGFyYWN0ZXJzLnNpemUoKTsKKyAgICAgICAgQVNTRVJUKGRm
YS50cmFuc2l0aW9uQ2hhcmFjdGVycy5zaXplKCkgPT0gZGZhLnRyYW5zaXRpb25EZXN0aW5hdGlv
bnMuc2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBrZXkgPSAwOyBrZXkgPCB0cmFuc2l0
aW9uc0Zyb21DbG9zZWRTZXQuc2l6ZSgpOyArK2tleSkgewogICAgICAgICAgICAgTm9kZUlkU2V0
JiB0YXJnZXROb2RlU2V0ID0gdHJhbnNpdGlvbnNGcm9tQ2xvc2VkU2V0W2tleV07CiAKQEAgLTM4
MiwxMSArMzgzLDEzIEBAIERGQSBORkFUb0RGQTo6Y29udmVydChORkEmIG5mYSkKIAogICAgICAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0Tm9kZUlkID0gZ2V0T3JDcmVhdGVERkFOb2RlKHRhcmdldE5v
ZGVTZXQsIG5mYUdyYXBoLCBkZmEsIHVuaXF1ZU5vZGVJZFNldFRhYmxlLCB1bnByb2Nlc3NlZE5v
ZGVzKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtleSA8PSAxMjcpOwotICAgICAgICAg
ICAgZGZhLnRyYW5zaXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDx1aW50
OF90PihrZXkpLCB0YXJnZXROb2RlSWQpKTsKKyAgICAgICAgICAgIGRmYS50cmFuc2l0aW9uQ2hh
cmFjdGVycy5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdD4oa2V5KSk7CisgICAgICAgICAgICBk
ZmEudHJhbnNpdGlvbkRlc3RpbmF0aW9ucy5hcHBlbmQodGFyZ2V0Tm9kZUlkKTsKIAogICAgICAg
ICAgICAgdGFyZ2V0Tm9kZVNldC5jbGVhcigpOwogICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVk
IHRyYW5zaXRpb25zRW5kID0gZGZhLnRyYW5zaXRpb25zLnNpemUoKTsKKyAgICAgICAgdW5zaWdu
ZWQgdHJhbnNpdGlvbnNFbmQgPSBkZmEudHJhbnNpdGlvbkNoYXJhY3RlcnMuc2l6ZSgpOworICAg
ICAgICBBU1NFUlQoZGZhLnRyYW5zaXRpb25DaGFyYWN0ZXJzLnNpemUoKSA9PSBkZmEudHJhbnNp
dGlvbkRlc3RpbmF0aW9ucy5zaXplKCkpOwogICAgICAgICB1bnNpZ25lZCB0cmFuc2l0aW9uc0xl
bmd0aCA9IHRyYW5zaXRpb25zRW5kIC0gdHJhbnNpdGlvbnNTdGFydDsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQodHJhbnNpdGlvbnNMZW5ndGggPD0gMTI3KTsKICAgICAgICAgZGZhLm5vZGVzW2Rm
YU5vZGVJZF0uc2V0VHJhbnNpdGlvbnModHJhbnNpdGlvbnNTdGFydCwgc3RhdGljX2Nhc3Q8dWlu
dDhfdD4odHJhbnNpdGlvbnNMZW5ndGgpKTsK
</data>
<flag name="review"
          id="278987"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>