<?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>54937</bug_id>
          
          <creation_ts>2011-02-21 22:28:25 -0800</creation_ts>
          <short_desc>Remove calls to deprecatedEditingOffset in SelectionController and VisibleSelection</short_desc>
          <delta_ts>2011-03-08 16:51:17 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52099</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>ojan</cc>
    
    <cc>rolandsteiner</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>355060</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-21 22:28:25 -0800</bug_when>
    <thetext>This is a cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355068</commentid>
    <comment_count>1</comment_count>
      <attachid>83273</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-21 22:37:50 -0800</bug_when>
    <thetext>Created attachment 83273
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355424</commentid>
    <comment_count>2</comment_count>
      <attachid>83273</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-22 11:18:13 -0800</bug_when>
    <thetext>Comment on attachment 83273
cleanup

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

Looks good to me besides the nit.

&gt; Source/WebCore/editing/SelectionController.cpp:1442
&gt; +    Node* startNode = start().containerNode();

containerNode can be null here when there&apos;s still a valid anchorNode and shadow ancestor. I don&apos;t think this will ever be a problem for input tags, but this smacks of an assumption that could change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355706</commentid>
    <comment_count>3</comment_count>
      <attachid>83273</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-22 16:58:15 -0800</bug_when>
    <thetext>Comment on attachment 83273
cleanup

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

&gt;&gt; Source/WebCore/editing/SelectionController.cpp:1442
&gt;&gt; +    Node* startNode = start().containerNode();
&gt; 
&gt; containerNode can be null here when there&apos;s still a valid anchorNode and shadow ancestor. I don&apos;t think this will ever be a problem for input tags, but this smacks of an assumption that could change.

That should be fine because we&apos;re only trying to figure out whether we&apos;re inside a input[type=password] or not.  If we ever had a position like before/after the shadow DOM&apos;s root element, we&apos;ll be in a trouble anyways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355708</commentid>
    <comment_count>4</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-22 17:00:43 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 83273 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83273&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/editing/SelectionController.cpp:1442
&gt; &gt;&gt; +    Node* startNode = start().containerNode();
&gt; &gt; 
&gt; &gt; containerNode can be null here when there&apos;s still a valid anchorNode and shadow ancestor. I don&apos;t think this will ever be a problem for input tags, but this smacks of an assumption that could change.
&gt; 
&gt; That should be fine because we&apos;re only trying to figure out whether we&apos;re inside a input[type=password] or not.  If we ever had a position like before/after the shadow DOM&apos;s root element, we&apos;ll be in a trouble anyways.

Sounds like good rationale for an assert then :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355710</commentid>
    <comment_count>5</comment_count>
      <attachid>83273</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-22 17:03:27 -0800</bug_when>
    <thetext>Comment on attachment 83273
cleanup

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

&gt;&gt;&gt;&gt; Source/WebCore/editing/SelectionController.cpp:1442
&gt;&gt;&gt;&gt; +    Node* startNode = start().containerNode();
&gt;&gt;&gt; 
&gt;&gt;&gt; containerNode can be null here when there&apos;s still a valid anchorNode and shadow ancestor. I don&apos;t think this will ever be a problem for input tags, but this smacks of an assumption that could change.
&gt;&gt; 
&gt;&gt; That should be fine because we&apos;re only trying to figure out whether we&apos;re inside a input[type=password] or not.  If we ever had a position like before/after the shadow DOM&apos;s root element, we&apos;ll be in a trouble anyways.
&gt; 
&gt; Sounds like good rationale for an assert then :)

What kind of assertion are you talking about?  I can&apos;t do ASSERT(startNode) here because start() could be null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355720</commentid>
    <comment_count>6</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-22 17:15:41 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 83273 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83273&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/editing/SelectionController.cpp:1442
&gt; &gt;&gt;&gt;&gt; +    Node* startNode = start().containerNode();
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; containerNode can be null here when there&apos;s still a valid anchorNode and shadow ancestor. I don&apos;t think this will ever be a problem for input tags, but this smacks of an assumption that could change.
&gt; &gt;&gt; 
&gt; &gt;&gt; That should be fine because we&apos;re only trying to figure out whether we&apos;re inside a input[type=password] or not.  If we ever had a position like before/after the shadow DOM&apos;s root element, we&apos;ll be in a trouble anyways.
&gt; &gt; 
&gt; &gt; Sounds like good rationale for an assert then :)
&gt; 
&gt; What kind of assertion are you talking about?  I can&apos;t do ASSERT(startNode) here because start() could be null.

Something like this perhaps?
ASSERT(start().isNull() || start().anchorType() == Position::PositionIsOffsetInAnchor);

Using containerNode to get something like shadow ancestor or document can be error prone since not all valid positions have a containerNode, i.e. before/after positions anchored to a shadow DOM&apos;s root element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355749</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-22 18:31:28 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Something like this perhaps?
&gt; ASSERT(start().isNull() || start().anchorType() == Position::PositionIsOffsetInAnchor);

No this wouldn&apos;t work.  Because start() could be before/after a node.  The whole point of this function is to figure out whether or not we&apos;re inside an input[type=password].  Position could be anywhere.

&gt; Using containerNode to get something like shadow ancestor or document can be error prone since not all valid positions have a containerNode, i.e. before/after positions anchored to a shadow DOM&apos;s root element.

But this can&apos;t happen inside an input element because we always have div, and we should never have a position before/after this div as that would break all sorts of assumptions in other parts of the editing code.  In my opinion, we should refactor shadow DOM code so that we always have a document-like ShadowRootElement.  Roland would know where we are now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355844</commentid>
    <comment_count>8</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-02-22 21:43:27 -0800</bug_when>
    <thetext>I intend to add a ShadowRoot object as Ryosuke described after we&apos;re finished with the transition from render-object based shadow DOM for all elements (until then it&apos;s too much of a life-time headache and might cause performance regressions).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356266</commentid>
    <comment_count>9</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-02-23 11:47:50 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; But this can&apos;t happen inside an input element because we always have div, and we should never have a position before/after this div...

