<?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>101144</bug_id>
          
          <creation_ts>2012-11-02 22:04:41 -0700</creation_ts>
          <short_desc>SimplifyMarkupCommand takes a disproportionally long time to run when there are many nodes to remove</short_desc>
          <delta_ts>2012-11-07 17:18:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>adele</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>mifenton</cc>
    
    <cc>mitz</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>757892</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-02 22:04:41 -0700</bug_when>
    <thetext>SimplifyMarkupCommand can take Θ(n^2) time to run because mass removal doesn&apos;t really do the mass removal. For each node removal we do, we end up re-attaching lots of render objects. We can do better by avoiding attach()es and doing some out-of-order removal to minimize the number of removals we do.

&lt;rdar://problem/12179712&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757893</commentid>
    <comment_count>1</comment_count>
      <attachid>172207</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-02 22:05:52 -0700</bug_when>
    <thetext>Created attachment 172207
Work in progress patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758678</commentid>
    <comment_count>2</comment_count>
      <attachid>172359</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 10:42:56 -0800</bug_when>
    <thetext>Created attachment 172359
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758690</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-05 10:51:43 -0800</bug_when>
    <thetext>Attachment 172359 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/ChangeLog:26:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758702</commentid>
    <comment_count>4</comment_count>
      <attachid>172359</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-11-05 10:58:32 -0800</bug_when>
    <thetext>Comment on attachment 172359
Fixes the bug

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

I&apos;m not thrilled at the idea of removing the root editable element in principle, but I don&apos;t see how else you could do it otherwise.

&gt; Source/WebCore/editing/RemoveNodeCommand.cpp:45
&gt; +    if (!parent || (!parent-&gt;isContentEditable(Node::UserSelectAllIsAlwaysNonEditable) &amp;&amp; parent-&gt;attached()))

Why do you need to check if it is attached?

&gt; Source/WebCore/editing/SimplifyMarkupCommand.cpp:120
&gt; +            || nodesToRemove[pastLastNodeToRemove]-&gt;firstChild() != nodesToRemove[pastLastNodeToRemove]-&gt;lastChild())

I don&apos;t think the second condition could ever be true. If I recall correctly I never place in the list of nodes to remove nodes with more than one child.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758705</commentid>
    <comment_count>5</comment_count>
      <attachid>172359</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 11:02:40 -0800</bug_when>
    <thetext>Comment on attachment 172359
Fixes the bug

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

&gt;&gt; Source/WebCore/editing/SimplifyMarkupCommand.cpp:120
&gt;&gt; +            || nodesToRemove[pastLastNodeToRemove]-&gt;firstChild() != nodesToRemove[pastLastNodeToRemove]-&gt;lastChild())
&gt; 
&gt; I don&apos;t think the second condition could ever be true. If I recall correctly I never place in the list of nodes to remove nodes with more than one child.

That’s a good point. I’ll turn that into an assertion for documentation purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758707</commentid>
    <comment_count>6</comment_count>
      <attachid>172359</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 11:03:45 -0800</bug_when>
    <thetext>Comment on attachment 172359
Fixes the bug

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

&gt;&gt; Source/WebCore/editing/RemoveNodeCommand.cpp:45
&gt;&gt; +    if (!parent || (!parent-&gt;isContentEditable(Node::UserSelectAllIsAlwaysNonEditable) &amp;&amp; parent-&gt;attached()))
&gt; 
&gt; Why do you need to check if it is attached?

Unfortunately isContentEditable returns false for a node without attached ancestor :( Gotta hate -webkit-user-modify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758717</commentid>
    <comment_count>7</comment_count>
      <attachid>172359</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-05 11:11:47 -0800</bug_when>
    <thetext>Comment on attachment 172359
Fixes the bug

So, we are knowingly creating a bug here? For example, if you have a blur event handler on one of the nodes removed and in that handler you grab the computed style of the contentEditable element, we&apos;ll return the wrong thing?

That doesn&apos;t seem great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758720</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 11:14:00 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 172359 [details])
&gt; So, we are knowingly creating a bug here? For example, if you have a blur event handler on one of the nodes removed and in that handler you grab the computed style of the contentEditable element, we&apos;ll return the wrong thing?
&gt; 
&gt; That doesn&apos;t seem great.

It&apos;s not great but I can&apos;t think of an alternative solution here. The problem is that what&apos;s slow is traversing nodes and attach()ing render object so any solution that involves traversing nodes will be too slow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758730</commentid>
    <comment_count>9</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-05 11:23:29 -0800</bug_when>
    <thetext>You could imagine having a RAII object that would delay attaching any renderers until the RAII object goes away or we try to read out the computedStyle or other layout dependent data off the node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758734</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 11:27:02 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; You could imagine having a RAII object that would delay attaching any renderers until the RAII object goes away or we try to read out the computedStyle or other layout dependent data off the node.

Possibly. The problem is that this RAII object will then hold onto ~8*n million entries where n is the average number of children those 8 million nodes have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758739</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 11:29:32 -0800</bug_when>
    <thetext>Oh well, I guess there will be only 8 million entries since we can just hold onto the nodes themselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758747</commentid>
    <comment_count>12</comment_count>
      <attachid>172359</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-05 11:40:04 -0800</bug_when>
    <thetext>Comment on attachment 172359
Fixes the bug

There has to be a less hacky solution to this that performs well. The RAII object doesn&apos;t need to hold on to the nodes. It just needs to keep them from attaching. In its destructor we could walk the root editable elements tree and attach anything that&apos;s not attached. That should perform comparably to what you have here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758754</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 11:45:16 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 172359 [details])
&gt; There has to be a less hacky solution to this that performs well. The RAII object doesn&apos;t need to hold on to the nodes. It just needs to keep them from attaching. In its destructor we could walk the root editable elements tree and attach anything that&apos;s not attached. That should perform comparably to what you have here.

Another problem is isContentEditable. Even if we delayed attach, we’ll still force style recall in isContentEditable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758760</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 11:50:51 -0800</bug_when>
    <thetext>recalc*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759059</commentid>
    <comment_count>15</comment_count>
      <attachid>172446</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 17:03:46 -0800</bug_when>
    <thetext>Created attachment 172446
Lazy attach + avoid calling isContentEditable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759061</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 17:06:20 -0800</bug_when>
    <thetext>Note we can’t have a RAII object to avoid calling isContentEditable because accessibility code, author scripts, and others could synchronously call isContentEditable or rendererIsEditable while we’re removing the nodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759085</commentid>
    <comment_count>17</comment_count>
      <attachid>172446</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-05 17:40:40 -0800</bug_when>
    <thetext>Comment on attachment 172446
Lazy attach + avoid calling isContentEditable

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

Can you include a manual test-case? That way if anyone needs to work on this code in the future, they will be able to make sure they don&apos;t regress it if they need to change this significantly.

