<?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>204219</bug_id>
          
          <creation_ts>2019-11-14 23:02:22 -0800</creation_ts>
          <short_desc>JS wrappers of scroll event targets can get prematurely collected by GC</short_desc>
          <delta_ts>2019-11-15 15:05:53 -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>Scrolling</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=203839</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1590434</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-14 23:02:22 -0800</bug_when>
    <thetext>We don&apos;t keep JS wrappers of scroll event targets alive while it&apos;s waiting to be fired in the next rendering update.
This bug has always existed but it&apos;s worse after https://trac.webkit.org/r252205 because it delays the firing of the event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590436</commentid>
    <comment_count>1</comment_count>
      <attachid>383603</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-14 23:11:55 -0800</bug_when>
    <thetext>Created attachment 383603
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590437</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-14 23:12:28 -0800</bug_when>
    <thetext>Note: I&apos;ve checked the world leaks with run-webkit-tests --debug --world-leaks fast/scrolling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590438</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-14 23:13:54 -0800</bug_when>
    <thetext>&lt;rdar://problem/57218306&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590525</commentid>
    <comment_count>4</comment_count>
      <attachid>383603</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-11-15 09:16:36 -0800</bug_when>
    <thetext>Comment on attachment 383603
Fixes the bug

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        r252205 because there is more of a time delay between an element is scrolled in RenderLayer sense
&gt; +        and when the corresponding scroll event is fired on the element.

this sentence is weird. maybe &quot;because there is a greater delay between when an element is scrolled in the RenderLayer and when the corresponding scroll event is fired on the element&quot; is clearer?

&gt; Source/WebCore/dom/Document.cpp:373
&gt; +// Defined here to avoid including GCReachableRef.h in Document.h
&gt; +struct Document::PendingScrollEventTargetList {
&gt; +    WTF_MAKE_FAST_ALLOCATED;
&gt; +
&gt; +public:
&gt; +    Vector&lt;GCReachableRef&lt;ContainerNode&gt;&gt; targets;
&gt; +};

I thought you said there was a pending activity class? Can we just use that instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590531</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-15 09:39:36 -0800</bug_when>
    <thetext>(In reply to Keith Miller from comment #4)
&gt; Comment on attachment 383603 [details]
&gt; Fixes the bug
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=383603&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        r252205 because there is more of a time delay between an element is scrolled in RenderLayer sense
&gt; &gt; +        and when the corresponding scroll event is fired on the element.
&gt; 
&gt; this sentence is weird. maybe &quot;because there is a greater delay between when
&gt; an element is scrolled in the RenderLayer and when the corresponding scroll
&gt; event is fired on the element&quot; is clearer?

Sure.

&gt; &gt; Source/WebCore/dom/Document.cpp:373
&gt; &gt; +// Defined here to avoid including GCReachableRef.h in Document.h
&gt; &gt; +struct Document::PendingScrollEventTargetList {
&gt; &gt; +    WTF_MAKE_FAST_ALLOCATED;
&gt; &gt; +
&gt; &gt; +public:
&gt; &gt; +    Vector&lt;GCReachableRef&lt;ContainerNode&gt;&gt; targets;
&gt; &gt; +};
&gt; 
&gt; I thought you said there was a pending activity class? Can we just use that
&gt; instead?

No, we can&apos;t make every ContainerNode an active DOM object because ContainerNode is a very common object in DOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590542</commentid>
    <comment_count>6</comment_count>
      <attachid>383603</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-11-15 10:20:53 -0800</bug_when>
    <thetext>Comment on attachment 383603
Fixes the bug

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

r=me.

&gt;&gt;&gt; Source/WebCore/dom/Document.cpp:373
&gt;&gt;&gt; +};
&gt;&gt; 
&gt;&gt; I thought you said there was a pending activity class? Can we just use that instead?
&gt; 
&gt; No, we can&apos;t make every ContainerNode an active DOM object because ContainerNode is a very common object in DOM.

Oh, I thought the system worked with any node, presumably via GCReachableRef.

