<?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>73421</bug_id>
          
          <creation_ts>2011-11-30 03:06:39 -0800</creation_ts>
          <short_desc>Reuse cached style fully if the parent inherited styles are equal</short_desc>
          <delta_ts>2011-11-30 09:33:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hyatt</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>511586</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-30 03:06:39 -0800</bug_when>
    <thetext>Matched declaration cache currently restores the non-inherted properties from the cache entry but still applies all inherited properties normally. In case the current parent inherited style is equivalent to the cache entry&apos;s, also the inherited style can be reused and no properties need to be applied. This is faster and saves memory (by sharing the style structures more).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511630</commentid>
    <comment_count>1</comment_count>
      <attachid>117167</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-30 04:33:07 -0800</bug_when>
    <thetext>Created attachment 117167
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511677</commentid>
    <comment_count>2</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-30 05:56:35 -0800</bug_when>
    <thetext>Loading the HTML5 spec this reduces style memory consumption by ~20% (5MB, ~2.5% of the total) and speeds up the style applying by ~25% for ~0.4s (2-3%) gain in the benchmark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511800</commentid>
    <comment_count>3</comment_count>
      <attachid>117167</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-11-30 09:15:36 -0800</bug_when>
    <thetext>Comment on attachment 117167
patch

cq+!!!!!!111!!!1!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511806</commentid>
    <comment_count>4</comment_count>
      <attachid>117167</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-30 09:23:45 -0800</bug_when>
    <thetext>Comment on attachment 117167
patch

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

&gt; Source/WebCore/rendering/style/RenderStyle.cpp:332
&gt; +        &amp;&amp; inherited.get() == other-&gt;inherited.get()
&gt; +#if ENABLE(SVG)
&gt; +        &amp;&amp; m_svgStyle.get() == other-&gt;m_svgStyle.get()
&gt; +#endif
&gt; +        &amp;&amp; rareInheritedData.get() == other-&gt;rareInheritedData.get();

I’m surprised these get() calls were needed. You typically can compare smart pointers without an explicit get() call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511809</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-30 09:26:29 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 117167 [details])
&gt; cq+!!!!!!111!!!1!!!

Oh no!!!11</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511810</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-30 09:26:41 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/101524</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511811</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-30 09:28:13 -0800</bug_when>
    <thetext>&gt; I’m surprised these get() calls were needed. You typically can compare smart pointers without an explicit get() call.

These smart pointers are bit special (some very early khtml code too).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511812</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-30 09:33:42 -0800</bug_when>
    <thetext>Specifically DataRef::operator== compares the objects for equality rather than just the pointers (which is what I want here for performance reasons).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117167</attachid>
            <date>2011-11-30 04:33:07 -0800</date>
            <delta_ts>2011-11-30 09:23:44 -0800</delta_ts>
            <desc>patch</desc>
            <filename>matched-declaration-cache-inherit-5.patch</filename>
            <type>text/plain</type>
            <size>13821</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTQ4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDExLTExLTMwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXVzZSBjYWNoZWQgc3R5bGUg
