<?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>16765</bug_id>
          
          <creation_ts>2008-01-06 17:49:52 -0800</creation_ts>
          <short_desc>Range does not adjust endContainer and endOffset correctly after insertNode (Acid3 bug)</short_desc>
          <delta_ts>2008-02-10 12:36:30 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Andrew Wellington">andrew</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>ap</cc>
    
    <cc>ian</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>66422</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Wellington">andrew</who>
    <bug_when>2008-01-06 17:49:52 -0800</bug_when>
    <thetext>Acid3 test 15 failure:
Test 15: FAIL (range didn&apos;t start with the expected text; range stringified to &apos;&apos;)

      // test 15: Ranges under mutations: insertion into text nodes
      var doc = getTestDocument();
      var p = doc.createElement(&apos;p&apos;);
      var t1 = doc.createTextNode(&apos;12345&apos;);
      p.appendChild(t1);
      var t2 = doc.createTextNode(&apos;ABCDE&apos;);
      p.appendChild(t2);
      doc.body.appendChild(p);
      var r = doc.createRange();
      r.setStart(p.firstChild, 2);
      r.setEnd(p.firstChild, 3);
      assert(!r.collapsed, &quot;collapsed is wrong at start&quot;);
      assertEquals(r.commonAncestorContainer, p.firstChild, &quot;commonAncestorContainer is wrong at start&quot;);
      assertEquals(r.startContainer, p.firstChild, &quot;startContainer is wrong at start&quot;);
      assertEquals(r.startOffset, 2, &quot;startOffset is wrong at start&quot;);
      assertEquals(r.endContainer, p.firstChild, &quot;endContainer is wrong at start&quot;);
      assertEquals(r.endOffset, 3, &quot;endOffset is wrong at start&quot;);
      assertEquals(r.toString(), &quot;3&quot;, &quot;range in text node stringification failed&quot;);
      r.insertNode(p.lastChild);
      assertEquals(p.childNodes.length, 3, &quot;insertion of node made wrong number of child nodes&quot;);
      assertEquals(p.childNodes[0], t1, &quot;unexpected first text node&quot;);
      assertEquals(p.childNodes[0].data, &quot;12&quot;, &quot;unexpected first text node contents&quot;);
      assertEquals(p.childNodes[1], t2, &quot;unexpected second text node&quot;);
      assertEquals(p.childNodes[1].data, &quot;ABCDE&quot;, &quot;unexpected second text node&quot;);
      assertEquals(p.childNodes[2].data, &quot;345&quot;, &quot;unexpected third text node contents&quot;);
      // The spec is very vague about what exactly should be in the range afterwards:
      // the insertion results in a splitText(), which it says is equivalent to a truncation
      // followed by an insertion, but it doesn&apos;t say what to do when you have a truncation,
      // so we don&apos;t know where either the start or the end boundary points end up.
      // The spec really should be clarified for how to handle splitText() and
      // text node truncation in general
      // The only thing that seems very clear is that the inserted text node should
      // be in the range, and it has to be at the start, since insertion always puts it at
      // the start.
      assert(!r.collapsed, &quot;collapsed is wrong after insertion&quot;);
      //assertEquals(r.commonAncestorContainer, p, &quot;commonAncestorContainer is wrong after insertion&quot;);
      //assertEquals(r.startContainer, p, &quot;startContainer is wrong after insertion&quot;);
      //assertEquals(r.startOffset, 1, &quot;startOffset is wrong after insertion&quot;);
      //assertEquals(r.endContainer, p.lastChild, &quot;endContainer is wrong after insertion&quot;);
      //assertEquals(r.endOffset, 1, &quot;endOffset is wrong after insertion&quot;);
      assert(r.toString().match(/^ABCDE/), &quot;range didn&apos;t start with the expected text; range stringified to &apos;&quot; + r.toString() + &quot;&apos;&quot;);
      return 1;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67087</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-12 19:51:02 -0800</bug_when>
    <thetext>Ok, I understand what&apos;s going on here, and I plan to fix it.  I need to make a few test cases first, just to make sure.

Hixie is right, this is way under-specified, but I think Firefox&apos;s behavior is correct here:

&lt;p&gt;12345&lt;/p&gt;

Range:
startContainer: Text&lt;12345&gt;
startOffset: 2
endContainer: Text&lt;12345&gt;
endOffset: 3

range.toString() -&gt; &quot;3&quot; // we get this part right.

range.insertNode(Text&lt;ABCDE&gt;)

FireFox does:
startContainer: Text&lt;12&gt;
startOffset: 2
endContainer: Text&lt;345&gt;
endOffset: 1

Safari does:
startContainer: Text&lt;12&gt;
startOffset: 2
endContainer: Text&lt;12&gt;
endOffset: 4

Again, the spec is not at all clear here, but I think FF&apos;s behavior makes more sense.  Especially since our endOffset is off the end of the endContainer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67099</commentid>
    <comment_count>2</comment_count>
      <attachid>18419</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-13 02:12:18 -0800</bug_when>
    <thetext>Created attachment 18419
Fix Range.insertNode for the textSplit case

 LayoutTests/ChangeLog                              |   16 ++++++++
 ...e-insertNode-separate-endContainer-expected.txt |   22 +++++++++++
 .../range-insertNode-separate-endContainer.html    |   13 +++++++
 .../Range/range-insertNode-splittext-expected.txt  |   22 +++++++++++
 .../fast/dom/Range/range-insertNode-splittext.html |   13 +++++++
 .../range-insertNode-separate-endContainer.js      |   38 ++++++++++++++++++++
 .../Range/resources/range-insertNode-splittext.js  |   33 +++++++++++++++++
 WebCore/ChangeLog                                  |   14 +++++++
 WebCore/dom/Range.cpp                              |   36 +++++++++++-------
 9 files changed, 193 insertions(+), 14 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67100</commentid>
    <comment_count>3</comment_count>
      <attachid>18420</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-13 02:14:37 -0800</bug_when>
    <thetext>Created attachment 18420