This is the case I&apos;m proposing we should assert, but if you&apos;re comfortable just saying it&apos;ll never happen you can go that route.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356631</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-23 19:30:34 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; But this can&apos;t happen inside an input element because we always have div, and we should never have a position before/after this div...
&gt; 
&gt; This is the case I&apos;m proposing we should assert, but if you&apos;re comfortable just saying it&apos;ll never happen you can go that route.

Maybe something like this?
ASSERT(start().isNull() || start().anchorType() == PositionIsInAnchorNode || start().containerNode() || !start().anchorNode()-&gt;shadowAncestorNode());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363419</commentid>
    <comment_count>11</comment_count>
      <attachid>84959</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-07 11:10:34 -0800</bug_when>
    <thetext>Created attachment 84959
Fixed per Levi&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363424</commentid>
    <comment_count>12</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-03-07 11:11:47 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=84959) [details]
&gt; Fixed per Levi&apos;s comment

Thanks, looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364188</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-08 15:25:31 -0800</bug_when>
    <thetext>Can someone review my patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364199</commentid>
    <comment_count>14</comment_count>
      <attachid>84959</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-03-08 15:43:03 -0800</bug_when>
    <thetext>Comment on attachment 84959
Fixed per Levi&apos;s comment

Looks ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364231</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-08 16:50:13 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 84959 [details])
&gt; Looks ok.

Thanks for the review!  Landing it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364232</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-08 16:51:17 -0800</bug_when>
    <thetext>Committed r80604: &lt;http://trac.webkit.org/changeset/80604&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83273</attachid>
            <date>2011-02-21 22:37:50 -0800</date>
            <delta_ts>2011-03-07 11:10:31 -0800</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-54937-20110222153748.patch</filename>
            <type>text/plain</type>
            <size>6972</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5MjkwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMDItMjEgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGNhbGxzIHRvIGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