ZnVsbHkgaWYgdGhlIHBhcmVudCBpbmhlcml0ZWQgc3R5bGVzIGFyZSBlcXVhbCAKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNDIxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWF0Y2hlZCBkZWNsYXJhdGlv
biBjYWNoZSBjdXJyZW50bHkgcmVzdG9yZXMgdGhlIG5vbi1pbmhlcnRlZCBwcm9wZXJ0aWVzIGZy
b20gdGhlIGNhY2hlCisgICAgICAgIGVudHJ5IGJ1dCBzdGlsbCBhcHBsaWVzIGFsbCBpbmhlcml0
ZWQgcHJvcGVydGllcyBub3JtYWxseS4gSW4gY2FzZSB0aGUgY3VycmVudCBwYXJlbnQKKyAgICAg
ICAgaW5oZXJpdGVkIHN0eWxlIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGNhY2hlIGVudHJ5J3MsIGFs
c28gdGhlIGluaGVyaXRlZCBzdHlsZSBjYW4gYmUgcmV1c2VkCisgICAgICAgIGFuZCBubyBwcm9w
ZXJ0aWVzIG5lZWQgdG8gYmUgYXBwbGllZC4gVGhpcyBpcyBmYXN0ZXIgYW5kIHNhdmVzIG1lbW9y
eSAoYnkgc2hhcmluZyB0aGUKKyAgICAgICAgc3R5bGUgc3RydWN0dXJlcyBtb3JlKS4KKyAgICAg
ICAgCisgICAgICAgIExvYWRpbmcgSFRNTDUgc3BlYyB0aGlzIHJlZHVjZXMgc3R5bGUgbWVtb3J5
IGNvbnN1bXB0aW9uIGJ5IH4yMCUgKDVNQikgYW5kIHNwZWVkcyB1cCB0aGUKKyAgICAgICAgc3R5
bGUgYXBwbHlpbmcgYnkgfjI1JSBmb3IgfjAuNHMgKDItMyUpIGdhaW4gaW4gdGhlIGJlbmNobWFy
ay4KKyAgICAgICAgCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9ucyk6CisgICAgICAg
IAorICAgICAgICAgICAgUmVtb3ZlIHRoZSBjb2RlIHRoYXQgZHluYW1pY2FsbHkgZGlzYWJsZXMg
aW5oZXJpdGVkIG9ubHkgYXBwbHlpbmcuIFdlIG5vdyBkb24ndCBhbGxvdworICAgICAgICAgICAg
c3R5bGVzIHdpdGggZXhwbGljaXRseSBpbmhlcml0ZWQgcHJvcGVydGllcyB0byBiZSBjYWNoZWQg
aW4gdGhlIGZpcnN0IHBsYWNlLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OmZpbmRGcm9tTWF0Y2hlZERlY2xhcmF0aW9uQ2FjaGUpOgorICAgICAgICAKKyAg
ICAgICAgICAgIFJldHVybiB0aGUgZnVsbCBjYWNoZSBpdGVtLgorICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFkZFRvTWF0Y2hlZERlY2xhcmF0aW9uQ2FjaGUp
OgorICAgICAgICAKKyAgICAgICAgICAgIEFsc28gdGhlIHBhcmVudCBzdHlsZSBpcyBub3cgbmVl
ZGVkIGZvciB0aGUgY2hlY2sgZm9yIGZ1bGwgc2hhcmluZy4KKyAgICAgICAgCisgICAgICAgIChX
ZWJDb3JlOjppc0NhY2hlYWJsZUluTWF0Y2hlZERlY2xhcmF0aW9uQ2FjaGUpOgorCisgICAgICAg
ICAgICBEb24ndCBhbGxvdyBzdHlsZXMgd2l0aCBleHBsaWNpdGx5IGluaGVyaXRlZCBwcm9wZXJ0
aWVzIHRvIGJlIGNhY2hlZCBhdCBhbGwuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6YXBwbHlNYXRjaGVkRGVjbGFyYXRpb25zKToKKyAgICAgICAgCisgICAg
ICAgICAgICBJZiB0aGUgcGFyZW50IGluaGVyaXRlZCBzdHlsZXMgYXJlIGVxdWFsIHJldXNlIHRo
ZSBjYWNoZSBlbnRyeSBmdWxseSBhbmQgcmV0dXJuIHdpdGhvdXQKKyAgICAgICAgICAgIGRvaW5n
IGFueXRoaW5nIGVsc2UuCisgICAgICAgIAorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9y
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbmhlcml0ZWREYXRhU2hhcmVkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAgICAgICAgCisgICAgICAgICAgICBBZGQg
ZmFzdCBjaGVjayBmb3IgZXF1YWwgaW5oZXJpdGVkIHByb3BlcnRpZXMuCisKIDIwMTEtMTEtMzAg
IFJhZmFlbCBXZWluc3RlaW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1v
dmUgdW51c2VkIGlzSW5saW5lQ29kZSBmcm9tIFY4UHJveHkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDEwMTQ4MykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExOSw3ICsy
MTE5LDcgQEAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0aChDU1NQcgogfQogCiB0
ZW1wbGF0ZSA8Ym9vbCBhcHBseUZpcnN0Pgotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseURl
Y2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZURlY2xhcmF0aW9uLCBi
b29sIGlzSW1wb3J0YW50LCBib29sJiBpbmhlcml0ZWRPbmx5KQordm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphcHBseURlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZURl
Y2xhcmF0aW9uLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVyaXRlZE9ubHkpCiB7CiAgICAg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlRGVj
bGFyYXRpb24tPmVuZCgpOwogICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGVEZWNsYXJhdGlvbi0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CkBAIC0yMTI3LDEyICsyMTI3LDExIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBw
bHlEZWNsYXJhdGlvbigKICAgICAgICAgaWYgKGlzSW1wb3J0YW50ICE9IGN1cnJlbnQuaXNJbXBv
cnRhbnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoaW5oZXJpdGVkT25s
eSAmJiAhY3VycmVudC5pc0luaGVyaXRlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnQu
dmFsdWUoKS0+aXNJbmhlcml0ZWRWYWx1ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIGV4cGxpY2l0bHkgaW5oZXJp
dGVkLCB3ZSBuZWVkIHRvIGFwcGx5IGZ1cnRoZXIgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzCi0g
ICAgICAgICAgICAvLyBhcyB0aGV5IG1pZ2h0IG92ZXJyaWRlIHRoZSB2YWx1ZSBpbmhlcml0ZWQg
aGVyZS4gVGhpcyBpcyByZWFsbHkgcGVyLXByb3BlcnR5IGJ1dCB0aGF0IGlzCi0gICAgICAgICAg
ICAvLyBwcm9iYWJseSBub3Qgd29ydGggb3B0aW1pemluZyBmb3IuCi0gICAgICAgICAgICBpbmhl
cml0ZWRPbmx5ID0gZmFsc2U7CisgICAgICAgICAgICAvLyBhcyB0aGV5IG1pZ2h0IG92ZXJyaWRl
IHRoZSB2YWx1ZSBpbmhlcml0ZWQgaGVyZS4gRm9yIHRoaXMgcmVhc29uIHdlIGRvbid0IGFsbG93
IGRlY2xhcmF0aW9ucyB3aXRoCisgICAgICAgICAgICAvLyBleHBsaWNpdGx5IGluaGVyaXRlZCBw
cm9wZXJ0aWVzIHRvIGJlIGNhY2hlZC4KKyAgICAgICAgICAgIEFTU0VSVCghY3VycmVudC52YWx1
ZSgpLT5pc0luaGVyaXRlZFZhbHVlKCkpOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KICAgICAgICAgaW50IHByb3BlcnR5ID0gY3VycmVudC5pZCgpOwogICAgICAgICBpZiAoYXBw
bHlGaXJzdCkgewpAQCAtMjE1Niw3ICsyMTU1LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjph
cHBseURlY2xhcmF0aW9uKAogfQogCiB0ZW1wbGF0ZSA8Ym9vbCBhcHBseUZpcnN0Pgotdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9ucyhib29sIGlzSW1wb3J0YW50LCBpbnQg
c3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sJiBpbmhlcml0ZWRPbmx5KQordm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9ucyhib29sIGlzSW1wb3J0YW50LCBpbnQgc3Rh
cnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCiB7CiAgICAgaWYgKHN0
YXJ0SW5kZXggPT0gLTEpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMTAsNyArMjIwOSw3IEBAIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBDU1NTdHlsZVNlbGVjdG9yOjoKICAgICByZXR1cm4gIShhID09
IGIpOwogfQogCi1jb25zdCBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6ZmluZEZyb21N
YXRjaGVkRGVjbGFyYXRpb25DYWNoZSh1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYg
bWF0Y2hSZXN1bHQpCitjb25zdCBDU1NTdHlsZVNlbGVjdG9yOjpNYXRjaGVkU3R5bGVEZWNsYXJh
dGlvbkNhY2hlSXRlbSogQ1NTU3R5bGVTZWxlY3Rvcjo6ZmluZEZyb21NYXRjaGVkRGVjbGFyYXRp
b25DYWNoZSh1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQpCiB7
CiAgICAgQVNTRVJUKGhhc2gpOwogCkBAIC0yMjI5LDE4ICsyMjI4LDE5IEBAIGNvbnN0IFJlbmRl
clN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpmaW4KICAgICB9CiAgICAgaWYgKGNhY2hlSXRlbS5t
YXRjaFJlc3VsdCAhPSBtYXRjaFJlc3VsdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGNhY2hlSXRlbS5yZW5kZXJTdHlsZS5nZXQoKTsKKyAgICByZXR1cm4gJmNhY2hlSXRlbTsKIH0K
IAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRUb01hdGNoZWREZWNsYXJhdGlvbkNhY2hlKGNv
bnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgdW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQm
IG1hdGNoUmVzdWx0KQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRUb01hdGNoZWREZWNsYXJh
dGlvbkNhY2hlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlLCB1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQp
CiB7CiAgICAgQVNTRVJUKGhhc2gpOwogICAgIE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uQ2FjaGVJ
dGVtIGNhY2hlSXRlbTsKICAgICBjYWNoZUl0ZW0ubWF0Y2hlZFN0eWxlRGVjbGFyYXRpb25zLmFw
cGVuZChtX21hdGNoZWREZWNscyk7CiAgICAgY2FjaGVJdGVtLm1hdGNoUmVzdWx0ID0gbWF0Y2hS
ZXN1bHQ7CiAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGNhY2hlIHRoZSBvcmlnaW5hbCBSZW5k
ZXJTdHlsZSBpbnN0YW5jZS4gSXQgbWF5IGJlIGZ1cnRoZXIgbW9kaWZpZWQuCi0gICAgLy8gVGhl
IFJlbmRlclN0eWxlIGluIHRoZSBjYWNoZSBpcyByZWFsbHkganVzdCBhIGhvbGRlciBmb3IgdGhl
IG5vbi1pbmhlcml0ZWQgc3Vic3RydWN0dXJlcyBhbmQgbmV2ZXIgdXNlZCBhcy1pcy4KKyAgICAv
LyBUaGUgUmVuZGVyU3R5bGUgaW4gdGhlIGNhY2hlIGlzIHJlYWxseSBqdXN0IGEgaG9sZGVyIGZv
ciB0aGUgc3Vic3RydWN0dXJlcyBhbmQgbmV2ZXIgdXNlZCBhcy1pcy4KICAgICBjYWNoZUl0ZW0u
cmVuZGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3R5bGUpOworICAgIGNhY2hlSXRlbS5w
YXJlbnRSZW5kZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShwYXJlbnRTdHlsZSk7CiAgICAg
bV9tYXRjaFN0eWxlRGVjbGFyYXRpb25DYWNoZS5hZGQoaGFzaCwgY2FjaGVJdGVtKTsKIH0KIApA
QCAtMjI1Miw2ICsyMjUyLDkgQEAgc3RhdGljIGJvb2wgaXNDYWNoZWFibGVJbk1hdGNoZWREZWNs
YXJhdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHN0eWxlLT56b29tKCkgIT0gUmVu
ZGVyU3R5bGU6OmluaXRpYWxab29tKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBU
aGUgY2FjaGUgYXNzdW1lcyBzdGF0aWMga25vd2xlZGdlIGFib3V0IHdoaWNoIHByb3BlcnRpZXMg
YXJlIGluaGVyaXRlZC4KKyAgICBpZiAocGFyZW50U3R5bGUtPmhhc0V4cGxpY2l0bHlJbmhlcml0
ZWRQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMjI1OSwxMiArMjI2MiwyMSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
TWF0Y2hlZERlY2xhCiB7CiAgICAgdW5zaWduZWQgY2FjaGVIYXNoID0gbWF0Y2hSZXN1bHQuaXND
YWNoZWFibGUgPyBjb21wdXRlRGVjbGFyYXRpb25IYXNoKG1fbWF0Y2hlZERlY2xzLmRhdGEoKSwg
bV9tYXRjaGVkRGVjbHMuc2l6ZSgpKSA6IDA7CiAgICAgYm9vbCBhcHBseUluaGVyaXRlZE9ubHkg
PSBmYWxzZTsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSogY2FjaGVkU3R5bGUgPSAwOwotICAgIGlm
IChjYWNoZUhhc2ggJiYgKGNhY2hlZFN0eWxlID0gZmluZEZyb21NYXRjaGVkRGVjbGFyYXRpb25D
YWNoZShjYWNoZUhhc2gsIG1hdGNoUmVzdWx0KSkpIHsKKyAgICBjb25zdCBNYXRjaGVkU3R5bGVE
ZWNsYXJhdGlvbkNhY2hlSXRlbSogY2FjaGVJdGVtID0gMDsKKyAgICBpZiAoY2FjaGVIYXNoICYm
IChjYWNoZUl0ZW0gPSBmaW5kRnJvbU1hdGNoZWREZWNsYXJhdGlvbkNhY2hlKGNhY2hlSGFzaCwg
bWF0Y2hSZXN1bHQpKSkgewogICAgICAgICAvLyBXZSBjYW4gYnVpbGQgdXAgdGhlIHN0eWxlIGJ5
IGNvcHlpbmcgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20gYW4gZWFybGllciBzdHlsZSBv
YmplY3QgYnVpbHQgdXNpbmcgdGhlIHNhbWUgZXhhY3QKICAgICAgICAgLy8gc3R5bGUgZGVjbGFy
YXRpb25zLiBXZSB0aGVuIG9ubHkgbmVlZCB0byBhcHBseSB0aGUgaW5oZXJpdGVkIHByb3BlcnRp
ZXMsIGlmIGFueSwgYXMgdGhlaXIgdmFsdWVzIGNhbiBkZXBlbmQgb24gdGhlIAogICAgICAgICAv
LyBlbGVtZW50IGNvbnRleHQuIFRoaXMgaXMgZmFzdCBhbmQgc2F2ZXMgbWVtb3J5IGJ5IHJldXNp
bmcgdGhlIHN0eWxlIGRhdGEgc3RydWN0dXJlcy4KLSAgICAgICAgbV9zdHlsZS0+Y29weU5vbklu
aGVyaXRlZEZyb20oY2FjaGVkU3R5bGUpOworICAgICAgICBtX3N0eWxlLT5jb3B5Tm9uSW5oZXJp
dGVkRnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAgICAgaWYgKG1fcGFy
ZW50U3R5bGUtPmluaGVyaXRlZERhdGFTaGFyZWQoY2FjaGVJdGVtLT5wYXJlbnRSZW5kZXJTdHls
ZS5nZXQoKSkpIHsKKyAgICAgICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0dXMgPSBtX3N0eWxl
LT5pbnNpZGVMaW5rKCk7CisgICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgaXRlbSBwYXJlbnQg
c3R5bGUgaGFzIGlkZW50aWNhbCBpbmhlcml0ZWQgcHJvcGVydGllcyB0byB0aGUgY3VycmVudCBw
YXJlbnQgc3R5bGUgdGhlbiB0aGUKKyAgICAgICAgICAgIC8vIHJlc3VsdGluZyBzdHlsZSB3aWxs
IGJlIGlkZW50aWNhbCB0b28uIFdlIGNvcHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVzIG92ZXIg
ZnJvbSB0aGUgY2FjaGUgYW5kIGFyZSBkb25lLgorICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJp
dEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgICAgICAvLyBVbmZv
cnR1bmF0ZWx5IHRoZSBsaW5rIHN0YXR1cyBpcyB0cmVhdGVkIGxpa2UgYW4gaW5oZXJpdGVkIHBy
b3BlcnR5LiBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgcmVzdG9yZSBpdC4KKyAgICAgICAgICAgIG1f
c3R5bGUtPnNldEluc2lkZUxpbmsobGlua1N0YXR1cyk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KICAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gdHJ1ZTsgCiAgICAgfQogICAg
IC8vIE5vdyB3ZSBoYXZlIGFsbCBvZiB0aGUgbWF0Y2hlZCBydWxlcyBpbiB0aGUgYXBwcm9wcmlh
dGUgb3JkZXIuIFdhbGsgdGhlIHJ1bGVzIGFuZCBhcHBseQpAQCAtMjI3Nyw3ICsyMjg5LDcgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseU1hdGNoZWREZWNsYQogICAgIGFwcGx5RGVjbGFy
YXRpb25zPHRydWU+KHRydWUsIG1hdGNoUmVzdWx0LmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0
Lmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBhcHBseURlY2xhcmF0aW9u
czx0cnVlPih0cnVlLCBtYXRjaFJlc3VsdC5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQubGFzdFVB
UnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKIAotICAgIGlmIChjYWNoZWRTdHlsZSAmJiBjYWNo
ZWRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkgewor
ICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpICE9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkgewogICAgICAgICBtX2ZvbnREaXJ0eSA9
IHRydWU7CiAgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAgIH0KQEAgLTIy
OTAsNyArMjMwMiw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlNYXRjaGVkRGVjbGEK
ICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhlaWdo
dFZhbHVlKTsKIAogICAgIC8vIE1hbnkgcHJvcGVydGllcyBkZXBlbmQgb24gdGhlIGZvbnQuIElm
IGl0IGNoYW5nZXMgd2UganVzdCBhcHBseSBhbGwgcHJvcGVydGllcy4KLSAgICBpZiAoY2FjaGVk
U3R5bGUgJiYgY2FjaGVkU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IG1fc3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpKQorICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpCiAgICAg
ICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogCiAgICAgLy8gTm93IGRvIHRoZSBub3Jt
YWwgcHJpb3JpdHkgVUEgcHJvcGVydGllcy4KQEAgLTIzMTMsMTEgKzIzMjUsMTEgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphcHBseU1hdGNoZWREZWNsYQogICAgIAogICAgIEFTU0VSVCghbV9m
b250RGlydHkpOwogICAgIAotICAgIGlmIChjYWNoZWRTdHlsZSB8fCAhY2FjaGVIYXNoKQorICAg
IGlmIChjYWNoZUl0ZW0gfHwgIWNhY2hlSGFzaCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICgh
aXNDYWNoZWFibGVJbk1hdGNoZWREZWNsYXJhdGlvbkNhY2hlKG1fc3R5bGUuZ2V0KCksIG1fcGFy
ZW50U3R5bGUpKQogICAgICAgICByZXR1cm47Ci0gICAgYWRkVG9NYXRjaGVkRGVjbGFyYXRpb25D
YWNoZShtX3N0eWxlLmdldCgpLCBjYWNoZUhhc2gsIG1hdGNoUmVzdWx0KTsKKyAgICBhZGRUb01h
dGNoZWREZWNsYXJhdGlvbkNhY2hlKG1fc3R5bGUuZ2V0KCksIG1fcGFyZW50U3R5bGUsIGNhY2hl
SGFzaCwgbWF0Y2hSZXN1bHQpOwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFn
ZVJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2Us
IGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmgJKHJldmlzaW9uIDEwMTQ4MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw5ICsyNjQsOSBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBhcHBseU1hdGNoZWREZWNsYXJhdGlvbnMoY29uc3QgTWF0Y2hSZXN1bHQmKTsK
ICAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+Ci0gICAgdm9pZCBhcHBseURlY2xhcmF0aW9u
cyhib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCYgaW5o
ZXJpdGVkT25seSk7CisgICAgdm9pZCBhcHBseURlY2xhcmF0aW9ucyhib29sIGltcG9ydGFudCwg
aW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhlcml0ZWRPbmx5KTsKICAgICB0
ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+Ci0gICAgdm9pZCBhcHBseURlY2xhcmF0aW9uKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCYgaW5oZXJpdGVk
T25seSk7CisgICAgdm9pZCBhcHBseURlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIHZvaWQg
bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCosIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFn
ZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CiAgICAgdm9pZCBtYXRjaFBhZ2VSdWxlc0Zvckxp
c3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0
UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CkBAIC0zNDgsMjAgKzM0OCwyMSBAQCBwcml2
YXRlOgogICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlOwogICAgIH07CiAgICAgc3RhdGlj
IHVuc2lnbmVkIGNvbXB1dGVEZWNsYXJhdGlvbkhhc2goTWF0Y2hlZFN0eWxlRGVjbGFyYXRpb24q
LCB1bnNpZ25lZCBzaXplKTsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSogZmluZEZyb21NYXRjaGVk
RGVjbGFyYXRpb25DYWNoZSh1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYpOyAgIAot
ICAgIHZvaWQgYWRkVG9NYXRjaGVkRGVjbGFyYXRpb25DYWNoZShjb25zdCBSZW5kZXJTdHlsZSos
IHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNoUmVzdWx0Jik7CisgICAgc3RydWN0IE1hdGNoZWRT
dHlsZURlY2xhcmF0aW9uQ2FjaGVJdGVtIHsKKyAgICAgICAgVmVjdG9yPE1hdGNoZWRTdHlsZURl
Y2xhcmF0aW9uPiBtYXRjaGVkU3R5bGVEZWNsYXJhdGlvbnM7CisgICAgICAgIE1hdGNoUmVzdWx0
IG1hdGNoUmVzdWx0OworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlbmRlclN0eWxlOwor
ICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHBhcmVudFJlbmRlclN0eWxlOworICAgIH07Cisg
ICAgY29uc3QgTWF0Y2hlZFN0eWxlRGVjbGFyYXRpb25DYWNoZUl0ZW0qIGZpbmRGcm9tTWF0Y2hl
ZERlY2xhcmF0aW9uQ2FjaGUodW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQmKTsKKyAg
ICB2b2lkIGFkZFRvTWF0Y2hlZERlY2xhcmF0aW9uQ2FjaGUoY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNo
UmVzdWx0Jik7CiAKICAgICAvLyBXZSBjb2xsZWN0IHRoZSBzZXQgb2YgZGVjbHMgdGhhdCBtYXRj
aCBpbiB8bV9tYXRjaGVkRGVjbHN8LiBXZSB0aGVuIHdhbGsgdGhlCiAgICAgLy8gc2V0IG9mIG1h
dGNoZWQgZGVjbHMgZm91ciB0aW1lcywgb25jZSBmb3IgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90
aGVycyBkZXBlbmQgb24gKGxpa2UgZm9udC1zaXplKSwKICAgICAvLyBhbmQgdGhlbiBhIHNlY29u
ZCB0aW1lIGZvciBhbGwgdGhlIHJlbWFpbmluZyBwcm9wZXJ0aWVzLiBXZSB0aGVuIGRvIHRoZSBz
YW1lIHR3byBwYXNzZXMKICAgICAvLyBmb3IgYW55ICFpbXBvcnRhbnQgcnVsZXMuCiAgICAgVmVj
dG9yPE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uLCA2ND4gbV9tYXRjaGVkRGVjbHM7Ci0gICAgCi0g
ICAgc3RydWN0IE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uQ2FjaGVJdGVtIHsKLSAgICAgICAgVmVj
dG9yPE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uPiBtYXRjaGVkU3R5bGVEZWNsYXJhdGlvbnM7Ci0g
ICAgICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IHJlbmRlclN0eWxlOwotICAgIH07CisKICAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQs
IE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uQ2FjaGVJdGVtPiBNYXRjaGVkU3R5bGVEZWNsYXJhdGlv
bkNhY2hlOwogICAgIE1hdGNoZWRTdHlsZURlY2xhcmF0aW9uQ2FjaGUgbV9tYXRjaFN0eWxlRGVj
bGFyYXRpb25DYWNoZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lvbiAxMDE0ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNiAr
MzIxLDE3IEBAIGJvb2wgUmVuZGVyU3R5bGU6OmluaGVyaXRlZE5vdEVxdWFsKGNvbnMKICAgICAg
ICAgICAgfHwgcmFyZUluaGVyaXRlZERhdGEgIT0gb3RoZXItPnJhcmVJbmhlcml0ZWREYXRhOwog
fQogCitib29sIFJlbmRlclN0eWxlOjppbmhlcml0ZWREYXRhU2hhcmVkKGNvbnN0IFJlbmRlclN0
eWxlKiBvdGhlcikgY29uc3QKK3sKKyAgICAvLyBUaGlzIGlzIGEgZmFzdCBjaGVjayB0aGF0IG9u
bHkgbG9va3MgaWYgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgc2hhcmVkLgorICAgIHJldHVybiBp
bmhlcml0ZWRfZmxhZ3MgPT0gb3RoZXItPmluaGVyaXRlZF9mbGFncworICAgICAgICAmJiBpbmhl
cml0ZWQuZ2V0KCkgPT0gb3RoZXItPmluaGVyaXRlZC5nZXQoKQorI2lmIEVOQUJMRShTVkcpCisg
ICAgICAgICYmIG1fc3ZnU3R5bGUuZ2V0KCkgPT0gb3RoZXItPm1fc3ZnU3R5bGUuZ2V0KCkKKyNl
bmRpZgorICAgICAgICAmJiByYXJlSW5oZXJpdGVkRGF0YS5nZXQoKSA9PSBvdGhlci0+cmFyZUlu
aGVyaXRlZERhdGEuZ2V0KCk7Cit9CisKIHN0YXRpYyBib29sIHBvc2l0aW9uZWRPYmplY3RNb3Zl
ZChjb25zdCBMZW5ndGhCb3gmIGEsIGNvbnN0IExlbmd0aEJveCYgYikKIHsKICAgICAvLyBJZiBh
bnkgdW5pdCB0eXBlcyBhcmUgZGlmZmVyZW50LCB0aGVuIHdlIGNhbid0IGd1YXJhbnRlZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlz
aW9uIDEwMTQ4MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQzLDYgKzEzNDMsNyBAQCBwdWJsaWM6CiAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBoeXBoZW5TdHJpbmcoKSBjb25zdDsKIAogICAgIGJvb2wgaW5oZXJp
dGVkTm90RXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBib29sIGluaGVyaXRl
ZERhdGFTaGFyZWQoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAogICAgIFN0eWxlRGlmZmVy
ZW5jZSBkaWZmKGNvbnN0IFJlbmRlclN0eWxlKiwgdW5zaWduZWQmIGNoYW5nZWRDb250ZXh0U2Vu
c2l0aXZlUHJvcGVydGllcykgY29uc3Q7CiAK
</data>
<flag name="review"
          id="116509"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>