Fix Range.insertNode for the textSplit case

 LayoutTests/ChangeLog                              |   16 ++++++++
 ...e-insertNode-separate-endContainer-expected.txt |   22 +++++++++++
 .../range-insertNode-separate-endContainer.html    |   13 +++++++
 .../Range/range-insertNode-splittext-expected.txt  |   22 +++++++++++
 .../fast/dom/Range/range-insertNode-splittext.html |   13 +++++++
 .../range-insertNode-separate-endContainer.js      |   38 ++++++++++++++++++++
 .../Range/resources/range-insertNode-splittext.js  |   33 +++++++++++++++++
 WebCore/ChangeLog                                  |   14 +++++++
 WebCore/dom/Range.cpp                              |   36 +++++++++++-------
 9 files changed, 193 insertions(+), 14 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67101</commentid>
    <comment_count>4</comment_count>
      <attachid>18420</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-13 02:21:12 -0800</bug_when>
    <thetext>Comment on attachment 18420
Fix Range.insertNode for the textSplit case

This looks fine to me, but i&apos;d rather someone more familiar with this area (justin :D ) review it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67104</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-13 02:25:04 -0800</bug_when>
    <thetext>This is the bug I figured Justin might be interested in seeing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67106</commentid>
    <comment_count>6</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-01-13 02:35:02 -0800</bug_when>
    <thetext>Will this work correctly when the inserted node is already in the range?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67112</commentid>
    <comment_count>7</comment_count>
      <attachid>18420</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-13 08:14:25 -0800</bug_when>
    <thetext>Comment on attachment 18420
Fix Range.insertNode for the textSplit case

This is OK as far as it goes. But long term we need to adjust ranges for any changes to the DOM, not just changes performed by the range code itself. We need to register the ranges with the document and update them as the various elements and text nodes are mutated. So more patches like this one are not a step in the right direction.

Nonetheless, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67121</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-01-13 11:15:07 -0800</bug_when>
    <thetext>(See other bugs blocking bug 11997, some of which also include custom fixes that we will want to remove).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67167</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-13 16:53:41 -0800</bug_when>
    <thetext>@darin: So now that I look closer (and realize that we don&apos;t support Range objects tracking DOM mutations), yes, this is &quot;the wrong&quot; fix.  The test case still remains useful.  I think I&apos;ll land it anyway, and then when we move Range off of this custom code, onto a more unified DOM mutation tracking infrastructure, this code will disappear (and the test case will stick around).

@ap: Yeah, this code will be removed in the end, but it won&apos;t require any special effort to do so. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67171</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-13 17:34:05 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Will this work correctly when the inserted node is already in the range?
&gt; 

I made some additional test cases, and found at least one (existing) problem in our insertNode code.  FireFox and WebKit both have (differing) bad results for my test case.  I&apos;ll file a follow-up bug with that new test case shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67172</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-13 17:36:04 -0800</bug_when>
    <thetext>r29456</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18419</attachid>
            <date>2008-01-13 02:12:18 -0800</date>
            <delta_ts>2008-01-13 02:14:53 -0800</delta_ts>
            <desc>Fix Range.insertNode for the textSplit case</desc>
            <filename>Fix-Range.insertNode-for-the-textSplit-case.patch</filename>
            <type>text/plain</type>
            <size>10731</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NmRlZDMzYzIyMDM3ODQxNTk4ZGFkOGQ2NDE2MjYzZTBkMGQ5MDA5NQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBhNTNjZDUu
LjYxY2M0YTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAwOC0wMS0xMyAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICByYW5nZS1pbnNlcnROb2RlLXNlcGFyYXRlLWVuZENvbnRhaW5l
ciB2YWxpZGF0ZXMgcHJvcGVyIHJhbmdlIGJlaGF2aW9yCisgICAgICAgIGFuZCBkb2VzIG5vdCBj
aGFuZ2Ugd2l0aCB0aGlzIHBhdGNoLgorICAgICAgICByYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4
dCBkZW1vbnN0cmF0ZXMgdGhlIGlzc3VlIGZpeGVkIGJ5IHRoaXMgcGF0Y2gKKyAgICAgICAgaHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NjUKKworICAgICAgICAqIGZh
c3QvZG9tL1JhbmdlL3JhbmdlLWluc2VydE5vZGUtc2VwYXJhdGUtZW5kQ29udGFpbmVyLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vUmFuZ2UvcmFuZ2UtaW5zZXJ0Tm9k
ZS1zZXBhcmF0ZS1lbmRDb250YWluZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20v
UmFuZ2UvcmFuZ2UtaW5zZXJ0Tm9kZS1zcGxpdHRleHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9SYW5nZS9yYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4dC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9SYW5nZS9yZXNvdXJjZXMvcmFuZ2UtaW5zZXJ0Tm9k
ZS1zZXBhcmF0ZS1lbmRDb250YWluZXIuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL1Jh
bmdlL3Jlc291cmNlcy9yYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4dC5qczogQWRkZWQuCisKIDIw
MDgtMDEtMTIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRh
dGUgZXhwZWN0ZWQgcmVzdWx0cyBmb3IgZmFzdC9yZXBsYWNlZC9pbWFnZS1tYXAtZXhwZWN0ZWQg
YWZ0ZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLWluc2Vy
dE5vZGUtc2VwYXJhdGUtZW5kQ29udGFpbmVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL1JhbmdlL3JhbmdlLWluc2VydE5vZGUtc2VwYXJhdGUtZW5kQ29udGFpbmVyLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTNjYTVhCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmFuZ2UtaW5zZXJ0Tm9k
ZS1zZXBhcmF0ZS1lbmRDb250YWluZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjIgQEAKK1Rl
c3QgZm9yIHByb3BlciBiZWhhdmlvciBvZiBSYW5nZS5pbnNlcnROb2RlKGRvY3VtZW50RnJhZ21l
bnQpIHdoZW4gc3RhcnRDb250YWluZXIgIT0gZW5kQ29udGFpbmVyCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIHIudG9TdHJpbmcoKSBpcyAiQUJDIgorUEFTUyBwLmNoaWxk
Tm9kZXMubGVuZ3RoIGlzIDQKK1BBU1MgcC5jaGlsZE5vZGVzWzBdIGlzIHQxCitQQVNTIHAuY2hp
bGROb2Rlc1sxXSBpcyB0MworUEFTUyBwLmNoaWxkTm9kZXNbMl0gaXMgdDQKK1BBU1MgcC5jaGls
ZE5vZGVzWzNdIGlzIHQyCitQQVNTIHIuY29sbGFwc2VkIGlzIGZhbHNlCitQQVNTIHIuY29tbW9u
QW5jZXN0b3JDb250YWluZXIgaXMgcAorUEFTUyByLnN0YXJ0Q29udGFpbmVyIGlzIHAKK1BBU1Mg
ci5zdGFydE9mZnNldCBpcyAxCitQQVNTIHIuZW5kQ29udGFpbmVyIGlzIHQyCitQQVNTIHIuZW5k
T2Zmc2V0IGlzIDMKK1BBU1Mgci50b1N0cmluZygpIGlzICJQUVJYWVpBQkMiCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmFuZ2UtaW5zZXJ0Tm9kZS1zZXBhcmF0ZS1lbmRDb250
YWluZXIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLWluc2VydE5vZGUt
c2VwYXJhdGUtZW5kQ29udGFpbmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZTMxZmYyMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1Jh
bmdlL3JhbmdlLWluc2VydE5vZGUtc2VwYXJhdGUtZW5kQ29udGFpbmVyLmh0bWwKQEAgLTAsMCAr
MSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9yYW5nZS1pbnNlcnROb2RlLXNlcGFyYXRlLWVuZENvbnRhaW5lci5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9SYW5nZS9yYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4dC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4dC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ0YzJhNAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLWluc2VydE5vZGUtc3Bs
aXR0ZXh0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIyIEBACitUZXN0IGZvciBwcm9wZXIgYmVo
YXZpb3Igb2YgUmFuZ2UuaW5zZXJ0Tm9kZSB3aGVuIHNwbGl0dGluZyB0ZXh0IG5vZGVzCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHAuY2hpbGROb2Rlcy5sZW5ndGggaXMg
MworUEFTUyBwLmNoaWxkTm9kZXNbMF0gaXMgdDEKK1BBU1MgcC5jaGlsZE5vZGVzWzBdLmRhdGEg
aXMgIjEyIgorUEFTUyBwLmNoaWxkTm9kZXNbMV0gaXMgdDIKK1BBU1MgcC5jaGlsZE5vZGVzWzFd
LmRhdGEgaXMgIkFCQ0RFIgorUEFTUyBwLmNoaWxkTm9kZXNbMl0uZGF0YSBpcyAiMzQ1IgorUEFT
UyByLmNvbGxhcHNlZCBpcyBmYWxzZQorUEFTUyByLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIGlz
IHAKK1BBU1Mgci5zdGFydENvbnRhaW5lciBpcyB0MQorUEFTUyByLnN0YXJ0T2Zmc2V0IGlzIDIK
K1BBU1Mgci5lbmRDb250YWluZXIgaXMgdDMKK1BBU1Mgci5lbmRPZmZzZXQgaXMgMQorUEFTUyBy
LnRvU3RyaW5nKCkgaXMgIkFCQ0RFMyIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5n
ZS9yYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4dC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
UmFuZ2UvcmFuZ2UtaW5zZXJ0Tm9kZS1zcGxpdHRleHQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43MDBiYzBhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vUmFuZ2UvcmFuZ2UtaW5zZXJ0Tm9kZS1zcGxpdHRleHQuaHRtbApAQCAtMCwwICsx
LDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3JhbmdlLWluc2VydE5vZGUtc3BsaXR0ZXh0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jlc291
cmNlcy9yYW5nZS1pbnNlcnROb2RlLXNlcGFyYXRlLWVuZENvbnRhaW5lci5qcyBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL1JhbmdlL3Jlc291cmNlcy9yYW5nZS1pbnNlcnROb2RlLXNlcGFyYXRlLWVu
ZENvbnRhaW5lci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODIxYjI1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmVzb3VyY2Vz
L3JhbmdlLWluc2VydE5vZGUtc2VwYXJhdGUtZW5kQ29udGFpbmVyLmpzCkBAIC0wLDAgKzEsMzgg
QEAKK2Rlc2NyaXB0aW9uKCdUZXN0IGZvciBwcm9wZXIgYmVoYXZpb3Igb2YgUmFuZ2UuaW5zZXJ0
Tm9kZShkb2N1bWVudEZyYWdtZW50KSB3aGVuIHN0YXJ0Q29udGFpbmVyICE9IGVuZENvbnRhaW5l
cicpOworCit2YXIgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsKK3ZhciB0MSA9IGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCcxMjM0NScpOworcC5hcHBlbmRDaGlsZCh0MSk7Cit2YXIg
dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnQUJDREUnKTsKK3AuYXBwZW5kQ2hpbGQodDIp
OworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwKTsKK3ZhciByID0gZG9jdW1lbnQuY3JlYXRl
UmFuZ2UoKTsKK3Iuc2V0U3RhcnQocCwgMSk7CityLnNldEVuZCh0MiwgMyk7CitzaG91bGRCZUVx
dWFsVG9TdHJpbmcoInIudG9TdHJpbmcoKSIsICJBQkMiKTsKKwordmFyIGRmID0gZG9jdW1lbnQu
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwordmFyIHQzID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoIlBRUiIpOwordmFyIHQ0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlhZWiIpOworZGYu
YXBwZW5kQ2hpbGQodDMpOworZGYuYXBwZW5kQ2hpbGQodDQpOworci5pbnNlcnROb2RlKGRmKTsK
Kworc2hvdWxkQmUoInAuY2hpbGROb2Rlcy5sZW5ndGgiLCAiNCIpOworc2hvdWxkQmUoInAuY2hp
bGROb2Rlc1swXSIsICJ0MSIpOworc2hvdWxkQmUoInAuY2hpbGROb2Rlc1sxXSIsICJ0MyIpOwor
c2hvdWxkQmUoInAuY2hpbGROb2Rlc1syXSIsICJ0NCIpOworc2hvdWxkQmUoInAuY2hpbGROb2Rl
c1szXSIsICJ0MiIpOworCitzaG91bGRCZUZhbHNlKCJyLmNvbGxhcHNlZCIpOworc2hvdWxkQmUo
InIuY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCAicCIpOworc2hvdWxkQmUoInIuc3RhcnRDb250
YWluZXIiLCAicCIpOworc2hvdWxkQmUoInIuc3RhcnRPZmZzZXQiLCAiMSIpOworc2hvdWxkQmUo
InIuZW5kQ29udGFpbmVyIiwgInQyIik7CitzaG91bGRCZSgici5lbmRPZmZzZXQiLCAiMyIpOwor
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyLnRvU3RyaW5nKCkiLCAiUFFSWFlaQUJDIikKKworLy8g
Y2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzCitkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHApOwor
Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL1JhbmdlL3Jlc291cmNlcy9yYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4dC5qcyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jlc291cmNlcy9yYW5nZS1pbnNlcnROb2RlLXNw
bGl0dGV4dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDhhMmE0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmVzb3VyY2VzL3Jh
bmdlLWluc2VydE5vZGUtc3BsaXR0ZXh0LmpzCkBAIC0wLDAgKzEsMzMgQEAKK2Rlc2NyaXB0aW9u
KCdUZXN0IGZvciBwcm9wZXIgYmVoYXZpb3Igb2YgUmFuZ2UuaW5zZXJ0Tm9kZSB3aGVuIHNwbGl0
dGluZyB0ZXh0IG5vZGVzJyk7CisKK3ZhciBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcp
OwordmFyIHQxID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJzEyMzQ1Jyk7CitwLmFwcGVuZENo
aWxkKHQxKTsKK3ZhciB0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdBQkNERScpOworZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChwKTsKK3ZhciByID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2Uo
KTsKK3Iuc2V0U3RhcnQodDEsIDIpOworci5zZXRFbmQodDEsIDMpOworci5pbnNlcnROb2RlKHQy
KTsKKworc2hvdWxkQmUoInAuY2hpbGROb2Rlcy5sZW5ndGgiLCAiMyIpOworc2hvdWxkQmUoInAu
Y2hpbGROb2Rlc1swXSIsICJ0MSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJwLmNoaWxkTm9k
ZXNbMF0uZGF0YSIsICIxMiIpOworc2hvdWxkQmUoInAuY2hpbGROb2Rlc1sxXSIsICJ0MiIpOwor
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJwLmNoaWxkTm9kZXNbMV0uZGF0YSIsICJBQkNERSIpOwor
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJwLmNoaWxkTm9kZXNbMl0uZGF0YSIsICIzNDUiKTsKKwor
dmFyIHQzID0gcC5jaGlsZE5vZGVzWzJdOworCitzaG91bGRCZUZhbHNlKCJyLmNvbGxhcHNlZCIp
Oworc2hvdWxkQmUoInIuY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCAicCIpOworc2hvdWxkQmUo
InIuc3RhcnRDb250YWluZXIiLCAidDEiKTsKK3Nob3VsZEJlKCJyLnN0YXJ0T2Zmc2V0IiwgIjIi
KTsKK3Nob3VsZEJlKCJyLmVuZENvbnRhaW5lciIsICJ0MyIpOworc2hvdWxkQmUoInIuZW5kT2Zm
c2V0IiwgIjEiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygici50b1N0cmluZygpIiwgIkFCQ0RF
MyIpCisKKy8vIGNsZWFuIHVwIGFmdGVyIG91cnNlbHZlcworZG9jdW1lbnQuYm9keS5yZW1vdmVD
aGlsZChwKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDUxMzVjM2MuLjMwZmJi
ZjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMDgtMDEtMTMgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJh
bmdlLmluc2VydE5vZGUgZG9lcyBub3QgdXBkYXRlIGVuZENvbnRhaW5lciBlbmRJbmRleCBjb3Jy
ZWN0bHkKKyAgICAgICAgaW4gdGhlIGNhc2Ugd2hlcmUgaXQgaGFkIHRvIHNwbGl0IGEgdGV4dCBu
b2RlLgorICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc2
NQorCisgICAgICAgIFRlc3RzOiBmYXN0L2RvbS9SYW5nZS9yYW5nZS1pbnNlcnROb2RlLXNlcGFy
YXRlLWVuZENvbnRhaW5lci5odG1sCisgICAgICAgICAgICAgICBmYXN0L2RvbS9SYW5nZS9yYW5n
ZS1pbnNlcnROb2RlLXNwbGl0dGV4dC5odG1sCisKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUpOiBoYW5kbGUgdGhlIHNwbGl0VGV4
dCBjYXNlIGNvcnJlY3RseS4KKwogMjAwOC0wMS0xMiAgUm9kbmV5IERhd2VzICA8ZG9iZXlAd2F5
b2Z0aGVtb25rZXkuY29tPgogCiAgICAgICAgIEd0ayBkZWJ1ZyBidWlsZCBmaXguICBSZXZpZXdl
ZCBieSBNYXJrIFJvd2UuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9XZWJD
b3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggYThjNjhkYi4uZjk5N2JmMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtOTc5LDYg
Kzk3OSw4IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmNsb25lQ29udGVu
dHMoIGludCAmZWMgICkKIAogdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShQYXNzUmVmUHRyPE5vZGU+
IG5ld05vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIGVjID0gMDsKKwogICAgIGlmICht
X2RldGFjaGVkKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJl
dHVybjsKQEAgLTEwMzAsOCArMTAzMiw3IEBAIHZvaWQgUmFuZ2U6Omluc2VydE5vZGUoUGFzc1Jl
ZlB0cjxOb2RlPiBuZXdOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7CisgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKCFjaGVja0FnYWluc3QtPmNoaWxkVHlwZUFsbG93ZWQobmV3
Tm9kZS0+bm9kZVR5cGUoKSkpIHsKICAgICAgICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1Rf
RVJSOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTA0Niw3ICsxMDQ3LDcgQEAgdm9pZCBSYW5n
ZTo6aW5zZXJ0Tm9kZShQYXNzUmVmUHRyPE5vZGU+IG5ld05vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogICAgIH0KIAogICAgIC8vIElOVkFMSURfTk9ERV9UWVBFX0VSUjogUmFpc2VkIGlmIG5ld05v
ZGUgaXMgYW4gQXR0ciwgRW50aXR5LCBOb3RhdGlvbiwgb3IgRG9jdW1lbnQgbm9kZS4KLSAgICBp
ZiggbmV3Tm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpBVFRSSUJVVEVfTk9ERSB8fAorICAgIGlm
IChuZXdOb2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkFUVFJJQlVURV9OT0RFIHx8CiAgICAgICAg
IG5ld05vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RU5USVRZX05PREUgfHwKICAgICAgICAgbmV3
Tm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpOT1RBVElPTl9OT0RFIHx8CiAgICAgICAgIG5ld05v
ZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgewpAQCAtMTA1NCwyNCArMTA1
NSwzMSBAQCB2b2lkIFJhbmdlOjppbnNlcnROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Tm9kZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB1bnNpZ25l
ZCBvZmZzZXREZWx0YSA9IDA7Ci0gICAgaWYgKG1fc3RhcnRDb250YWluZXIgPT0gbV9lbmRDb250
YWluZXIpIHsKLSAgICAgICAgYm9vbCBpc0ZyYWdtZW50ID0gbmV3Tm9kZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFOwotICAgICAgICBvZmZzZXREZWx0YSA9IGlz
RnJhZ21lbnQgPyBuZXdOb2RlLT5jaGlsZE5vZGVDb3VudCgpIDogMTsKLSAgICB9Ci0gICAgCi0g
ICAgaWYobV9zdGFydENvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwK
LSAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJ
T05fTk9ERSkgewotICAgICAgICBlYyA9IDA7CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0RGVsdGEg
PSAwOworICAgIGlmIChtX3N0YXJ0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRf
Tk9ERSB8fAorICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OkNE
QVRBX1NFQ1RJT05fTk9ERSkgewogICAgICAgICBSZWZQdHI8VGV4dD4gbmV3VGV4dCA9IHN0YXRp
Y19jYXN0PFRleHQqPihtX3N0YXJ0Q29udGFpbmVyLmdldCgpKS0+c3BsaXRUZXh0KG1fc3RhcnRP
ZmZzZXQsIGVjKTsKICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmIChtX3N0YXJ0Q29udGFpbmVyID09IG1fZW5kQ29udGFpbmVyKQorICAgICAgICAgICAg
ZW5kT2Zmc2V0RGVsdGEgPSAtbV9zdGFydE9mZnNldDsKKwogICAgICAgICBtX3N0YXJ0Q29udGFp
bmVyLT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShuZXdOb2RlLCBuZXdUZXh0LmdldCgpLCBl
Yyk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9lbmRD
b250YWluZXIgPSBuZXdUZXh0OwogICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3N0YXJ0Q29u
dGFpbmVyID09IG1fZW5kQ29udGFpbmVyKSB7CisgICAgICAgICAgICBib29sIGlzRnJhZ21lbnQg
PSBuZXdOb2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU7Cisg
ICAgICAgICAgICBlbmRPZmZzZXREZWx0YSA9IGlzRnJhZ21lbnQgPyBuZXdOb2RlLT5jaGlsZE5v
ZGVDb3VudCgpIDogMTsKKyAgICAgICAgfQorCiAgICAgICAgIG1fc3RhcnRDb250YWluZXItPmlu
c2VydEJlZm9yZShuZXdOb2RlLCBtX3N0YXJ0Q29udGFpbmVyLT5jaGlsZE5vZGUobV9zdGFydE9m
ZnNldCksIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICAKLSAgICBtX2VuZE9mZnNldCArPSBvZmZzZXREZWx0YTsKKyAgICBtX2VuZE9mZnNldCAr
PSBlbmRPZmZzZXREZWx0YTsKIH0KIAogU3RyaW5nIFJhbmdlOjp0b1N0cmluZyhFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18420</attachid>
            <date>2008-01-13 02:14:37 -0800</date>
            <delta_ts>2008-01-13 08:14:25 -0800</delta_ts>
            <desc>Fix Range.insertNode for the textSplit case</desc>
            <filename>Fix-Range.insertNode-for-the-textSplit-case.patch</filename>
            <type>text/plain</type>
            <size>10731</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NmRlZDMzYzIyMDM3ODQxNTk4ZGFkOGQ2NDE2MjYzZTBkMGQ5MDA5NQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBhNTNjZDUu
LjYxY2M0YTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAwOC0wMS0xMyAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICByYW5nZS1pbnNlcnROb2RlLXNlcGFyYXRlLWVuZENvbnRhaW5l
ciB2YWxpZGF0ZXMgcHJvcGVyIHJhbmdlIGJlaGF2aW9yCisgICAgICAgIGFuZCBkb2VzIG5vdCBj
aGFuZ2Ugd2l0aCB0aGlzIHBhdGNoLgorICAgICAgICByYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4
dCBkZW1vbnN0cmF0ZXMgdGhlIGlzc3VlIGZpeGVkIGJ5IHRoaXMgcGF0Y2gKKyAgICAgICAgaHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NjUKKworICAgICAgICAqIGZh
c3QvZG9tL1JhbmdlL3JhbmdlLWluc2VydE5vZGUtc2VwYXJhdGUtZW5kQ29udGFpbmVyLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vUmFuZ2UvcmFuZ2UtaW5zZXJ0Tm9k
ZS1zZXBhcmF0ZS1lbmRDb250YWluZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20v
UmFuZ2UvcmFuZ2UtaW5zZXJ0Tm9kZS1zcGxpdHRleHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9SYW5nZS9yYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4dC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9SYW5nZS9yZXNvdXJjZXMvcmFuZ2UtaW5zZXJ0Tm9k
ZS1zZXBhcmF0ZS1lbmRDb250YWluZXIuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL1Jh
bmdlL3Jlc291cmNlcy9yYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4dC5qczogQWRkZWQuCisKIDIw
MDgtMDEtMTIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRh
dGUgZXhwZWN0ZWQgcmVzdWx0cyBmb3IgZmFzdC9yZXBsYWNlZC9pbWFnZS1tYXAtZXhwZWN0ZWQg
YWZ0ZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLWluc2Vy
dE5vZGUtc2VwYXJhdGUtZW5kQ29udGFpbmVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL1JhbmdlL3JhbmdlLWluc2VydE5vZGUtc2VwYXJhdGUtZW5kQ29udGFpbmVyLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTNjYTVhCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmFuZ2UtaW5zZXJ0Tm9k
ZS1zZXBhcmF0ZS1lbmRDb250YWluZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjIgQEAKK1Rl
c3QgZm9yIHByb3BlciBiZWhhdmlvciBvZiBSYW5nZS5pbnNlcnROb2RlKGRvY3VtZW50RnJhZ21l
bnQpIHdoZW4gc3RhcnRDb250YWluZXIgIT0gZW5kQ29udGFpbmVyCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIHIudG9TdHJpbmcoKSBpcyAiQUJDIgorUEFTUyBwLmNoaWxk
Tm9kZXMubGVuZ3RoIGlzIDQKK1BBU1MgcC5jaGlsZE5vZGVzWzBdIGlzIHQxCitQQVNTIHAuY2hp
bGROb2Rlc1sxXSBpcyB0MworUEFTUyBwLmNoaWxkTm9kZXNbMl0gaXMgdDQKK1BBU1MgcC5jaGls
ZE5vZGVzWzNdIGlzIHQyCitQQVNTIHIuY29sbGFwc2VkIGlzIGZhbHNlCitQQVNTIHIuY29tbW9u
QW5jZXN0b3JDb250YWluZXIgaXMgcAorUEFTUyByLnN0YXJ0Q29udGFpbmVyIGlzIHAKK1BBU1Mg
ci5zdGFydE9mZnNldCBpcyAxCitQQVNTIHIuZW5kQ29udGFpbmVyIGlzIHQyCitQQVNTIHIuZW5k
T2Zmc2V0IGlzIDMKK1BBU1Mgci50b1N0cmluZygpIGlzICJQUVJYWVpBQkMiCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmFuZ2UtaW5zZXJ0Tm9kZS1zZXBhcmF0ZS1lbmRDb250
YWluZXIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLWluc2VydE5vZGUt
c2VwYXJhdGUtZW5kQ29udGFpbmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZTMxZmYyMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1Jh
bmdlL3JhbmdlLWluc2VydE5vZGUtc2VwYXJhdGUtZW5kQ29udGFpbmVyLmh0bWwKQEAgLTAsMCAr
MSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9yYW5nZS1pbnNlcnROb2RlLXNlcGFyYXRlLWVuZENvbnRhaW5lci5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9SYW5nZS9yYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4dC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9SYW5nZS9yYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4dC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ0YzJhNAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3JhbmdlLWluc2VydE5vZGUtc3Bs
aXR0ZXh0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIyIEBACitUZXN0IGZvciBwcm9wZXIgYmVo
YXZpb3Igb2YgUmFuZ2UuaW5zZXJ0Tm9kZSB3aGVuIHNwbGl0dGluZyB0ZXh0IG5vZGVzCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHAuY2hpbGROb2Rlcy5sZW5ndGggaXMg
MworUEFTUyBwLmNoaWxkTm9kZXNbMF0gaXMgdDEKK1BBU1MgcC5jaGlsZE5vZGVzWzBdLmRhdGEg
aXMgIjEyIgorUEFTUyBwLmNoaWxkTm9kZXNbMV0gaXMgdDIKK1BBU1MgcC5jaGlsZE5vZGVzWzFd
LmRhdGEgaXMgIkFCQ0RFIgorUEFTUyBwLmNoaWxkTm9kZXNbMl0uZGF0YSBpcyAiMzQ1IgorUEFT
UyByLmNvbGxhcHNlZCBpcyBmYWxzZQorUEFTUyByLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIGlz
IHAKK1BBU1Mgci5zdGFydENvbnRhaW5lciBpcyB0MQorUEFTUyByLnN0YXJ0T2Zmc2V0IGlzIDIK
K1BBU1Mgci5lbmRDb250YWluZXIgaXMgdDMKK1BBU1Mgci5lbmRPZmZzZXQgaXMgMQorUEFTUyBy
LnRvU3RyaW5nKCkgaXMgIkFCQ0RFMyIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5n
ZS9yYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4dC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
UmFuZ2UvcmFuZ2UtaW5zZXJ0Tm9kZS1zcGxpdHRleHQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43MDBiYzBhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vUmFuZ2UvcmFuZ2UtaW5zZXJ0Tm9kZS1zcGxpdHRleHQuaHRtbApAQCAtMCwwICsx
LDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3JhbmdlLWluc2VydE5vZGUtc3BsaXR0ZXh0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jlc291
cmNlcy9yYW5nZS1pbnNlcnROb2RlLXNlcGFyYXRlLWVuZENvbnRhaW5lci5qcyBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL1JhbmdlL3Jlc291cmNlcy9yYW5nZS1pbnNlcnROb2RlLXNlcGFyYXRlLWVu
ZENvbnRhaW5lci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODIxYjI1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmVzb3VyY2Vz
L3JhbmdlLWluc2VydE5vZGUtc2VwYXJhdGUtZW5kQ29udGFpbmVyLmpzCkBAIC0wLDAgKzEsMzgg
QEAKK2Rlc2NyaXB0aW9uKCdUZXN0IGZvciBwcm9wZXIgYmVoYXZpb3Igb2YgUmFuZ2UuaW5zZXJ0
Tm9kZShkb2N1bWVudEZyYWdtZW50KSB3aGVuIHN0YXJ0Q29udGFpbmVyICE9IGVuZENvbnRhaW5l
cicpOworCit2YXIgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsKK3ZhciB0MSA9IGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCcxMjM0NScpOworcC5hcHBlbmRDaGlsZCh0MSk7Cit2YXIg
dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnQUJDREUnKTsKK3AuYXBwZW5kQ2hpbGQodDIp
OworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwKTsKK3ZhciByID0gZG9jdW1lbnQuY3JlYXRl
UmFuZ2UoKTsKK3Iuc2V0U3RhcnQocCwgMSk7CityLnNldEVuZCh0MiwgMyk7CitzaG91bGRCZUVx
dWFsVG9TdHJpbmcoInIudG9TdHJpbmcoKSIsICJBQkMiKTsKKwordmFyIGRmID0gZG9jdW1lbnQu
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwordmFyIHQzID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoIlBRUiIpOwordmFyIHQ0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlhZWiIpOworZGYu
YXBwZW5kQ2hpbGQodDMpOworZGYuYXBwZW5kQ2hpbGQodDQpOworci5pbnNlcnROb2RlKGRmKTsK
Kworc2hvdWxkQmUoInAuY2hpbGROb2Rlcy5sZW5ndGgiLCAiNCIpOworc2hvdWxkQmUoInAuY2hp
bGROb2Rlc1swXSIsICJ0MSIpOworc2hvdWxkQmUoInAuY2hpbGROb2Rlc1sxXSIsICJ0MyIpOwor
c2hvdWxkQmUoInAuY2hpbGROb2Rlc1syXSIsICJ0NCIpOworc2hvdWxkQmUoInAuY2hpbGROb2Rl
c1szXSIsICJ0MiIpOworCitzaG91bGRCZUZhbHNlKCJyLmNvbGxhcHNlZCIpOworc2hvdWxkQmUo
InIuY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCAicCIpOworc2hvdWxkQmUoInIuc3RhcnRDb250
YWluZXIiLCAicCIpOworc2hvdWxkQmUoInIuc3RhcnRPZmZzZXQiLCAiMSIpOworc2hvdWxkQmUo
InIuZW5kQ29udGFpbmVyIiwgInQyIik7CitzaG91bGRCZSgici5lbmRPZmZzZXQiLCAiMyIpOwor
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyLnRvU3RyaW5nKCkiLCAiUFFSWFlaQUJDIikKKworLy8g
Y2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzCitkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHApOwor
Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL1JhbmdlL3Jlc291cmNlcy9yYW5nZS1pbnNlcnROb2RlLXNwbGl0dGV4dC5qcyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3Jlc291cmNlcy9yYW5nZS1pbnNlcnROb2RlLXNw
bGl0dGV4dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDhhMmE0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2UvcmVzb3VyY2VzL3Jh
bmdlLWluc2VydE5vZGUtc3BsaXR0ZXh0LmpzCkBAIC0wLDAgKzEsMzMgQEAKK2Rlc2NyaXB0aW9u
KCdUZXN0IGZvciBwcm9wZXIgYmVoYXZpb3Igb2YgUmFuZ2UuaW5zZXJ0Tm9kZSB3aGVuIHNwbGl0
dGluZyB0ZXh0IG5vZGVzJyk7CisKK3ZhciBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcp
OwordmFyIHQxID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJzEyMzQ1Jyk7CitwLmFwcGVuZENo
aWxkKHQxKTsKK3ZhciB0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdBQkNERScpOworZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChwKTsKK3ZhciByID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2Uo
KTsKK3Iuc2V0U3RhcnQodDEsIDIpOworci5zZXRFbmQodDEsIDMpOworci5pbnNlcnROb2RlKHQy
KTsKKworc2hvdWxkQmUoInAuY2hpbGROb2Rlcy5sZW5ndGgiLCAiMyIpOworc2hvdWxkQmUoInAu
Y2hpbGROb2Rlc1swXSIsICJ0MSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJwLmNoaWxkTm9k
ZXNbMF0uZGF0YSIsICIxMiIpOworc2hvdWxkQmUoInAuY2hpbGROb2Rlc1sxXSIsICJ0MiIpOwor
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJwLmNoaWxkTm9kZXNbMV0uZGF0YSIsICJBQkNERSIpOwor
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJwLmNoaWxkTm9kZXNbMl0uZGF0YSIsICIzNDUiKTsKKwor
dmFyIHQzID0gcC5jaGlsZE5vZGVzWzJdOworCitzaG91bGRCZUZhbHNlKCJyLmNvbGxhcHNlZCIp
Oworc2hvdWxkQmUoInIuY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCAicCIpOworc2hvdWxkQmUo
InIuc3RhcnRDb250YWluZXIiLCAidDEiKTsKK3Nob3VsZEJlKCJyLnN0YXJ0T2Zmc2V0IiwgIjIi
KTsKK3Nob3VsZEJlKCJyLmVuZENvbnRhaW5lciIsICJ0MyIpOworc2hvdWxkQmUoInIuZW5kT2Zm
c2V0IiwgIjEiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygici50b1N0cmluZygpIiwgIkFCQ0RF
MyIpCisKKy8vIGNsZWFuIHVwIGFmdGVyIG91cnNlbHZlcworZG9jdW1lbnQuYm9keS5yZW1vdmVD
aGlsZChwKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDUxMzVjM2MuLjMwZmJi
ZjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMDgtMDEtMTMgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJh
bmdlLmluc2VydE5vZGUgZG9lcyBub3QgdXBkYXRlIGVuZENvbnRhaW5lciBlbmRJbmRleCBjb3Jy
ZWN0bHkKKyAgICAgICAgaW4gdGhlIGNhc2Ugd2hlcmUgaXQgaGFkIHRvIHNwbGl0IGEgdGV4dCBu
b2RlLgorICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc2
NQorCisgICAgICAgIFRlc3RzOiBmYXN0L2RvbS9SYW5nZS9yYW5nZS1pbnNlcnROb2RlLXNlcGFy
YXRlLWVuZENvbnRhaW5lci5odG1sCisgICAgICAgICAgICAgICBmYXN0L2RvbS9SYW5nZS9yYW5n
ZS1pbnNlcnROb2RlLXNwbGl0dGV4dC5odG1sCisKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6Omluc2VydE5vZGUpOiBoYW5kbGUgdGhlIHNwbGl0VGV4
dCBjYXNlIGNvcnJlY3RseS4KKwogMjAwOC0wMS0xMiAgUm9kbmV5IERhd2VzICA8ZG9iZXlAd2F5
b2Z0aGVtb25rZXkuY29tPgogCiAgICAgICAgIEd0ayBkZWJ1ZyBidWlsZCBmaXguICBSZXZpZXdl
ZCBieSBNYXJrIFJvd2UuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAgYi9XZWJD
b3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggYThjNjhkYi4uZjk5N2JmMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtOTc5LDYg
Kzk3OSw4IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUmFuZ2U6OmNsb25lQ29udGVu
dHMoIGludCAmZWMgICkKIAogdm9pZCBSYW5nZTo6aW5zZXJ0Tm9kZShQYXNzUmVmUHRyPE5vZGU+
IG5ld05vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIGVjID0gMDsKKwogICAgIGlmICht
X2RldGFjaGVkKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJl
dHVybjsKQEAgLTEwMzAsOCArMTAzMiw3IEBAIHZvaWQgUmFuZ2U6Omluc2VydE5vZGUoUGFzc1Jl
ZlB0cjxOb2RlPiBuZXdOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7CisgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKCFjaGVja0FnYWluc3QtPmNoaWxkVHlwZUFsbG93ZWQobmV3
Tm9kZS0+bm9kZVR5cGUoKSkpIHsKICAgICAgICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1Rf
RVJSOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTA0Niw3ICsxMDQ3LDcgQEAgdm9pZCBSYW5n
ZTo6aW5zZXJ0Tm9kZShQYXNzUmVmUHRyPE5vZGU+IG5ld05vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogICAgIH0KIAogICAgIC8vIElOVkFMSURfTk9ERV9UWVBFX0VSUjogUmFpc2VkIGlmIG5ld05v
ZGUgaXMgYW4gQXR0ciwgRW50aXR5LCBOb3RhdGlvbiwgb3IgRG9jdW1lbnQgbm9kZS4KLSAgICBp
ZiggbmV3Tm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpBVFRSSUJVVEVfTk9ERSB8fAorICAgIGlm
IChuZXdOb2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkFUVFJJQlVURV9OT0RFIHx8CiAgICAgICAg
IG5ld05vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RU5USVRZX05PREUgfHwKICAgICAgICAgbmV3
Tm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpOT1RBVElPTl9OT0RFIHx8CiAgICAgICAgIG5ld05v
ZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgewpAQCAtMTA1NCwyNCArMTA1
NSwzMSBAQCB2b2lkIFJhbmdlOjppbnNlcnROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Tm9kZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB1bnNpZ25l
ZCBvZmZzZXREZWx0YSA9IDA7Ci0gICAgaWYgKG1fc3RhcnRDb250YWluZXIgPT0gbV9lbmRDb250
YWluZXIpIHsKLSAgICAgICAgYm9vbCBpc0ZyYWdtZW50ID0gbmV3Tm9kZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFOwotICAgICAgICBvZmZzZXREZWx0YSA9IGlz
RnJhZ21lbnQgPyBuZXdOb2RlLT5jaGlsZE5vZGVDb3VudCgpIDogMTsKLSAgICB9Ci0gICAgCi0g
ICAgaWYobV9zdGFydENvbnRhaW5lci0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwK
LSAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJ
T05fTk9ERSkgewotICAgICAgICBlYyA9IDA7CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0RGVsdGEg
PSAwOworICAgIGlmIChtX3N0YXJ0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRf
Tk9ERSB8fAorICAgICAgICBtX3N0YXJ0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OkNE
QVRBX1NFQ1RJT05fTk9ERSkgewogICAgICAgICBSZWZQdHI8VGV4dD4gbmV3VGV4dCA9IHN0YXRp
Y19jYXN0PFRleHQqPihtX3N0YXJ0Q29udGFpbmVyLmdldCgpKS0+c3BsaXRUZXh0KG1fc3RhcnRP
ZmZzZXQsIGVjKTsKICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmIChtX3N0YXJ0Q29udGFpbmVyID09IG1fZW5kQ29udGFpbmVyKQorICAgICAgICAgICAg
ZW5kT2Zmc2V0RGVsdGEgPSAtbV9zdGFydE9mZnNldDsKKwogICAgICAgICBtX3N0YXJ0Q29udGFp
bmVyLT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9yZShuZXdOb2RlLCBuZXdUZXh0LmdldCgpLCBl
Yyk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9lbmRD
b250YWluZXIgPSBuZXdUZXh0OwogICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3N0YXJ0Q29u
dGFpbmVyID09IG1fZW5kQ29udGFpbmVyKSB7CisgICAgICAgICAgICBib29sIGlzRnJhZ21lbnQg
PSBuZXdOb2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU7Cisg
ICAgICAgICAgICBlbmRPZmZzZXREZWx0YSA9IGlzRnJhZ21lbnQgPyBuZXdOb2RlLT5jaGlsZE5v
ZGVDb3VudCgpIDogMTsKKyAgICAgICAgfQorCiAgICAgICAgIG1fc3RhcnRDb250YWluZXItPmlu
c2VydEJlZm9yZShuZXdOb2RlLCBtX3N0YXJ0Q29udGFpbmVyLT5jaGlsZE5vZGUobV9zdGFydE9m
ZnNldCksIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICAKLSAgICBtX2VuZE9mZnNldCArPSBvZmZzZXREZWx0YTsKKyAgICBtX2VuZE9mZnNldCAr
PSBlbmRPZmZzZXREZWx0YTsKIH0KIAogU3RyaW5nIFJhbmdlOjp0b1N0cmluZyhFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QK
</data>
<flag name="review"
          id="8049"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>