<?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>74514</bug_id>
          
          <creation_ts>2011-12-14 10:20:30 -0800</creation_ts>
          <short_desc>Need a way to produce leaner markup when pasting a fragment containing verbose markup</short_desc>
          <delta_ts>2011-12-14 16:34:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>521029</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-14 10:20:30 -0800</bug_when>
    <thetext>When performing a copy/paste operation, the fragment copied is taken as is and only minimal changes are performed during pasting to meet the stylistic requirements.
If the original fragment contains verbose markup, the result of the paste operation will contain the same verbose markup.

&lt;rdar://problem/10208653&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521070</commentid>
    <comment_count>1</comment_count>
      <attachid>119248</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-14 10:53:26 -0800</bug_when>
    <thetext>Created attachment 119248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521088</commentid>
    <comment_count>2</comment_count>
      <attachid>119248</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 11:02:33 -0800</bug_when>
    <thetext>Comment on attachment 119248
Patch

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

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:376
&gt; +    , m_sanitizeFragment(options &amp; SanitizeFragment)

Why can&apos;t we use this option always?

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:572
&gt; +            if (currentNode &amp;&amp; currentNode-&gt;parentNode() != rootNode &amp;&amp; currentNode-&gt;firstChild() == currentNode-&gt;lastChild() &amp;&amp; currentNode-&gt;hasTagName(divTag)) {
&gt; +                const NamedNodeMap* attributeMap = currentNode-&gt;attributes();
&gt; +                if (!attributeMap || attributeMap-&gt;isEmpty())
&gt; +                    nodesToRemove.append(currentNode);
&gt; +            }
&gt; +
&gt; +            currentNode = currentNode-&gt;parentNode();
&gt; +            if (!currentNode-&gt;renderer() || !currentNode-&gt;renderer()-&gt;isRenderInline() || toRenderInline(currentNode-&gt;renderer())-&gt;alwaysCreateLineBoxes())
&gt; +                continue;

I think you want to reuse the logic in isStyleSpanOrSpanWithOnlyStyleAttribute.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:580
&gt; +            if (currentNode-&gt;renderStyle()-&gt;diff(startingStyle, context) == StyleDifferenceEqual)

You should be able to reuse the logic in EditingStyle::removeStyleAddedByNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521162</commentid>
    <comment_count>3</comment_count>
      <attachid>119248</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 12:05:47 -0800</bug_when>
    <thetext>Comment on attachment 119248
