<?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>72404</bug_id>
          
          <creation_ts>2011-11-15 12:25:54 -0800</creation_ts>
          <short_desc>Could save a lot of memory in CharacterData by not always storing a String</short_desc>
          <delta_ts>2011-12-05 22:13:25 -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>DOM</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="Ojan Vafai">ojan</reporter>
          <assigned_to name="Erik Arvidsson">arv</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eae</cc>
    
    <cc>ggaren</cc>
    
    <cc>koivisto</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>503152</commentid>
    <comment_count>0</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-11-15 12:25:54 -0800</bug_when>
    <thetext>Below is the dump just of whitespace text nodes from the HTML spec (string followed by count of that string occurring). If we stored atomic strings in these cases, we&apos;d save a lot of memory. There are also non-whitespace strings that are repeated many times in the spec (e.g. &quot;Unique &quot; is in &gt;30k text nodes). 

For a short whitespace string that conforms to the list of 5 valid space characters in http://www.whatwg.org/specs/web-apps/current-work/multipage/common-microsyntaxes.html#space-character, we could even store it as a single unsigned. Looking at the HTML spec, this is actually by far the common case.

The HTML spec is a bit unique in it&apos;s content, but it&apos;s certainly a common pattern for sites to have repeated whitespace due to formatting their HTML to be readable.


&quot;

  &quot; 8197
&quot;
   &quot; 4172
&quot;
    &quot; 1052
&quot;
  &quot; 469
&quot;
  
&quot; 1
&quot;
&quot; 413
&quot;
 &quot; 21
&quot;
     &quot; 3099
&quot;
      &quot; 224
&quot;
       &quot; 497
&quot;
        &quot; 96
&quot;
         &quot; 157
&quot; &quot; 19240
&quot;




  &quot; 52
&quot;



  &quot; 242
&quot;

&quot; 122
&quot;


  &quot; 472
&quot;

   &quot; 6117
&quot;


   &quot; 242
&quot;



   &quot; 4
&quot;


&quot; 17
&quot;

    &quot; 3126
&quot;

     &quot; 1132
&quot;






  &quot; 2
&quot;





  &quot; 7
&quot;

      &quot; 545
&quot;

       &quot; 445
&quot;


     &quot; 78
&quot;

 &quot; 2
&quot;

        &quot; 166
&quot;

         &quot; 140
&quot;
 
  &quot; 1
&quot;

          &quot; 51
&quot;

           &quot; 26
&quot;

            &quot; 11
&quot;
            &quot; 7
&quot;

              &quot; 2
&quot;

             &quot; 3
&quot;


       &quot; 29
&quot;


    &quot; 6
&quot;          &quot; 1
&quot;     &quot; 1
&quot; 

      &quot; 7
&quot; 

       &quot; 7
&quot;
  



  &quot; 1
&quot;

  

  &quot; 7
&quot;   &quot; 2
&quot;
          &quot; 9
&quot;                                                          &quot; 1
&quot;
                                                                            &quot; 1
&quot;

                                   
   &quot; 1
&quot;







  &quot; 2
&quot;
  
  &quot; 2
&quot;
 
    &quot; 1
&quot;


         &quot; 8
&quot;




&quot; 1
&quot;
                                   
  &quot; 1
&quot;



&quot; 1
&quot;


      &quot; 1
&quot; &quot; 1
&quot; &quot; 1
&quot; &quot; 1
&quot; &quot; 1
&quot; &quot; 2
&quot; &quot; 1
&quot; &quot; 3
&quot; &quot; 1
&quot; &quot; 1
&quot;  &quot; 1
&quot; &quot; 2
&quot;  


  &quot; 1
&quot;
           &quot; 8
&quot;   

   &quot; 2
&quot;

 
&quot; 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503189</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-15 13:25:14 -0800</bug_when>
    <thetext>Neat ideas. I think yours are are:

1) Use AtomicString instead of String.

2) Use a count of U+0020 space characters instead of a string.

3) Use a count of HTML space characters instead of a string. Not clear on how this would work.

Some other ideas:

4) Store the text in the node itself instead of in a separate object, allocating at a larger size to do so. This requires refactoring string operations so they can work directly on text without having to allocate a String object. That’s something I’ve been thinking that refactoring is something we should do.

5) Keep the original text around and reference count it; have the strings created by the HTML parser use pointers and lengths pointing at a single large character buffer instead of allocating separate StringImpl objects for each.

I think (1) is the easiest to do correctly and should be tried to see what the performance cost would be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503192</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-15 13:26:49 -0800</bug_when>
    <thetext>How much memory does CharacterData account for on an average web page?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503201</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-15 13:33:31 -0800</bug_when>
    <thetext>One quick hack would be for the parser to check when parsing whether a string is entirely whitespace and to use AtomicStrings just for those cases (maybe that&apos;s what you were suggesting).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503206</commentid>
    <comment_count>4</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2011-11-15 13:35:14 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; One quick hack would be for the parser to check when parsing whether a string is entirely whitespace and to use AtomicStrings just for those cases (maybe that&apos;s what you were suggesting).

That was pretty much what we were thinking ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503209</commentid>
    <comment_count>5</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-11-15 13:36:03 -0800</bug_when>
    <thetext>The way I was picturing option 3 work is that we&apos;d just do it for strings that only contain U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), U+000A LINE FEED (LF) and U+000D CARRIAGE RETURN (CR). That way, you can use 2 bits per character and could encode strings up to 16 characters long as a single unsigned. I think this is probably too complicated to be worth it.

Option 5 sounds awesomest, but complicated.

I agree that we should try the AtomicString approach first just for whitespace strings (possibly with a length limit?). It&apos;s the simplest and gets the vast majority of the memory benefits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503217</commentid>
    <comment_count>6</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-11-15 13:41:07 -0800</bug_when>
    <thetext>BTW, here&apos;s the script I&apos;m using to count the whitespace text nodes on a page:

var hash = {};
function walk(node) {
    if (node.nodeType == Node.TEXT_NODE || node.nodeType == Node.COMMENT_NODE || node.nodeType == Node.PROCESSING_INSTRUCTION_NODE) {
        var value = node.nodeValue;
        if (!hash[value])
            hash[value] = 0;
        hash[value] += 1;
    }
    for (var i = 0, len = node.childNodes.length; i &lt; len; i++) {
        walk(node.childNodes[i]);
    }
}

walk(document.body);
var uniqueStrings = 0;
for (var value in hash) {
    var count = hash[value];
    if (value.match(/^\s*$/)) {
        console.log(JSON.stringify(value), count);
        uniqueStrings++;
    }
}
console.log(uniqueStrings);

And here&apos;s a more readable dump of the HTML spec&apos;s whitespace nodes:
&quot;\n\n  &quot; 8197
&quot;\n   &quot; 4172
&quot;\n    &quot; 1052
&quot;\n  &quot; 471
&quot;\n  \n&quot; 1
&quot;\n&quot; 419
&quot;\n &quot; 21
&quot;\n     &quot; 3099
&quot;\n      &quot; 228
&quot;\n       &quot; 497
&quot;\n        &quot; 96
&quot;\n         &quot; 157
&quot; &quot; 19240
&quot;\n\n\n\n\n  &quot; 52
&quot;\n\n\n\n  &quot; 242
&quot;\n\n&quot; 122
&quot;\n\n\n  &quot; 472
&quot;\n\n   &quot; 6117
&quot;\n\n\n   &quot; 242
&quot;\n\n\n\n   &quot; 4
&quot;\n\n\n&quot; 17
&quot;\n\n    &quot; 3126
&quot;\n\n     &quot; 1132
&quot;\n\n\n\n\n\n\n  &quot; 2
&quot;\n\n\n\n\n\n  &quot; 7
&quot;\n\n      &quot; 545
&quot;\n\n       &quot; 445
&quot;\n\n\n     &quot; 78
&quot;\n\n &quot; 2
&quot;\n\n        &quot; 166
&quot;\n\n         &quot; 140
&quot;\n \n  &quot; 1
&quot;\n\n          &quot; 51
&quot;\n\n           &quot; 26
&quot;\n\n            &quot; 11
&quot;\n            &quot; 7
&quot;\n\n              &quot; 2
&quot;\n\n             &quot; 3
&quot;\n\n\n       &quot; 29
&quot;\n\n\n    &quot; 6
&quot;          &quot; 1
&quot;     &quot; 1
&quot; \n\n      &quot; 7
&quot; \n\n       &quot; 7
&quot;\n  \n\n\n\n  &quot; 1
&quot;\n\n  \n\n  &quot; 7
&quot;   &quot; 2
&quot;\n          &quot; 9
&quot;                                                          &quot; 1
&quot;\n                                                                            &quot; 1
&quot;\n\n                                   \n   &quot; 1
&quot;\n\n\n\n\n\n\n\n  &quot; 2
&quot;\n  \n  &quot; 2
&quot;\n \n    &quot; 1
&quot;\n\n\n         &quot; 8
&quot;\n\n\n\n\n&quot; 1
&quot;\n                                   \n  &quot; 1
&quot;\n\n\n\n&quot; 1
&quot;\n\n\n      &quot; 1
&quot; &quot; 1
&quot; &quot; 1
&quot; &quot; 1
&quot; &quot; 1
&quot; &quot; 2
&quot; &quot; 1
&quot; &quot; 3
&quot; &quot; 1
&quot; &quot; 1
&quot;  &quot; 1
&quot; &quot; 2
&quot;&quot; 2
&quot;  \n\n\n  &quot; 1
&quot;\n           &quot; 8
&quot;   \n\n   &quot; 2
&quot;\n\n \n&quot; 1
75</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503222</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-15 13:48:36 -0800</bug_when>
    <thetext>Nice find!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512236</commentid>
    <comment_count>8</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2011-11-30 16:45:55 -0800</bug_when>
    <thetext>I started looking at this and I hit the limitation of my C++ knowledge.

To make this worth it, it seems like we would need to use a union type. However, union types cannot have POD members.

I talked to Jeffrey Yasskin (C++ guru at Google) and he pointed me to the ManualConstructor pattern (BSD licensed):

http://code.google.com/p/google-ctemplate/source/browse/trunk/src/base/manual_constructor.h

Does WTF have anything similar? If not, can we add something like it? (Preferably a port of the GTL code since according to Jeffrey it is very hard to get this right).

Maybe I&apos;m missing something and there is a simpler way to do this?

Also, when testing this I used ActivityMonitor. What is a better tool to see the memory usage of this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512305</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-30 18:13:29 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I talked to Jeffrey Yasskin (C++ guru at Google) and he pointed me to the ManualConstructor pattern (BSD licensed):
&gt; 
&gt; Does WTF have anything similar?

It does have something like it, AlignedBuffer, used in the Vector and HashTable class. It could use some additional love to make it handle type conversion more like that ManualConstructor class.

&gt; If not, can we add something like it? (Preferably a port of the GTL code since according to Jeffrey it is very hard to get this right).

A port of the code is OK, but wouldn’t be my first choice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512322</commentid>
    <comment_count>10</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2011-11-30 18:43:10 -0800</bug_when>
    <thetext>Darin, thanks for your comment. I took a quick look at AlignedBuffer and it seem to cover this use case.

I&apos;ll try to add an AlignedBuffer to my patch in progress tomorrow.

Just to make things clear. Here are my current thought.

- Use 1 bit in NodeFlags (currently 2 remaining) to determine whether we have a white space node or not.
- Use an AlignedBuffer&lt;sizeof(String), WTF_ALIGN_OF(String)&gt;
- Add an assert that sizeof(String) == sizeof(AtomicString)
- Based on the flag return a String or AtomicString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513217</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-01 15:58:00 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; - Use 1 bit in NodeFlags (currently 2 remaining) to determine whether we have a white space node or not.
&gt; - Use an AlignedBuffer&lt;sizeof(String), WTF_ALIGN_OF(String)&gt;
&gt; - Add an assert that sizeof(String) == sizeof(AtomicString)
&gt; - Based on the flag return a String or AtomicString.

If the two different things you are storing as a union either a String or an AtomicString, then I think you are over-engineering this. The StringImpl object already has a flag in it that tells whether it is in the AtomicString table, and simply constructing an AtomicString then storing it in a String accomplishes what you want to do, making it share a single unique copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513236</commentid>
    <comment_count>12</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2011-12-01 16:17:14 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; - Use 1 bit in NodeFlags (currently 2 remaining) to determine whether we have a white space node or not.
&gt; &gt; - Use an AlignedBuffer&lt;sizeof(String), WTF_ALIGN_OF(String)&gt;
&gt; &gt; - Add an assert that sizeof(String) == sizeof(AtomicString)
&gt; &gt; - Based on the flag return a String or AtomicString.
&gt; 
&gt; If the two different things you are storing as a union either a String or an AtomicString, then I think you are over-engineering this. The StringImpl object already has a flag in it that tells whether it is in the AtomicString table, and simply constructing an AtomicString then storing it in a String accomplishes what you want to do, making it share a single unique copy.

I was just about to upload a WIP patch that uses AlignedBuffer. It saves about 10megs (5%) on the HTML5.

I&apos;ll still upload it for people to look at but I&apos;ll investigate the String/AtomicString case too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513242</commentid>
    <comment_count>13</comment_count>
      <attachid>117514</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2011-12-01 16:21:58 -0800</bug_when>
    <thetext>Created attachment 117514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513288</commentid>
    <comment_count>14</comment_count>
      <attachid>117525</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2011-12-01 17:03:08 -0800</bug_when>
    <thetext>Created attachment 117525
WIP patch using AtomicString instead of AlignedBuffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513291</commentid>
    <comment_count>15</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2011-12-01 17:03:47 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=117525) [details]
&gt; WIP patch using AtomicString instead of AlignedBuffer

This patch is a mess but it works :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513294</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-01 17:04:46 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; Created an attachment (id=117525) [details] [details]
&gt; &gt; WIP patch using AtomicString instead of AlignedBuffer
&gt; 
&gt; This patch is a mess but it works :-)

You can accomplish the same thing with a tiny fraction of the code. The Text and CharacterData classes don’t even need to be changed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513301</commentid>
    <comment_count>17</comment_count>
      <attachid>117525</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-01 17:07:09 -0800</bug_when>
    <thetext>Comment on attachment 117525
WIP patch using AtomicString instead of AlignedBuffer

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

&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:383
&gt; +    attachAtSite(site, Text::createWhitespaceOnly(site.parent-&gt;document(), characters));