IGluIFNlbGVjdGlvbkNvbnRyb2xsZXIgYW5kIFZpc2libGVTZWxlY3Rpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTM3CisKKyAgICAgICAgUmVt
b3ZlZCBjYWxscyB0byBkZXByZWNhdGVkRWRpdGluZ09mZnNldCBpbiBTZWxlY3Rpb25Db250cm9s
bGVyLmNwcCBhbmQgVmlzaWJsZVNlbGVjdGlvbi5jcHAuCisgICAgICAgIEFsc28gcmVtb3ZlZCBz
b21lIGNhbGxzIHRvIGRlcHJlY2F0ZWROb2RlLiBTZWUgcGVyLWZ1bmN0aW9uIGNvbW1lbnRzIGJl
bG93IGZvciB0aGUgZGV0YWlsLgorCisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVj
dGlvbik6IENhbGxzIGFuY2hvck5vZGUoKSBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWROb2RlKCkKKyAg
ICAgICAgdG8gb2J0YWluIHRoZSBkb2N1bWVudC4gUmVtb3ZlZCB0aGUgdGVtcG9yYXJ5IHZhcmlh
YmxlIHVzZWQgdG8gc3RvcmUgdGhlIHNlbGVjdGlvbiBiYXNlJ3MgYW5jaG9yIG5vZGUKKyAgICAg
ICAgc2luY2UgYmFzZSgpIGFuZCBhbmNob3JOb2RlKCkgYXJlIGJvdGggaW5saW5lLgorICAgICAg
ICAoV2ViQ29yZTo6cmVtb3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2spOiBDYWxs
IGFuY2hvck5vZGUoKSBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWROb2RlKCkuCisgICAgICAgIFRoaXMg
ZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgb3Igbm90IGEgZ2l2ZW4gcG9zaXRpb24gYmVjb21lcyBu
dWxsIGlmIHRoZSBub2RlIGlzIHJlbW92ZWQgc28gYW5jaG9yTm9kZSgpCisgICAgICAgIGlzIHRo
ZSBtb3N0IGFwcHJvcHJpYXRlIGFsdGVybmF0aXZlLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uQ29udHJvbGxlcjo6ZGVidWdSZW5kZXJlcik6IENhbGwgY29udGFpbmVyTm9kZSgpIGFuZCBj
b21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkKKyAgICAgICAgaW5zdGVhZCBvZiBkZXByZWNh
dGVkTm9kZSgpIGFuZCBkZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIHJlc3BlY3RpdmVseS4KKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmlzSW5QYXNzd29yZEZpZWxkKTog
Q2FsbCBjb250YWluZXJOb2RlKCkgaW5zdGVhZCBvZiBkZXByZWNhdGVkTm9kZSgpIHNpbmNlCisg
ICAgICAgIHRoZSByZXR1cm5lZCBub2RlIGlzIHVzZWQgdG8gb2J0YWluIHRoZSBzaGFkb3cgaG9z
dC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFwcGVhcmFu
Y2UpOiBVc2UgdGhlIHBhcmVudCBhbmNob3JlZCBlcXVpdmFsZW50cyB0byBvYnRhaW4gcmVuZGVy
ZXJzCisgICAgICAgIGFuZCBvZmZzZXRzIHRvIGNhbGwgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9u
LgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjptYWtlU2VhcmNoUmFuZ2UpOiBDYWxsIGNvbnRhaW5lck5vZGUoKSBhbmQgb2Zmc2V0SW5D
b250YWluZXJOb2RlKCkgaW5zdGVhZCBvZiBkZXByZWNhdGVkTm9kZSgpCisgICAgICAgIGFuZCBv
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSByZXNwZWN0aXZlbHkgc2luY2UgdGhlIHBvc2l0aW9uIGlz
IGFsd2F5cyBwYXJlbnQgYW5jaG9yZWQgaGVyZS4KKwogMjAxMS0wMi0yMSAgQmVuamFtaW4gS2Fs
bWFuICA8a2FsbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtl
IE5pd2EuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDc5Mjc4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxl
Y3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDEwICsxNTAsOSBAQCB2
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbihjCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBOb2RlKiBiYXNlTm9kZSA9IHMuYmFzZSgpLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gMDsKLSAgICBpZiAoYmFzZU5vZGUpCi0gICAgICAg
IGRvY3VtZW50ID0gYmFzZU5vZGUtPmRvY3VtZW50KCk7CisgICAgaWYgKHMuYmFzZSgpLmFuY2hv
ck5vZGUoKSkKKyAgICAgICAgZG9jdW1lbnQgPSBzLmJhc2UoKS5hbmNob3JOb2RlKCktPmRvY3Vt
ZW50KCk7CiAgICAgCiAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNDY0PjogSW5maW5pdGUgcmVjdXJzaW9uIGF0IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNl
dFNlbGVjdGlvbgogICAgIC8vIGlmIGRvY3VtZW50LT5mcmFtZSgpID09IG1fZnJhbWUgd2UgY2Fu
IGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3AKQEAgLTIwNSwxNyArMjA0LDE3IEBAIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKGMKIAogc3RhdGljIGJvb2wgcmVtb3ZpbmdO
b2RlUmVtb3Zlc1Bvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikK
IHsKLSAgICBpZiAoIXBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpCisgICAgaWYgKCFwb3NpdGlv
bi5hbmNob3JOb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChwb3NpdGlv
bi5kZXByZWNhdGVkTm9kZSgpID09IG5vZGUpCisgICAgaWYgKHBvc2l0aW9uLmFuY2hvck5vZGUo
KSA9PSBub2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICghbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIHJldHVybiBlbGVtZW50LT5jb250
YWlucyhwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSB8fCBlbGVtZW50LT5jb250YWlucyhwb3Np
dGlvbi5kZXByZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSk7CisgICAgcmV0dXJu
IGVsZW1lbnQtPmNvbnRhaW5zKHBvc2l0aW9uLmFuY2hvck5vZGUoKSkgfHwgZWxlbWVudC0+Y29u
dGFpbnMocG9zaXRpb24uYW5jaG9yTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSk7CiB9CiAK
IHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSAqbm9kZSkK
QEAgLTM3Niw3ICszNzUsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OndpbGxCZU1vZGlm
aWVkCiAKIFRleHREaXJlY3Rpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6ZGlyZWN0aW9uT2ZFbmNs
b3NpbmdCbG9jaygpCiB7Ci0gICAgTm9kZSogZW5jbG9zaW5nQmxvY2tOb2RlID0gZW5jbG9zaW5n
QmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgTm9kZSog
ZW5jbG9zaW5nQmxvY2tOb2RlID0gZW5jbG9zaW5nQmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50KCku
Y29udGFpbmVyTm9kZSgpKTsKICAgICBpZiAoIWVuY2xvc2luZ0Jsb2NrTm9kZSkKICAgICAgICAg
cmV0dXJuIExUUjsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZW5jbG9zaW5nQmxvY2tO
b2RlLT5yZW5kZXJlcigpOwpAQCAtMTI0MCwxMCArMTIzOSwxMCBAQCB2b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OmRlYnVnUmVuZGVyZXIoCiAgICAgICAgIGludCB0ZXh0TGVuZ3RoID0gdGV4dC5s
ZW5ndGgoKTsKICAgICAgICAgaWYgKHNlbGVjdGVkKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0
ID0gMDsKLSAgICAgICAgICAgIGlmIChyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uc3RhcnQoKS5k
ZXByZWNhdGVkTm9kZSgpKQotICAgICAgICAgICAgICAgIG9mZnNldCA9IG1fc2VsZWN0aW9uLnN0
YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHIt
Pm5vZGUoKSA9PSBtX3NlbGVjdGlvbi5lbmQoKS5kZXByZWNhdGVkTm9kZSgpKQotICAgICAgICAg
ICAgICAgIG9mZnNldCA9IG1fc2VsZWN0aW9uLmVuZCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCk7CisgICAgICAgICAgICBpZiAoci0+bm9kZSgpID09IG1fc2VsZWN0aW9uLnN0YXJ0KCkuY29u
dGFpbmVyTm9kZSgpKQorICAgICAgICAgICAgICAgIG9mZnNldCA9IG1fc2VsZWN0aW9uLnN0YXJ0
KCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOworICAgICAgICAgICAgZWxzZSBpZiAo
ci0+bm9kZSgpID09IG1fc2VsZWN0aW9uLmVuZCgpLmNvbnRhaW5lck5vZGUoKSkKKyAgICAgICAg
ICAgICAgICBvZmZzZXQgPSBtX3NlbGVjdGlvbi5lbmQoKS5jb21wdXRlT2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpbnQgcG9zOwogICAgICAg
ICAgICAgSW5saW5lVGV4dEJveCogYm94ID0gdGV4dFJlbmRlcmVyLT5maW5kTmV4dElubGluZVRl
eHRCb3gob2Zmc2V0LCBwb3MpOwpAQCAtMTQ0MCw3ICsxNDM5LDcgQEAgYm9vbCBTZWxlY3Rpb25D
b250cm9sbGVyOjpzZXRTZWxlY3RlZFJhbgogCiBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6Omlz
SW5QYXNzd29yZEZpZWxkKCkgY29uc3QKIHsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydCgp
LmRlcHJlY2F0ZWROb2RlKCk7CisgICAgTm9kZSogc3RhcnROb2RlID0gc3RhcnQoKS5jb250YWlu
ZXJOb2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtMTU4Niw5ICsxNTg1LDExIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6dXBkYXRlQXBw
ZWFyYW4KICAgICAvLyBXZSBjYW4gZ2V0IGludG8gYSBzdGF0ZSB3aGVyZSB0aGUgc2VsZWN0aW9u
IGVuZHBvaW50cyBtYXAgdG8gdGhlIHNhbWUgVmlzaWJsZVBvc2l0aW9uIHdoZW4gYSBzZWxlY3Rp
b24gaXMgZGVsZXRlZAogICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgeWV0IG5vdGlmeSB0aGUgU2Vs
ZWN0aW9uQ29udHJvbGxlciBvZiB0ZXh0IHJlbW92YWwuCiAgICAgaWYgKHN0YXJ0UG9zLmlzTm90
TnVsbCgpICYmIGVuZFBvcy5pc05vdE51bGwoKSAmJiBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkg
IT0gc2VsZWN0aW9uLnZpc2libGVFbmQoKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0
UmVuZGVyZXIgPSBzdGFydFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwotICAgICAg
ICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gZW5kUG9zLmRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCk7Ci0gICAgICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFy
dFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmRSZW5kZXJlciwgZW5kUG9zLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgICAgICBQb3NpdGlvbiBzdGFydEVxdWl2YWxlbnQg
PSBzdGFydFBvcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKKyAgICAgICAgUG9zaXRpb24g
ZW5kRXF1aXZhbGVudCA9IGVuZFBvcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKKyAgICAg
ICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0gc3RhcnRFcXVpdmFsZW50LmNvbnRhaW5l
ck5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9
IGVuZEVxdWl2YWxlbnQuY29udGFpbmVyTm9kZSgpLT5yZW5kZXJlcigpOworICAgICAgICB2aWV3
LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnRFcXVpdmFsZW50Lm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBlbmRSZW5kZXJlciwgZW5kRXF1aXZhbGVudC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDc5Mjc4KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw3
IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBtYWtlU2VhcmNoUmFuZ2UKIAogICAgIFBvc2l0
aW9uIHN0YXJ0KHBvcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAgICAgc2VhcmNoUmFu
Z2UtPnNlbGVjdE5vZGVDb250ZW50cyhib3VuZGFyeSwgZWMpOwotICAgIHNlYXJjaFJhbmdlLT5z
ZXRTdGFydChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpLCBlYyk7CisgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LmNvbnRhaW5lck5v
ZGUoKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVjKTsKIAogICAgIEFTU0VSVCgh
ZWMpOwogICAgIGlmIChlYykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84959</attachid>
            <date>2011-03-07 11:10:34 -0800</date>
            <delta_ts>2011-03-08 15:43:03 -0800</delta_ts>
            <desc>Fixed per Levi&apos;s comment</desc>
            <filename>bug-54937-20110307111033.patch</filename>
            <type>text/plain</type>
            <size>14636</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNDc1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDMtMDcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGNhbGxzIHRvIGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