&gt; Source/WebCore/dom/Document.cpp:4021
&gt; +    if (targets.findMatching([&amp;target] (auto&amp; entry) { return entry.ptr() == &amp;target; }) != notFound)

Why not just [&amp;]? It&apos;s all gonna get inlined anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590598</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-15 12:07:36 -0800</bug_when>
    <thetext>(In reply to Keith Miller from comment #6)
&gt; Comment on attachment 383603 [details]
&gt; Fixes the bug
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=383603&amp;action=review
&gt; 
&gt; r=me.
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/dom/Document.cpp:373
&gt; &gt;&gt;&gt; +};
&gt; &gt;&gt; 
&gt; &gt;&gt; I thought you said there was a pending activity class? Can we just use that instead?
&gt; &gt; 
&gt; &gt; No, we can&apos;t make every ContainerNode an active DOM object because ContainerNode is a very common object in DOM.
&gt; 
&gt; Oh, I thought the system worked with any node, presumably via GCReachableRef.

No, pending activity is for active DOM objects. We use GCReachableRef when a Node needs to be kept alive by something other than Node itself (if it is, then we make that particular node an active DOM object).

&gt; &gt; Source/WebCore/dom/Document.cpp:4021
&gt; &gt; +    if (targets.findMatching([&amp;target] (auto&amp; entry) { return entry.ptr() == &amp;target; }) != notFound)
&gt; 
&gt; Why not just [&amp;]? It&apos;s all gonna get inlined anyway.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1590682</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-11-15 15:05:53 -0800</bug_when>
    <thetext>Committed r252504: &lt;https://trac.webkit.org/changeset/252504&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383603</attachid>
            <date>2019-11-14 23:11:55 -0800</date>
            <delta_ts>2019-11-15 10:20:53 -0800</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-204219-20191114231154.patch</filename>
            <type>text/plain</type>
            <size>8860</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MjQ3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE5LTExLTE0ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEpTIHdyYXBwZXJzIG9mIHNjcm9s
