<?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>100776</bug_id>
          
          <creation_ts>2012-10-30 11:48:39 -0700</creation_ts>
          <short_desc>Avoid unnecessary style recalcs on class attribute mutation</short_desc>
          <delta_ts>2012-10-30 13:34:41 -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>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>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>754543</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-10-30 11:48:39 -0700</bug_when>
    <thetext>There is no need to invalidate element style on class attribute change if neither the added or removed classes featured in any active stylesheet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754564</commentid>
    <comment_count>1</comment_count>
      <attachid>171495</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-10-30 12:13:11 -0700</bug_when>
    <thetext>Created attachment 171495
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754584</commentid>
    <comment_count>2</comment_count>
      <attachid>171495</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-10-30 12:30:26 -0700</bug_when>
    <thetext>Comment on attachment 171495
patch

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

Cool idea!

r- for causing unnecessary conversions from immutable to mutable attribute data, rest looks good.

&gt; Source/WebCore/css/RuleFeature.cpp:46
&gt; +    end = other.classesInRules.end();
&gt; +    for (HashSet&lt;AtomicStringImpl*&gt;::iterator it = other.classesInRules.begin(); it != end; ++it)
&gt; +        classesInRules.add(*it);

Looks like we could be using const_iterators in this function.

&gt; Source/WebCore/dom/Element.cpp:786
&gt; +        SpaceSplitString oldClasses = mutableAttributeData()-&gt;classNames();

This will force promotion from ImmutableElementAttributeData to MutableElementAttributeData for all elements with a class attribute the first time they&apos;re parsed.

&gt; Source/WebCore/dom/SpaceSplitString.cpp:122
&gt; +    // FIXME: add() does not allow duplicates but createVector() does.

Huh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754608</commentid>
    <comment_count>3</comment_count>
      <attachid>171509</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-10-30 12:53:58 -0700</bug_when>
    <thetext>Created attachment 171509
another try</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754628</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-10-30 13:34:41 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/132941</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171495</attachid>
            <date>2012-10-30 12:13:11 -0700</date>
            <delta_ts>2012-10-30 12:53:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>class-mutation-recalc.patch</filename>
            <type>text/plain</type>
            <size>12383</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDEyLTEwLTMwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBdm9pZCB1bm5lY2Vzc2FyeSBz