All you need to do here is this:

    attachAtSite(site, Text::create(site.parent-&gt;document(), AtomicString(characters).string());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514274</commentid>
    <comment_count>18</comment_count>
      <attachid>117712</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2011-12-02 16:50:49 -0800</bug_when>
    <thetext>Created attachment 117712
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514280</commentid>
    <comment_count>19</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2011-12-02 16:58:43 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Created an attachment (id=117712) [details]
&gt; Patch

On http://www.whatwg.org/specs/web-apps/current-work/ this saves about 5mb (out of 277). This seems too much to me. There are only 169049 characters used for whitespace nodes on that page so the memory saving should be about 340kb. Maybe this is due to how memory is allocated?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514328</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-02 18:06:11 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; On http://www.whatwg.org/specs/web-apps/current-work/ this saves about 5mb (out of 277). This seems too much to me. There are only 169049 characters used for whitespace nodes on that page so the memory saving should be about 340kb. Maybe this is due to how memory is allocated?

The savings are for all the StringImpl objects, not just the characters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514332</commentid>
    <comment_count>21</comment_count>
      <attachid>117712</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-02 18:14:10 -0800</bug_when>
    <thetext>Comment on attachment 117712
Patch

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

&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:350
&gt; +    if (whitespaceInfo == WhitespaceUnknown)
&gt; +        whitespaceInfo = isAllWhitespace(characters) ? AllWhitespace : NotAllWhitespace;

I think you should write this:

    // Strings composed entirely of whitespace are likely to be repeated.
    // Turn them into AtomicString so we share a single string for each.
    bool shouldUseAtomicString = whitespaceInfo == AllWhitespace
        || (whitespaceInfo == WhitespaceUnknown &amp;&amp; isAllWhitespace(characters));

&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:366
&gt; -        RefPtr&lt;Text&gt; textNode = Text::createWithLengthLimit(site.parent-&gt;document(), characters, currentPosition);
&gt; +        RefPtr&lt;Text&gt; textNode = Text::createWithLengthLimit(site.parent-&gt;document(), whitespaceInfo == AllWhitespace ? AtomicString(characters).string() : characters, currentPosition);

This code needs a comment explaining the policy. Or better, it could just use a boolean named shouldUseAtomicString and the comment could be above.

&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:369
&gt; -            textNode = Text::create(site.parent-&gt;document(), characters.substring(currentPosition));
&gt; +            textNode = Text::create(site.parent-&gt;document(), whitespaceInfo == AllWhitespace ? AtomicString(characters.substring(currentPosition)).string() : characters.substring(currentPosition));

It would be nice to put the substring into a local String so we don’t have to repeat that subexpression.

&gt; Source/WebCore/html/parser/HTMLConstructionSite.h:55
&gt; +    enum WhitespaceInfo {
&gt; +        AllWhitespace,
&gt; +        NotAllWhitespace,
&gt; +        WhitespaceUnknown
&gt; +    };

Since this is software, everything is “info”, so that seems like a non-helpful suffix, and abbreviated to boot! I didn’t think of a better name, though, and I did try for a few minutes.

I think it would be fine to have this at the namespace level instead of using a class member. Would make the call sites more readable.

&gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:276
&gt; -    String takeLeadingWhitespace()
&gt; +    AtomicString takeLeadingWhitespace()

Why is it helpful for this to return an AtomicString? It seems like extra unnecessary work and extra unnecessary change.

&gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:300
&gt; -    String takeRemainingWhitespace()
&gt; +    AtomicString takeRemainingWhitespace()

Why is it helpful for this to return an AtomicString?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515348</commentid>
    <comment_count>22</comment_count>
      <attachid>117932</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2011-12-05 13:28:15 -0800</bug_when>
    <thetext>Created attachment 117932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515359</commentid>
    <comment_count>23</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2011-12-05 13:34:08 -0800</bug_when>
    <thetext>Thanks again Darin. New patch is up.

I had one concern that I wanted to discuss before committing this. In WebKit1 the AtomicStringTable never gets cleaned up (Chromium kills the process when you leave the page/domain and I assume WebKit2 does something similar.). Maybe we should limit the whitespace text nodes in some way to reduce the amount of memory these strings will take up. One possible option would be to limit this to strings with less than 8 or 16 characters?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515399</commentid>
    <comment_count>24</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-05 14:32:57 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; In WebKit1 the AtomicStringTable never gets cleaned up

Sure it does. When the last reference to a string is removed the string is removed from the table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515457</commentid>
    <comment_count>25</comment_count>
      <attachid>117932</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-05 15:39:33 -0800</bug_when>
    <thetext>Comment on attachment 117932
Patch

Attachment 117932 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10728791

New failing tests:
svg/custom/linking-uri-01-b.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515649</commentid>
    <comment_count>26</comment_count>
      <attachid>117932</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-05 22:13:18 -0800</bug_when>
    <thetext>Comment on attachment 117932
Patch

Clearing flags on attachment: 117932

Committed r102095: &lt;http://trac.webkit.org/changeset/102095&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515650</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-05 22:13:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117514</attachid>
            <date>2011-12-01 16:21:58 -0800</date>
            <delta_ts>2011-12-01 17:03:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72404-20111201162157.patch</filename>
            <type>text/plain</type>
            <size>21374</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTRkMDBkNzIyOGRlNGQw
N2UwNTRmMmVjNzZhOTUwMDMyY2M1ZWVlZi4uZjM2MTY3NDM2Mjg2N2U4NjMyOGY3NTg4NGNiOTg4
YTk0ZmI1NzViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDExLTEyLTAxICBFcmlr
IEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ291bGQgc2F2ZSBhIGxv
dCBvZiBtZW1vcnkgaW4gQ2hhcmFjdGVyRGF0YSBieSBub3QgYWx3YXlzIHN0b3JpbmcgYSBTdHJp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDA0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV29yayBp
biBwcm9ncmVzcyEKKworICAgICAgICBUaGlzIHVzZXMgYSBBbGlnbmVkQnVmZmVyIHRvIHN0b3Jl
IGVpdGhlciBhIFN0cmluZyBvciBhbiBBdG9taWNTdHJpbmcuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpDaGFyYWN0ZXJEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkNoYXJhY3RlckRhdGE6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0
YTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpsZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c3Vic3RyaW5nRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBlbmREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNoYXJhY3RlckRhdGE6OmFwcGVuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hh
cmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRh
OjpkZWxldGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnJlcGxhY2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6Om5vZGVWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRhdGFJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNoYXJhY3RlckRhdGE6OnNldERhdGFXaXRob3V0VXBkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNoYXJhY3RlckRhdGE6OnNldERhdGFBbmRVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhcmFjdGVyRGF0YTo6dXBkYXRlUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFj
dGVyRGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJh
Y3RlckRhdGE6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRh
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjp+Q2hhcmFjdGVyRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpkYXRhQXNBdG9taWNTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6ZGF0YUFzU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNoYXJhY3RlckRhdGE6OnNldERhdGFBc0F0b21pY1N0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpzZXREYXRhQXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hhcmFjdGVyRGF0YTo6ZGVzdHJ1Y3REYXRhKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNBdG9taWNTdHJpbmdUZXh0Tm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjpzZXRJc0F0b21pY1N0cmluZ1RleHROb2RlKToKKyAgICAgICAgKiBk
b20vVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpjcmVhdGVXaGl0ZXNwYWNlT25s
eSk6CisgICAgICAgICogZG9tL1RleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHQ6OlRleHQp
OgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRXaGl0ZXNwYWNlVGV4dE5v
ZGUpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlckJ1ZmZlcik6CisKIDIwMTEtMTEtMzAg
IEphbWVzIFNpbW9uc2VuICA8c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCB2
YWxncmluZCBpc3N1ZSBpbiBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCmluZGV4IDIxYjUyYjM1ZmM2ODhmY2M4Yjc3NDM2
ODIzODQ0OWNiOTljMDlmNTIuLjNjOWEyMTA0MDFiY2IwZTE3MTU3MDRmY2ZhMjhhMzkxYjFjYmEy
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKQEAgLTM3LDEwICszNywzNCBA
QCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0NoYXJhY3Rl
ckRhdGE6OkNoYXJhY3RlckRhdGEoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRl
eHQsIENvbnN0cnVjdGlvblR5cGUgdHlwZSwgSXNBbGxXaGl0ZXNwYWNlIGlzQWxsV2hpdGVTcGFj
ZSkKKyAgICA6IE5vZGUoZG9jdW1lbnQsIHR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUgPT0gQ3Jl
YXRlQ29tbWVudCB8fCB0eXBlID09IENyZWF0ZVRleHQpOworICAgIEFTU0VSVChzaXplb2YoQXRv
bWljU3RyaW5nKSA9PSBzaXplb2YoU3RyaW5nKSk7CisgICAgQVNTRVJUKFdURl9BTElHTl9PRihB
dG9taWNTdHJpbmcpID09IFdURl9BTElHTl9PRihTdHJpbmcpKTsKKworICAgIGlmICh0ZXh0Lmlz
TnVsbCgpKQorICAgICAgICBzZXREYXRhQXNBdG9taWNTdHJpbmcoZW1wdHlBdG9tLCBOb0Rlc3Ry
dWN0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGlzQWxsV2hpdGVTcGFjZSA9PSBBbGxJc1do
aXRlc3BhY2UgfHwgaXNBbGxXaGl0ZVNwYWNlID09IFVua25vd25BbGxXaGl0ZXNwYWNlICYmIHRl
eHQuY29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQorICAgICAgICAgICAgc2V0RGF0YUFzQXRvbWlj
U3RyaW5nKHRleHQsIE5vRGVzdHJ1Y3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRE
YXRhQXNTdHJpbmcodGV4dCwgTm9EZXN0cnVjdCk7CisgICAgfQorfQorCitTdHJpbmcgQ2hhcmFj
dGVyRGF0YTo6ZGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKGlzQXRvbWljU3RyaW5nVGV4dE5vZGUo
KSkKKyAgICAgICAgcmV0dXJuIGRhdGFBc0F0b21pY1N0cmluZygpLnN0cmluZygpOworICAgIHJl
dHVybiBkYXRhQXNTdHJpbmcoKTsKK30KKwogdm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXREYXRhKGNv
bnN0IFN0cmluZyYgZGF0YSwgRXhjZXB0aW9uQ29kZSYpCiB7CiAgICAgY29uc3QgU3RyaW5nJiBu
b25OdWxsRGF0YSA9ICFkYXRhLmlzTnVsbCgpID8gZGF0YSA6IGVtcHR5U3RyaW5nKCk7Ci0gICAg
aWYgKG1fZGF0YSA9PSBub25OdWxsRGF0YSkKKyAgICBpZiAodGhpcy0+ZGF0YSgpID09IG5vbk51
bGxEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5n
dGgoKTsKQEAgLTQ5LDE4ICs3MywyNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29u
c3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2RlJikKICAgICBkb2N1bWVudCgpLT50ZXh0UmVt
b3ZlZCh0aGlzLCAwLCBvbGRMZW5ndGgpOwogfQogCit1bnNpZ25lZCBDaGFyYWN0ZXJEYXRhOjps
ZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBkYXRhKCkubGVuZ3RoKCk7Cit9CisKIFN0cmlu
ZyBDaGFyYWN0ZXJEYXRhOjpzdWJzdHJpbmdEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
Y291bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24o
b2Zmc2V0LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAg
ICByZXR1cm4gbV9kYXRhLnN1YnN0cmluZyhvZmZzZXQsIGNvdW50KTsKKyAgICByZXR1cm4gZGF0
YSgpLnN1YnN0cmluZyhvZmZzZXQsIGNvdW50KTsKIH0KIAogdW5zaWduZWQgQ2hhcmFjdGVyRGF0
YTo6cGFyc2VyQXBwZW5kRGF0YShjb25zdCBVQ2hhciogZGF0YSwgdW5zaWduZWQgZGF0YUxlbmd0
aCwgdW5zaWduZWQgbGVuZ3RoTGltaXQpCiB7Ci0gICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbV9k
YXRhLmxlbmd0aCgpOworICAgIC8vIEZJWE1FOiBUaGUgY2FzZSB3aGVyZSB3ZSBhZGQgYWxsIHdo
aXRlc3BhY2UgdG8gYWxsIHdoaXRlc3BhY2UgY2FuIGJlIGhhbmRsZWQgbW9yZSBlZmZpY2llbnRs
eS4KKyAgICBpZiAoaXNBdG9taWNTdHJpbmdUZXh0Tm9kZSgpKQorICAgICAgICBzZXREYXRhQXNT
dHJpbmcodGhpcy0+ZGF0YSgpKTsKKworICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgp
OwogCiAgICAgdW5zaWduZWQgZW5kID0gbWluKGRhdGFMZW5ndGgsIGxlbmd0aExpbWl0IC0gb2xk
TGVuZ3RoKTsKIApAQCAtNzcsNyArMTEwLDExIEBAIHVuc2lnbmVkIENoYXJhY3RlckRhdGE6OnBh
cnNlckFwcGVuZERhdGEoY29uc3QgVUNoYXIqIGRhdGEsIHVuc2lnbmVkIGRhdGFMZW5ndGgsCiAg
ICAgaWYgKCFlbmQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9kYXRhLmFwcGVuZChkYXRh
LCBlbmQpOworICAgIHRoaXMtPmRhdGEoKS5hcHBlbmQoZGF0YSwgZW5kKTsKKworICAgIC8vIEZJ
WE1FOgorICAgIGlmICh0aGlzLT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCisgICAgICAgIHNl
dERhdGFBc0F0b21pY1N0cmluZyh0aGlzLT5kYXRhKCkpOwogCiAgICAgdXBkYXRlUmVuZGVyZXIo
b2xkTGVuZ3RoLCAwKTsKICAgICAvLyBXZSBkb24ndCBjYWxsIGRpc3BhdGNoTW9kaWZpZWRFdmVu
dCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUKQEAgLTkwLDEwICsxMjcsMTAgQEAgdW5z
aWduZWQgQ2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0YShjb25zdCBVQ2hhciogZGF0YSwg
dW5zaWduZWQgZGF0YUxlbmd0aCwKIAogdm9pZCBDaGFyYWN0ZXJEYXRhOjphcHBlbmREYXRhKGNv
bnN0IFN0cmluZyYgZGF0YSwgRXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAgU3RyaW5nIG5ld1N0ciA9
IG1fZGF0YTsKKyAgICBTdHJpbmcgbmV3U3RyID0gdGhpcy0+ZGF0YSgpOwogICAgIG5ld1N0ci5h
cHBlbmQoZGF0YSk7CiAKLSAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwgbV9kYXRhLmxlbmd0
aCgpLCAwLCBkYXRhLmxlbmd0aCgpKTsKKyAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwgbGVu
Z3RoKCksIDAsIGRhdGEubGVuZ3RoKCkpOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjYWxs
IHRleHRJbnNlcnRlZCBoZXJlPwogfQpAQCAtMTA0LDcgKzE0MSw3IEBAIHZvaWQgQ2hhcmFjdGVy
RGF0YTo6aW5zZXJ0RGF0YSh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgZGF0YSwgRXhj
ZXB0aW9uQ29kCiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgbmV3
U3RyID0gbV9kYXRhOworICAgIFN0cmluZyBuZXdTdHIgPSB0aGlzLT5kYXRhKCk7CiAgICAgbmV3
U3RyLmluc2VydChkYXRhLCBvZmZzZXQpOwogCiAgICAgc2V0RGF0YUFuZFVwZGF0ZShuZXdTdHIs
IG9mZnNldCwgMCwgZGF0YS5sZW5ndGgoKSk7CkBAIC0xMjQsNyArMTYxLDcgQEAgdm9pZCBDaGFy
YWN0ZXJEYXRhOjpkZWxldGVEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQsIEV4
Y2VwdGlvbkNvZGUmIGUKICAgICBlbHNlCiAgICAgICAgIHJlYWxDb3VudCA9IGNvdW50OwogCi0g
ICAgU3RyaW5nIG5ld1N0ciA9IG1fZGF0YTsKKyAgICBTdHJpbmcgbmV3U3RyID0gZGF0YSgpOwog
ICAgIG5ld1N0ci5yZW1vdmUob2Zmc2V0LCByZWFsQ291bnQpOwogCiAgICAgc2V0RGF0YUFuZFVw
ZGF0ZShuZXdTdHIsIG9mZnNldCwgY291bnQsIDApOwpAQCAtMTQ0LDcgKzE4MSw3IEBAIHZvaWQg
Q2hhcmFjdGVyRGF0YTo6cmVwbGFjZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3Vu
dCwgY29uc3QgU3RyaW5nJiBkCiAgICAgZWxzZQogICAgICAgICByZWFsQ291bnQgPSBjb3VudDsK
IAotICAgIFN0cmluZyBuZXdTdHIgPSBtX2RhdGE7CisgICAgU3RyaW5nIG5ld1N0ciA9IHRoaXMt
PmRhdGEoKTsKICAgICBuZXdTdHIucmVtb3ZlKG9mZnNldCwgcmVhbENvdW50KTsKICAgICBuZXdT
dHIuaW5zZXJ0KGRhdGEsIG9mZnNldCk7CiAKQEAgLTE1NywxMiArMTk0LDI3IEBAIHZvaWQgQ2hh
cmFjdGVyRGF0YTo6cmVwbGFjZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwg
Y29uc3QgU3RyaW5nJiBkCiAKIFN0cmluZyBDaGFyYWN0ZXJEYXRhOjpub2RlVmFsdWUoKSBjb25z
dAogewotICAgIHJldHVybiBtX2RhdGE7CisgICAgcmV0dXJuIGRhdGEoKTsKIH0KIAogYm9vbCBD
aGFyYWN0ZXJEYXRhOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9kYXRhLmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKTsKKyAgICAvLyBGSVhNRTogV2hpY2gg
b25lIGRvIHdlIHdhbnQ/IGlzSFRNTFNwYWNlIG9yIGlzQVNDSUlTcGFjZT8KKyAgICByZXR1cm4g
aXNBdG9taWNTdHJpbmdUZXh0Tm9kZSgpIHx8IGRhdGEoKS5jb250YWluc09ubHlXaGl0ZXNwYWNl
KCk7Cit9CisKK1N0cmluZ0ltcGwqIENoYXJhY3RlckRhdGE6OmRhdGFJbXBsKCkKK3sKKyAgICBy
ZXR1cm4gZGF0YSgpLmltcGwoKTsKK30KKwordm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXREYXRhV2l0
aG91dFVwZGF0ZShjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgQVNTRVJUKCF0aGlzLT5kYXRh
KCkuaXNOdWxsKCkpOworICAgIGlmIChkYXRhLmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKKyAg
ICAgICAgc2V0RGF0YUFzQXRvbWljU3RyaW5nKGRhdGEpOworICAgIGVsc2UKKyAgICAgICAgc2V0
RGF0YUFzU3RyaW5nKGRhdGEpOwogfQogCiB2b2lkIENoYXJhY3RlckRhdGE6OnNldE5vZGVWYWx1
ZShjb25zdCBTdHJpbmcmIG5vZGVWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNzQsOCAr
MjI2LDggQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXREYXRhQW5kVXBkYXRlKGNvbnN0IFN0cmlu
ZyYgbmV3RGF0YSwgdW5zaWduZWQgb2Zmc2V0T2ZSZXAKIHsKICAgICBpZiAoZG9jdW1lbnQoKS0+
ZnJhbWUoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRleHRX
aWxsQmVSZXBsYWNlZCh0aGlzLCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgb2xkTGVuZ3RoLCBuZXdM
ZW5ndGgpOwotICAgIFN0cmluZyBvbGREYXRhID0gbV9kYXRhOwotICAgIG1fZGF0YSA9IG5ld0Rh
dGE7CisgICAgU3RyaW5nIG9sZERhdGEgPSBkYXRhKCk7CisgICAgc2V0RGF0YVdpdGhvdXRVcGRh
dGUobmV3RGF0YSk7CiAgICAgdXBkYXRlUmVuZGVyZXIob2Zmc2V0T2ZSZXBsYWNlZERhdGEsIG9s
ZExlbmd0aCk7CiAgICAgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KG9sZERhdGEpOwogfQpAQCAtMTg1
LDcgKzIzNyw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6dXBkYXRlUmVuZGVyZXIodW5zaWduZWQg
b2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIGxlbmd0CiAgICAgaWYgKCghcmVuZGVyZXIo
KSB8fCAhcmVuZGVyZXJJc05lZWRlZChOb2RlUmVuZGVyaW5nQ29udGV4dCh0aGlzLCByZW5kZXJl
cigpLT5zdHlsZSgpKSkpICYmIGF0dGFjaGVkKCkpCiAgICAgICAgIHJlYXR0YWNoKCk7CiAgICAg
ZWxzZSBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT5z
ZXRUZXh0V2l0aE9mZnNldChtX2RhdGEuaW1wbCgpLCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgbGVu
Z3RoT2ZSZXBsYWNlZERhdGEpOworICAgICAgICB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPnNl
dFRleHRXaXRoT2Zmc2V0KGRhdGFJbXBsKCksIG9mZnNldE9mUmVwbGFjZWREYXRhLCBsZW5ndGhP
ZlJlcGxhY2VkRGF0YSk7CiB9CiAKIHZvaWQgQ2hhcmFjdGVyRGF0YTo6ZGlzcGF0Y2hNb2RpZmll
ZEV2ZW50KGNvbnN0IFN0cmluZyYgb2xkRGF0YSkKQEAgLTE5Nyw3ICsyNDksNyBAQCB2b2lkIENo
YXJhY3RlckRhdGE6OmRpc3BhdGNoTW9kaWZpZWRFdmVudChjb25zdCBTdHJpbmcmIG9sZERhdGEp
CiAgICAgaWYgKHBhcmVudE5vZGUoKSkKICAgICAgICAgcGFyZW50Tm9kZSgpLT5jaGlsZHJlbkNo
YW5nZWQoKTsKICAgICBpZiAoZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpE
T01DSEFSQUNURVJEQVRBTU9ESUZJRURfTElTVEVORVIpKQotICAgICAgICBkaXNwYXRjaEV2ZW50
KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQ2hhcmFjdGVyRGF0YU1vZGlm
aWVkRXZlbnQsIHRydWUsIDAsIG9sZERhdGEsIG1fZGF0YSkpOworICAgICAgICBkaXNwYXRjaEV2
ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NQ2hhcmFjdGVyRGF0YU1v
ZGlmaWVkRXZlbnQsIHRydWUsIDAsIG9sZERhdGEsIGRhdGEoKSkpOwogICAgIGRpc3BhdGNoU3Vi
dHJlZU1vZGlmaWVkRXZlbnQoKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKGRvY3VtZW50KCksIHRoaXMp
OwpAQCAtMjIzLDcgKzI3NSw3IEBAIGludCBDaGFyYWN0ZXJEYXRhOjptYXhDaGFyYWN0ZXJPZmZz
ZXQoKSBjb25zdAogCiBib29sIENoYXJhY3RlckRhdGE6OnJlbmRlcmVySXNOZWVkZWQoY29uc3Qg
Tm9kZVJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFtX2RhdGEgfHwgIWxl
bmd0aCgpKQorICAgIGlmICghZGF0YSgpIHx8ICFsZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiBOb2RlOjpyZW5kZXJlcklzTmVlZGVkKGNvbnRleHQpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKaW5kZXggZjJhYWY4MTUzNDlkNGVjZjFkYTZkYWJkMjli
M2U3ZGI1ZWM4OWYwNC4uYmJkNGEzNTQ1M2QxNTcyY2E5M2FmZjAyYWQxMWVhNzIxODNiYzYzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCkBAIC0yNCwxNSArMjQsMjggQEAKICNkZWZp
bmUgQ2hhcmFjdGVyRGF0YV9oCiAKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8d3RmL0Fs
aWdubWVudC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBNYWtlIGl0IHByb3RlY3RlZAorZW51bSBJc0FsbFdoaXRl
c3BhY2UgeworICAgIEFsbElzV2hpdGVzcGFjZSwKKyAgICBOb3RBbGxXaGl0ZXNwYWNlLAorICAg
IFVua25vd25BbGxXaGl0ZXNwYWNlCit9OworCiBjbGFzcyBDaGFyYWN0ZXJEYXRhIDogcHVibGlj
IE5vZGUgewogcHVibGljOgotICAgIFN0cmluZyBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
OyB9CisgICAgfkNoYXJhY3RlckRhdGEoKQorICAgIHsKKyAgICAgICAgZGVzdHJ1Y3REYXRhKCk7
CisgICAgfTsKKworICAgIFN0cmluZyBkYXRhKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREYXRhKGNv
bnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2RhdGEubGVuZ3RoKCk7IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dDsKICAgICBTdHJpbmcgc3Vic3RyaW5nRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNv
dW50LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFN0cmluZyYs
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGluc2VydERhdGEodW5zaWduZWQgb2Zmc2V0LCBj
b25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkBAIC00MSwyNyArNTQsMTggQEAgcHVibGlj
OgogCiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKCkgY29uc3Q7CiAKLSAgICBTdHJp
bmdJbXBsKiBkYXRhSW1wbCgpIHsgcmV0dXJuIG1fZGF0YS5pbXBsKCk7IH0KKyAgICBTdHJpbmdJ
bXBsKiBkYXRhSW1wbCgpOwogCiAgICAgLy8gTGlrZSBhcHBlbmREYXRhLCBidXQgb3B0aW1pemVk
IGZvciB0aGUgcGFyc2VyIChlLmcuLCBubyBtdXRhdGlvbiBldmVudHMpLgogICAgIC8vIFJldHVy
bnMgaG93IG11Y2ggY291bGQgYmUgYWRkZWQgYmVmb3JlIGxlbmd0aCBsaW1pdCB3YXMgbWV0Lgog
ICAgIHVuc2lnbmVkIHBhcnNlckFwcGVuZERhdGEoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBkYXRh
TGVuZ3RoLCB1bnNpZ25lZCBsZW5ndGhMaW1pdCk7CiAKIHByb3RlY3RlZDoKLSAgICBDaGFyYWN0
ZXJEYXRhKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBDb25zdHJ1Y3Rp
b25UeXBlIHR5cGUpCi0gICAgICAgIDogTm9kZShkb2N1bWVudCwgdHlwZSkKLSAgICAgICAgLCBt
X2RhdGEoIXRleHQuaXNOdWxsKCkgPyB0ZXh0IDogZW1wdHlTdHJpbmcoKSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVCh0eXBlID09IENyZWF0ZUNvbW1lbnQgfHwgdHlwZSA9PSBDcmVhdGVUZXh0KTsK
LSAgICB9CisgICAgQ2hhcmFjdGVyRGF0YShEb2N1bWVudCosIGNvbnN0IFN0cmluZyYsIENvbnN0
cnVjdGlvblR5cGUsIElzQWxsV2hpdGVzcGFjZSA9IFVua25vd25BbGxXaGl0ZXNwYWNlKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IE5vZGVSZW5kZXJpbmdDb250
ZXh0Jik7CiAKLSAgICB2b2lkIHNldERhdGFXaXRob3V0VXBkYXRlKGNvbnN0IFN0cmluZyYgZGF0
YSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghZGF0YS5pc051bGwoKSk7Ci0gICAgICAgIG1fZGF0
YSA9IGRhdGE7Ci0gICAgfQorICAgIHZvaWQgc2V0RGF0YVdpdGhvdXRVcGRhdGUoY29uc3QgU3Ry
aW5nJik7CiAgICAgdm9pZCBkaXNwYXRjaE1vZGlmaWVkRXZlbnQoY29uc3QgU3RyaW5nJiBvbGRW
YWx1ZSk7CiAKIHByaXZhdGU6CkBAIC03NCw3ICs3OCw1MSBAQCBwcml2YXRlOgogICAgIHZvaWQg
dXBkYXRlUmVuZGVyZXIodW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIHVuc2lnbmVkIGxl
bmd0aE9mUmVwbGFjZWREYXRhKTsKICAgICB2b2lkIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24odW5z
aWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBTdHJpbmcgbV9kYXRhOworICAg
IFdURjo6QWxpZ25lZEJ1ZmZlcjxzaXplb2YoQXRvbWljU3RyaW5nKSwgV1RGX0FMSUdOX09GKEF0
b21pY1N0cmluZyk+IG1fcmF3RGF0YTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyBkYXRhQXNB
dG9taWNTdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQXRvbWljU3RyaW5n
VGV4dE5vZGUoKSk7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3Qg
QXRvbWljU3RyaW5nKj4obV9yYXdEYXRhLmJ1ZmZlcik7CisgICAgfQorCisgICAgY29uc3QgU3Ry
aW5nIGRhdGFBc1N0cmluZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzQXRvbWlj
U3RyaW5nVGV4dE5vZGUoKSk7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdF9wdHI8
Y29uc3QgU3RyaW5nKj4obV9yYXdEYXRhLmJ1ZmZlcik7CisgICAgfQorCisgICAgZW51bSBTaG91
bGREZXN0cnVjdCB7CisgICAgICAgIERlc3RydWN0LAorICAgICAgICBOb0Rlc3RydWN0CisgICAg
fTsKKworICAgIHZvaWQgc2V0RGF0YUFzQXRvbWljU3RyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYg
ZGF0YSwgU2hvdWxkRGVzdHJ1Y3Qgc2hvdWxkRGVzdHJ1Y3QgPSBEZXN0cnVjdCkKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBjb250YWluc09ubHlXaGl0ZXNwYWNlIHVzZXMgaXNBU0NJSVNwYWNl
LgorICAgICAgICBBU1NFUlQoZGF0YS5zdHJpbmcoKS5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkp
OworCisgICAgICAgIGlmIChzaG91bGREZXN0cnVjdCA9PSBEZXN0cnVjdCkKKyAgICAgICAgICAg
IGRlc3RydWN0RGF0YSgpOworICAgICAgICBzZXRJc0F0b21pY1N0cmluZ1RleHROb2RlKHRydWUp
OworICAgICAgICBuZXcgKG1fcmF3RGF0YS5idWZmZXIpIEF0b21pY1N0cmluZyhkYXRhKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldERhdGFBc1N0cmluZyhjb25zdCBTdHJpbmcmIGRhdGEsIFNob3Vs
ZERlc3RydWN0IHNob3VsZERlc3RydWN0ID0gRGVzdHJ1Y3QpCisgICAgeworICAgICAgICBpZiAo
c2hvdWxkRGVzdHJ1Y3QgPT0gRGVzdHJ1Y3QpCisgICAgICAgICAgICBkZXN0cnVjdERhdGEoKTsK
KyAgICAgICAgc2V0SXNBdG9taWNTdHJpbmdUZXh0Tm9kZShmYWxzZSk7CisgICAgICAgIG5ldyAo
bV9yYXdEYXRhLmJ1ZmZlcikgU3RyaW5nKGRhdGEpOworICAgIH0KKworICAgIHZvaWQgZGVzdHJ1
Y3REYXRhKCkKKyAgICB7CisgICAgICAgIGlmIChpc0F0b21pY1N0cmluZ1RleHROb2RlKCkpCisg
ICAgICAgICAgICBkYXRhQXNBdG9taWNTdHJpbmcoKS5+QXRvbWljU3RyaW5nKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGRhdGFBc1N0cmluZygpLn5TdHJpbmcoKTsKKyAgICB9CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA4NDc0NDA1MGUyM2MzNWJh
OTE1ZDE4MzU5N2UxMjVjYTZiY2I2YzE2Li4yNDI0MjdhZTUyOGUxYmJlNTI5MTIwN2YxMGM1ZDMz
YWFiMmJhODI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTYzMCwyMyArNjMwLDI0IEBAIHByaXZhdGU6CiAg
ICAgICAgIEluRGV0YWNoRmxhZyA9IDEgPDwgMTYsCiAgICAgICAgIEhhc1JhcmVEYXRhRmxhZyA9
IDEgPDwgMTcsCiAgICAgICAgIElzU2hhZG93Um9vdE9yU1ZHU2hhZG93Um9vdEZsYWcgPSAxIDw8
IDE4LAorICAgICAgICBJc0F0b21pY1N0cmluZ1RleHROb2RlRmxhZyA9IDEgPDwgMTksCiAKICAg
ICAgICAgLy8gVGhlc2UgYml0cyBhcmUgdXNlZCBieSBkZXJpdmVkIGNsYXNzZXMsIHB1bGxlZCB1
cCBoZXJlIHNvIHRoZXkgY2FuCiAgICAgICAgIC8vIGJlIHN0b3JlZCBpbiB0aGUgc2FtZSBtZW1v
cnkgd29yZCBhcyB0aGUgTm9kZSBiaXRzIGFib3ZlLgotICAgICAgICBJc1BhcnNpbmdDaGlsZHJl
bkZpbmlzaGVkRmxhZyA9IDEgPDwgMTksIC8vIEVsZW1lbnQKLSAgICAgICAgSXNTdHlsZUF0dHJp
YnV0ZVZhbGlkRmxhZyA9IDEgPDwgMjAsIC8vIFN0eWxlZEVsZW1lbnQKLSAgICAgICAgSXNTeW5j
aHJvbml6aW5nU3R5bGVBdHRyaWJ1dGVGbGFnID0gMSA8PCAyMSwgLy8gU3R5bGVkRWxlbWVudAor
ICAgICAgICBJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkRmxhZyA9IDEgPDwgMjAsIC8vIEVsZW1l
bnQKKyAgICAgICAgSXNTdHlsZUF0dHJpYnV0ZVZhbGlkRmxhZyA9IDEgPDwgMjEsIC8vIFN0eWxl
ZEVsZW1lbnQKKyAgICAgICAgSXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGVGbGFnID0gMSA8
PCAyMiwgLy8gU3R5bGVkRWxlbWVudAogI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIEFyZVNWR0F0
dHJpYnV0ZXNWYWxpZEZsYWcgPSAxIDw8IDIyLCAvLyBFbGVtZW50Ci0gICAgICAgIElzU3luY2hy
b25pemluZ1NWR0F0dHJpYnV0ZXNGbGFnID0gMSA8PCAyMywgLy8gU1ZHRWxlbWVudAotICAgICAg
ICBIYXNTVkdSYXJlRGF0YUZsYWcgPSAxIDw8IDI0LCAvLyBTVkdFbGVtZW50CisgICAgICAgIEFy
ZVNWR0F0dHJpYnV0ZXNWYWxpZEZsYWcgPSAxIDw8IDIzLCAvLyBFbGVtZW50CisgICAgICAgIElz
U3luY2hyb25pemluZ1NWR0F0dHJpYnV0ZXNGbGFnID0gMSA8PCAyNCwgLy8gU1ZHRWxlbWVudAor
ICAgICAgICBIYXNTVkdSYXJlRGF0YUZsYWcgPSAxIDw8IDI1LCAvLyBTVkdFbGVtZW50CiAjZW5k
aWYKIAogICAgICAgICBTdHlsZUNoYW5nZU1hc2sgPSAxIDw8IG5vZGVTdHlsZUNoYW5nZVNoaWZ0
IHwgMSA8PCAobm9kZVN0eWxlQ2hhbmdlU2hpZnQgKyAxKSwKIAotICAgICAgICBTZWxmT3JBbmNl
c3Rvckhhc0RpckF1dG9GbGFnID0gMSA8PCAyNywKLSAgICAgICAgSGFzQ3VzdG9tV2lsbE9yRGlk
UmVjYWxjU3R5bGVGbGFnID0gMSA8PCAyOCwKLSAgICAgICAgSGFzQ3VzdG9tU3R5bGVGb3JSZW5k
ZXJlckZsYWcgPSAxIDw8IDI5LAorICAgICAgICBTZWxmT3JBbmNlc3Rvckhhc0RpckF1dG9GbGFn
ID0gMSA8PCAyOCwKKyAgICAgICAgSGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxjU3R5bGVGbGFnID0g
MSA8PCAyOSwKKyAgICAgICAgSGFzQ3VzdG9tU3R5bGVGb3JSZW5kZXJlckZsYWcgPSAxIDw8IDMw
LAogCiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgRGVmYXVsdE5vZGVGbGFncyA9IElzUGFyc2lu
Z0NoaWxkcmVuRmluaXNoZWRGbGFnIHwgSXNTdHlsZUF0dHJpYnV0ZVZhbGlkRmxhZyB8IEFyZVNW
R0F0dHJpYnV0ZXNWYWxpZEZsYWcKQEAgLTY1NSw3ICs2NTYsNyBAQCBwcml2YXRlOgogI2VuZGlm
CiAgICAgfTsKIAotICAgIC8vIDIgYml0cyByZW1haW5pbmcKKyAgICAvLyAxIGJpdCByZW1haW5p
bmcKIAogICAgIGJvb2wgZ2V0RmxhZyhOb2RlRmxhZ3MgbWFzaykgY29uc3QgeyByZXR1cm4gbV9u
b2RlRmxhZ3MgJiBtYXNrOyB9CiAgICAgdm9pZCBzZXRGbGFnKGJvb2wgZiwgTm9kZUZsYWdzIG1h
c2spIGNvbnN0IHsgbV9ub2RlRmxhZ3MgPSAobV9ub2RlRmxhZ3MgJiB+bWFzaykgfCAoLShpbnQz
Ml90KWYgJiBtYXNrKTsgfSAKQEAgLTY5Niw2ICs2OTcsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBoYXNDdXN0b21TdHlsZUZvclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhIYXND
dXN0b21TdHlsZUZvclJlbmRlcmVyRmxhZyk7IH0KICAgICB2b2lkIHNldEhhc0N1c3RvbVN0eWxl
Rm9yUmVuZGVyZXIoKSB7IHNldEZsYWcodHJ1ZSwgSGFzQ3VzdG9tU3R5bGVGb3JSZW5kZXJlckZs
YWcpOyB9IAogCisgICAgYm9vbCBpc0F0b21pY1N0cmluZ1RleHROb2RlKCkgY29uc3QgeyByZXR1
cm4gZ2V0RmxhZyhJc0F0b21pY1N0cmluZ1RleHROb2RlRmxhZyk7IH0KKyAgICB2b2lkIHNldElz
QXRvbWljU3RyaW5nVGV4dE5vZGUoYm9vbCBmKSBjb25zdCB7IHNldEZsYWcoZiwgSXNBdG9taWNT
dHJpbmdUZXh0Tm9kZUZsYWcpOyB9CisKIHByaXZhdGU6CiAgICAgLy8gRG8gbm90IHVzZSB0aGlz
IG1ldGhvZCB0byBjaGFuZ2UgdGhlIGRvY3VtZW50IG9mIGEgbm9kZSB1bnRpbCBhZnRlciB0aGUg
bm9kZSBoYXMgYmVlbgogICAgIC8vIHJlbW92ZWQgZnJvbSBpdHMgcHJldmlvdXMgZG9jdW1lbnQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vVGV4dC5jcHAKaW5kZXggNmI1ZjdmN2I0NWJhZmNhNGU3NzdkN2E5NDY0NGI0NTQwZjNl
ZmU4Yy4uNGZmNGVlOWYxYTE3M2FjYzQ0ODc2NzBhZTg0OWRkZjc5ZTQ3MWFiZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9U
ZXh0LmNwcApAQCAtNDQsNiArNDQsMTEgQEAgUGFzc1JlZlB0cjxUZXh0PiBUZXh0OjpjcmVhdGUo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUZXh0KGRvY3VtZW50LCBkYXRhKSk7CiB9CiAKK1Bhc3NSZWZQdHI8VGV4dD4gVGV4
dDo6Y3JlYXRlV2hpdGVzcGFjZU9ubHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNT
dHJpbmcmIGRhdGEpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0KGRvY3VtZW50LCBk
YXRhLCBBbGxJc1doaXRlc3BhY2UpKTsKK30KKwogUGFzc1JlZlB0cjxUZXh0PiBUZXh0OjpzcGxp
dFRleHQodW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1RleHQuaAppbmRleCA3NjI5YjdkYWJjYjg1NTMzNTgzMjM1ZmRhYmU3ODE2NDk1ZTNlM2Fl
Li4wYTM5ODJjYjA1NWRkMzBhMDRkNGJkNWNkOTBkOGU5MzIwN2IwMGNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmgK
QEAgLTMzLDYgKzMzLDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dD4g
Y3JlYXRlKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
VGV4dD4gY3JlYXRlV2l0aExlbmd0aExpbWl0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQgcG9zaXRpb25JblN0cmluZywgdW5zaWduZWQgbGVuZ3RoTGltaXQgPSBkZWZhdWx0TGVu
Z3RoTGltaXQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHQ+IGNyZWF0ZVdoaXRlc3BhY2VP
bmx5KERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJik7CisKIAogICAgIFBhc3NSZWZQdHI8
VGV4dD4gc3BsaXRUZXh0KHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwogCkBAIC00
OCw4ICs1MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29udGFpblJhbmdlRW5k
UG9pbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBUZXh0KERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBkYXRhKQotICAgICAgICA6IENoYXJhY3Rl
ckRhdGEoZG9jdW1lbnQsIGRhdGEsIENyZWF0ZVRleHQpCisgICAgVGV4dChEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IFN0cmluZyYgZGF0YSwgSXNBbGxXaGl0ZXNwYWNlIGlzQWxsV2hpdGVzcGFj
ZSA9IFVua25vd25BbGxXaGl0ZXNwYWNlKQorICAgICAgICA6IENoYXJhY3RlckRhdGEoZG9jdW1l
bnQsIGRhdGEsIENyZWF0ZVRleHQsIGlzQWxsV2hpdGVzcGFjZSkKICAgICB7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5j
cHAKaW5kZXggY2M5N2JiNjhlODhmM2EzN2I0OGRlM2M1ZDkyY2UwYzMwZTY3ODViYi4uZjlmY2E1
YTA1ZTY1YjQxNzA5OTI5NTI3ZmU3Y2ViYTRmZjVhMmVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtMzY1LDYgKzM2
NSwyNCBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kZShjb25zdCBT
dHJpbmcmIGNoYXJhY3RlcnMpCiAgICAgfQogfQogCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbnNlcnRXaGl0ZXNwYWNlVGV4dE5vZGUoY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzKQorewor
ICAgIEF0dGFjaG1lbnRTaXRlIHNpdGU7CisgICAgc2l0ZS5wYXJlbnQgPSBjdXJyZW50Tm9kZSgp
OworICAgIHNpdGUubmV4dENoaWxkID0gMDsKKyAgICBpZiAoc2hvdWxkRm9zdGVyUGFyZW50KCkp
CisgICAgICAgIGZpbmRGb3N0ZXJTaXRlKHNpdGUpOworCisgICAgLy8gSWYgd2UgYXJlIGFwcGVu
ZGluZyB0byBhbiBleGlzdGluZyB0ZXh0IG5vZGUgZG9uJ3QgYm90aGVyIHdpdGggdGhlIG9wdGlt
aXphdGlvbi4KKyAgICBOb2RlKiBwcmV2aW91c0NoaWxkID0gc2l0ZS5uZXh0Q2hpbGQgPyBzaXRl
Lm5leHRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBzaXRlLnBhcmVudC0+bGFzdENoaWxkKCk7
CisgICAgaWYgKHByZXZpb3VzQ2hpbGQgJiYgcHJldmlvdXNDaGlsZC0+aXNUZXh0Tm9kZSgpKSB7
CisgICAgICAgIGluc2VydFRleHROb2RlKGNoYXJhY3RlcnMpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXR0YWNoQXRTaXRlKHNpdGUsIFRleHQ6OmNyZWF0ZVdoaXRlc3BhY2VPbmx5
KHNpdGUucGFyZW50LT5kb2N1bWVudCgpLCBjaGFyYWN0ZXJzKSk7Cit9CisKIFBhc3NSZWZQdHI8
RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpCiB7CiAgICAgUXVh
bGlmaWVkTmFtZSB0YWdOYW1lKG51bGxBdG9tLCB0b2tlbi5uYW1lKCksIG5hbWVzcGFjZVVSSSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9u
U2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUu
aAppbmRleCBlMTMyZjM2NTIwNzA2MThjOWQ3OWI5NGIzMzI4ZmU4NjVjM2I1YTIxLi5hYzNlYTBm
NjJkODAyMTlhMTg5MDA2ZTkwNTA1MjNkYjk5YmIzNTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgKQEAgLTYyLDYgKzYyLDcgQEAg
cHVibGljOgogICAgIHZvaWQgaW5zZXJ0SFRNTEZvcm1FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYs
IGJvb2wgaXNEZW1vdGVkID0gZmFsc2UpOwogICAgIHZvaWQgaW5zZXJ0U2NyaXB0RWxlbWVudChB
dG9taWNIVE1MVG9rZW4mKTsKICAgICB2b2lkIGluc2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYp
OworICAgIHZvaWQgaW5zZXJ0V2hpdGVzcGFjZVRleHROb2RlKGNvbnN0IFN0cmluZyYpOwogICAg
IHZvaWQgaW5zZXJ0Rm9yZWlnbkVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lc3BhY2VVUkkpOwogCiAgICAgdm9pZCBpbnNlcnRIVE1MSHRtbFN0YXJ0VGFn
QmVmb3JlSFRNTChBdG9taWNIVE1MVG9rZW4mKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IGExMWNiMWM5ZTE4YzgxOWY4MTMzN2QxOWQ0
NmJjMWNmNGMwMzkyYTYuLjI0ZjIyMWFlMGIwMTNhMzhkNjU3YzYxNzExNGI2ZTQwYjM3YzNhYWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApA
QCAtMjQ2NCw3ICsyNDY0LDcgQEAgUmVwcm9jZXNzQnVmZmVyOgogICAgICAgICBBU1NFUlQoaW5z
ZXJ0aW9uTW9kZSgpID09IEluSGVhZE1vZGUpOwogICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRl
c3BhY2UgPSBidWZmZXIudGFrZUxlYWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVh
ZGluZ1doaXRlc3BhY2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV90cmVlLmluc2VydFRleHRO
b2RlKGxlYWRpbmdXaGl0ZXNwYWNlKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRXaGl0ZXNw
YWNlVGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UpOwogICAgICAgICBpZiAoYnVmZmVyLmlzRW1w
dHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdEZvckluSGVhZCgpOwpA
QCAtMjQ3NCw3ICsyNDc0LDcgQEAgUmVwcm9jZXNzQnVmZmVyOgogICAgICAgICBBU1NFUlQoaW5z
ZXJ0aW9uTW9kZSgpID09IEFmdGVySGVhZE1vZGUpOwogICAgICAgICBTdHJpbmcgbGVhZGluZ1do
aXRlc3BhY2UgPSBidWZmZXIudGFrZUxlYWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmICgh
bGVhZGluZ1doaXRlc3BhY2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV90cmVlLmluc2VydFRl
eHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRXaGl0
ZXNwYWNlVGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UpOwogICAgICAgICBpZiAoYnVmZmVyLmlz
RW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdEZvckFmdGVySGVh
ZCgpOwpAQCAtMjUwOSw3ICsyNTA5LDcgQEAgUmVwcm9jZXNzQnVmZmVyOgogICAgICAgICBBU1NF
UlQoaW5zZXJ0aW9uTW9kZSgpID09IEluQ29sdW1uR3JvdXBNb2RlKTsKICAgICAgICAgU3RyaW5n
IGxlYWRpbmdXaGl0ZXNwYWNlID0gYnVmZmVyLnRha2VMZWFkaW5nV2hpdGVzcGFjZSgpOwogICAg
ICAgICBpZiAoIWxlYWRpbmdXaGl0ZXNwYWNlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fdHJl
ZS5pbnNlcnRUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSk7CisgICAgICAgICAgICBtX3RyZWUu
aW5zZXJ0V2hpdGVzcGFjZVRleHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlKTsKICAgICAgICAgaWYg
KGJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmICghcHJv
Y2Vzc0NvbGdyb3VwRW5kVGFnRm9ySW5Db2x1bW5Hcm91cCgpKSB7CkBAIC0yNTQwLDcgKzI1NDAs
NyBAQCBSZXByb2Nlc3NCdWZmZXI6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0g
SW5IZWFkTm9zY3JpcHRNb2RlKTsKICAgICAgICAgU3RyaW5nIGxlYWRpbmdXaGl0ZXNwYWNlID0g
YnVmZmVyLnRha2VMZWFkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICBpZiAoIWxlYWRpbmdXaGl0
ZXNwYWNlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShsZWFk
aW5nV2hpdGVzcGFjZSk7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0V2hpdGVzcGFjZVRleHRO
b2RlKGxlYWRpbmdXaGl0ZXNwYWNlKTsKICAgICAgICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRlZmF1bHRGb3JJbkhlYWROb3NjcmlwdCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117525</attachid>
            <date>2011-12-01 17:03:08 -0800</date>
            <delta_ts>2011-12-02 16:50:45 -0800</delta_ts>
            <desc>WIP patch using AtomicString instead of AlignedBuffer</desc>
            <filename>bug-72404-20111201170307.patch</filename>
            <type>text/plain</type>
            <size>20254</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTRkMDBkNzIyOGRlNGQw
N2UwNTRmMmVjNzZhOTUwMDMyY2M1ZWVlZi4uMmFhNWJhZDgyNjFkMWJhMWMyNmRhNmIzNDhiZmEz
YzZmMzBjZjgwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDExLTEyLTAxICBFcmlr
IEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ291bGQgc2F2ZSBhIGxv
dCBvZiBtZW1vcnkgaW4gQ2hhcmFjdGVyRGF0YSBieSBub3QgYWx3YXlzIHN0b3JpbmcgYSBTdHJp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDA0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpDaGFyYWN0ZXJEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNoYXJhY3RlckRhdGE6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVy
RGF0YTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpsZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c3Vic3RyaW5nRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBlbmREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmFwcGVuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hhcmFjdGVyRGF0YTo6aW5zZXJ0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJE
YXRhOjpkZWxldGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnJlcGxh
Y2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6Om5vZGVWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRhdGFJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNoYXJhY3RlckRhdGE6OnNldERhdGFXaXRob3V0VXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNoYXJhY3RlckRhdGE6OnNldERhdGFBbmRVcGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hhcmFjdGVyRGF0YTo6dXBkYXRlUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2hh
cmFjdGVyRGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNo
YXJhY3RlckRhdGE6OnJlbmRlcmVySXNOZWVkZWQpOgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJE
YXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpkYXRhQXNBdG9taWNTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6ZGF0YUFzU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OnNldERhdGFBc0F0b21pY1N0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpzZXREYXRhQXNTdHJpbmcpOgorICAgICAg
ICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0F0b21pY1N0cmluZ1Rl
eHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnNldElzQXRvbWljU3RyaW5nVGV4dE5v
ZGUpOgorICAgICAgICAqIGRvbS9UZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHQ6OmNy
ZWF0ZVdoaXRlc3BhY2VPbmx5KToKKyAgICAgICAgKiBkb20vVGV4dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dDo6VGV4dCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlv
blNpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2Vy
dFdoaXRlc3BhY2VUZXh0Tm9kZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVj
dGlvblNpdGUuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyQnVmZmVy
KToKKwogMjAxMS0xMS0zMCAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgRml4IHZhbGdyaW5kIGlzc3VlIGluIFN1YnJlc291cmNlTG9hZGVyOjpkaWRG
aW5pc2hMb2FkaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAKaW5kZXggMjFiNTJi
MzVmYzY4OGZjYzhiNzc0MzY4MjM4NDQ5Y2I5OWMwOWY1Mi4uZTdhOTE4YmI4NzU0ZjMzMjBhZGVm
MDhkZjc2YzEyYjZiNjFkNGQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJh
Y3RlckRhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcApA
QCAtMzcsMTAgKzM3LDM0IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorQ2hhcmFjdGVyRGF0YTo6Q2hhcmFjdGVyRGF0YShEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgQ29uc3RydWN0aW9uVHlwZSB0eXBlLCBJc0FsbFdoaXRlc3Bh
Y2UgaXNBbGxXaGl0ZVNwYWNlKQorICAgIDogTm9kZShkb2N1bWVudCwgdHlwZSkKK3sKKyAgICBB
U1NFUlQodHlwZSA9PSBDcmVhdGVDb21tZW50IHx8IHR5cGUgPT0gQ3JlYXRlVGV4dCk7CisgICAg
QVNTRVJUKHNpemVvZihBdG9taWNTdHJpbmcpID09IHNpemVvZihTdHJpbmcpKTsKKyAgICBBU1NF
UlQoV1RGX0FMSUdOX09GKEF0b21pY1N0cmluZykgPT0gV1RGX0FMSUdOX09GKFN0cmluZykpOwor
CisgICAgaWYgKHRleHQuaXNOdWxsKCkpCisgICAgICAgIHNldERhdGFBc0F0b21pY1N0cmluZyhl
bXB0eUF0b20pOworICAgIGVsc2UgeworICAgICAgICBpZiAoaXNBbGxXaGl0ZVNwYWNlID09IEFs
bElzV2hpdGVzcGFjZSB8fCBpc0FsbFdoaXRlU3BhY2UgPT0gVW5rbm93bkFsbFdoaXRlc3BhY2Ug
JiYgdGV4dC5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICBzZXREYXRhQXNB
dG9taWNTdHJpbmcodGV4dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldERhdGFBc1N0
cmluZyh0ZXh0KTsKKyAgICB9Cit9CisKK1N0cmluZyBDaGFyYWN0ZXJEYXRhOjpkYXRhKCkgY29u
c3QKK3sKKyAgICBpZiAoaXNBdG9taWNTdHJpbmdUZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4g
ZGF0YUFzQXRvbWljU3RyaW5nKCkuc3RyaW5nKCk7CisgICAgcmV0dXJuIGRhdGFBc1N0cmluZygp
OworfQorCiB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nJiBkYXRhLCBF
eGNlcHRpb25Db2RlJikKIHsKICAgICBjb25zdCBTdHJpbmcmIG5vbk51bGxEYXRhID0gIWRhdGEu
aXNOdWxsKCkgPyBkYXRhIDogZW1wdHlTdHJpbmcoKTsKLSAgICBpZiAobV9kYXRhID09IG5vbk51
bGxEYXRhKQorICAgIGlmICh0aGlzLT5kYXRhKCkgPT0gbm9uTnVsbERhdGEpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IGxlbmd0aCgpOwpAQCAtNDksMTggKzcz
LDI3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIGRhdGEsIEV4
Y2VwdGlvbkNvZGUmKQogICAgIGRvY3VtZW50KCktPnRleHRSZW1vdmVkKHRoaXMsIDAsIG9sZExl
bmd0aCk7CiB9CiAKK3Vuc2lnbmVkIENoYXJhY3RlckRhdGE6Omxlbmd0aCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGRhdGEoKS5sZW5ndGgoKTsKK30KKwogU3RyaW5nIENoYXJhY3RlckRhdGE6OnN1
YnN0cmluZ0RhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgY2hlY2tDaGFyRGF0YU9wZXJhdGlvbihvZmZzZXQsIGVjKTsKICAgICBp
ZiAoZWMpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBtX2RhdGEuc3Vi
c3RyaW5nKG9mZnNldCwgY291bnQpOworICAgIHJldHVybiBkYXRhKCkuc3Vic3RyaW5nKG9mZnNl
dCwgY291bnQpOwogfQogCiB1bnNpZ25lZCBDaGFyYWN0ZXJEYXRhOjpwYXJzZXJBcHBlbmREYXRh
KGNvbnN0IFVDaGFyKiBkYXRhLCB1bnNpZ25lZCBkYXRhTGVuZ3RoLCB1bnNpZ25lZCBsZW5ndGhM
aW1pdCkKIHsKLSAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBtX2RhdGEubGVuZ3RoKCk7CisgICAg
Ly8gRklYTUU6IFRoZSBjYXNlIHdoZXJlIHdlIGFkZCBhbGwgd2hpdGVzcGFjZSB0byBhbGwgd2hp
dGVzcGFjZSBjYW4gYmUgaGFuZGxlZCBtb3JlIGVmZmljaWVudGx5LgorICAgIGlmIChpc0F0b21p
Y1N0cmluZ1RleHROb2RlKCkpCisgICAgICAgIHNldERhdGFBc1N0cmluZyh0aGlzLT5kYXRhKCkp
OworCisgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbGVuZ3RoKCk7CiAKICAgICB1bnNpZ25lZCBl
bmQgPSBtaW4oZGF0YUxlbmd0aCwgbGVuZ3RoTGltaXQgLSBvbGRMZW5ndGgpOwogCkBAIC03Nyw3
ICsxMTAsMTEgQEAgdW5zaWduZWQgQ2hhcmFjdGVyRGF0YTo6cGFyc2VyQXBwZW5kRGF0YShjb25z
dCBVQ2hhciogZGF0YSwgdW5zaWduZWQgZGF0YUxlbmd0aCwKICAgICBpZiAoIWVuZCkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBtX2RhdGEuYXBwZW5kKGRhdGEsIGVuZCk7CisgICAgdGhpcy0+
ZGF0YSgpLmFwcGVuZChkYXRhLCBlbmQpOworCisgICAgLy8gRklYTUU6CisgICAgaWYgKHRoaXMt
PmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKKyAgICAgICAgc2V0RGF0YUFzQXRvbWljU3RyaW5n
KHRoaXMtPmRhdGEoKSk7CiAKICAgICB1cGRhdGVSZW5kZXJlcihvbGRMZW5ndGgsIDApOwogICAg
IC8vIFdlIGRvbid0IGNhbGwgZGlzcGF0Y2hNb2RpZmllZEV2ZW50IGhlcmUgYmVjYXVzZSB3ZSBk
b24ndCB3YW50IHRoZQpAQCAtOTAsMTAgKzEyNywxMCBAQCB1bnNpZ25lZCBDaGFyYWN0ZXJEYXRh
OjpwYXJzZXJBcHBlbmREYXRhKGNvbnN0IFVDaGFyKiBkYXRhLCB1bnNpZ25lZCBkYXRhTGVuZ3Ro
LAogCiB2b2lkIENoYXJhY3RlckRhdGE6OmFwcGVuZERhdGEoY29uc3QgU3RyaW5nJiBkYXRhLCBF
eGNlcHRpb25Db2RlJikKIHsKLSAgICBTdHJpbmcgbmV3U3RyID0gbV9kYXRhOworICAgIFN0cmlu
ZyBuZXdTdHIgPSB0aGlzLT5kYXRhKCk7CiAgICAgbmV3U3RyLmFwcGVuZChkYXRhKTsKIAotICAg
IHNldERhdGFBbmRVcGRhdGUobmV3U3RyLCBtX2RhdGEubGVuZ3RoKCksIDAsIGRhdGEubGVuZ3Ro
KCkpOworICAgIHNldERhdGFBbmRVcGRhdGUobmV3U3RyLCBsZW5ndGgoKSwgMCwgZGF0YS5sZW5n
dGgoKSk7CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNhbGwgdGV4dEluc2VydGVkIGhlcmU/
CiB9CkBAIC0xMDQsNyArMTQxLDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjppbnNlcnREYXRhKHVu
c2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2QKICAgICBpZiAo
ZWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBuZXdTdHIgPSBtX2RhdGE7CisgICAg
U3RyaW5nIG5ld1N0ciA9IHRoaXMtPmRhdGEoKTsKICAgICBuZXdTdHIuaW5zZXJ0KGRhdGEsIG9m
ZnNldCk7CiAKICAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0LCAwLCBkYXRhLmxl
bmd0aCgpKTsKQEAgLTEyNCw3ICsxNjEsNyBAQCB2b2lkIENoYXJhY3RlckRhdGE6OmRlbGV0ZURh
dGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZQogICAg
IGVsc2UKICAgICAgICAgcmVhbENvdW50ID0gY291bnQ7CiAKLSAgICBTdHJpbmcgbmV3U3RyID0g
bV9kYXRhOworICAgIFN0cmluZyBuZXdTdHIgPSBkYXRhKCk7CiAgICAgbmV3U3RyLnJlbW92ZShv
ZmZzZXQsIHJlYWxDb3VudCk7CiAKICAgICBzZXREYXRhQW5kVXBkYXRlKG5ld1N0ciwgb2Zmc2V0
LCBjb3VudCwgMCk7CkBAIC0xNDQsNyArMTgxLDcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpyZXBs
YWNlRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcmIGQK
ICAgICBlbHNlCiAgICAgICAgIHJlYWxDb3VudCA9IGNvdW50OwogCi0gICAgU3RyaW5nIG5ld1N0
ciA9IG1fZGF0YTsKKyAgICBTdHJpbmcgbmV3U3RyID0gdGhpcy0+ZGF0YSgpOwogICAgIG5ld1N0
ci5yZW1vdmUob2Zmc2V0LCByZWFsQ291bnQpOwogICAgIG5ld1N0ci5pbnNlcnQoZGF0YSwgb2Zm
c2V0KTsKIApAQCAtMTU3LDEyICsxOTQsMjcgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpyZXBsYWNl
RGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcmIGQKIAog
U3RyaW5nIENoYXJhY3RlckRhdGE6Om5vZGVWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
ZGF0YTsKKyAgICByZXR1cm4gZGF0YSgpOwogfQogCiBib29sIENoYXJhY3RlckRhdGE6OmNvbnRh
aW5zT25seVdoaXRlc3BhY2UoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEuY29udGFpbnNP
bmx5V2hpdGVzcGFjZSgpOworICAgIC8vIEZJWE1FOiBXaGljaCBvbmUgZG8gd2Ugd2FudD8gaXNI
VE1MU3BhY2Ugb3IgaXNBU0NJSVNwYWNlPworICAgIHJldHVybiBpc0F0b21pY1N0cmluZ1RleHRO
b2RlKCkgfHwgZGF0YSgpLmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKTsKK30KKworU3RyaW5nSW1w
bCogQ2hhcmFjdGVyRGF0YTo6ZGF0YUltcGwoKQoreworICAgIHJldHVybiBkYXRhKCkuaW1wbCgp
OworfQorCit2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGFXaXRob3V0VXBkYXRlKGNvbnN0IFN0
cmluZyYgZGF0YSkKK3sKKyAgICBBU1NFUlQoIXRoaXMtPmRhdGEoKS5pc051bGwoKSk7CisgICAg
aWYgKGRhdGEuY29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQorICAgICAgICBzZXREYXRhQXNBdG9t
aWNTdHJpbmcoZGF0YSk7CisgICAgZWxzZQorICAgICAgICBzZXREYXRhQXNTdHJpbmcoZGF0YSk7
CiB9CiAKIHZvaWQgQ2hhcmFjdGVyRGF0YTo6c2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgbm9k
ZVZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE3NCw4ICsyMjYsOCBAQCB2b2lkIENoYXJh
Y3RlckRhdGE6OnNldERhdGFBbmRVcGRhdGUoY29uc3QgU3RyaW5nJiBuZXdEYXRhLCB1bnNpZ25l
ZCBvZmZzZXRPZlJlcAogewogICAgIGlmIChkb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICBk
b2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+dGV4dFdpbGxCZVJlcGxhY2VkKHRoaXMs
IG9mZnNldE9mUmVwbGFjZWREYXRhLCBvbGRMZW5ndGgsIG5ld0xlbmd0aCk7Ci0gICAgU3RyaW5n
IG9sZERhdGEgPSBtX2RhdGE7Ci0gICAgbV9kYXRhID0gbmV3RGF0YTsKKyAgICBTdHJpbmcgb2xk
RGF0YSA9IGRhdGEoKTsKKyAgICBzZXREYXRhV2l0aG91dFVwZGF0ZShuZXdEYXRhKTsKICAgICB1
cGRhdGVSZW5kZXJlcihvZmZzZXRPZlJlcGxhY2VkRGF0YSwgb2xkTGVuZ3RoKTsKICAgICBkaXNw
YXRjaE1vZGlmaWVkRXZlbnQob2xkRGF0YSk7CiB9CkBAIC0xODUsNyArMjM3LDcgQEAgdm9pZCBD
aGFyYWN0ZXJEYXRhOjp1cGRhdGVSZW5kZXJlcih1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0
YSwgdW5zaWduZWQgbGVuZ3QKICAgICBpZiAoKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcklzTmVl
ZGVkKE5vZGVSZW5kZXJpbmdDb250ZXh0KHRoaXMsIHJlbmRlcmVyKCktPnN0eWxlKCkpKSkgJiYg
YXR0YWNoZWQoKSkKICAgICAgICAgcmVhdHRhY2goKTsKICAgICBlbHNlIGlmIChyZW5kZXJlcigp
KQotICAgICAgICB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KG1f
ZGF0YS5pbXBsKCksIG9mZnNldE9mUmVwbGFjZWREYXRhLCBsZW5ndGhPZlJlcGxhY2VkRGF0YSk7
CisgICAgICAgIHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+c2V0VGV4dFdpdGhPZmZzZXQoZGF0
YUltcGwoKSwgb2Zmc2V0T2ZSZXBsYWNlZERhdGEsIGxlbmd0aE9mUmVwbGFjZWREYXRhKTsKIH0K
IAogdm9pZCBDaGFyYWN0ZXJEYXRhOjpkaXNwYXRjaE1vZGlmaWVkRXZlbnQoY29uc3QgU3RyaW5n
JiBvbGREYXRhKQpAQCAtMTk3LDcgKzI0OSw3IEBAIHZvaWQgQ2hhcmFjdGVyRGF0YTo6ZGlzcGF0
Y2hNb2RpZmllZEV2ZW50KGNvbnN0IFN0cmluZyYgb2xkRGF0YSkKICAgICBpZiAocGFyZW50Tm9k
ZSgpKQogICAgICAgICBwYXJlbnROb2RlKCktPmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgIGlmIChk
b2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTUNIQVJBQ1RFUkRBVEFNT0RJ
RklFRF9MSVNURU5FUikpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5ET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCwgdHJ1ZSwgMCwg
b2xkRGF0YSwgbV9kYXRhKSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCwgdHJ1ZSwg
MCwgb2xkRGF0YSwgZGF0YSgpKSk7CiAgICAgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgp
OwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpj
aGFyYWN0ZXJEYXRhTW9kaWZpZWQoZG9jdW1lbnQoKSwgdGhpcyk7CkBAIC0yMjMsNyArMjc1LDcg
QEAgaW50IENoYXJhY3RlckRhdGE6Om1heENoYXJhY3Rlck9mZnNldCgpIGNvbnN0CiAKIGJvb2wg
Q2hhcmFjdGVyRGF0YTo6cmVuZGVyZXJJc05lZWRlZChjb25zdCBOb2RlUmVuZGVyaW5nQ29udGV4
dCYgY29udGV4dCkKIHsKLSAgICBpZiAoIW1fZGF0YSB8fCAhbGVuZ3RoKCkpCisgICAgaWYgKCFk
YXRhKCkgfHwgIWxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIE5v
ZGU6OnJlbmRlcmVySXNOZWVkZWQoY29udGV4dCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRh
dGEuaAppbmRleCBmMmFhZjgxNTM0OWQ0ZWNmMWRhNmRhYmQyOWIzZTdkYjVlYzg5ZjA0Li4xN2Nm
NDFhMzA3Yzc3ZjcyMjEzZTY5YWFjZDIxZDA1MDVjZjM2N2QzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFy
YWN0ZXJEYXRhLmgKQEAgLTI0LDE1ICsyNCwyMyBAQAogI2RlZmluZSBDaGFyYWN0ZXJEYXRhX2gK
IAogI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvQWxpZ25tZW50Lmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklY
TUU6IE1ha2UgaXQgcHJvdGVjdGVkCitlbnVtIElzQWxsV2hpdGVzcGFjZSB7CisgICAgQWxsSXNX
aGl0ZXNwYWNlLAorICAgIE5vdEFsbFdoaXRlc3BhY2UsCisgICAgVW5rbm93bkFsbFdoaXRlc3Bh
Y2UKK307CisKIGNsYXNzIENoYXJhY3RlckRhdGEgOiBwdWJsaWMgTm9kZSB7CiBwdWJsaWM6Ci0g
ICAgU3RyaW5nIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBTdHJpbmcgZGF0
YSgpIGNvbnN0OwogICAgIHZvaWQgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxlbmd0aCgp
OyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgU3RyaW5nIHN1YnN0cmluZ0Rh
dGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9p
ZCBpbnNlcnREYXRhKHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYpOwpAQCAtNDEsMjcgKzQ5LDE4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29udGFpbnNPbmx5
V2hpdGVzcGFjZSgpIGNvbnN0OwogCi0gICAgU3RyaW5nSW1wbCogZGF0YUltcGwoKSB7IHJldHVy
biBtX2RhdGEuaW1wbCgpOyB9CisgICAgU3RyaW5nSW1wbCogZGF0YUltcGwoKTsKIAogICAgIC8v
IExpa2UgYXBwZW5kRGF0YSwgYnV0IG9wdGltaXplZCBmb3IgdGhlIHBhcnNlciAoZS5nLiwgbm8g
bXV0YXRpb24gZXZlbnRzKS4KICAgICAvLyBSZXR1cm5zIGhvdyBtdWNoIGNvdWxkIGJlIGFkZGVk
IGJlZm9yZSBsZW5ndGggbGltaXQgd2FzIG1ldC4KICAgICB1bnNpZ25lZCBwYXJzZXJBcHBlbmRE
YXRhKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgZGF0YUxlbmd0aCwgdW5zaWduZWQgbGVuZ3RoTGlt
aXQpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ2hhcmFjdGVyRGF0YShEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IFN0cmluZyYgdGV4dCwgQ29uc3RydWN0aW9uVHlwZSB0eXBlKQotICAgICAgICA6IE5v
ZGUoZG9jdW1lbnQsIHR5cGUpCi0gICAgICAgICwgbV9kYXRhKCF0ZXh0LmlzTnVsbCgpID8gdGV4
dCA6IGVtcHR5U3RyaW5nKCkpCi0gICAgewotICAgICAgICBBU1NFUlQodHlwZSA9PSBDcmVhdGVD
b21tZW50IHx8IHR5cGUgPT0gQ3JlYXRlVGV4dCk7Ci0gICAgfQorICAgIENoYXJhY3RlckRhdGEo
RG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCBDb25zdHJ1Y3Rpb25UeXBlLCBJc0FsbFdoaXRlc3Bh
Y2UgPSBVbmtub3duQWxsV2hpdGVzcGFjZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJ
c05lZWRlZChjb25zdCBOb2RlUmVuZGVyaW5nQ29udGV4dCYpOwogCi0gICAgdm9pZCBzZXREYXRh
V2l0aG91dFVwZGF0ZShjb25zdCBTdHJpbmcmIGRhdGEpCi0gICAgewotICAgICAgICBBU1NFUlQo
IWRhdGEuaXNOdWxsKCkpOwotICAgICAgICBtX2RhdGEgPSBkYXRhOwotICAgIH0KKyAgICB2b2lk
IHNldERhdGFXaXRob3V0VXBkYXRlKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgZGlzcGF0Y2hN
b2RpZmllZEV2ZW50KGNvbnN0IFN0cmluZyYgb2xkVmFsdWUpOwogCiBwcml2YXRlOgpAQCAtNzUs
NiArNzQsMzMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24odW5z
aWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBTdHJpbmcgbV9kYXRhOworCisg
ICAgY29uc3QgQXRvbWljU3RyaW5nIGRhdGFBc0F0b21pY1N0cmluZygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNBdG9taWNTdHJpbmdUZXh0Tm9kZSgpKTsKKyAgICAgICAgcmV0dXJu
IG1fZGF0YTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcgZGF0YUFzU3RyaW5nKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVCghaXNBdG9taWNTdHJpbmdUZXh0Tm9kZSgpKTsKKyAgICAg
ICAgcmV0dXJuIG1fZGF0YTsKKyAgICB9CisKKyAgICB2b2lkIHNldERhdGFBc0F0b21pY1N0cmlu
Zyhjb25zdCBBdG9taWNTdHJpbmcmIGRhdGEpCisgICAgeworICAgICAgICAvLyBGSVhNRTogY29u
dGFpbnNPbmx5V2hpdGVzcGFjZSB1c2VzIGlzQVNDSUlTcGFjZS4KKyAgICAgICAgQVNTRVJUKGRh
dGEuc3RyaW5nKCkuY29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKTsKKworICAgICAgICBzZXRJc0F0
b21pY1N0cmluZ1RleHROb2RlKHRydWUpOworICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgIH0K
KworICAgIHZvaWQgc2V0RGF0YUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZGF0YSkKKyAgICB7Cisg
ICAgICAgIHNldElzQXRvbWljU3RyaW5nVGV4dE5vZGUoZmFsc2UpOworICAgICAgICBtX2RhdGEg
PSBkYXRhOworICAgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmlu
ZGV4IDg0NzQ0MDUwZTIzYzM1YmE5MTVkMTgzNTk3ZTEyNWNhNmJjYjZjMTYuLjI0MjQyN2FlNTI4
ZTFiYmU1MjkxMjA3ZjEwYzVkMzNhYWIyYmE4MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNjMwLDIzICs2
MzAsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgSW5EZXRhY2hGbGFnID0gMSA8PCAxNiwKICAgICAg
ICAgSGFzUmFyZURhdGFGbGFnID0gMSA8PCAxNywKICAgICAgICAgSXNTaGFkb3dSb290T3JTVkdT
aGFkb3dSb290RmxhZyA9IDEgPDwgMTgsCisgICAgICAgIElzQXRvbWljU3RyaW5nVGV4dE5vZGVG
bGFnID0gMSA8PCAxOSwKIAogICAgICAgICAvLyBUaGVzZSBiaXRzIGFyZSB1c2VkIGJ5IGRlcml2
ZWQgY2xhc3NlcywgcHVsbGVkIHVwIGhlcmUgc28gdGhleSBjYW4KICAgICAgICAgLy8gYmUgc3Rv
cmVkIGluIHRoZSBzYW1lIG1lbW9yeSB3b3JkIGFzIHRoZSBOb2RlIGJpdHMgYWJvdmUuCi0gICAg
ICAgIElzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWRGbGFnID0gMSA8PCAxOSwgLy8gRWxlbWVudAot
ICAgICAgICBJc1N0eWxlQXR0cmlidXRlVmFsaWRGbGFnID0gMSA8PCAyMCwgLy8gU3R5bGVkRWxl
bWVudAotICAgICAgICBJc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZUZsYWcgPSAxIDw8IDIx
LCAvLyBTdHlsZWRFbGVtZW50CisgICAgICAgIElzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWRGbGFn
ID0gMSA8PCAyMCwgLy8gRWxlbWVudAorICAgICAgICBJc1N0eWxlQXR0cmlidXRlVmFsaWRGbGFn
ID0gMSA8PCAyMSwgLy8gU3R5bGVkRWxlbWVudAorICAgICAgICBJc1N5bmNocm9uaXppbmdTdHls
ZUF0dHJpYnV0ZUZsYWcgPSAxIDw8IDIyLCAvLyBTdHlsZWRFbGVtZW50CiAjaWYgRU5BQkxFKFNW
RykKLSAgICAgICAgQXJlU1ZHQXR0cmlidXRlc1ZhbGlkRmxhZyA9IDEgPDwgMjIsIC8vIEVsZW1l
bnQKLSAgICAgICAgSXNTeW5jaHJvbml6aW5nU1ZHQXR0cmlidXRlc0ZsYWcgPSAxIDw8IDIzLCAv
LyBTVkdFbGVtZW50Ci0gICAgICAgIEhhc1NWR1JhcmVEYXRhRmxhZyA9IDEgPDwgMjQsIC8vIFNW
R0VsZW1lbnQKKyAgICAgICAgQXJlU1ZHQXR0cmlidXRlc1ZhbGlkRmxhZyA9IDEgPDwgMjMsIC8v
IEVsZW1lbnQKKyAgICAgICAgSXNTeW5jaHJvbml6aW5nU1ZHQXR0cmlidXRlc0ZsYWcgPSAxIDw8
IDI0LCAvLyBTVkdFbGVtZW50CisgICAgICAgIEhhc1NWR1JhcmVEYXRhRmxhZyA9IDEgPDwgMjUs
IC8vIFNWR0VsZW1lbnQKICNlbmRpZgogCiAgICAgICAgIFN0eWxlQ2hhbmdlTWFzayA9IDEgPDwg
bm9kZVN0eWxlQ2hhbmdlU2hpZnQgfCAxIDw8IChub2RlU3R5bGVDaGFuZ2VTaGlmdCArIDEpLAog
Ci0gICAgICAgIFNlbGZPckFuY2VzdG9ySGFzRGlyQXV0b0ZsYWcgPSAxIDw8IDI3LAotICAgICAg
ICBIYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZUZsYWcgPSAxIDw8IDI4LAotICAgICAgICBI
YXNDdXN0b21TdHlsZUZvclJlbmRlcmVyRmxhZyA9IDEgPDwgMjksCisgICAgICAgIFNlbGZPckFu
Y2VzdG9ySGFzRGlyQXV0b0ZsYWcgPSAxIDw8IDI4LAorICAgICAgICBIYXNDdXN0b21XaWxsT3JE
aWRSZWNhbGNTdHlsZUZsYWcgPSAxIDw8IDI5LAorICAgICAgICBIYXNDdXN0b21TdHlsZUZvclJl
bmRlcmVyRmxhZyA9IDEgPDwgMzAsCiAKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICBEZWZhdWx0
Tm9kZUZsYWdzID0gSXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZEZsYWcgfCBJc1N0eWxlQXR0cmli
dXRlVmFsaWRGbGFnIHwgQXJlU1ZHQXR0cmlidXRlc1ZhbGlkRmxhZwpAQCAtNjU1LDcgKzY1Niw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9OwogCi0gICAgLy8gMiBiaXRzIHJlbWFpbmluZwor
ICAgIC8vIDEgYml0IHJlbWFpbmluZwogCiAgICAgYm9vbCBnZXRGbGFnKE5vZGVGbGFncyBtYXNr
KSBjb25zdCB7IHJldHVybiBtX25vZGVGbGFncyAmIG1hc2s7IH0KICAgICB2b2lkIHNldEZsYWco
Ym9vbCBmLCBOb2RlRmxhZ3MgbWFzaykgY29uc3QgeyBtX25vZGVGbGFncyA9IChtX25vZGVGbGFn
cyAmIH5tYXNrKSB8ICgtKGludDMyX3QpZiAmIG1hc2spOyB9IApAQCAtNjk2LDYgKzY5Nyw5IEBA
IHByb3RlY3RlZDoKICAgICBib29sIGhhc0N1c3RvbVN0eWxlRm9yUmVuZGVyZXIoKSBjb25zdCB7
IHJldHVybiBnZXRGbGFnKEhhc0N1c3RvbVN0eWxlRm9yUmVuZGVyZXJGbGFnKTsgfQogICAgIHZv
aWQgc2V0SGFzQ3VzdG9tU3R5bGVGb3JSZW5kZXJlcigpIHsgc2V0RmxhZyh0cnVlLCBIYXNDdXN0
b21TdHlsZUZvclJlbmRlcmVyRmxhZyk7IH0gCiAKKyAgICBib29sIGlzQXRvbWljU3RyaW5nVGV4
dE5vZGUoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKElzQXRvbWljU3RyaW5nVGV4dE5vZGVGbGFn
KTsgfQorICAgIHZvaWQgc2V0SXNBdG9taWNTdHJpbmdUZXh0Tm9kZShib29sIGYpIGNvbnN0IHsg
c2V0RmxhZyhmLCBJc0F0b21pY1N0cmluZ1RleHROb2RlRmxhZyk7IH0KKwogcHJpdmF0ZToKICAg
ICAvLyBEbyBub3QgdXNlIHRoaXMgbWV0aG9kIHRvIGNoYW5nZSB0aGUgZG9jdW1lbnQgb2YgYSBu
b2RlIHVudGlsIGFmdGVyIHRoZSBub2RlIGhhcyBiZWVuCiAgICAgLy8gcmVtb3ZlZCBmcm9tIGl0
cyBwcmV2aW91cyBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAppbmRleCA2YjVmN2Y3YjQ1YmFmY2E0
ZTc3N2Q3YTk0NjQ0YjQ1NDBmM2VmZThjLi40ZmY0ZWU5ZjFhMTczYWNjNDQ4NzY3MGFlODQ5ZGRm
NzllNDcxYWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1RleHQuY3BwCkBAIC00NCw2ICs0NCwxMSBAQCBQYXNzUmVmUHRy
PFRleHQ+IFRleHQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgZGF0
YSkKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHQoZG9jdW1lbnQsIGRhdGEpKTsKIH0KIAor
UGFzc1JlZlB0cjxUZXh0PiBUZXh0OjpjcmVhdGVXaGl0ZXNwYWNlT25seShEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgZGF0YSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHQoZG9jdW1lbnQsIGRhdGEsIEFsbElzV2hpdGVzcGFjZSkpOworfQorCiBQYXNzUmVm
UHRyPFRleHQ+IFRleHQ6OnNwbGl0VGV4dCh1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIGVjID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5oCmluZGV4IDc2MjliN2RhYmNiODU1MzM1ODMy
MzVmZGFiZTc4MTY0OTVlM2UzYWUuLjBhMzk4MmNiMDU1ZGQzMGEwNGQ0YmQ1Y2Q5MGQ4ZTkzMjA3
YjAwY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1RleHQuaApAQCAtMzMsNiArMzMsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0PiBjcmVhdGUoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmKTsKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0PiBjcmVhdGVXaXRoTGVuZ3RoTGltaXQoRG9jdW1lbnQq
LCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBwb3NpdGlvbkluU3RyaW5nLCB1bnNpZ25lZCBsZW5n
dGhMaW1pdCA9IGRlZmF1bHRMZW5ndGhMaW1pdCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4
dD4gY3JlYXRlV2hpdGVzcGFjZU9ubHkoRG9jdW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsK
KwogCiAgICAgUGFzc1JlZlB0cjxUZXh0PiBzcGxpdFRleHQodW5zaWduZWQgb2Zmc2V0LCBFeGNl
cHRpb25Db2RlJik7CiAKQEAgLTQ4LDggKzUwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBjYW5Db250YWluUmFuZ2VFbmRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogcHJv
dGVjdGVkOgotICAgIFRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGRhdGEp
Ci0gICAgICAgIDogQ2hhcmFjdGVyRGF0YShkb2N1bWVudCwgZGF0YSwgQ3JlYXRlVGV4dCkKKyAg
ICBUZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBkYXRhLCBJc0FsbFdoaXRl
c3BhY2UgaXNBbGxXaGl0ZXNwYWNlID0gVW5rbm93bkFsbFdoaXRlc3BhY2UpCisgICAgICAgIDog
Q2hhcmFjdGVyRGF0YShkb2N1bWVudCwgZGF0YSwgQ3JlYXRlVGV4dCwgaXNBbGxXaGl0ZXNwYWNl
KQogICAgIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCBjYzk3YmI2OGU4OGYzYTM3YjQ4ZGUzYzVkOTJj
ZTBjMzBlNjc4NWJiLi5mOWZjYTVhMDVlNjViNDE3MDk5Mjk1MjdmZTdjZWJhNGZmNWEyZWZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNp
dGUuY3BwCkBAIC0zNjUsNiArMzY1LDI0IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycykKICAgICB9CiB9CiAKK3ZvaWQg
SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFdoaXRlc3BhY2VUZXh0Tm9kZShjb25zdCBTdHJp
bmcmIGNoYXJhY3RlcnMpCit7CisgICAgQXR0YWNobWVudFNpdGUgc2l0ZTsKKyAgICBzaXRlLnBh
cmVudCA9IGN1cnJlbnROb2RlKCk7CisgICAgc2l0ZS5uZXh0Q2hpbGQgPSAwOworICAgIGlmIChz
aG91bGRGb3N0ZXJQYXJlbnQoKSkKKyAgICAgICAgZmluZEZvc3RlclNpdGUoc2l0ZSk7CisKKyAg
ICAvLyBJZiB3ZSBhcmUgYXBwZW5kaW5nIHRvIGFuIGV4aXN0aW5nIHRleHQgbm9kZSBkb24ndCBi
b3RoZXIgd2l0aCB0aGUgb3B0aW1pemF0aW9uLgorICAgIE5vZGUqIHByZXZpb3VzQ2hpbGQgPSBz
aXRlLm5leHRDaGlsZCA/IHNpdGUubmV4dENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA6IHNpdGUu
cGFyZW50LT5sYXN0Q2hpbGQoKTsKKyAgICBpZiAocHJldmlvdXNDaGlsZCAmJiBwcmV2aW91c0No
aWxkLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgaW5zZXJ0VGV4dE5vZGUoY2hhcmFjdGVycyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdHRhY2hBdFNpdGUoc2l0ZSwgVGV4dDo6
Y3JlYXRlV2hpdGVzcGFjZU9ubHkoc2l0ZS5wYXJlbnQtPmRvY3VtZW50KCksIGNoYXJhY3RlcnMp
KTsKK30KKwogUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRl
RWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVz
cGFjZVVSSSkKIHsKICAgICBRdWFsaWZpZWROYW1lIHRhZ05hbWUobnVsbEF0b20sIHRva2VuLm5h
bWUoKSwgbmFtZXNwYWNlVVJJKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MQ29uc3RydWN0aW9uU2l0ZS5oCmluZGV4IGUxMzJmMzY1MjA3MDYxOGM5ZDc5Yjk0YjMzMjhm
ZTg2NWMzYjVhMjEuLmFjM2VhMGY2MmQ4MDIxOWExODkwMDZlOTA1MDUyM2RiOTliYjM1OTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUu
aApAQCAtNjIsNiArNjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnRIVE1MRm9ybUVsZW1l
bnQoQXRvbWljSFRNTFRva2VuJiwgYm9vbCBpc0RlbW90ZWQgPSBmYWxzZSk7CiAgICAgdm9pZCBp
bnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwogICAgIHZvaWQgaW5zZXJ0VGV4
dE5vZGUoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBpbnNlcnRXaGl0ZXNwYWNlVGV4dE5vZGUo
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBpbnNlcnRGb3JlaWduRWxlbWVudChBdG9taWNIVE1M
VG9rZW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7CiAKICAgICB2b2lkIGlu
c2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggYTExY2Ix
YzllMThjODE5ZjgxMzM3ZDE5ZDQ2YmMxY2Y0YzAzOTJhNi4uMjRmMjIxYWUwYjAxM2EzOGQ2NTdj
NjE3MTE0YjZlNDBiMzdjM2FhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0yNDY0LDcgKzI0NjQsNyBAQCBSZXByb2Nlc3NCdWZmZXI6
CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5IZWFkTW9kZSk7CiAgICAgICAg
IFN0cmluZyBsZWFkaW5nV2hpdGVzcGFjZSA9IGJ1ZmZlci50YWtlTGVhZGluZ1doaXRlc3BhY2Uo
KTsKICAgICAgICAgaWYgKCFsZWFkaW5nV2hpdGVzcGFjZS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UpOworICAgICAgICAgICAg
bV90cmVlLmluc2VydFdoaXRlc3BhY2VUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSk7CiAgICAg
ICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBk
ZWZhdWx0Rm9ySW5IZWFkKCk7CkBAIC0yNDc0LDcgKzI0NzQsNyBAQCBSZXByb2Nlc3NCdWZmZXI6
CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gQWZ0ZXJIZWFkTW9kZSk7CiAgICAg
ICAgIFN0cmluZyBsZWFkaW5nV2hpdGVzcGFjZSA9IGJ1ZmZlci50YWtlTGVhZGluZ1doaXRlc3Bh
Y2UoKTsKICAgICAgICAgaWYgKCFsZWFkaW5nV2hpdGVzcGFjZS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UpOworICAgICAgICAg
ICAgbV90cmVlLmluc2VydFdoaXRlc3BhY2VUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSk7CiAg
ICAgICAgIGlmIChidWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBkZWZhdWx0Rm9yQWZ0ZXJIZWFkKCk7CkBAIC0yNTA5LDcgKzI1MDksNyBAQCBSZXByb2Nlc3NC
dWZmZXI6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5Db2x1bW5Hcm91cE1v
ZGUpOwogICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRlc3BhY2UgPSBidWZmZXIudGFrZUxlYWRp
bmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVhZGluZ1doaXRlc3BhY2UuaXNFbXB0eSgp
KQotICAgICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlKTsK
KyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRXaGl0ZXNwYWNlVGV4dE5vZGUobGVhZGluZ1doaXRl
c3BhY2UpOwogICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgaWYgKCFwcm9jZXNzQ29sZ3JvdXBFbmRUYWdGb3JJbkNvbHVtbkdyb3VwKCkp
IHsKQEAgLTI1NDAsNyArMjU0MCw3IEBAIFJlcHJvY2Vzc0J1ZmZlcjoKICAgICAgICAgQVNTRVJU
KGluc2VydGlvbk1vZGUoKSA9PSBJbkhlYWROb3NjcmlwdE1vZGUpOwogICAgICAgICBTdHJpbmcg
bGVhZGluZ1doaXRlc3BhY2UgPSBidWZmZXIudGFrZUxlYWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAg
ICAgIGlmICghbGVhZGluZ1doaXRlc3BhY2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV90cmVl
Lmluc2VydFRleHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlKTsKKyAgICAgICAgICAgIG1fdHJlZS5p
bnNlcnRXaGl0ZXNwYWNlVGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UpOwogICAgICAgICBpZiAo
YnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdEZv
ckluSGVhZE5vc2NyaXB0KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117712</attachid>
            <date>2011-12-02 16:50:49 -0800</date>
            <delta_ts>2011-12-05 13:28:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72404-20111202165048.patch</filename>
            <type>text/plain</type>
            <size>10277</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTRkMDBkNzIyOGRlNGQw
N2UwNTRmMmVjNzZhOTUwMDMyY2M1ZWVlZi4uNmE5MWRiNTAyZjhhMGEwZmNhOWFmNDA4MTE1ODVm
NzY0N2VmNTBhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDExLTEyLTAyICBFcmlr
IEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ291bGQgc2F2ZSBhIGxv
dCBvZiBtZW1vcnkgaW4gQ2hhcmFjdGVyRGF0YSBieSBub3QgYWx3YXlzIHN0b3JpbmcgYSBTdHJp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDA0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICBXaGVuIGEg
VGV4dCBub2RlIGlzIGNyZWF0ZWQgYnkgdGhlIHBhcnNlciB3ZSBjaGVjayBpZiB0aGUgc3RyaW5n
IGlzIGFsbCB3aGl0ZXNwYWNlCisgICAgICAgYW5kIGlmIHNvIHdlIHB1dCBpdCBpbiB0aGUgQXRv
bWljU3RyaW5nIHRhYmxlIHNvIHRoYXQgYWxsIGZ1dHVyZSBpZGVudGljYWwgd2hpdGVzcGFjZQor
ICAgICAgIHN0cmluZ3MgY2FuIHNoYXJlIHRoZSBTdHJpbmdJbXBsLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1l
czo6aXNBbGxXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnRUZXh0Tm9kZSk6CisKKyAgICAgICAgICAgIElmIHdlIGRvIG5vdCBrbm93IHdo
ZXRoZXIgdGhlIHN0cmluZyBpcyBhbGwgd2hpdGVzcGFjZSB0aGlzIG5vdyBjaGVja3MgdGhlIHN0
cmluZworICAgICAgICAgICAgSWYgdGhlIHN0cmluZyBpcyBhbGwgd2hpdGVzcGFjZSB3ZSBjcmVh
dGUgYW4gQXRvbWljU3RyaW5nIGZvciBpdC4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxD
b25zdHJ1Y3Rpb25TaXRlLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0
ZXJUb2tlbkJ1ZmZlcjo6dGFrZUxlYWRpbmdXaGl0ZXNwYWNlKTogVGhpcyBub3cgcmV0dXJucyBh
biBBdG9taWNTdHJpbmcuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkV4dGVy
bmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXI6OnNraXBMZWFkaW5nTm9uV2hpdGVzcGFjZSk6IFdlIG5l
dmVyIGNhcmVkIGFib3V0IHRoZSByZXR1cm4gdmFsdWUgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcjo6dGFrZVJlbWFp
bmluZ1doaXRlc3BhY2UpOiBUaGlzIG5vdyByZXR1cm5zIGFuIEF0b21pY1N0cmluZy4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlckJ1ZmZlcik6IFBh
c3MgV2hpdGVzcGFjZUluZm8gaW4gdGhlIGNhc2Ugd2Uga25vdyB3aGV0aGVyIHRoZSBzdHJpbmcg
aXMgYWxsIHdoaXRlc3BhY2Ugb3Igbm90LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpkZWZhdWx0Rm9ySW5UYWJsZVRleHQpOiBEaXR0by4KKwogMjAxMS0xMS0zMCAgSmFtZXMg
U2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IHZhbGdyaW5k
IGlzc3VlIGluIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXgg
Y2M5N2JiNjhlODhmM2EzN2I0OGRlM2M1ZDkyY2UwYzMwZTY3ODViYi4uNGM4ZmIyNzI5YWU0YWU0
YTdjNWNkZTBlZmM0NmNmMTRmNDQwYzk0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNp
bmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgogI2lu
Y2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKQEAgLTc5LDYgKzgwLDExIEBAIGJvb2wgY2F1c2VzRm9z
dGVyUGFyZW50aW5nKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpCiAgICAgICAgIHx8IHRh
Z05hbWUgPT0gdHJUYWc7CiB9CiAKK2lubGluZSBib29sIGlzQWxsV2hpdGVzcGFjZShjb25zdCBT
dHJpbmcmIHN0cmluZykKK3sKKyAgICByZXR1cm4gc3RyaW5nLmlzQWxsU3BlY2lhbENoYXJhY3Rl
cnM8aXNIVE1MU3BhY2U+KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAKIHRlbXBsYXRlPHR5cGVu
YW1lIENoaWxkVHlwZT4KQEAgLTMzMiw3ICszMzgsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnRGb3JlaWduRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBjb25zdCBB
dAogICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQpOwogfQogCi12b2lkIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kZShjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMp
Cit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kZShjb25zdCBTdHJpbmcm
IGNoYXJhY3RlcnMsIFdoaXRlc3BhY2VJbmZvIHdoaXRlc3BhY2VJbmZvKQogewogICAgIEF0dGFj
aG1lbnRTaXRlIHNpdGU7CiAgICAgc2l0ZS5wYXJlbnQgPSBjdXJyZW50Tm9kZSgpOwpAQCAtMzQw
LDYgKzM0Niw5IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFRleHROb2RlKGNv
bnN0IFN0cmluZyYgY2hhcmFjdGVycykKICAgICBpZiAoc2hvdWxkRm9zdGVyUGFyZW50KCkpCiAg
ICAgICAgIGZpbmRGb3N0ZXJTaXRlKHNpdGUpOwogCisgICAgaWYgKHdoaXRlc3BhY2VJbmZvID09
IFdoaXRlc3BhY2VVbmtub3duKQorICAgICAgICB3aGl0ZXNwYWNlSW5mbyA9IGlzQWxsV2hpdGVz
cGFjZShjaGFyYWN0ZXJzKSA/IEFsbFdoaXRlc3BhY2UgOiBOb3RBbGxXaGl0ZXNwYWNlOworCiAg
ICAgdW5zaWduZWQgY3VycmVudFBvc2l0aW9uID0gMDsKIAogICAgIC8vIEZJWE1FOiBTcGxpdHRp
bmcgdGV4dCBub2RlcyBpbnRvIHNtYWxsZXIgY2h1bmtzIGNvbnRyYWRpY3RzIEhUTUw1IHNwZWMs
IGJ1dCBpcyBjdXJyZW50bHkgbmVjZXNzYXJ5CkBAIC0zNTQsMTAgKzM2MywxMCBAQCB2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kZShjb25zdCBTdHJpbmcmIGNoYXJhY3Rl
cnMpCiAgICAgfQogCiAgICAgd2hpbGUgKGN1cnJlbnRQb3NpdGlvbiA8IGNoYXJhY3RlcnMubGVu
Z3RoKCkpIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gVGV4dDo6Y3JlYXRlV2l0
aExlbmd0aExpbWl0KHNpdGUucGFyZW50LT5kb2N1bWVudCgpLCBjaGFyYWN0ZXJzLCBjdXJyZW50
UG9zaXRpb24pOworICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBUZXh0OjpjcmVhdGVX
aXRoTGVuZ3RoTGltaXQoc2l0ZS5wYXJlbnQtPmRvY3VtZW50KCksIHdoaXRlc3BhY2VJbmZvID09
IEFsbFdoaXRlc3BhY2UgPyBBdG9taWNTdHJpbmcoY2hhcmFjdGVycykuc3RyaW5nKCkgOiBjaGFy
YWN0ZXJzLCBjdXJyZW50UG9zaXRpb24pOwogICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgd2hvbGUg
c3RyaW5nIG9mIHVuYnJlYWthYmxlIGNoYXJhY3RlcnMgdGhlIGFib3ZlIGNvdWxkIGxlYWQgdG8g
YW4gaW5maW5pdGUgbG9vcC4gRXhjZWVkaW5nIHRoZSBsZW5ndGggbGltaXQgaXMgdGhlIGxlc3Nl
ciBldmlsLgogICAgICAgICBpZiAoIXRleHROb2RlLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIHRl
eHROb2RlID0gVGV4dDo6Y3JlYXRlKHNpdGUucGFyZW50LT5kb2N1bWVudCgpLCBjaGFyYWN0ZXJz
LnN1YnN0cmluZyhjdXJyZW50UG9zaXRpb24pKTsKKyAgICAgICAgICAgIHRleHROb2RlID0gVGV4
dDo6Y3JlYXRlKHNpdGUucGFyZW50LT5kb2N1bWVudCgpLCB3aGl0ZXNwYWNlSW5mbyA9PSBBbGxX
aGl0ZXNwYWNlID8gQXRvbWljU3RyaW5nKGNoYXJhY3RlcnMuc3Vic3RyaW5nKGN1cnJlbnRQb3Np
dGlvbikpLnN0cmluZygpIDogY2hhcmFjdGVycy5zdWJzdHJpbmcoY3VycmVudFBvc2l0aW9uKSk7
CiAKICAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IHRleHROb2RlLT5sZW5ndGgoKTsKICAgICAg
ICAgQVNTRVJUKGN1cnJlbnRQb3NpdGlvbiA8PSBjaGFyYWN0ZXJzLmxlbmd0aCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCmluZGV4
IGUxMzJmMzY1MjA3MDYxOGM5ZDc5Yjk0YjMzMjhmZTg2NWMzYjVhMjEuLjllMGVlNzU4YzI0NTli
NjEyMDUyNjY5OTAxYWIwZjE0N2JlNWYyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaApAQCAtNDgsNiArNDgsMTIgQEAgcHVibGlj
OgogICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50RnJhZ21lbnQqLCBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24sIHVuc2lnbmVkIG1heGltdW1ET01UcmVlRGVwdGgpOwogICAgIH5I
VE1MQ29uc3RydWN0aW9uU2l0ZSgpOwogCisgICAgZW51bSBXaGl0ZXNwYWNlSW5mbyB7CisgICAg
ICAgIEFsbFdoaXRlc3BhY2UsCisgICAgICAgIE5vdEFsbFdoaXRlc3BhY2UsCisgICAgICAgIFdo
aXRlc3BhY2VVbmtub3duCisgICAgfTsKKwogICAgIHZvaWQgZGV0YWNoKCk7CiAKICAgICB2b2lk
IGluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuJik7CkBAIC02MSw3ICs2Nyw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGluc2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKICAg
ICB2b2lkIGluc2VydEhUTUxGb3JtRWxlbWVudChBdG9taWNIVE1MVG9rZW4mLCBib29sIGlzRGVt
b3RlZCA9IGZhbHNlKTsKICAgICB2b2lkIGluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRv
a2VuJik7Ci0gICAgdm9pZCBpbnNlcnRUZXh0Tm9kZShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IGluc2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYsIFdoaXRlc3BhY2VJbmZvID0gV2hpdGVzcGFj
ZVVua25vd24pOwogICAgIHZvaWQgaW5zZXJ0Rm9yZWlnbkVsZW1lbnQoQXRvbWljSFRNTFRva2Vu
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpOwogCiAgICAgdm9pZCBpbnNlcnRI
VE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChBdG9taWNIVE1MVG9rZW4mKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IGExMWNiMWM5ZTE4
YzgxOWY4MTMzN2QxOWQ0NmJjMWNmNGMwMzkyYTYuLjlkNzZhZTA1N2VmMjRkMDJkMDRmZTFhYzFj
YjczOGUxYTY3NzMzMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmNwcApAQCAtMjczLDE0ICsyNzMsMTQgQEAgcHVibGljOgogICAgICAgICBza2lw
TGVhZGluZzxpc0hUTUxTcGFjZT4oKTsKICAgICB9CiAKLSAgICBTdHJpbmcgdGFrZUxlYWRpbmdX
aGl0ZXNwYWNlKCkKKyAgICBBdG9taWNTdHJpbmcgdGFrZUxlYWRpbmdXaGl0ZXNwYWNlKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiB0YWtlTGVhZGluZzxpc0hUTUxTcGFjZT4oKTsKICAgICB9CiAK
LSAgICBTdHJpbmcgdGFrZUxlYWRpbmdOb25XaGl0ZXNwYWNlKCkKKyAgICB2b2lkIHNraXBMZWFk
aW5nTm9uV2hpdGVzcGFjZSgpCiAgICAgewotICAgICAgICByZXR1cm4gdGFrZUxlYWRpbmc8aXNO
b3RIVE1MU3BhY2U+KCk7CisgICAgICAgIHNraXBMZWFkaW5nPGlzTm90SFRNTFNwYWNlPigpOwog
ICAgIH0KIAogICAgIFN0cmluZyB0YWtlUmVtYWluaW5nKCkKQEAgLTI5Nyw3ICsyOTcsNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fY3VycmVudCA9IG1fZW5kOwogICAgIH0KIAotICAgIFN0cmluZyB0
YWtlUmVtYWluaW5nV2hpdGVzcGFjZSgpCisgICAgQXRvbWljU3RyaW5nIHRha2VSZW1haW5pbmdX
aGl0ZXNwYWNlKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICAgICAg
VmVjdG9yPFVDaGFyPiB3aGl0ZXNwYWNlOwpAQCAtMjQ2NCw3ICsyNDY0LDcgQEAgUmVwcm9jZXNz
QnVmZmVyOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluSGVhZE1vZGUpOwog
ICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRlc3BhY2UgPSBidWZmZXIudGFrZUxlYWRpbmdXaGl0
ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVhZGluZ1doaXRlc3BhY2UuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlKTsKKyAgICAg
ICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSwgSFRNTENvbnN0
cnVjdGlvblNpdGU6OkFsbFdoaXRlc3BhY2UpOwogICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHko
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdEZvckluSGVhZCgpOwpAQCAt
MjQ3NCw3ICsyNDc0LDcgQEAgUmVwcm9jZXNzQnVmZmVyOgogICAgICAgICBBU1NFUlQoaW5zZXJ0
aW9uTW9kZSgpID09IEFmdGVySGVhZE1vZGUpOwogICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRl
c3BhY2UgPSBidWZmZXIudGFrZUxlYWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVh
ZGluZ1doaXRlc3BhY2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV90cmVlLmluc2VydFRleHRO
b2RlKGxlYWRpbmdXaGl0ZXNwYWNlKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9k
ZShsZWFkaW5nV2hpdGVzcGFjZSwgSFRNTENvbnN0cnVjdGlvblNpdGU6OkFsbFdoaXRlc3BhY2Up
OwogICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgZGVmYXVsdEZvckFmdGVySGVhZCgpOwpAQCAtMjUwOSwxMyArMjUwOSwxMyBAQCBSZXBy
b2Nlc3NCdWZmZXI6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5Db2x1bW5H
cm91cE1vZGUpOwogICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRlc3BhY2UgPSBidWZmZXIudGFr
ZUxlYWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVhZGluZ1doaXRlc3BhY2UuaXNF
bXB0eSgpKQotICAgICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGxlYWRpbmdXaGl0ZXNw
YWNlKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFj
ZSwgSFRNTENvbnN0cnVjdGlvblNpdGU6OkFsbFdoaXRlc3BhY2UpOwogICAgICAgICBpZiAoYnVm
ZmVyLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCFwcm9jZXNz
Q29sZ3JvdXBFbmRUYWdGb3JJbkNvbHVtbkdyb3VwKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChp
c1BhcnNpbmdGcmFnbWVudCgpKTsKICAgICAgICAgICAgIC8vIFRoZSBzcGVjIHRlbGxzIHVzIHRv
IGRyb3AgdGhlc2UgY2hhcmFjdGVycyBvbiB0aGUgZmxvb3IuCi0gICAgICAgICAgICBidWZmZXIu
dGFrZUxlYWRpbmdOb25XaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICBidWZmZXIuc2tpcExlYWRp
bmdOb25XaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI1NDAsNyArMjU0MCw3IEBAIFJl
cHJvY2Vzc0J1ZmZlcjoKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbkhlYWRO
b3NjcmlwdE1vZGUpOwogICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRlc3BhY2UgPSBidWZmZXIu
dGFrZUxlYWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVhZGluZ1doaXRlc3BhY2Uu
aXNFbXB0eSgpKQotICAgICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGxlYWRpbmdXaGl0
ZXNwYWNlKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShsZWFkaW5nV2hpdGVz
cGFjZSwgSFRNTENvbnN0cnVjdGlvblNpdGU6OkFsbFdoaXRlc3BhY2UpOwogICAgICAgICBpZiAo
YnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdEZv
ckluSGVhZE5vc2NyaXB0KCk7CkBAIC0yNTUyLDcgKzI1NTIsNyBAQCBSZXByb2Nlc3NCdWZmZXI6
CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5GcmFtZXNldE1vZGUgfHwgaW5z
ZXJ0aW9uTW9kZSgpID09IEFmdGVyRnJhbWVzZXRNb2RlIHx8IGluc2VydGlvbk1vZGUoKSA9PSBB
ZnRlckFmdGVyRnJhbWVzZXRNb2RlKTsKICAgICAgICAgU3RyaW5nIGxlYWRpbmdXaGl0ZXNwYWNl
ID0gYnVmZmVyLnRha2VSZW1haW5pbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVhZGlu
Z1doaXRlc3BhY2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2Rl
KGxlYWRpbmdXaGl0ZXNwYWNlKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShs
ZWFkaW5nV2hpdGVzcGFjZSwgSFRNTENvbnN0cnVjdGlvblNpdGU6OkFsbFdoaXRlc3BhY2UpOwog
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGdlbmVyYXRlIGEgcGFyc2UgZXJyb3IgaWYgd2Ug
c2tpcHBlZCBvdmVyIGFueQogICAgICAgICAvLyBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgog
ICAgICAgICBicmVhazsKQEAgLTI1NzUsNyArMjU3NSw3IEBAIFJlcHJvY2Vzc0J1ZmZlcjoKICAg
ICAgICAgU3RyaW5nIGxlYWRpbmdXaGl0ZXNwYWNlID0gYnVmZmVyLnRha2VSZW1haW5pbmdXaGl0
ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVhZGluZ1doaXRlc3BhY2UuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMo
KTsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSk7
CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UsIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjpBbGxXaGl0ZXNwYWNlKTsKICAgICAgICAgfQogICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGdlbmVyYXRlIGEgcGFyc2UgZXJyb3IgaWYgd2Ugc2tpcHBlZCBv
dmVyIGFueQogICAgICAgICAvLyBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgpAQCAtMjcyNyw3
ICsyNzI3LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJblRhYmxlVGV4dCgp
CiAgICAgICAgIC8vIEZJWE1FOiBwYXJzZSBlcnJvcgogICAgICAgICBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6UmVkaXJlY3RUb0Zvc3RlclBhcmVudEd1YXJkIHJlZGlyZWN0ZXIobV90cmVlKTsKICAg
ICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0g
ICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShjaGFyYWN0ZXJzKTsKKyAgICAgICAgbV90cmVl
Lmluc2VydFRleHROb2RlKGNoYXJhY3RlcnMsIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpOb3RBbGxX
aGl0ZXNwYWNlKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHNldElu
c2VydGlvbk1vZGUobV9vcmlnaW5hbEluc2VydGlvbk1vZGUpOwogICAgICAgICBwcmVwYXJlVG9S
ZXByb2Nlc3NUb2tlbigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117932</attachid>
            <date>2011-12-05 13:28:15 -0800</date>
            <delta_ts>2011-12-05 22:13:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72404-20111205132814.patch</filename>
            <type>text/plain</type>
            <size>9581</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTRkMDBkNzIyOGRlNGQw
N2UwNTRmMmVjNzZhOTUwMDMyY2M1ZWVlZi4uZjViMzQ5ZmUyZjA0NDAxOGY2Mjk3Y2I0ZWNjNTUy
MjI5N2MxZjU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTEyLTA1ICBFcmlr
IEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ291bGQgc2F2ZSBhIGxv
dCBvZiBtZW1vcnkgaW4gQ2hhcmFjdGVyRGF0YSBieSBub3QgYWx3YXlzIHN0b3JpbmcgYSBTdHJp
bmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDA0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBh
IFRleHQgbm9kZSBpcyBjcmVhdGVkIGJ5IHRoZSBwYXJzZXIgd2UgY2hlY2sgaWYgdGhlIHN0cmlu
ZyBpcyBhbGwgd2hpdGVzcGFjZQorICAgICAgICBhbmQgaWYgc28gd2UgcHV0IGl0IGluIHRoZSBB
dG9taWNTdHJpbmcgdGFibGUgc28gdGhhdCBhbGwgZnV0dXJlIGlkZW50aWNhbCB3aGl0ZXNwYWNl
CisgICAgICAgIHN0cmluZ3MgY2FuIHNoYXJlIHRoZSBTdHJpbmdJbXBsLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxO
YW1lczo6aXNBbGxXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRUZXh0Tm9kZSk6CisKKyAgICAgICAgICAgIElmIHdlIGRvIG5vdCBrbm93
IHdoZXRoZXIgdGhlIHN0cmluZyBpcyBhbGwgd2hpdGVzcGFjZSB0aGlzIG5vdyBjaGVja3MgdGhl
IHN0cmluZworICAgICAgICAgICAgSWYgdGhlIHN0cmluZyBpcyBhbGwgd2hpdGVzcGFjZSB3ZSBj
cmVhdGUgYW4gQXRvbWljU3RyaW5nIGZvciBpdC4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxDb25zdHJ1Y3Rpb25TaXRlLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6RXh0ZXJuYWxDaGFy
YWN0ZXJUb2tlbkJ1ZmZlcjo6c2tpcExlYWRpbmdOb25XaGl0ZXNwYWNlKTogV2UgbmV2ZXIgY2Fy
ZWQgYWJvdXQgdGhlIHJldHVybiB2YWx1ZSBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyKTogUGFzcyBXaGl0ZXNwYWNlTW9kZSBp
biB0aGUgY2FzZSB3ZSBrbm93IHdoZXRoZXIgdGhlIHN0cmluZyBpcyBhbGwgd2hpdGVzcGFjZSBv
ciBub3QuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJblRh
YmxlVGV4dCk6IERpdHRvLgorCiAyMDExLTExLTMwICBKYW1lcyBTaW1vbnNlbiAgPHNpbW9uamFt
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggdmFsZ3JpbmQgaXNzdWUgaW4gU3VicmVzb3Vy
Y2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCBjYzk3YmI2OGU4OGYzYTM3YjQ4
ZGUzYzVkOTJjZTBjMzBlNjc4NWJiLi5hMGZjMDg5ZDRkNmNkY2M2ZDRjZDYxMDA3NWQ2MzI3ZDM0
MGRhZGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3Ry
dWN0aW9uU2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0
cnVjdGlvblNpdGUuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXpl
ci5oIgpAQCAtNzksNiArODAsMTEgQEAgYm9vbCBjYXVzZXNGb3N0ZXJQYXJlbnRpbmcoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkKICAgICAgICAgfHwgdGFnTmFtZSA9PSB0clRhZzsKIH0K
IAoraW5saW5lIGJvb2wgaXNBbGxXaGl0ZXNwYWNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorewor
ICAgIHJldHVybiBzdHJpbmcuaXNBbGxTcGVjaWFsQ2hhcmFjdGVyczxpc0hUTUxTcGFjZT4oKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRUeXBlPgpAQCAt
MzMyLDcgKzMzOCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcmVpZ25F
bGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0CiAgICAgICAgIG1fb3BlbkVs
ZW1lbnRzLnB1c2goZWxlbWVudCk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycykKK3ZvaWQgSFRNTENvbnN0cnVj
dGlvblNpdGU6Omluc2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgV2hpdGVz
cGFjZU1vZGUgd2hpdGVzcGFjZU1vZGUpCiB7CiAgICAgQXR0YWNobWVudFNpdGUgc2l0ZTsKICAg
ICBzaXRlLnBhcmVudCA9IGN1cnJlbnROb2RlKCk7CkBAIC0zNDAsNiArMzQ2LDExIEBAIHZvaWQg
SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYgY2hhcmFj
dGVycykKICAgICBpZiAoc2hvdWxkRm9zdGVyUGFyZW50KCkpCiAgICAgICAgIGZpbmRGb3N0ZXJT
aXRlKHNpdGUpOwogCisgICAgLy8gU3RyaW5ncyBjb21wb3NlZCBlbnRpcmVseSBvZiB3aGl0ZXNw
YWNlIGFyZSBsaWtlbHkgdG8gYmUgcmVwZWF0ZWQuCisgICAgLy8gVHVybiB0aGVtIGludG8gQXRv
bWljU3RyaW5nIHNvIHdlIHNoYXJlIGEgc2luZ2xlIHN0cmluZyBmb3IgZWFjaC4KKyAgICBib29s
IHNob3VsZFVzZUF0b21pY1N0cmluZyA9IHdoaXRlc3BhY2VNb2RlID09IEFsbFdoaXRlc3BhY2UK
KyAgICAgICAgfHwgKHdoaXRlc3BhY2VNb2RlID09IFdoaXRlc3BhY2VVbmtub3duICYmIGlzQWxs
V2hpdGVzcGFjZShjaGFyYWN0ZXJzKSk7CisKICAgICB1bnNpZ25lZCBjdXJyZW50UG9zaXRpb24g
PSAwOwogCiAgICAgLy8gRklYTUU6IFNwbGl0dGluZyB0ZXh0IG5vZGVzIGludG8gc21hbGxlciBj
aHVua3MgY29udHJhZGljdHMgSFRNTDUgc3BlYywgYnV0IGlzIGN1cnJlbnRseSBuZWNlc3NhcnkK
QEAgLTM1NCwxMCArMzY1LDEyIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFRl
eHROb2RlKGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycykKICAgICB9CiAKICAgICB3aGlsZSAoY3Vy
cmVudFBvc2l0aW9uIDwgY2hhcmFjdGVycy5sZW5ndGgoKSkgewotICAgICAgICBSZWZQdHI8VGV4
dD4gdGV4dE5vZGUgPSBUZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQoc2l0ZS5wYXJlbnQtPmRv
Y3VtZW50KCksIGNoYXJhY3RlcnMsIGN1cnJlbnRQb3NpdGlvbik7CisgICAgICAgIFJlZlB0cjxU
ZXh0PiB0ZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdChzaXRlLnBhcmVudC0+
ZG9jdW1lbnQoKSwgc2hvdWxkVXNlQXRvbWljU3RyaW5nID8gQXRvbWljU3RyaW5nKGNoYXJhY3Rl
cnMpLnN0cmluZygpIDogY2hhcmFjdGVycywgY3VycmVudFBvc2l0aW9uKTsKICAgICAgICAgLy8g
SWYgd2UgaGF2ZSBhIHdob2xlIHN0cmluZyBvZiB1bmJyZWFrYWJsZSBjaGFyYWN0ZXJzIHRoZSBh
Ym92ZSBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuIEV4Y2VlZGluZyB0aGUgbGVuZ3Ro
IGxpbWl0IGlzIHRoZSBsZXNzZXIgZXZpbC4KLSAgICAgICAgaWYgKCF0ZXh0Tm9kZS0+bGVuZ3Ro
KCkpCi0gICAgICAgICAgICB0ZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShzaXRlLnBhcmVudC0+ZG9j
dW1lbnQoKSwgY2hhcmFjdGVycy5zdWJzdHJpbmcoY3VycmVudFBvc2l0aW9uKSk7CisgICAgICAg
IGlmICghdGV4dE5vZGUtPmxlbmd0aCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgc3Vic3RyaW5n
ID0gY2hhcmFjdGVycy5zdWJzdHJpbmcoY3VycmVudFBvc2l0aW9uKTsKKyAgICAgICAgICAgIHRl
eHROb2RlID0gVGV4dDo6Y3JlYXRlKHNpdGUucGFyZW50LT5kb2N1bWVudCgpLCBzaG91bGRVc2VB
dG9taWNTdHJpbmcgPyBBdG9taWNTdHJpbmcoc3Vic3RyaW5nKS5zdHJpbmcoKSA6IHN1YnN0cmlu
Zyk7CisgICAgICAgIH0KIAogICAgICAgICBjdXJyZW50UG9zaXRpb24gKz0gdGV4dE5vZGUtPmxl
bmd0aCgpOwogICAgICAgICBBU1NFUlQoY3VycmVudFBvc2l0aW9uIDw9IGNoYXJhY3RlcnMubGVu
Z3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0
cnVjdGlvblNpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmgKaW5kZXggZTEzMmYzNjUyMDcwNjE4YzlkNzliOTRiMzMyOGZlODY1YzNiNWEyMS4u
MTcyYWU2YzNhMWY1YTlhYjg3NjAxNTYzZTk0OTUzYzc0MzI1YTU2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCkBAIC0zNyw2ICsz
NywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2VudW0gV2hpdGVzcGFjZU1vZGUgewor
ICAgIEFsbFdoaXRlc3BhY2UsCisgICAgTm90QWxsV2hpdGVzcGFjZSwKKyAgICBXaGl0ZXNwYWNl
VW5rbm93bgorfTsKKwogY2xhc3MgQXRvbWljSFRNTFRva2VuOwogY2xhc3MgRG9jdW1lbnQ7CiBj
bGFzcyBFbGVtZW50OwpAQCAtNjEsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnRI
VE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CiAgICAgdm9pZCBpbnNlcnRIVE1MRm9y
bUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgYm9vbCBpc0RlbW90ZWQgPSBmYWxzZSk7CiAgICAg
dm9pZCBpbnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5z
ZXJ0VGV4dE5vZGUoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBpbnNlcnRUZXh0Tm9kZShjb25z
dCBTdHJpbmcmLCBXaGl0ZXNwYWNlTW9kZSA9IFdoaXRlc3BhY2VVbmtub3duKTsKICAgICB2b2lk
IGluc2VydEZvcmVpZ25FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZXNwYWNlVVJJKTsKIAogICAgIHZvaWQgaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9y
ZUhUTUwoQXRvbWljSFRNTFRva2VuJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCBhMTFjYjFjOWUxOGM4MTlmODEzMzdkMTlkNDZiYzFj
ZjRjMDM5MmE2Li5mMTM3YjIwYTM2NzE3NTY2YmJlNjBhZmUxZDgxMmU5MTY2MTI1NzczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTI3
OCw5ICsyNzgsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0YWtlTGVhZGluZzxpc0hUTUxT
cGFjZT4oKTsKICAgICB9CiAKLSAgICBTdHJpbmcgdGFrZUxlYWRpbmdOb25XaGl0ZXNwYWNlKCkK
KyAgICB2b2lkIHNraXBMZWFkaW5nTm9uV2hpdGVzcGFjZSgpCiAgICAgewotICAgICAgICByZXR1
cm4gdGFrZUxlYWRpbmc8aXNOb3RIVE1MU3BhY2U+KCk7CisgICAgICAgIHNraXBMZWFkaW5nPGlz
Tm90SFRNTFNwYWNlPigpOwogICAgIH0KIAogICAgIFN0cmluZyB0YWtlUmVtYWluaW5nKCkKQEAg
LTI0NjQsNyArMjQ2NCw3IEBAIFJlcHJvY2Vzc0J1ZmZlcjoKICAgICAgICAgQVNTRVJUKGluc2Vy
dGlvbk1vZGUoKSA9PSBJbkhlYWRNb2RlKTsKICAgICAgICAgU3RyaW5nIGxlYWRpbmdXaGl0ZXNw
YWNlID0gYnVmZmVyLnRha2VMZWFkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICBpZiAoIWxlYWRp
bmdXaGl0ZXNwYWNlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9k
ZShsZWFkaW5nV2hpdGVzcGFjZSk7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUo
bGVhZGluZ1doaXRlc3BhY2UsIEFsbFdoaXRlc3BhY2UpOwogICAgICAgICBpZiAoYnVmZmVyLmlz
RW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdEZvckluSGVhZCgp
OwpAQCAtMjQ3NCw3ICsyNDc0LDcgQEAgUmVwcm9jZXNzQnVmZmVyOgogICAgICAgICBBU1NFUlQo
aW5zZXJ0aW9uTW9kZSgpID09IEFmdGVySGVhZE1vZGUpOwogICAgICAgICBTdHJpbmcgbGVhZGlu
Z1doaXRlc3BhY2UgPSBidWZmZXIudGFrZUxlYWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGlm
ICghbGVhZGluZ1doaXRlc3BhY2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV90cmVlLmluc2Vy
dFRleHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRU
ZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSwgQWxsV2hpdGVzcGFjZSk7CiAgICAgICAgIGlmIChi
dWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkZWZhdWx0Rm9y
QWZ0ZXJIZWFkKCk7CkBAIC0yNTA5LDEzICsyNTA5LDEzIEBAIFJlcHJvY2Vzc0J1ZmZlcjoKICAg
ICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbkNvbHVtbkdyb3VwTW9kZSk7CiAgICAg
ICAgIFN0cmluZyBsZWFkaW5nV2hpdGVzcGFjZSA9IGJ1ZmZlci50YWtlTGVhZGluZ1doaXRlc3Bh
Y2UoKTsKICAgICAgICAgaWYgKCFsZWFkaW5nV2hpdGVzcGFjZS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UpOworICAgICAgICAg
ICAgbV90cmVlLmluc2VydFRleHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlLCBBbGxXaGl0ZXNwYWNl
KTsKICAgICAgICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGlmICghcHJvY2Vzc0NvbGdyb3VwRW5kVGFnRm9ySW5Db2x1bW5Hcm91cCgpKSB7CiAg
ICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7CiAgICAgICAgICAgICAvLyBU
aGUgc3BlYyB0ZWxscyB1cyB0byBkcm9wIHRoZXNlIGNoYXJhY3RlcnMgb24gdGhlIGZsb29yLgot
ICAgICAgICAgICAgYnVmZmVyLnRha2VMZWFkaW5nTm9uV2hpdGVzcGFjZSgpOworICAgICAgICAg
ICAgYnVmZmVyLnNraXBMZWFkaW5nTm9uV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgaWYgKGJ1
ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0y
NTQwLDcgKzI1NDAsNyBAQCBSZXByb2Nlc3NCdWZmZXI6CiAgICAgICAgIEFTU0VSVChpbnNlcnRp
b25Nb2RlKCkgPT0gSW5IZWFkTm9zY3JpcHRNb2RlKTsKICAgICAgICAgU3RyaW5nIGxlYWRpbmdX
aGl0ZXNwYWNlID0gYnVmZmVyLnRha2VMZWFkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICBpZiAo
IWxlYWRpbmdXaGl0ZXNwYWNlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRU
ZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSk7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0VGV4
dE5vZGUobGVhZGluZ1doaXRlc3BhY2UsIEFsbFdoaXRlc3BhY2UpOwogICAgICAgICBpZiAoYnVm
ZmVyLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdEZvcklu
SGVhZE5vc2NyaXB0KCk7CkBAIC0yNTUyLDcgKzI1NTIsNyBAQCBSZXByb2Nlc3NCdWZmZXI6CiAg
ICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5GcmFtZXNldE1vZGUgfHwgaW5zZXJ0
aW9uTW9kZSgpID09IEFmdGVyRnJhbWVzZXRNb2RlIHx8IGluc2VydGlvbk1vZGUoKSA9PSBBZnRl
ckFmdGVyRnJhbWVzZXRNb2RlKTsKICAgICAgICAgU3RyaW5nIGxlYWRpbmdXaGl0ZXNwYWNlID0g
YnVmZmVyLnRha2VSZW1haW5pbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVhZGluZ1do
aXRlc3BhY2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGxl
YWRpbmdXaGl0ZXNwYWNlKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShsZWFk
aW5nV2hpdGVzcGFjZSwgQWxsV2hpdGVzcGFjZSk7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgZ2VuZXJhdGUgYSBwYXJzZSBlcnJvciBpZiB3ZSBza2lwcGVkIG92ZXIgYW55CiAgICAgICAg
IC8vIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCiAgICAgICAgIGJyZWFrOwpAQCAtMjU3NSw3
ICsyNTc1LDcgQEAgUmVwcm9jZXNzQnVmZmVyOgogICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRl
c3BhY2UgPSBidWZmZXIudGFrZVJlbWFpbmluZ1doaXRlc3BhY2UoKTsKICAgICAgICAgaWYgKCFs
ZWFkaW5nV2hpdGVzcGFjZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1fdHJlZS5yZWNvbnN0
cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICAgICAgbV90cmVlLmlu
c2VydFRleHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNl
cnRUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSwgQWxsV2hpdGVzcGFjZSk7CiAgICAgICAgIH0K
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBnZW5lcmF0ZSBhIHBhcnNlIGVycm9yIGlmIHdl
IHNraXBwZWQgb3ZlciBhbnkKICAgICAgICAgLy8gbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycy4K
QEAgLTI3MjcsNyArMjcyNyw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5U
YWJsZVRleHQoKQogICAgICAgICAvLyBGSVhNRTogcGFyc2UgZXJyb3IKICAgICAgICAgSFRNTENv
bnN0cnVjdGlvblNpdGU6OlJlZGlyZWN0VG9Gb3N0ZXJQYXJlbnRHdWFyZCByZWRpcmVjdGVyKG1f
dHJlZSk7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cygpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUoY2hhcmFjdGVycyk7CisgICAg
ICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShjaGFyYWN0ZXJzLCBOb3RBbGxXaGl0ZXNwYWNlKTsK
ICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHNldEluc2VydGlvbk1vZGUo
bV9vcmlnaW5hbEluc2VydGlvbk1vZGUpOwogICAgICAgICBwcmVwYXJlVG9SZXByb2Nlc3NUb2tl
bigpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>