Patch

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

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:574
&gt; +            if (currentNode &amp;&amp; currentNode-&gt;firstChild() != currentNode-&gt;lastChild()) {

This condition is going to be true when there are elements with display: none or collapsed whitespace.
By the way, currentNode here can&apos;t be null, right? If that were the case, the previous statement would have crashed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521171</commentid>
    <comment_count>4</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-14 12:18:27 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; 
&gt; Why can&apos;t we use this option always?
&gt; 
ReplaceSelectionCommand is used extensively in the editing code and we don&apos;t want to always modify
the fragment, since we don&apos;t know at this level where it originated.
For example it could be coming from insertHTML and we don&apos;t want to change that.

&gt; I think you want to reuse the logic in isStyleSpanOrSpanWithOnlyStyleAttribute.

It does not implement the same logic. Here I wan&apos;t to consider only inline elements that don&apos;t always require a line box.
I was to be able to handle correctly the case of the markup below:

&lt;i style=&quot;border: solid red&quot;&gt;&lt;i style=&quot;border: solid red&quot;&gt;hello&lt;/i&gt;&lt;/i&gt;

The renderstyle is the same, but we cannot remove one of the elements without affecting the visual appearance.

&gt; &gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:580
&gt; &gt; +            if (currentNode-&gt;renderStyle()-&gt;diff(startingStyle, context) == StyleDifferenceEqual)
&gt; 
&gt; You should be able to reuse the logic in EditingStyle::removeStyleAddedByNode.
Comparing render styles is more efficient than what removeStyleAddedByNode does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521175</commentid>
    <comment_count>5</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-14 12:23:03 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 119248 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119248&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:574
&gt; &gt; +            if (currentNode &amp;&amp; currentNode-&gt;firstChild() != currentNode-&gt;lastChild()) {
&gt; 
&gt; This condition is going to be true when there are elements with display: none or collapsed whitespace.
&gt; By the way, currentNode here can&apos;t be null, right? If that were the case, the previous statement would have crashed.
It should not be null. Yes, in that case we will not trim the markup but it is a trade-off I did for performance to avoid using VisiblePosition or looking at renderers and do a more complex analysis of the markup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521297</commentid>
    <comment_count>6</comment_count>
      <attachid>119299</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-14 14:33:41 -0800</bug_when>
    <thetext>Created attachment 119299
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521317</commentid>
    <comment_count>7</comment_count>
      <attachid>119299</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 14:48:31 -0800</bug_when>
    <thetext>Comment on attachment 119299
Patch 2

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

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:555
&gt; +        if (node-&gt;firstChild())
&gt; +            continue;
&gt; +        if (node-&gt;isTextNode() &amp;&amp; node-&gt;nextSibling())
&gt; +            continue;

We should combine these ifs.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:563
&gt; +        while (currentNode != rootNode) {

Can we just check currentNode-&gt;parentNode() != rootNode here instead?
(of course, add if (currentNode == rootNode) continue; outside of the loop)

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:578
&gt; +                topNodeWithStartingStyle = currentNode;

Why can&apos;t we just add currentNode to nodesToRemove here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521337</commentid>
    <comment_count>8</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-14 15:13:06 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 119299 [details])
&gt; We should combine these ifs.
&gt; 
Sure.
&gt; &gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:563
&gt; &gt; +        while (currentNode != rootNode) {
&gt; 
&gt; Can we just check currentNode-&gt;parentNode() != rootNode here instead?
&gt; (of course, add if (currentNode == rootNode) continue; outside of the loop)
&gt; 
No, because I want to exclude the top element if it is a block, I still want to apply the logic below if it is an inline.

&gt; &gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:578
&gt; &gt; +                topNodeWithStartingStyle = currentNode;
&gt; 
&gt; Why can&apos;t we just add currentNode to nodesToRemove here?
Because if I encounter an element with more than one child up the chain and I don&apos;t want to perform any cleanup and leave everything as is. Otherwise I would have to go back and remove all the node I&apos;ve previously added to the nodesToRemove list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521340</commentid>
    <comment_count>9</comment_count>
      <attachid>119299</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-14 15:16:03 -0800</bug_when>
    <thetext>Comment on attachment 119299
Patch 2

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

New failing tests:
editing/pasteboard/paste-text-013.html
editing/pasteboard/paste-text-014.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521352</commentid>
    <comment_count>10</comment_count>
      <attachid>119299</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 15:22:36 -0800</bug_when>
    <thetext>Comment on attachment 119299
Patch 2

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

&gt;&gt;&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:563
&gt;&gt;&gt; +        while (currentNode != rootNode) {
&gt;&gt; 
&gt;&gt; Can we just check currentNode-&gt;parentNode() != rootNode here instead?
&gt;&gt; (of course, add if (currentNode == rootNode) continue; outside of the loop)
&gt; 
&gt; No, because I want to exclude the top element if it is a block, I still want to apply the logic below if it is an inline.

Ah, I see. Got it.

&gt;&gt;&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:578
&gt;&gt;&gt; +                topNodeWithStartingStyle = currentNode;
&gt;&gt; 
&gt;&gt; Why can&apos;t we just add currentNode to nodesToRemove here?
&gt; 
&gt; Because if I encounter an element with more than one child up the chain and I don&apos;t want to perform any cleanup and leave everything as is. Otherwise I would have to go back and remove all the node I&apos;ve previously added to the nodesToRemove list.

Isn&apos;t still valuable to remove all empty descendants in that case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521354</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 15:23:10 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 119299 [details])
&gt; Attachment 119299 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/10875454
&gt; 
&gt; New failing tests:
&gt; editing/pasteboard/paste-text-013.html
&gt; editing/pasteboard/paste-text-014.html

These failures may reproduce on Windows (probably fails on non-Mac).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521359</commentid>
    <comment_count>12</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-14 15:28:59 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 119299 [details] [details])
&gt; &gt; Attachment 119299 [details] [details] did not pass chromium-ews (chromium-xvfb):
&gt; &gt; Output: http://queues.webkit.org/results/10875454
&gt; &gt; 
&gt; &gt; New failing tests:
&gt; &gt; editing/pasteboard/paste-text-013.html
&gt; &gt; editing/pasteboard/paste-text-014.html
&gt; 
&gt; These failures may reproduce on Windows (probably fails on non-Mac).

I&apos;ll put in the new test results for these platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521367</commentid>
    <comment_count>13</comment_count>
      <attachid>119299</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 15:35:10 -0800</bug_when>
    <thetext>Comment on attachment 119299
Patch 2

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

Okay, I think we can land as it, assuming you fix the address the index vs. iterator issue below. Thanks for the clarifications! Please ping me if you needed any help in rebaselining chromium tests.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:587
&gt; +    for (Vector&lt;Node*&gt;::const_iterator it = nodesToRemove.begin(); it != nodesToRemove.end(); ++it)

Please use integral index instead of iterator as discussed on https://lists.webkit.org/pipermail/webkit-dev/2011-October/018274.html.

&gt; LayoutTests/editing/pasteboard/paste-and-sanitize.html:39
&gt; +testPaste(&quot;div&quot;, &quot;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;span style=\&quot;font-weight: normal\&quot;&gt;&lt;b&gt;&lt;i&gt;Hello&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&quot;, &quot;&lt;b&gt;&lt;i&gt;Hello&lt;/i&gt;&lt;/b&gt;&quot;);

You may want to use single quotation to avoid having to cast &quot;.

&gt; LayoutTests/editing/pasteboard/paste-and-sanitize.html:47
&gt; +          &quot;&lt;i style=\&quot;margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; \&quot;&gt;&lt;b&gt;&lt;i style=\&quot;margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; \&quot;&gt;hello&lt;/i&gt;&lt;/b&gt;&lt;/i&gt;&quot;);

We really need to make cssText() use shorthand notations :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521397</commentid>
    <comment_count>14</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-14 15:58:56 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:587
&gt; &gt; +    for (Vector&lt;Node*&gt;::const_iterator it = nodesToRemove.begin(); it != nodesToRemove.end(); ++it)
&gt; 
will do.

&gt; Please use integral index instead of iterator as discussed on https://lists.webkit.org/pipermail/webkit-dev/2011-October/018274.html.
&gt; 
&gt; &gt; LayoutTests/editing/pasteboard/paste-and-sanitize.html:39
&gt; &gt; +testPaste(&quot;div&quot;, &quot;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;span style=\&quot;font-weight: normal\&quot;&gt;&lt;b&gt;&lt;i&gt;Hello&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&quot;, &quot;&lt;b&gt;&lt;i&gt;Hello&lt;/i&gt;&lt;/b&gt;&quot;);
&gt; 
&gt; You may want to use single quotation to avoid having to cast &quot;.
&gt;
ok. 
&gt; &gt; LayoutTests/editing/pasteboard/paste-and-sanitize.html:47
&gt; &gt; +          &quot;&lt;i style=\&quot;margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; \&quot;&gt;&lt;b&gt;&lt;i style=\&quot;margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; \&quot;&gt;hello&lt;/i&gt;&lt;/b&gt;&lt;/i&gt;&quot;);
&gt; 
&gt; We really need to make cssText() use shorthand notations :(
Yes, I&apos;ve already looked at it and it seems pretty straightforward. I added this test line also for the purpose of showing the problem and having to fix the test result when we change cssText.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521424</commentid>
    <comment_count>15</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-14 16:14:19 -0800</bug_when>
    <thetext>&gt; &gt; You may want to use single quotation to avoid having to cast &quot;.
&gt; &gt;
&gt; ok. 
I cannot, since it breaks this line

shouldBe(&quot;confirmedMarkup&quot;, &quot;&apos;&quot; + expected + &quot;&apos;&quot;)

that uses single quote.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521445</commentid>
    <comment_count>16</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-14 16:34:05 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/102846</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119248</attachid>
            <date>2011-12-14 10:53:26 -0800</date>
            <delta_ts>2011-12-14 12:05:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>trimonpaste.txt</filename>
            <type>text/plain</type>
            <size>16907</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjc5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDExLTEyLTE0ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgTmVlZCBhIHdheSB0byBwcm9k
dWNlIGxlYW5lciBtYXJrdXAgd2hlbiBwYXN0aW5nIGEgZnJhZ21lbnQgY29udGFpbmluZyB2ZXJi
b3NlIG1hcmt1cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzQ1MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMjA4NjUzPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYW5vdGhl
ciBzdGVwIGluIHRoZSBkaXJlY3Rpb24gb2YgcmVkdWNpbmcgdGhlIHZlcmJvc2l0eSBvZiB0aGUg
bWFya3VwCisgICAgICAgIHByb2R1Y2VkIHdpdGggZWRpdGluZyBvcGVyYXRpb25zLgorICAgICAg
ICBBZnRlciB0aGUgY29waWVkIGZyYWdtZW50IGlzIGluc2VydGVkIGluIHRoZSBkb2N1bWVudCwg
aXQgaXMgYW5hbHl6ZWQgdG8gcmVtb3ZlIGFsbAorICAgICAgICB0aGUgZWxlbWVudHMgdGhhdCBk
b24ndCBjb250cmlidXRlIHRvIHRoZSBzdHlsZS4gVGhlIGRlY2lzaW9uIGlzIG1hZGUgY29tcGFy
aW5nIHRoZQorICAgICAgICByZW5kZXIgc3R5bGVzLiBBcyBwYXJ0IG9mIHRoZSBjbGVhbnVwLCB1
bnN0eWxlZCBkaXZzIHdpdGggc2luZ2xlIGNoaWxkIGVsZW1lbnQgYXJlCisgICAgICAgIHJlbW92
ZWQuCisgICAgICAgIAorICAgICAgICBUZXN0OiBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtYW5k
LXNhbml0aXplLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6IEFkZGVkIFNh
bml0aXplRnJhZ21lbnQgb3B0aW9uLgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKTogQWRkZWQgaW5pdGlhbGl6YXRpb24KKyAgICAgICAg
b2YgbV9zYW5pdGl6ZUZyYWdtZW50IG1lbWJlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRNYXJrdXApOiBOZXcgbWV0aG9kIGltcGxl
bWVudGluZworICAgICAgICB0aGUgY2xlYW51cCBsb2dpYy4KKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KTogQWRkZWQgY2FsbCB0byByZW1vdmVSZWR1
bmRhbnRNYXJrdXAKKyAgICAgICAgYWZ0ZXIgdGhlIGZyYWdtZW50IGlzIGluc2VydGVkIGluIHRo
ZSBkb2N1bWVudC4KKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmg6
IEFkZGVkIG5ldyB2YWx1ZSB0byB0aGUgZW51bSBDb21tYW5kT3B0aW9uLAorICAgICAgICBhIG5l
dyBtZW1iZXIgdmFyaWFibGUgYW5kIHRoZSBuZXcgbWV0aG9kIGRlY2xhcmF0aW9uLgorCiAyMDEx
LTEyLTE0ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTAyNjg4LgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAkocmV2aXNpb24gMTAyNzkzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxh
Y2VTZWxlY3Rpb25XaXRoRnJhZ21lbgogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNO
b25lKCkgfHwgIWZyYWdtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbnMgb3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpQcmV2ZW50TmVzdGluZzsKKyAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFu
ZE9wdGlvbnMgb3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGlu
ZyB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTYW5pdGl6ZUZyYWdtZW50OwogICAgIGlmIChz
ZWxlY3RSZXBsYWNlbWVudCkKICAgICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQ7CiAgICAgaWYgKHNtYXJ0UmVwbGFjZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CShyZXZpc2lvbiAxMDI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1
ZGUgIkhUTUxJbnRlcmNoYW5nZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
Ik5vZGVMaXN0LmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlNtYXJ0UmVwbGFj
ZS5oIgpAQCAtMzcyLDYgKzM3Myw3IEBAIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpSZXBsYWNl
U2VsZWN0aW8KICAgICAsIG1fcHJldmVudE5lc3Rpbmcob3B0aW9ucyAmIFByZXZlbnROZXN0aW5n
KQogICAgICwgbV9tb3ZpbmdQYXJhZ3JhcGgob3B0aW9ucyAmIE1vdmluZ1BhcmFncmFwaCkKICAg
ICAsIG1fZWRpdEFjdGlvbihlZGl0QWN0aW9uKQorICAgICwgbV9zYW5pdGl6ZUZyYWdtZW50KG9w
dGlvbnMgJiBTYW5pdGl6ZUZyYWdtZW50KQogICAgICwgbV9zaG91bGRNZXJnZUVuZChmYWxzZSkK
IHsKIH0KQEAgLTUzNiw2ICs1MzgsNTkgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
cmVtb3ZlUmVkdQogICAgIH0KIH0KIAordm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVt
b3ZlUmVkdW5kYW50TWFya3VwKEluc2VydGVkTm9kZXMmIGluc2VydGVkTm9kZXMpCit7CisgICAg
Tm9kZSogcGFzdEVuZE5vZGUgPSBpbnNlcnRlZE5vZGVzLnBhc3RMYXN0TGVhZigpOworICAgIE5v
ZGUqIHJvb3ROb2RlID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpLT5wYXJlbnRO
b2RlKCk7CisgICAgVmVjdG9yPE5vZGUqPiBub2Rlc1RvUmVtb3ZlOworICAgIAorICAgIC8vIFdh
bGsgdGhyb3VnaCB0aGUgaW5zZXJ0ZWQgbm9kZXMsIHRvIHNlZSBpZiB0aGVyZSBhcmUgZWxlbWVu
dHMgdGhhdCBjb3VsZCBiZSByZW1vdmVkCisgICAgLy8gd2l0aG91dCBhZmZlY3RpbmcgdGhlIHN0
eWxlLiBUaGUgZ29hbCBpcyB0byBwcm9kdWNlIGxlYW5lciBtYXJrdXAgZXZlbiB3aGVuIHN0YXJ0
aW5nCisgICAgLy8gZnJvbSBhIHZlcmJvc2UgZnJhZ21lbnQuCisgICAgLy8gV2UgbG9vayBhdCBp
bmxpbmUgZWxlbWVudHMgYXMgd2VsbCBhcyBub24gdG9wIGxldmVsIGRpdnMgdGhhdCBkb24ndCBo
YXZlIGF0dHJpYnV0ZXMuIAorICAgIGZvciAoTm9kZSogbm9kZSA9IGluc2VydGVkTm9kZXMuZmly
c3ROb2RlSW5zZXJ0ZWQoKTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0gbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGlmIChub2RlLT5maXJzdENoaWxkKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSAm
JiBub2RlLT5uZXh0U2libGluZygpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAor
ICAgICAgICBOb2RlKiBzdGFydGluZ05vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAg
IFJlbmRlclN0eWxlKiBzdGFydGluZ1N0eWxlID0gc3RhcnRpbmdOb2RlLT5yZW5kZXJTdHlsZSgp
OworICAgICAgICBpZiAoIXN0YXJ0aW5nU3R5bGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBzdGFydGluZ05vZGU7CisgICAgICAgIE5vZGUqIHRv
cE5vZGVXaXRoU3RhcnRpbmdTdHlsZSA9IDA7CisgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSAh
PSByb290Tm9kZSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2Rl
LT5wYXJlbnROb2RlKCkgIT0gcm9vdE5vZGUgJiYgY3VycmVudE5vZGUtPmZpcnN0Q2hpbGQoKSA9
PSBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCkgJiYgY3VycmVudE5vZGUtPmhhc1RhZ05hbWUoZGl2
VGFnKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFw
ID0gY3VycmVudE5vZGUtPmF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWF0dHJp
YnV0ZU1hcCB8fCBhdHRyaWJ1dGVNYXAtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAg
bm9kZXNUb1JlbW92ZS5hcHBlbmQoY3VycmVudE5vZGUpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAg
ICAgICBpZiAoIWN1cnJlbnROb2RlLT5yZW5kZXJlcigpIHx8ICFjdXJyZW50Tm9kZS0+cmVuZGVy
ZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSB8fCB0b1JlbmRlcklubGluZShjdXJyZW50Tm9kZS0+cmVu
ZGVyZXIoKSktPmFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUtPmZpcnN0
Q2hpbGQoKSAhPSBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICB0
b3BOb2RlV2l0aFN0YXJ0aW5nU3R5bGUgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBjb250ZXh0Owor
ICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yZW5kZXJTdHlsZSgpLT5kaWZmKHN0YXJ0aW5n
U3R5bGUsIGNvbnRleHQpID09IFN0eWxlRGlmZmVyZW5jZUVxdWFsKQorICAgICAgICAgICAgICAg
IHRvcE5vZGVXaXRoU3RhcnRpbmdTdHlsZSA9IGN1cnJlbnROb2RlOworICAgICAgICAgICAgCisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRvcE5vZGVXaXRoU3RhcnRpbmdTdHlsZSkgeworICAgICAg
ICAgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnRpbmdOb2RlOyBub2RlICE9IHRvcE5vZGVXaXRo
U3RhcnRpbmdTdHlsZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgICAg
ICBub2Rlc1RvUmVtb3ZlLmFwcGVuZChub2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyB3
ZSBwZXJmb3JtIGFsbCB0aGUgRE9NIG11dGF0aW9ucyBhdCBvbmNlLgorICAgIGZvciAoVmVjdG9y
PE5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub2Rlc1RvUmVtb3ZlLmJlZ2luKCk7IGl0ICE9
IG5vZGVzVG9SZW1vdmUuZW5kKCk7ICsraXQpCisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW4oKml0KTsKK30KKwogc3RhdGljIGlubGluZSBib29sIG5vZGVIYXNWaXNpYmxlUmVu
ZGVyVGV4dChUZXh0KiB0ZXh0KQogewogICAgIHJldHVybiB0ZXh0LT5yZW5kZXJlcigpICYmIHRv
UmVuZGVyVGV4dCh0ZXh0LT5yZW5kZXJlcigpKS0+cmVuZGVyZWRUZXh0TGVuZ3RoKCkgPiAwOwpA
QCAtMTAwMSw2ICsxMDU2LDkgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBs
eSgpCiAKICAgICByZW1vdmVSZWR1bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKGlu
c2VydGVkTm9kZXMpOwogCisgICAgaWYgKG1fc2FuaXRpemVGcmFnbWVudCkKKyAgICAgICAgcmVt
b3ZlUmVkdW5kYW50TWFya3VwKGluc2VydGVkTm9kZXMpOworCiAgICAgLy8gU2V0dXAgbV9zdGFy
dE9mSW5zZXJ0ZWRDb250ZW50IGFuZCBtX2VuZE9mSW5zZXJ0ZWRDb250ZW50LiBUaGlzIHNob3Vs
ZCBiZSB0aGUgbGFzdCB0d28gbGluZXMgb2YgY29kZSB0aGF0IGFjY2VzcyBpbnNlcnRlZE5vZGVz
LgogICAgIG1fc3RhcnRPZkluc2VydGVkQ29udGVudCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZShpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUluc2VydGVkKCkpOwogICAgIG1fZW5kT2ZJbnNl
cnRlZENvbnRlbnQgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGluc2VydGVkTm9kZXMubGFz
dExlYWZJbnNlcnRlZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHJldmlzaW9uIDEwMjc5MykKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsOCBAQCBwdWJsaWM6CiAgICAgICAgIFNtYXJ0UmVwbGFjZSA9IDEgPDwgMSwKICAg
ICAgICAgTWF0Y2hTdHlsZSA9IDEgPDwgMiwKICAgICAgICAgUHJldmVudE5lc3RpbmcgPSAxIDw8
IDMsCi0gICAgICAgIE1vdmluZ1BhcmFncmFwaCA9IDEgPDwgNAorICAgICAgICBNb3ZpbmdQYXJh
Z3JhcGggPSAxIDw8IDQsCisgICAgICAgIFNhbml0aXplRnJhZ21lbnQgPSAxIDw8IDUKICAgICB9
OwogCiAgICAgdHlwZWRlZiB1bnNpZ25lZCBDb21tYW5kT3B0aW9uczsKQEAgLTg4LDYgKzg5LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVuZHMoSW5z
ZXJ0ZWROb2RlcyYpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2Vl
cFN0eWxlU3BhbklubGluZShJbnNlcnRlZE5vZGVzJik7CisgICAgdm9pZCByZW1vdmVSZWR1bmRh
bnRNYXJrdXAoSW5zZXJ0ZWROb2RlcyYpOwogICAgIHZvaWQgaGFuZGxlU3R5bGVTcGFucyhJbnNl
cnRlZE5vZGVzJik7CiAgICAgdm9pZCBoYW5kbGVQYXN0ZUFzUXVvdGF0aW9uTm9kZSgpOwogICAg
IApAQCAtMTEwLDYgKzExMiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3ByZXZlbnROZXN0aW5n
OwogICAgIGJvb2wgbV9tb3ZpbmdQYXJhZ3JhcGg7CiAgICAgRWRpdEFjdGlvbiBtX2VkaXRBY3Rp
b247CisgICAgYm9vbCBtX3Nhbml0aXplRnJhZ21lbnQ7CiAgICAgYm9vbCBtX3Nob3VsZE1lcmdl
RW5kOwogfTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNzk0KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMTItMTQgIEVucmlj
YSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBOZWVkIGEgd2F5IHRvIHBy
b2R1Y2UgbGVhbmVyIG1hcmt1cCB3aGVuIHBhc3RpbmcgYSBmcmFnbWVudCBjb250YWluaW5nIHZl
cmJvc2UgbWFya3VwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03NDUxNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAyMDg2NTM+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9h
cmQvcGFzdGUtYW5kLXNhbml0aXplLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRp
dGluZy9wYXN0ZWJvYXJkL3Bhc3RlLWFuZC1zYW5pdGl6ZS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0wMTItZXhwZWN0ZWQudHh0OiBVcGRhdGVk
IHRvIHJlZmxlY3QgY2xlYW51cC4KKyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvdGVzdGNh
c2UtOTUwNy1leHBlY3RlZC50eHQ6IFVwZGF0ZWQgdG8gcmVmbGVjdCBjbGVhbnVwLgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0wMTMtZXhwZWN0
ZWQudHh0OiBVcGRhdGVkIHRvIHJlZmxlY3QgY2xlYW51cC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQtMDE0LWV4cGVjdGVkLnR4dDogVXBkYXRl
ZCB0byByZWZsZWN0IGNsZWFudXAuCisKIDIwMTEtMTItMTQgIFZzZXZvbG9kIFZsYXNvdiAgPHZz
ZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogRGF0YWJhc2VUYWJs
ZVZpZXcgc2hvdWxkIGVzY2FwZSB0YWJsZSBuYW1lLgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGlu
Zy9wYXN0ZWJvYXJkL3Bhc3RlLWFuZC1zYW5pdGl6ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLWFuZC1zYW5pdGl6ZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQv
cGFzdGUtYW5kLXNhbml0aXplLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NyBAQAorVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBwYXN0ZSBvcGVyYXRpb24gdHJpbXMgdGhl
IHBhc3RlZCBmcmFnbWVudCB0byByZWR1Y2UgdGhlIHZlcmJvc2l0eSBvZiB0aGUgbWFya3VwIHdp
dGhvdXQgYWZmZWN0aW5nIHRoZSBzdHlsZS4KKworUEFTUyBjb25maXJtZWRNYXJrdXAgaXMgJ0hl
bGxvJworUEFTUyBjb25maXJtZWRNYXJrdXAgaXMgJzxiPjxpPkhlbGxvPC9pPjwvYj4nCitQQVNT
IGNvbmZpcm1lZE1hcmt1cCBpcyAnPGI+PGk+SGVsbG88L2k+PC9iPicKK1BBU1MgY29uZmlybWVk
TWFya3VwIGlzICdIZWxsbycKK1BBU1MgY29uZmlybWVkTWFya3VwIGlzICc8Yj48aT5IZWxsbzwv
aT48L2I+JworUEFTUyBjb25maXJtZWRNYXJrdXAgaXMgJzxkaXYgc3R5bGU9InRleHQtYWxpZ246
IGNlbnRlcjsiPjxiPkhlbGxvPC9iPjwvZGl2PicKK1BBU1MgY29uZmlybWVkTWFya3VwIGlzICc8
ZGl2PjxiPjxpPmhlbGxvPC9pPjwvYj48L2Rpdj48ZGl2PjxiPjxpPndvcmxkPC9pPjwvYj48L2Rp
dj4nCitQQVNTIGNvbmZpcm1lZE1hcmt1cCBpcyAnPGI+PGk+PHNwYW4gc3R5bGU9ImZvbnQtd2Vp
Z2h0OiBub3JtYWw7ICI+PGI+PGk+aGVsbG8xPC9pPjwvYj48Yj48aT4mbmJzcDtoZWxsbzI8L2k+
PC9iPjwvc3Bhbj48L2k+PC9iPicKK1BBU1MgY29uZmlybWVkTWFya3VwIGlzICc8aSBzdHlsZT0i
bWFyZ2luLXRvcDogMTBweDsgbWFyZ2luLXJpZ2h0OiAxMHB4OyBtYXJnaW4tYm90dG9tOiAxMHB4
OyBtYXJnaW4tbGVmdDogMTBweDsgIj48Yj48aSBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsgbWFy
Z2luLXJpZ2h0OiAxMHB4OyBtYXJnaW4tYm90dG9tOiAxMHB4OyBtYXJnaW4tbGVmdDogMTBweDsg
Ij5oZWxsbzwvaT48L2I+PC9pPicKK1BBU1MgY29uZmlybWVkTWFya3VwIGlzICc8Yj48aT5IZWxs
byZuYnNwO3dvcmxkPC9pPjwvYj4nCitQQVNTIGNvbmZpcm1lZE1hcmt1cCBpcyAnPGI+PGk+PHNw
YW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7ICI+cGxhaW4gdGV4dDxiPjxpPmJvbGQgaXRh
bGljIHRleHQ8L2k+PC9iPjwvc3Bhbj48L2k+PC9iPicKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bh
c3RlYm9hcmQvcGFzdGUtYW5kLXNhbml0aXplLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLWFuZC1zYW5pdGl6ZS5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLWFuZC1zYW5pdGl6ZS5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj5UaGlzIHRlc3QgY2hlY2tzIHRoYXQgdGhlIHBh
c3RlIG9wZXJhdGlvbiB0cmltcyB0aGUgcGFzdGVkIGZyYWdtZW50IHRvIHJlZHVjZSB0aGUgdmVy
Ym9zaXR5IG9mIHRoZSBtYXJrdXAgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHN0eWxlLiA8L3A+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK3ZhciBzZWwgPSBkb2N1bWVudC5n
ZXRTZWxlY3Rpb24oKTsKK3ZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicm9vdCIp
OworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyb290KTsKKworCitmdW5jdGlvbiBjcmVhdGVF
ZGl0YWJsZSh0YWdOYW1lLCBtYXJrdXApIHsKKyAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQodGFnTmFtZSk7CisgICAgbm9kZS5jb250ZW50RWRpdGFibGUgPSB0cnVlOworICAg
IG5vZGUuaW5uZXJIVE1MID0gbWFya3VwOworICAgIHJldHVybiBub2RlOworfQorCitmdW5jdGlv
biB0ZXN0UGFzdGUodGFnTmFtZSwgb3JpZ2luYWxNYXJrdXAsIGV4cGVjdGVkKSB7CisgICAgdmFy
IG5vZGUgPSBjcmVhdGVFZGl0YWJsZSh0YWdOYW1lLCBvcmlnaW5hbE1hcmt1cCk7CisgICAgcm9v
dC5hcHBlbmRDaGlsZChub2RlKTsKKworICAgIG5vZGUuZm9jdXMoKTsKKyAgICBkb2N1bWVudC5l
eGVjQ29tbWFuZCgiU2VsZWN0QWxsIiwgZmFsc2UpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5k
KCJDb3B5IiwgZmFsc2UpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJQYXN0ZSIsIGZhbHNl
KTsKKworICAgIGNvbmZpcm1lZE1hcmt1cCA9IG5vZGUuaW5uZXJIVE1MOworCisgICAgc2hvdWxk
QmUoImNvbmZpcm1lZE1hcmt1cCIsICInIiArIGV4cGVjdGVkICsgIiciKTsKK30KKwordGVzdFBh
c3RlKCJkaXYiLCAiSGVsbG8iLCAiSGVsbG8iKTsKK3Rlc3RQYXN0ZSgiZGl2IiwgIjxiPjxpPkhl
bGxvPC9pPjwvYj4iLCAiPGI+PGk+SGVsbG88L2k+PC9iPiIpOwordGVzdFBhc3RlKCJkaXYiLCAi
PGRpdj48Yj48aT48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiBub3JtYWxcIj48Yj48aT5IZWxs
bzwvaT48L2I+PC9zcGFuPjwvaT48L2I+PC9kaXY+IiwgIjxiPjxpPkhlbGxvPC9pPjwvYj4iKTsK
K3Rlc3RQYXN0ZSgiZGl2IiwgIjxkaXY+PGRpdj48ZGl2PkhlbGxvPC9kaXY+PC9kaXY+PC9kaXY+
IiwgIkhlbGxvIik7Cit0ZXN0UGFzdGUoImRpdiIsICI8ZGl2PjxiPjxkaXY+PGk+SGVsbG88L2k+
PC9kaXY+PC9iPjwvZGl2PiIsICI8Yj48aT5IZWxsbzwvaT48L2I+Iik7Cit0ZXN0UGFzdGUoImRp
diIsICI8ZGl2PjxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+PGI+SGVsbG88L2I+
PC9kaXY+PC9kaXY+IiwgIjxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+PGI+SGVs
bG88L2I+PC9kaXY+Iik7Cit0ZXN0UGFzdGUoImRpdiIsICI8ZGl2PjxiPjxpPjxzcGFuIHN0eWxl
PVwiZm9udC13ZWlnaHQ6IG5vcm1hbFwiPjxiPjxpPmhlbGxvPC9pPjwvYj48L3NwYW4+PC9pPjwv
Yj48L2Rpdj48ZGl2PjxiPjxpPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IG5vcm1hbFwiPjxi
PjxpPndvcmxkPC9pPjwvYj48L3NwYW4+PC9pPjwvYj48L2Rpdj4iLCAKKyAgICAgICAgICAiPGRp
dj48Yj48aT5oZWxsbzwvaT48L2I+PC9kaXY+PGRpdj48Yj48aT53b3JsZDwvaT48L2I+PC9kaXY+
Iik7Cit0ZXN0UGFzdGUoImRpdiIsICI8ZGl2PjxiPjxpPjxzcGFuIHN0eWxlPVwiZm9udC13ZWln
aHQ6IG5vcm1hbDsgXCI+PGI+PGk+aGVsbG8xPC9pPjwvYj48Yj48aT4gaGVsbG8yPC9pPjwvYj48
L3NwYW4+PC9pPjwvYj48L2Rpdj4iLCAiPGI+PGk+PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDog
bm9ybWFsOyBcIj48Yj48aT5oZWxsbzE8L2k+PC9iPjxiPjxpPiZuYnNwO2hlbGxvMjwvaT48L2I+
PC9zcGFuPjwvaT48L2I+Iik7Cit0ZXN0UGFzdGUoImRpdiIsICI8aSBzdHlsZT1cIm1hcmdpbjog
MTBweDtcIj48Yj48aSBzdHlsZT1cIm1hcmdpbjogMTBweDtcIj5oZWxsbzwvaT48L2I+PC9pPiIs
CisgICAgICAgICAgIjxpIHN0eWxlPVwibWFyZ2luLXRvcDogMTBweDsgbWFyZ2luLXJpZ2h0OiAx
MHB4OyBtYXJnaW4tYm90dG9tOiAxMHB4OyBtYXJnaW4tbGVmdDogMTBweDsgXCI+PGI+PGkgc3R5
bGU9XCJtYXJnaW4tdG9wOiAxMHB4OyBtYXJnaW4tcmlnaHQ6IDEwcHg7IG1hcmdpbi1ib3R0b206
IDEwcHg7IG1hcmdpbi1sZWZ0OiAxMHB4OyBcIj5oZWxsbzwvaT48L2I+PC9pPiIpOwordGVzdFBh
c3RlKCJkaXYiLCAiPGRpdj48Yj48aT48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiBub3JtYWxc
Ij48Yj48aT5IZWxsbyA8IS0tIGNvbW1lbnQgLS0+d29ybGQ8L2k+PC9iPjwvc3Bhbj48L2k+PC9i
PjwvZGl2PiIsICI8Yj48aT5IZWxsbyZuYnNwO3dvcmxkPC9pPjwvYj4iKTsKK3Rlc3RQYXN0ZSgi
ZGl2IiwgIjxkaXY+PGI+PGk+PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogbm9ybWFsXCI+cGxh
aW4gdGV4dDxiPjxpPmJvbGQgaXRhbGljIHRleHQ8L2k+PC9iPjwvc3Bhbj48L2k+PC9iPjwvZGl2
PiIsICI8Yj48aT48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiBub3JtYWw7IFwiPnBsYWluIHRl
eHQ8Yj48aT5ib2xkIGl0YWxpYyB0ZXh0PC9pPjwvYj48L3NwYW4+PC9pPjwvYj4iKTsKKworcm9v
dC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQt
MDEyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvcGFzdGUtdGV4dC0wMTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxMDI3OTMpCisrKyBM
YXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0wMTItZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC02LDQgKzYsNCBAQCBmb28KIGZvbwogCiBleGVjQ29weUNvbW1h
bmQ6IDxkaXYgaWQ9InRlc3QiIGNsYXNzPSJlZGl0aW5nIj48ZGl2PjxibG9ja3F1b3RlPmZvbzwv
YmxvY2txdW90ZT48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0iZWRpdGluZyI+PC9kaXY+Ci1leGVj
UGFzdGVDb21tYW5kOiA8ZGl2IGlkPSJ0ZXN0IiBjbGFzcz0iZWRpdGluZyI+PGRpdj48YmxvY2tx
dW90ZT5mb288L2Jsb2NrcXVvdGU+PC9kaXY+PC9kaXY+IDxkaXYgY2xhc3M9ImVkaXRpbmciPjxk
aXYgaWQ9InRlc3QiIGNsYXNzPSJlZGl0aW5nIj48ZGl2PjxibG9ja3F1b3RlPmZvbzwvYmxvY2tx
dW90ZT48L2Rpdj48ZGl2Pjxicj48L2Rpdj48L2Rpdj48L2Rpdj4KK2V4ZWNQYXN0ZUNvbW1hbmQ6
IDxkaXYgaWQ9InRlc3QiIGNsYXNzPSJlZGl0aW5nIj48ZGl2PjxibG9ja3F1b3RlPmZvbzwvYmxv
Y2txdW90ZT48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0iZWRpdGluZyI+PGRpdiBpZD0idGVzdCIg
Y2xhc3M9ImVkaXRpbmciPjxibG9ja3F1b3RlPmZvbzwvYmxvY2txdW90ZT48ZGl2Pjxicj48L2Rp
dj48L2Rpdj48L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC90ZXN0
Y2FzZS05NTA3LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5n
L3Bhc3RlYm9hcmQvdGVzdGNhc2UtOTUwNy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDEwMjc5MykK
KysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC90ZXN0Y2FzZS05NTA3LWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsNyBAQCBBZnRlciBwYXN0ZToKIHwgICAi
Zm9vIgogfCAgIDxkaXY+CiB8ICAgICBzdHlsZT0iY29sb3I6IHJnYigyNTUsIDAsIDApOyAiCi18
ICAgICA8ZGl2PgotfCAgICAgICAiYmFyPCNzZWxlY3Rpb24tY2FyZXQ+IgorfCAgICAgImJhcjwj
c2VsZWN0aW9uLWNhcmV0PiIKIHwgICA8ZGl2PgogfCAgICAgc3R5bGU9ImNvbG9yOiByZ2IoMjU1
LCAwLCAwKTsiCiB8ICAgICAiCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGlu
Zy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQtMDEzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQtMDEz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTAyNzkzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS10ZXh0LTAxMy1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDEwICs0MCw5IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAog
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDE0LDE0KSBzaXplIDEyeDI4CiAgICAgICAg
ICAgdGV4dCBydW4gYXQgKDE0LDE0KSB3aWR0aCAxMjogIngiCiAgICAgICBSZW5kZXJCbG9jayB7
RElWfSBhdCAoMCwyMzgpIHNpemUgNzg0eDEzMiBbYm9yZGVyOiAoMnB4IHNvbGlkICNGRjAwMDAp
XQotICAgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMTQsMzgpIHNpemUgNzU2eDI4Ci0gICAg
ICAgICAgUmVuZGVyQmxvY2sge0JMT0NLUVVPVEV9IGF0ICg0MCwwKSBzaXplIDY3NngyOAotICAg
ICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzJ4MjgKLSAgICAgICAg
ICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzI6ICJmb28iCisgICAgICAgIFJlbmRlckJs
b2NrIHtCTE9DS1FVT1RFfSBhdCAoNTQsMzgpIHNpemUgNjc2eDI4CisgICAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzJ4MjgKKyAgICAgICAgICAgIHRleHQgcnVuIGF0
ICgwLDApIHdpZHRoIDMyOiAiZm9vIgogICAgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMTQs
OTApIHNpemUgNzU2eDI4CiAgICAgICAgICAgUmVuZGVyQlIge0JSfSBhdCAoMCwwKSBzaXplIDB4
MjgKIGNhcmV0OiBwb3NpdGlvbiAwIG9mIGNoaWxkIDAge0JSfSBvZiBjaGlsZCAxIHtESVZ9IG9m
IGNoaWxkIDgge0RJVn0gb2YgYm9keQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Vk
aXRpbmcvcGFzdGVib2FyZC9wYXN0ZS10ZXh0LTAxNC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS10ZXh0
LTAxNC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDEwMjc5MykKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0wMTQtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0zNSwxMCArMzUsOSBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDMyeDI4CiAg
ICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDMyOiAiZm9vIgogICAgICAgUmVu
ZGVyQmxvY2sge0RJVn0gYXQgKDAsMTY0KSBzaXplIDc4NHgxMDQgW2JvcmRlcjogKDJweCBzb2xp
ZCAjRkYwMDAwKV0KLSAgICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDE0LDM4KSBzaXplIDc1
NngyOAotICAgICAgICAgIFJlbmRlckJsb2NrIHtCTE9DS1FVT1RFfSBhdCAoNDAsMCkgc2l6ZSA2
NzZ4MjgKLSAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDMyeDI4
Ci0gICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDMyOiAiZm9vIgorICAgICAg
ICBSZW5kZXJCbG9jayB7QkxPQ0tRVU9URX0gYXQgKDU0LDM4KSBzaXplIDY3NngyOAorICAgICAg
ICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDMyeDI4CisgICAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMjogImZvbyIKICAgICAgIFJlbmRlckJsb2NrIHtESVZ9
IGF0ICgwLDI2OCkgc2l6ZSA3ODR4NTYgW2JvcmRlcjogKDJweCBzb2xpZCAjRkYwMDAwKV0KICAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgxNCwxNCkgc2l6ZSAxMngyOAogICAgICAgICAg
IHRleHQgcnVuIGF0ICgxNCwxNCkgd2lkdGggMTI6ICJ4Igo=
</data>
<flag name="review"
          id="119201"
          type_id="1"
          status="-"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119299</attachid>
            <date>2011-12-14 14:33:41 -0800</date>
            <delta_ts>2011-12-14 15:35:10 -0800</delta_ts>
            <desc>Patch 2</desc>
            <filename>trimonpaste.txt</filename>
            <type>text/plain</type>
            <size>20380</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjgyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDExLTEyLTE0ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgTmVlZCBhIHdheSB0byBwcm9k
dWNlIGxlYW5lciBtYXJrdXAgd2hlbiBwYXN0aW5nIGEgZnJhZ21lbnQgY29udGFpbmluZyB2ZXJi
b3NlIG1hcmt1cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzQ1MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMjA4NjUzPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYW5vdGhl
ciBzdGVwIGluIHRoZSBkaXJlY3Rpb24gb2YgcmVkdWNpbmcgdGhlIHZlcmJvc2l0eSBvZiB0aGUg
bWFya3VwCisgICAgICAgIHByb2R1Y2VkIHdpdGggZWRpdGluZyBvcGVyYXRpb25zLgorICAgICAg
ICBBZnRlciB0aGUgY29waWVkIGZyYWdtZW50IGlzIGluc2VydGVkIGluIHRoZSBkb2N1bWVudCwg
aXQgaXMgYW5hbHl6ZWQgdG8gcmVtb3ZlIGFsbAorICAgICAgICB0aGUgZWxlbWVudHMgdGhhdCBk
b24ndCBjb250cmlidXRlIHRvIHRoZSBzdHlsZS4gVGhlIGRlY2lzaW9uIGlzIG1hZGUgY29tcGFy
aW5nIHRoZQorICAgICAgICByZW5kZXIgc3R5bGVzLiBBcyBwYXJ0IG9mIHRoZSBjbGVhbnVwLCB1
bnN0eWxlZCBkaXZzIHdpdGggc2luZ2xlIGNoaWxkIGVsZW1lbnQgYXJlCisgICAgICAgIHJlbW92
ZWQuIFRoZSBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIGJsb2NrcyB0aGF0IGNhbiBiZSByZW1vdmVk
IGlzIHRoZSBzYW1lIHVzZWQgaW4KKyAgICAgICAgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCBhbmQg
aGFzIGJlZW4gbW92ZWQgaW4gQ29tcG9zaXRlRWRpdENvbW1hbmQuCisgICAgICAgIAorICAgICAg
ICBUZXN0OiBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtYW5kLXNhbml0aXplLmh0bWwKKworICAg
ICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmlzUmVtb3ZhYmxlQmxvY2spOiBJbXBsZW1lbnRzIGxv
Z2ljIHRvIGRldGVybWluZQorICAgICAgICBpZiBhIGJsb2NrIGNhbiBiZSByZW1vdmVkLgorICAg
ICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaDogQWRkZWQgaXNSZW1vdmFibGVC
bG9jayBkZWNsYXJhdGlvbi4KKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3Zl
UmVkdW5kYW50QmxvY2tzKTogSW1wbGVtZW50ZWQgdXNpbmcKKyAgICAgICAgaXNSZW1vdmFibGVC
bG9jayBmcm9tIENvbXBvc2l0ZUVkaXRDb21tYW5kLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFn
bWVudCk6IEFkZGVkIFNhbml0aXplRnJhZ21lbnQgb3B0aW9uLgorICAgICAgICAqIGVkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKTogQWRkZWQgaW5pdGlhbGl6
YXRpb24KKyAgICAgICAgb2YgbV9zYW5pdGl6ZUZyYWdtZW50IG1lbWJlci4KKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRNYXJrdXApOiBO
ZXcgbWV0aG9kIGltcGxlbWVudGluZworICAgICAgICB0aGUgY2xlYW51cCBsb2dpYy4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KTogQWRkZWQgY2Fs
bCB0byByZW1vdmVSZWR1bmRhbnRNYXJrdXAKKyAgICAgICAgYWZ0ZXIgdGhlIGZyYWdtZW50IGlz
IGluc2VydGVkIGluIHRoZSBkb2N1bWVudC4KKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmg6IEFkZGVkIG5ldyB2YWx1ZSB0byB0aGUgZW51bSBDb21tYW5kT3B0aW9u
LAorICAgICAgICBhIG5ldyBtZW1iZXIgdmFyaWFibGUgYW5kIHRoZSBuZXcgbWV0aG9kIGRlY2xh
cmF0aW9uLgorCiAyMDExLTEyLTE0ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmVtb3ZlIGFkZGVkIGNhbGxzIHRvIENTU1N0eWxlU2VsZWN0b3IgdG8gZ2FpbiBi
YWNrIGFub3RoZXIgMiUgaW4gcGFnZSBjeWNsZXJzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gMTAyNzkzKQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMSw2ICsyMTEsMTkgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5z
ZXJ0TGluZUJyZQogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydExpbmVCcmVha0Nv
bW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CiB9CiAKK2Jvb2wgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmlzUmVtb3ZhYmxlQmxvY2soY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBOb2RlKiBwYXJl
bnROb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgIGlmICgocGFyZW50Tm9kZSAmJiBwYXJl
bnROb2RlLT5maXJzdENoaWxkKCkgIT0gcGFyZW50Tm9kZS0+bGFzdENoaWxkKCkpIHx8ICFub2Rl
LT5oYXNUYWdOYW1lKGRpdlRhZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0
IE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwID0gbm9kZS0+YXR0cmlidXRlcygpOworICAgIGlm
ICghYXR0cmlidXRlTWFwIHx8IGF0dHJpYnV0ZU1hcC0+aXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBpbnNlcnRDaGlsZCwg
UGFzc1JlZlB0cjxOb2RlPiByZWZDaGlsZCkKIHsKICAgICBBU1NFUlQoIXJlZkNoaWxkLT5oYXNU
YWdOYW1lKGJvZHlUYWcpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmgJKHJldmlzaW9uIDEwMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkZWxldGVTZWxlY3Rpb24oYm9vbCBzbWFydERlbGV0
ZSA9IGZhbHNlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUgPSB0cnVlLCBib29sIHJlcGxh
Y2UgPSBmYWxzZSwgYm9vbCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMgPSB0cnVlKTsKICAgICB2
b2lkIGRlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBzbWFydERl
bGV0ZSA9IGZhbHNlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUgPSB0cnVlLCBib29sIHJl
cGxhY2UgPSBmYWxzZSwgYm9vbCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMgPSB0cnVlKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dEZyb21Ob2RlKFBhc3NSZWZQdHI8VGV4dD4sIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpOworICAgIGJvb2wgaXNSZW1vdmFibGVCbG9jayhj
b25zdCBOb2RlKik7CiAgICAgdm9pZCBpbnNlcnROb2RlQWZ0ZXIoUGFzc1JlZlB0cjxOb2RlPiwg
UGFzc1JlZlB0cjxOb2RlPiByZWZDaGlsZCk7CiAgICAgdm9pZCBpbnNlcnROb2RlQXQoUGFzc1Jl
ZlB0cjxOb2RlPiwgY29uc3QgUG9zaXRpb24mKTsKICAgICB2b2lkIGluc2VydE5vZGVBdFRhYlNw
YW5Qb3NpdGlvbihQYXNzUmVmUHRyPE5vZGU+LCBjb25zdCBQb3NpdGlvbiYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShy
ZXZpc2lvbiAxMDI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTMsMjAgKzc1MywxNCBAQCB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuCiAgICAgTm9kZSogcm9vdE5vZGUgPSBu
b2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAKICAgICB3aGlsZSAobm9kZSAhPSByb290
Tm9kZSkgewotICAgICAgICBOb2RlKiBwYXJlbnROb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwot
ICAgICAgICBpZiAoKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS0+Zmlyc3RDaGlsZCgpICE9IHBh
cmVudE5vZGUtPmxhc3RDaGlsZCgpKSB8fCAhbm9kZS0+aGFzVGFnTmFtZShkaXZUYWcpKSB7Ci0g
ICAgICAgICAgICBub2RlID0gcGFyZW50Tm9kZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwID0gbm9kZS0+
YXR0cmlidXRlcygpOwotICAgICAgICBpZiAoIWF0dHJpYnV0ZU1hcCB8fCBhdHRyaWJ1dGVNYXAt
PmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoaXNSZW1vdmFibGVCbG9jayhub2RlKSkgewogICAg
ICAgICAgICAgaWYgKG5vZGUgPT0gbV9lbmRpbmdQb3NpdGlvbi5hbmNob3JOb2RlKCkpCiAgICAg
ICAgICAgICAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbChtX2VuZGluZ1Bvc2l0aW9u
LCBub2RlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4obm9kZSk7CiAgICAgICAgICAgICBub2RlID0g
bV9lbmRpbmdQb3NpdGlvbi5hbmNob3JOb2RlKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgbm9kZSA9IHBhcmVudE5vZGU7CisgICAgICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNp
b24gMTAyNzkzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25X
aXRoRnJhZ21lbgogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkgfHwgIWZy
YWdtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
Q29tbWFuZE9wdGlvbnMgb3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50
TmVzdGluZzsKKyAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbnMgb3B0
aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB8IFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpTYW5pdGl6ZUZyYWdtZW50OwogICAgIGlmIChzZWxlY3RSZXBsYWNl
bWVudCkKICAgICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0
UmVwbGFjZW1lbnQ7CiAgICAgaWYgKHNtYXJ0UmVwbGFjZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAx
MDI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkhUTUxJbnRl
cmNoYW5nZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVMaXN0Lmgi
CisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlNtYXJ0UmVwbGFjZS5oIgpAQCAtMzcy
LDYgKzM3Myw3IEBAIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpSZXBsYWNlU2VsZWN0aW8KICAg
ICAsIG1fcHJldmVudE5lc3Rpbmcob3B0aW9ucyAmIFByZXZlbnROZXN0aW5nKQogICAgICwgbV9t
b3ZpbmdQYXJhZ3JhcGgob3B0aW9ucyAmIE1vdmluZ1BhcmFncmFwaCkKICAgICAsIG1fZWRpdEFj
dGlvbihlZGl0QWN0aW9uKQorICAgICwgbV9zYW5pdGl6ZUZyYWdtZW50KG9wdGlvbnMgJiBTYW5p
dGl6ZUZyYWdtZW50KQogICAgICwgbV9zaG91bGRNZXJnZUVuZChmYWxzZSkKIHsKIH0KQEAgLTUz
Niw2ICs1MzgsNTYgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdQog
ICAgIH0KIH0KIAordm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50
TWFya3VwKEluc2VydGVkTm9kZXMmIGluc2VydGVkTm9kZXMpCit7CisgICAgTm9kZSogcGFzdEVu
ZE5vZGUgPSBpbnNlcnRlZE5vZGVzLnBhc3RMYXN0TGVhZigpOworICAgIE5vZGUqIHJvb3ROb2Rl
ID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpLT5wYXJlbnROb2RlKCk7CisgICAg
VmVjdG9yPE5vZGUqPiBub2Rlc1RvUmVtb3ZlOworICAgIAorICAgIC8vIFdhbGsgdGhyb3VnaCB0
aGUgaW5zZXJ0ZWQgbm9kZXMsIHRvIHNlZSBpZiB0aGVyZSBhcmUgZWxlbWVudHMgdGhhdCBjb3Vs
ZCBiZSByZW1vdmVkCisgICAgLy8gd2l0aG91dCBhZmZlY3RpbmcgdGhlIHN0eWxlLiBUaGUgZ29h
bCBpcyB0byBwcm9kdWNlIGxlYW5lciBtYXJrdXAgZXZlbiB3aGVuIHN0YXJ0aW5nCisgICAgLy8g
ZnJvbSBhIHZlcmJvc2UgZnJhZ21lbnQuCisgICAgLy8gV2UgbG9vayBhdCBpbmxpbmUgZWxlbWVu
dHMgYXMgd2VsbCBhcyBub24gdG9wIGxldmVsIGRpdnMgdGhhdCBkb24ndCBoYXZlIGF0dHJpYnV0
ZXMuIAorICAgIGZvciAoTm9kZSogbm9kZSA9IGluc2VydGVkTm9kZXMuZmlyc3ROb2RlSW5zZXJ0
ZWQoKTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpKSB7CisgICAgICAgIGlmIChub2RlLT5maXJzdENoaWxkKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSAmJiBub2RlLT5uZXh0
U2libGluZygpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBOb2Rl
KiBzdGFydGluZ05vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgIFJlbmRlclN0eWxl
KiBzdGFydGluZ1N0eWxlID0gc3RhcnRpbmdOb2RlLT5yZW5kZXJTdHlsZSgpOworICAgICAgICBp
ZiAoIXN0YXJ0aW5nU3R5bGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgTm9kZSog
Y3VycmVudE5vZGUgPSBzdGFydGluZ05vZGU7CisgICAgICAgIE5vZGUqIHRvcE5vZGVXaXRoU3Rh
cnRpbmdTdHlsZSA9IDA7CisgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSAhPSByb290Tm9kZSkg
eworICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCkgIT0gcm9vdE5vZGUg
JiYgaXNSZW1vdmFibGVCbG9jayhjdXJyZW50Tm9kZSkpCisgICAgICAgICAgICAgICAgbm9kZXNU
b1JlbW92ZS5hcHBlbmQoY3VycmVudE5vZGUpOworCisgICAgICAgICAgICBjdXJyZW50Tm9kZSA9
IGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnROb2Rl
LT5yZW5kZXJlcigpIHx8ICFjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJJbmxpbmUo
KSB8fCB0b1JlbmRlcklubGluZShjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKSktPmFsd2F5c0NyZWF0
ZUxpbmVCb3hlcygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBp
ZiAoY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUtPmZpcnN0Q2hpbGQoKSAhPSBjdXJyZW50Tm9k
ZS0+bGFzdENoaWxkKCkpIHsKKyAgICAgICAgICAgICAgICB0b3BOb2RlV2l0aFN0YXJ0aW5nU3R5
bGUgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICB1bnNpZ25lZCBjb250ZXh0OworICAgICAgICAgICAgaWYgKGN1cnJl
bnROb2RlLT5yZW5kZXJTdHlsZSgpLT5kaWZmKHN0YXJ0aW5nU3R5bGUsIGNvbnRleHQpID09IFN0
eWxlRGlmZmVyZW5jZUVxdWFsKQorICAgICAgICAgICAgICAgIHRvcE5vZGVXaXRoU3RhcnRpbmdT
dHlsZSA9IGN1cnJlbnROb2RlOworICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgaWYg
KHRvcE5vZGVXaXRoU3RhcnRpbmdTdHlsZSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2Rl
ID0gc3RhcnRpbmdOb2RlOyBub2RlICE9IHRvcE5vZGVXaXRoU3RhcnRpbmdTdHlsZTsgbm9kZSA9
IG5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLmFwcGVu
ZChub2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyB3ZSBwZXJmb3JtIGFsbCB0aGUgRE9N
IG11dGF0aW9ucyBhdCBvbmNlLgorICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBub2Rlc1RvUmVtb3ZlLmJlZ2luKCk7IGl0ICE9IG5vZGVzVG9SZW1vdmUuZW5kKCk7
ICsraXQpCisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oKml0KTsKK30KKwog
c3RhdGljIGlubGluZSBib29sIG5vZGVIYXNWaXNpYmxlUmVuZGVyVGV4dChUZXh0KiB0ZXh0KQog
ewogICAgIHJldHVybiB0ZXh0LT5yZW5kZXJlcigpICYmIHRvUmVuZGVyVGV4dCh0ZXh0LT5yZW5k
ZXJlcigpKS0+cmVuZGVyZWRUZXh0TGVuZ3RoKCkgPiAwOwpAQCAtMTAwMSw2ICsxMDUzLDkgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICByZW1vdmVSZWR1
bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKGluc2VydGVkTm9kZXMpOwogCisgICAg
aWYgKG1fc2FuaXRpemVGcmFnbWVudCkKKyAgICAgICAgcmVtb3ZlUmVkdW5kYW50TWFya3VwKGlu
c2VydGVkTm9kZXMpOworCiAgICAgLy8gU2V0dXAgbV9zdGFydE9mSW5zZXJ0ZWRDb250ZW50IGFu
ZCBtX2VuZE9mSW5zZXJ0ZWRDb250ZW50LiBUaGlzIHNob3VsZCBiZSB0aGUgbGFzdCB0d28gbGlu
ZXMgb2YgY29kZSB0aGF0IGFjY2VzcyBpbnNlcnRlZE5vZGVzLgogICAgIG1fc3RhcnRPZkluc2Vy
dGVkQ29udGVudCA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShpbnNlcnRlZE5vZGVzLmZp
cnN0Tm9kZUluc2VydGVkKCkpOwogICAgIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQgPSBsYXN0UG9z
aXRpb25Jbk9yQWZ0ZXJOb2RlKGluc2VydGVkTm9kZXMubGFzdExlYWZJbnNlcnRlZCgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmgJKHJldmlzaW9uIDEwMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsOCBAQCBwdWJsaWM6
CiAgICAgICAgIFNtYXJ0UmVwbGFjZSA9IDEgPDwgMSwKICAgICAgICAgTWF0Y2hTdHlsZSA9IDEg
PDwgMiwKICAgICAgICAgUHJldmVudE5lc3RpbmcgPSAxIDw8IDMsCi0gICAgICAgIE1vdmluZ1Bh
cmFncmFwaCA9IDEgPDwgNAorICAgICAgICBNb3ZpbmdQYXJhZ3JhcGggPSAxIDw8IDQsCisgICAg
ICAgIFNhbml0aXplRnJhZ21lbnQgPSAxIDw8IDUKICAgICB9OwogCiAgICAgdHlwZWRlZiB1bnNp
Z25lZCBDb21tYW5kT3B0aW9uczsKQEAgLTg4LDYgKzg5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHJlbW92ZVVucmVuZGVyZWRUZXh0Tm9kZXNBdEVuZHMoSW5zZXJ0ZWROb2RlcyYpOwogICAgIAog
ICAgIHZvaWQgcmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZShJbnNl
cnRlZE5vZGVzJik7CisgICAgdm9pZCByZW1vdmVSZWR1bmRhbnRNYXJrdXAoSW5zZXJ0ZWROb2Rl
cyYpOwogICAgIHZvaWQgaGFuZGxlU3R5bGVTcGFucyhJbnNlcnRlZE5vZGVzJik7CiAgICAgdm9p
ZCBoYW5kbGVQYXN0ZUFzUXVvdGF0aW9uTm9kZSgpOwogICAgIApAQCAtMTEwLDYgKzExMiw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX3ByZXZlbnROZXN0aW5nOwogICAgIGJvb2wgbV9tb3ZpbmdQ
YXJhZ3JhcGg7CiAgICAgRWRpdEFjdGlvbiBtX2VkaXRBY3Rpb247CisgICAgYm9vbCBtX3Nhbml0
aXplRnJhZ21lbnQ7CiAgICAgYm9vbCBtX3Nob3VsZE1lcmdlRW5kOwogfTsKIApJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMTAyODI3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMTItMTQgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFw
cGxlLmNvbT4KKworICAgICAgICBOZWVkIGEgd2F5IHRvIHByb2R1Y2UgbGVhbmVyIG1hcmt1cCB3
aGVuIHBhc3RpbmcgYSBmcmFnbWVudCBjb250YWluaW5nIHZlcmJvc2UgbWFya3VwCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUxNAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTAyMDg2NTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtYW5kLXNhbml0aXpl
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3Rl
LWFuZC1zYW5pdGl6ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQv
cGFzdGUtdGV4dC0wMTItZXhwZWN0ZWQudHh0OiBVcGRhdGVkIHRvIHJlZmxlY3QgY2xlYW51cC4K
KyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvdGVzdGNhc2UtOTUwNy1leHBlY3RlZC50eHQ6
IFVwZGF0ZWQgdG8gcmVmbGVjdCBjbGVhbnVwLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9lZGl0
aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0wMTMtZXhwZWN0ZWQudHh0OiBVcGRhdGVkIHRvIHJl
ZmxlY3QgY2xlYW51cC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJk
L3Bhc3RlLXRleHQtMDE0LWV4cGVjdGVkLnR4dDogVXBkYXRlZCB0byByZWZsZWN0IGNsZWFudXAu
CisKIDIwMTEtMTItMTQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgU2tpcCBmYXN0L2Zvcm1zL3NlbGVjdC9tZW51bGlzdC1vbmNoYW5nZS1maXJlZC13aXRoLWtl
eS11cC1kb3duLmh0bWwgb24gTWFjIHNpbmNlCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bh
c3RlYm9hcmQvcGFzdGUtYW5kLXNhbml0aXplLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtYW5kLXNhbml0aXplLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0
ZS1hbmQtc2FuaXRpemUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBA
CitUaGlzIHRlc3QgY2hlY2tzIHRoYXQgdGhlIHBhc3RlIG9wZXJhdGlvbiB0cmltcyB0aGUgcGFz
dGVkIGZyYWdtZW50IHRvIHJlZHVjZSB0aGUgdmVyYm9zaXR5IG9mIHRoZSBtYXJrdXAgd2l0aG91
dCBhZmZlY3RpbmcgdGhlIHN0eWxlLgorCitQQVNTIGNvbmZpcm1lZE1hcmt1cCBpcyAnSGVsbG8n
CitQQVNTIGNvbmZpcm1lZE1hcmt1cCBpcyAnPGI+PGk+SGVsbG88L2k+PC9iPicKK1BBU1MgY29u
ZmlybWVkTWFya3VwIGlzICc8Yj48aT5IZWxsbzwvaT48L2I+JworUEFTUyBjb25maXJtZWRNYXJr
dXAgaXMgJ0hlbGxvJworUEFTUyBjb25maXJtZWRNYXJrdXAgaXMgJzxiPjxpPkhlbGxvPC9pPjwv
Yj4nCitQQVNTIGNvbmZpcm1lZE1hcmt1cCBpcyAnPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2Vu
dGVyOyI+PGI+SGVsbG88L2I+PC9kaXY+JworUEFTUyBjb25maXJtZWRNYXJrdXAgaXMgJzxkaXY+
PGI+PGk+aGVsbG88L2k+PC9iPjwvZGl2PjxkaXY+PGI+PGk+d29ybGQ8L2k+PC9iPjwvZGl2PicK
K1BBU1MgY29uZmlybWVkTWFya3VwIGlzICc8Yj48aT48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6
IG5vcm1hbDsgIj48Yj48aT5oZWxsbzE8L2k+PC9iPjxiPjxpPiZuYnNwO2hlbGxvMjwvaT48L2I+
PC9zcGFuPjwvaT48L2I+JworUEFTUyBjb25maXJtZWRNYXJrdXAgaXMgJzxpIHN0eWxlPSJtYXJn
aW4tdG9wOiAxMHB4OyBtYXJnaW4tcmlnaHQ6IDEwcHg7IG1hcmdpbi1ib3R0b206IDEwcHg7IG1h
cmdpbi1sZWZ0OiAxMHB4OyAiPjxiPjxpIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyBtYXJnaW4t
cmlnaHQ6IDEwcHg7IG1hcmdpbi1ib3R0b206IDEwcHg7IG1hcmdpbi1sZWZ0OiAxMHB4OyAiPmhl
bGxvPC9pPjwvYj48L2k+JworUEFTUyBjb25maXJtZWRNYXJrdXAgaXMgJzxiPjxpPkhlbGxvJm5i
c3A7d29ybGQ8L2k+PC9iPicKK1BBU1MgY29uZmlybWVkTWFya3VwIGlzICc8Yj48aT48c3BhbiBz
dHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsgIj5wbGFpbiB0ZXh0PGI+PGk+Ym9sZCBpdGFsaWMg
dGV4dDwvaT48L2I+PC9zcGFuPjwvaT48L2I+JworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVi
b2FyZC9wYXN0ZS1hbmQtc2FuaXRpemUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtYW5kLXNhbml0aXplLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtYW5kLXNhbml0aXplLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPlRoaXMgdGVzdCBjaGVja3MgdGhhdCB0aGUgcGFzdGUg
b3BlcmF0aW9uIHRyaW1zIHRoZSBwYXN0ZWQgZnJhZ21lbnQgdG8gcmVkdWNlIHRoZSB2ZXJib3Np
dHkgb2YgdGhlIG1hcmt1cCB3aXRob3V0IGFmZmVjdGluZyB0aGUgc3R5bGUuIDwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKwordmFyIHNlbCA9IGRvY3VtZW50LmdldFNl
bGVjdGlvbigpOwordmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJyb290Iik7Citk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpOworCisKK2Z1bmN0aW9uIGNyZWF0ZUVkaXRh
YmxlKHRhZ05hbWUsIG1hcmt1cCkgeworICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCh0YWdOYW1lKTsKKyAgICBub2RlLmNvbnRlbnRFZGl0YWJsZSA9IHRydWU7CisgICAgbm9k
ZS5pbm5lckhUTUwgPSBtYXJrdXA7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK2Z1bmN0aW9uIHRl
c3RQYXN0ZSh0YWdOYW1lLCBvcmlnaW5hbE1hcmt1cCwgZXhwZWN0ZWQpIHsKKyAgICB2YXIgbm9k
ZSA9IGNyZWF0ZUVkaXRhYmxlKHRhZ05hbWUsIG9yaWdpbmFsTWFya3VwKTsKKyAgICByb290LmFw
cGVuZENoaWxkKG5vZGUpOworCisgICAgbm9kZS5mb2N1cygpOworICAgIGRvY3VtZW50LmV4ZWND
b21tYW5kKCJTZWxlY3RBbGwiLCBmYWxzZSk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIkNv
cHkiLCBmYWxzZSk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIlBhc3RlIiwgZmFsc2UpOwor
CisgICAgY29uZmlybWVkTWFya3VwID0gbm9kZS5pbm5lckhUTUw7CisKKyAgICBzaG91bGRCZSgi
Y29uZmlybWVkTWFya3VwIiwgIiciICsgZXhwZWN0ZWQgKyAiJyIpOworfQorCit0ZXN0UGFzdGUo
ImRpdiIsICJIZWxsbyIsICJIZWxsbyIpOwordGVzdFBhc3RlKCJkaXYiLCAiPGI+PGk+SGVsbG88
L2k+PC9iPiIsICI8Yj48aT5IZWxsbzwvaT48L2I+Iik7Cit0ZXN0UGFzdGUoImRpdiIsICI8ZGl2
PjxiPjxpPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IG5vcm1hbFwiPjxiPjxpPkhlbGxvPC9p
PjwvYj48L3NwYW4+PC9pPjwvYj48L2Rpdj4iLCAiPGI+PGk+SGVsbG88L2k+PC9iPiIpOwordGVz
dFBhc3RlKCJkaXYiLCAiPGRpdj48ZGl2PjxkaXY+SGVsbG88L2Rpdj48L2Rpdj48L2Rpdj4iLCAi
SGVsbG8iKTsKK3Rlc3RQYXN0ZSgiZGl2IiwgIjxkaXY+PGI+PGRpdj48aT5IZWxsbzwvaT48L2Rp
dj48L2I+PC9kaXY+IiwgIjxiPjxpPkhlbGxvPC9pPjwvYj4iKTsKK3Rlc3RQYXN0ZSgiZGl2Iiwg
IjxkaXY+PGRpdiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj48Yj5IZWxsbzwvYj48L2Rp
dj48L2Rpdj4iLCAiPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj48Yj5IZWxsbzwv
Yj48L2Rpdj4iKTsKK3Rlc3RQYXN0ZSgiZGl2IiwgIjxkaXY+PGI+PGk+PHNwYW4gc3R5bGU9XCJm
b250LXdlaWdodDogbm9ybWFsXCI+PGI+PGk+aGVsbG88L2k+PC9iPjwvc3Bhbj48L2k+PC9iPjwv
ZGl2PjxkaXY+PGI+PGk+PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogbm9ybWFsXCI+PGI+PGk+
d29ybGQ8L2k+PC9iPjwvc3Bhbj48L2k+PC9iPjwvZGl2PiIsIAorICAgICAgICAgICI8ZGl2Pjxi
PjxpPmhlbGxvPC9pPjwvYj48L2Rpdj48ZGl2PjxiPjxpPndvcmxkPC9pPjwvYj48L2Rpdj4iKTsK
K3Rlc3RQYXN0ZSgiZGl2IiwgIjxkaXY+PGI+PGk+PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDog
bm9ybWFsOyBcIj48Yj48aT5oZWxsbzE8L2k+PC9iPjxiPjxpPiBoZWxsbzI8L2k+PC9iPjwvc3Bh
bj48L2k+PC9iPjwvZGl2PiIsICI8Yj48aT48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiBub3Jt
YWw7IFwiPjxiPjxpPmhlbGxvMTwvaT48L2I+PGI+PGk+Jm5ic3A7aGVsbG8yPC9pPjwvYj48L3Nw
YW4+PC9pPjwvYj4iKTsKK3Rlc3RQYXN0ZSgiZGl2IiwgIjxpIHN0eWxlPVwibWFyZ2luOiAxMHB4
O1wiPjxiPjxpIHN0eWxlPVwibWFyZ2luOiAxMHB4O1wiPmhlbGxvPC9pPjwvYj48L2k+IiwKKyAg
ICAgICAgICAiPGkgc3R5bGU9XCJtYXJnaW4tdG9wOiAxMHB4OyBtYXJnaW4tcmlnaHQ6IDEwcHg7
IG1hcmdpbi1ib3R0b206IDEwcHg7IG1hcmdpbi1sZWZ0OiAxMHB4OyBcIj48Yj48aSBzdHlsZT1c
Im1hcmdpbi10b3A6IDEwcHg7IG1hcmdpbi1yaWdodDogMTBweDsgbWFyZ2luLWJvdHRvbTogMTBw
eDsgbWFyZ2luLWxlZnQ6IDEwcHg7IFwiPmhlbGxvPC9pPjwvYj48L2k+Iik7Cit0ZXN0UGFzdGUo
ImRpdiIsICI8ZGl2PjxiPjxpPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IG5vcm1hbFwiPjxi
PjxpPkhlbGxvIDwhLS0gY29tbWVudCAtLT53b3JsZDwvaT48L2I+PC9zcGFuPjwvaT48L2I+PC9k
aXY+IiwgIjxiPjxpPkhlbGxvJm5ic3A7d29ybGQ8L2k+PC9iPiIpOwordGVzdFBhc3RlKCJkaXYi
LCAiPGRpdj48Yj48aT48c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiBub3JtYWxcIj5wbGFpbiB0
ZXh0PGI+PGk+Ym9sZCBpdGFsaWMgdGV4dDwvaT48L2I+PC9zcGFuPjwvaT48L2I+PC9kaXY+Iiwg
IjxiPjxpPjxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IG5vcm1hbDsgXCI+cGxhaW4gdGV4dDxi
PjxpPmJvbGQgaXRhbGljIHRleHQ8L2k+PC9iPjwvc3Bhbj48L2k+PC9iPiIpOworCityb290LnN0
eWxlLmRpc3BsYXkgPSAibm9uZSI7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0wMTIt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2Fy
ZC9wYXN0ZS10ZXh0LTAxMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDEwMjc5MykKKysrIExheW91
dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS10ZXh0LTAxMi1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTYsNCArNiw0IEBAIGZvbwogZm9vCiAKIGV4ZWNDb3B5Q29tbWFuZDog
PGRpdiBpZD0idGVzdCIgY2xhc3M9ImVkaXRpbmciPjxkaXY+PGJsb2NrcXVvdGU+Zm9vPC9ibG9j
a3F1b3RlPjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJlZGl0aW5nIj48L2Rpdj4KLWV4ZWNQYXN0
ZUNvbW1hbmQ6IDxkaXYgaWQ9InRlc3QiIGNsYXNzPSJlZGl0aW5nIj48ZGl2PjxibG9ja3F1b3Rl
PmZvbzwvYmxvY2txdW90ZT48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0iZWRpdGluZyI+PGRpdiBp
ZD0idGVzdCIgY2xhc3M9ImVkaXRpbmciPjxkaXY+PGJsb2NrcXVvdGU+Zm9vPC9ibG9ja3F1b3Rl
PjwvZGl2PjxkaXY+PGJyPjwvZGl2PjwvZGl2PjwvZGl2PgorZXhlY1Bhc3RlQ29tbWFuZDogPGRp
diBpZD0idGVzdCIgY2xhc3M9ImVkaXRpbmciPjxkaXY+PGJsb2NrcXVvdGU+Zm9vPC9ibG9ja3F1
b3RlPjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJlZGl0aW5nIj48ZGl2IGlkPSJ0ZXN0IiBjbGFz
cz0iZWRpdGluZyI+PGJsb2NrcXVvdGU+Zm9vPC9ibG9ja3F1b3RlPjxkaXY+PGJyPjwvZGl2Pjwv
ZGl2PjwvZGl2PgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Rlc3RjYXNl
LTk1MDctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFz
dGVib2FyZC90ZXN0Y2FzZS05NTA3LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTAyNzkzKQorKysg
TGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Rlc3RjYXNlLTk1MDctZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw3IEBAIEFmdGVyIHBhc3RlOgogfCAgICJmb28i
CiB8ICAgPGRpdj4KIHwgICAgIHN0eWxlPSJjb2xvcjogcmdiKDI1NSwgMCwgMCk7ICIKLXwgICAg
IDxkaXY+Ci18ICAgICAgICJiYXI8I3NlbGVjdGlvbi1jYXJldD4iCit8ICAgICAiYmFyPCNzZWxl
Y3Rpb24tY2FyZXQ+IgogfCAgIDxkaXY+CiB8ICAgICBzdHlsZT0iY29sb3I6IHJnYigyNTUsIDAs
IDApOyIKIHwgICAgICIKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bh
c3RlYm9hcmQvcGFzdGUtdGV4dC0wMTMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0wMTMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAxMDI3OTMpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQtMDEzLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNDAsMTAgKzQwLDkgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgICAg
ICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMTQsMTQpIHNpemUgMTJ4MjgKICAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMTQsMTQpIHdpZHRoIDEyOiAieCIKICAgICAgIFJlbmRlckJsb2NrIHtESVZ9
IGF0ICgwLDIzOCkgc2l6ZSA3ODR4MTMyIFtib3JkZXI6ICgycHggc29saWQgI0ZGMDAwMCldCi0g
ICAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgxNCwzOCkgc2l6ZSA3NTZ4MjgKLSAgICAgICAg
ICBSZW5kZXJCbG9jayB7QkxPQ0tRVU9URX0gYXQgKDQwLDApIHNpemUgNjc2eDI4Ci0gICAgICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzMngyOAotICAgICAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMjogImZvbyIKKyAgICAgICAgUmVuZGVyQmxvY2sg
e0JMT0NLUVVPVEV9IGF0ICg1NCwzOCkgc2l6ZSA2NzZ4MjgKKyAgICAgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzMngyOAorICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggMzI6ICJmb28iCiAgICAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgxNCw5MCkg
c2l6ZSA3NTZ4MjgKICAgICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgwLDApIHNpemUgMHgyOAog
Y2FyZXQ6IHBvc2l0aW9uIDAgb2YgY2hpbGQgMCB7QlJ9IG9mIGNoaWxkIDEge0RJVn0gb2YgY2hp
bGQgOCB7RElWfSBvZiBib2R5CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGlu
Zy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQtMDE0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQtMDE0
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTAyNzkzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS10ZXh0LTAxNC1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDEwICszNSw5IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAog
ICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzJ4MjgKICAgICAg
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzI6ICJmb28iCiAgICAgICBSZW5kZXJC
bG9jayB7RElWfSBhdCAoMCwxNjQpIHNpemUgNzg0eDEwNCBbYm9yZGVyOiAoMnB4IHNvbGlkICNG
RjAwMDApXQotICAgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMTQsMzgpIHNpemUgNzU2eDI4
Ci0gICAgICAgICAgUmVuZGVyQmxvY2sge0JMT0NLUVVPVEV9IGF0ICg0MCwwKSBzaXplIDY3Nngy
OAotICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzJ4MjgKLSAg
ICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzI6ICJmb28iCisgICAgICAgIFJl
bmRlckJsb2NrIHtCTE9DS1FVT1RFfSBhdCAoNTQsMzgpIHNpemUgNjc2eDI4CisgICAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzJ4MjgKKyAgICAgICAgICAgIHRleHQg
cnVuIGF0ICgwLDApIHdpZHRoIDMyOiAiZm9vIgogICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQg
KDAsMjY4KSBzaXplIDc4NHg1NiBbYm9yZGVyOiAoMnB4IHNvbGlkICNGRjAwMDApXQogICAgICAg
ICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDE0LDE0KSBzaXplIDEyeDI4CiAgICAgICAgICAgdGV4
dCBydW4gYXQgKDE0LDE0KSB3aWR0aCAxMjogIngiCg==
</data>
<flag name="review"
          id="119265"
          type_id="1"
          status="+"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="119283"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>