<?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>54103</bug_id>
          
          <creation_ts>2011-02-09 07:20:00 -0800</creation_ts>
          <short_desc>Implement fast path for matching simple selectors</short_desc>
          <delta_ts>2011-06-08 02:00:02 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hyatt</cc>
    
    <cc>mitz</cc>
    
    <cc>peter</cc>
    
    <cc>sam</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>348213</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-09 07:20:00 -0800</bug_when>
    <thetext>Common selectors consisting of id, class and tag rules only can be resolved much faster using a specialized fast path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348655</commentid>
    <comment_count>1</comment_count>
      <attachid>81885</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-09 15:36:26 -0800</bug_when>
    <thetext>Created attachment 81885
patch

Implement a fast path for single and descendant selectors consisting of id, class and tag selectors only.

Selectors like this are marked on style selector initialization. When  encountered during style matching the are resolved using a fast path. Since selectors like are very common, this speeds up style matching quite a bit (up to 50% on some sites according to Shark).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348658</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-09 15:38:45 -0800</bug_when>
    <thetext>Attachment 81885 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/css/CSSStyleSelector.cpp:2122:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348675</commentid>
    <comment_count>3</comment_count>
      <attachid>81885</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-09 16:02:36 -0800</bug_when>
    <thetext>Comment on attachment 81885
patch

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

&gt; Source/WebCore/css/CSSStyleSelector.cpp:365
&gt; +    bool canFastCheckSelector() const { return m_canFastCheckSelector; }
&gt; +    bool hasMultipartSelector() const { return m_hasMultipartSelector; }
&gt; +    bool topHTMLSelectorMatchesBasedOnRuleHash() const { return m_topHTMLSelectorMatchesBasedOnRuleHash; }

When possible I prefer booleans that read like sentences “rule data &lt;xxx&gt;”. The first and third names here don’t really work that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348903</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-10 02:43:41 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78183</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81885</attachid>
            <date>2011-02-09 15:36:26 -0800</date>
            <delta_ts>2011-02-09 16:02:35 -0800</delta_ts>
            <desc>patch</desc>
            <filename>fast-descendant-match-5.patch</filename>
            <type>text/plain</type>
            <size>12232</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4MTU1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDItMDkgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NDEwMworICAgICAgICBJbXBsZW1lbnQgZmFzdCBwYXRoIGZvciBtYXRjaGluZyBzaW1wbGUg