dHlsZSByZWNhbGNzIG9uIGNsYXNzIGF0dHJpYnV0ZSBtdXRhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNzc2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgaXMgbm8gbmVlZCB0byBpbnZh
bGlkYXRlIGVsZW1lbnQgc3R5bGUgb24gY2xhc3MgYXR0cmlidXRlIGNoYW5nZSBpZiBuZWl0aGVy
IHRoZSBhZGRlZAorICAgICAgICBvciByZW1vdmVkIGNsYXNzZXMgZmVhdHVyZWQgaW4gYW55IGFj
dGl2ZSBzdHlsZXNoZWV0LgorCisgICAgICAgICogY3NzL1J1bGVGZWF0dXJlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJ1bGVGZWF0dXJlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6UnVs
ZUZlYXR1cmVTZXQ6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVGZWF0dXJlU2V0Ojpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1J1bGVGZWF0dXJlLmg6CisgICAgICAg
IChSdWxlRmVhdHVyZVNldCk6CisgICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKToKKyAgICAgICAgCisgICAgICAg
ICAgICBDb2xsZWN0IGNsYXNzZXMgbWVudGlvbmVkIGluIENTUyBzZWxlY3RvcnMgdGhlIHNhbWUg
d2F5IGlkcyBhbmQgYXR0cmlidXRlIG5hbWVzIGFyZQorICAgICAgICAgICAgYWxyZWFkeSBjb2xs
ZWN0ZWQuCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpoYXNTZWxlY3RvckZvckNsYXNzKToKKyAgICAgICAgCisgICAg
ICAgICAgICBBZGQgYSBtZXRob2QgdG8gdGVzdCBpZiBhIGdpdmVuIGNsYXNzIG5hbWUgaXMgbWVu
dGlvbmVkIGFueXdoZXJlIGluIHN0eWxlaHNlZXRzLgorCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAqIGNzcy9TdHlsZVNjb3BlUmVz
b2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RBZGRlZEFuZFJlbW92ZWRDbGFzc2VzKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xhc3NBdHRyaWJ1dGVD
aGFuZ2VkKToKKyAgICAgICAgCisgICAgICAgICAgICBGaWd1cmUgb3V0IHdoaWNoIGNsYXNzZXMg
d2VyZSBhZGRlZCBhbmQgcmVtb3ZlZC4gVGVzdCBpZiB0aGV5IGFyZSBwcmVzZW50IGluIGFueSBz
dHlsZQorICAgICAgICAgICAgcnVsZSBhbmQgaW52YWxpZGF0ZSB0aGUgc3R5bGUgb25seSBpZiB0
aGV5IGFyZS4KKworICAgICAgICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6
U3BhY2VTcGxpdFN0cmluZ0RhdGE6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNw
bGl0U3RyaW5nOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZzo6cmVt
b3ZlKToKKyAgICAgICAgCisgICAgICAgICAgICBBZGRlZCBib29sIHJldHVybiB2YWx1ZSB0byBp
bmRpY2F0ZSBpZiBhbnl0aGluZyB3YXMgYWN0dWFsbHkgcmVtb3ZlZC4gUmVvcmdhbml6ZWQgCisg
ICAgICAgICAgICB0aGUgY29kZSBhIGJpdCB0byBhdm9pZCB1bm5lY2Vzc2FyeSB1bmlxdWluZyB3
aGVuIG5vdGhpbmcgY2hhbmdlcy4KKworICAgICAgICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmg6
CisgICAgICAgIChTcGFjZVNwbGl0U3RyaW5nRGF0YSk6CisgICAgICAgIChTcGFjZVNwbGl0U3Ry
aW5nKToKKwogMjAxMi0xMC0yNiAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9iZS5j
b20+CiAKICAgICAgICAgW0NTUyBTaGFkZXJzXSBBZGQgdGhlIFZhbGlkYXRlZEN1c3RvbUZpbHRl
ck9wZXJhdGlvbiBjbGFzcwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1J1bGVGZWF0dXJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuY3BwCShyZXZp
c2lvbiAxMzI3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw5IEBAIHZvaWQgUnVsZUZlYXR1cmVTZXQ6OmFkZChjb25z
dCBSdWxlRmVhdHUKICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6aXRlcmF0b3IgZW5k
ID0gb3RoZXIuaWRzSW5SdWxlcy5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5n
SW1wbCo+OjppdGVyYXRvciBpdCA9IG90aGVyLmlkc0luUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQogICAgICAgICBpZHNJblJ1bGVzLmFkZCgqaXQpOworICAgIGVuZCA9IG90aGVyLmNs
YXNzZXNJblJ1bGVzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46
Oml0ZXJhdG9yIGl0ID0gb3RoZXIuY2xhc3Nlc0luUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICBjbGFzc2VzSW5SdWxlcy5hZGQoKml0KTsKICAgICBlbmQgPSBvdGhlci5h
dHRyc0luUnVsZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6
aXRlcmF0b3IgaXQgPSBvdGhlci5hdHRyc0luUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQogICAgICAgICBhdHRyc0luUnVsZXMuYWRkKCppdCk7CkBAIC01Myw2ICs1Niw3IEBAIHZvaWQg
UnVsZUZlYXR1cmVTZXQ6OmFkZChjb25zdCBSdWxlRmVhdHUKIHZvaWQgUnVsZUZlYXR1cmVTZXQ6
OmNsZWFyKCkKIHsKICAgICBpZHNJblJ1bGVzLmNsZWFyKCk7CisgICAgY2xhc3Nlc0luUnVsZXMu
Y2xlYXIoKTsKICAgICBhdHRyc0luUnVsZXMuY2xlYXIoKTsKICAgICBzaWJsaW5nUnVsZXMuY2xl
YXIoKTsKICAgICB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLmNsZWFyKCk7CkBAIC02NCw2ICs2OCw3
IEBAIHZvaWQgUnVsZUZlYXR1cmVTZXQ6OnJlcG9ydE1lbW9yeVVzYWdlKE0KIHsKICAgICBNZW1v
cnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlw
ZXM6OkNTUyk7CiAgICAgaW5mby5hZGRNZW1iZXIoaWRzSW5SdWxlcyk7CisgICAgaW5mby5hZGRN
ZW1iZXIoY2xhc3Nlc0luUnVsZXMpOwogICAgIGluZm8uYWRkTWVtYmVyKGF0dHJzSW5SdWxlcyk7
CiAgICAgaW5mby5hZGRNZW1iZXIoc2libGluZ1J1bGVzKTsKICAgICBpbmZvLmFkZE1lbWJlcih1
bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVh
dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5oCShy
ZXZpc2lvbiAxMzI3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsOCArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFN0eWxlUnVsZTsKIAotY2xhc3MgUnVsZUZlYXR1cmUgewotcHVibGljOgorc3RydWN0IFJ1bGVG
ZWF0dXJlIHsKICAgICBSdWxlRmVhdHVyZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVj
dG9ySW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKICAgICAgICAgOiBydWxl
KHJ1bGUpCiAgICAgICAgICwgc2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQpAQCAtNDQsOCAr
NDMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOwogfTsK
IAotY2xhc3MgUnVsZUZlYXR1cmVTZXQgewotcHVibGljOgorc3RydWN0IFJ1bGVGZWF0dXJlU2V0
IHsKICAgICBSdWxlRmVhdHVyZVNldCgpCiAgICAgICAgIDogdXNlc0ZpcnN0TGluZVJ1bGVzKGZh
bHNlKQogICAgICAgICAsIHVzZXNCZWZvcmVBZnRlclJ1bGVzKGZhbHNlKQpAQCAtNTUsNiArNTMs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+IGlkc0luUnVsZXM7CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gY2xhc3Nlc0lu
UnVsZXM7CiAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gYXR0cnNJblJ1bGVzOwogICAg
IFZlY3RvcjxSdWxlRmVhdHVyZT4gc2libGluZ1J1bGVzOwogICAgIFZlY3RvcjxSdWxlRmVhdHVy
ZT4gdW5jb21tb25BdHRyaWJ1dGVSdWxlczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxl
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAJKHJl
dmlzaW9uIDEzMjc4NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0RmVh
dHVyZXNGcm9tU2UKIHsKICAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OklkKQogICAgICAgICBmZWF0dXJlcy5pZHNJblJ1bGVzLmFkZChzZWxlY3Rvci0+dmFsdWUoKS5p
bXBsKCkpOwotICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgIGVs
c2UgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykKKyAgICAgICAg
ZmVhdHVyZXMuY2xhc3Nlc0luUnVsZXMuYWRkKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Cisg
ICAgZWxzZSBpZiAoc2VsZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKICAgICAgICAgZmVh
dHVyZXMuYXR0cnNJblJ1bGVzLmFkZChzZWxlY3Rvci0+YXR0cmlidXRlKCkubG9jYWxOYW1lKCku
aW1wbCgpKTsKICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdExpbmU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxMzI3ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNDUsNiArNDI0NSwxMyBAQCBib29s
IFN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9yQXR0cmliCiAgICAgcmV0dXJuIG1fZmVhdHVy
ZXMuYXR0cnNJblJ1bGVzLmNvbnRhaW5zKGF0dHJuYW1lLmltcGwoKSk7CiB9CiAKK2Jvb2wgU3R5
bGVSZXNvbHZlcjo6aGFzU2VsZWN0b3JGb3JDbGFzcyhjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNz
VmFsdWUpIGNvbnN0Cit7CisgICAgaWYgKGNsYXNzVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fZmVhdHVyZXMuY2xhc3Nlc0luUnVsZXMuY29udGFp
bnMoY2xhc3NWYWx1ZS5pbXBsKCkpOworfQorCiBib29sIFN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVj
dG9yRm9ySWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlKSBjb25zdAogewogICAgIGlmIChp
ZFZhbHVlLmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkocmV2
aXNpb24gMTMyNzg3KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjQ0LDYgKzI0NCw3IEBAIHB1YmxpYzoKICAgICBDb2xvciBjb2xvckZy
b21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSosIGJvb2wgZm9yVmlzaXRlZExpbmsg
PSBmYWxzZSkgY29uc3Q7CiAKICAgICBib29sIGhhc1NlbGVjdG9yRm9ySWQoY29uc3QgQXRvbWlj
U3RyaW5nJikgY29uc3Q7CisgICAgYm9vbCBoYXNTZWxlY3RvckZvckNsYXNzKGNvbnN0IEF0b21p
Y1N0cmluZyYpIGNvbnN0OwogICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3Qg
QXRvbWljU3RyaW5nJikgY29uc3Q7CiAKICAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yLmdldCgpOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCShyZXZpc2lvbiAxMzI3ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDkgKzM5LDkgQEAgY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiBj
bGFzcyBFbGVtZW50OwogY2xhc3MgUnVsZVNldDsKLWNsYXNzIFJ1bGVGZWF0dXJlU2V0OwogY2xh
c3MgU2hhZG93Um9vdDsKIGNsYXNzIFN0eWxlUnVsZUhvc3Q7CitzdHJ1Y3QgUnVsZUZlYXR1cmVT
ZXQ7CiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMTMyNzg2KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjUsMTggKzc2NSw0OCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgY2xhc3NTdHJpbmdIYXNDbGFzc05hCiAgICAgcmV0dXJuIGNs
YXNzU3RyaW5nSGFzQ2xhc3NOYW1lKG5ld0NsYXNzU3RyaW5nLmNoYXJhY3RlcnMxNigpLCBsZW5n
dGgpOwogfQogCitzdGF0aWMgdm9pZCBjb2xsZWN0QWRkZWRBbmRSZW1vdmVkQ2xhc3NlcyhWZWN0
b3I8QXRvbWljU3RyaW5nLCA0PiYgYWRkZWRBbmRSZW1vdmVkQ2xhc3NlcywgU3BhY2VTcGxpdFN0
cmluZyYgb2xkQ2xhc3NlcywgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgbmV3Q2xhc3NlcykKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmV3Q2xhc3Nlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAob2xkQ2xhc3Nlcy5yZW1vdmUobmV3Q2xhc3Nlc1tpXSkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgYWRkZWRBbmRSZW1vdmVkQ2xhc3Nlcy5hcHBlbmQobmV3Q2xh
c3Nlc1tpXSk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDbGFzc2Vz
LnNpemUoKTsgKytpKQorICAgICAgICBhZGRlZEFuZFJlbW92ZWRDbGFzc2VzLmFwcGVuZChvbGRD
bGFzc2VzW2ldKTsKK30KKwogdm9pZCBFbGVtZW50OjpjbGFzc0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgQXRvbWljU3RyaW5nJiBuZXdDbGFzc1N0cmluZykKIHsKKyAgICBib29sIHNob3VsZEludmFs
aWRhdGVTdHlsZSA9IGF0dGFjaGVkKCkgJiYgZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlcklmRXhp
c3RzKCk7CisgICAgVmVjdG9yPEF0b21pY1N0cmluZywgND4gYWRkZWRBbmRSZW1vdmVkQ2xhc3Nl
czsKKwogICAgIGlmIChjbGFzc1N0cmluZ0hhc0NsYXNzTmFtZShuZXdDbGFzc1N0cmluZykpIHsK
ICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRGb2xkQ2FzZSA9IGRvY3VtZW50KCktPmluUXVpcmtz
TW9kZSgpOworICAgICAgICBTcGFjZVNwbGl0U3RyaW5nIG9sZENsYXNzZXMgPSBtdXRhYmxlQXR0
cmlidXRlRGF0YSgpLT5jbGFzc05hbWVzKCk7CiAgICAgICAgIGVuc3VyZUF0dHJpYnV0ZURhdGEo
KS0+c2V0Q2xhc3MobmV3Q2xhc3NTdHJpbmcsIHNob3VsZEZvbGRDYXNlKTsKLSAgICB9IGVsc2Ug
aWYgKGF0dHJpYnV0ZURhdGEoKSkKKyAgICAgICAgaWYgKHNob3VsZEludmFsaWRhdGVTdHlsZSkK
KyAgICAgICAgICAgIGNvbGxlY3RBZGRlZEFuZFJlbW92ZWRDbGFzc2VzKGFkZGVkQW5kUmVtb3Zl
ZENsYXNzZXMsIG9sZENsYXNzZXMsIG11dGFibGVBdHRyaWJ1dGVEYXRhKCktPmNsYXNzTmFtZXMo
KSk7CisgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVEYXRhKCkpIHsKKyAgICAgICAgaWYgKHNob3Vs
ZEludmFsaWRhdGVTdHlsZSkgeworICAgICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYg
b2xkQ2xhc3NlcyA9IG11dGFibGVBdHRyaWJ1dGVEYXRhKCktPmNsYXNzTmFtZXMoKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDbGFzc2VzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgICAgIGFkZGVkQW5kUmVtb3ZlZENsYXNzZXMuYXBwZW5kKG9sZENsYXNzZXNb
aV0pOworICAgICAgICB9CiAgICAgICAgIG11dGFibGVBdHRyaWJ1dGVEYXRhKCktPmNsZWFyQ2xh
c3MoKTsKKyAgICB9CiAKICAgICBpZiAoRE9NVG9rZW5MaXN0KiBjbGFzc0xpc3QgPSBvcHRpb25h
bENsYXNzTGlzdCgpKQogICAgICAgICBzdGF0aWNfY2FzdDxDbGFzc0xpc3QqPihjbGFzc0xpc3Qp
LT5yZXNldChuZXdDbGFzc1N0cmluZyk7CiAKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cisg
ICAgaWYgKCFzaG91bGRJbnZhbGlkYXRlU3R5bGUpCisgICAgICAgIHJldHVybjsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYWRkZWRBbmRSZW1vdmVkQ2xhc3Nlcy5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAoZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlcklmRXhpc3RzKCktPmhhc1Nl
bGVjdG9yRm9yQ2xhc3MoYWRkZWRBbmRSZW1vdmVkQ2xhc3Nlc1tpXSkpIHsKKyAgICAgICAgICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQogfQogCiAvLyBSZXR1cm5zIHRydWUgaXMgdGhlIGdpdmVuIGF0dHJpYnV0ZSBpcyBhbiBl
dmVudCBoYW5kbGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNw
cAkocmV2aXNpb24gMTMyNzg2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMzYgKzEwNyw0MyBAQCBib29sIFNwYWNlU3Bs
aXRTdHJpbmdEYXRhOjpjb250YWluc0FsbChTCiB2b2lkIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjph
ZGQoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgQVNTRVJUKGhhc09uZVJlZigp
KTsKLSAgICBpZiAoY29udGFpbnMoc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgQVNT
RVJUKCFjb250YWlucyhzdHJpbmcpKTsKICAgICBtX3ZlY3Rvci5hcHBlbmQoc3RyaW5nKTsKIH0K
IAotdm9pZCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZyYg
c3RyaW5nKQordm9pZCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6cmVtb3ZlKHVuc2lnbmVkIGluZGV4
KQogewogICAgIEFTU0VSVChoYXNPbmVSZWYoKSk7Ci0gICAgc2l6ZV90IHBvc2l0aW9uID0gMDsK
LSAgICB3aGlsZSAocG9zaXRpb24gPCBtX3ZlY3Rvci5zaXplKCkpIHsKLSAgICAgICAgaWYgKG1f
dmVjdG9yW3Bvc2l0aW9uXSA9PSBzdHJpbmcpCi0gICAgICAgICAgICBtX3ZlY3Rvci5yZW1vdmUo
cG9zaXRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICArK3Bvc2l0aW9uOwotICAgIH0K
KyAgICBtX3ZlY3Rvci5yZW1vdmUoaW5kZXgpOwogfQogCiB2b2lkIFNwYWNlU3BsaXRTdHJpbmc6
OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykKIHsKKyAgICAvLyBGSVhNRTogYWRkKCkg
ZG9lcyBub3QgYWxsb3cgZHVwbGljYXRlcyBidXQgY3JlYXRlVmVjdG9yKCkgZG9lcy4KKyAgICBp
ZiAoY29udGFpbnMoc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGVuc3VyZVVuaXF1ZSgp
OwogICAgIGlmIChtX2RhdGEpCiAgICAgICAgIG1fZGF0YS0+YWRkKHN0cmluZyk7CiB9CiAKLXZv
aWQgU3BhY2VTcGxpdFN0cmluZzo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQor
Ym9vbCBTcGFjZVNwbGl0U3RyaW5nOjpyZW1vdmUoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcp
CiB7Ci0gICAgZW5zdXJlVW5pcXVlKCk7Ci0gICAgaWYgKG1fZGF0YSkKLSAgICAgICAgbV9kYXRh
LT5yZW1vdmUoc3RyaW5nKTsKKyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIHdo
aWxlIChpIDwgbV9kYXRhLT5zaXplKCkpIHsKKyAgICAgICAgaWYgKCgqbV9kYXRhKVtpXSA9PSBz
dHJpbmcpIHsKKyAgICAgICAgICAgIGlmICghY2hhbmdlZCkKKyAgICAgICAgICAgICAgICBlbnN1
cmVVbmlxdWUoKTsKKyAgICAgICAgICAgIG1fZGF0YS0+cmVtb3ZlKGkpOworICAgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICArK2k7CisgICAgfQorICAgIHJldHVybiBjaGFuZ2VkOwogfQogCiB0eXBlZGVmIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBTcGFjZVNwbGl0U3RyaW5nRGF0YSo+IFNwYWNlU3BsaXRTdHJpbmdEYXRh
TWFwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5oCShyZXZpc2lvbiAx
MzI3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9v
bCBjb250YWluc0FsbChTcGFjZVNwbGl0U3RyaW5nRGF0YSYpOwogCiAgICAgICAgIHZvaWQgYWRk
KGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgICAgICB2b2lkIHJlbW92ZShjb25zdCBBdG9taWNT
dHJpbmcmKTsKKyAgICAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaW5kZXgpOwogCiAgICAgICAg
IGJvb2wgaXNVbmlxdWUoKSBjb25zdCB7IHJldHVybiBtX2tleVN0cmluZy5pc051bGwoKTsgfSAK
ICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0K
QEAgLTc2LDcgKzc2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGNvbnRh
aW5zKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtX2RhdGEgJiYg
bV9kYXRhLT5jb250YWlucyhzdHJpbmcpOyB9CiAgICAgICAgIGJvb2wgY29udGFpbnNBbGwoY29u
c3QgU3BhY2VTcGxpdFN0cmluZyYgbmFtZXMpIGNvbnN0IHsgcmV0dXJuICFuYW1lcy5tX2RhdGEg
fHwgKG1fZGF0YSAmJiBtX2RhdGEtPmNvbnRhaW5zQWxsKCpuYW1lcy5tX2RhdGEpKTsgfQogICAg
ICAgICB2b2lkIGFkZChjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICAgICAgdm9pZCByZW1vdmUo
Y29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgICAgIGJvb2wgcmVtb3ZlKGNvbnN0IEF0b21pY1N0
cmluZyYpOwogCiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhID8g
bV9kYXRhLT5zaXplKCkgOiAwOyB9CiAgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fZGF0YTsgfQo=
</data>
<flag name="review"
          id="185435"
          type_id="1"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171509</attachid>
            <date>2012-10-30 12:53:58 -0700</date>
            <delta_ts>2012-10-30 12:59:13 -0700</delta_ts>
            <desc>another try</desc>
            <filename>class-mutation-recalc-2.patch</filename>
            <type>text/plain</type>
            <size>12950</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDEyLTEwLTMwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBdm9pZCB1bm5lY2Vzc2FyeSBz