bCBldmVudCB0YXJnZXRzIGNhbiBnZXQgcHJlbWF0dXJlbHkgY29sbGVjdGVkIGJ5IEdDCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQyMTkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFk
ZHJlc3NlcyB0aGUgYnVnIHRoYXQgdGhlIEpTIHdyYXBwZXJzIG9mIHRoZSBwZW5kaW5nIHNjcm9s
bCBldmVudCB0YXJnZXRzIGNhbiBiZQorICAgICAgICBjb2xsZWN0ZWQgYnkgR0MgYmVmb3JlIHNj
cm9sbCBldmVudHMgYXJlIGZpcmVkLiBUaGlzIGJ1ZyBoYXMgYWx3YXlzIGV4aXN0ZWQgYnV0IGl0
J3Mgd29yc2UgYWZ0ZXIKKyAgICAgICAgcjI1MjIwNSBiZWNhdXNlIHRoZXJlIGlzIG1vcmUgb2Yg
YSB0aW1lIGRlbGF5IGJldHdlZW4gYW4gZWxlbWVudCBpcyBzY3JvbGxlZCBpbiBSZW5kZXJMYXll
ciBzZW5zZQorICAgICAgICBhbmQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBzY3JvbGwgZXZlbnQg
aXMgZmlyZWQgb24gdGhlIGVsZW1lbnQuCisKKyAgICAgICAgRml4ZWQgdGhlIGJ1ZyBieSB1c2lu
ZyBHQ1JlYWNoYWJsZVJlZiB0byBzdG9yZSB0aGUgcGVuZGluZyBzY3JvbGwgZXZlbnQgdGFyZ2V0
cyBpbnRyb2R1Y2VkIGluIHIyNTIyMDUKKyAgICAgICAgdG8ga2VlcCB0aGUgSlMgd3JhcHBlcnMg
b2YgdGhvc2UgZWxlbWVudHMgJiBkb2N1bWVudCBhbGl2ZS4KKworICAgICAgICBUZXN0OiBmYXN0
L3Njcm9sbGluZy9zY3JvbGxpbmctZXZlbnQtdGFyZ2V0LWdjLmh0bWwKKworICAgICAgICAqIGRv
bS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6UGVuZGluZ1Njcm9s
bEV2ZW50VGFyZ2V0TGlzdCk6IEFkZGVkLiBXcmFwcyBWZWN0b3I8R0NSZWFjaGFibGVSZWY8Q29u
dGFpbmVyTm9kZT4+CisgICAgICAgIHRvIGF2b2lkIGluY2x1ZGluZyBHQ1JlYWNoYWJsZVJlZi5o
IGluIERvY3VtZW50LmguCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29tbW9uVGVhcmRv
d24pOiBDbGVhciBtX3BlbmRpbmdTY3JvbGxFdmVudFRhcmdldExpc3QgdG8gYXZvaWQgZG9jdW1l
bnQgbGVha3MuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkUGVuZGluZ1Njcm9sbEV2
ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpydW5TY3JvbGxTdGVwcyk6
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisKIDIwMTktMTEtMTQgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggd2hlbiBzZXR0aW5nIEhU
TUxJbnB1dEVsZW1lbnQuY2hlY2tlZCBmb3IgYSBkaXNjb25uZWN0ZWQgcmFkaW8gYnV0dG9uIGlu
IGEgc2hhZG93IHJvb3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjUy
NDc4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzgsNiArNzgsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnVsbHNjcmVlbk1hbmFnZXIuaCIKKyNpbmNsdWRl
ICJHQ1JlYWNoYWJsZVJlZi5oIgogI2luY2x1ZGUgIkdlbmVyaWNDYWNoZWRIVE1MQ29sbGVjdGlv
bi5oIgogI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hv
ckVsZW1lbnQuaCIKQEAgLTM2Myw2ICszNjQsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlz
YWxsb3dMYXlvdXQgeyBmYWxzZSB9OwogfTsKIAorLy8gRGVmaW5lZCBoZXJlIHRvIGF2b2lkIGlu
Y2x1ZGluZyBHQ1JlYWNoYWJsZVJlZi5oIGluIERvY3VtZW50LmgKK3N0cnVjdCBEb2N1bWVudDo6
UGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0TGlzdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisKK3B1YmxpYzoKKyAgICBWZWN0b3I8R0NSZWFjaGFibGVSZWY8Q29udGFpbmVyTm9kZT4+
IHRhcmdldHM7Cit9OworCiAjaWYgRU5BQkxFKElOVEVSU0VDVElPTl9PQlNFUlZFUikKIHN0YXRp
YyBjb25zdCBTZWNvbmRzIGludGVyc2VjdGlvbk9ic2VydmVyc0luaXRpYWxVcGRhdGVEZWxheSB7
IDIwMDBfbXMgfTsKICNlbmRpZgpAQCAtNzU5LDYgKzc2OCw4IEBAIHZvaWQgRG9jdW1lbnQ6OmNv
bW1vblRlYXJkb3duKCkKICAgICAgICAgYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnBhdXNlQW5pbWF0
aW9ucygpOwogCiAgICAgY2xlYXJTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKKworICAg
IG1fcGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0TGlzdCA9IG51bGxwdHI7CiB9CiAKIEVsZW1lbnQq
IERvY3VtZW50OjplbGVtZW50Rm9yQWNjZXNzS2V5KGNvbnN0IFN0cmluZyYga2V5KQpAQCAtNDAw
MywxMyArNDAxNCwxNyBAQCB2b2lkIERvY3VtZW50OjpydW5SZXNpemVTdGVwcygpCiAKIHZvaWQg
RG9jdW1lbnQ6OmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldChDb250YWluZXJOb2RlJiB0YXJn
ZXQpCiB7Ci0gICAgaWYgKG1fcGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0cy5jb250YWlucygmdGFy
Z2V0KSkKKyAgICBpZiAoIW1fcGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0TGlzdCkKKyAgICAgICAg
bV9wZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXRMaXN0ID0gbWFrZVVuaXF1ZTxQZW5kaW5nU2Nyb2xs
RXZlbnRUYXJnZXRMaXN0PigpOworCisgICAgYXV0byYgdGFyZ2V0cyA9IG1fcGVuZGluZ1Njcm9s
bEV2ZW50VGFyZ2V0TGlzdC0+dGFyZ2V0czsKKyAgICBpZiAodGFyZ2V0cy5maW5kTWF0Y2hpbmco
WyZ0YXJnZXRdIChhdXRvJiBlbnRyeSkgeyByZXR1cm4gZW50cnkucHRyKCkgPT0gJnRhcmdldDsg
fSkgIT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3BlbmRpbmdTY3Jv
bGxFdmVudFRhcmdldHMuaXNFbXB0eSgpKQorICAgIGlmICh0YXJnZXRzLmlzRW1wdHkoKSkKICAg
ICAgICAgc2NoZWR1bGVUaW1lZFJlbmRlcmluZ1VwZGF0ZSgpOwogCi0gICAgbV9wZW5kaW5nU2Ny
b2xsRXZlbnRUYXJnZXRzLmFwcGVuZChtYWtlV2Vha1B0cih0YXJnZXQpKTsKKyAgICB0YXJnZXRz
LmFwcGVuZCh0YXJnZXQpOwogfQogCiB2b2lkIERvY3VtZW50OjpzZXROZWVkc1Zpc3VhbFZpZXdw
b3J0U2Nyb2xsRXZlbnQoKQpAQCAtNDAyMywxNiArNDAzOCwxMiBAQCB2b2lkIERvY3VtZW50Ojpz
ZXROZWVkc1Zpc3VhbFZpZXdwb3J0U2NyCiB2b2lkIERvY3VtZW50OjpydW5TY3JvbGxTdGVwcygp
CiB7CiAgICAgLy8gRklYTUU6IFRoZSBvcmRlciBvZiBkaXNwYXRjaGluZyBpcyBub3Qgc3BlY2lm
aWVkOiBodHRwczovL2dpdGh1Yi5jb20vV0lDRy92aXN1YWwtdmlld3BvcnQvaXNzdWVzLzY2Lgot
ICAgIGlmICghbV9wZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXRzLmlzRW1wdHkoKSkgeworICAgIGlm
IChtX3BlbmRpbmdTY3JvbGxFdmVudFRhcmdldExpc3QgJiYgIW1fcGVuZGluZ1Njcm9sbEV2ZW50
VGFyZ2V0TGlzdC0+dGFyZ2V0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KEV2ZW50cywgc3RyZWFtIDw8ICJEb2N1bWVudCIgPDwgdGhpcyA8PCAic2VuZGluZyBzY3JvbGwg
ZXZlbnRzIHRvIHBlbmRpbmcgc2Nyb2xsIGV2ZW50IHRhcmdldHMiKTsKLSAgICAgICAgYXV0byBj
dXJyZW50VGFyZ2V0cyA9IFdURk1vdmUobV9wZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXRzKTsKLSAg
ICAgICAgZm9yIChhdXRvIHRhcmdldCA6IGN1cnJlbnRUYXJnZXRzKSB7Ci0gICAgICAgICAgICBh
dXRvIHByb3RlY3RlZFRhcmdldCA9IG1ha2VSZWZQdHIodGFyZ2V0LmdldCgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChwcm90ZWN0ZWRUYXJnZXQpOwotICAgICAgICAgICAgaWYgKCFwcm90ZWN0ZWRU
YXJnZXQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvIGJ1YmJs
ZXMgPSBwcm90ZWN0ZWRUYXJnZXQtPmlzRG9jdW1lbnROb2RlKCkgPyBFdmVudDo6Q2FuQnViYmxl
OjpZZXMgOiBFdmVudDo6Q2FuQnViYmxlOjpObzsKLSAgICAgICAgICAgIHByb3RlY3RlZFRhcmdl
dC0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwg
YnViYmxlcywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKKyAgICAgICAgYXV0byBjdXJyZW50
VGFyZ2V0cyA9IFdURk1vdmUobV9wZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXRMaXN0LT50YXJnZXRz
KTsKKyAgICAgICAgZm9yIChhdXRvJiB0YXJnZXQgOiBjdXJyZW50VGFyZ2V0cykgeworICAgICAg
ICAgICAgYXV0byBidWJibGVzID0gdGFyZ2V0LT5pc0RvY3VtZW50Tm9kZSgpID8gRXZlbnQ6OkNh
bkJ1YmJsZTo6WWVzIDogRXZlbnQ6OkNhbkJ1YmJsZTo6Tm87CisgICAgICAgICAgICB0YXJnZXQt
PmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQsIGJ1
YmJsZXMsIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
aWYgKG1fbmVlZHNWaXN1YWxWaWV3cG9ydFNjcm9sbEV2ZW50KSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAkocmV2aXNpb24gMjUyNDc4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNDEsNyArMjA0MSw4IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2lzVGVsZXBob25lTnVtYmVyUGFyc2luZ0FsbG93ZWQgeyB0cnVlIH07CiAjZW5kaWYKIAot
ICAgIFZlY3RvcjxXZWFrUHRyPENvbnRhaW5lck5vZGU+PiBtX3BlbmRpbmdTY3JvbGxFdmVudFRh
cmdldHM7CisgICAgc3RydWN0IFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldExpc3Q7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldExpc3Q+IG1fcGVuZGluZ1Njcm9s
bEV2ZW50VGFyZ2V0TGlzdDsKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgSGFzaFNl
dDxIVE1MTWVkaWFFbGVtZW50Kj4gbV9tZWRpYVN0cmVhbVN0YXRlQ2hhbmdlRWxlbWVudHM7Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTI0NzgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxOS0xMS0xNCAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KKworICAgICAgICBKUyB3cmFwcGVycyBvZiBzY3JvbGwgZXZlbnQgdGFy
Z2V0cyBjYW4gZ2V0IHByZW1hdHVyZWx5IGNvbGxlY3RlZCBieSBHQworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MjE5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSByZWdyZXNzaW9uIHRlc3Qg
Zm9yIGFkZGluZyBlbGVtZW50cyBhcyBwZW5kaW5nIHNjcm9sbCBldmVudCB0YXJnZXRzLAorICAg
ICAgICBhbmQgcmVtb3ZpbmcgdGhlbSBmcm9tIHRoZSBkb2N1bWVudCBiZWZvcmUgc2Nyb2xsIGV2
ZW50cyBhcmUgZmlyZWQuCisKKyAgICAgICAgKiBmYXN0L3Njcm9sbGluZy9zY3JvbGxpbmctZXZl
bnQtdGFyZ2V0LWdjLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9zY3JvbGxp
bmcvc2Nyb2xsaW5nLWV2ZW50LXRhcmdldC1nYy5odG1sOiBBZGRlZC4KKwogMjAxOS0xMS0xNCAg
V2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaCB3
aGVuIHNldHRpbmcgSFRNTElucHV0RWxlbWVudC5jaGVja2VkIGZvciBhIGRpc2Nvbm5lY3RlZCBy
YWRpbyBidXR0b24gaW4gYSBzaGFkb3cgcm9vdApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9zY3Jv
bGxpbmcvc2Nyb2xsaW5nLWV2ZW50LXRhcmdldC1nYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsaW5nLWV2ZW50LXRhcmdldC1nYy1l
eHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcv
c2Nyb2xsaW5nLWV2ZW50LXRhcmdldC1nYy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1IEBACitUaGlzIHRlc3RzIHNjaGVkdWxpbmcgYSBzY3JvbGwgZXZlbnQgb24gYW4g
ZWxlbWVudCB0aGVuIHJlbW92aW5nIHRoZSBlbGVtZW50LgorV2ViS2l0IHNob3VsZCBub3QgY29s
bGVjdCBpdHMgSlMgd3JhcHBlcnMuCisKK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9z
Y3JvbGxpbmcvc2Nyb2xsaW5nLWV2ZW50LXRhcmdldC1nYy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGluZy1ldmVudC10YXJnZXQtZ2MuaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3JvbGxpbmctZXZl
bnQtdGFyZ2V0LWdjLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorPCFET0NU
WVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBpbnRlcm5hbDpBc3luY092ZXJmbG93
U2Nyb2xsaW5nRW5hYmxlZD10cnVlIF0gLS0+Cis8aHRtbD4KKzxib2R5PgorPHN0eWxlPgorLmNv
bnRhaW5lciA+IGRpdiB7IHdpZHRoOiAxMHB4OyBoZWlnaHQ6IDEwcHg7IG92ZXJmbG93OiBzY3Jv
bGw7IH0KKzwvc3R5bGU+Cis8cD5UaGlzIHRlc3RzIHNjaGVkdWxpbmcgYSBzY3JvbGwgZXZlbnQg
b24gYW4gZWxlbWVudCB0aGVuIHJlbW92aW5nIHRoZSBlbGVtZW50Ljxicj5XZWJLaXQgc2hvdWxk
IG5vdCBjb2xsZWN0IGl0cyBKUyB3cmFwcGVycy48L3A+Cis8cHJlIGlkPSJyZXN1bHQiPjwvcHJl
PgorPGRpdiBjbGFzcz0iY29udGFpbmVyIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvZ2MuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVy
KSB7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5kdW1w
QXNUZXh0KCk7Cit9CisKK2NvbnN0IGxvZ3MgPSBbXTsKK2xldCBjdXJyZW50TnVtYmVyID0gMDsK
K2Z1bmN0aW9uIHNjaGVkdWxlU2Nyb2xsRXZlbnRzKGNvdW50KQoreworICAgIGxldCBjb250YWlu
ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29udGFpbmVyJyk7CisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzxwPmhlbGxvLCB3
b3JsZDxicj50aGlzIGlzIGEgdGVzdDwvcD4nOworICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hp
bGQoZGl2KTsKKyAgICAgICAgZGl2LmxpdmVOdW1iZXIgPSBjdXJyZW50TnVtYmVyOworICAgICAg
ICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgbG9nKTsKKyAgICAgICAgY3VycmVudE51
bWJlcisrOworICAgIH0KKworICAgIGZvciAoY29uc3QgZGl2IG9mIGNvbnRhaW5lci5jaGlsZHJl
bikKKyAgICAgICAgZGl2LnNjcm9sbFRvKDEwLCAxMCk7CisKKyAgICBjb250YWluZXIudGV4dENv
bnRlbnQgPSAnJzsKK30KKworZnVuY3Rpb24gbG9nKCkKK3sKKyAgICBsb2dzLnB1c2godGhpcy5s
aXZlTnVtYmVyKTsKK30KKworZnVuY3Rpb24gY2hlY2tMb2dzKCkKK3sKKyAgICBsZXQgZmFpbGVk
ID0gZmFsc2U7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2dzLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGlmIChsb2dzW2ldICE9IGkpIHsKKyAgICAgICAgICAgIHJlc3VsdC50ZXh0Q29udGVu
dCArPSBgRkFJTCBhdCAke2l9OiAke2xvZ3NbaV19XG5gOworICAgICAgICAgICAgZmFpbGVkID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWZhaWxlZCkKKyAgICAgICAgcmVzdWx0
LnRleHRDb250ZW50ID0gJ1BBU1MnOworfQorCitmb3IgKGxldCBpID0gMDsgaSA8IDU7ICsraSkg
eworICAgIHNjaGVkdWxlU2Nyb2xsRXZlbnRzKDIwKTsKKyAgICBnYygpOworfQorCityZXF1ZXN0
QW5pbWF0aW9uRnJhbWUoKCkgPT4geworICAgIGNoZWNrTG9ncygpOworICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9KTsKKworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="399343"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>