c2VsZWN0b3JzCisgICAgICAgIAorICAgICAgICBJbXBsZW1lbnQgYSBmYXN0IHBhdGggZm9yIHNp
bmdsZSBhbmQgZGVzY2VuZGFudCBzZWxlY3RvcnMgY29uc2lzdGluZworICAgICAgICBvZiBpZCwg
Y2xhc3MgYW5kIHRhZyBzZWxlY3RvcnMgb25seS4KKyAgICAgICAgCisgICAgICAgIFNlbGVjdG9y
cyBsaWtlIHRoaXMgYXJlIG1hcmtlZCBvbiBzdHlsZSBzZWxlY3RvciBpbml0aWFsaXphdGlvbi4g
V2hlbiAKKyAgICAgICAgZW5jb3VudGVyZWQgZHVyaW5nIHN0eWxlIG1hdGNoaW5nIHRoZSBhcmUg
cmVzb2x2ZWQgdXNpbmcgYSBmYXN0IHBhdGguCisgICAgICAgIAorICAgICAgICBTaW5jZSBzZWxl
Y3RvcnMgbGlrZSBhcmUgdmVyeSBjb21tb24sIHRoaXMgc3BlZWRzIHVwIHN0eWxlIG1hdGNoaW5n
CisgICAgICAgIHF1aXRlIGEgYml0ICh1cCB0byA1MCUgb24gc29tZSBzaXRlcyBhY2NvcmRpbmcg
dG8gU2hhcmspLgorCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UnVsZURhdGE6OmNhbkZhc3RDaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVEYXRhOjpoYXNNdWx0aXBhcnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlRGF0YTo6dG9wSFRNTFNlbGVjdG9yTWF0Y2hlc0Jhc2VkT25SdWxlSGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnNlbGVjdG9yVGFnTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1NlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjppc0Jhc2ljRGVzY2VuZGFudFNlbGVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6Omh0bWxTZWxlY3Rvck1hdGNoZXNCYXNlZE9uUnVsZUhhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oOgorCiAyMDExLTAyLTA5ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5v
a2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDc4MTA4KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTQsMTcgKzM1NCwxNiBAQCBpZiAoaWQgPT0gcHJvcElEKSB7IFwKIAogY2xhc3MgUnVsZURhdGEg
ewogcHVibGljOgotICAgIFJ1bGVEYXRhKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yLCB1bnNpZ25lZCBwb3NpdGlvbikKLSAgICAgICAgOiBtX3J1bGUocnVsZSkKLSAg
ICAgICAgLCBtX3NlbGVjdG9yKHNlbGVjdG9yKQotICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRp
b24pCi0gICAgewotICAgICAgICBjb2xsZWN0RGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhh
c2hlcygpOwotICAgIH0KKyAgICBSdWxlRGF0YShDU1NTdHlsZVJ1bGUqLCBDU1NTZWxlY3Rvcios
IHVuc2lnbmVkIHBvc2l0aW9uKTsKKwogICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3NpdGlvbjsgfQogICAgIENTU1N0eWxlUnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcnVsZTsgfQogICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0b3I7IH0KICAgICAKKyAgICBib29sIGNhbkZhc3RDaGVja1NlbGVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jYW5GYXN0Q2hlY2tTZWxlY3RvcjsgfQorICAgIGJvb2wgaGFzTXVsdGlw
YXJ0U2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc011bHRpcGFydFNlbGVjdG9yOyB9Cisg
ICAgYm9vbCB0b3BIVE1MU2VsZWN0b3JNYXRjaGVzQmFzZWRPblJ1bGVIYXNoKCkgY29uc3QgeyBy
ZXR1cm4gbV90b3BIVE1MU2VsZWN0b3JNYXRjaGVzQmFzZWRPblJ1bGVIYXNoOyB9CisgICAgCiAg
ICAgLy8gVHJ5IHRvIGJhbGFuY2UgYmV0d2VlbiBtZW1vcnkgdXNhZ2UgKHRoZXJlIGNhbiBiZSBs
b3RzIG9mIFJ1bGVEYXRhIG9iamVjdHMpIGFuZCBnb29kIGZpbHRlcmluZyBwZXJmb3JtYW5jZS4K
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudCA9IDQ7CiAg
ICAgY29uc3QgdW5zaWduZWQqIGRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKSBj
b25zdCB7IHJldHVybiBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXM7IH0KQEAg
LTM3NSw3ICszNzQsMTAgQEAgcHJpdmF0ZToKICAgICAKICAgICBDU1NTdHlsZVJ1bGUqIG1fcnVs
ZTsKICAgICBDU1NTZWxlY3RvciogbV9zZWxlY3RvcjsKLSAgICB1bnNpZ25lZCBtX3Bvc2l0aW9u
OworICAgIHVuc2lnbmVkIG1fcG9zaXRpb24gOiAyOTsKKyAgICBib29sIG1fY2FuRmFzdENoZWNr
U2VsZWN0b3IgOiAxOworICAgIGJvb2wgbV9oYXNNdWx0aXBhcnRTZWxlY3RvciA6IDE7CisgICAg
Ym9vbCBtX3RvcEhUTUxTZWxlY3Rvck1hdGNoZXNCYXNlZE9uUnVsZUhhc2ggOiAxOwogICAgIC8v
IFVzZSBwbGFpbiBhcnJheSBpbnN0ZWFkIG9mIGEgVmVjdG9yIHRvIG1pbmltaXplIG1lbW9yeSBv
dmVyaGVhZC4KICAgICB1bnNpZ25lZCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNo
ZXNbbWF4aW11bUlkZW50aWZpZXJDb3VudF07CiB9OwpAQCAtNzgzLDExICs3ODUsMTEgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdAogICAgIHVuc2lnbmVkIHNpemUg
PSBydWxlcy0+c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhID0gcnVsZXMtPmF0KGkpOwotICAg
ICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CiAgICAgICAgIGlmIChj
YW5Vc2VGYXN0UmVqZWN0ICYmIGZhc3RSZWplY3RTZWxlY3RvcihydWxlRGF0YSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEuc2VsZWN0
b3IoKSkpIHsKKyAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEpKSB7CiAgICAgICAg
ICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25v
cmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgorICAgICAgICAgICAgQ1NTU3R5bGVSdWxlKiBy
dWxlID0gcnVsZURhdGEucnVsZSgpOwogICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qIGRlY2wgPSBydWxlLT5kZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgaWYgKCFkZWNs
IHx8ICghZGVjbC0+bGVuZ3RoKCkgJiYgIWluY2x1ZGVFbXB0eVJ1bGVzKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTIwNzAsMjAgKzIwNzIsODcgQEAgUGFzc1JlZlB0cjxDU1NSdWxl
TGlzdD4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsK
IH0KIAotYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBz
ZWwpCitpbmxpbmUgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1
bGVEYXRhJiBydWxlRGF0YSkKIHsKICAgICBtX2R5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKIAot
ICAgIC8vIENoZWNrIHRoZSBzZWxlY3RvcgotICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2No
ZWNrZXIuY2hlY2tTZWxlY3RvcihzZWwsIG1fZWxlbWVudCwgJm1fc2VsZWN0b3JBdHRycywgbV9k
eW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UsIHN0eWxlKCksIG1fcGFyZW50Tm9kZSA/IG1fcGFy
ZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDApOworICAgIGlmIChydWxlRGF0YS5jYW5GYXN0Q2hl
Y2tTZWxlY3RvcigpKSB7CisgICAgICAgIC8vIFdlIGtub3cgdGhpcyBzZWxlY3RvciBkb2VzIG5v
dCBpbmNsdWRlIGFueSBwc2V1ZG8gc2VsZWN0b3JzLgorICAgICAgICBpZiAobV9jaGVja2VyLm1f
cHNldWRvU3R5bGUgIT0gTk9QU0VVRE8pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmIChydWxlRGF0YS50b3BIVE1MU2VsZWN0b3JNYXRjaGVzQmFzZWRPblJ1bGVIYXNoKCkg
JiYgIXJ1bGVEYXRhLmhhc011bHRpcGFydFNlbGVjdG9yKCkgJiYgbV9lbGVtZW50LT5pc0hUTUxF
bGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIFNlbGVj
dG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVt
ZW50KTsKKyAgICB9CisKKyAgICAvLyBTbG93IHBhdGguCisgICAgU2VsZWN0b3JNYXRjaCBtYXRj
aCA9IG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVu
dCwgJm1fc2VsZWN0b3JBdHRycywgbV9keW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UsIHN0eWxl
KCksIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDApOwogICAg
IGlmIChtYXRjaCAhPSBTZWxlY3Rvck1hdGNoZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQog
ICAgIGlmIChtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIu
bV9wc2V1ZG9TdHlsZSAhPSBtX2R5bmFtaWNQc2V1ZG8pCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KIAorc3RhdGljIGlubGluZSBib29sIHNlbGVjdG9yVGFnTWF0
Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Ip
Cit7CisgICAgaWYgKCFzZWxlY3Rvci0+aGFzVGFnKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsZWN0b3ItPnRhZygpLmxvY2Fs
TmFtZSgpOworICAgIGlmIChsb2NhbE5hbWUgIT0gc3RhckF0b20gJiYgbG9jYWxOYW1lICE9IGVs
ZW1lbnQtPmxvY2FsTmFtZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBzZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNlVVJJKCk7
CisgICAgcmV0dXJuIG5hbWVzcGFjZVVSSSA9PSBzdGFyQXRvbSB8fCBuYW1lc3BhY2VVUkkgPT0g
ZWxlbWVudC0+bmFtZXNwYWNlVVJJKCk7Cit9CisKK2Jvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2Vs
ZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0
b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgLy8gVGhlIHRvcCBzZWxlY3RvciBy
ZXF1aXJlcyB0YWcgY2hlY2sgb25seSBhcyBydWxlIGhhc2hlcyBoYXZlIGFscmVhZHkgaGFuZGxl
ZCBpZCBhbmQgY2xhc3MgbWF0Y2hlcy4KKyAgICBpZiAoIXNlbGVjdG9yVGFnTWF0Y2hlcyhlbGVt
ZW50LCBzZWxlY3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNlbGVjdG9yID0g
c2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKKyAgICBpZiAoIXNlbGVjdG9yKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjb25zdCBFbGVtZW50KiBhbmNlc3RvciA9IGVsZW1lbnQ7CisgICAgLy8g
V2Uga25vdyB0aGlzIGNvbXBvdW5kIHNlbGVjdG9yIGhhcyBkZXNjZW5kYW50IHNlbGVjdG9ycyBv
bmx5IGFuZCBhbGwgY29tcG9uZW50cyBhcmUgc2ltcGxlLgorICAgIGZvciAoOyBzZWxlY3Rvcjsg
c2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CisgICAgICAgIEF0b21pY1N0cmlu
Z0ltcGwqIHZhbHVlOworICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5tX21hdGNoKSB7CisgICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9
IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIShhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRF
bGVtZW50KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVudCo+KGFuY2VzdG9yKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFuY2VzdG9yLT5oYXNDbGFzcygpICYmIHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMo
KS5jb250YWlucyh2YWx1ZSkgJiYgc2VsZWN0b3JUYWdNYXRjaGVzKGFuY2VzdG9yLCBzZWxlY3Rv
cikpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJZDoK
KyAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKTsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIShhbmNl
c3RvciA9IGFuY2VzdG9yLT5wYXJlbnRFbGVtZW50KCkpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc0lE
KCkgJiYgYW5jZXN0b3ItPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpID09IHZhbHVlICYm
IHNlbGVjdG9yVGFnTWF0Y2hlcyhhbmNlc3Rvciwgc2VsZWN0b3IpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Tm9uZToKKyAgICAgICAgICAgICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIShhbmNlc3RvciA9IGFuY2Vz
dG9yLT5wYXJlbnRFbGVtZW50KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3JUYWdNYXRjaGVzKGFuY2VzdG9y
LCBzZWxlY3RvcikpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQogICAg
IHJldHVybiB0cnVlOwogfQorICAgIAogCiAvLyBSZWN1cnNpdmUgY2hlY2sgb2Ygc2VsZWN0b3Jz
IGFuZCBjb21iaW5hdG9ycwogLy8gSXQgY2FuIHJldHVybiAzIGRpZmZlcmVudCB2YWx1ZXM6CkBA
IC0yMjc2LDE0ICsyMzQ1LDggQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNr
ZXI6OgogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHNlbC0+
aGFzVGFnKCkpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxMb2NhbE5hbWUgPSBz
ZWwtPnRhZygpLmxvY2FsTmFtZSgpOwotICAgICAgICBpZiAoc2VsTG9jYWxOYW1lICE9IHN0YXJB
dG9tICYmIHNlbExvY2FsTmFtZSAhPSBlLT5sb2NhbE5hbWUoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxOUyA9IHNlbC0+dGFnKCku
bmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgIGlmIChzZWxOUyAhPSBzdGFyQXRvbSAmJiBzZWxOUyAh
PSBlLT5uYW1lc3BhY2VVUkkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Cisg
ICAgaWYgKCFzZWxlY3RvclRhZ01hdGNoZXMoZSwgc2VsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKHNlbC0+aGFzQXR0cmlidXRlKCkpIHsKICAgICAgICAgaWYgKHNlbC0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCkBAIC0yOTM0LDcgKzI5OTcsNDEgQEAgYm9vbCBD
U1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OgogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAg
IAorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNCYXNpY0Rlc2NlbmRhbnRTZWxlY3RvcihDU1NTZWxl
Y3Rvciogc2VsZWN0b3IpCit7CisgICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVj
dG9yLT50YWdIaXN0b3J5KCkpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpICE9
IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggIT0gQ1NTU2VsZWN0b3I6Ok5vbmUgJiYgc2VsZWN0
b3ItPm1fbWF0Y2ggIT0gQ1NTU2VsZWN0b3I6OklkICYmIHNlbGVjdG9yLT5tX21hdGNoICE9IENT
U1NlbGVjdG9yOjpDbGFzcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBodG1sU2VsZWN0b3JNYXRjaGVz
QmFzZWRPblJ1bGVIYXNoKENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHNlbGVjdG9yTmFtZXNwYWNlID0gc2VsZWN0b3ItPnRhZygpLm5hbWVzcGFjZVVS
SSgpOworICAgIGlmIChzZWxlY3Rvck5hbWVzcGFjZSAhPSBzdGFyQXRvbSAmJiBzZWxlY3Rvck5h
bWVzcGFjZSAhPSB4aHRtbE5hbWVzcGFjZVVSSSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Tm9uZSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoICE9IENTU1NlbGVjdG9yOjpJZCAm
JiBzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gc2VsZWN0b3ItPnRhZygpID09IHN0YXJBdG9tOworfQorCitS
dWxlRGF0YTo6UnVsZURhdGEoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0
b3IsIHVuc2lnbmVkIHBvc2l0aW9uKQorICAgIDogbV9ydWxlKHJ1bGUpCisgICAgLCBtX3NlbGVj
dG9yKHNlbGVjdG9yKQorICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKKyAgICAsIG1fY2FuRmFz
dENoZWNrU2VsZWN0b3IoaXNCYXNpY0Rlc2NlbmRhbnRTZWxlY3RvcihzZWxlY3RvcikpCisgICAg
LCBtX2hhc011bHRpcGFydFNlbGVjdG9yKHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpCisgICAgLCBt
X3RvcEhUTUxTZWxlY3Rvck1hdGNoZXNCYXNlZE9uUnVsZUhhc2goaHRtbFNlbGVjdG9yTWF0Y2hl
c0Jhc2VkT25SdWxlSGFzaChzZWxlY3RvcikpCit7CisgICAgY29sbGVjdERlc2NlbmRhbnRTZWxl
Y3RvcklkZW50aWZpZXJIYXNoZXMoKTsKK30KKwogaW5saW5lIHZvaWQgUnVsZURhdGE6OmNvbGxl
Y3RJZGVudGlmaWVySGFzaGVzKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgdW5zaWduZWQm
IGlkZW50aWZpZXJDb3VudCkKIHsKICAgICBpZiAoKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1Nl
bGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpICYm
ICFzZWxlY3Rvci0+dmFsdWUoKS5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDc4MTA4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDkgKzE2MSw2IEBAIHB1Ymxp
YzoKICAKICAgICAgICAgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQoKTsgfQogCi0gICAgICAgIC8vIENoZWNrcyBpZiBhIGNv
bXBvdW5kIHNlbGVjdG9yICh3aGljaCBjYW4gY29uc2lzdCBvZiBtdWx0aXBsZSBzaW1wbGUgc2Vs
ZWN0b3JzKSBtYXRjaGVzIHRoZSBjdXJyZW50IGVsZW1lbnQuCi0gICAgICAgIGJvb2wgY2hlY2tT
ZWxlY3RvcihDU1NTZWxlY3RvciopOwotCiAgICAgICAgIHZvaWQgYWRkVmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAqLCBib29sIHJlc3VsdCk7CiAK
ICAgICAgICAgYm9vbCBhZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdDsKQEAgLTE5Myw2
ICsxOTAsOCBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3Qg
VmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRl
eCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgICAgIGJvb2wgZmFzdFJlamVjdFNlbGVj
dG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7CiAgICAgICAgIHZvaWQgc29ydE1hdGNoZWRSdWxl
cyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wg
Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpOwogCiAgICAgICAgIHRlbXBsYXRlIDxib29s
IGZpcnN0UGFzcz4KICAgICAgICAgdm9pZCBhcHBseURlY2xhcmF0aW9ucyhib29sIGltcG9ydGFu
dCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCk7CkBAIC0yNDEsNiArMjQwLDggQEAgcHVi
bGljOgogICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9y
KiwgRWxlbWVudCosIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBzZWxlY3RvckF0dHJzLCBQ
c2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRl
cmVkTGluaywgUmVuZGVyU3R5bGUqID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHls
ZSA9IDApIGNvbnN0OwogICAgICAgICAgICAgYm9vbCBjaGVja09uZVNlbGVjdG9yKENTU1NlbGVj
dG9yKiwgRWxlbWVudCosIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBzZWxlY3RvckF0dHJz
LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBSZW5kZXJTdHls
ZSosIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0OwogICAgICAgICAgICAg
Ym9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9yKiwgUHNldWRvSWQmIGR5
bmFtaWNQc2V1ZG8pIGNvbnN0OworICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0aWMgYm9v
bCBmYXN0Q2hlY2tTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqKTsK
IAogICAgICAgICAgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0OwogICAgICAgICAgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRl
U2xvd0Nhc2UoRWxlbWVudCogZWxlbWVudCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="73498"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>