IGluIFNlbGVjdGlvbkNvbnRyb2xsZXIgYW5kIFZpc2libGVTZWxlY3Rpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTM3CisKKyAgICAgICAgKiBl
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKTogQ2FsbHMgYW5jaG9yTm9kZSgpIGluc3RlYWQg
b2YgZGVwcmVjYXRlZE5vZGUoKSB0byBvYnRhaW4KKyAgICAgICAgdGhlIGRvY3VtZW50LiBBbHNv
IHJlc3RyYWluZWQgdGhlIGxpZmV0aW1lIG9mIGRvY3VtZW50IHZhcmlhYmxlLgorICAgICAgICAo
V2ViQ29yZTo6cmVtb3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKTogQ29tcGFyZSB0aGUgbm9kZSB3
aXRoIGFuY2hvck5vZGUoKSBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWROb2RlKCkKKyAgICAgICAgdG8g
ZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHBvc2l0aW9uIGJlY29tZXMgbnVsbCBhZnRlciByZW1v
dmluZyBhIG5vZGUuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpkaXJl
Y3Rpb25PZkVuY2xvc2luZ0Jsb2NrKTogVGhlIGVuY2xvc2luZyBibG9jayBpcyBhbHdheXMgYSBj
b250YWluZXIKKyAgICAgICAgc28gY2FsbCBjb250YWluZXJOb2RlKCkgaW5zdGVhZCBvZiBkZXBy
ZWNhdGVkTm9kZSgpLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6ZGVi
dWdSZW5kZXJlcik6IENhbGwgY29udGFpbmVyTm9kZSgpIGFuZCBjb21wdXRlT2Zmc2V0SW5Db250
YWluZXIoKQorICAgICAgICBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWROb2RlKCkgYW5kIGRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkgcmVzcGVjdGl2ZWx5LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uQ29udHJvbGxlcjo6aXNJblBhc3N3b3JkRmllbGQpOiBMb29rIGZvciB0aGUgc2hhZG93IHJv
b3QgZnJvbSBjb250YWluZXJOb2RlKCkKKyAgICAgICAgaW5zdGVhZCBvZiBkZXByZWNhdGVkTm9k
ZSB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qgc2VsZWN0aW9uIGluc2lkZSBhIHBhc3N3b3Jk
IGZpZWxkLiBBbHNvIGFzc2VydAorICAgICAgICB0aGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24g
aXMgbm90IGJlZm9yZSBvciBhZnRlciB0aGUgc2hhZG93IHJvb3QgYXMgaXQgdmlvbGF0ZXMgb3Vy
IGFzc3VtcHRpb24uCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om1ha2VTZWFyY2hSYW5nZSk6IENhbGwgY29udGFpbmVyTm9kZSgpIGFu
ZCBvZmZzZXRJbkNvbnRhaW5lck5vZGUoKSBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWROb2RlKCkKKyAg
ICAgICAgYW5kIGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgcmVzcGVjdGl2ZWx5IGJlY2F1c2Ug
c3RhcnQgaXMgYWx3YXlzIHBhcmVudCBhbmNob3JlZCBhbmQgdGhlcmVmb3JlCisgICAgICAgIGd1
YXJhbnRlZWQgdG8gYmUgYW4gb2Zmc2V0IGluc2lkZSBhbiBhbmNob3Igbm9kZS4KKyAgICAgICAg
KFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OmFkanVzdFNlbGVjdGlvblRvQXZvaWRDcm9zc2lu
Z0VkaXRpbmdCb3VuZGFyaWVzKTogQ2FsbCBjb250YWluZXJOb2RlKCkKKyAgICAgICAgaW5zdGVh
ZCBvZiBkZXByZWNhdGVkTm9kZSgpIHRvIGxvb2sgZm9yIHRoZSBsb3dlc3QgZWRpdGFibGUgYW5j
ZXN0b3IgYmVjYXVzZSBwb3NpdGlvbiBiZWZvcmUgb3IgYWZ0ZXIKKyAgICAgICAgYW4gZWRpdGFi
bGUgZWxlbWVudCBpc24ndCBlZGl0YWJsZS4KKyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5j
cHA6IENhbGwgY29udGFpbmVyTm9kZSgpIGFuZCBvZmZzZXRJbkNvbnRhaW5lck5vZGUoKSBpbnN0
ZWFkIG9mIGRlcHJlY2F0ZWROb2RlKCkKKyAgICAgICAgYW5kIGRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkgcmVzcGVjdGl2ZWx5IGluIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGJlY2F1c2UgdGhl
eSBhcmUgZXhwb3NlZCB0bworICAgICAgICBET00sIHdoaWNoIGRvZXNuJ3QgaGF2ZSBiZWZvcmUv
YWZ0ZXIgY29uY2VwdC4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6YW5jaG9yTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmFuY2hvck9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmZvY3VzTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpET01TZWxlY3Rpb246OmZvY3VzT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6YmFzZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpiYXNlT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6ZXh0ZW50Tm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmV4dGVudE9mZnNldCk6CisKIDIwMTEtMDMtMDcg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRl
cnMgQ2FybHNzb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9u
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDgwNDcwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDE2ICsxNTAs
MTQgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb24oYwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgTm9kZSogYmFzZU5vZGUgPSBzLmJhc2UoKS5kZXByZWNhdGVk
Tm9kZSgpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IDA7Ci0gICAgaWYgKGJhc2VOb2RlKQot
ICAgICAgICBkb2N1bWVudCA9IGJhc2VOb2RlLT5kb2N1bWVudCgpOwotICAgIAogICAgIC8vIDxo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ2ND46IEluZmluaXRlIHJl
Y3Vyc2lvbiBhdCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb24KICAgICAvLyBpZiBk
b2N1bWVudC0+ZnJhbWUoKSA9PSBtX2ZyYW1lIHdlIGNhbiBnZXQgaW50byBhbiBpbmZpbml0ZSBs
b29wCi0gICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5mcmFtZSgpICYmIGRvY3VtZW50LT5m
cmFtZSgpICE9IG1fZnJhbWUgJiYgZG9jdW1lbnQgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgewot
ICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihzLCBv
cHRpb25zKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChzLmJhc2UoKS5hbmNob3JOb2RlKCkp
IHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcy5iYXNlKCkuYW5jaG9yTm9kZSgpLT5k
b2N1bWVudCgpOworICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmZyYW1lKCkgJiYg
ZG9jdW1lbnQtPmZyYW1lKCkgIT0gbV9mcmFtZSAmJiBkb2N1bWVudCAhPSBtX2ZyYW1lLT5kb2N1
bWVudCgpKSB7CisgICAgICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNl
dFNlbGVjdGlvbihzLCBvcHRpb25zKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIGlmIChjbG9zZVR5cGluZykKQEAgLTIwNSwxNyArMjAzLDE3IEBAIHZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKGMKIAogc3RhdGljIGJvb2wgcmVtb3Zp
bmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
bikKIHsKLSAgICBpZiAoIXBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpCisgICAgaWYgKCFwb3Np
dGlvbi5hbmNob3JOb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChwb3Np
dGlvbi5kZXByZWNhdGVkTm9kZSgpID09IG5vZGUpCisgICAgaWYgKHBvc2l0aW9uLmFuY2hvck5v
ZGUoKSA9PSBub2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICghbm9kZS0+aXNF
bGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIHJldHVybiBlbGVtZW50LT5j
b250YWlucyhwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSB8fCBlbGVtZW50LT5jb250YWlucyhw
b3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSk7CisgICAgcmV0
dXJuIGVsZW1lbnQtPmNvbnRhaW5zKHBvc2l0aW9uLmFuY2hvck5vZGUoKSkgfHwgZWxlbWVudC0+
Y29udGFpbnMocG9zaXRpb24uYW5jaG9yTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSk7CiB9
CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSAqbm9k
ZSkKQEAgLTM4NCw3ICszODIsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OndpbGxCZU1v
ZGlmaWVkCiAKIFRleHREaXJlY3Rpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6ZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jaygpCiB7Ci0gICAgTm9kZSogZW5jbG9zaW5nQmxvY2tOb2RlID0gZW5jbG9z
aW5nQmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgTm9k
ZSogZW5jbG9zaW5nQmxvY2tOb2RlID0gZW5jbG9zaW5nQmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50
KCkuY29udGFpbmVyTm9kZSgpKTsKICAgICBpZiAoIWVuY2xvc2luZ0Jsb2NrTm9kZSkKICAgICAg
ICAgcmV0dXJuIExUUjsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZW5jbG9zaW5nQmxv
Y2tOb2RlLT5yZW5kZXJlcigpOwpAQCAtMTI0OSwxMSArMTI0NywxMSBAQCB2b2lkIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OmRlYnVnUmVuZGVyZXIoCiAgICAgICAgIGludCB0ZXh0TGVuZ3RoID0gdGV4
dC5sZW5ndGgoKTsKICAgICAgICAgaWYgKHNlbGVjdGVkKSB7CiAgICAgICAgICAgICBpbnQgb2Zm
c2V0ID0gMDsKLSAgICAgICAgICAgIGlmIChyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uc3RhcnQo
KS5kZXByZWNhdGVkTm9kZSgpKQotICAgICAgICAgICAgICAgIG9mZnNldCA9IG1fc2VsZWN0aW9u
LnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KHItPm5vZGUoKSA9PSBtX3NlbGVjdGlvbi5lbmQoKS5kZXByZWNhdGVkTm9kZSgpKQotICAgICAg
ICAgICAgICAgIG9mZnNldCA9IG1fc2VsZWN0aW9uLmVuZCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCk7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoci0+bm9kZSgpID09IG1f
c2VsZWN0aW9uLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpKQorICAgICAgICAgICAgICAgIG9mZnNl
dCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoci0+bm9kZSgpID09IG1fc2VsZWN0aW9uLmVuZCgpLmNvbnRh
aW5lck5vZGUoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBtX3NlbGVjdGlvbi5lbmQoKS5j
b21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisKICAgICAgICAgICAgIGludCBwb3M7CiAg
ICAgICAgICAgICBJbmxpbmVUZXh0Qm94KiBib3ggPSB0ZXh0UmVuZGVyZXItPmZpbmROZXh0SW5s
aW5lVGV4dEJveChvZmZzZXQsIHBvcyk7CiAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJp
bmcoYm94LT5zdGFydCgpLCBib3gtPmxlbigpKTsKQEAgLTE0NDksNyArMTQ0Nyw5IEBAIGJvb2wg
U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW4KIAogYm9vbCBTZWxlY3Rpb25Db250
cm9sbGVyOjppc0luUGFzc3dvcmRGaWVsZCgpIGNvbnN0CiB7Ci0gICAgTm9kZSogc3RhcnROb2Rl
ID0gc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOworICAgIEFTU0VSVChzdGFydCgpLmlzTnVsbCgp
IHx8IHN0YXJ0KCkuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5B
bmNob3IKKyAgICAgICAgICAgfHwgc3RhcnQoKS5jb250YWluZXJOb2RlKCkgfHwgIXN0YXJ0KCku
YW5jaG9yTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSk7CisgICAgTm9kZSogc3RhcnROb2Rl
ID0gc3RhcnQoKS5jb250YWluZXJOb2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2Vs
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVT
ZWxlY3Rpb24uY3BwCShyZXZpc2lvbiA4MDQ3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsNyBAQCBz
dGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gbWFrZVNlYXJjaFJhbmdlCiAKICAgICBQb3NpdGlvbiBz
dGFydChwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogICAgIHNlYXJjaFJhbmdlLT5z
ZWxlY3ROb2RlQ29udGVudHMoYm91bmRhcnksIGVjKTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0U3Rh
cnQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSwgZWMpOworICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFydC5jb250YWluZXJOb2RlKCks
IHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlYyk7CiAKICAgICBBU1NFUlQoIWVjKTsK
ICAgICBpZiAoZWMpCkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjph
ZGp1c3RTZWxlY3Rpb25UbwogICAgIE5vZGUqIHN0YXJ0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJv
b3QobV9zdGFydCk7CiAgICAgTm9kZSogZW5kUm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QobV9l
bmQpOwogICAgIAotICAgIE5vZGUqIGJhc2VFZGl0YWJsZUFuY2VzdG9yID0gbG93ZXN0RWRpdGFi
bGVBbmNlc3RvcihtX2Jhc2UuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgTm9kZSogYmFzZUVkaXRh
YmxlQW5jZXN0b3IgPSBsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKG1fYmFzZS5jb250YWluZXJOb2Rl
KCkpOwogICAgIAogICAgIC8vIFRoZSBiYXNlLCBzdGFydCBhbmQgZW5kIGFyZSBhbGwgaW4gdGhl
IHNhbWUgcmVnaW9uLiAgTm8gYWRqdXN0bWVudCBuZWNlc3NhcnkuCiAgICAgaWYgKGJhc2VSb290
ID09IHN0YXJ0Um9vdCAmJiBiYXNlUm9vdCA9PSBlbmRSb290KQpAQCAtNDkyLDE3ICs0OTIsMTcg
QEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RTZWxlY3Rpb25UbwogICAgIAogICAgICAg
ICAvLyBUaGUgc2VsZWN0aW9uIGVuZHMgaW4gZWRpdGFibGUgY29udGVudCBvciBub24tZWRpdGFi
bGUgY29udGVudCBpbnNpZGUgYSBkaWZmZXJlbnQgZWRpdGFibGUgYW5jZXN0b3IsIAogICAgICAg
ICAvLyBtb3ZlIGJhY2t3YXJkIHVudGlsIG5vbi1lZGl0YWJsZSBjb250ZW50IGluc2lkZSB0aGUg
c2FtZSBsb3dlc3QgZWRpdGFibGUgYW5jZXN0b3IgaXMgcmVhY2hlZC4KLSAgICAgICAgTm9kZSog
ZW5kRWRpdGFibGVBbmNlc3RvciA9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IobV9lbmQuZGVwcmVj
YXRlZE5vZGUoKSk7CisgICAgICAgIE5vZGUqIGVuZEVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RF
ZGl0YWJsZUFuY2VzdG9yKG1fZW5kLmNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgIGlmIChlbmRS
b290IHx8IGVuZEVkaXRhYmxlQW5jZXN0b3IgIT0gYmFzZUVkaXRhYmxlQW5jZXN0b3IpIHsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgUG9zaXRpb24gcCA9IHByZXZpb3VzVmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZShtX2VuZCk7CiAgICAgICAgICAgICBOb2RlKiBzaGFkb3dBbmNlc3RvciA9
IGVuZFJvb3QgPyBlbmRSb290LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CiAgICAgICAgICAg
ICBpZiAocC5pc051bGwoKSAmJiBlbmRSb290ICYmIChzaGFkb3dBbmNlc3RvciAhPSBlbmRSb290
KSkKICAgICAgICAgICAgICAgICBwID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNo
YWRvd0FuY2VzdG9yKTsKLSAgICAgICAgICAgIHdoaWxlIChwLmlzTm90TnVsbCgpICYmICEobG93
ZXN0RWRpdGFibGVBbmNlc3RvcihwLmRlcHJlY2F0ZWROb2RlKCkpID09IGJhc2VFZGl0YWJsZUFu
Y2VzdG9yICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkpKSB7CisgICAgICAgICAgICB3aGlsZSAo
cC5pc05vdE51bGwoKSAmJiAhKGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IocC5jb250YWluZXJOb2Rl
KCkpID09IGJhc2VFZGl0YWJsZUFuY2VzdG9yICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkpKSB7
CiAgICAgICAgICAgICAgICAgTm9kZSogcm9vdCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHAp
OwogICAgICAgICAgICAgICAgIHNoYWRvd0FuY2VzdG9yID0gcm9vdCA/IHJvb3QtPnNoYWRvd0Fu
Y2VzdG9yTm9kZSgpIDogMDsKLSAgICAgICAgICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAuZGVw
cmVjYXRlZE5vZGUoKSkgPyBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShwLmRlcHJlY2F0ZWRO
b2RlKCkpIDogcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHApOworICAgICAgICAg
ICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5jb250YWluZXJOb2RlKCkpID8gcG9zaXRpb25JblBh
cmVudEJlZm9yZU5vZGUocC5jb250YWluZXJOb2RlKCkpIDogcHJldmlvdXNWaXN1YWxseURpc3Rp
bmN0Q2FuZGlkYXRlKHApOwogICAgICAgICAgICAgICAgIGlmIChwLmlzTnVsbCgpICYmIChzaGFk
b3dBbmNlc3RvciAhPSByb290KSkKICAgICAgICAgICAgICAgICAgICAgcCA9IGxhc3REZWVwRWRp
dGluZ1Bvc2l0aW9uRm9yTm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAgICAgICAgICB9CkBAIC01
MjIsMTYgKzUyMiwxNiBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OmFkanVzdFNlbGVjdGlvblRv
CiAKICAgICAgICAgLy8gVGhlIHNlbGVjdGlvbiBzdGFydHMgaW4gZWRpdGFibGUgY29udGVudCBv
ciBub24tZWRpdGFibGUgY29udGVudCBpbnNpZGUgYSBkaWZmZXJlbnQgZWRpdGFibGUgYW5jZXN0
b3IsIAogICAgICAgICAvLyBtb3ZlIGZvcndhcmQgdW50aWwgbm9uLWVkaXRhYmxlIGNvbnRlbnQg
aW5zaWRlIHRoZSBzYW1lIGxvd2VzdCBlZGl0YWJsZSBhbmNlc3RvciBpcyByZWFjaGVkLgotICAg
ICAgICBOb2RlKiBzdGFydEVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RFZGl0YWJsZUFuY2VzdG9y
KG1fc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7ICAgICAgCisgICAgICAgIE5vZGUqIHN0YXJ0RWRp
dGFibGVBbmNlc3RvciA9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IobV9zdGFydC5jb250YWluZXJO
b2RlKCkpOyAgICAgIAogICAgICAgICBpZiAoc3RhcnRSb290IHx8IHN0YXJ0RWRpdGFibGVBbmNl
c3RvciAhPSBiYXNlRWRpdGFibGVBbmNlc3RvcikgewogICAgICAgICAgICAgUG9zaXRpb24gcCA9
IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fc3RhcnQpOwogICAgICAgICAgICAgTm9k
ZSogc2hhZG93QW5jZXN0b3IgPSBzdGFydFJvb3QgPyBzdGFydFJvb3QtPnNoYWRvd0FuY2VzdG9y
Tm9kZSgpIDogMDsKICAgICAgICAgICAgIGlmIChwLmlzTnVsbCgpICYmIHN0YXJ0Um9vdCAmJiAo
c2hhZG93QW5jZXN0b3IgIT0gc3RhcnRSb290KSkKICAgICAgICAgICAgICAgICBwID0gcG9zaXRp
b25CZWZvcmVOb2RlKHNoYWRvd0FuY2VzdG9yKTsKLSAgICAgICAgICAgIHdoaWxlIChwLmlzTm90
TnVsbCgpICYmICEobG93ZXN0RWRpdGFibGVBbmNlc3RvcihwLmRlcHJlY2F0ZWROb2RlKCkpID09
IGJhc2VFZGl0YWJsZUFuY2VzdG9yICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkpKSB7CisgICAg
ICAgICAgICB3aGlsZSAocC5pc05vdE51bGwoKSAmJiAhKGxvd2VzdEVkaXRhYmxlQW5jZXN0b3Io
cC5jb250YWluZXJOb2RlKCkpID09IGJhc2VFZGl0YWJsZUFuY2VzdG9yICYmICFpc0VkaXRhYmxl
UG9zaXRpb24ocCkpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogcm9vdCA9IGVkaXRhYmxlUm9v
dEZvclBvc2l0aW9uKHApOwogICAgICAgICAgICAgICAgIHNoYWRvd0FuY2VzdG9yID0gcm9vdCA/
IHJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKLSAgICAgICAgICAgICAgICBwID0gaXNB
dG9taWNOb2RlKHAuZGVwcmVjYXRlZE5vZGUoKSkgPyBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2Rl
KHAuZGVwcmVjYXRlZE5vZGUoKSkgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsK
KyAgICAgICAgICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAuY29udGFpbmVyTm9kZSgpKSA/IHBv
c2l0aW9uSW5QYXJlbnRBZnRlck5vZGUocC5jb250YWluZXJOb2RlKCkpIDogbmV4dFZpc3VhbGx5
RGlzdGluY3RDYW5kaWRhdGUocCk7CiAgICAgICAgICAgICAgICAgaWYgKHAuaXNOdWxsKCkgJiYg
KHNoYWRvd0FuY2VzdG9yICE9IHJvb3QpKQogICAgICAgICAgICAgICAgICAgICBwID0gcG9zaXRp
b25CZWZvcmVOb2RlKHNoYWRvd0FuY2VzdG9yKTsKICAgICAgICAgICAgIH0KQEAgLTU1MSw3ICs1
NTEsNyBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OmFkanVzdFNlbGVjdGlvblRvCiAgICAgfQog
ICAgIAogICAgIC8vIENvcnJlY3QgdGhlIGV4dGVudCBpZiBuZWNlc3NhcnkuCi0gICAgaWYgKGJh
c2VFZGl0YWJsZUFuY2VzdG9yICE9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IobV9leHRlbnQuZGVw
cmVjYXRlZE5vZGUoKSkpCisgICAgaWYgKGJhc2VFZGl0YWJsZUFuY2VzdG9yICE9IGxvd2VzdEVk
aXRhYmxlQW5jZXN0b3IobV9leHRlbnQuY29udGFpbmVyTm9kZSgpKSkKICAgICAgICAgbV9leHRl
bnQgPSBtX2Jhc2VJc0ZpcnN0ID8gbV9lbmQgOiBtX3N0YXJ0OwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCShyZXZpc2lvbiA4MDQ3MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3
IEBAIE5vZGUqIERPTVNlbGVjdGlvbjo6YW5jaG9yTm9kZSgpIGNvbnN0CiAgICAgICAgIHJldHVy
biAwOwogICAgIGlmIChOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHNlbGVjdGlvblNoYWRvd0FuY2Vz
dG9yKG1fZnJhbWUpKQogICAgICAgICByZXR1cm4gc2hhZG93QW5jZXN0b3ItPnBhcmVudE5vZGVH
dWFyYW50ZWVkSG9zdEZyZWUoKTsKLSAgICByZXR1cm4gYW5jaG9yUG9zaXRpb24odmlzaWJsZVNl
bGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOworICAgIHJldHVybiBhbmNob3JQb3NpdGlvbih2
aXNpYmxlU2VsZWN0aW9uKCkpLmNvbnRhaW5lck5vZGUoKTsKIH0KIAogaW50IERPTVNlbGVjdGlv
bjo6YW5jaG9yT2Zmc2V0KCkgY29uc3QKQEAgLTExMCw3ICsxMTAsNyBAQCBpbnQgRE9NU2VsZWN0
aW9uOjphbmNob3JPZmZzZXQoKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoTm9k
ZSogc2hhZG93QW5jZXN0b3IgPSBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcihtX2ZyYW1lKSkKICAg
ICAgICAgcmV0dXJuIHNoYWRvd0FuY2VzdG9yLT5ub2RlSW5kZXgoKTsKLSAgICByZXR1cm4gYW5j
aG9yUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
OworICAgIHJldHVybiBhbmNob3JQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpOwogfQogCiBOb2RlKiBET01TZWxlY3Rpb246OmZvY3VzTm9kZSgpIGNv
bnN0CkBAIC0xMTksNyArMTE5LDcgQEAgTm9kZSogRE9NU2VsZWN0aW9uOjpmb2N1c05vZGUoKSBj
b25zdAogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3IgPSBz
ZWxlY3Rpb25TaGFkb3dBbmNlc3RvcihtX2ZyYW1lKSkKICAgICAgICAgcmV0dXJuIHNoYWRvd0Fu
Y2VzdG9yLT5wYXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCk7Ci0gICAgcmV0dXJuIGZvY3Vz
UG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOworICAgIHJldHVy
biBmb2N1c1Bvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkuY29udGFpbmVyTm9kZSgpOwogfQog
CiBpbnQgRE9NU2VsZWN0aW9uOjpmb2N1c09mZnNldCgpIGNvbnN0CkBAIC0xMjgsNyArMTI4LDcg
QEAgaW50IERPTVNlbGVjdGlvbjo6Zm9jdXNPZmZzZXQoKSBjb25zdAogICAgICAgICByZXR1cm4g
MDsKICAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3IgPSBzZWxlY3Rpb25TaGFkb3dBbmNlc3Rv
cihtX2ZyYW1lKSkKICAgICAgICAgcmV0dXJuIHNoYWRvd0FuY2VzdG9yLT5ub2RlSW5kZXgoKTsK
LSAgICByZXR1cm4gZm9jdXNQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCk7CisgICAgcmV0dXJuIGZvY3VzUG9zaXRpb24odmlzaWJsZVNlbGVjdGlv
bigpKS5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKIH0KIAogTm9kZSogRE9NU2VsZWN0aW9uOjpi
YXNlTm9kZSgpIGNvbnN0CkBAIC0xMzcsNyArMTM3LDcgQEAgTm9kZSogRE9NU2VsZWN0aW9uOjpi
YXNlTm9kZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChOb2RlKiBzaGFkb3dB
bmNlc3RvciA9IHNlbGVjdGlvblNoYWRvd0FuY2VzdG9yKG1fZnJhbWUpKQogICAgICAgICByZXR1
cm4gc2hhZG93QW5jZXN0b3ItPnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKTsKLSAgICBy
ZXR1cm4gYmFzZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsK
KyAgICByZXR1cm4gYmFzZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkuY29udGFpbmVyTm9k
ZSgpOwogfQogCiBpbnQgRE9NU2VsZWN0aW9uOjpiYXNlT2Zmc2V0KCkgY29uc3QKQEAgLTE0Niw3
ICsxNDYsNyBAQCBpbnQgRE9NU2VsZWN0aW9uOjpiYXNlT2Zmc2V0KCkgY29uc3QKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gc2VsZWN0aW9uU2hhZG93
QW5jZXN0b3IobV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBzaGFkb3dBbmNlc3Rvci0+bm9kZUlu
ZGV4KCk7Ci0gICAgcmV0dXJuIGJhc2VQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgcmV0dXJuIGJhc2VQb3NpdGlvbih2aXNpYmxlU2Vs
ZWN0aW9uKCkpLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwogfQogCiBOb2RlKiBET01TZWxlY3Rp
b246OmV4dGVudE5vZGUoKSBjb25zdApAQCAtMTU1LDcgKzE1NSw3IEBAIE5vZGUqIERPTVNlbGVj
dGlvbjo6ZXh0ZW50Tm9kZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChOb2Rl
KiBzaGFkb3dBbmNlc3RvciA9IHNlbGVjdGlvblNoYWRvd0FuY2VzdG9yKG1fZnJhbWUpKQogICAg
ICAgICByZXR1cm4gc2hhZG93QW5jZXN0b3ItPnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUo
KTsKLSAgICByZXR1cm4gZXh0ZW50UG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5kZXByZWNh
dGVkTm9kZSgpOworICAgIHJldHVybiBleHRlbnRQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkp
LmNvbnRhaW5lck5vZGUoKTsKIH0KIAogaW50IERPTVNlbGVjdGlvbjo6ZXh0ZW50T2Zmc2V0KCkg
Y29uc3QKQEAgLTE2NCw3ICsxNjQsNyBAQCBpbnQgRE9NU2VsZWN0aW9uOjpleHRlbnRPZmZzZXQo
KSBjb25zdAogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3Ig
PSBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcihtX2ZyYW1lKSkKICAgICAgICAgcmV0dXJuIHNoYWRv
d0FuY2VzdG9yLT5ub2RlSW5kZXgoKTsKLSAgICByZXR1cm4gZXh0ZW50UG9zaXRpb24odmlzaWJs
ZVNlbGVjdGlvbigpKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIHJldHVybiBleHRl
bnRQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwog
fQogCiBib29sIERPTVNlbGVjdGlvbjo6aXNDb2xsYXBzZWQoKSBjb25zdAo=
</data>
<flag name="review"
          id="77016"
          type_id="1"
          status="+"
          setter="tkent"
    />
    <flag name="commit-queue"
          id="77178"
          type_id="3"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>