<?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>100162</bug_id>
          
          <creation_ts>2012-10-23 15:04:27 -0700</creation_ts>
          <short_desc>[WebKit2 API] Add properties to get textRects from a WKDOMRange or WKDOMNode</short_desc>
          <delta_ts>2012-10-25 14:28:59 -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>New Bugs</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="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>darin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>749035</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2012-10-23 15:04:27 -0700</bug_when>
    <thetext>[WebKit2 API] Add a method to get textRects from a WKDOMRange or WKDOMNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749047</commentid>
    <comment_count>1</comment_count>
      <attachid>170246</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2012-10-23 15:13:38 -0700</bug_when>
    <thetext>Created attachment 170246
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749083</commentid>
    <comment_count>2</comment_count>
      <attachid>170246</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-23 15:57:52 -0700</bug_when>
    <thetext>Comment on attachment 170246
Patch

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

&gt; Source/WebCore/dom/Range.cpp:1626
&gt; +void Range::textRectsAfterUpdatingLayout(Vector&lt;IntRect&gt;&amp; rects, bool useSelectionHeight, RangeInFixedPosition* inFixed) const
&gt; +{
&gt; +    ownerDocument()-&gt;updateLayoutIgnorePendingStylesheets();
&gt; +    textRects(rects, useSelectionHeight, inFixed);
&gt; +}

I would remove this and just call updateLayoutIgnorePendingStylesheets() where needed.

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKDOMRange.h:43
&gt; +- (NSArray *)textRects;

How about a property?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749127</commentid>
    <comment_count>3</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2012-10-23 16:44:57 -0700</bug_when>
    <thetext>Committed r132282: &lt;http://trac.webkit.org/changeset/132282&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749131</commentid>
    <comment_count>4</comment_count>
      <attachid>170246</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-23 16:51:11 -0700</bug_when>
    <thetext>Comment on attachment 170246
Patch

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

&gt;&gt; Source/WebCore/dom/Range.cpp:1626
&gt;&gt; +}
&gt; 
&gt; I would remove this and just call updateLayoutIgnorePendingStylesheets() where needed.

I don’t understand why Range has a member function, textRects, that requires updating layout. That seems like a design mistake. Functions that rely on layout should be in render objects, even if they do take a Range* as an argument. Generally speaking, DOM nodes should not have functions that answer questions about layout, unless they are needed because they are part of the public DOM API that can be called from JavaScript. And those that are part of the public DOM should contain the updateLayout function calls inside the member functions.

How did this design mistake get in? Who should I talk to, to help them understand this design principle? Maybe I should write a document explaining the concept?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749900</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2012-10-24 12:11:04 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 170246 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170246&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/dom/Range.cpp:1626
&gt; &gt;&gt; +}
&gt; &gt; 
&gt; &gt; I would remove this and just call updateLayoutIgnorePendingStylesheets() where needed.
&gt; 
&gt; I don’t understand why Range has a member function, textRects, that requires updating layout. That seems like a design mistake. Functions that rely on layout should be in render objects, even if they do take a Range* as an argument. Generally speaking, DOM nodes should not have functions that answer questions about layout, unless they are needed because they are part of the public DOM API that can be called from JavaScript. And those that are part of the public DOM should contain the updateLayout function calls inside the member functions.
&gt; 
&gt; How did this design mistake get in?

Trac tells me we started doing this in &lt;http://trac.webkit.org/changeset/21635&gt;, which fixed &lt;rdar://problem/5084400&gt; -[DOMRange lineBoxRects] returns an empty array when the DOM nodes have just been created.

&gt; Who should I talk to, to help them understand this design principle? Maybe I should write a document explaining the concept?

You should talk to me.

Generally speaking I understand the design principle you describe, but I also see why we need to update layout in this case. For other DOM API functions where we depend on updated layout, like getClientRects(), we encapsulate this call in a WebCore member function. This is what I initially did here, too, although there was some disagreement about the name I chose (Range::textRectsAfterUpdatingLayout()).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170246</attachid>
            <date>2012-10-23 15:13:38 -0700</date>
            <delta_ts>2012-10-23 16:51:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100162-20121023151215.patch</filename>
            <type>text/plain</type>
            <size>11656</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMTMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTNiOTI2NDkyYTcwNzQz