&gt; Source/WebCore/ChangeLog:19
&gt; +        this specific case is not the worth the increase in the bot cycle time. I&apos;ll note that the email
&gt; +        attached in the original radar bug (&lt;rdar://problem/12179712&gt;) took 100 seconds to open now only takes
&gt; +        7 seconds to open on my MacPro.

Do you still get the same numbers with this new patch?

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:945
&gt; +    node-&gt;document()-&gt;updateStyleIfNeeded();

Is this needed now because we lazy attach? If so, would be good to put a comment to that effect.

&gt; Source/WebCore/editing/SimplifyMarkupCommand.cpp:44
&gt; +    Vector&lt;RefPtr&lt;Node&gt; &gt; nodesToRemove;

This looks like a behavior change to me. As in, it looks like you are fixing a use-after-free bug here. Mind making a test-case for this?

&gt; Source/WebCore/editing/SimplifyMarkupCommand.cpp:90
&gt; +        int numPrunedAncestors = pruneSubsequentAncestorsToRemove(nodesToRemove, i);

It seems to me that we could do something much simpler here. In the loop above, have two vectors:
nodesToRemove and nodeWithChildrenToPreserve (needs a better name).

Only add the highest ancestor to remove to nodesToRemove and the lowest ancestor to remove to nodeWithChildrenToPreserve. Then, create a version of removeNodePreservingChildren that takes a first argument of the highest ancestor to remove and a second argument of the lowest ancestor to remove.

Then removeNodePreservingChildren just reparents the children of the lowest ancestor and then removes the highest ancestor.

In addition to being simpler, I expect that would perform much better as well. Also, then I don&apos;t think we&apos;d need to do any of this lazyAttach or AssumeContentIsAlwaysEditable stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759124</commentid>
    <comment_count>18</comment_count>
      <attachid>172446</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 18:19:01 -0800</bug_when>
    <thetext>Comment on attachment 172446
Lazy attach + avoid calling isContentEditable

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

&gt;&gt; Source/WebCore/ChangeLog:19
&gt;&gt; +        7 seconds to open on my MacPro.
&gt; 
&gt; Do you still get the same numbers with this new patch?

Yes.

&gt;&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:945
&gt;&gt; +    node-&gt;document()-&gt;updateStyleIfNeeded();
&gt; 
&gt; Is this needed now because we lazy attach? If so, would be good to put a comment to that effect.

Yes. The reason is self-evident from the fact the line line below touches node-&gt;renderer().

&gt;&gt; Source/WebCore/editing/SimplifyMarkupCommand.cpp:44
&gt;&gt; +    Vector&lt;RefPtr&lt;Node&gt; &gt; nodesToRemove;
&gt; 
&gt; This looks like a behavior change to me. As in, it looks like you are fixing a use-after-free bug here. Mind making a test-case for this?

No. The reason I have to make this RefPtr is the optimization I added below. We used to always moves from one place in the document to another place.
This patch implements a mass removal, which necessities all nodes to be retained.

&gt;&gt; Source/WebCore/editing/SimplifyMarkupCommand.cpp:90
&gt;&gt; +        int numPrunedAncestors = pruneSubsequentAncestorsToRemove(nodesToRemove, i);
&gt; 
&gt; It seems to me that we could do something much simpler here. In the loop above, have two vectors:
&gt; nodesToRemove and nodeWithChildrenToPreserve (needs a better name).
&gt; 
&gt; Only add the highest ancestor to remove to nodesToRemove and the lowest ancestor to remove to nodeWithChildrenToPreserve. Then, create a version of removeNodePreservingChildren that takes a first argument of the highest ancestor to remove and a second argument of the lowest ancestor to remove.
&gt; 
&gt; Then removeNodePreservingChildren just reparents the children of the lowest ancestor and then removes the highest ancestor.
&gt; 
&gt; In addition to being simpler, I expect that would perform much better as well. Also, then I don&apos;t think we&apos;d need to do any of this lazyAttach or AssumeContentIsAlwaysEditable stuff.

I had already tried that but even checking whether a node is the highest ancestor to remove or not will significantly increases the runtime because that’s an O(n^2) operation where n is 8 million.
And even if we could implement a clever algorithm to do that in O(n), we still need AssumeContentIsAlwaysEditable because that’s what gives us 50% of my optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759125</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 18:20:46 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 172446 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172446&amp;action=review
&gt; 
&gt; Can you include a manual test-case? That way if anyone needs to work on this code in the future, they will be able to make sure they don&apos;t regress it if they need to change this significantly.

I don’t think that’s useful. Literally nobody runs manual tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759127</commentid>
    <comment_count>20</comment_count>
      <attachid>172446</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 18:21:07 -0800</bug_when>
    <thetext>Comment on attachment 172446
Lazy attach + avoid calling isContentEditable

With that, I’m going to re-iterate my r?.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759136</commentid>
    <comment_count>21</comment_count>
      <attachid>172462</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 18:33:07 -0800</bug_when>
    <thetext>Created attachment 172462
Keep assertions in appendNode and insertNodeBefore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759158</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-05 19:00:15 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 172446 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172446&amp;action=review
&gt;
&gt; No. The reason I have to make this RefPtr is the optimization I added below. We used to always moves from one place in the document to another place.
&gt; This patch implements a mass removal, which necessities all nodes to be retained.

I’ll elaborate on this a little more since the reasoning isn’t so obvious.

On the contrary to what I said in the comment #16, it’s extremely hard (if not impossible) to make WebKit synchronously callback to author scripts while we&apos;re removing nodes in SimplifyMarkupCommand (we still have to worry about AX code, WebKit API, etc… so we still can’t use RAII to override isContentEditable) because all nodes and their descendants we’re removing there are contents pasted by the user.

The only way we could have had a security vulnerability was if there was a way for ReplaceSelectionCommand to fire a synchronous event after nodes are inserted and before SimplifyMarkupCommand is called (lines 958 through 1023 in ReplaceSelectionCommand.cpp). I can’t think of a way to do that. As far as I understand the ode, we don’t remove any node that had not been inserted by ReplaceSelectionCommand itself.

Now, if ReplaceSelectionCommand DID fire a synchronous event, we can insert some element like input element wrapped in a redundant element like div without any attributes, set the focus there, and wait for SimplifyMarkupCommand to blur it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759426</commentid>
    <comment_count>23</comment_count>
      <attachid>172462</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-06 02:05:35 -0800</bug_when>
    <thetext>Comment on attachment 172462
Keep assertions in appendNode and insertNodeBefore

Attachment 172462 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14665480

New failing tests:
editing/input/password-echo-passnode.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759561</commentid>
    <comment_count>24</comment_count>
      <attachid>172462</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 05:34:11 -0800</bug_when>
    <thetext>Comment on attachment 172462
Keep assertions in appendNode and insertNodeBefore

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

New failing tests:
editing/execCommand/switch-list-type-with-orphaned-li.html
editing/input/password-echo-passnode.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761033</commentid>
    <comment_count>25</comment_count>
      <attachid>172866</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-07 13:57:59 -0800</bug_when>
    <thetext>Created attachment 172866
Fixed password-echo-passnode.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761152</commentid>
    <comment_count>26</comment_count>
      <attachid>172866</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-11-07 16:18:57 -0800</bug_when>
    <thetext>Comment on attachment 172866
Fixed password-echo-passnode.html

It would have been nice not having to repeat all the logic around ShouldAssumeContentIsAlwaysEditable in every command affected. Is there any way to move it to the parent class? I know some of the commands are simple and other are composite. If there is no way to move it to a common place it is fine too, not holding the review for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761163</commentid>
    <comment_count>27</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-07 16:26:59 -0800</bug_when>
    <thetext>Thanks for r+.

(In reply to comment #26)
&gt; (From update of attachment 172866 [details])
&gt; It would have been nice not having to repeat all the logic around ShouldAssumeContentIsAlwaysEditable in every command affected. Is there any way to move it to the parent class? I know some of the commands are simple and other are composite. If there is no way to move it to a common place it is fine too, not holding the review for this.

The problem is that AppendNodeCommand, etc... inherits from SimpleEditCommand and thus needs to call its constructor. Even if we made this flag set by a member function of SimpleEditCommand, then we&apos;ll still need to modify those commands and then wrapper functions in CompositeEditCommand. In the end, that didn&apos;t seem like a win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761169</commentid>
    <comment_count>28</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-07 16:36:16 -0800</bug_when>
    <thetext>Committed r133820: &lt;http://trac.webkit.org/changeset/133820&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761187</commentid>
    <comment_count>29</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-07 17:05:39 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #17)
&gt; &gt; (From update of attachment 172446 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172446&amp;action=review
&gt; &gt; 
&gt; &gt; Can you include a manual test-case? That way if anyone needs to work on this code in the future, they will be able to make sure they don&apos;t regress it if they need to change this significantly.
&gt; 
&gt; I don’t think that’s useful. Literally nobody runs manual tests.

I strongly disagree with this. When someone looks at the history of this code, they will be able to find the patch that committed the code and find the performance test. At the very least, can you upload a performance test to this bug? As it is, there&apos;s no way for someone hacking on this code to duplicate your results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761190</commentid>
    <comment_count>30</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-07 17:13:41 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; I strongly disagree with this. When someone looks at the history of this code, they will be able to find the patch that committed the code and find the performance test. At the very least, can you upload a performance test to this bug? As it is, there&apos;s no way for someone hacking on this code to duplicate your results.

Unfortunately, the original reproduction of this bug is a confidential e-mail received on Mail and it&apos;s about 1MB in size. Note that this bug only reproduces on Mail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761194</commentid>
    <comment_count>31</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-07 17:18:12 -0800</bug_when>
    <thetext>To clarify this point, ReplaceSelectionCommand DOES use SimplifyMarkupCommand on the pasted content but it does so after calling removeRedundantStylesAndKeepStyleSpanInline on the pasted content, which is orders of magnitude slower than SimplifyMarkupCommand itself.

If we wanted to make the paste faster, then we have to reimplement removeRedundantStylesAndKeepStyleSpanInline using techniques used in SimplifyMarkupCommand. I do agree that adding a performance test for pasting a large content where removeRedundantStylesAndKeepStyleSpanInline and SimplifyMarkupCommand do a lot of work is valuable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761195</commentid>
    <comment_count>32</comment_count>
      <attachid>172446</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-11-07 17:18:47 -0800</bug_when>
    <thetext>Comment on attachment 172446
Lazy attach + avoid calling isContentEditable

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

Sorry I didn&apos;t get to respond before this got committed. I still don&apos;t understand why we need such a complex solution.

&gt;&gt;&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:945
&gt;&gt;&gt; +    node-&gt;document()-&gt;updateStyleIfNeeded();
&gt;&gt; 
&gt;&gt; Is this needed now because we lazy attach? If so, would be good to put a comment to that effect.
&gt; 
&gt; Yes. The reason is self-evident from the fact the line line below touches node-&gt;renderer().

I disagree. We didn&apos;t need it before this patch right? So, the code below doesn&apos;t clearly require it before this patch. 

We don&apos;t call updateStyleIfNeeded throughout the code base every time we touch a renderer and the places we have thrown in these calls have often turned out to be unintended performance bottlenecks. We touch node-&gt;renderer(), but we updateStyleIfNeeded on the entire document.

&gt;&gt;&gt; Source/WebCore/editing/SimplifyMarkupCommand.cpp:44
&gt;&gt;&gt; +    Vector&lt;RefPtr&lt;Node&gt; &gt; nodesToRemove;
&gt;&gt; 
&gt;&gt; This looks like a behavior change to me. As in, it looks like you are fixing a use-after-free bug here. Mind making a test-case for this?
&gt; 
&gt; No. The reason I have to make this RefPtr is the optimization I added below. We used to always moves from one place in the document to another place.
&gt; This patch implements a mass removal, which necessities all nodes to be retained.

I don&apos;t understand why we need the RefPtr if we can&apos;t fire events or execute JS code.

&gt;&gt;&gt; Source/WebCore/editing/SimplifyMarkupCommand.cpp:90
&gt;&gt;&gt; +        int numPrunedAncestors = pruneSubsequentAncestorsToRemove(nodesToRemove, i);
&gt;&gt; 
&gt;&gt; It seems to me that we could do something much simpler here. In the loop above, have two vectors:
&gt;&gt; nodesToRemove and nodeWithChildrenToPreserve (needs a better name).
&gt;&gt; 
&gt;&gt; Only add the highest ancestor to remove to nodesToRemove and the lowest ancestor to remove to nodeWithChildrenToPreserve. Then, create a version of removeNodePreservingChildren that takes a first argument of the highest ancestor to remove and a second argument of the lowest ancestor to remove.
&gt;&gt; 
&gt;&gt; Then removeNodePreservingChildren just reparents the children of the lowest ancestor and then removes the highest ancestor.
&gt;&gt; 
&gt;&gt; In addition to being simpler, I expect that would perform much better as well. Also, then I don&apos;t think we&apos;d need to do any of this lazyAttach or AssumeContentIsAlwaysEditable stuff.
&gt; 
&gt; I had already tried that but even checking whether a node is the highest ancestor to remove or not will significantly increases the runtime because that’s an O(n^2) operation where n is 8 million.
&gt; And even if we could implement a clever algorithm to do that in O(n), we still need AssumeContentIsAlwaysEditable because that’s what gives us 50% of my optimization.

I don&apos;t understand. We are already doing the work to calculate both these nodes as best I can tell. In the code above, startingNode==nodeWithChildrenToPreserve and  topNodeWithStartingStyle.firstChild == highestAncestorToRemove. What am I missing?

Even if we can&apos;t get rid of AssumeContentIsAlwaysEditable (which I&apos;m still not convinced of), getting rid of the updateStyleIfNeeded would be a big improvement.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172207</attachid>
            <date>2012-11-02 22:05:52 -0700</date>
            <delta_ts>2012-11-05 10:42:53 -0800</delta_ts>
            <desc>Work in progress patch</desc>
            <filename>wip101144</filename>
            <type>text/plain</type>
            <size>7553</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQu
aAkocmV2aXNpb24gMTMzMjI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1h
cmt1cENvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQAogICAgIFNpbXBs
aWZ5TWFya3VwQ29tbWFuZChEb2N1bWVudCosIE5vZGUqIGZpcnN0Tm9kZSwgTm9kZSogbm9kZUFm
dGVyTGFzdCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwotICAgIAorICAgIGludCBw
cnVuZVN1YnNlcXVlbnRBbmNlc3RvcnNUb1JlbW92ZShWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIG5v
ZGVzVG9SZW1vdmUsIHNpemVfdCBzdGFydE5vZGVJbmRleCk7CisKICAgICBSZWZQdHI8Tm9kZT4g
bV9maXJzdE5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZUFmdGVyTGFzdDsKIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmNwcAkocmV2aXNp
b24gMTMzMjI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKIHZvaWQgUmVtb3ZlTm9kZUNvbW1h
bmQ6OmRvQXBwbHkoKQogewogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fbm9kZS0+cGFy
ZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxl
KE5vZGU6OlVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRhYmxlKSkKKyAgICBpZiAoIXBhcmVu
dCB8fCAoIXBhcmVudC0+aXNDb250ZW50RWRpdGFibGUoTm9kZTo6VXNlclNlbGVjdEFsbElzQWx3
YXlzTm9uRWRpdGFibGUpICYmIHBhcmVudC0+YXR0YWNoZWQoKSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fcGFyZW50ID0gcGFyZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
aW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcAkocmV2aXNpb24gMTMzMjI5KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJT
dHlsZWRFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNyArNDIsNyBA
QAogdm9pZCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmRvQXBwbHkoKQogewogICAgIE5vZGUqIHJv
b3ROb2RlID0gbV9maXJzdE5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICBWZWN0b3I8Tm9kZSo+IG5v
ZGVzVG9SZW1vdmU7CisgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG5vZGVzVG9SZW1vdmU7CiAg
ICAgCiAgICAgLy8gV2FsayB0aHJvdWdoIHRoZSBpbnNlcnRlZCBub2RlcywgdG8gc2VlIGlmIHRo
ZXJlIGFyZSBlbGVtZW50cyB0aGF0IGNvdWxkIGJlIHJlbW92ZWQKICAgICAvLyB3aXRob3V0IGFm
ZmVjdGluZyB0aGUgc3R5bGUuIFRoZSBnb2FsIGlzIHRvIHByb2R1Y2UgbGVhbmVyIG1hcmt1cCBl
dmVuIHdoZW4gc3RhcnRpbmcKQEAgLTgzLDkgKzg0LDU3IEBACiAgICAgICAgICAgICAgICAgbm9k
ZXNUb1JlbW92ZS5hcHBlbmQobm9kZSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBSZWZQdHI8
RWxlbWVudD4gZWRpdGFibGVSb290ID0gcm9vdE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
KyAgICBBdG9taWNTdHJpbmcgb3JpZ2luYWxTdHlsZTsKKyAgICBpZiAoZWRpdGFibGVSb290ICYm
IG5vZGVzVG9SZW1vdmUuc2l6ZSgpID4gNTAwKSB7CisgICAgICAgIG9yaWdpbmFsU3R5bGUgPSBl
ZGl0YWJsZVJvb3QtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxlQXR0cik7CisgICAgICAg
IFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBpbmxpbmVTdHlsZSA9IHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnQqPihlZGl0YWJsZVJvb3QuZ2V0KCkpLT5lbnN1cmVJbmxpbmVTdHlsZSgpLT5jb3B5
KCk7CisgICAgICAgIGlubGluZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXks
ICJub25lIik7CisgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWRpdGFibGVSb290LCBIVE1MTmFt
ZXM6OnN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKKyAgICB9CisKICAgICAvLyB3
ZSBwZXJmb3JtIGFsbCB0aGUgRE9NIG11dGF0aW9ucyBhdCBvbmNlLgotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbm9kZXNUb1JlbW92ZS5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG5vZGVzVG9SZW1vdmUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gRklYTUU6
IFdlIGNhbiBkbyBiZXR0ZXIgYnkgZGlyZWN0bHkgbW92aW5nIGNoaWxkcmVuIGZyb20gbm9kZXNU
b1JlbW92ZVtpXS4KKyAgICAgICAgaW50IG51bVBydW5lZEFuY2VzdG9ycyA9IHBydW5lU3Vic2Vx
dWVudEFuY2VzdG9yc1RvUmVtb3ZlKG5vZGVzVG9SZW1vdmUsIGkpOworICAgICAgICBpZiAobnVt
UHJ1bmVkQW5jZXN0b3JzIDwgMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKG5vZGVzVG9SZW1vdmVbaV0pOworICAgICAgICBpICs9
IG51bVBydW5lZEFuY2VzdG9yczsKKyAgICB9CisKKyAgICBpZiAoZWRpdGFibGVSb290ICYmIG5v
ZGVzVG9SZW1vdmUuc2l6ZSgpID4gNTAwKQorICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVkaXRh
YmxlUm9vdCwgSFRNTE5hbWVzOjpzdHlsZUF0dHIsIG9yaWdpbmFsU3R5bGUpOwogfQogCitpbnQg
U2ltcGxpZnlNYXJrdXBDb21tYW5kOjpwcnVuZVN1YnNlcXVlbnRBbmNlc3RvcnNUb1JlbW92ZShW
ZWN0b3I8UmVmUHRyPE5vZGU+ID4mIG5vZGVzVG9SZW1vdmUsIHNpemVfdCBzdGFydE5vZGVJbmRl
eCkKK3sKKyAgICBzaXplX3QgcGFzdExhc3ROb2RlVG9SZW1vdmUgPSBzdGFydE5vZGVJbmRleCAr
IDE7CisgICAgZm9yICg7IHBhc3RMYXN0Tm9kZVRvUmVtb3ZlIDwgbm9kZXNUb1JlbW92ZS5zaXpl
KCk7ICsrcGFzdExhc3ROb2RlVG9SZW1vdmUpIHsKKyAgICAgICAgaWYgKG5vZGVzVG9SZW1vdmVb
cGFzdExhc3ROb2RlVG9SZW1vdmUgLSAxXS0+cGFyZW50Tm9kZSgpICE9IG5vZGVzVG9SZW1vdmVb
cGFzdExhc3ROb2RlVG9SZW1vdmVdCisgICAgICAgICAgICB8fCBub2Rlc1RvUmVtb3ZlW3Bhc3RM
YXN0Tm9kZVRvUmVtb3ZlXS0+Zmlyc3RDaGlsZCgpICE9IG5vZGVzVG9SZW1vdmVbcGFzdExhc3RO
b2RlVG9SZW1vdmVdLT5sYXN0Q2hpbGQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGlmIChwYXN0TGFzdE5vZGVUb1JlbW92ZSA9PSBzdGFydE5vZGVJbmRleCArIDEpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUgPSBub2Rl
c1RvUmVtb3ZlW3Bhc3RMYXN0Tm9kZVRvUmVtb3ZlIC0gMV0uZ2V0KCk7CisKKyAgICBSZWZQdHI8
Tm9kZT4gbm9kZUFmdGVySGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUgPSBoaWdoZXN0QW5jZXN0b3JU
b1JlbW92ZS0+bmV4dFNpYmxpbmcoKTsKKyAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50
ID0gaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUtPnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVu
dCkgLy8gUGFyZW50IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgcmV0dXJuIC0x
OworICAgIAorICAgIHJlbW92ZU5vZGUoaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUpOworICAgIHJl
bW92ZU5vZGUobm9kZXNUb1JlbW92ZVtzdGFydE5vZGVJbmRleF0pOworICAgIGlmIChub2RlQWZ0
ZXJIaWdoZXN0QW5jZXN0b3JUb1JlbW92ZSkKKyAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2Rl
c1RvUmVtb3ZlW3N0YXJ0Tm9kZUluZGV4XSwgbm9kZUFmdGVySGlnaGVzdEFuY2VzdG9yVG9SZW1v
dmUpOworICAgIGVsc2UKKyAgICAgICAgYXBwZW5kTm9kZShub2Rlc1RvUmVtb3ZlW3N0YXJ0Tm9k
ZUluZGV4XSwgcGFyZW50KTsKKworICAgIHJldHVybiBwYXN0TGFzdE5vZGVUb1JlbW92ZSAtIHN0
YXJ0Tm9kZUluZGV4IC0gMTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
S2l0Lnhjd29ya3NwYWNlL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvQWxsIFNvdXJjZSAodGFyZ2V0
IFdlYlByb2Nlc3MpLnhjc2NoZW1lCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC54Y3dvcmtzcGFjZS94
Y3NoYXJlZGRhdGEveGNzY2hlbWVzL0FsbCBTb3VyY2UgKHRhcmdldCBXZWJQcm9jZXNzKS54Y3Nj
aGVtZQkocmV2aXNpb24gMTMzMjI5KQorKysgV2ViS2l0Lnhjd29ya3NwYWNlL3hjc2hhcmVkZGF0
YS94Y3NjaGVtZXMvQWxsIFNvdXJjZSAodGFyZ2V0IFdlYlByb2Nlc3MpLnhjc2NoZW1lCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTksMTAgKzExOSwxMCBAQAogICAgICAgPE1hY3JvRXhwYW5zaW9uPgog
ICAgICAgICAgPEJ1aWxkYWJsZVJlZmVyZW5jZQogICAgICAgICAgICAgQnVpbGRhYmxlSWRlbnRp
ZmllciA9ICJwcmltYXJ5IgotICAgICAgICAgICAgQmx1ZXByaW50SWRlbnRpZmllciA9ICIxQTUw
REIxRDExMEEzQkRDMDAwRDNGRTUiCi0gICAgICAgICAgICBCdWlsZGFibGVOYW1lID0gIldlYlBy
b2Nlc3MuYXBwIgotICAgICAgICAgICAgQmx1ZXByaW50TmFtZSA9ICJXZWJQcm9jZXNzIgotICAg
ICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6U291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2oiPgorICAgICAgICAgICAgQmx1ZXByaW50SWRlbnRpZmllciA9ICI5
MzQwOTk0QTA4NTQwQ0FFMDA3RjNCQzgiCisgICAgICAgICAgICBCdWlsZGFibGVOYW1lID0gIkR1
bXBSZW5kZXJUcmVlIgorICAgICAgICAgICAgQmx1ZXByaW50TmFtZSA9ICJEdW1wUmVuZGVyVHJl
ZSIKKyAgICAgICAgICAgIFJlZmVyZW5jZWRDb250YWluZXIgPSAiY29udGFpbmVyOlRvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvaiI+CiAgICAgICAgICA8L0J1aWxk
YWJsZVJlZmVyZW5jZT4KICAgICAgIDwvTWFjcm9FeHBhbnNpb24+CiAgICA8L1Rlc3RBY3Rpb24+
CkBAIC0xMzEsMzAgKzEzMSwyOCBAQAogICAgICAgc2VsZWN0ZWRMYXVuY2hlcklkZW50aWZpZXIg
PSAiWGNvZGUuRGVidWdnZXJGb3VuZGF0aW9uLkxhdW5jaGVyLkxMREIiCiAgICAgICBsYXVuY2hT
dHlsZSA9ICIwIgogICAgICAgdXNlQ3VzdG9tV29ya2luZ0RpcmVjdG9yeSA9ICJOTyIKLSAgICAg
IGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJEZWJ1ZyIKKyAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9
ICJSZWxlYXNlIgogICAgICAgaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9uTGF1bmNoID0gIk5PIgog
ICAgICAgZGVidWdEb2N1bWVudFZlcnNpb25pbmcgPSAiWUVTIgogICAgICAgYWxsb3dMb2NhdGlv
blNpbXVsYXRpb24gPSAiWUVTIj4KLSAgICAgIDxCdWlsZGFibGVQcm9kdWN0UnVubmFibGU+Ci0g
ICAgICAgICA8QnVpbGRhYmxlUmVmZXJlbmNlCi0gICAgICAgICAgICBCdWlsZGFibGVJZGVudGlm
aWVyID0gInByaW1hcnkiCi0gICAgICAgICAgICBCbHVlcHJpbnRJZGVudGlmaWVyID0gIjFBNTBE
QjFEMTEwQTNCREMwMDBEM0ZFNSIKLSAgICAgICAgICAgIEJ1aWxkYWJsZU5hbWUgPSAiV2ViUHJv
Y2Vzcy5hcHAiCi0gICAgICAgICAgICBCbHVlcHJpbnROYW1lID0gIldlYlByb2Nlc3MiCi0gICAg
ICAgICAgICBSZWZlcmVuY2VkQ29udGFpbmVyID0gImNvbnRhaW5lcjpTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvaiI+Ci0gICAgICAgICA8L0J1aWxkYWJsZVJlZmVyZW5jZT4KLSAgICAg
IDwvQnVpbGRhYmxlUHJvZHVjdFJ1bm5hYmxlPgorICAgICAgPFBhdGhSdW5uYWJsZQorICAgICAg
ICAgRmlsZVBhdGggPSAiL0FwcGxpY2F0aW9ucy9NYWlsLmFwcCI+CisgICAgICA8L1BhdGhSdW5u
YWJsZT4KICAgICAgIDxDb21tYW5kTGluZUFyZ3VtZW50cz4KICAgICAgICAgIDxDb21tYW5kTGlu
ZUFyZ3VtZW50CiAgICAgICAgICAgICBhcmd1bWVudCA9ICImcXVvdDskKEJVSUxUX1BST0RVQ1RT
X0RJUikvV2ViS2l0Mi5mcmFtZXdvcmsvV2ViS2l0MiZxdW90OyIKLSAgICAgICAgICAgIGlzRW5h
YmxlZCA9ICJZRVMiPgorICAgICAgICAgICAgaXNFbmFibGVkID0gIk5PIj4KICAgICAgICAgIDwv
Q29tbWFuZExpbmVBcmd1bWVudD4KICAgICAgICAgIDxDb21tYW5kTGluZUFyZ3VtZW50CiAgICAg
ICAgICAgICBhcmd1bWVudCA9ICItdHlwZSB3ZWJwcm9jZXNzIgotICAgICAgICAgICAgaXNFbmFi
bGVkID0gIllFUyI+CisgICAgICAgICAgICBpc0VuYWJsZWQgPSAiTk8iPgogICAgICAgICAgPC9D
b21tYW5kTGluZUFyZ3VtZW50PgogICAgICAgICAgPENvbW1hbmRMaW5lQXJndW1lbnQKICAgICAg
ICAgICAgIGFyZ3VtZW50ID0gIi1jbGllbnQtZXhlY3V0YWJsZSAvQXBwbGljYXRpb25zL1NhZmFy
aS5hcHAvQ29udGVudHMvTWFjT1MvU2FmYXJpRm9yV2ViS2l0RGV2ZWxvcG1lbnQiCisgICAgICAg
ICAgICBpc0VuYWJsZWQgPSAiTk8iPgorICAgICAgICAgPC9Db21tYW5kTGluZUFyZ3VtZW50Pgor
ICAgICAgICAgPENvbW1hbmRMaW5lQXJndW1lbnQKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gIi9W
b2x1bWVzL0RhdGEvd2Via2l0L0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS1h
bmQtc2FuaXRpemUuaHRtbCIKICAgICAgICAgICAgIGlzRW5hYmxlZCA9ICJZRVMiPgogICAgICAg
ICAgPC9Db21tYW5kTGluZUFyZ3VtZW50PgogICAgICAgPC9Db21tYW5kTGluZUFyZ3VtZW50cz4K
QEAgLTE2Miw3ICsxNjAsNyBAQAogICAgICAgICAgPEVudmlyb25tZW50VmFyaWFibGUKICAgICAg
ICAgICAgIGtleSA9ICJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiCiAgICAgICAgICAgICB2YWx1ZSA9
ICIkKEJVSUxUX1BST0RVQ1RTX0RJUikvV2ViUHJvY2Vzc1NoaW0uZHlsaWIiCi0gICAgICAgICAg
ICBpc0VuYWJsZWQgPSAiWUVTIj4KKyAgICAgICAgICAgIGlzRW5hYmxlZCA9ICJOTyI+CiAgICAg
ICAgICA8L0Vudmlyb25tZW50VmFyaWFibGU+CiAgICAgICA8L0Vudmlyb25tZW50VmFyaWFibGVz
PgogICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172359</attachid>
            <date>2012-11-05 10:42:56 -0800</date>
            <delta_ts>2012-11-05 17:03:44 -0800</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-101144-20121105104111.patch</filename>
            <type>text/plain</type>
            <size>6747</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzQ5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDEyLTExLTA1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNpbXBsaWZ5TWFya3VwQ29tbWFu
ZCB0YWtlcyBhIGRpc3Byb3BvcnRpb25hbGx5IGxvbmcgdGltZSB0byBydW4gd2hlbiB0aGVyZSBh
cmUgbWFueSBub2RlcyB0byByZW1vdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMTE0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoZSBidWcgd2FzIGNhdXNlZCBieSBhdHRhY2goKSBoYXBwZW5pbmcg
YmV0d2VlbiBlYWNoIG5vZGUgcmVtb3ZhbC4gU2luY2UgdGhlIGNvbW1hbmQgd2FzIHRyeWluZwor
ICAgICAgICB0byByZW1vdmUgbWlsbGlvbnMgb2Ygbm9kZSBpbiBzb21lIGNhc2VzLCBhdHRhY2go
KWluZyByZW5kZXIgb2JqZWN0cyBmb3IgZWFjaCBub2RlIGJlaW5nIHJlaW5zZXJ0ZWQKKyAgICAg
ICAgaW1wb3NlZCBhIGh1Z2UgcnVudGltZSBjb3N0LgorCisgICAgICAgIEZpeGVkIHRoZSBidWcg
YnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhlIHJvb3QgZWRpdGFibGUgZWxlbWVudCBmcm9tIHRo
ZSBkb2N1bWVudCB3aGlsZSByZW1vdmluZworICAgICAgICBhIGxhcmdlIG51bWJlciAobW9yZSB0
aGFuIDUwMCkgb2Ygbm9kZXMuIEknbSBob3BpbmcgdGhhdCBqYXZhc2NyaXB0IGRvZXNuJ3QgZGVw
ZW5kIG9uIHJvb3QgZWRpdGFibGUKKyAgICAgICAgZWxlbWVudCBhbHdheXMgYmVpbmcgaW4gdGhl
IGRvY3VtZW50LgorCisgICAgICAgIEFsc28gb3B0aW1pemVkIGNhc2VzIHdoZXJlIG5vZGVzIHRv
IHJlbW92ZSBhcmUgZGlyZWN0IGFuY2VzdG9ycyBzbyB0aGF0IHdlIGNhbiByZW1vdmUgYWxsIGFu
Y2VzdG9ycworICAgICAgICBhdCBvbmNlIGluc3RlYWQgb2YgcmVtb3ZpbmcgZWFjaCBhbmNlc3Rv
ciBhdCBhIHRpbWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIGl0IGRvZXNuJ3QgY2hh
bmdlIHRoZSBhc3ltcHRvdGljIHBlcmZvcm1hbmNlLCBhbmQgYWRkaW5nIGEgbmV3IHBlcmZvcm1h
bmNlIHRlc3QgZm9yCisgICAgICAgIHRoaXMgc3BlY2lmaWMgY2FzZSBpcyBwcm9iYWJseSBub3Qg
dGhlIHdvcnRoIHRoZSBpbmNyZWFzZSBpbiB0aGUgYm90IGN5Y2xlIHRpbWUuIEknbGwgbm90ZSB0
aGF0IHRoZQorICAgICAgICBlbWFpbCBhdHRhY2hlZCBpbiB0aGUgb3JpZ2luYWwgcmFkYXIgYnVn
ICg8cmRhcjovL3Byb2JsZW0vMTIxNzk3MTI+KSB0b29rIDEwMCBzZWNvbmRzIHRvIG9wZW4gbm93
IG9ubHkKKyAgICAgICAgdGFrZXMgNyBzZWNvbmRzIHRvIG9wZW4gb24gbXkgTWFjUHJvLgorCisg
ICAgICAgICogZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW1vdmVOb2RlQ29tbWFuZDo6ZG9BcHBseSk6IFdoZW4gYSBub2RlIGRvZXNuJ3QgaGF2ZSBh
IHJlbmRlcmVyLCB3ZSB3b3VsZG4ndCBrbm93IHdoZXRoZXIKKwl0aGUgbm9kZSBpcyBlZGl0YWJs
ZSBvciBub3QuIFNlcmlvdXNseSwgLXdlYmtpdC11c2VyLW1vZGlmeSBpcyB0aGUgd29yc3QgQ1NT
IHByb3BlcnR5IGV2ZXIuCisgICAgICAgICogZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6cHJ1bmVTdWJzZXF1ZW50
QW5jZXN0b3JzVG9SZW1vdmUpOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL1NpbXBsaWZ5TWFy
a3VwQ29tbWFuZC5oOgorICAgICAgICAoU2ltcGxpZnlNYXJrdXBDb21tYW5kKToKKwogMjAxMi0x
MS0wNSAgRGF2aWQgQmFydG9uICA8ZGJhcnRvbkBtYXRoc2NyaWJlLmNvbT4KIAogICAgICAgICBJ
bXBsZW1lbnQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGggb24gc2tpYQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAJKHJl
dmlzaW9uIDEzMzIyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIFJlbW92ZU5vZGVDb21tYW5k
OjpSZW1vdmVOb2RlQ29tbWFuZChQYXMKIHZvaWQgUmVtb3ZlTm9kZUNvbW1hbmQ6OmRvQXBwbHko
KQogewogICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG1fbm9kZS0+cGFyZW50Tm9kZSgpOwot
ICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKE5vZGU6OlVzZXJT
ZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRhYmxlKSkKKyAgICBpZiAoIXBhcmVudCB8fCAoIXBhcmVu
dC0+aXNDb250ZW50RWRpdGFibGUoTm9kZTo6VXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFi
bGUpICYmIHBhcmVudC0+YXR0YWNoZWQoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcGFy
ZW50ID0gcGFyZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1
cENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxp
ZnlNYXJrdXBDb21tYW5kLmNwcAkocmV2aXNpb24gMTMzMjI5KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3
ICs0MSw3IEBAIFNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6U2ltcGxpZnlNYXJrdXBDb20KIHZvaWQg
U2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBOb2RlKiByb290Tm9kZSA9
IG1fZmlyc3ROb2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgVmVjdG9yPE5vZGUqPiBub2Rlc1RvUmVt
b3ZlOworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBub2Rlc1RvUmVtb3ZlOwogICAgIAogICAg
IC8vIFdhbGsgdGhyb3VnaCB0aGUgaW5zZXJ0ZWQgbm9kZXMsIHRvIHNlZSBpZiB0aGVyZSBhcmUg
ZWxlbWVudHMgdGhhdCBjb3VsZCBiZSByZW1vdmVkCiAgICAgLy8gd2l0aG91dCBhZmZlY3Rpbmcg
dGhlIHN0eWxlLiBUaGUgZ29hbCBpcyB0byBwcm9kdWNlIGxlYW5lciBtYXJrdXAgZXZlbiB3aGVu
IHN0YXJ0aW5nCkBAIC04Myw5ICs4Myw2MiBAQCB2b2lkIFNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5hcHBlbmQobm9kZSk7CiAg
ICAgICAgIH0KICAgICB9CisKKyAgICAvLyBXaGVuIHRoZXJlIGFyZSB0b28gbWFueSBub2Rlcywg
d2UgZG9uJ3Qgd2FudCB0byByZXNvbHZlIHN0eWxlcyBhZnRlciBlYWNoIG5vZGUgcmVtb3ZhbC4K
KyAgICAvLyBUZW1wb3JhcmlseSBkZXRhY2ggdGhlIHJvb3QgZWRpdGFibGUgZWxlbWVudCB0byBh
dm9pZCB0aGF0LgorICAgIFJlZlB0cjxFbGVtZW50PiBlZGl0YWJsZVJvb3QgPSByb290Tm9kZS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBlZGl0YWJs
ZVJvb3RQYXJlbnQ7CisgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlckVkaXRhYmxlUm9vdDsKKyAg
ICBBdG9taWNTdHJpbmcgb3JpZ2luYWxTdHlsZTsKKyAgICBpZiAoZWRpdGFibGVSb290ICYmIG5v
ZGVzVG9SZW1vdmUuc2l6ZSgpID4gNTAwKSB7CisgICAgICAgIGVkaXRhYmxlUm9vdFBhcmVudCA9
IGVkaXRhYmxlUm9vdC0+cGFyZW50Tm9kZSgpOworICAgICAgICBub2RlQWZ0ZXJFZGl0YWJsZVJv
b3QgPSBlZGl0YWJsZVJvb3QtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIHJlbW92ZU5vZGUoZWRp
dGFibGVSb290KTsKKyAgICB9CisKICAgICAvLyB3ZSBwZXJmb3JtIGFsbCB0aGUgRE9NIG11dGF0
aW9ucyBhdCBvbmNlLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZXNUb1JlbW92ZS5z
aXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGVzVG9SZW1vdmUuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkbyBiZXR0ZXIgYnkgZGlyZWN0
bHkgbW92aW5nIGNoaWxkcmVuIGZyb20gbm9kZXNUb1JlbW92ZVtpXS4KKyAgICAgICAgaW50IG51
bVBydW5lZEFuY2VzdG9ycyA9IHBydW5lU3Vic2VxdWVudEFuY2VzdG9yc1RvUmVtb3ZlKG5vZGVz
VG9SZW1vdmUsIGkpOworICAgICAgICBpZiAobnVtUHJ1bmVkQW5jZXN0b3JzIDwgMCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKG5v
ZGVzVG9SZW1vdmVbaV0pOworICAgICAgICBpICs9IG51bVBydW5lZEFuY2VzdG9yczsKKyAgICB9
CisKKyAgICBpZiAobm9kZUFmdGVyRWRpdGFibGVSb290KQorICAgICAgICBpbnNlcnROb2RlQmVm
b3JlKGVkaXRhYmxlUm9vdCwgbm9kZUFmdGVyRWRpdGFibGVSb290KTsKKyAgICBlbHNlIGlmIChl
ZGl0YWJsZVJvb3RQYXJlbnQpCisgICAgICAgIGFwcGVuZE5vZGUoZWRpdGFibGVSb290LCBlZGl0
YWJsZVJvb3RQYXJlbnQpOworfQorCitpbnQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpwcnVuZVN1
YnNlcXVlbnRBbmNlc3RvcnNUb1JlbW92ZShWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIG5vZGVzVG9S
ZW1vdmUsIHNpemVfdCBzdGFydE5vZGVJbmRleCkKK3sKKyAgICBzaXplX3QgcGFzdExhc3ROb2Rl
VG9SZW1vdmUgPSBzdGFydE5vZGVJbmRleCArIDE7CisgICAgZm9yICg7IHBhc3RMYXN0Tm9kZVRv
UmVtb3ZlIDwgbm9kZXNUb1JlbW92ZS5zaXplKCk7ICsrcGFzdExhc3ROb2RlVG9SZW1vdmUpIHsK
KyAgICAgICAgaWYgKG5vZGVzVG9SZW1vdmVbcGFzdExhc3ROb2RlVG9SZW1vdmUgLSAxXS0+cGFy
ZW50Tm9kZSgpICE9IG5vZGVzVG9SZW1vdmVbcGFzdExhc3ROb2RlVG9SZW1vdmVdCisgICAgICAg
ICAgICB8fCBub2Rlc1RvUmVtb3ZlW3Bhc3RMYXN0Tm9kZVRvUmVtb3ZlXS0+Zmlyc3RDaGlsZCgp
ICE9IG5vZGVzVG9SZW1vdmVbcGFzdExhc3ROb2RlVG9SZW1vdmVdLT5sYXN0Q2hpbGQoKSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChwYXN0TGFzdE5vZGVUb1JlbW92ZSA9
PSBzdGFydE5vZGVJbmRleCArIDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgTm9kZSogaGln
aGVzdEFuY2VzdG9yVG9SZW1vdmUgPSBub2Rlc1RvUmVtb3ZlW3Bhc3RMYXN0Tm9kZVRvUmVtb3Zl
IC0gMV0uZ2V0KCk7CisKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZUFmdGVySGlnaGVzdEFuY2VzdG9y
VG9SZW1vdmUgPSBoaWdoZXN0QW5jZXN0b3JUb1JlbW92ZS0+bmV4dFNpYmxpbmcoKTsKKyAgICBS
ZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUtPnBh
cmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkgLy8gUGFyZW50IGhhcyBhbHJlYWR5IGJlZW4g
cmVtb3ZlZC4KKyAgICAgICAgcmV0dXJuIC0xOworICAgIAorICAgIHJlbW92ZU5vZGUoaGlnaGVz
dEFuY2VzdG9yVG9SZW1vdmUpOworICAgIHJlbW92ZU5vZGUobm9kZXNUb1JlbW92ZVtzdGFydE5v
ZGVJbmRleF0pOworICAgIGlmIChub2RlQWZ0ZXJIaWdoZXN0QW5jZXN0b3JUb1JlbW92ZSkKKyAg
ICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2Rlc1RvUmVtb3ZlW3N0YXJ0Tm9kZUluZGV4XSwgbm9k
ZUFmdGVySGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUpOworICAgIGVsc2UKKyAgICAgICAgYXBwZW5k
Tm9kZShub2Rlc1RvUmVtb3ZlW3N0YXJ0Tm9kZUluZGV4XSwgcGFyZW50KTsKKworICAgIHJldHVy
biBwYXN0TGFzdE5vZGVUb1JlbW92ZSAtIHN0YXJ0Tm9kZUluZGV4IC0gMTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1h
cmt1cENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBs
aWZ5TWFya3VwQ29tbWFuZC5oCShyZXZpc2lvbiAxMzMyMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw4IEBAIHByaXZhdGU6CiAgICAgU2ltcGxpZnlNYXJrdXBDb21tYW5kKERvY3VtZW50KiwgTm9k
ZSogZmlyc3ROb2RlLCBOb2RlKiBub2RlQWZ0ZXJMYXN0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBk
b0FwcGx5KCk7Ci0gICAgCisgICAgaW50IHBydW5lU3Vic2VxdWVudEFuY2VzdG9yc1RvUmVtb3Zl
KFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgbm9kZXNUb1JlbW92ZSwgc2l6ZV90IHN0YXJ0Tm9kZUlu
ZGV4KTsKKwogICAgIFJlZlB0cjxOb2RlPiBtX2ZpcnN0Tm9kZTsKICAgICBSZWZQdHI8Tm9kZT4g
bV9ub2RlQWZ0ZXJMYXN0OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172446</attachid>
            <date>2012-11-05 17:03:46 -0800</date>
            <delta_ts>2012-11-07 17:18:47 -0800</delta_ts>
            <desc>Lazy attach + avoid calling isContentEditable</desc>
            <filename>bug-101144-20121105170200.patch</filename>
            <type>text/plain</type>
            <size>24327</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzU0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDEyLTExLTA1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNpbXBsaWZ5TWFya3VwQ29tbWFu
ZCB0YWtlcyBhIGRpc3Byb3BvcnRpb25hbGx5IGxvbmcgdGltZSB0byBydW4gd2hlbiB0aGVyZSBh
cmUgbWFueSBub2RlcyB0byByZW1vdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMTE0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoZSBidWcgd2FzIGNhdXNlZCBieSBhdHRhY2goKSBoYXBwZW5pbmcg
YmV0d2VlbiBlYWNoIG5vZGUgcmVtb3ZhbC4gU2luY2UgdGhlIGNvbW1hbmQgd2FzIHRyeWluZwor
ICAgICAgICB0byByZW1vdmUgbWlsbGlvbnMgb2Ygbm9kZSBpbiBzb21lIGNhc2VzLCBhdHRhY2go
KWluZyByZW5kZXIgb2JqZWN0cyBmb3IgZWFjaCBub2RlIGJlaW5nIHJlaW5zZXJ0ZWQKKyAgICAg
ICAgaW1wb3NlZCBhIGh1Z2UgcnVudGltZSBjb3N0LgorCisgICAgICAgIEZpeGVkIHRoZSBidWcg
YnkgdXNpbmcgbGF6eSBhdHRhY2ggd2hlbiByZW1vdmluZyBub2RlcyBhbmQgYXZvaWRpbmcgY2Fs
bHMgdG8gaXNDb250ZW50RWRpdGFibGUuCisgICAgICAgIEFsc28gcmVtb3ZlIGFsbCBhbmNlc3Rv
cnMgYXQgb25jZSB3aGVuIHRoZXkgYXJlIGRpcmVjdCBjaGlsZC9wYXJlbnQgb2YgZWFjaCBvdGhl
ciBzbyB0aGF0IHdlIGRvbid0CisgICAgICAgIHJlbW92ZSBhbiBhbmNlc3RvciBhbmQgdGhlbiBp
bnNlcnQgaXRzIGNoaWxkIGJhY2sgb25seSB0byByZW1vdmUgaXQgYWdhaW4gaW4gdGhlIG5leHQg
aXRlcmF0aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBpdCBkb2Vzbid0IGNoYW5n
ZSB0aGUgYXN5bXB0b3RpYyBwZXJmb3JtYW5jZSwgYW5kIGFkZGluZyBhIG5ldyBwZXJmb3JtYW5j
ZSB0ZXN0IGZvcgorICAgICAgICB0aGlzIHNwZWNpZmljIGNhc2UgaXMgbm90IHRoZSB3b3J0aCB0
aGUgaW5jcmVhc2UgaW4gdGhlIGJvdCBjeWNsZSB0aW1lLiBJJ2xsIG5vdGUgdGhhdCB0aGUgZW1h
aWwKKyAgICAgICAgYXR0YWNoZWQgaW4gdGhlIG9yaWdpbmFsIHJhZGFyIGJ1ZyAoPHJkYXI6Ly9w
cm9ibGVtLzEyMTc5NzEyPikgdG9vayAxMDAgc2Vjb25kcyB0byBvcGVuIG5vdyBvbmx5IHRha2Vz
CisgICAgICAgIDcgc2Vjb25kcyB0byBvcGVuIG9uIG15IE1hY1Byby4KKworICAgICAgICAqIGVk
aXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kTm9k
ZUNvbW1hbmQ6OmRvQXBwbHkpOiBUYWtlcyBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHdlIHNo
b3VsZCBhc3N1bWUgbm9kZXMgYXJlIGVkaXRhYmxlCisgICAgICAgIHdpdGhvdXQgY2FsbGluZyBp
c0NvbnRlbnRFZGl0YWJsZSBvciBub3QuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxp
bmVTdHlsZVRvUHVzaERvd24pOiBVcGRhdGUgdGhlIHN0eWxlIGFzIGxhdGVyIGNvZGUgcmVxdWly
ZXMgcmVuZGVyCisgICAgICAgIG9iamVjdC4KKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpp
bnNlcnROb2RlQmVmb3JlKTogUGFzc2VzIGEgZmxhZyB0byB0aGUgY29tbWFuZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbik6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
aDoKKyAgICAgICAgKENvbXBvc2l0ZUVkaXRDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSk6IFRha2VzIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIg
d2Ugc2hvdWxkIGFzc3VtZSBub2RlcyBhcmUKKyAgICAgICAgZWRpdGFibGUgd2l0aG91dCBjYWxs
aW5nIGlzQ29udGVudEVkaXRhYmxlIG9yIG5vdC4KKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuaDoKKyAgICAgICAgKERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQpOgorICAg
ICAgICAqIGVkaXRpbmcvRWRpdENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydE5v
ZGVCZWZvcmVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydE5vZGVCZWZvcmVD
b21tYW5kOjpJbnNlcnROb2RlQmVmb3JlQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmRvQXBwbHkpOiBEaXR0bzsgYWxzbyBhbHdheXMg
dXNlIGxhenkgYXR0YWNoLgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1h
bmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFu
ZC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmNyZWF0ZSk6
CisgICAgICAgIChJbnNlcnROb2RlQmVmb3JlQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9S
ZW1vdmVOb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVOb2RlQ29tbWFu
ZDo6UmVtb3ZlTm9kZUNvbW1hbmQpOiBEaXR0byBhYm91dCB0aGUgZmxhZy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbW92ZU5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
bW92ZU5vZGVDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVOb2RlQ29tbWFuZDo6
Y3JlYXRlKToKKyAgICAgICAgKFJlbW92ZU5vZGVDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5n
L1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpSZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcv
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpjcmVhdGUpOgorICAgICAgICAo
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcv
U2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZ5TWFy
a3VwQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmeU1hcmt1cENv
bW1hbmQ6OnBydW5lU3Vic2VxdWVudEFuY2VzdG9yc1RvUmVtb3ZlKTogQWRkZWQgdG8gb3B0aW1p
emUgcmVtb3ZhbHMgb2YgbXVsdGlwbGUKKyAgICAgICAgYW5jZXN0b3JzLgorICAgICAgICAqIGVk
aXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmg6CisgICAgICAgIChTaW1wbGlmeU1hcmt1cENv
bW1hbmQpOgorCiAyMDEyLTExLTA1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMjc1Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcAkocmV2
aXNpb24gMTMzMjI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBBcHBlbmROb2RlQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgRXhjZXB0aW9u
Q29kZSBlYzsKLSAgICBtX3BhcmVudC0+YXBwZW5kQ2hpbGQobV9ub2RlLmdldCgpLCBlYyk7Cisg
ICAgbV9wYXJlbnQtPmFwcGVuZENoaWxkKG1fbm9kZS5nZXQoKSwgZWMsIHRydWUgLyogbGF6eUF0
dGFjaCAqLyk7CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQo
KSkKICAgICAgICAgc2VuZEFYVGV4dENoYW5nZWRJZ25vcmluZ0xpbmVCcmVha3MobV9ub2RlLmdl
dCgpLCBBWE9iamVjdENhY2hlOjpBWFRleHRJbnNlcnRlZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTMzMjI5KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk0Miw2ICs5NDIsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGlu
ZVN0eWxlCiB7CiAgICAgQVNTRVJUKG5vZGUpOwogCisgICAgbm9kZS0+ZG9jdW1lbnQoKS0+dXBk
YXRlU3R5bGVJZk5lZWRlZCgpOworCiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgp
IHx8ICFub2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAx
MzMyMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDEwICszMTcsMTAgQEAgYm9vbCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6aXNSZW1vdmFibGVCbAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IGluc2Vy
dENoaWxkLCBQYXNzUmVmUHRyPE5vZGU+IHJlZkNoaWxkKQordm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6aW5zZXJ0Tm9kZUJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxkLCBQYXNz
UmVmUHRyPE5vZGU+IHJlZkNoaWxkLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKIHsKICAgICBBU1NFUlQoIXJl
ZkNoaWxkLT5oYXNUYWdOYW1lKGJvZHlUYWcpKTsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0
ZShJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6Y3JlYXRlKGluc2VydENoaWxkLCByZWZDaGlsZCkp
OworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpj
cmVhdGUoaW5zZXJ0Q2hpbGQsIHJlZkNoaWxkLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNF
ZGl0YWJsZSkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQWZ0
ZXIoUGFzc1JlZlB0cjxOb2RlPiBpbnNlcnRDaGlsZCwgUGFzc1JlZlB0cjxOb2RlPiByZWZDaGls
ZCkKQEAgLTM4NywxNiArMzg3LDE2IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92
ZUNoaWxkcmUKICAgICAgICAgcmVtb3ZlTm9kZShjaGlsZHJlbltpXS5yZWxlYXNlKCkpOwogfQog
Ci12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4g
bm9kZSkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUoUGFzc1JlZlB0cjxO
b2RlPiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1
bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKIHsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPm5v
blNoYWRvd0JvdW5kYXJ5UGFyZW50Tm9kZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgYXBwbHlD
b21tYW5kVG9Db21wb3NpdGUoUmVtb3ZlTm9kZUNvbW1hbmQ6OmNyZWF0ZShub2RlKSk7CisgICAg
YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVtb3ZlTm9kZUNvbW1hbmQ6OmNyZWF0ZShub2RlLCBz
aG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkpOwogfQogCi12b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKFBhc3NSZWZQdHI8Tm9k
ZT4gbm9kZSkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW4oUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKIHsKLSAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFu
ZDo6Y3JlYXRlKG5vZGUpKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIHNob3VsZEFzc3VtZUNvbnRl
bnRJc0Fsd2F5c0VkaXRhYmxlKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCShyZXZpc2lv
biAxMzMyMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBpbnNlcnROb2RlQWZ0ZXIoUGFzc1JlZlB0cjxOb2RlPiwgUGFzc1JlZlB0cjxOb2RlPiByZWZD
aGlsZCk7CiAgICAgdm9pZCBpbnNlcnROb2RlQXQoUGFzc1JlZlB0cjxOb2RlPiwgY29uc3QgUG9z
aXRpb24mKTsKICAgICB2b2lkIGluc2VydE5vZGVBdFRhYlNwYW5Qb3NpdGlvbihQYXNzUmVmUHRy
PE5vZGU+LCBjb25zdCBQb3NpdGlvbiYpOwotICAgIHZvaWQgaW5zZXJ0Tm9kZUJlZm9yZShQYXNz
UmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5vZGU+IHJlZkNoaWxkKTsKKyAgICB2b2lkIGluc2Vy
dE5vZGVCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiwgUGFzc1JlZlB0cjxOb2RlPiByZWZDaGlsZCwg
U2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPSBEb05vdEFzc3VtZUNvbnRlbnRJ
c0Fsd2F5c0VkaXRhYmxlKTsKICAgICB2b2lkIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcihib29s
IHVzZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50ID0gZmFsc2UsIGJvb2wgcGFzdGVCbG9ja3F1dG9l
SW50b1VucXVvdGVkQXJlYSA9IGZhbHNlKTsKICAgICB2b2lkIGluc2VydExpbmVCcmVhaygpOwog
ICAgIHZvaWQgaW5zZXJ0VGV4dEludG9Ob2RlKFBhc3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVkIG9m
ZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKQEAgLTEyNSw5ICsxMjUsOSBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCByZW1vdmVDU1NQcm9wZXJ0eShQYXNzUmVmUHRyPFN0eWxlZEVsZW1lbnQ+LCBD
U1NQcm9wZXJ0eUlEKTsKICAgICB2b2lkIHJlbW92ZU5vZGVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxF
bGVtZW50PiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKTsKICAgICB2b2lkIHJlbW92
ZUNoaWxkcmVuSW5SYW5nZShQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCB0byk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZU5vZGUoUGFzc1JlZlB0cjxOb2RlPik7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZU5vZGUoUGFzc1JlZlB0cjxOb2RlPiwgU2hvdWxkQXNzdW1l
Q29udGVudElzQWx3YXlzRWRpdGFibGUgPSBEb05vdEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRh
YmxlKTsKICAgICBIVE1MRWxlbWVudCogcmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNlcnZpbmdD
aGlsZHJlbkFuZEF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4pOwotICAgIHZvaWQg
cmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lk
IHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2RlPiwgU2hvdWxkQXNz
dW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPSBEb05vdEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlKTsKICAgICB2b2lkIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhQYXNzUmVmUHRy
PE5vZGU+KTsKICAgICB2b2lkIG1vdmVSZW1haW5pbmdTaWJsaW5nc1RvTmV3UGFyZW50KE5vZGUq
LCBOb2RlKiBwYXN0TGFzdE5vZGVUb01vdmUsIFBhc3NSZWZQdHI8RWxlbWVudD4gcHJwTmV3UGFy
ZW50KTsKICAgICB2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWxQcmVzZXJ2aW5nQ2hp
bGRyZW4oUG9zaXRpb24mLCBOb2RlKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzMzIyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzMyw3ICszMzMsNyBAQCBzdGF0aWMgUG9zaXRpb24gZmlyc3RFZGl0YWJsZVBv
c2l0aW9uSW5OCiAgICAgcmV0dXJuIG5leHQgPyBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
bmV4dCkgOiBQb3NpdGlvbigpOwogfQogCi12b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJl
bW92ZU5vZGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQordm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpyZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgU2hvdWxkQXNzdW1lQ29udGVu
dElzQWx3YXlzRWRpdGFibGUgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpCiB7
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKAogICAgICAgICAgICAgUmVmUHRy
PE5vZGU+IGNoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgd2hpbGUgKGNo
aWxkKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHRDaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoY2hpbGQuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoY2hpbGQuZ2V0KCksIHNob3VsZEFzc3VtZUNvbnRl
bnRJc0Fsd2F5c0VkaXRhYmxlKTsKICAgICAgICAgICAgICAgICAvLyBCYWlsIGlmIG5leHRDaGls
ZCBpcyBubyBsb25nZXIgbm9kZSdzIGNoaWxkLgogICAgICAgICAgICAgICAgIGlmIChuZXh0Q2hp
bGQgJiYgbmV4dENoaWxkLT5wYXJlbnROb2RlKCkgIT0gbm9kZSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzY3LDcgKzM2Nyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6cmVtb3ZlTm9kZSgKICAgICAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgICAgICBOb2Rl
KiByZW1vdmUgPSBjaGlsZDsKICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCk7Ci0gICAgICAgICAgICByZW1vdmVOb2RlKHJlbW92ZSk7CisgICAgICAgICAgICByZW1vdmVO
b2RlKHJlbW92ZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBNYWtlIHN1cmUgZW1wdHkgY2VsbCBoYXMgc29tZSBo
ZWlnaHQsIGlmIGEgcGxhY2Vob2xkZXIgY2FuIGJlIGluc2VydGVkLgpAQCAtMzkxLDcgKzM5MSw3
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSgKICAgICB1cGRhdGVQ
b3NpdGlvbkZvck5vZGVSZW1vdmFsKG1fbGVhZGluZ1doaXRlc3BhY2UsIG5vZGUuZ2V0KCkpOwog
ICAgIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwobV90cmFpbGluZ1doaXRlc3BhY2UsIG5v
ZGUuZ2V0KCkpOwogICAgIAotICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKG5v
ZGUpOworICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKG5vZGUsIHNob3VsZEFz
c3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlUG9z
aXRpb25Gb3JUZXh0UmVtb3ZhbChOb2RlKiBub2RlLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQsIFBv
c2l0aW9uJiBwb3NpdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5oCShyZXZpc2lvbiAxMzMyMjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NyArNjYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRl
bGV0ZSgpOwogICAgIHZvaWQgY2xlYXJUcmFuc2llbnRTdGF0ZSgpOwogICAgIHZvaWQgbWFrZVN0
eWxpbmdFbGVtZW50c0RpcmVjdENoaWxkcmVuT2ZFZGl0YWJsZVJvb3RUb1ByZXZlbnRTdHlsZUxv
c3MoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+LCBTaG91bGRBc3N1bWVD
b250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERvTm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFi
bGUpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0RnJvbU5vZGUoUGFzc1JlZlB0cjxUZXh0
PiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKICAgICB2b2lkIHJlbW92ZVJlZHVuZGFudEJsb2Nrcygp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCShyZXZpc2lvbiAxMzMy
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDYgKzczLDExIEBAIHByaXZhdGU6CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQq
IG1fcGFyZW50OwogfTsKIAorZW51bSBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSB7CisgICAgQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUsCisgICAgRG9Ob3RBc3N1bWVD
b250ZW50SXNBbHdheXNFZGl0YWJsZSwKK307CisKIGNsYXNzIFNpbXBsZUVkaXRDb21tYW5kIDog
cHVibGljIEVkaXRDb21tYW5kIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5
KCkgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnROb2Rl
QmVmb3JlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzMzIyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwy
NyArMzIsMzAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNlcnROb2RlQmVmb3JlQ29t
bWFuZDo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPiBpbnNlcnRDaGls
ZCwgUGFzc1JlZlB0cjxOb2RlPiByZWZDaGlsZCkKK0luc2VydE5vZGVCZWZvcmVDb21tYW5kOjpJ
bnNlcnROb2RlQmVmb3JlQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxkLCBQYXNz
UmVmUHRyPE5vZGU+IHJlZkNoaWxkLAorICAgIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQogICAgIDogU2ltcGxl
RWRpdENvbW1hbmQocmVmQ2hpbGQtPmRvY3VtZW50KCkpCiAgICAgLCBtX2luc2VydENoaWxkKGlu
c2VydENoaWxkKQogICAgICwgbV9yZWZDaGlsZChyZWZDaGlsZCkKKyAgICAsIG1fc2hvdWxkQXNz
dW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUoc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRp
dGFibGUpCiB7CiAgICAgQVNTRVJUKG1faW5zZXJ0Q2hpbGQpOwogICAgIEFTU0VSVCghbV9pbnNl
cnRDaGlsZC0+cGFyZW50Tm9kZSgpKTsKICAgICBBU1NFUlQobV9yZWZDaGlsZCk7CiAgICAgQVNT
RVJUKG1fcmVmQ2hpbGQtPnBhcmVudE5vZGUoKSk7CiAKLSAgICBBU1NFUlQobV9yZWZDaGlsZC0+
cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSB8fCAhbV9yZWZDaGlsZC0+cGFyZW50
Tm9kZSgpLT5hdHRhY2hlZCgpKTsKKyAgICBBU1NFUlQobV9zaG91bGRBc3N1bWVDb250ZW50SXNB
bHdheXNFZGl0YWJsZSA9PSBBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZQorICAgICAgICB8
fCBtX3JlZkNoaWxkLT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8ICFtX3Jl
ZkNoaWxkLT5wYXJlbnROb2RlKCktPmF0dGFjaGVkKCkpOwogfQogCiB2b2lkIEluc2VydE5vZGVC
ZWZvcmVDb21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBt
X3JlZkNoaWxkLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXND
b250ZW50RWRpdGFibGUoTm9kZTo6VXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUpKQor
ICAgIGlmICghcGFyZW50IHx8IChtX3Nob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxl
ID09IERvTm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgJiYgIXBhcmVudC0+aXNDb250
ZW50RWRpdGFibGUoTm9kZTo6VXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUpKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBwYXJlbnQtPmluc2Vy
dEJlZm9yZShtX2luc2VydENoaWxkLmdldCgpLCBtX3JlZkNoaWxkLmdldCgpLCBlYyk7CisgICAg
cGFyZW50LT5pbnNlcnRCZWZvcmUobV9pbnNlcnRDaGlsZC5nZXQoKSwgbV9yZWZDaGlsZC5nZXQo
KSwgZWMsIHRydWUgLyogbGF6eUF0dGFjaCAqLyk7CiAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6
YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNo
ZSgpLT5ub2RlVGV4dENoYW5nZU5vdGlmaWNhdGlvbihtX2luc2VydENoaWxkLmdldCgpLCBBWE9i
amVjdENhY2hlOjpBWFRleHRJbnNlcnRlZCwgMCwgbV9pbnNlcnRDaGlsZC0+bm9kZVZhbHVlKCkp
OwpAQCAtNjIsNyArNjUsNyBAQCB2b2lkIEluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpkb1VuYXBw
bHkoCiB7CiAgICAgaWYgKCFtX2luc2VydENoaWxkLT5pc0NvbnRlbnRFZGl0YWJsZShOb2RlOjpV
c2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0YWJsZSkpCiAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCisKICAgICAvLyBOZWVkIHRvIG5vdGlmeSB0aGlzIGJlZm9yZSBhY3R1YWxseSBkZWxldGlu
ZyB0aGUgdGV4dAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgp
KQogICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPm5vZGVUZXh0Q2hhbmdlTm90
aWZpY2F0aW9uKG1faW5zZXJ0Q2hpbGQuZ2V0KCksIEFYT2JqZWN0Q2FjaGU6OkFYVGV4dERlbGV0
ZWQsIDAsIG1faW5zZXJ0Q2hpbGQtPm5vZGVWYWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmgJKHJldmlzaW9uIDEzMzIy
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRpdENvbW1hbmQg
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc2VydE5vZGVCZWZvcmVDb21tYW5k
PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiBjaGlsZFRvSW5zZXJ0LCBQYXNzUmVmUHRyPE5vZGU+
IGNoaWxkVG9JbnNlcnRCZWZvcmUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IGNoaWxkVG9JbnNlcnQsIFBhc3NS
ZWZQdHI8Tm9kZT4gY2hpbGRUb0luc2VydEJlZm9yZSwKKyAgICAgICAgU2hvdWxkQXNzdW1lQ29u
dGVudElzQWx3YXlzRWRpdGFibGUgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc2VydE5vZGVCZWZvcmVDb21t
YW5kKGNoaWxkVG9JbnNlcnQsIGNoaWxkVG9JbnNlcnRCZWZvcmUpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZChjaGlsZFRvSW5zZXJ0LCBjaGls
ZFRvSW5zZXJ0QmVmb3JlLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZChQYXNzUmVmUHRy
PE5vZGU+IGNoaWxkVG9JbnNlcnQsIFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGRUb0luc2VydEJlZm9y
ZSk7CisgICAgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPiBjaGlsZFRv
SW5zZXJ0LCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkVG9JbnNlcnRCZWZvcmUsIFNob3VsZEFzc3Vt
ZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCkg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpIE9WRVJSSURFOwpAQCAtNDgs
NyArNDksOCBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgCiAgICAgUmVmUHRyPE5vZGU+IG1faW5z
ZXJ0Q2hpbGQ7Ci0gICAgUmVmUHRyPE5vZGU+IG1fcmVmQ2hpbGQ7IAorICAgIFJlZlB0cjxOb2Rl
PiBtX3JlZkNoaWxkOworICAgIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIG1f
c2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGU7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21t
YW5kLmNwcAkocmV2aXNpb24gMTMzMjI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1v
dmVOb2RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDEwIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotUmVtb3ZlTm9kZUNvbW1hbmQ6OlJlbW92ZU5vZGVDb21tYW5k
KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKK1JlbW92ZU5vZGVDb21tYW5kOjpSZW1vdmVOb2RlQ29t
bWFuZChQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQogICAgIDogU2ltcGxl
RWRpdENvbW1hbmQobm9kZS0+ZG9jdW1lbnQoKSkKICAgICAsIG1fbm9kZShub2RlKQorICAgICwg
bV9zaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZShzaG91bGRBc3N1bWVDb250ZW50
SXNBbHdheXNFZGl0YWJsZSkKIHsKICAgICBBU1NFUlQobV9ub2RlKTsKICAgICBBU1NFUlQobV9u
b2RlLT5wYXJlbnROb2RlKCkpOwpAQCAtNDIsNyArNDMsOCBAQCBSZW1vdmVOb2RlQ29tbWFuZDo6
UmVtb3ZlTm9kZUNvbW1hbmQoUGFzCiB2b2lkIFJlbW92ZU5vZGVDb21tYW5kOjpkb0FwcGx5KCkK
IHsKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBtX25vZGUtPnBhcmVudE5vZGUoKTsKLSAg
ICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc0NvbnRlbnRFZGl0YWJsZShOb2RlOjpVc2VyU2Vs
ZWN0QWxsSXNBbHdheXNOb25FZGl0YWJsZSkpCisgICAgaWYgKCFwYXJlbnQgfHwgKG1fc2hvdWxk
QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPT0gRG9Ob3RBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZQorICAgICAgICAmJiAhcGFyZW50LT5pc0NvbnRlbnRFZGl0YWJsZShOb2RlOjpV
c2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0YWJsZSkgJiYgcGFyZW50LT5hdHRhY2hlZCgpKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wYXJlbnQgPSBwYXJlbnQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5oCShyZXZpc2lvbiAxMzMyMjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDEzICszMiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbW92
ZU5vZGVDb21tYW5kIDogcHVibGljIFNpbXBsZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVOb2RlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9k
ZT4gbm9kZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVOb2RlQ29tbWFuZD4gY3JlYXRl
KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgU2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFi
bGUgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZU5vZGVDb21tYW5kKG5vZGUpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVOb2RlQ29tbWFuZChub2RlLCBzaG91bGRBc3N1bWVDb250
ZW50SXNBbHdheXNFZGl0YWJsZSkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBS
ZW1vdmVOb2RlQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICBleHBsaWNpdCBSZW1vdmVO
b2RlQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNF
ZGl0YWJsZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgdm9pZCBkb1VuYXBwbHkoKSBPVkVSUklERTsKQEAgLTQ5LDcgKzQ5LDggQEAgcHJpdmF0
ZToKIAogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+
IG1fcGFyZW50OwotICAgIFJlZlB0cjxOb2RlPiBtX3JlZkNoaWxkOyAgICAKKyAgICBSZWZQdHI8
Tm9kZT4gbV9yZWZDaGlsZDsKKyAgICBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSBtX3Nob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAJKHJldmlzaW9u
IDEzMzIyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxMCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5k
OjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+IG5v
ZGUpCitSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZDo6UmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbkNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVD
b250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSkKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKG5vZGUtPmRvY3VtZW50KCkpCiAgICAgLCBt
X25vZGUobm9kZSkKKyAgICAsIG1fc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUo
c2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpCiB7CiAgICAgQVNTRVJUKG1fbm9k
ZSk7CiB9CkBAIC00NywxMCArNDgsMTAgQEAgdm9pZCBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuQ29tbWFuZAogICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBjaGls
ZCA9IGNoaWxkcmVuW2ldLnJlbGVhc2UoKTsKLSAgICAgICAgcmVtb3ZlTm9kZShjaGlsZCk7Ci0g
ICAgICAgIGluc2VydE5vZGVCZWZvcmUoY2hpbGQucmVsZWFzZSgpLCBtX25vZGUpOworICAgICAg
ICByZW1vdmVOb2RlKGNoaWxkLCBtX3Nob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxl
KTsKKyAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShjaGlsZC5yZWxlYXNlKCksIG1fbm9kZSwgbV9z
aG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CiAgICAgfQotICAgIHJlbW92ZU5v
ZGUobV9ub2RlKTsKKyAgICByZW1vdmVOb2RlKG1fbm9kZSwgbV9zaG91bGRBc3N1bWVDb250ZW50
SXNBbHdheXNFZGl0YWJsZSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgJ
KHJldmlzaW9uIDEzMzIyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVBy
ZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kPiBj
cmVhdGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kPiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiBu
b2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250
ZW50SXNBbHdheXNFZGl0YWJsZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQobm9kZSkpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKG5vZGUs
IHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKSk7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIGV4cGxpY2l0IFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKFBhc3NS
ZWZQdHI8Tm9kZT4pOworICAgIGV4cGxpY2l0IFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5D
b21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4sIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRh
YmxlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAKICAgICBSZWZQdHI8Tm9kZT4g
bV9ub2RlOworICAgIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIG1fc2hvdWxk
QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENv
bW1hbmQuY3BwCShyZXZpc2lvbiAxMzMyMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Np
bXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAg
U2ltcGxpZnlNYXJrdXBDb21tYW5kOjpTaW1wbGlmeU1hcmt1cENvbQogdm9pZCBTaW1wbGlmeU1h
cmt1cENvbW1hbmQ6OmRvQXBwbHkoKQogewogICAgIE5vZGUqIHJvb3ROb2RlID0gbV9maXJzdE5v
ZGUtPnBhcmVudE5vZGUoKTsKLSAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzVG9SZW1vdmU7CisgICAg
VmVjdG9yPFJlZlB0cjxOb2RlPiA+IG5vZGVzVG9SZW1vdmU7CiAgICAgCiAgICAgLy8gV2FsayB0
aHJvdWdoIHRoZSBpbnNlcnRlZCBub2RlcywgdG8gc2VlIGlmIHRoZXJlIGFyZSBlbGVtZW50cyB0
aGF0IGNvdWxkIGJlIHJlbW92ZWQKICAgICAvLyB3aXRob3V0IGFmZmVjdGluZyB0aGUgc3R5bGUu
IFRoZSBnb2FsIGlzIHRvIHByb2R1Y2UgbGVhbmVyIG1hcmt1cCBldmVuIHdoZW4gc3RhcnRpbmcK
QEAgLTgzLDkgKzgzLDQyIEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5KCkK
ICAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLmFwcGVuZChub2RlKTsKICAgICAgICAgfQog
ICAgIH0KKwogICAgIC8vIHdlIHBlcmZvcm0gYWxsIHRoZSBET00gbXV0YXRpb25zIGF0IG9uY2Uu
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2Rlc1RvUmVtb3ZlLnNpemUoKTsgKytpKQot
ICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKG5vZGVzVG9SZW1vdmVbaV0pOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZXNUb1JlbW92ZS5zaXplKCk7ICsraSkgewor
ICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRvIGJldHRlciBieSBkaXJlY3RseSBtb3ZpbmcgY2hp
bGRyZW4gZnJvbSBub2Rlc1RvUmVtb3ZlW2ldLgorICAgICAgICBpbnQgbnVtUHJ1bmVkQW5jZXN0
b3JzID0gcHJ1bmVTdWJzZXF1ZW50QW5jZXN0b3JzVG9SZW1vdmUobm9kZXNUb1JlbW92ZSwgaSk7
CisgICAgICAgIGlmIChudW1QcnVuZWRBbmNlc3RvcnMgPCAwKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4obm9kZXNUb1JlbW92ZVtp
XSwgQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOworICAgICAgICBpICs9IG51bVBydW5l
ZEFuY2VzdG9yczsKKyAgICB9Cit9CisKK2ludCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OnBydW5l
U3Vic2VxdWVudEFuY2VzdG9yc1RvUmVtb3ZlKFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgbm9kZXNU
b1JlbW92ZSwgc2l6ZV90IHN0YXJ0Tm9kZUluZGV4KQoreworICAgIHNpemVfdCBwYXN0TGFzdE5v
ZGVUb1JlbW92ZSA9IHN0YXJ0Tm9kZUluZGV4ICsgMTsKKyAgICBmb3IgKDsgcGFzdExhc3ROb2Rl
VG9SZW1vdmUgPCBub2Rlc1RvUmVtb3ZlLnNpemUoKTsgKytwYXN0TGFzdE5vZGVUb1JlbW92ZSkg
eworICAgICAgICBpZiAobm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZSAtIDFdLT5w
YXJlbnROb2RlKCkgIT0gbm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZV0pCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgQVNTRVJUKG5vZGVzVG9SZW1vdmVbcGFzdExhc3ROb2Rl
VG9SZW1vdmVdLT5maXJzdENoaWxkKCkgPT0gbm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1Jl
bW92ZV0tPmxhc3RDaGlsZCgpKTsKKyAgICB9CisKKyAgICBpZiAocGFzdExhc3ROb2RlVG9SZW1v
dmUgPT0gc3RhcnROb2RlSW5kZXggKyAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5vZGUq
IGhpZ2hlc3RBbmNlc3RvclRvUmVtb3ZlID0gbm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1Jl
bW92ZSAtIDFdLmdldCgpOworCisgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlckhpZ2hlc3RBbmNl
c3RvclRvUmVtb3ZlID0gaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUtPm5leHRTaWJsaW5nKCk7Cisg
ICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IGhpZ2hlc3RBbmNlc3RvclRvUmVtb3Zl
LT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpIC8vIFBhcmVudCBoYXMgYWxyZWFkeSBi
ZWVuIHJlbW92ZWQuCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJlbW92ZU5vZGUobm9kZXNU
b1JlbW92ZVtzdGFydE5vZGVJbmRleF0sIEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsK
KyAgICBpbnNlcnROb2RlQmVmb3JlKG5vZGVzVG9SZW1vdmVbc3RhcnROb2RlSW5kZXhdLCBoaWdo
ZXN0QW5jZXN0b3JUb1JlbW92ZSwgQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOworICAg
IHJlbW92ZU5vZGUoaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUsIEFzc3VtZUNvbnRlbnRJc0Fsd2F5
c0VkaXRhYmxlKTsKKworICAgIHJldHVybiBwYXN0TGFzdE5vZGVUb1JlbW92ZSAtIHN0YXJ0Tm9k
ZUluZGV4IC0gMTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5oCShyZXZpc2lvbiAxMzMy
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4IEBAIHByaXZhdGU6CiAgICAgU2ltcGxpZnlNYXJr
dXBDb21tYW5kKERvY3VtZW50KiwgTm9kZSogZmlyc3ROb2RlLCBOb2RlKiBub2RlQWZ0ZXJMYXN0
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7Ci0gICAgCisgICAgaW50IHBydW5lU3Vi
c2VxdWVudEFuY2VzdG9yc1RvUmVtb3ZlKFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgbm9kZXNUb1Jl
bW92ZSwgc2l6ZV90IHN0YXJ0Tm9kZUluZGV4KTsKKwogICAgIFJlZlB0cjxOb2RlPiBtX2ZpcnN0
Tm9kZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlQWZ0ZXJMYXN0OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172462</attachid>
            <date>2012-11-05 18:33:07 -0800</date>
            <delta_ts>2012-11-07 13:57:56 -0800</delta_ts>
            <desc>Keep assertions in appendNode and insertNodeBefore</desc>
            <filename>bug-101144-20121105183121.patch</filename>
            <type>text/plain</type>
            <size>24287</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDEyLTExLTA1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNpbXBsaWZ5TWFya3VwQ29tbWFu
ZCB0YWtlcyBhIGRpc3Byb3BvcnRpb25hbGx5IGxvbmcgdGltZSB0byBydW4gd2hlbiB0aGVyZSBh
cmUgbWFueSBub2RlcyB0byByZW1vdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMTE0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoZSBidWcgd2FzIGNhdXNlZCBieSBhdHRhY2goKSBoYXBwZW5pbmcg
YmV0d2VlbiBlYWNoIG5vZGUgcmVtb3ZhbC4gU2luY2UgdGhlIGNvbW1hbmQgd2FzIHRyeWluZwor
ICAgICAgICB0byByZW1vdmUgbWlsbGlvbnMgb2Ygbm9kZSBpbiBzb21lIGNhc2VzLCBhdHRhY2go
KWluZyByZW5kZXIgb2JqZWN0cyBmb3IgZWFjaCBub2RlIGJlaW5nIHJlaW5zZXJ0ZWQKKyAgICAg
ICAgaW1wb3NlZCBhIGh1Z2UgcnVudGltZSBjb3N0LgorCisgICAgICAgIEZpeGVkIHRoZSBidWcg
YnkgdXNpbmcgbGF6eSBhdHRhY2ggd2hlbiByZW1vdmluZyBub2RlcyBhbmQgYXZvaWRpbmcgY2Fs
bHMgdG8gaXNDb250ZW50RWRpdGFibGUuCisgICAgICAgIEFsc28gcmVtb3ZlIGFsbCBhbmNlc3Rv
cnMgYXQgb25jZSB3aGVuIHRoZXkgYXJlIGRpcmVjdCBjaGlsZC9wYXJlbnQgb2YgZWFjaCBvdGhl
ciBzbyB0aGF0IHdlIGRvbid0CisgICAgICAgIHJlbW92ZSBhbiBhbmNlc3RvciBhbmQgdGhlbiBp
bnNlcnQgaXRzIGNoaWxkIGJhY2sgb25seSB0byByZW1vdmUgaXQgYWdhaW4gaW4gdGhlIG5leHQg
aXRlcmF0aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBpdCBkb2Vzbid0IGNoYW5n
ZSB0aGUgYXN5bXB0b3RpYyBwZXJmb3JtYW5jZSwgYW5kIGFkZGluZyBhIG5ldyBwZXJmb3JtYW5j
ZSB0ZXN0IGZvcgorICAgICAgICB0aGlzIHNwZWNpZmljIGNhc2UgaXMgbm90IHRoZSB3b3J0aCB0
aGUgaW5jcmVhc2UgaW4gdGhlIGJvdCBjeWNsZSB0aW1lLiBJJ2xsIG5vdGUgdGhhdCB0aGUgZW1h
aWwKKyAgICAgICAgYXR0YWNoZWQgaW4gdGhlIG9yaWdpbmFsIHJhZGFyIGJ1ZyAoPHJkYXI6Ly9w
cm9ibGVtLzEyMTc5NzEyPikgdG9vayAxMDAgc2Vjb25kcyB0byBvcGVuIG5vdyBvbmx5IHRha2Vz
CisgICAgICAgIDcgc2Vjb25kcyB0byBvcGVuIG9uIG15IE1hY1Byby4KKworICAgICAgICAqIGVk
aXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kTm9k
ZUNvbW1hbmQ6OmRvQXBwbHkpOiBUYWtlcyBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHdlIHNo
b3VsZCBhc3N1bWUgbm9kZXMgYXJlIGVkaXRhYmxlCisgICAgICAgIHdpdGhvdXQgY2FsbGluZyBp
c0NvbnRlbnRFZGl0YWJsZSBvciBub3QuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxp
bmVTdHlsZVRvUHVzaERvd24pOiBVcGRhdGUgdGhlIHN0eWxlIGFzIGxhdGVyIGNvZGUgcmVxdWly
ZXMgcmVuZGVyCisgICAgICAgIG9iamVjdC4KKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpp
bnNlcnROb2RlQmVmb3JlKTogUGFzc2VzIGEgZmxhZyB0byB0aGUgY29tbWFuZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbik6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
aDoKKyAgICAgICAgKENvbXBvc2l0ZUVkaXRDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSk6IFRha2VzIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIg
d2Ugc2hvdWxkIGFzc3VtZSBub2RlcyBhcmUKKyAgICAgICAgZWRpdGFibGUgd2l0aG91dCBjYWxs
aW5nIGlzQ29udGVudEVkaXRhYmxlIG9yIG5vdC4KKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuaDoKKyAgICAgICAgKERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQpOgorICAg
ICAgICAqIGVkaXRpbmcvRWRpdENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydE5v
ZGVCZWZvcmVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydE5vZGVCZWZvcmVD
b21tYW5kOjpJbnNlcnROb2RlQmVmb3JlQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmRvQXBwbHkpOiBEaXR0bzsgYWxzbyBhbHdheXMg
dXNlIGxhenkgYXR0YWNoLgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1h
bmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFu
ZC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmNyZWF0ZSk6
CisgICAgICAgIChJbnNlcnROb2RlQmVmb3JlQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9S
ZW1vdmVOb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVOb2RlQ29tbWFu
ZDo6UmVtb3ZlTm9kZUNvbW1hbmQpOiBEaXR0byBhYm91dCB0aGUgZmxhZy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbW92ZU5vZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1Jl
bW92ZU5vZGVDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVOb2RlQ29tbWFuZDo6
Y3JlYXRlKToKKyAgICAgICAgKFJlbW92ZU5vZGVDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5n
L1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpSZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcv
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpjcmVhdGUpOgorICAgICAgICAo
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcv
U2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZ5TWFy
a3VwQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmeU1hcmt1cENv
bW1hbmQ6OnBydW5lU3Vic2VxdWVudEFuY2VzdG9yc1RvUmVtb3ZlKTogQWRkZWQgdG8gb3B0aW1p
emUgcmVtb3ZhbHMgb2YgbXVsdGlwbGUKKyAgICAgICAgYW5jZXN0b3JzLgorICAgICAgICAqIGVk
aXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmg6CisgICAgICAgIChTaW1wbGlmeU1hcmt1cENv
bW1hbmQpOgorCiAyMDEyLTExLTA1ICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBMYXlvdXRUZXN0IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3dyb290LXR5
cGUuaHRtbCBpcyBmYWlsaW5nIG9uIFdpbmRvd3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzM1NDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjAsNyArNjAsNyBAQCB2b2lkIEFwcGVuZE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIG1fcGFyZW50LT5h
cHBlbmRDaGlsZChtX25vZGUuZ2V0KCksIGVjKTsKKyAgICBtX3BhcmVudC0+YXBwZW5kQ2hpbGQo
bV9ub2RlLmdldCgpLCBlYywgdHJ1ZSAvKiBsYXp5QXR0YWNoICovKTsKIAogICAgIGlmIChBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBzZW5kQVhUZXh0Q2hh
bmdlZElnbm9yaW5nTGluZUJyZWFrcyhtX25vZGUuZ2V0KCksIEFYT2JqZWN0Q2FjaGU6OkFYVGV4
dEluc2VydGVkKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwCShyZXZpc2lvbiAxMzM1NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQyLDYgKzk0Miw4IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKIHsKICAgICBBU1NFUlQobm9k
ZSk7CiAKKyAgICBub2RlLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisKICAg
ICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCiAg
ICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcs
MTAgKzMxNywxMCBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppc1JlbW92YWJsZUJsCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRO
b2RlQmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0Q2hpbGQsIFBhc3NSZWZQdHI8Tm9kZT4g
cmVmQ2hpbGQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQmVmb3JlKFBh
c3NSZWZQdHI8Tm9kZT4gaW5zZXJ0Q2hpbGQsIFBhc3NSZWZQdHI8Tm9kZT4gcmVmQ2hpbGQsIFNo
b3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fs
d2F5c0VkaXRhYmxlKQogewogICAgIEFTU0VSVCghcmVmQ2hpbGQtPmhhc1RhZ05hbWUoYm9keVRh
ZykpOwotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydE5vZGVCZWZvcmVDb21tYW5k
OjpjcmVhdGUoaW5zZXJ0Q2hpbGQsIHJlZkNoaWxkKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmNyZWF0ZShpbnNlcnRDaGlsZCwgcmVmQ2hp
bGQsIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKSk7CiB9CiAKIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBZnRlcihQYXNzUmVmUHRyPE5vZGU+IGluc2Vy
dENoaWxkLCBQYXNzUmVmUHRyPE5vZGU+IHJlZkNoaWxkKQpAQCAtMzg3LDE2ICszODcsMTYgQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlQ2hpbGRyZQogICAgICAgICByZW1vdmVO
b2RlKGNoaWxkcmVuW2ldLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnJlbW92ZU5vZGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQordm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFNob3VsZEFzc3VtZUNv
bnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxl
KQogewogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+bm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2Rl
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZW1vdmVO
b2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUpKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShS
ZW1vdmVOb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5
c0VkaXRhYmxlKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2RlPiBub2RlKQordm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihQYXNzUmVmUHRyPE5vZGU+
IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNv
bnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQogewotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJl
bW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpjcmVhdGUobm9kZSkpOworICAgIGFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5k
OjpjcmVhdGUobm9kZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpKTsKIH0K
IAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3Jz
KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgJKHJldmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4
LDcgKzEwOCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGluc2VydE5vZGVBZnRlcihQYXNzUmVm
UHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5vZGU+IHJlZkNoaWxkKTsKICAgICB2b2lkIGluc2VydE5v
ZGVBdChQYXNzUmVmUHRyPE5vZGU+LCBjb25zdCBQb3NpdGlvbiYpOwogICAgIHZvaWQgaW5zZXJ0
Tm9kZUF0VGFiU3BhblBvc2l0aW9uKFBhc3NSZWZQdHI8Tm9kZT4sIGNvbnN0IFBvc2l0aW9uJik7
Ci0gICAgdm9pZCBpbnNlcnROb2RlQmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4sIFBhc3NSZWZQdHI8
Tm9kZT4gcmVmQ2hpbGQpOworICAgIHZvaWQgaW5zZXJ0Tm9kZUJlZm9yZShQYXNzUmVmUHRyPE5v
ZGU+LCBQYXNzUmVmUHRyPE5vZGU+IHJlZkNoaWxkLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSA9IERvTm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgIHZv
aWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGJvb2wgdXNlRGVmYXVsdFBhcmFncmFwaEVsZW1l
bnQgPSBmYWxzZSwgYm9vbCBwYXN0ZUJsb2NrcXV0b2VJbnRvVW5xdW90ZWRBcmVhID0gZmFsc2Up
OwogICAgIHZvaWQgaW5zZXJ0TGluZUJyZWFrKCk7CiAgICAgdm9pZCBpbnNlcnRUZXh0SW50b05v
ZGUoUGFzc1JlZlB0cjxUZXh0PiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQp
OwpAQCAtMTIyLDkgKzEyMiw5IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHJlbW92ZUNTU1Byb3Bl
cnR5KFBhc3NSZWZQdHI8U3R5bGVkRWxlbWVudD4sIENTU1Byb3BlcnR5SUQpOwogICAgIHZvaWQg
cmVtb3ZlTm9kZUF0dHJpYnV0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGUpOwogICAgIHZvaWQgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKFBhc3NSZWZQ
dHI8Tm9kZT4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTm9k
ZShQYXNzUmVmUHRyPE5vZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSA9
IERvTm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgIEhUTUxFbGVtZW50KiBy
ZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhQYXNz
UmVmUHRyPEhUTUxFbGVtZW50Pik7Ci0gICAgdm9pZCByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZvaWQgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbihQYXNzUmVmUHRyPE5vZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSA9IERvTm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgIHZvaWQgcmVtb3Zl
Tm9kZUFuZFBydW5lQW5jZXN0b3JzKFBhc3NSZWZQdHI8Tm9kZT4pOwogICAgIHZvaWQgbW92ZVJl
bWFpbmluZ1NpYmxpbmdzVG9OZXdQYXJlbnQoTm9kZSosIE5vZGUqIHBhc3RMYXN0Tm9kZVRvTW92
ZSwgUGFzc1JlZlB0cjxFbGVtZW50PiBwcnBOZXdQYXJlbnQpOwogICAgIHZvaWQgdXBkYXRlUG9z
aXRpb25Gb3JOb2RlUmVtb3ZhbFByZXNlcnZpbmdDaGlsZHJlbihQb3NpdGlvbiYsIE5vZGUqKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcAkocmV2aXNpb24gMTMzNTQ5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBA
IHN0YXRpYyBQb3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRpb25Jbk4KICAgICByZXR1cm4gbmV4
dCA/IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShuZXh0KSA6IFBvc2l0aW9uKCk7CiB9CiAK
LXZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+
IG5vZGUpCit2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUoUGFzc1JlZlB0
cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRB
c3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybjsKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OnJlbW92ZU5vZGUoCiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBub2RlLT5maXJz
dENoaWxkKCk7CiAgICAgICAgICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgICAgICAgICBS
ZWZQdHI8Tm9kZT4gbmV4dENoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAg
ICAgICAgcmVtb3ZlTm9kZShjaGlsZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9k
ZShjaGlsZC5nZXQoKSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAg
ICAgICAgICAgICAgIC8vIEJhaWwgaWYgbmV4dENoaWxkIGlzIG5vIGxvbmdlciBub2RlJ3MgY2hp
bGQuCiAgICAgICAgICAgICAgICAgaWYgKG5leHRDaGlsZCAmJiBuZXh0Q2hpbGQtPnBhcmVudE5v
ZGUoKSAhPSBub2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zNjcsNyArMzY3
LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKAogICAgICAgICB3
aGlsZSAoY2hpbGQpIHsKICAgICAgICAgICAgIE5vZGUqIHJlbW92ZSA9IGNoaWxkOwogICAgICAg
ICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHJlbW92ZU5v
ZGUocmVtb3ZlKTsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUocmVtb3ZlLCBzaG91bGRBc3N1bWVD
b250ZW50SXNBbHdheXNFZGl0YWJsZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8v
IE1ha2Ugc3VyZSBlbXB0eSBjZWxsIGhhcyBzb21lIGhlaWdodCwgaWYgYSBwbGFjZWhvbGRlciBj
YW4gYmUgaW5zZXJ0ZWQuCkBAIC0zOTEsNyArMzkxLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpyZW1vdmVOb2RlKAogICAgIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwobV9s
ZWFkaW5nV2hpdGVzcGFjZSwgbm9kZS5nZXQoKSk7CiAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2Rl
UmVtb3ZhbChtX3RyYWlsaW5nV2hpdGVzcGFjZSwgbm9kZS5nZXQoKSk7CiAgICAgCi0gICAgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUobm9kZSk7CisgICAgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnJlbW92ZU5vZGUobm9kZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFi
bGUpOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFsKE5vZGUq
IG5vZGUsIGludCBvZmZzZXQsIGludCBjb3VudCwgUG9zaXRpb24mIHBvc2l0aW9uKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmgJKHJl
dmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBjYWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKCk7CiAgICAgdm9pZCBjbGVhclRy
YW5zaWVudFN0YXRlKCk7CiAgICAgdm9pZCBtYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRy
ZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcygpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVOb2Rl
KFBhc3NSZWZQdHI8Tm9kZT4sIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlID0g
RG9Ob3RBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CiAgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZVRleHRGcm9tTm9kZShQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCwgdW5zaWduZWQpOwog
ICAgIHZvaWQgcmVtb3ZlUmVkdW5kYW50QmxvY2tzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRDb21tYW5kLmgJKHJldmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdENvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMTEgQEAgcHJp
dmF0ZToKICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZCogbV9wYXJlbnQ7CiB9OwogCitlbnVtIFNo
b3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHsKKyAgICBBc3N1bWVDb250ZW50SXNB
bHdheXNFZGl0YWJsZSwKKyAgICBEb05vdEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLAor
fTsKKwogY2xhc3MgU2ltcGxlRWRpdENvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewogcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKSA9IDA7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcAkocmV2aXNp
b24gMTMzNTQ5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEwICszMiwxMiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpJbnNlcnROb2RlQmVmb3JlQ29t
bWFuZChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxkLCBQYXNzUmVmUHRyPE5vZGU+IHJlZkNo
aWxkKQorSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6Okluc2VydE5vZGVCZWZvcmVDb21tYW5kKFBh
c3NSZWZQdHI8Tm9kZT4gaW5zZXJ0Q2hpbGQsIFBhc3NSZWZQdHI8Tm9kZT4gcmVmQ2hpbGQsCisg
ICAgU2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgc2hvdWxkQXNzdW1lQ29udGVu
dElzQWx3YXlzRWRpdGFibGUpCiAgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChyZWZDaGlsZC0+ZG9j
dW1lbnQoKSkKICAgICAsIG1faW5zZXJ0Q2hpbGQoaW5zZXJ0Q2hpbGQpCiAgICAgLCBtX3JlZkNo
aWxkKHJlZkNoaWxkKQorICAgICwgbV9zaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZShzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKIHsKICAgICBBU1NFUlQobV9p
bnNlcnRDaGlsZCk7CiAgICAgQVNTRVJUKCFtX2luc2VydENoaWxkLT5wYXJlbnROb2RlKCkpOwpA
QCAtNDgsMTEgKzUwLDEyIEBAIEluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpJbnNlcnROb2RlQmVm
b3IKIHZvaWQgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmRvQXBwbHkoKQogewogICAgIENvbnRh
aW5lck5vZGUqIHBhcmVudCA9IG1fcmVmQ2hpbGQtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBh
cmVudCB8fCAhcGFyZW50LT5pc0NvbnRlbnRFZGl0YWJsZShOb2RlOjpVc2VyU2VsZWN0QWxsSXNB
bHdheXNOb25FZGl0YWJsZSkpCisgICAgaWYgKCFwYXJlbnQgfHwgKG1fc2hvdWxkQXNzdW1lQ29u
dGVudElzQWx3YXlzRWRpdGFibGUgPT0gRG9Ob3RBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSAmJiAhcGFyZW50LT5pc0NvbnRlbnRFZGl0YWJsZShOb2RlOjpVc2VyU2VsZWN0QWxsSXNBbHdh
eXNOb25FZGl0YWJsZSkpKQogICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHBhcmVudC0+aXND
b250ZW50RWRpdGFibGUoTm9kZTo6VXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUpKTsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgcGFyZW50LT5pbnNlcnRCZWZvcmUobV9pbnNl
cnRDaGlsZC5nZXQoKSwgbV9yZWZDaGlsZC5nZXQoKSwgZWMpOworICAgIHBhcmVudC0+aW5zZXJ0
QmVmb3JlKG1faW5zZXJ0Q2hpbGQuZ2V0KCksIG1fcmVmQ2hpbGQuZ2V0KCksIGVjLCB0cnVlIC8q
IGxhenlBdHRhY2ggKi8pOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlF
bmFibGVkKCkpCiAgICAgICAgIGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+bm9kZVRleHRD
aGFuZ2VOb3RpZmljYXRpb24obV9pbnNlcnRDaGlsZC5nZXQoKSwgQVhPYmplY3RDYWNoZTo6QVhU
ZXh0SW5zZXJ0ZWQsIDAsIG1faW5zZXJ0Q2hpbGQtPm5vZGVWYWx1ZSgpKTsKQEAgLTYyLDcgKzY1
LDcgQEAgdm9pZCBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6ZG9VbmFwcGx5KAogewogICAgIGlm
ICghbV9pbnNlcnRDaGlsZC0+aXNDb250ZW50RWRpdGFibGUoTm9kZTo6VXNlclNlbGVjdEFsbElz
QWx3YXlzTm9uRWRpdGFibGUpKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgLy8g
TmVlZCB0byBub3RpZnkgdGhpcyBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcgdGhlIHRleHQKICAg
ICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgZG9j
dW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5ub2RlVGV4dENoYW5nZU5vdGlmaWNhdGlvbihtX2lu
c2VydENoaWxkLmdldCgpLCBBWE9iamVjdENhY2hlOjpBWFRleHREZWxldGVkLCAwLCBtX2luc2Vy
dENoaWxkLT5ub2RlVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dE5vZGVCZWZvcmVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5oCShyZXZpc2lvbiAxMzM1NDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDEzICszMiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluc2VydE5v
ZGVCZWZvcmVDb21tYW5kIDogcHVibGljIFNpbXBsZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNlcnROb2RlQmVmb3JlQ29tbWFuZD4gY3JlYXRlKFBhc3NS
ZWZQdHI8Tm9kZT4gY2hpbGRUb0luc2VydCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZFRvSW5zZXJ0
QmVmb3JlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc2VydE5vZGVCZWZvcmVDb21tYW5kPiBj
cmVhdGUoUGFzc1JlZlB0cjxOb2RlPiBjaGlsZFRvSW5zZXJ0LCBQYXNzUmVmUHRyPE5vZGU+IGNo
aWxkVG9JbnNlcnRCZWZvcmUsCisgICAgICAgIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZChjaGlsZFRvSW5z
ZXJ0LCBjaGlsZFRvSW5zZXJ0QmVmb3JlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQoY2hpbGRUb0luc2VydCwgY2hpbGRUb0luc2VydEJlZm9y
ZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpKTsKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPiBjaGlsZFRv
SW5zZXJ0LCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkVG9JbnNlcnRCZWZvcmUpOworICAgIEluc2Vy
dE5vZGVCZWZvcmVDb21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGRUb0luc2VydCwgUGFzc1Jl
ZlB0cjxOb2RlPiBjaGlsZFRvSW5zZXJ0QmVmb3JlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKSBPVkVSUklERTsKQEAgLTQ4LDcgKzQ5LDggQEAgcHJp
dmF0ZToKICNlbmRpZgogICAgIAogICAgIFJlZlB0cjxOb2RlPiBtX2luc2VydENoaWxkOwotICAg
IFJlZlB0cjxOb2RlPiBtX3JlZkNoaWxkOyAKKyAgICBSZWZQdHI8Tm9kZT4gbV9yZWZDaGlsZDsK
KyAgICBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBtX3Nob3VsZEFzc3VtZUNv
bnRlbnRJc0Fsd2F5c0VkaXRhYmxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVJlbW92ZU5vZGVDb21tYW5kOjpSZW1vdmVOb2RlQ29tbWFuZChQYXNzUmVmUHRyPE5v
ZGU+IG5vZGUpCitSZW1vdmVOb2RlQ29tbWFuZDo6UmVtb3ZlTm9kZUNvbW1hbmQoUGFzc1JlZlB0
cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRB
c3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKICAgICA6IFNpbXBsZUVkaXRDb21tYW5kKG5v
ZGUtPmRvY3VtZW50KCkpCiAgICAgLCBtX25vZGUobm9kZSkKKyAgICAsIG1fc2hvdWxkQXNzdW1l
Q29udGVudElzQWx3YXlzRWRpdGFibGUoc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFi
bGUpCiB7CiAgICAgQVNTRVJUKG1fbm9kZSk7CiAgICAgQVNTRVJUKG1fbm9kZS0+cGFyZW50Tm9k
ZSgpKTsKQEAgLTQyLDggKzQzLDEwIEBAIFJlbW92ZU5vZGVDb21tYW5kOjpSZW1vdmVOb2RlQ29t
bWFuZChQYXMKIHZvaWQgUmVtb3ZlTm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogewogICAgIENvbnRh
aW5lck5vZGUqIHBhcmVudCA9IG1fbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50
IHx8ICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKE5vZGU6OlVzZXJTZWxlY3RBbGxJc0Fsd2F5
c05vbkVkaXRhYmxlKSkKKyAgICBpZiAoIXBhcmVudCB8fCAobV9zaG91bGRBc3N1bWVDb250ZW50
SXNBbHdheXNFZGl0YWJsZSA9PSBEb05vdEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlCisg
ICAgICAgICYmICFwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKE5vZGU6OlVzZXJTZWxlY3RBbGxJ
c0Fsd2F5c05vbkVkaXRhYmxlKSAmJiBwYXJlbnQtPmF0dGFjaGVkKCkpKQogICAgICAgICByZXR1
cm47CisgICAgQVNTRVJUKHBhcmVudC0+aXNDb250ZW50RWRpdGFibGUoTm9kZTo6VXNlclNlbGVj
dEFsbElzQWx3YXlzTm9uRWRpdGFibGUpIHx8ICFwYXJlbnQtPmF0dGFjaGVkKCkpOwogCiAgICAg
bV9wYXJlbnQgPSBwYXJlbnQ7CiAgICAgbV9yZWZDaGlsZCA9IG1fbm9kZS0+bmV4dFNpYmxpbmco
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmgJKHJl
dmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1h
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgUmVtb3ZlTm9kZUNvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRpdENvbW1hbmQg
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92ZU5vZGVDb21tYW5kPiBjcmVh
dGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92ZU5v
ZGVDb21tYW5kPiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVDb250
ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVtb3ZlTm9kZUNvbW1hbmQobm9k
ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZU5vZGVDb21tYW5kKG5vZGUs
IHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKSk7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIGV4cGxpY2l0IFJlbW92ZU5vZGVDb21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4pOworICAg
IGV4cGxpY2l0IFJlbW92ZU5vZGVDb21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4sIFNob3VsZEFzc3Vt
ZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCkg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpIE9WRVJSSURFOwpAQCAtNDks
NyArNDksOCBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKICAgICBSZWZQ
dHI8Q29udGFpbmVyTm9kZT4gbV9wYXJlbnQ7Ci0gICAgUmVmUHRyPE5vZGU+IG1fcmVmQ2hpbGQ7
ICAgIAorICAgIFJlZlB0cjxOb2RlPiBtX3JlZkNoaWxkOworICAgIFNob3VsZEFzc3VtZUNvbnRl
bnRJc0Fsd2F5c0VkaXRhYmxlIG1fc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21t
YW5kLmNwcAkocmV2aXNpb24gMTMzNTQ5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDkgKzMxLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbkNvbW1hbmQ6OlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKFBh
c3NSZWZQdHI8Tm9kZT4gbm9kZSkKK1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5k
OjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+IG5v
ZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNvbnRl
bnRJc0Fsd2F5c0VkaXRhYmxlKQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQobm9kZS0+ZG9j
dW1lbnQoKSkKICAgICAsIG1fbm9kZShub2RlKQorICAgICwgbV9zaG91bGRBc3N1bWVDb250ZW50
SXNBbHdheXNFZGl0YWJsZShzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKIHsK
ICAgICBBU1NFUlQobV9ub2RlKTsKIH0KQEAgLTQ3LDEwICs0OCwxMCBAQCB2b2lkIFJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kCiAgICAgc2l6ZV90IHNpemUgPSBjaGlsZHJlbi5z
aXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAg
UmVmUHRyPE5vZGU+IGNoaWxkID0gY2hpbGRyZW5baV0ucmVsZWFzZSgpOwotICAgICAgICByZW1v
dmVOb2RlKGNoaWxkKTsKLSAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShjaGlsZC5yZWxlYXNlKCks
IG1fbm9kZSk7CisgICAgICAgIHJlbW92ZU5vZGUoY2hpbGQsIG1fc2hvdWxkQXNzdW1lQ29udGVu
dElzQWx3YXlzRWRpdGFibGUpOworICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGNoaWxkLnJlbGVh
c2UoKSwgbV9ub2RlLCBtX3Nob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKICAg
ICB9Ci0gICAgcmVtb3ZlTm9kZShtX25vZGUpOworICAgIHJlbW92ZU5vZGUobV9ub2RlLCBtX3No
b3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKIH0KIAogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbkNvbW1hbmQuaAkocmV2aXNpb24gMTMzNTQ5KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwxNyArMzIsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFu
ZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbkNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ+IGNyZWF0ZShQ
YXNzUmVmUHRyPE5vZGU+IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxl
IHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChub2Rl
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQobm9kZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpKTsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgZXhwbGljaXQgUmVtb3ZlTm9kZVBy
ZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPiwgU2hvdWxkQXNzdW1lQ29u
dGVudElzQWx3YXlzRWRpdGFibGUpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKIAog
ICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgU2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlz
RWRpdGFibGUgbV9zaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxp
ZnlNYXJrdXBDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNyArNDEsNyBAQCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OlNpbXBsaWZ5TWFya3VwQ29t
CiB2b2lkIFNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgTm9kZSogcm9v
dE5vZGUgPSBtX2ZpcnN0Tm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIFZlY3RvcjxOb2RlKj4gbm9k
ZXNUb1JlbW92ZTsKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbm9kZXNUb1JlbW92ZTsKICAg
ICAKICAgICAvLyBXYWxrIHRocm91Z2ggdGhlIGluc2VydGVkIG5vZGVzLCB0byBzZWUgaWYgdGhl
cmUgYXJlIGVsZW1lbnRzIHRoYXQgY291bGQgYmUgcmVtb3ZlZAogICAgIC8vIHdpdGhvdXQgYWZm
ZWN0aW5nIHRoZSBzdHlsZS4gVGhlIGdvYWwgaXMgdG8gcHJvZHVjZSBsZWFuZXIgbWFya3VwIGV2
ZW4gd2hlbiBzdGFydGluZwpAQCAtODMsOSArODMsNDIgQEAgdm9pZCBTaW1wbGlmeU1hcmt1cENv
bW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIG5vZGVzVG9SZW1vdmUuYXBwZW5kKG5v
ZGUpOwogICAgICAgICB9CiAgICAgfQorCiAgICAgLy8gd2UgcGVyZm9ybSBhbGwgdGhlIERPTSBt
dXRhdGlvbnMgYXQgb25jZS4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGVzVG9SZW1v
dmUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4obm9k
ZXNUb1JlbW92ZVtpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2Rlc1RvUmVtb3Zl
LnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZG8gYmV0dGVyIGJ5IGRp
cmVjdGx5IG1vdmluZyBjaGlsZHJlbiBmcm9tIG5vZGVzVG9SZW1vdmVbaV0uCisgICAgICAgIGlu
dCBudW1QcnVuZWRBbmNlc3RvcnMgPSBwcnVuZVN1YnNlcXVlbnRBbmNlc3RvcnNUb1JlbW92ZShu
b2Rlc1RvUmVtb3ZlLCBpKTsKKyAgICAgICAgaWYgKG51bVBydW5lZEFuY2VzdG9ycyA8IDApCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bihub2Rlc1RvUmVtb3ZlW2ldLCBBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CisgICAg
ICAgIGkgKz0gbnVtUHJ1bmVkQW5jZXN0b3JzOworICAgIH0KK30KKworaW50IFNpbXBsaWZ5TWFy
a3VwQ29tbWFuZDo6cHJ1bmVTdWJzZXF1ZW50QW5jZXN0b3JzVG9SZW1vdmUoVmVjdG9yPFJlZlB0
cjxOb2RlPiA+JiBub2Rlc1RvUmVtb3ZlLCBzaXplX3Qgc3RhcnROb2RlSW5kZXgpCit7CisgICAg
c2l6ZV90IHBhc3RMYXN0Tm9kZVRvUmVtb3ZlID0gc3RhcnROb2RlSW5kZXggKyAxOworICAgIGZv
ciAoOyBwYXN0TGFzdE5vZGVUb1JlbW92ZSA8IG5vZGVzVG9SZW1vdmUuc2l6ZSgpOyArK3Bhc3RM
YXN0Tm9kZVRvUmVtb3ZlKSB7CisgICAgICAgIGlmIChub2Rlc1RvUmVtb3ZlW3Bhc3RMYXN0Tm9k
ZVRvUmVtb3ZlIC0gMV0tPnBhcmVudE5vZGUoKSAhPSBub2Rlc1RvUmVtb3ZlW3Bhc3RMYXN0Tm9k
ZVRvUmVtb3ZlXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBBU1NFUlQobm9kZXNUb1Jl
bW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZV0tPmZpcnN0Q2hpbGQoKSA9PSBub2Rlc1RvUmVtb3Zl
W3Bhc3RMYXN0Tm9kZVRvUmVtb3ZlXS0+bGFzdENoaWxkKCkpOworICAgIH0KKworICAgIGlmIChw
YXN0TGFzdE5vZGVUb1JlbW92ZSA9PSBzdGFydE5vZGVJbmRleCArIDEpCisgICAgICAgIHJldHVy
biAwOworCisgICAgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUgPSBub2Rlc1RvUmVtb3Zl
W3Bhc3RMYXN0Tm9kZVRvUmVtb3ZlIC0gMV0uZ2V0KCk7CisKKyAgICBSZWZQdHI8Tm9kZT4gbm9k
ZUFmdGVySGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUgPSBoaWdoZXN0QW5jZXN0b3JUb1JlbW92ZS0+
bmV4dFNpYmxpbmcoKTsKKyAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gaGlnaGVz
dEFuY2VzdG9yVG9SZW1vdmUtPnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkgLy8gUGFy
ZW50IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgcmV0dXJuIC0xOworCisgICAg
cmVtb3ZlTm9kZShub2Rlc1RvUmVtb3ZlW3N0YXJ0Tm9kZUluZGV4XSwgQXNzdW1lQ29udGVudElz
QWx3YXlzRWRpdGFibGUpOworICAgIGluc2VydE5vZGVCZWZvcmUobm9kZXNUb1JlbW92ZVtzdGFy
dE5vZGVJbmRleF0sIGhpZ2hlc3RBbmNlc3RvclRvUmVtb3ZlLCBBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSk7CisgICAgcmVtb3ZlTm9kZShoaWdoZXN0QW5jZXN0b3JUb1JlbW92ZSwgQXNz
dW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOworCisgICAgcmV0dXJuIHBhc3RMYXN0Tm9kZVRv
UmVtb3ZlIC0gc3RhcnROb2RlSW5kZXggLSAxOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5k
LmgJKHJldmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlN
YXJrdXBDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDggQEAgcHJpdmF0ZToK
ICAgICBTaW1wbGlmeU1hcmt1cENvbW1hbmQoRG9jdW1lbnQqLCBOb2RlKiBmaXJzdE5vZGUsIE5v
ZGUqIG5vZGVBZnRlckxhc3QpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKLSAgICAK
KyAgICBpbnQgcHJ1bmVTdWJzZXF1ZW50QW5jZXN0b3JzVG9SZW1vdmUoVmVjdG9yPFJlZlB0cjxO
b2RlPiA+JiBub2Rlc1RvUmVtb3ZlLCBzaXplX3Qgc3RhcnROb2RlSW5kZXgpOworCiAgICAgUmVm
UHRyPE5vZGU+IG1fZmlyc3ROb2RlOwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGVBZnRlckxhc3Q7
CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172866</attachid>
            <date>2012-11-07 13:57:59 -0800</date>
            <delta_ts>2012-11-07 16:18:57 -0800</delta_ts>
            <desc>Fixed password-echo-passnode.html</desc>
            <filename>bug-101144-20121107135610.patch</filename>
            <type>text/plain</type>
            <size>25470</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDEyLTExLTA1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNpbXBsaWZ5TWFya3VwQ29tbWFu
ZCB0YWtlcyBhIGRpc3Byb3BvcnRpb25hbGx5IGxvbmcgdGltZSB0byBydW4gd2hlbiB0aGVyZSBh
cmUgbWFueSBub2RlcyB0byByZW1vdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMTE0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoZSBidWcgd2FzIGNhdXNlZCBieSBhdHRhY2goKSBoYXBwZW5pbmcg
YmV0d2VlbiBlYWNoIG5vZGUgcmVtb3ZhbC4gU2luY2UgdGhlIGNvbW1hbmQgd2FzIHRyeWluZwor
ICAgICAgICB0byByZW1vdmUgbWlsbGlvbnMgb2Ygbm9kZSBpbiBzb21lIGNhc2VzLCBhdHRhY2go
KWluZyByZW5kZXIgb2JqZWN0cyBmb3IgZWFjaCBub2RlIGJlaW5nIHJlaW5zZXJ0ZWQKKyAgICAg
ICAgaW1wb3NlZCBhIGh1Z2UgcnVudGltZSBjb3N0LgorCisgICAgICAgIEZpeGVkIHRoZSBidWcg
YnkgdXNpbmcgbGF6eSBhdHRhY2ggd2hlbiByZW1vdmluZyBub2RlcyBhbmQgYXZvaWRpbmcgY2Fs
bHMgdG8gaXNDb250ZW50RWRpdGFibGUuCisgICAgICAgIEFsc28gcmVtb3ZlIGFsbCBhbmNlc3Rv
cnMgYXQgb25jZSB3aGVuIHRoZXkgYXJlIGRpcmVjdCBjaGlsZC9wYXJlbnQgb2YgZWFjaCBvdGhl
ciBzbyB0aGF0IHdlIGRvbid0CisgICAgICAgIHJlbW92ZSBhbiBhbmNlc3RvciBhbmQgdGhlbiBp
bnNlcnQgaXRzIGNoaWxkIGJhY2sgb25seSB0byByZW1vdmUgaXQgYWdhaW4gaW4gdGhlIG5leHQg
aXRlcmF0aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5jZSBpdCBkb2Vzbid0IGNoYW5n
ZSB0aGUgYXN5bXB0b3RpYyBwZXJmb3JtYW5jZSwgYW5kIGFkZGluZyBhIG5ldyBwZXJmb3JtYW5j
ZSB0ZXN0IGZvcgorICAgICAgICB0aGlzIHNwZWNpZmljIGNhc2UgaXMgbm90IHRoZSB3b3J0aCB0
aGUgaW5jcmVhc2UgaW4gdGhlIGJvdCBjeWNsZSB0aW1lLiBJJ2xsIG5vdGUgdGhhdCB0aGUgZW1h
aWwKKyAgICAgICAgYXR0YWNoZWQgaW4gdGhlIG9yaWdpbmFsIHJhZGFyIGJ1ZyAoPHJkYXI6Ly9w
cm9ibGVtLzEyMTc5NzEyPikgdG9vayAxMDAgc2Vjb25kcyB0byBvcGVuIG5vdyBvbmx5IHRha2Vz
CisgICAgICAgIDcgc2Vjb25kcyB0byBvcGVuIG9uIG15IE1hY1Byby4KKworICAgICAgICAqIGVk
aXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kTm9k
ZUNvbW1hbmQ6OmRvQXBwbHkpOiBUYWtlcyBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHdlIHNo
b3VsZCBhc3N1bWUgbm9kZXMgYXJlIGVkaXRhYmxlCisgICAgICAgIHdpdGhvdXQgY2FsbGluZyBp
c0NvbnRlbnRFZGl0YWJsZSBvciBub3QuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxp
bmVTdHlsZVRvUHVzaERvd24pOiBVcGRhdGUgdGhlIHN0eWxlIGFzIGxhdGVyIGNvZGUgcmVxdWly
ZXMgcmVuZGVyCisgICAgICAgIG9iamVjdC4KKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpp
bnNlcnROb2RlQmVmb3JlKTogUGFzc2VzIGEgZmxhZyB0byB0aGUgY29tbWFuZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbik6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
aDoKKyAgICAgICAgKENvbXBvc2l0ZUVkaXRDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZSk6IFRha2VzIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIg
d2Ugc2hvdWxkIGFzc3VtZSBub2RlcyBhcmUKKyAgICAgICAgZWRpdGFibGUgd2l0aG91dCBjYWxs
aW5nIGlzQ29udGVudEVkaXRhYmxlIG9yIG5vdC4KKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuaDoKKyAgICAgICAgKERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQpOgorICAg
ICAgICAqIGVkaXRpbmcvRWRpdENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZDo6ZG9BcHBseSk6IFVwZGF0ZSB0aGUgbGF5b3V0IHdoZW4gcGFzc3dvcmQgZWNo
byBpcyBlbmFibGVkIHNpbmNlCisgICAgICAgIHdlIG5lZWQgdG8gaGF2ZSByZW5kZXIgb2JqZWN0
cyBmb3IgZWNob2luZy4KKyAgICAgICAgKiBlZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpJbnNlcnRO
b2RlQmVmb3JlQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQ6OmRvQXBwbHkpOiBEaXR0bzsgYWxzbyBhbHdheXMgdXNlIGxhenkgYXR0YWNo
LgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmRvVW5hcHBseSk6
CisgICAgICAgICogZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5oOgorICAgICAgICAo
V2ViQ29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgIChJbnNl
cnROb2RlQmVmb3JlQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVOb2RlQ29tbWFuZDo6UmVtb3ZlTm9kZUNv
bW1hbmQpOiBEaXR0byBhYm91dCB0aGUgZmxhZy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZU5v
ZGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5k
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVOb2RlQ29tbWFuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFJlbW92ZU5vZGVDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVQcmVz
ZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29t
bWFuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbkNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZU5vZGVQcmVz
ZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpjcmVhdGUpOgorICAgICAgICAoUmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbkNvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcvU2ltcGxpZnlNYXJrdXBD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6ZG9B
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OnBydW5lU3Vi
c2VxdWVudEFuY2VzdG9yc1RvUmVtb3ZlKTogQWRkZWQgdG8gb3B0aW1pemUgcmVtb3ZhbHMgb2Yg
bXVsdGlwbGUKKyAgICAgICAgYW5jZXN0b3JzLgorICAgICAgICAqIGVkaXRpbmcvU2ltcGxpZnlN
YXJrdXBDb21tYW5kLmg6CisgICAgICAgIChTaW1wbGlmeU1hcmt1cENvbW1hbmQpOgorCiAyMDEy
LTExLTA1ICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBMYXlvdXRUZXN0IGZhc3QvZG9tL3NoYWRvdy9zaGFkb3dyb290LXR5cGUuaHRtbCBpcyBmYWls
aW5nIG9uIFdpbmRvd3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9kZUNv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9k
ZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzM1NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGVuZE5vZGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2
b2lkIEFwcGVuZE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIG1fcGFyZW50LT5hcHBlbmRDaGlsZChtX25v
ZGUuZ2V0KCksIGVjKTsKKyAgICBtX3BhcmVudC0+YXBwZW5kQ2hpbGQobV9ub2RlLmdldCgpLCBl
YywgdHJ1ZSAvKiBsYXp5QXR0YWNoICovKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nl
c3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBzZW5kQVhUZXh0Q2hhbmdlZElnbm9yaW5nTGlu
ZUJyZWFrcyhtX25vZGUuZ2V0KCksIEFYT2JqZWN0Q2FjaGU6OkFYVGV4dEluc2VydGVkKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZp
c2lvbiAxMzM1NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQyLDYgKzk0Miw4IEBAIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKIHsKICAgICBBU1NFUlQobm9kZSk7CiAKKyAgICBub2Rl
LT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisKICAgICBpZiAoIXN0eWxlIHx8
IHN0eWxlLT5pc0VtcHR5KCkgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFu
ZC5jcHAJKHJldmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsMTAgKzMxNywxMCBAQCBi
b29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppc1JlbW92YWJsZUJsCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQmVmb3JlKFBhc3NS
ZWZQdHI8Tm9kZT4gaW5zZXJ0Q2hpbGQsIFBhc3NSZWZQdHI8Tm9kZT4gcmVmQ2hpbGQpCit2b2lk
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4g
aW5zZXJ0Q2hpbGQsIFBhc3NSZWZQdHI8Tm9kZT4gcmVmQ2hpbGQsIFNob3VsZEFzc3VtZUNvbnRl
bnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQog
ewogICAgIEFTU0VSVCghcmVmQ2hpbGQtPmhhc1RhZ05hbWUoYm9keVRhZykpOwotICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpjcmVhdGUoaW5zZXJ0
Q2hpbGQsIHJlZkNoaWxkKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0Tm9k
ZUJlZm9yZUNvbW1hbmQ6OmNyZWF0ZShpbnNlcnRDaGlsZCwgcmVmQ2hpbGQsIHNob3VsZEFzc3Vt
ZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6Omluc2VydE5vZGVBZnRlcihQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxkLCBQYXNzUmVm
UHRyPE5vZGU+IHJlZkNoaWxkKQpAQCAtMzg3LDE2ICszODcsMTYgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6cmVtb3ZlQ2hpbGRyZQogICAgICAgICByZW1vdmVOb2RlKGNoaWxkcmVuW2ld
LnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUo
UGFzc1JlZlB0cjxOb2RlPiBub2RlKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3Zl
Tm9kZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQogewogICAgIGlmICgh
bm9kZSB8fCAhbm9kZS0+bm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2RlKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZW1vdmVOb2RlQ29tbWFuZDo6Y3Jl
YXRlKG5vZGUpKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZW1vdmVOb2RlQ29tbWFu
ZDo6Y3JlYXRlKG5vZGUsIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKSk7CiB9
CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4oUGFzc1JlZlB0cjxOb2RlPiBub2RlKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFNob3VsZEFz
c3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlKQogewotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW5Db21tYW5kOjpjcmVhdGUobm9kZSkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpjcmVhdGUobm9kZSwg
c2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpKTsKIH0KIAogdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKFBhc3NSZWZQdHI8Tm9k
ZT4gbm9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmgJKHJldmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGluc2VydE5vZGVBZnRlcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNz
UmVmUHRyPE5vZGU+IHJlZkNoaWxkKTsKICAgICB2b2lkIGluc2VydE5vZGVBdChQYXNzUmVmUHRy
PE5vZGU+LCBjb25zdCBQb3NpdGlvbiYpOwogICAgIHZvaWQgaW5zZXJ0Tm9kZUF0VGFiU3BhblBv
c2l0aW9uKFBhc3NSZWZQdHI8Tm9kZT4sIGNvbnN0IFBvc2l0aW9uJik7Ci0gICAgdm9pZCBpbnNl
cnROb2RlQmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4sIFBhc3NSZWZQdHI8Tm9kZT4gcmVmQ2hpbGQp
OworICAgIHZvaWQgaW5zZXJ0Tm9kZUJlZm9yZShQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRy
PE5vZGU+IHJlZkNoaWxkLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERv
Tm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgIHZvaWQgaW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yKGJvb2wgdXNlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQgPSBmYWxzZSwgYm9v
bCBwYXN0ZUJsb2NrcXV0b2VJbnRvVW5xdW90ZWRBcmVhID0gZmFsc2UpOwogICAgIHZvaWQgaW5z
ZXJ0TGluZUJyZWFrKCk7CiAgICAgdm9pZCBpbnNlcnRUZXh0SW50b05vZGUoUGFzc1JlZlB0cjxU
ZXh0PiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQpOwpAQCAtMTIyLDkgKzEy
Miw5IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHJlbW92ZUNTU1Byb3BlcnR5KFBhc3NSZWZQdHI8
U3R5bGVkRWxlbWVudD4sIENTU1Byb3BlcnR5SUQpOwogICAgIHZvaWQgcmVtb3ZlTm9kZUF0dHJp
YnV0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUp
OwogICAgIHZvaWQgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTm9kZShQYXNz
UmVmUHRyPE5vZGU+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5v
ZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERvTm90QXNzdW1lQ29u
dGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgIEhUTUxFbGVtZW50KiByZXBsYWNlRWxlbWVudFdp
dGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhQYXNzUmVmUHRyPEhUTUxFbGVt
ZW50Pik7Ci0gICAgdm9pZCByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKFBhc3NSZWZQdHI8
Tm9kZT4pOworICAgIHZvaWQgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihQYXNzUmVmUHRy
PE5vZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERvTm90QXNzdW1l
Q29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgIHZvaWQgcmVtb3ZlTm9kZUFuZFBydW5lQW5j
ZXN0b3JzKFBhc3NSZWZQdHI8Tm9kZT4pOwogICAgIHZvaWQgbW92ZVJlbWFpbmluZ1NpYmxpbmdz
VG9OZXdQYXJlbnQoTm9kZSosIE5vZGUqIHBhc3RMYXN0Tm9kZVRvTW92ZSwgUGFzc1JlZlB0cjxF
bGVtZW50PiBwcnBOZXdQYXJlbnQpOwogICAgIHZvaWQgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVt
b3ZhbFByZXNlcnZpbmdDaGlsZHJlbihQb3NpdGlvbiYsIE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNp
b24gMTMzNTQ5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBAIHN0YXRpYyBQb3NpdGlv
biBmaXJzdEVkaXRhYmxlUG9zaXRpb25Jbk4KICAgICByZXR1cm4gbmV4dCA/IGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShuZXh0KSA6IFBvc2l0aW9uKCk7CiB9CiAKLXZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCit2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBT
aG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNB
bHdheXNFZGl0YWJsZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKQEAgLTM0
OCw3ICszNDgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUoCiAg
ICAgICAgICAgICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7CiAgICAg
ICAgICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4
dENoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9k
ZShjaGlsZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjaGlsZC5nZXQoKSwg
c2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgICAgICAgICAgICAgIC8v
IEJhaWwgaWYgbmV4dENoaWxkIGlzIG5vIGxvbmdlciBub2RlJ3MgY2hpbGQuCiAgICAgICAgICAg
ICAgICAgaWYgKG5leHRDaGlsZCAmJiBuZXh0Q2hpbGQtPnBhcmVudE5vZGUoKSAhPSBub2RlKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zNjcsNyArMzY3LDcgQEAgdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKAogICAgICAgICB3aGlsZSAoY2hpbGQpIHsK
ICAgICAgICAgICAgIE5vZGUqIHJlbW92ZSA9IGNoaWxkOwogICAgICAgICAgICAgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHJlbW92ZU5vZGUocmVtb3ZlKTsKKyAg
ICAgICAgICAgIHJlbW92ZU5vZGUocmVtb3ZlLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNF
ZGl0YWJsZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE1ha2Ugc3VyZSBlbXB0
eSBjZWxsIGhhcyBzb21lIGhlaWdodCwgaWYgYSBwbGFjZWhvbGRlciBjYW4gYmUgaW5zZXJ0ZWQu
CkBAIC0zOTEsNyArMzkxLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVO
b2RlKAogICAgIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwobV9sZWFkaW5nV2hpdGVzcGFj
ZSwgbm9kZS5nZXQoKSk7CiAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbChtX3RyYWls
aW5nV2hpdGVzcGFjZSwgbm9kZS5nZXQoKSk7CiAgICAgCi0gICAgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnJlbW92ZU5vZGUobm9kZSk7CisgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5v
ZGUobm9kZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogfQogCiBzdGF0
aWMgdm9pZCB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFsKE5vZGUqIG5vZGUsIGludCBvZmZz
ZXQsIGludCBjb3VudCwgUG9zaXRpb24mIHBvc2l0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmgJKHJldmlzaW9uIDEzMzU0OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYWxjdWxhdGVU
eXBpbmdTdHlsZUFmdGVyRGVsZXRlKCk7CiAgICAgdm9pZCBjbGVhclRyYW5zaWVudFN0YXRlKCk7
CiAgICAgdm9pZCBtYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9v
dFRvUHJldmVudFN0eWxlTG9zcygpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVOb2RlKFBhc3NS
ZWZQdHI8Tm9kZT4pOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9k
ZT4sIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlID0gRG9Ob3RBc3N1bWVDb250
ZW50SXNBbHdheXNFZGl0YWJsZSk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHRGcm9tTm9k
ZShQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCwgdW5zaWduZWQpOwogICAgIHZvaWQgcmVtb3Zl
UmVkdW5kYW50QmxvY2tzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENv
bW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5k
LmgJKHJldmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1h
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMTEgQEAgcHJpdmF0ZToKICAgICBDb21w
b3NpdGVFZGl0Q29tbWFuZCogbV9wYXJlbnQ7CiB9OwogCitlbnVtIFNob3VsZEFzc3VtZUNvbnRl
bnRJc0Fsd2F5c0VkaXRhYmxlIHsKKyAgICBBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwK
KyAgICBEb05vdEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLAorfTsKKwogY2xhc3MgU2lt
cGxlRWRpdENvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgewogcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBkb1VuYXBwbHkoKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzMzU0OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxNCBAQCBJbnNlcnRJbnRvVGV4dE5vZGVDb21t
YW5kOjpJbnNlcnRJbnRvVGV4CiAKIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6ZG9B
cHBseSgpCiB7CisgICAgYm9vbCBwYXNzd29yZEVjaG9FbmFibGVkID0gZG9jdW1lbnQoKS0+c2V0
dGluZ3MoKSAmJiBkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYXNzd29yZEVjaG9FbmFibGVkKCk7
CisgICAgaWYgKHBhc3N3b3JkRWNob0VuYWJsZWQpCisgICAgICAgIGRvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCiAgICAgaWYgKCFtX25vZGUtPnJl
bmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZG9jdW1lbnQo
KS0+c2V0dGluZ3MoKSAmJiBkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYXNzd29yZEVjaG9FbmFi
bGVkKCkpIHsKKyAgICBpZiAocGFzc3dvcmRFY2hvRW5hYmxlZCkgewogICAgICAgICBSZW5kZXJU
ZXh0KiByZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KG1fbm9kZS0+cmVuZGVyZXIoKSk7CiAgICAg
ICAgIGlmIChyZW5kZXJUZXh0ICYmIHJlbmRlclRleHQtPmlzU2VjdXJlKCkpCiAgICAgICAgICAg
ICByZW5kZXJUZXh0LT5tb21lbnRhcmlseVJldmVhbExhc3RUeXBlZENoYXJhY3RlcihtX29mZnNl
dCArIG1fdGV4dC5sZW5ndGgoKSAtIDEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzMzU0OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1J
bnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQoUGFzc1JlZlB0
cjxOb2RlPiBpbnNlcnRDaGlsZCwgUGFzc1JlZlB0cjxOb2RlPiByZWZDaGlsZCkKK0luc2VydE5v
ZGVCZWZvcmVDb21tYW5kOjpJbnNlcnROb2RlQmVmb3JlQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+
IGluc2VydENoaWxkLCBQYXNzUmVmUHRyPE5vZGU+IHJlZkNoaWxkLAorICAgIFNob3VsZEFzc3Vt
ZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRh
YmxlKQogICAgIDogU2ltcGxlRWRpdENvbW1hbmQocmVmQ2hpbGQtPmRvY3VtZW50KCkpCiAgICAg
LCBtX2luc2VydENoaWxkKGluc2VydENoaWxkKQogICAgICwgbV9yZWZDaGlsZChyZWZDaGlsZCkK
KyAgICAsIG1fc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUoc2hvdWxkQXNzdW1l
Q29udGVudElzQWx3YXlzRWRpdGFibGUpCiB7CiAgICAgQVNTRVJUKG1faW5zZXJ0Q2hpbGQpOwog
ICAgIEFTU0VSVCghbV9pbnNlcnRDaGlsZC0+cGFyZW50Tm9kZSgpKTsKQEAgLTQ4LDExICs1MCwx
MiBAQCBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZDo6SW5zZXJ0Tm9kZUJlZm9yCiB2b2lkIEluc2Vy
dE5vZGVCZWZvcmVDb21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBDb250YWluZXJOb2RlKiBwYXJl
bnQgPSBtX3JlZkNoaWxkLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVu
dC0+aXNDb250ZW50RWRpdGFibGUoTm9kZTo6VXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFi
bGUpKQorICAgIGlmICghcGFyZW50IHx8IChtX3Nob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlID09IERvTm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgJiYgIXBhcmVudC0+
aXNDb250ZW50RWRpdGFibGUoTm9kZTo6VXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUp
KSkKICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxl
KE5vZGU6OlVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRhYmxlKSk7CiAKICAgICBFeGNlcHRp
b25Db2RlIGVjOwotICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG1faW5zZXJ0Q2hpbGQuZ2V0KCks
IG1fcmVmQ2hpbGQuZ2V0KCksIGVjKTsKKyAgICBwYXJlbnQtPmluc2VydEJlZm9yZShtX2luc2Vy
dENoaWxkLmdldCgpLCBtX3JlZkNoaWxkLmdldCgpLCBlYywgdHJ1ZSAvKiBsYXp5QXR0YWNoICov
KTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAg
ICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPm5vZGVUZXh0Q2hhbmdlTm90aWZpY2F0
aW9uKG1faW5zZXJ0Q2hpbGQuZ2V0KCksIEFYT2JqZWN0Q2FjaGU6OkFYVGV4dEluc2VydGVkLCAw
LCBtX2luc2VydENoaWxkLT5ub2RlVmFsdWUoKSk7CkBAIC02Miw3ICs2NSw3IEBAIHZvaWQgSW5z
ZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmRvVW5hcHBseSgKIHsKICAgICBpZiAoIW1faW5zZXJ0Q2hp
bGQtPmlzQ29udGVudEVkaXRhYmxlKE5vZGU6OlVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRh
YmxlKSkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIC8vIE5lZWQgdG8gbm90aWZ5
IHRoaXMgYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSB0ZXh0CiAgICAgaWYgKEFYT2JqZWN0
Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIGRvY3VtZW50KCktPmF4T2Jq
ZWN0Q2FjaGUoKS0+bm9kZVRleHRDaGFuZ2VOb3RpZmljYXRpb24obV9pbnNlcnRDaGlsZC5nZXQo
KSwgQVhPYmplY3RDYWNoZTo6QVhUZXh0RGVsZXRlZCwgMCwgbV9pbnNlcnRDaGlsZC0+bm9kZVZh
bHVlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnROb2RlQmVmb3JlQ29t
bWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQuaAkocmV2aXNpb24gMTMzNTQ5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnROb2RlQmVmb3JlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMyArMzIs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnNlcnROb2RlQmVmb3JlQ29tbWFu
ZCA6IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IGNo
aWxkVG9JbnNlcnQsIFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGRUb0luc2VydEJlZm9yZSkKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNlcnROb2RlQmVmb3JlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQ
dHI8Tm9kZT4gY2hpbGRUb0luc2VydCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZFRvSW5zZXJ0QmVm
b3JlLAorICAgICAgICBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRB
c3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQoY2hpbGRUb0luc2VydCwgY2hpbGRUb0lu
c2VydEJlZm9yZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc2VydE5vZGVCZWZv
cmVDb21tYW5kKGNoaWxkVG9JbnNlcnQsIGNoaWxkVG9JbnNlcnRCZWZvcmUsIHNob3VsZEFzc3Vt
ZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEluc2Vy
dE5vZGVCZWZvcmVDb21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGRUb0luc2VydCwgUGFzc1Jl
ZlB0cjxOb2RlPiBjaGlsZFRvSW5zZXJ0QmVmb3JlKTsKKyAgICBJbnNlcnROb2RlQmVmb3JlQ29t
bWFuZChQYXNzUmVmUHRyPE5vZGU+IGNoaWxkVG9JbnNlcnQsIFBhc3NSZWZQdHI8Tm9kZT4gY2hp
bGRUb0luc2VydEJlZm9yZSwgU2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwog
CiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQg
ZG9VbmFwcGx5KCkgT1ZFUlJJREU7CkBAIC00OCw3ICs0OSw4IEBAIHByaXZhdGU6CiAjZW5kaWYK
ICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbV9pbnNlcnRDaGlsZDsKLSAgICBSZWZQdHI8Tm9kZT4g
bV9yZWZDaGlsZDsgCisgICAgUmVmUHRyPE5vZGU+IG1fcmVmQ2hpbGQ7CisgICAgU2hvdWxkQXNz
dW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgbV9zaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNF
ZGl0YWJsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzM1NDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsOSArMzEsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZW1vdmVO
b2RlQ29tbWFuZDo6UmVtb3ZlTm9kZUNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQorUmVt
b3ZlTm9kZUNvbW1hbmQ6OlJlbW92ZU5vZGVDb21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwg
U2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgc2hvdWxkQXNzdW1lQ29udGVudElz
QWx3YXlzRWRpdGFibGUpCiAgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgp
KQogICAgICwgbV9ub2RlKG5vZGUpCisgICAgLCBtX3Nob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5
c0VkaXRhYmxlKHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQogewogICAgIEFT
U0VSVChtX25vZGUpOwogICAgIEFTU0VSVChtX25vZGUtPnBhcmVudE5vZGUoKSk7CkBAIC00Miw4
ICs0MywxMCBAQCBSZW1vdmVOb2RlQ29tbWFuZDo6UmVtb3ZlTm9kZUNvbW1hbmQoUGFzCiB2b2lk
IFJlbW92ZU5vZGVDb21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBDb250YWluZXJOb2RlKiBwYXJl
bnQgPSBtX25vZGUtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5p
c0NvbnRlbnRFZGl0YWJsZShOb2RlOjpVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0YWJsZSkp
CisgICAgaWYgKCFwYXJlbnQgfHwgKG1fc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFi
bGUgPT0gRG9Ob3RBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZQorICAgICAgICAmJiAhcGFy
ZW50LT5pc0NvbnRlbnRFZGl0YWJsZShOb2RlOjpVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0
YWJsZSkgJiYgcGFyZW50LT5hdHRhY2hlZCgpKSkKICAgICAgICAgcmV0dXJuOworICAgIEFTU0VS
VChwYXJlbnQtPmlzQ29udGVudEVkaXRhYmxlKE5vZGU6OlVzZXJTZWxlY3RBbGxJc0Fsd2F5c05v
bkVkaXRhYmxlKSB8fCAhcGFyZW50LT5hdHRhY2hlZCgpKTsKIAogICAgIG1fcGFyZW50ID0gcGFy
ZW50OwogICAgIG1fcmVmQ2hpbGQgPSBtX25vZGUtPm5leHRTaWJsaW5nKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5oCShyZXZpc2lvbiAxMzM1NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDEzICszMiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJl
bW92ZU5vZGVDb21tYW5kIDogcHVibGljIFNpbXBsZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVOb2RlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8
Tm9kZT4gbm9kZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVOb2RlQ29tbWFuZD4gY3Jl
YXRlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgU2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRp
dGFibGUgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZU5vZGVDb21tYW5kKG5vZGUpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVOb2RlQ29tbWFuZChub2RlLCBzaG91bGRBc3N1bWVD
b250ZW50SXNBbHdheXNFZGl0YWJsZSkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBSZW1vdmVOb2RlQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICBleHBsaWNpdCBSZW1v
dmVOb2RlQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKSBPVkVSUklERTsKQEAgLTQ5LDcgKzQ5LDggQEAgcHJp
dmF0ZToKIAogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPENvbnRhaW5lck5v
ZGU+IG1fcGFyZW50OwotICAgIFJlZlB0cjxOb2RlPiBtX3JlZkNoaWxkOyAgICAKKyAgICBSZWZQ
dHI8Tm9kZT4gbV9yZWZDaGlsZDsKKyAgICBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0
YWJsZSBtX3Nob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxMCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21t
YW5kOjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+
IG5vZGUpCitSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZDo6UmVtb3ZlTm9kZVBy
ZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1
bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0
YWJsZSkKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKG5vZGUtPmRvY3VtZW50KCkpCiAgICAg
LCBtX25vZGUobm9kZSkKKyAgICAsIG1fc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFi
bGUoc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpCiB7CiAgICAgQVNTRVJUKG1f
bm9kZSk7CiB9CkBAIC00NywxMCArNDgsMTAgQEAgdm9pZCBSZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuQ29tbWFuZAogICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBj
aGlsZCA9IGNoaWxkcmVuW2ldLnJlbGVhc2UoKTsKLSAgICAgICAgcmVtb3ZlTm9kZShjaGlsZCk7
Ci0gICAgICAgIGluc2VydE5vZGVCZWZvcmUoY2hpbGQucmVsZWFzZSgpLCBtX25vZGUpOworICAg
ICAgICByZW1vdmVOb2RlKGNoaWxkLCBtX3Nob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRh
YmxlKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShjaGlsZC5yZWxlYXNlKCksIG1fbm9kZSwg
bV9zaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CiAgICAgfQotICAgIHJlbW92
ZU5vZGUobV9ub2RlKTsKKyAgICByZW1vdmVOb2RlKG1fbm9kZSwgbV9zaG91bGRBc3N1bWVDb250
ZW50SXNBbHdheXNFZGl0YWJsZSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5k
LmgJKHJldmlzaW9uIDEzMzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMy
LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbkNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5k
PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJl
bW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kPiBjcmVhdGUoUGFzc1JlZlB0cjxOb2Rl
PiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVD
b250ZW50SXNBbHdheXNFZGl0YWJsZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQobm9kZSkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKG5v
ZGUsIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKSk7CiAgICAgfQogCiBwcml2
YXRlOgotICAgIGV4cGxpY2l0IFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKFBh
c3NSZWZQdHI8Tm9kZT4pOworICAgIGV4cGxpY2l0IFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW5Db21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4sIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAKICAgICBSZWZQdHI8Tm9k
ZT4gbV9ub2RlOworICAgIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIG1fc2hv
dWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1
cENvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzM1NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpTaW1wbGlmeU1hcmt1cENvbQogdm9pZCBTaW1wbGlm
eU1hcmt1cENvbW1hbmQ6OmRvQXBwbHkoKQogewogICAgIE5vZGUqIHJvb3ROb2RlID0gbV9maXJz
dE5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzVG9SZW1vdmU7Cisg
ICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG5vZGVzVG9SZW1vdmU7CiAgICAgCiAgICAgLy8gV2Fs
ayB0aHJvdWdoIHRoZSBpbnNlcnRlZCBub2RlcywgdG8gc2VlIGlmIHRoZXJlIGFyZSBlbGVtZW50
cyB0aGF0IGNvdWxkIGJlIHJlbW92ZWQKICAgICAvLyB3aXRob3V0IGFmZmVjdGluZyB0aGUgc3R5
bGUuIFRoZSBnb2FsIGlzIHRvIHByb2R1Y2UgbGVhbmVyIG1hcmt1cCBldmVuIHdoZW4gc3RhcnRp
bmcKQEAgLTgzLDkgKzgzLDQyIEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5
KCkKICAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLmFwcGVuZChub2RlKTsKICAgICAgICAg
fQogICAgIH0KKwogICAgIC8vIHdlIHBlcmZvcm0gYWxsIHRoZSBET00gbXV0YXRpb25zIGF0IG9u
Y2UuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2Rlc1RvUmVtb3ZlLnNpemUoKTsgKytp
KQotICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKG5vZGVzVG9SZW1vdmVbaV0p
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZXNUb1JlbW92ZS5zaXplKCk7ICsraSkg
eworICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRvIGJldHRlciBieSBkaXJlY3RseSBtb3Zpbmcg
Y2hpbGRyZW4gZnJvbSBub2Rlc1RvUmVtb3ZlW2ldLgorICAgICAgICBpbnQgbnVtUHJ1bmVkQW5j
ZXN0b3JzID0gcHJ1bmVTdWJzZXF1ZW50QW5jZXN0b3JzVG9SZW1vdmUobm9kZXNUb1JlbW92ZSwg
aSk7CisgICAgICAgIGlmIChudW1QcnVuZWRBbmNlc3RvcnMgPCAwKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4obm9kZXNUb1JlbW92
ZVtpXSwgQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOworICAgICAgICBpICs9IG51bVBy
dW5lZEFuY2VzdG9yczsKKyAgICB9Cit9CisKK2ludCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OnBy
dW5lU3Vic2VxdWVudEFuY2VzdG9yc1RvUmVtb3ZlKFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgbm9k
ZXNUb1JlbW92ZSwgc2l6ZV90IHN0YXJ0Tm9kZUluZGV4KQoreworICAgIHNpemVfdCBwYXN0TGFz
dE5vZGVUb1JlbW92ZSA9IHN0YXJ0Tm9kZUluZGV4ICsgMTsKKyAgICBmb3IgKDsgcGFzdExhc3RO
b2RlVG9SZW1vdmUgPCBub2Rlc1RvUmVtb3ZlLnNpemUoKTsgKytwYXN0TGFzdE5vZGVUb1JlbW92
ZSkgeworICAgICAgICBpZiAobm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZSAtIDFd
LT5wYXJlbnROb2RlKCkgIT0gbm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZV0pCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgQVNTRVJUKG5vZGVzVG9SZW1vdmVbcGFzdExhc3RO
b2RlVG9SZW1vdmVdLT5maXJzdENoaWxkKCkgPT0gbm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVU
b1JlbW92ZV0tPmxhc3RDaGlsZCgpKTsKKyAgICB9CisKKyAgICBpZiAocGFzdExhc3ROb2RlVG9S
ZW1vdmUgPT0gc3RhcnROb2RlSW5kZXggKyAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5v
ZGUqIGhpZ2hlc3RBbmNlc3RvclRvUmVtb3ZlID0gbm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVU
b1JlbW92ZSAtIDFdLmdldCgpOworCisgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlckhpZ2hlc3RB
bmNlc3RvclRvUmVtb3ZlID0gaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUtPm5leHRTaWJsaW5nKCk7
CisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IGhpZ2hlc3RBbmNlc3RvclRvUmVt
b3ZlLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKCFwYXJlbnQpIC8vIFBhcmVudCBoYXMgYWxyZWFk
eSBiZWVuIHJlbW92ZWQuCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJlbW92ZU5vZGUobm9k
ZXNUb1JlbW92ZVtzdGFydE5vZGVJbmRleF0sIEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxl
KTsKKyAgICBpbnNlcnROb2RlQmVmb3JlKG5vZGVzVG9SZW1vdmVbc3RhcnROb2RlSW5kZXhdLCBo
aWdoZXN0QW5jZXN0b3JUb1JlbW92ZSwgQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwor
ICAgIHJlbW92ZU5vZGUoaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUsIEFzc3VtZUNvbnRlbnRJc0Fs
d2F5c0VkaXRhYmxlKTsKKworICAgIHJldHVybiBwYXN0TGFzdE5vZGVUb1JlbW92ZSAtIHN0YXJ0
Tm9kZUluZGV4IC0gMTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5oCShyZXZpc2lvbiAx
MzM1NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4IEBAIHByaXZhdGU6CiAgICAgU2ltcGxpZnlN
YXJrdXBDb21tYW5kKERvY3VtZW50KiwgTm9kZSogZmlyc3ROb2RlLCBOb2RlKiBub2RlQWZ0ZXJM
YXN0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7Ci0gICAgCisgICAgaW50IHBydW5l
U3Vic2VxdWVudEFuY2VzdG9yc1RvUmVtb3ZlKFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgbm9kZXNU
b1JlbW92ZSwgc2l6ZV90IHN0YXJ0Tm9kZUluZGV4KTsKKwogICAgIFJlZlB0cjxOb2RlPiBtX2Zp
cnN0Tm9kZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlQWZ0ZXJMYXN0OwogfTsK
</data>
<flag name="review"
          id="187341"
          type_id="1"
          status="+"
          setter="enrica"
    />
          </attachment>
      

    </bug>

</bugzilla>