dHlsZSByZWNhbGNzIG9uIGNsYXNzIGF0dHJpYnV0ZSBtdXRhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNzc2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgaXMgbm8gbmVlZCB0byBpbnZh
bGlkYXRlIGVsZW1lbnQgc3R5bGUgb24gY2xhc3MgYXR0cmlidXRlIGNoYW5nZSBpZiBuZWl0aGVy
IHRoZSBhZGRlZAorICAgICAgICBvciByZW1vdmVkIGNsYXNzZXMgZmVhdHVyZWQgaW4gYW55IGFj
dGl2ZSBzdHlsZXNoZWV0LgorCisgICAgICAgICogY3NzL1J1bGVGZWF0dXJlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJ1bGVGZWF0dXJlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6UnVs
ZUZlYXR1cmVTZXQ6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVGZWF0dXJlU2V0Ojpy
ZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1J1bGVGZWF0dXJlLmg6CisgICAgICAg
IChSdWxlRmVhdHVyZVNldCk6CisgICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKToKKyAgICAgICAgCisgICAgICAg
ICAgICBDb2xsZWN0IGNsYXNzZXMgbWVudGlvbmVkIGluIENTUyBzZWxlY3RvcnMgdGhlIHNhbWUg
d2F5IGlkcyBhbmQgYXR0cmlidXRlIG5hbWVzIGFyZQorICAgICAgICAgICAgYWxyZWFkeSBjb2xs
ZWN0ZWQuCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpoYXNTZWxlY3RvckZvckNsYXNzKToKKyAgICAgICAgCisgICAg
ICAgICAgICBBZGQgYSBtZXRob2QgdG8gdGVzdCBpZiBhIGdpdmVuIGNsYXNzIG5hbWUgaXMgbWVu
dGlvbmVkIGFueXdoZXJlIGluIHN0eWxlaHNlZXRzLgorCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAqIGNzcy9TdHlsZVNjb3BlUmVz
b2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RBZGRlZEFuZFJlbW92ZWRDbGFzc2VzKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xhc3NBdHRyaWJ1dGVD
aGFuZ2VkKToKKyAgICAgICAgCisgICAgICAgICAgICBGaWd1cmUgb3V0IHdoaWNoIGNsYXNzZXMg
d2VyZSBhZGRlZCBhbmQgcmVtb3ZlZC4gVGVzdCBpZiB0aGV5IGFyZSBwcmVzZW50IGluIGFueSBz
dHlsZQorICAgICAgICAgICAgcnVsZSBhbmQgaW52YWxpZGF0ZSB0aGUgc3R5bGUgb25seSBpZiB0
aGV5IGFyZS4KKworICAgICAgICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6
U3BhY2VTcGxpdFN0cmluZ0RhdGE6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNw
bGl0U3RyaW5nOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZzo6cmVt
b3ZlKToKKyAgICAgICAgCisgICAgICAgICAgICBBZGRlZCBib29sIHJldHVybiB2YWx1ZSB0byBp
bmRpY2F0ZSBpZiBhbnl0aGluZyB3YXMgYWN0dWFsbHkgcmVtb3ZlZC4gUmVvcmdhbml6ZWQgCisg
ICAgICAgICAgICB0aGUgY29kZSBhIGJpdCB0byBhdm9pZCB1bm5lY2Vzc2FyeSB1bmlxdWluZyB3
aGVuIG5vdGhpbmcgY2hhbmdlcy4KKworICAgICAgICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmg6
CisgICAgICAgIChTcGFjZVNwbGl0U3RyaW5nRGF0YSk6CisgICAgICAgIChTcGFjZVNwbGl0U3Ry
aW5nKToKKwogMjAxMi0xMC0yNiAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9iZS5j
b20+CiAKICAgICAgICAgW0NTUyBTaGFkZXJzXSBBZGQgdGhlIFZhbGlkYXRlZEN1c3RvbUZpbHRl
ck9wZXJhdGlvbiBjbGFzcwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1J1bGVGZWF0dXJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuY3BwCShyZXZp
c2lvbiAxMzI3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lk
IFJ1bGVGZWF0dXJlU2V0OjphZGQoY29uc3QgUnVsZUZlYXR1cmVTZXQmIG90aGVyKQogewotICAg
IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+OjppdGVyYXRvciBlbmQgPSBvdGhlci5pZHNJblJ1
bGVzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0ZXJhdG9y
IGl0ID0gb3RoZXIuaWRzSW5SdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgSGFz
aFNldDxBdG9taWNTdHJpbmdJbXBsKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG90aGVyLmlkc0lu
UnVsZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBvdGhlci5pZHNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgaWRzSW5SdWxlcy5hZGQoKml0KTsKKyAgICBlbmQgPSBvdGhlci5jbGFzc2VzSW5S
dWxlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG90aGVyLmNsYXNzZXNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgY2xhc3Nlc0luUnVsZXMuYWRkKCppdCk7CiAgICAgZW5kID0gb3RoZXIuYXR0
cnNJblJ1bGVzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj46Oml0
ZXJhdG9yIGl0ID0gb3RoZXIuYXR0cnNJblJ1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICBmb3IgKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG90aGVyLmF0dHJzSW5SdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGF0
dHJzSW5SdWxlcy5hZGQoKml0KTsKICAgICBzaWJsaW5nUnVsZXMuYXBwZW5kKG90aGVyLnNpYmxp
bmdSdWxlcyk7CiAgICAgdW5jb21tb25BdHRyaWJ1dGVSdWxlcy5hcHBlbmQob3RoZXIudW5jb21t
b25BdHRyaWJ1dGVSdWxlcyk7CkBAIC01Myw2ICs1Niw3IEBAIHZvaWQgUnVsZUZlYXR1cmVTZXQ6
OmFkZChjb25zdCBSdWxlRmVhdHUKIHZvaWQgUnVsZUZlYXR1cmVTZXQ6OmNsZWFyKCkKIHsKICAg
ICBpZHNJblJ1bGVzLmNsZWFyKCk7CisgICAgY2xhc3Nlc0luUnVsZXMuY2xlYXIoKTsKICAgICBh
dHRyc0luUnVsZXMuY2xlYXIoKTsKICAgICBzaWJsaW5nUnVsZXMuY2xlYXIoKTsKICAgICB1bmNv
bW1vbkF0dHJpYnV0ZVJ1bGVzLmNsZWFyKCk7CkBAIC02NCw2ICs2OCw3IEBAIHZvaWQgUnVsZUZl
YXR1cmVTZXQ6OnJlcG9ydE1lbW9yeVVzYWdlKE0KIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5m
byhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7CiAgICAg
aW5mby5hZGRNZW1iZXIoaWRzSW5SdWxlcyk7CisgICAgaW5mby5hZGRNZW1iZXIoY2xhc3Nlc0lu
UnVsZXMpOwogICAgIGluZm8uYWRkTWVtYmVyKGF0dHJzSW5SdWxlcyk7CiAgICAgaW5mby5hZGRN
ZW1iZXIoc2libGluZ1J1bGVzKTsKICAgICBpbmZvLmFkZE1lbWJlcih1bmNvbW1vbkF0dHJpYnV0
ZVJ1bGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlRmVhdHVyZS5oCShyZXZpc2lvbiAxMzI3ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZUZlYXR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsOCArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFN0eWxlUnVsZTsKIAot
Y2xhc3MgUnVsZUZlYXR1cmUgewotcHVibGljOgorc3RydWN0IFJ1bGVGZWF0dXJlIHsKICAgICBS
dWxlRmVhdHVyZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKICAgICAgICAgOiBydWxlKHJ1bGUpCiAgICAgICAg
ICwgc2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQpAQCAtNDQsOCArNDMsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOwogfTsKIAotY2xhc3MgUnVsZUZl
YXR1cmVTZXQgewotcHVibGljOgorc3RydWN0IFJ1bGVGZWF0dXJlU2V0IHsKICAgICBSdWxlRmVh
dHVyZVNldCgpCiAgICAgICAgIDogdXNlc0ZpcnN0TGluZVJ1bGVzKGZhbHNlKQogICAgICAgICAs
IHVzZXNCZWZvcmVBZnRlclJ1bGVzKGZhbHNlKQpAQCAtNTUsNiArNTMsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyopIGNvbnN0OwogICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGlkc0luUnVsZXM7
CisgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gY2xhc3Nlc0luUnVsZXM7CiAgICAgSGFz
aFNldDxBdG9taWNTdHJpbmdJbXBsKj4gYXR0cnNJblJ1bGVzOwogICAgIFZlY3RvcjxSdWxlRmVh
dHVyZT4gc2libGluZ1J1bGVzOwogICAgIFZlY3RvcjxSdWxlRmVhdHVyZT4gdW5jb21tb25BdHRy
aWJ1dGVSdWxlczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAJKHJldmlzaW9uIDEzMjc4NikK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYx
LDcgKzE2MSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tU2UKIHsK
ICAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQogICAgICAgICBm
ZWF0dXJlcy5pZHNJblJ1bGVzLmFkZChzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOwotICAgIGlm
IChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgIGVsc2UgaWYgKHNlbGVjdG9y
LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykKKyAgICAgICAgZmVhdHVyZXMuY2xhc3Nl
c0luUnVsZXMuYWRkKHNlbGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7CisgICAgZWxzZSBpZiAoc2Vs
ZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKICAgICAgICAgZmVhdHVyZXMuYXR0cnNJblJ1
bGVzLmFkZChzZWxlY3Rvci0+YXR0cmlidXRlKCkubG9jYWxOYW1lKCkuaW1wbCgpKTsKICAgICBz
d2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9UeXBlKCkpIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9GaXJzdExpbmU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCShy
ZXZpc2lvbiAxMzI3ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyNDUsNiArNDI0NSwxMyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6
Omhhc1NlbGVjdG9yRm9yQXR0cmliCiAgICAgcmV0dXJuIG1fZmVhdHVyZXMuYXR0cnNJblJ1bGVz
LmNvbnRhaW5zKGF0dHJuYW1lLmltcGwoKSk7CiB9CiAKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6aGFz
U2VsZWN0b3JGb3JDbGFzcyhjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzVmFsdWUpIGNvbnN0Cit7
CisgICAgaWYgKGNsYXNzVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIG1fZmVhdHVyZXMuY2xhc3Nlc0luUnVsZXMuY29udGFpbnMoY2xhc3NWYWx1ZS5p
bXBsKCkpOworfQorCiBib29sIFN0eWxlUmVzb2x2ZXI6Omhhc1NlbGVjdG9yRm9ySWQoY29uc3Qg
QXRvbWljU3RyaW5nJiBpZFZhbHVlKSBjb25zdAogewogICAgIGlmIChpZFZhbHVlLmlzRW1wdHko
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkocmV2aXNpb24gMTMyNzg3KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjQ0LDYgKzI0NCw3IEBAIHB1YmxpYzoKICAgICBDb2xvciBjb2xvckZyb21QcmltaXRpdmVWYWx1
ZShDU1NQcmltaXRpdmVWYWx1ZSosIGJvb2wgZm9yVmlzaXRlZExpbmsgPSBmYWxzZSkgY29uc3Q7
CiAKICAgICBib29sIGhhc1NlbGVjdG9yRm9ySWQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7
CisgICAgYm9vbCBoYXNTZWxlY3RvckZvckNsYXNzKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0
OwogICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJikg
Y29uc3Q7CiAKICAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udFNlbGVjdG9yLmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVTY29wZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2NvcGVSZXNvbHZlci5oCShyZXZpc2lvbiAxMzI3ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTY29wZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDkgQEAgY2xh
c3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBFbGVtZW50Owog
Y2xhc3MgUnVsZVNldDsKLWNsYXNzIFJ1bGVGZWF0dXJlU2V0OwogY2xhc3MgU2hhZG93Um9vdDsK
IGNsYXNzIFN0eWxlUnVsZUhvc3Q7CitzdHJ1Y3QgUnVsZUZlYXR1cmVTZXQ7CiAKICNpZiBFTkFC
TEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKIApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAkocmV2aXNpb24gMTMyNzg2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjUsMTggKzc2NSw0OSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgY2xhc3NTdHJpbmdIYXNDbGFzc05hCiAgICAgcmV0dXJuIGNsYXNzU3RyaW5nSGFzQ2xh
c3NOYW1lKG5ld0NsYXNzU3RyaW5nLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwogfQogCitzdGF0
aWMgdm9pZCBjb2xsZWN0QWRkZWRBbmRSZW1vdmVkQ2xhc3NlcyhWZWN0b3I8QXRvbWljU3RyaW5n
LCA0PiYgYWRkZWRBbmRSZW1vdmVkQ2xhc3NlcywgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhc3Nl
cywgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgbmV3Q2xhc3NlcykKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbmV3Q2xhc3Nlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAob2xk
Q2xhc3Nlcy5yZW1vdmUobmV3Q2xhc3Nlc1tpXSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgYWRkZWRBbmRSZW1vdmVkQ2xhc3Nlcy5hcHBlbmQobmV3Q2xhc3Nlc1tpXSk7CisgICAg
fQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDbGFzc2VzLnNpemUoKTsgKytpKQor
ICAgICAgICBhZGRlZEFuZFJlbW92ZWRDbGFzc2VzLmFwcGVuZChvbGRDbGFzc2VzW2ldKTsKK30K
Kwogdm9pZCBFbGVtZW50OjpjbGFzc0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgQXRvbWljU3RyaW5n
JiBuZXdDbGFzc1N0cmluZykKIHsKKyAgICBib29sIHNob3VsZEludmFsaWRhdGVTdHlsZSA9IGF0
dGFjaGVkKCkgJiYgZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlcklmRXhpc3RzKCk7CisgICAgVmVj
dG9yPEF0b21pY1N0cmluZywgND4gYWRkZWRBbmRSZW1vdmVkQ2xhc3NlczsKKwogICAgIGlmIChj
bGFzc1N0cmluZ0hhc0NsYXNzTmFtZShuZXdDbGFzc1N0cmluZykpIHsKKyAgICAgICAgY29uc3Qg
RWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBlbnN1cmVBdHRyaWJ1dGVEYXRh
KCk7CiAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkRm9sZENhc2UgPSBkb2N1bWVudCgpLT5pblF1
aXJrc01vZGUoKTsKLSAgICAgICAgZW5zdXJlQXR0cmlidXRlRGF0YSgpLT5zZXRDbGFzcyhuZXdD
bGFzc1N0cmluZywgc2hvdWxkRm9sZENhc2UpOwotICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlRGF0
YSgpKQorICAgICAgICBTcGFjZVNwbGl0U3RyaW5nIG9sZENsYXNzZXMgPSBhdHRyaWJ1dGVEYXRh
LT5jbGFzc05hbWVzKCk7CisgICAgICAgIGF0dHJpYnV0ZURhdGEtPnNldENsYXNzKG5ld0NsYXNz
U3RyaW5nLCBzaG91bGRGb2xkQ2FzZSk7CisgICAgICAgIGlmIChzaG91bGRJbnZhbGlkYXRlU3R5
bGUpCisgICAgICAgICAgICBjb2xsZWN0QWRkZWRBbmRSZW1vdmVkQ2xhc3NlcyhhZGRlZEFuZFJl
bW92ZWRDbGFzc2VzLCBvbGRDbGFzc2VzLCBtdXRhYmxlQXR0cmlidXRlRGF0YSgpLT5jbGFzc05h
bWVzKCkpOworICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlRGF0YSgpKSB7CisgICAgICAgIGlmIChz
aG91bGRJbnZhbGlkYXRlU3R5bGUpIHsKKyAgICAgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJp
bmcmIG9sZENsYXNzZXMgPSBhdHRyaWJ1dGVEYXRhKCktPmNsYXNzTmFtZXMoKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDbGFzc2VzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgICAgIGFkZGVkQW5kUmVtb3ZlZENsYXNzZXMuYXBwZW5kKG9sZENsYXNzZXNbaV0p
OworICAgICAgICB9CiAgICAgICAgIG11dGFibGVBdHRyaWJ1dGVEYXRhKCktPmNsZWFyQ2xhc3Mo
KTsKKyAgICB9CiAKICAgICBpZiAoRE9NVG9rZW5MaXN0KiBjbGFzc0xpc3QgPSBvcHRpb25hbENs
YXNzTGlzdCgpKQogICAgICAgICBzdGF0aWNfY2FzdDxDbGFzc0xpc3QqPihjbGFzc0xpc3QpLT5y
ZXNldChuZXdDbGFzc1N0cmluZyk7CiAKLSAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAg
aWYgKCFzaG91bGRJbnZhbGlkYXRlU3R5bGUpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYWRkZWRBbmRSZW1vdmVkQ2xhc3Nlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlcklmRXhpc3RzKCktPmhhc1NlbGVj
dG9yRm9yQ2xhc3MoYWRkZWRBbmRSZW1vdmVkQ2xhc3Nlc1tpXSkpIHsKKyAgICAgICAgICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQogfQogCiAvLyBSZXR1cm5zIHRydWUgaXMgdGhlIGdpdmVuIGF0dHJpYnV0ZSBpcyBhbiBldmVu
dCBoYW5kbGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcAko
cmV2aXNpb24gMTMyNzg2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMzYgKzEwNyw0MyBAQCBib29sIFNwYWNlU3BsaXRT
dHJpbmdEYXRhOjpjb250YWluc0FsbChTCiB2b2lkIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjphZGQo
Y29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgQVNTRVJUKGhhc09uZVJlZigpKTsK
LSAgICBpZiAoY29udGFpbnMoc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOwotCisgICAgQVNTRVJU
KCFjb250YWlucyhzdHJpbmcpKTsKICAgICBtX3ZlY3Rvci5hcHBlbmQoc3RyaW5nKTsKIH0KIAot
dm9pZCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZyYgc3Ry
aW5nKQordm9pZCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6cmVtb3ZlKHVuc2lnbmVkIGluZGV4KQog
ewogICAgIEFTU0VSVChoYXNPbmVSZWYoKSk7Ci0gICAgc2l6ZV90IHBvc2l0aW9uID0gMDsKLSAg
ICB3aGlsZSAocG9zaXRpb24gPCBtX3ZlY3Rvci5zaXplKCkpIHsKLSAgICAgICAgaWYgKG1fdmVj
dG9yW3Bvc2l0aW9uXSA9PSBzdHJpbmcpCi0gICAgICAgICAgICBtX3ZlY3Rvci5yZW1vdmUocG9z
aXRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICArK3Bvc2l0aW9uOwotICAgIH0KKyAg
ICBtX3ZlY3Rvci5yZW1vdmUoaW5kZXgpOwogfQogCiB2b2lkIFNwYWNlU3BsaXRTdHJpbmc6OmFk
ZChjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykKIHsKKyAgICAvLyBGSVhNRTogYWRkKCkgZG9l
cyBub3QgYWxsb3cgZHVwbGljYXRlcyBidXQgY3JlYXRlVmVjdG9yKCkgZG9lcy4KKyAgICBpZiAo
Y29udGFpbnMoc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGVuc3VyZVVuaXF1ZSgpOwog
ICAgIGlmIChtX2RhdGEpCiAgICAgICAgIG1fZGF0YS0+YWRkKHN0cmluZyk7CiB9CiAKLXZvaWQg
U3BhY2VTcGxpdFN0cmluZzo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQorYm9v
bCBTcGFjZVNwbGl0U3RyaW5nOjpyZW1vdmUoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpCiB7
Ci0gICAgZW5zdXJlVW5pcXVlKCk7Ci0gICAgaWYgKG1fZGF0YSkKLSAgICAgICAgbV9kYXRhLT5y
ZW1vdmUoc3RyaW5nKTsKKyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIHdoaWxl
IChpIDwgbV9kYXRhLT5zaXplKCkpIHsKKyAgICAgICAgaWYgKCgqbV9kYXRhKVtpXSA9PSBzdHJp
bmcpIHsKKyAgICAgICAgICAgIGlmICghY2hhbmdlZCkKKyAgICAgICAgICAgICAgICBlbnN1cmVV
bmlxdWUoKTsKKyAgICAgICAgICAgIG1fZGF0YS0+cmVtb3ZlKGkpOworICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAr
K2k7CisgICAgfQorICAgIHJldHVybiBjaGFuZ2VkOwogfQogCiB0eXBlZGVmIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBTcGFjZVNwbGl0U3RyaW5nRGF0YSo+IFNwYWNlU3BsaXRTdHJpbmdEYXRhTWFw
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5oCShyZXZpc2lvbiAxMzI3
ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBj
b250YWluc0FsbChTcGFjZVNwbGl0U3RyaW5nRGF0YSYpOwogCiAgICAgICAgIHZvaWQgYWRkKGNv
bnN0IEF0b21pY1N0cmluZyYpOwotICAgICAgICB2b2lkIHJlbW92ZShjb25zdCBBdG9taWNTdHJp
bmcmKTsKKyAgICAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaW5kZXgpOwogCiAgICAgICAgIGJv
b2wgaXNVbmlxdWUoKSBjb25zdCB7IHJldHVybiBtX2tleVN0cmluZy5pc051bGwoKTsgfSAKICAg
ICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0KQEAg
LTc2LDcgKzc2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGNvbnRhaW5z
KGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtX2RhdGEgJiYgbV9k
YXRhLT5jb250YWlucyhzdHJpbmcpOyB9CiAgICAgICAgIGJvb2wgY29udGFpbnNBbGwoY29uc3Qg
U3BhY2VTcGxpdFN0cmluZyYgbmFtZXMpIGNvbnN0IHsgcmV0dXJuICFuYW1lcy5tX2RhdGEgfHwg
KG1fZGF0YSAmJiBtX2RhdGEtPmNvbnRhaW5zQWxsKCpuYW1lcy5tX2RhdGEpKTsgfQogICAgICAg
ICB2b2lkIGFkZChjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICAgICAgdm9pZCByZW1vdmUoY29u
c3QgQXRvbWljU3RyaW5nJik7CisgICAgICAgIGJvb2wgcmVtb3ZlKGNvbnN0IEF0b21pY1N0cmlu
ZyYpOwogCiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhID8gbV9k
YXRhLT5zaXplKCkgOiAwOyB9CiAgICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4g
IW1fZGF0YTsgfQo=
</data>
<flag name="review"
          id="185455"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>