Y2EzNGVmMzAzMDY1ODZiZDU0NjNlNmI4OS4uMmRkZDYwNmM4MjE5MzRkNTI0MWUwMjU2YmI4ZDU3
NmY2MDkxYTk0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTEwLTIzICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViS2l0MiBBUEldIEFkZCBh
IG1ldGhvZCB0byBnZXQgdGV4dFJlY3RzIGZyb20gYSBXS0RPTVJhbmdlIG9yIFdLRE9NTm9kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwMTYyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3Jl
LmV4cC5pbjogRXhwb3NlZCBzeW1ib2xzIG5lZWRlZCBieSBXZWJLaXQyLgorICAgICAgICAqIGJp
bmRpbmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIHRleHRSZWN0c10pOiBNb3Zl
ZCB0aGUgbG9naWMgb2YgdGhpcyBtZXRob2QgaW50byBOb2RlOjp0ZXh0UmVjdHNBZnRlclVwZGF0
aW5nTGF5b3V0KCkuCisgICAgICAgICgtW0RPTVJhbmdlIHRleHRSZWN0c10pOiBNb3ZlZCB0aGUg
bG9naWMgb2YgdGhpcyBtZXRob2QgaW50byBSYW5nZTo6dGV4dFJlY3RzQWZ0ZXJVcGRhdGluZ0xh
eW91dCgpLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OnRleHRSZWN0c0FmdGVyVXBkYXRpbmdMYXlvdXQpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6Cisg
ICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0ZXh0UmVj
dHNBZnRlclVwZGF0aW5nTGF5b3V0KToKKyAgICAgICAgKiBkb20vUmFuZ2UuaDoKKwogMjAxMi0x
MC0yMiAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAgICAgICAgICdpbWFnZS9w
anBlZycgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW1hZ2UgYnkgV2ViIEluc3BlY3Rvci4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA2NzNlMjA4NWU0YzU0NjU0Yjg2ZGRhYmZlN2E5MjA2ZDJlZWNlN2NhLi4xM2Uw
OTk5NDU5ZjEzNGY3Y2ExNjI3ZmY5NzUwZGEzN2EyOWE0NmNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjAgQEAKKzIwMTItMTAtMjMgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisg
ICAgICAgIFtXZWJLaXQyIEFQSV0gQWRkIGEgbWV0aG9kIHRvIGdldCB0ZXh0UmVjdHMgZnJvbSBh
IFdLRE9NUmFuZ2Ugb3IgV0tET01Ob2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMDAxNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RP
TUludGVybmFscy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21h
Yy9XS0RPTUludGVybmFscy5tbToKKyAgICAgICAgKFdlYktpdDo6dG9OU0FycmF5KTogQWRkZWQg
YSBoZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhIFZlY3RvciBvZiBJbnRSZWN0cyB0byBhbiBO
U0FycmF5LgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RP
TU5vZGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tE
T01Ob2RlLm1tOgorICAgICAgICAoLVtXS0RPTU5vZGUgdGV4dFJlY3RzXSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbToKKyAgICAg
ICAgKC1bV0tET01SYW5nZSB0ZXh0UmVjdHNdKToKKwogMjAxMi0xMC0yMiAgU3VkYXJzYW5hIE5h
Z2luZW5pICA8c3VkYXJzYW5hLm5hZ2luZW5pQGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXVtX
SzJdIGV3a192aWV3X2NvbG9yX3BpY2tlcl9jb2xvcl9zZXQoKSBpcyBsZWFraW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCmluZGV4IDI3OGQyMjRjOWQ2OTJjMmFjMjUwOGZjMzgwMzJhMTE1MmRhNmU3YzQu
LjZlNTI5YWY2NGMzZmU2YzZmZWM3MWU2ODY0NjgxZTRlNDZhZGYwNGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCkBAIC0xMzMwLDYgKzEzMzAsNyBAQCBfX1pOSzdXZWJDb3JlNE5vZGUxNGlzRGVzY2Vu
ZGFudE9mRVBLUzBfCiBfX1pOSzdXZWJDb3JlNE5vZGUxOGdldFN1YnJlc291cmNlVVJMc0VSTjNX
VEYxMUxpc3RIYXNoU2V0SU5TXzRLVVJMRUxtMjU2RU5TXzhLVVJMSGFzaEVFRQogX19aTks3V2Vi
Q29yZTROb2RlMjB0cmF2ZXJzZVByZXZpb3VzTm9kZUVQS1MwXwogX19aTks3V2ViQ29yZTROb2Rl
Mjd0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmdFdgorX19aTks3V2ViQ29yZTROb2RlMjh0ZXh0
UmVjdHNBZnRlclVwZGF0aW5nTGF5b3V0RVJOM1dURjZWZWN0b3JJTlNfN0ludFJlY3RFTG0wRUVF
CiBfX1pOSzdXZWJDb3JlNE5vZGUzMW51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW5Fdgog
X19aTks3V2ViQ29yZTROb2RlOW5vZGVJbmRleEV2CiBfX1pOSzdXZWJDb3JlNE5vZGU5dHJlZVNj
b3BlRXYKQEAgLTEzNTUsNiArMTM1Niw3IEBAIF9fWk5LN1dlYkNvcmU1UmFuZ2UxMnBhc3RMYXN0
Tm9kZUV2CiBfX1pOSzdXZWJDb3JlNVJhbmdlMTRzdGFydENvbnRhaW5lckVSaQogX19aTks3V2Vi
Q29yZTVSYW5nZTE5Ym91bmRhcnlQb2ludHNWYWxpZEV2CiBfX1pOSzdXZWJDb3JlNVJhbmdlMjFj
b21wYXJlQm91bmRhcnlQb2ludHNFTlMwXzEwQ29tcGFyZUhvd0VQS1MwX1JpCitfX1pOSzdXZWJD
b3JlNVJhbmdlMjh0ZXh0UmVjdHNBZnRlclVwZGF0aW5nTGF5b3V0RVJOM1dURjZWZWN0b3JJTlNf
N0ludFJlY3RFTG0wRUVFYlBOUzBfMjBSYW5nZUluRml4ZWRQb3NpdGlvbkUKIF9fWk5LN1dlYkNv
cmU1UmFuZ2U0dGV4dEV2CiBfX1pOSzdXZWJDb3JlNVJhbmdlOWNvbGxhcHNlZEVSaQogX19aTks3
V2ViQ29yZTVSYW5nZTllbmRPZmZzZXRFUmkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0K
aW5kZXggNWM3N2RhNWMyZTU1OGZiZWM3YzZhY2Y3NmU4MDJmODU1MmVmMjNhZC4uZDczZTU4OTBk
YTgxZWYyYjk0NmJkOTU0NGEwMjAxYjliMDJmODEwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET00ubW0KQEAgLTM3OSwxNSArMzc5LDggQEAgaWQgPERPTUV2ZW50VGFyZ2V0PiBraXQoV2Vi
Q29yZTo6RXZlbnRUYXJnZXQqIGV2ZW50VGFyZ2V0KQogCiAtIChOU0FycmF5ICopdGV4dFJlY3Rz
CiB7Ci0gICAgLy8gRklYTUU6IENvdWxkIHdlIG1vdmUgdGhpcyBmdW5jdGlvbiB0byBXZWJDb3Jl
OjpOb2RlIGFuZCBhdXRvZ2VuZXJhdGU/Ci0gICAgY29yZShzZWxmKS0+ZG9jdW1lbnQoKS0+dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgaWYgKCFjb3JlKHNlbGYp
LT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKGNvcmUoc2VsZiktPmRvY3VtZW50KCkpOwotICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoY29y
ZShzZWxmKSwgZWMpOwogICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiByZWN0czsKLSAgICBy
YW5nZS0+dGV4dFJlY3RzKHJlY3RzKTsKKyAgICBjb3JlKHNlbGYpLT50ZXh0UmVjdHNBZnRlclVw
ZGF0aW5nTGF5b3V0KHJlY3RzKTsKICAgICByZXR1cm4ga2l0KHJlY3RzKTsKIH0KIApAQCAtNDE0
LDEwICs0MDcsOCBAQCBpZCA8RE9NRXZlbnRUYXJnZXQ+IGtpdChXZWJDb3JlOjpFdmVudFRhcmdl
dCogZXZlbnRUYXJnZXQpCiAKIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKIHsKLSAgICAvLyBGSVhN
RTogVGhlIGNhbGwgdG8gdXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzIHNob3Vs
ZCBiZSBtb3ZlZCBpbnRvIFdlYkNvcmU6OlJhbmdlLgogICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRS
ZWN0PiByZWN0czsKLSAgICBjb3JlKHNlbGYpLT5vd25lckRvY3VtZW50KCktPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGNvcmUoc2VsZiktPnRleHRSZWN0cyhy
ZWN0cyk7CisgICAgY29yZShzZWxmKS0+dGV4dFJlY3RzQWZ0ZXJVcGRhdGluZ0xheW91dChyZWN0
cyk7CiAgICAgcmV0dXJuIGtpdChyZWN0cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA4ZDk5
MWExMzA1ZTgzZGRmYjEzMmVlYWNjZTc4OWExMWNjNGY4ZjE3Li41YWVhMzI4N2QxMzliNDE3NWQ1
MTM4Yzg1NzA2MTM0YzEyNzk0MTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yODQxLDYgKzI4NDEs
MTggQEAgdm9pZCBOb2RlOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1v
cnlPYmplY3RJbmZvKSBjb25zdAogICAgICAgICBpbmZvLmFkZE1lbWJlcihtX3JlbmRlcmVyLT5z
dHlsZSgpKTsKIH0KIAordm9pZCBOb2RlOjp0ZXh0UmVjdHNBZnRlclVwZGF0aW5nTGF5b3V0KFZl
Y3RvcjxJbnRSZWN0PiYgcmVjdHMpIGNvbnN0Cit7CisgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShk
b2N1bWVudCgpKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICByYW5n
ZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGNvbnN0X2Nhc3Q8Tm9kZSo+KHRoaXMpLCBlYyk7CisgICAg
cmFuZ2UtPnRleHRSZWN0cyhyZWN0cyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDVkODY0MGNiZTU3NTY3YmNhYjY1MzA2OTZi
MWU2ZWYzNGQwYWYyNDkuLjk2ZWI5OTQyNmU2NDdkNTc4OGIwYmM2MzUzODBhYWU5MzFhZWMxY2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaApAQCAtNjY5LDYgKzY2OSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKKyAgICB2
b2lkIHRleHRSZWN0c0FmdGVyVXBkYXRpbmdMYXlvdXQoVmVjdG9yPEludFJlY3Q+JikgY29uc3Q7
CisKIHByaXZhdGU6CiAgICAgZW51bSBOb2RlRmxhZ3MgewogICAgICAgICBJc1RleHRGbGFnID0g
MSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IGM3MWZhMWNkOTVlY2FjYTNkMmNhMTBmMDM1NzE3MDFh
YzM0NmYwYTYuLjI2NDVkMjBjM2Y1ZmJlMGE0ZjUyYjE3MTc2MDA5YmM1MzAxOTcyMTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmNwcApAQCAtMTYxOCw2ICsxNjE4LDEyIEBAIHZvaWQgUmFuZ2U6OnRleHRSZWN0
cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgUmFuZ2VJ
bkZpCiAgICAgaWYgKGluRml4ZWQpCiAgICAgICAgICppbkZpeGVkID0gYWxsRml4ZWQgPyBFbnRp
cmVseUZpeGVkUG9zaXRpb24gOiAoc29tZUZpeGVkID8gUGFydGlhbGx5Rml4ZWRQb3NpdGlvbiA6
IE5vdEZpeGVkUG9zaXRpb24pOwogfQorICAgIAordm9pZCBSYW5nZTo6dGV4dFJlY3RzQWZ0ZXJV
cGRhdGluZ0xheW91dChWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBib29sIHVzZVNlbGVjdGlvbkhl
aWdodCwgUmFuZ2VJbkZpeGVkUG9zaXRpb24qIGluRml4ZWQpIGNvbnN0Cit7CisgICAgb3duZXJE
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICB0
ZXh0UmVjdHMocmVjdHMsIHVzZVNlbGVjdGlvbkhlaWdodCwgaW5GaXhlZCk7Cit9CiAKIHZvaWQg
UmFuZ2U6OnRleHRRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wgdXNlU2VsZWN0
aW9uSGVpZ2h0LCBSYW5nZUluRml4ZWRQb3NpdGlvbiogaW5GaXhlZCkgY29uc3QKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlLmgKaW5kZXggYjZiZjc3MTFkNTE4ZDllODk1NzgyN2E5YTA3MGU2NjIyNjU2NTc0Yy4uMDhj
YjQyYWRjNjFhM2JjODBhOTgwZGFjZDZiZDE0MWFmYmU2YzBiOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKQEAg
LTEyMCw2ICsxMjAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBOb3QgdHJhbnNmb3JtLWZyaWVuZGx5
CiAgICAgdm9pZCB0ZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgYm9vbCB1c2VTZWxlY3Rpb25I
ZWlnaHQgPSBmYWxzZSwgUmFuZ2VJbkZpeGVkUG9zaXRpb24qID0gMCkgY29uc3Q7CisgICAgdm9p
ZCB0ZXh0UmVjdHNBZnRlclVwZGF0aW5nTGF5b3V0KFZlY3RvcjxJbnRSZWN0PiYsIGJvb2wgdXNl
U2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UsIFJhbmdlSW5GaXhlZFBvc2l0aW9uKiA9IDApIGNvbnN0
OwogICAgIEludFJlY3QgYm91bmRpbmdCb3goKSBjb25zdDsKIAogICAgIC8vIFRyYW5zZm9ybS1m
cmllbmRseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvbWFjL1dLRE9NSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01JbnRlcm5hbHMuaAppbmRleCBmMzNlNDU0Y2Q1
YThmZmUwYzQ1ODBiODRkMDRiMWEwOTMwYWYyNTkwLi43NDA3YTkxMzdmZWFiOGVjMzUxODcxN2Qy
NzIwMWMxNjUzNmQ5ZWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01JbnRlcm5hbHMuaApAQCAt
MTExLDYgKzExMSwxMCBAQCBXS0RPTVRleHQgKnRvV0tET01UZXh0KFdlYkNvcmU6OlRleHQqKTsK
IFdlYkNvcmU6OlJhbmdlKiB0b1dlYkNvcmVSYW5nZShXS0RPTVJhbmdlICopOwogV0tET01SYW5n
ZSAqdG9XS0RPTVJhbmdlKFdlYkNvcmU6OlJhbmdlKik7CiAKKy8vIC0tIEhlbHBlcnMgLS0KKwor
TlNBcnJheSAqdG9OU0FycmF5KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIGRlZmluZWQoX19MUDY0X18pICYmIGRl
ZmluZWQoX19jbGFuZ19fKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NSW50ZXJuYWxzLm1tIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NSW50ZXJuYWxzLm1tCmluZGV4
IGFiOTA0NjYxM2YyM2E3ZjEzOTE0ZDVlZmY5ZTY0ZGI2ZTI0N2M0MTkuLjcwMzY5YWZiNjVkODMy
OTdmOTM2NWVjMjkwMGJmODc5YjAyOGY1YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTUludGVybmFscy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01JbnRl
cm5hbHMubW0KQEAgLTE2NSw2ICsxNjUsMTUgQEAgc3RhdGljIFdLRE9NVHlwZSB0b1dLRE9NVHlw
ZShXZWJDb3JlVHlwZSBpbXBsLCBET01DYWNoZTxXZWJDb3JlVHlwZSwgV0tET01UeXBlPiYKICAg
ICByZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2VdOwogfQogCitOU0FycmF5ICp0b05TQXJyYXko
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiByZWN0cykKK3sKKyAgICBzaXplX3Qgc2l6
ZSA9IHJlY3RzLnNpemUoKTsKKyAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbTlNNdXRhYmxl
QXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2l6ZV07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpCisgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRo
UmVjdDpyZWN0c1tpXV1dOworICAgIHJldHVybiBhcnJheTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKICNlbmRpZiAvLyBkZWZpbmVkKF9fTFA2NF9fKSAmJiBkZWZpbmVkKF9fY2xhbmdf
XykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL21hYy9XS0RPTU5vZGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL21hYy9XS0RPTU5vZGUuaAppbmRleCA0MGE4ZjljOTA1OTc3OWM2OTZlNmZmMjA2
NTRhNDc2NGRlMmJkYzdmLi42NGQwNDlhZjBhNTMzOGRhNmY5OTUwN2VjOGMyODFmNzhlNjQ4NWMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9tYWMvV0tET01Ob2RlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvbWFjL1dLRE9NTm9kZS5oCkBAIC0zNiw2ICszNiw3IEBAIFdLX0VYUE9SVAog
LSAodm9pZClpbnNlcnROb2RlOihXS0RPTU5vZGUgKilub2RlIGJlZm9yZTooV0tET01Ob2RlICop
cmVmTm9kZTsKIC0gKHZvaWQpYXBwZW5kQ2hpbGQ6KFdLRE9NTm9kZSAqKW5vZGU7CiAtICh2b2lk
KXJlbW92ZUNoaWxkOihXS0RPTU5vZGUgKilub2RlOworLSAoTlNBcnJheSAqKXRleHRSZWN0czsK
IAogQHByb3BlcnR5KHJlYWRvbmx5KSBXS0RPTURvY3VtZW50ICpkb2N1bWVudDsKIEBwcm9wZXJ0
eShyZWFkb25seSkgV0tET01Ob2RlICpwYXJlbnROb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NTm9kZS5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTU5vZGUu
bW0KaW5kZXggYTMyOTZiZmMwY2QzYWYwYjcxMTdmYTU2MWQ4ZWQzMjk3MTRjYWY3Zi4uOGY3Njhl
ZGM4MGI4Mjc0ZjE4NmQ2MmJhODI3YzBlYWUxYWFkNDViMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NTm9kZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01O
b2RlLm1tCkBAIC03Miw2ICs3MiwxMyBAQAogICAgIF9pbXBsLT5yZW1vdmVDaGlsZChXZWJLaXQ6
OnRvV2ViQ29yZU5vZGUobm9kZSksIGVjKTsKIH0KIAorLSAoTlNBcnJheSAqKXRleHRSZWN0cwor
eworICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiByZWN0czsKKyAgICBfaW1wbC0+dGV4dFJl
Y3RzQWZ0ZXJVcGRhdGluZ0xheW91dChyZWN0cyk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9OU0Fy
cmF5KHJlY3RzKTsKK30KKwogLSAoV0tET01Eb2N1bWVudCAqKWRvY3VtZW50CiB7CiAgICAgcmV0
dXJuIFdlYktpdDo6dG9XS0RPTURvY3VtZW50KF9pbXBsLT5kb2N1bWVudCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RP
TVJhbmdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9t
YWMvV0tET01SYW5nZS5oCmluZGV4IDY0ZWQwMGNlMjNhOWM3OTJkODNmMjY0NjQxMzAzOTg4YTIw
NTI3MTMuLjdiZmM5NDQyZTFhZGU2OThmZGJkYzgwZDA4ZTMzODY2ZmQyYjllNmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RP
TVJhbmdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvbWFjL1dLRE9NUmFuZ2UuaApAQCAtNDAsNiArNDAsNyBAQCBXS19FWFBPUlQKIC0gKHZvaWQp
Y29sbGFwc2U6KEJPT0wpdG9TdGFydDsKIC0gKHZvaWQpc2VsZWN0Tm9kZTooV0tET01Ob2RlICop
bm9kZTsKIC0gKHZvaWQpc2VsZWN0Tm9kZUNvbnRlbnRzOihXS0RPTU5vZGUgKilub2RlOworLSAo
TlNBcnJheSAqKXRleHRSZWN0czsKIAogQHByb3BlcnR5KHJlYWRvbmx5LCByZXRhaW4pIFdLRE9N
Tm9kZSAqc3RhcnRDb250YWluZXI7CiBAcHJvcGVydHkocmVhZG9ubHkpIE5TSW50ZWdlciBzdGFy
dE9mZnNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KaW5kZXggMWNjNDA4NDA4MDFmNjk2
NDFlMDY3NjhhOGM2M2RmNjY0YzZlNzNkNy4uY2Q2YjYxOGEwZjMxZjMyZTk2ZjdiZDdlNzAzNTJl
ZjI0M2M5YmQxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KQEAgLTk3LDYgKzk3LDEz
IEBACiAgICAgX2ltcGwtPnNlbGVjdE5vZGVDb250ZW50cyhXZWJLaXQ6OnRvV2ViQ29yZU5vZGUo
bm9kZSksIGVjKTsKIH0KIAorLSAoTlNBcnJheSAqKXRleHRSZWN0cworeworICAgIFZlY3RvcjxX
ZWJDb3JlOjpJbnRSZWN0PiByZWN0czsKKyAgICBfaW1wbC0+dGV4dFJlY3RzQWZ0ZXJVcGRhdGlu
Z0xheW91dChyZWN0cyk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9OU0FycmF5KHJlY3RzKTsKK30K
KwogLSAoV0tET01Ob2RlICopc3RhcnRDb250YWluZXIKIHsKICAgICAvLyBGSVhNRTogRG8gc29t
ZXRoaW5nIGFib3V0IHRoZSBleGNlcHRpb24uCg==
</data>
<flag name="review"
          id="183790"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>