<?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>26937</bug_id>
          
          <creation_ts>2009-07-02 15:24:47 -0700</creation_ts>
          <short_desc>Copying and pasting into a contenteditable area can create &lt;div&gt;s surrounded by &lt;span&gt;s</short_desc>
          <delta_ts>2010-02-21 20:23:06 -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>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Annie Sullivan">sullivan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>jhuangjiahua</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>michaelthomas</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
    
    <cc>vkarun</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129598</commentid>
    <comment_count>0</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2009-07-02 15:24:47 -0700</bug_when>
    <thetext>STEPS TO REPRODUCE:
1. Create a web page and enter the following HTML:
&lt;style&gt;div{font-family:Courier; font-size:small;}&lt;/style&gt;
&lt;div&gt;one&lt;/div&gt;
&lt;div&gt;two&lt;/div&gt;
2. Copy the text &quot;one two&quot; from the page and paste it into a contenteditable area on another page (e.g. midas demo)
3. HTML that is pasted into the contenteditable area:
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Courier; font-size: small; &quot;&gt;&lt;div style=&quot;font-family: Courier; font-size: small; &quot;&gt;one&lt;/div&gt;&lt;div style=&quot;font-family: Courier; font-size: small; &quot;&gt;two&lt;/div&gt;&lt;/span&gt;

This creates redundant styles, which can be difficult for other browser rich text editors to remove, and also block-level tags (divs) which are children of inline tags (spans), which is invalid HTML. 

The styles should be applied to the copied text in the same way they would be applied if the contentedtable area contaied the HTML &quot;&lt;div&gt;one&lt;/div&gt;&lt;div&gt;two&lt;/div&gt;&quot; in the contenteditable area, it was selected, and the font and text size were changed with execCommand:
&lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; face=&quot;Courier&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;one&lt;/span&gt;&lt;/font&gt;&lt;/div&gt; &lt;div&gt;&lt;font class=&quot;Apple-style-span&quot; face=&quot;Courier&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;two&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129600</commentid>
    <comment_count>1</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2009-07-02 15:26:58 -0700</bug_when>
    <thetext>+ojan, who was looking recently into copy/paste in rich text issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136119</commentid>
    <comment_count>2</comment_count>
      <attachid>33862</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-31 01:48:44 -0700</bug_when>
    <thetext>Created attachment 33862
demonstrates the bug by indent/outdent

I think this is a bug in ReplaceSelectionCommand.  In particular, I suspect it&apos;s in createMarkup.  For this reason, this bug can be demonstrated by indent/outdent as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136213</commentid>
    <comment_count>3</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-07-31 12:22:21 -0700</bug_when>
    <thetext>In one document I have:

&lt;style&gt;div{font-family:Courier; font-size:small;}&lt;/style&gt;
&lt;div&gt;one&lt;/div&gt;
&lt;div&gt;two&lt;/div&gt;

In another:

&lt;div id=&quot;div&quot; contentEditable=&quot;true&quot;&gt;&lt;/div&gt;
&lt;input type=&quot;button&quot; value=&quot;click&quot; onClick=&quot;alert(document.getElementById(&apos;div&apos;).innerHTML)&quot;&gt;

I copy from the first and paste intot he second, then inspect the markup, and I don&apos;t have the redundant span that you describe.  What am I missing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136215</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-31 12:30:42 -0700</bug_when>
    <thetext>Copy &amp; paste bug appears when
1. There is style applied outside of the region copied (must be block)
2. The region being copied contains at least two block elements with at least one having a different style than outside region.

On TOT, copying &amp; paste the following HTML reproduces the bug. 
&lt;div style=&quot;text-decoration: none;&quot;&gt;
&lt;div style=&quot;font-weight: bold;&quot;&gt;one&lt;/div&gt;
&lt;div&gt;two&lt;/div&gt;
&lt;/div&gt;

These bugs are caused by the lines 1010-1039 of markup.cpp.  In particular, we shouldn&apos;t be adding span if the fragment we copied contained any block element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136326</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2009-07-31 18:20:11 -0700</bug_when>
    <thetext>It turned out that fixing this bug is rather challenging because so much of existing code depends on the fact that we pass Apple-style-span.  In particular, when we add div, we end up producing a lot of extra div&apos;s, and removing them later is hard because removing arbitrary div would cause paragraph to disappear.  What we really need to do is to re-design how we handle style during copy &amp; paste ground up.  Unfortunately, I don&apos;t think I can fix this bug anytime soon.

Here is my note for future reference.

1. The bug is caused by the last two calls to addStyleMarkup in createMarkup.

2. I added new boolean type to getStartMarkup that keeps track of whether we encountered block flow element yet or not.  If we did, then we should use div instead of span as the wrapping node.  But it turned out that this is not a sufficient condition beacuse if we have a &lt;span&gt;foo&lt;/span&gt;&lt;div&gt;bar&lt;/div&gt;, and copy and paste this, we should not be wrapping it with a div.

3. To remove redundant styles and divs, I edited handleStyleSpans and handleStyleSpansBeforeInsertion.  But removing extra div caused another problem that we don&apos;t know whether we can remove a given div safely or not.

4. For the re-deign of copy&amp;paste logic, we should push down all relevant comptuedStyles to each root node we&apos;re copying.  e.g. when we&apos;re copying &lt;span&gt;foo&lt;/span&gt;&lt;div&gt;bar&lt;/div&gt;, we should apply computedStyles to each span and div node, instead of adding extra node to preserve style.  This would prevent us from producing extra spans and there will be no need to remove span&apos;s/div&apos;s later.

With this approach, only case in which we might need to produce a span is when we have a plain text and copying it without wrapping HTML element.  But this is highly unlikely because we can safely assume that any text node is a child of some HTML element that applies the style to the text.  If there was no HTML element to split, then we should treat it as plain text anyways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185690</commentid>
    <comment_count>6</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-01-28 18:56:16 -0800</bug_when>
    <thetext>I&apos;m unable to repro this bug.  In the original test case, when I paste the HTML, I get:

&lt;div style=&quot;font-family: Courier; font-size: small; &quot;&gt;one&lt;/div&gt;&lt;div style=&quot;font-family: Courier; font-size: small; &quot;&gt;two&lt;/div&gt;

I tested in Chrome Mac (4.0.302.2) and Safari (4.0.4 (5531.21.10).

In the attachment by Ryosuke, the underline is preserved and the &quot;after&quot; html is:
a &lt;blockquote class=&quot;webkit-indent-blockquote&quot; style=&quot;margin: 0 0 0 40px; border: none; padding: 0px;&quot;&gt;&lt;/blockquote&gt;&lt;div id=&quot;start&quot; style=&quot;text-decoration: underline; display: inline !important; &quot;&gt;hello&lt;/div&gt;&lt;br&gt;&lt;div id=&quot;end&quot;&gt;world&lt;/div&gt; b

The empty blockquote is a little unfortunate, but it doesn&apos;t seem to cause problems in this test.

Is this bug still valid?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185704</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-01-28 19:57:51 -0800</bug_when>
    <thetext>Tony, new reproduction steps,

1. go to http://www.mozilla.org/editor/midasdemo/
2. paste
&lt;div style=&quot;text-decoration: none;&quot;&gt;
&lt;div style=&quot;font-weight: bold;&quot;&gt;one&lt;/div&gt;
&lt;div&gt;two&lt;/div&gt;
&lt;/div&gt;
3. go to rich text editing and select all
4. cut &amp; paste

actual (r53842):
&lt;div style=&quot;text-decoration: none;&quot;&gt; &lt;div style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal; &quot;&gt;&lt;div style=&quot;font-weight: bold; &quot;&gt;one&lt;/div&gt;&lt;div&gt;two&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;

expected:
no div inside a span.

Look at my comments 4-5. This bug addresses one serious issue in createMarkup, and now styles are handled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185717</commentid>
    <comment_count>8</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-01-28 21:04:00 -0800</bug_when>
    <thetext>Ah, that repros for me.  Thanks for the updated test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186793</commentid>
    <comment_count>9</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-02-01 21:23:42 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; 4. For the re-deign of copy&amp;paste logic, we should push down all relevant
&gt; comptuedStyles to each root node we&apos;re copying.  e.g. when we&apos;re copying
&gt; &lt;span&gt;foo&lt;/span&gt;&lt;div&gt;bar&lt;/div&gt;, we should apply computedStyles to each span and
&gt; div node, instead of adding extra node to preserve style.  This would prevent
&gt; us from producing extra spans and there will be no need to remove span&apos;s/div&apos;s
&gt; later.

I looked into this, but it&apos;s a bit tricky because the point where generate the computedStyle is after we&apos;ve generated the markup as a string.  I guess we could convert into a document fragment so we could add these styles, but that seems slow.

We could also handle this on the paste side.  In ReplaceSelectionCommand::handleStyleSpan, we could take the style span attributes and move them to the child nodes like you suggest doing during the copy.  This would result in less styles copied and ideally in the example you&apos;d get:
&lt;div style=&quot;text-decoration: none;&quot;&gt; &lt;div style=&quot;font-weight: bold;&quot;&gt;&lt;div &gt;one&lt;/div&gt;&lt;div style=&quot;font-weight: normal&gt;two&lt;/div&gt;&lt;/div&gt;

I think the main downside to this approach is that you still have the invalid markup in your clipboard.

Ryosuke, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186828</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-02-01 23:46:53 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I looked into this, but it&apos;s a bit tricky because the point where generate the
&gt; computedStyle is after we&apos;ve generated the markup as a string.  I guess we
&gt; could convert into a document fragment so we could add these styles, but that
&gt; seems slow.

Right, I thought of several different approaches but all of them turned out to be bad because it affects so many other places and causes a lot of problems for us. And we definitely don&apos;t want to convert back to a document fragment for the reason you mentioned.

&gt; We could also handle this on the paste side.  In
&gt; ReplaceSelectionCommand::handleStyleSpan, we could take the style span
&gt; attributes and move them to the child nodes like you suggest doing during the
&gt; copy.  This would result in less styles copied and ideally in the example you&apos;d
&gt; get:
&gt; &lt;div style=&quot;text-decoration: none;&quot;&gt; &lt;div style=&quot;font-weight: bold;&quot;&gt;&lt;div
&gt; &gt;one&lt;/div&gt;&lt;div style=&quot;font-weight: normal&gt;two&lt;/div&gt;&lt;/div&gt;

This was one of the suggestions I got as well but...

&gt; I think the main downside to this approach is that you still have the invalid
&gt; markup in your clipboard.

This is a quite serious problem as users may use other Web browsers and word processors while using WebKit. We probably want more input from other reviewers/committers because if we fix this problem by introducing new code on the paste side, it might have a profound impact on how we implement other editing code later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187002</commentid>
    <comment_count>11</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-02-02 09:24:56 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; I looked into this, but it&apos;s a bit tricky because the point where generate the
&gt; &gt; computedStyle is after we&apos;ve generated the markup as a string.  I guess we
&gt; &gt; could convert into a document fragment so we could add these styles, but that
&gt; &gt; seems slow.
&gt; 
&gt; Right, I thought of several different approaches but all of them turned out to
&gt; be bad because it affects so many other places and causes a lot of problems for
&gt; us. And we definitely don&apos;t want to convert back to a document fragment for the
&gt; reason you mentioned.
&gt; 
&gt; &gt; We could also handle this on the paste side.  In
&gt; &gt; ReplaceSelectionCommand::handleStyleSpan, we could take the style span
&gt; &gt; attributes and move them to the child nodes like you suggest doing during the
&gt; &gt; copy.  This would result in less styles copied and ideally in the example you&apos;d
&gt; &gt; get:
&gt; &gt; &lt;div style=&quot;text-decoration: none;&quot;&gt; &lt;div style=&quot;font-weight: bold;&quot;&gt;&lt;div
&gt; &gt; &gt;one&lt;/div&gt;&lt;div style=&quot;font-weight: normal&gt;two&lt;/div&gt;&lt;/div&gt;
&gt; 
&gt; This was one of the suggestions I got as well but...
&gt; 
&gt; &gt; I think the main downside to this approach is that you still have the invalid
&gt; &gt; markup in your clipboard.
&gt; 
&gt; This is a quite serious problem as users may use other Web browsers and word
&gt; processors while using WebKit. We probably want more input from other
&gt; reviewers/committers because if we fix this problem by introducing new code on
&gt; the paste side, it might have a profound impact on how we implement other
&gt; editing code later.

I think that trying to address the problem on the paste side is correct.
If you try the same repro steps, but instead of pasting back to the same editable area you paste into a different one (or you press delete after cut to wipe out any remaining markup), you&apos;ll have a much simpler markup.
All the copy code can do, is capture is the computed style on the selection and add as much style as needed to fully describe it. It is up to the paste code, that knows about the style of the destination to perform any optimization, also because we could be pasting markup that has been placed on the pasteboard by something other than WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187289</commentid>
    <comment_count>12</comment_count>
      <attachid>48000</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-02-03 00:46:37 -0800</bug_when>
    <thetext>Created attachment 48000
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187290</commentid>
    <comment_count>13</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-02-03 00:50:07 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=48000) [details]
&gt; Patch

This is an example of handling the extra span on paste.  After this, I think all the code paths in handleStyleSpans remove the style span.  With this patch, when I paste the example in comment #7 I get:

&lt;div style=&quot;text-decoration: none;&quot;&gt; &lt;div style=&quot;font-weight: bold;&quot;&gt;&lt;div style=&quot;font-weight: bold; &quot;&gt;one&lt;/div&gt;&lt;div style=&quot;font-weight: normal; &quot;&gt;two&lt;/div&gt;&lt;/div&gt; &lt;/div&gt;

The redundant font-weight:bold is a bit unfortunate, but it&apos;s better than before.

I still need a layouttest, but I have to run now.  Enrica, is this like what you&apos;re suggesting?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187422</commentid>
    <comment_count>14</comment_count>
      <attachid>48000</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-02-03 10:17:58 -0800</bug_when>
    <thetext>Comment on attachment 48000
Patch

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 67f5b56..c65fe8b 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,19 @@
&gt; +2010-02-03  Tony Chang  &lt;tony@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Copying and pasting into a contenteditable area can create &lt;div&gt;s surrounded by &lt;span&gt;s
&gt; +
&gt; +        This happens because of a span added when we copy that is used to
&gt; +        preserve styles.  To avoid this, when we paste, make sure to apply
&gt; +        the styles to the span&apos;s children and then remove the style span.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=26937
&gt; +
&gt; +        No new tests. (OOPS!)
&gt; +
&gt; +        * editing/ReplaceSelectionCommand.cpp:
&gt; +        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
&gt; +
&gt;  2010-02-02  Steve Falkenburg  &lt;sfalken@apple.com&gt;
&gt;  
&gt;          Reviewed by Darin Adler.
&gt; diff --git a/WebCore/editing/ReplaceSelectionCommand.cpp b/WebCore/editing/ReplaceSelectionCommand.cpp
&gt; index 85a4471..49189e5 100644
&gt; --- a/WebCore/editing/ReplaceSelectionCommand.cpp
&gt; +++ b/WebCore/editing/ReplaceSelectionCommand.cpp
&gt; @@ -638,10 +638,20 @@ void ReplaceSelectionCommand::handleStyleSpans()
&gt;      }
&gt;      
&gt;      // There are non-redundant styles on sourceDocumentStyleSpan, but there is no
&gt; -    // copiedRangeStyleSpan.  Clear the redundant styles from sourceDocumentStyleSpan
&gt; -    // and return.
&gt; +    // copiedRangeStyleSpan.  Remove the span, because it could be surrounding block elements,
&gt; +    // and apply the styles to its children.
&gt;      if (sourceDocumentStyle-&gt;length() &gt; 0 &amp;&amp; !copiedRangeStyleSpan) {
&gt; -        setNodeAttribute(static_cast&lt;Element*&gt;(sourceDocumentStyleSpan), styleAttr, sourceDocumentStyle-&gt;cssText());
&gt; +        for (Node* childNode = sourceDocumentStyleSpan-&gt;firstChild(); childNode; childNode = childNode-&gt;nextSibling()) {
&gt; +            if (!childNode-&gt;isHTMLElement())
&gt; +                continue;
&gt; +            RefPtr&lt;CSSMutableStyleDeclaration&gt; newStyles = sourceDocumentStyle-&gt;copy();
&gt; +            HTMLElement* childElement = static_cast&lt;HTMLElement*&gt;(childNode);
&gt; +            RefPtr&lt;CSSMutableStyleDeclaration&gt; existingStyles = childElement-&gt;getInlineStyleDecl()-&gt;copy();
&gt; +            existingStyles-&gt;merge(newStyles.get(), false);
&gt; +            setNodeAttribute(childElement, styleAttr, existingStyles-&gt;cssText());
&gt; +        }
&gt; +
&gt; +        removeNodePreservingChildren(sourceDocumentStyleSpan);
&gt;          return;
&gt;      }
&gt;      

Yes, that&apos;s the idea. I like it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187568</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-02-03 17:46:40 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=48000) [details]
&gt; Patch

It looks nice but is it guaranteed that sourceDocumentStyleSpan always has a child?  What if the fragment was &lt;span class=&quot;Apple-style-span&quot; style=&quot;...&quot;&gt;&amp;nbsp;&lt;/span&gt;?  Another concern is that the fact that malformed HTML is copied into clipboard will be forgotten if this bug was fixed at the pasting time. I think we should file another bug that address this issue if there isn&apos;t one already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187649</commentid>
    <comment_count>16</comment_count>
      <attachid>48104</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-02-03 23:55:31 -0800</bug_when>
    <thetext>Created attachment 48104
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187654</commentid>
    <comment_count>17</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-02-04 00:03:13 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; It looks nice but is it guaranteed that sourceDocumentStyleSpan always has a
&gt; child?  What if the fragment was &lt;span class=&quot;Apple-style-span&quot;
&gt; style=&quot;...&quot;&gt;&amp;nbsp;&lt;/span&gt;?

You&apos;re right; I hadn&apos;t run the layout tests yet.  This version handles that by copying the span tag to each child that&apos;s not a block (like text nodes) so in those cases, it&apos;s not much different than before (i.e., the generated HTML will be the same as before).

&gt; Another concern is that the fact that malformed
&gt; HTML is copied into clipboard will be forgotten if this bug was fixed at the
&gt; pasting time. I think we should file another bug that address this issue if
&gt; there isn&apos;t one already.

Ok, but 34564 filed.

New patch that passes layout tests up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191224</commentid>
    <comment_count>18</comment_count>
      <attachid>48104</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-17 14:37:16 -0800</bug_when>
    <thetext>Comment on attachment 48104
Patch

I&apos;m surprised the &quot;wrap in span&quot; logic doesn&apos;t already exist somewhere.

Otherwise this looks OK to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191325</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-02-17 17:37:53 -0800</bug_when>
    <thetext>It might be sensible to use ApplyStyleCommand here. Because if we&apos;re applying style, we might want to consider converting them to u, i, etc... tags as well.

@Tony, have you looked into this point? i.e. when user is editing html in styleWithCSS=false, doesn&apos;t your code provide new style attribute rather than decorating them with tags?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191415</commentid>
    <comment_count>20</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-02-17 22:35:30 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; It might be sensible to use ApplyStyleCommand here. Because if we&apos;re applying
&gt; style, we might want to consider converting them to u, i, etc... tags as well.
&gt; 
&gt; @Tony, have you looked into this point? i.e. when user is editing html in
&gt; styleWithCSS=false, doesn&apos;t your code provide new style attribute rather than
&gt; decorating them with tags?

I hadn&apos;t looked into it, so I tried it locally.  There are a couple problems with using apply style:

1) In some cases, ApplyStyleCommand copies nodes.  This causes some nodes pointed to by ReplaceSelectionCommand to become stale.  This is probably fixable, but non-trivial.

2) It would mean rebaselining a a few dozen tests.  Since we always put a span on the pasteboard, these tests expect the span when pasted, regardless of whether we&apos;re in stylewithcss mode or not.

I think it&apos;s possible, but it&apos;s not really regressing anything here.  Previously we had a span around divs with styleWithCSS=false.  Maybe file a new bug about this?  I&apos;m not sure it&apos;s worth the effort to fix (i.e., I&apos;m not sure what actual sites are impacted by not honoring styleWithCSS when pasting).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191422</commentid>
    <comment_count>21</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-02-17 23:12:28 -0800</bug_when>
    <thetext>Committed r54933: &lt;http://trac.webkit.org/changeset/54933&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192340</commentid>
    <comment_count>22</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-02-21 20:23:06 -0800</bug_when>
    <thetext>*** Bug 26633 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>33862</attachid>
            <date>2009-07-31 01:48:44 -0700</date>
            <delta_ts>2009-07-31 01:48:44 -0700</delta_ts>
            <desc>demonstrates the bug by indent/outdent</desc>
            <filename>span-div.html</filename>
            <type>text/html</type>
            <size>960</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5Pgo8cD5UaGlzIHRlc3RzIHJlbW92aW5nIHVuZGVybGluZSBzZXQgYnkgYW4g
dSBlbGVtZW50LjwvcD4KPGRpdiBpZD0iZSIgY29udGVudGVkaXRhYmxlPSJ0cnVlIj4KYQo8ZGl2
IGlkPSJzdGFydCIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+aGVsbG88L2Rp
dj4KPGRpdiBpZD0iZW5kIj53b3JsZDwvZGl2PgpiCjwvZGl2PgoKPHVsPgo8bGk+QmVmb3JlOiA8
c3BhbiBpZD0iYzEiPjwvc3Bhbj48L2xpPgo8bGk+QWZ0ZXI6IDxzcGFuIGlkPSJjMiI+PC9zcGFu
PjwvbGk+CjwvdWw+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgppZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOwoKdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOwpkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnYzEnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZScpLmlubmVySFRNTCkpOwoKdmFyIHMgPSB3aW5kb3cu
Z2V0U2VsZWN0aW9uKCk7CnZhciByID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKCnIuc2V0U3Rh
cnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXJ0JyksIDApOwpyLnNldEVuZChkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnZW5kJyksIDEpOwpzLnJlbW92ZUFsbFJhbmdlcygpOwpzLmFkZFJh
bmdlKHIpOwpkb2N1bWVudC5leGVjQ29tbWFuZCgiSW5kZW50IiwgZmFsc2UsIG51bGwpOwpkb2N1
bWVudC5leGVjQ29tbWFuZCgiT3V0ZGVudCIsIGZhbHNlLCBudWxsKTsKCmRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdjMicpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdlJykuaW5uZXJIVE1MKSk7Cgo8L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48000</attachid>
            <date>2010-02-03 00:46:37 -0800</date>
            <delta_ts>2010-02-03 23:55:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-26937-20100203174635.patch</filename>
            <type>text/plain</type>
            <size>2407</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjdmNWI1Ni4uYzY1ZmU4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0wMi0wMyAgVG9ueSBDaGFuZyAg
PHRvbnlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENvcHlpbmcgYW5kIHBhc3RpbmcgaW50byBhIGNvbnRlbnRlZGl0YWJsZSBh
cmVhIGNhbiBjcmVhdGUgPGRpdj5zIHN1cnJvdW5kZWQgYnkgPHNwYW4+cworCisgICAgICAgIFRo
aXMgaGFwcGVucyBiZWNhdXNlIG9mIGEgc3BhbiBhZGRlZCB3aGVuIHdlIGNvcHkgdGhhdCBpcyB1
c2VkIHRvCisgICAgICAgIHByZXNlcnZlIHN0eWxlcy4gIFRvIGF2b2lkIHRoaXMsIHdoZW4gd2Ug
cGFzdGUsIG1ha2Ugc3VyZSB0byBhcHBseQorICAgICAgICB0aGUgc3R5bGVzIHRvIHRoZSBzcGFu
J3MgY2hpbGRyZW4gYW5kIHRoZW4gcmVtb3ZlIHRoZSBzdHlsZSBzcGFuLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5MzcKKworICAgICAgICBObyBu
ZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omhh
bmRsZVN0eWxlU3BhbnMpOgorCiAyMDEwLTAyLTAyICBTdGV2ZSBGYWxrZW5idXJnICA8c2ZhbGtl
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA4NWE0NDcxLi40OTE4
OWU1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAg
LTYzOCwxMCArNjM4LDIwIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0
eWxlU3BhbnMoKQogICAgIH0KICAgICAKICAgICAvLyBUaGVyZSBhcmUgbm9uLXJlZHVuZGFudCBz
dHlsZXMgb24gc291cmNlRG9jdW1lbnRTdHlsZVNwYW4sIGJ1dCB0aGVyZSBpcyBubwotICAgIC8v
IGNvcGllZFJhbmdlU3R5bGVTcGFuLiAgQ2xlYXIgdGhlIHJlZHVuZGFudCBzdHlsZXMgZnJvbSBz
b3VyY2VEb2N1bWVudFN0eWxlU3BhbgotICAgIC8vIGFuZCByZXR1cm4uCisgICAgLy8gY29waWVk
UmFuZ2VTdHlsZVNwYW4uICBSZW1vdmUgdGhlIHNwYW4sIGJlY2F1c2UgaXQgY291bGQgYmUgc3Vy
cm91bmRpbmcgYmxvY2sgZWxlbWVudHMsCisgICAgLy8gYW5kIGFwcGx5IHRoZSBzdHlsZXMgdG8g
aXRzIGNoaWxkcmVuLgogICAgIGlmIChzb3VyY2VEb2N1bWVudFN0eWxlLT5sZW5ndGgoKSA+IDAg
JiYgIWNvcGllZFJhbmdlU3R5bGVTcGFuKSB7Ci0gICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KHNvdXJjZURvY3VtZW50U3R5bGVTcGFuKSwgc3R5bGVBdHRyLCBz
b3VyY2VEb2N1bWVudFN0eWxlLT5jc3NUZXh0KCkpOworICAgICAgICBmb3IgKE5vZGUqIGNoaWxk
Tm9kZSA9IHNvdXJjZURvY3VtZW50U3R5bGVTcGFuLT5maXJzdENoaWxkKCk7IGNoaWxkTm9kZTsg
Y2hpbGROb2RlID0gY2hpbGROb2RlLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBpZiAo
IWNoaWxkTm9kZS0+aXNIVE1MRWxlbWVudCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBuZXdTdHlsZXMg
PSBzb3VyY2VEb2N1bWVudFN0eWxlLT5jb3B5KCk7CisgICAgICAgICAgICBIVE1MRWxlbWVudCog
Y2hpbGRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihjaGlsZE5vZGUpOworICAg
ICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBleGlzdGluZ1N0eWxl
cyA9IGNoaWxkRWxlbWVudC0+Z2V0SW5saW5lU3R5bGVEZWNsKCktPmNvcHkoKTsKKyAgICAgICAg
ICAgIGV4aXN0aW5nU3R5bGVzLT5tZXJnZShuZXdTdHlsZXMuZ2V0KCksIGZhbHNlKTsKKyAgICAg
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoY2hpbGRFbGVtZW50LCBzdHlsZUF0dHIsIGV4aXN0aW5n
U3R5bGVzLT5jc3NUZXh0KCkpOworICAgICAgICB9CisKKyAgICAgICAgcmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbihzb3VyY2VEb2N1bWVudFN0eWxlU3Bhbik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48104</attachid>
            <date>2010-02-03 23:55:31 -0800</date>
            <delta_ts>2010-02-17 14:37:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-26937-20100204165529.patch</filename>
            <type>text/plain</type>
            <size>15324</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1YmZmOGI0Li41NGM4OGNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDIt
MDMgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjY5MzcKKyAgICAgICAgTm8gbG9uZ2VyIGFsbG93IHNwYW4gc3R5bGVzIHRv
IHN1cnJvdW5kIGJsb2NrIGVsZW1lbnRzIGxpa2UKKyAgICAgICAgZGl2cyB3aGVuIHBhc3Rpbmcg
KHNlZSBwYXN0ZS10ZXh0LTAxMiBhbmQgNTA2NTYwNSB3aGljaCBoYWQgZGl2cyBpbgorICAgICAg
ICBzcGFucykuICBUaGlzIGFsc28gY2F1c2VzIGEgZmV3IGNhc2VzIG9mIGVtcHR5IHNwYW5zIHRv
IGJlIHJlbW92ZWQKKyAgICAgICAgKHNlZSAxOTA4OSBhbmQgNTI0NTUxOSkuCisKKyAgICAgICAg
KiBlZGl0aW5nL2V4ZWNDb21tYW5kLzE5MDg5LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBlZGl0
aW5nL3Bhc3RlYm9hcmQvNTI0NTUxOS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZWRpdGluZy9w
YXN0ZWJvYXJkLzUyNDU1MTkuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZWRpdGluZy9w
YXN0ZWJvYXJkLzUwNjU2MDUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9l
ZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0wMTEtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0wMTItZXhwZWN0ZWQu
dHh0OgorCiAyMDEwLTAyLTAzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC8xOTA4OS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzE5MDg5LWV4cGVjdGVkLnR4dAppbmRleCAyMjM2NDVl
Li43M2Q4ZGEyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzE5
MDg5LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzE5
MDg5LWV4cGVjdGVkLnR4dApAQCAtMSwyICsxLDIgQEAKIFRoaXMgdGVzdHMgdG8gbWFrZSBzdXJl
IGFuIEFTU0VSVCBkb2Vzbid0IGZpcmUgd2hlbiBwZXJmb3JtaW5nIGEgRm9ybWF0QmxvY2sgb3Bl
cmF0aW9uIG9uIGEgc2VsZWN0aW9uIHRoYXQgZW5kcyBqdXN0IGFmdGVyIGEgaG9yaXpvbnRhbCBy
dWxlIHRoYXQgaXMgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQuIFRoZSB0ZXN0IHNo
b3VsZCBub3QgYXNzZXJ0LgotPHByZT48c3BhbiBjbGFzcz0iQXBwbGUtc3R5bGUtc3BhbiIgc3R5
bGU9ImZvbnQtZmFtaWx5OiBUaW1lczsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgIj48aHI+PC9zcGFu
PjwvcHJlPgorPHByZT48aHI+PC9wcmU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5n
L3Bhc3RlYm9hcmQvNTI0NTUxOS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bh
c3RlYm9hcmQvNTI0NTUxOS1leHBlY3RlZC50eHQKaW5kZXggNjQ1OTA5Yy4uNzYyYjE4ZCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkLzUyNDU1MTktZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC81MjQ1NTE5LWV4cGVjdGVk
LnR4dApAQCAtMSwyICsxLDIgQEAKLVRoaXMgdGVzdHMgZm9yIGEgY3Jhc2ggd2hlbiBwYXN0aW5n
IGNvbnRlbnQgdGhhdCBjb250YWlucyBBcHBsZS1zdHlsZS1zcGFucyB0aGF0IGRvbid0IGhhdmUg
cmVuZGVyZXJzLicgWW91IHNob3VsZCBzZWUgJ0hlbGxvIFdvcmxkIScgV2UgZG9uJ3QgY3VycmVu
dGx5IHJlbW92ZSB0aGUgZW1wdHkgaW52aXNpYmxlIHN0eWxlIHNwYW4gYXQgcGFzdGUgdGltZSBi
ZWNhdXNlIGl0IGRvZXNuJ3QgYW50aWNpcGF0ZSBlbmNvdW50ZXJpbmcgbm9uLWluaGVyaXRhYmxl
IHN0eWxlcyBvbiBzdHlsZSBzcGFucywgYmVjYXVzZSB3ZSBuZXZlciBjcmVhdGUgdGhvc2UgYXQg
Y29weSB0aW1lLgotSGVsbG8gPHNwYW4gc3R5bGU9ImRpc3BsYXk6IG5vbmU7ICIgY2xhc3M9IkFw
cGxlLXN0eWxlLXNwYW4iPjwvc3Bhbj5Xb3JsZCEKK1RoaXMgdGVzdHMgZm9yIGEgY3Jhc2ggd2hl
biBwYXN0aW5nIGNvbnRlbnQgdGhhdCBjb250YWlucyBBcHBsZS1zdHlsZS1zcGFucyB0aGF0IGRv
bid0IGhhdmUgcmVuZGVyZXJzLicgWW91IHNob3VsZCBzZWUgJ0hlbGxvIFdvcmxkIScKK0hlbGxv
IFdvcmxkIQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkLzUyNDU1
MTkuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC81MjQ1NTE5Lmh0bWwKaW5k
ZXggZTY5MjU0YS4uODNhYzhjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0
ZWJvYXJkLzUyNDU1MTkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQv
NTI0NTUxOS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPGRpdiBpZD0iZGVzY3JpcHRpb24iPlRoaXMg
dGVzdHMgZm9yIGEgY3Jhc2ggd2hlbiBwYXN0aW5nIGNvbnRlbnQgdGhhdCBjb250YWlucyBBcHBs
ZS1zdHlsZS1zcGFucyB0aGF0IGRvbid0IGhhdmUgcmVuZGVyZXJzLicgWW91IHNob3VsZCBzZWUg
J0hlbGxvIFdvcmxkIScgV2UgZG9uJ3QgY3VycmVudGx5IHJlbW92ZSB0aGUgZW1wdHkgaW52aXNp
YmxlIHN0eWxlIHNwYW4gYXQgcGFzdGUgdGltZSBiZWNhdXNlIGl0IGRvZXNuJ3QgYW50aWNpcGF0
ZSBlbmNvdW50ZXJpbmcgbm9uLWluaGVyaXRhYmxlIHN0eWxlcyBvbiBzdHlsZSBzcGFucywgYmVj
YXVzZSB3ZSBuZXZlciBjcmVhdGUgdGhvc2UgYXQgY29weSB0aW1lLjwvZGl2PgorPGRpdiBpZD0i
ZGVzY3JpcHRpb24iPlRoaXMgdGVzdHMgZm9yIGEgY3Jhc2ggd2hlbiBwYXN0aW5nIGNvbnRlbnQg
dGhhdCBjb250YWlucyBBcHBsZS1zdHlsZS1zcGFucyB0aGF0IGRvbid0IGhhdmUgcmVuZGVyZXJz
LicgWW91IHNob3VsZCBzZWUgJ0hlbGxvIFdvcmxkISc8L2Rpdj4KIDxkaXYgaWQ9ImVkaXQiIGNv
bnRlbnRlZGl0YWJsZT0idHJ1ZSI+PGJyPjwvZGl2PgogCiA8c2NyaXB0PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC81MDY1NjA1LWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvNTA2
NTYwNS1leHBlY3RlZC50eHQKaW5kZXggNTBmZTUyZC4uNzBiZjhmNyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC81MDY1NjA1LWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9wYXN0ZWJvYXJkLzUw
NjU2MDUtZXhwZWN0ZWQudHh0CkBAIC0yMiwxMiArMjIsMTIgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCiAgICAgICAgICAgICAgICAgUmVuZGVySW5saW5lIHtGT05UfSBhdCAoMCwwKSBz
aXplIDE0OHgxOCBbY29sb3I9I0ZGMDAwMF0KICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDE0OHgxOAogICAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMCwwKSB3aWR0aCAxNDg6ICJUaGlzIHRleHQgc2hvdWxkIGJlIHJlZC4iCi0gICAgICAg
ICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDAsMTgpIHNpemUgNzg0eDE4Ci0gICAgICAg
ICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCwwKSBzaXplIDc4NHgxOAorICAgICAgICAgIFJl
bmRlckJsb2NrIChhbm9ueW1vdXMpIGF0ICgwLDE4KSBzaXplIDc4NHgxOCBbY29sb3I9I0ZGMDAw
MF0KKyAgICAgICAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgwLDApIHNpemUgNzg0eDE4IFtj
b2xvcj0jMDAwMDAwXQogICAgICAgICAgICAgICBSZW5kZXJJbmxpbmUge0ZPTlR9IGF0ICgwLDAp
IHNpemUgMTQ4eDE4IFtjb2xvcj0jRkYwMDAwXQogICAgICAgICAgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDE0OHgxOAogICAgICAgICAgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsMCkgd2lkdGggMTQ4OiAiVGhpcyB0ZXh0IHNob3VsZCBiZSByZWQuIgogICAgICAgICAg
IFJlbmRlckJsb2NrIChhbm9ueW1vdXMpIGF0ICgwLDM2KSBzaXplIDc4NHgwCiAgICAgICAgICAg
ICBSZW5kZXJJbmxpbmUge0ZPTlR9IGF0ICgwLDApIHNpemUgMHgwIFtjb2xvcj0jRkYwMDAwXQot
ICAgICAgICAgICAgICBSZW5kZXJJbmxpbmUge1NQQU59IGF0ICgwLDApIHNpemUgMHgwIFtjb2xv
cj0jMDAwMDAwXQotY2FyZXQ6IHBvc2l0aW9uIDI0IG9mIGNoaWxkIDAgeyN0ZXh0fSBvZiBjaGls
ZCAwIHtGT05UfSBvZiBjaGlsZCAxIHtESVZ9IG9mIGNoaWxkIDAge1NQQU59IG9mIGNoaWxkIDAg
e0ZPTlR9IG9mIGNoaWxkIDIge0RJVn0gb2YgY2hpbGQgMiB7RElWfSBvZiBjaGlsZCAxIHtCT0RZ
fSBvZiBjaGlsZCAwIHtIVE1MfSBvZiBkb2N1bWVudAorICAgICAgICAgICAgUmVuZGVySW5saW5l
IHtGT05UfSBhdCAoMCwwKSBzaXplIDB4MCBbY29sb3I9I0ZGMDAwMF0KK2NhcmV0OiBwb3NpdGlv
biAyNCBvZiBjaGlsZCAwIHsjdGV4dH0gb2YgY2hpbGQgMCB7Rk9OVH0gb2YgY2hpbGQgMSB7RElW
fSBvZiBjaGlsZCAwIHtGT05UfSBvZiBjaGlsZCAyIHtESVZ9IG9mIGNoaWxkIDIge0RJVn0gb2Yg
Y2hpbGQgMSB7Qk9EWX0gb2YgY2hpbGQgMCB7SFRNTH0gb2YgZG9jdW1lbnQKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0w
MTEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVi
b2FyZC9wYXN0ZS10ZXh0LTAxMS1leHBlY3RlZC50eHQKaW5kZXggOGU2OTY4Zi4uNjJkODI1YiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvcGFzdGVib2FyZC9w
YXN0ZS10ZXh0LTAxMS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS10ZXh0LTAxMS1leHBlY3RlZC50eHQKQEAgLTksNyAr
OSw3IEBAIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3
RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6
IHNob3VsZEluc2VydE5vZGU6I2RvY3VtZW50LWZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOnJh
bmdlIGZyb20gMCBvZiBQID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMCBvZiBQID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3Rl
ZAogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFu
Z2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gNSBvZiAjdGV4
dCA+IEIgPiBGT05UID4gUCA+IFNQQU4gPiBCID4gRk9OVCA+IFAgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCB0byA1IG9mICN0ZXh0ID4gQiA+IEZPTlQgPiBQID4gU1BBTiA+IEIgPiBGT05UID4g
UCA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlE
b3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRD
aGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJhbmdlIGZyb20gNSBvZiAj
dGV4dCA+IEIgPiBGT05UID4gUCA+IEIgPiBGT05UID4gUCA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvIDUgb2YgI3RleHQgPiBCID4gRk9OVCA+IFAgPiBCID4gRk9OVCA+IFAgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBz
dGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERF
TEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KIGxh
eWVyIGF0ICgwLDApIHNpemUgODAweDYwMApAQCAtMzEsNyArMzEsNiBAQCBsYXllciBhdCAoMCww
KSBzaXplIDgwMHg2MDAKICAgICAgICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDAsMCkg
c2l6ZSA3ODR4MAogICAgICAgICAgIFJlbmRlcklubGluZSB7Rk9OVH0gYXQgKDAsMCkgc2l6ZSAw
eDAKICAgICAgICAgICAgIFJlbmRlcklubGluZSB7Qn0gYXQgKDAsMCkgc2l6ZSAweDAKLSAgICAg
ICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgICBS
ZW5kZXJCbG9jayAoYW5vbnltb3VzKSBhdCAoMCwwKSBzaXplIDc4NHg1OAogICAgICAgICAgIFJl
bmRlckJsb2NrIHtQfSBhdCAoMCwwKSBzaXplIDc4NHgyMQogICAgICAgICAgICAgUmVuZGVySW5s
aW5lIHtGT05UfSBhdCAoMCwwKSBzaXplIDU1eDIwCkBAIC00Niw1ICs0NSw2IEBAIGxheWVyIGF0
ICgwLDApIHNpemUgODAweDYwMAogICAgICAgICBSZW5kZXJCbG9jayAoYW5vbnltb3VzKSBhdCAo
MCw3NCkgc2l6ZSA3ODR4MAogICAgICAgICAgIFJlbmRlcklubGluZSB7Rk9OVH0gYXQgKDAsMCkg
c2l6ZSAweDAKICAgICAgICAgICAgIFJlbmRlcklubGluZSB7Qn0gYXQgKDAsMCkgc2l6ZSAweDAK
LSAgICAgICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDB4MAotY2Fy
ZXQ6IHBvc2l0aW9uIDUgb2YgY2hpbGQgMCB7I3RleHR9IG9mIGNoaWxkIDAge0J9IG9mIGNoaWxk
IDAge0ZPTlR9IG9mIGNoaWxkIDEge1B9IG9mIGNoaWxkIDAge1NQQU59IG9mIGNoaWxkIDAge0J9
IG9mIGNoaWxkIDAge0ZPTlR9IG9mIGNoaWxkIDQge1B9IG9mIGNoaWxkIDEge0JPRFl9IG9mIGNo
aWxkIDAge0hUTUx9IG9mIGRvY3VtZW50CisgICAgICAgICAgUmVuZGVySW5saW5lIHtGT05UfSBh
dCAoMCwwKSBzaXplIDB4MAorICAgICAgICAgICAgUmVuZGVySW5saW5lIHtCfSBhdCAoMCwwKSBz
aXplIDB4MAorY2FyZXQ6IHBvc2l0aW9uIDUgb2YgY2hpbGQgMCB7I3RleHR9IG9mIGNoaWxkIDAg
e0J9IG9mIGNoaWxkIDAge0ZPTlR9IG9mIGNoaWxkIDEge1B9IG9mIGNoaWxkIDAge0J9IG9mIGNo
aWxkIDAge0ZPTlR9IG9mIGNoaWxkIDQge1B9IG9mIGNoaWxkIDEge0JPRFl9IG9mIGNoaWxkIDAg
e0hUTUx9IG9mIGRvY3VtZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLXRleHQtMDEyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0wMTItZXhwZWN0
ZWQudHh0CmluZGV4IDQyOWUzMDAuLmI3NDMzOTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdGV4dC0wMTItZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUt
dGV4dC0wMTItZXhwZWN0ZWQudHh0CkBAIC03LDcgKzcsNyBAQCBFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmlj
YXRpbwogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24K
IEVESVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2VydE5vZGU6I2RvY3VtZW50LWZyYWdtZW50IHJl
cGxhY2luZ0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCB0byAwIG9mIERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGdpdmVuQWN0aW9uOldl
YlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWQKLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNl
bGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvIDAgb2YgRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5n
ZSBmcm9tIDAgb2YgRElWID4gRElWID4gRElWID4gU1BBTiA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDAgb2YgRElWID4gRElWID4gRElWID4gU1BBTiA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0
aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3Rl
ZERPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
byAwIG9mIERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJv
bSAwIG9mIERJViA+IERJViA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRv
IDAgb2YgRElWID4gRElWID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZm
aW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UK
IEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENo
YW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENo
YW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBsYXllciBhdCAoMCwwKSBzaXplIDgw
MHg2MDAKQEAgLTMyLDE2ICszMiwxMiBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAg
ICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDMyeDI4CiAgICAgICAg
ICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDMyOiAiZm9vIgogICAgICAgUmVuZGVyQmxv
Y2sge0RJVn0gYXQgKDAsMTQwKSBzaXplIDc4NHgxNjAgW2JvcmRlcjogKDJweCBzb2xpZCAjRkYw
MDAwKV0KLSAgICAgICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDE0LDE0KSBzaXplIDc1
NngwCi0gICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDB4MAotICAg
ICAgICBSZW5kZXJCbG9jayAoYW5vbnltb3VzKSBhdCAoMTQsMTQpIHNpemUgNzU2eDEzMgotICAg
ICAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgwLDApIHNpemUgNzU2eDEzMiBbYm9yZGVyOiAo
MnB4IHNvbGlkICNGRjAwMDApXQotICAgICAgICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDE0
LDM4KSBzaXplIDcyOHg4MAotICAgICAgICAgICAgICBSZW5kZXJCbG9jayB7QkxPQ0tRVU9URX0g
YXQgKDQwLDApIHNpemUgNjQ4eDI4Ci0gICAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICgwLDApIHNpemUgMzJ4MjgKLSAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDAp
IHdpZHRoIDMyOiAiZm9vIgotICAgICAgICAgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCw1
Mikgc2l6ZSA3Mjh4MjgKLSAgICAgICAgICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgwLDApIHNp
emUgMHgyOAorICAgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMTQsMTQpIHNpemUgNzU2eDEz
MiBbYm9yZGVyOiAoMnB4IHNvbGlkICNGRjAwMDApXQorICAgICAgICAgIFJlbmRlckJsb2NrIHtE
SVZ9IGF0ICgxNCwzOCkgc2l6ZSA3Mjh4ODAKKyAgICAgICAgICAgIFJlbmRlckJsb2NrIHtCTE9D
S1FVT1RFfSBhdCAoNDAsMCkgc2l6ZSA2NDh4MjgKKyAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgMzJ4MjgKKyAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
MCwwKSB3aWR0aCAzMjogImZvbyIKKyAgICAgICAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgw
LDUyKSBzaXplIDcyOHgyOAorICAgICAgICAgICAgICBSZW5kZXJCUiB7QlJ9IGF0ICgwLDApIHNp
emUgMHgyOAogICAgICAgICBSZW5kZXJCbG9jayAoYW5vbnltb3VzKSBhdCAoMTQsMTQ2KSBzaXpl
IDc1NngwCi0gICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDB4MAot
Y2FyZXQ6IHBvc2l0aW9uIDAgb2YgY2hpbGQgMCB7QlJ9IG9mIGNoaWxkIDEge0RJVn0gb2YgY2hp
bGQgMCB7RElWfSBvZiBjaGlsZCAwIHtESVZ9IG9mIGNoaWxkIDAge1NQQU59IG9mIGNoaWxkIDcg
e0RJVn0gb2YgY2hpbGQgMSB7Qk9EWX0gb2YgY2hpbGQgMCB7SFRNTH0gb2YgZG9jdW1lbnQKK2Nh
cmV0OiBwb3NpdGlvbiAwIG9mIGNoaWxkIDAge0JSfSBvZiBjaGlsZCAxIHtESVZ9IG9mIGNoaWxk
IDAge0RJVn0gb2YgY2hpbGQgMCB7RElWfSBvZiBjaGlsZCA3IHtESVZ9IG9mIGNoaWxkIDEge0JP
RFl9IG9mIGNoaWxkIDAge0hUTUx9IG9mIGRvY3VtZW50CmRpZmYgLS1naXQgYS9XZWJDb3JlL0No
YW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGYxZWU4MTcuLjI1MDQ0N2QgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTAtMDItMDMgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3B5aW5nIGFu
ZCBwYXN0aW5nIGludG8gYSBjb250ZW50ZWRpdGFibGUgYXJlYSBjYW4gY3JlYXRlIDxkaXY+cyBz
dXJyb3VuZGVkIGJ5IDxzcGFuPnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI2OTM3CisKKyAgICAgICAgVGhpcyBoYXBwZW5zIGJlY2F1c2Ugb2YgYSBz
cGFuIGFkZGVkIHdoZW4gd2UgY29weSB0aGF0IGlzIHVzZWQgdG8KKyAgICAgICAgcHJlc2VydmUg
c3R5bGVzLiAgVG8gYXZvaWQgdGhpcywgd2hlbiB3ZSBwYXN0ZSwgbWFrZSBzdXJlIHRvIGFwcGx5
CisgICAgICAgIHRoZSBzdHlsZXMgdG8gdGhlIHNwYW4ncyBjaGlsZHJlbiBhbmQgdGhlbiByZW1v
dmUgdGhlIHN0eWxlIHNwYW4uCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgY292ZXJlZCBieSBl
eGlzdGluZyBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVTdHlsZVNwYW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpjb3B5U3R5bGVUb0NoaWxkcmVuKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmg6CisKIDIwMTAtMDItMDMgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFs
a2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dzIERlYnVnX0FsbCBidWlsZCBmaXguCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA4NWE0NDcx
Li4wNDY0MjQ4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAKQEAgLTYzOCwxMCArNjM4LDExIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omhh
bmRsZVN0eWxlU3BhbnMoKQogICAgIH0KICAgICAKICAgICAvLyBUaGVyZSBhcmUgbm9uLXJlZHVu
ZGFudCBzdHlsZXMgb24gc291cmNlRG9jdW1lbnRTdHlsZVNwYW4sIGJ1dCB0aGVyZSBpcyBubwot
ICAgIC8vIGNvcGllZFJhbmdlU3R5bGVTcGFuLiAgQ2xlYXIgdGhlIHJlZHVuZGFudCBzdHlsZXMg
ZnJvbSBzb3VyY2VEb2N1bWVudFN0eWxlU3BhbgotICAgIC8vIGFuZCByZXR1cm4uCisgICAgLy8g
Y29waWVkUmFuZ2VTdHlsZVNwYW4uICBSZW1vdmUgdGhlIHNwYW4sIGJlY2F1c2UgaXQgY291bGQg
YmUgc3Vycm91bmRpbmcgYmxvY2sgZWxlbWVudHMsCisgICAgLy8gYW5kIGFwcGx5IHRoZSBzdHls
ZXMgdG8gaXRzIGNoaWxkcmVuLgogICAgIGlmIChzb3VyY2VEb2N1bWVudFN0eWxlLT5sZW5ndGgo
KSA+IDAgJiYgIWNvcGllZFJhbmdlU3R5bGVTcGFuKSB7Ci0gICAgICAgIHNldE5vZGVBdHRyaWJ1
dGUoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHNvdXJjZURvY3VtZW50U3R5bGVTcGFuKSwgc3R5bGVB
dHRyLCBzb3VyY2VEb2N1bWVudFN0eWxlLT5jc3NUZXh0KCkpOworICAgICAgICBjb3B5U3R5bGVU
b0NoaWxkcmVuKHNvdXJjZURvY3VtZW50U3R5bGVTcGFuLCBzb3VyY2VEb2N1bWVudFN0eWxlLmdl
dCgpKTsgCisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oc291cmNlRG9jdW1l
bnRTdHlsZVNwYW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNjczLDYgKzY3
NCwzNCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsZVNwYW5zKCkK
ICAgICBzZXROb2RlQXR0cmlidXRlKHN0YXRpY19jYXN0PEVsZW1lbnQqPihjb3BpZWRSYW5nZVN0
eWxlU3BhbiksIHN0eWxlQXR0ciwgY29waWVkUmFuZ2VTdHlsZS0+Y3NzVGV4dCgpKTsKIH0KIAor
Ly8gVGFrZSB0aGUgc3R5bGUgYXR0cmlidXRlIG9mIGEgc3BhbiBhbmQgYXBwbHkgaXQgdG8gaXQn
cyBjaGlsZHJlbiBpbnN0ZWFkLiAgVGhpcyBhbGxvd3MgdXMgdG8KKy8vIGNvbnZlcnQgaW52YWxp
ZCBIVE1MIHdoZXJlIGEgc3BhbiBjb250YWlucyBibG9jayBlbGVtZW50cyBpbnRvIHZhbGlkIEhU
TUwgd2hpbGUgcHJlc2VydmluZworLy8gc3R5bGVzLgordm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6Y29weVN0eWxlVG9DaGlsZHJlbihOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogcGFyZW50U3R5bGUpCit7CisgICAgQVNTRVJUKHBhcmVudE5v
ZGUtPmhhc1RhZ05hbWUoc3BhblRhZykpOworICAgIGZvciAoTm9kZSogY2hpbGROb2RlID0gcGFy
ZW50Tm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZE5vZGU7IGNoaWxkTm9kZSA9IGNoaWxkTm9kZS0+
bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY2hpbGROb2RlLT5pc1RleHROb2RlKCkgfHwg
IWlzQmxvY2soY2hpbGROb2RlKSB8fCBjaGlsZE5vZGUtPmhhc1RhZ05hbWUocHJlVGFnKSkgewor
ICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCBwdXQgYSBzcGFuIHRhZyBhcm91bmQgdGhlIGNo
aWxkIG5vZGUuCisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3U3BhbiA9IHBhcmVudE5vZGUt
PmNsb25lTm9kZShmYWxzZSk7CisgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKHN0YXRpY19j
YXN0PEVsZW1lbnQqPihuZXdTcGFuLmdldCgpKSwgc3R5bGVBdHRyLCBwYXJlbnRTdHlsZS0+Y3Nz
VGV4dCgpKTsKKyAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihuZXdTcGFuLCBjaGlsZE5vZGUp
OworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICBuZXdTcGFu
LT5hcHBlbmRDaGlsZChjaGlsZE5vZGUsIGVjKTsKKyAgICAgICAgICAgIEFTU0VSVCghZWMpOwor
ICAgICAgICAgICAgY2hpbGROb2RlID0gbmV3U3Bhbi5nZXQoKTsKKyAgICAgICAgfSBlbHNlIGlm
IChjaGlsZE5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICAgICAgLy8gQ29weSB0aGUg
c3R5bGUgYXR0cmlidXRlIGFuZCBtZXJnZSB0aGVtIGludG8gdGhlIGNoaWxkIG5vZGUuICBXZSBk
b24ndCB3YW50IHRvIG92ZXJyaWRlCisgICAgICAgICAgICAvLyBleGlzdGluZyBzdHlsZXMsIHNv
IGRvbid0IGNsb2JiZXIgb24gbWVyZ2UuCisgICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IG5ld1N0eWxlID0gcGFyZW50U3R5bGUtPmNvcHkoKTsKKyAgICAgICAg
ICAgIEhUTUxFbGVtZW50KiBjaGlsZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KGNoaWxkTm9kZSk7CisgICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IGV4aXN0aW5nU3R5bGVzID0gY2hpbGRFbGVtZW50LT5nZXRJbmxpbmVTdHlsZURlY2woKS0+
Y29weSgpOworICAgICAgICAgICAgZXhpc3RpbmdTdHlsZXMtPm1lcmdlKG5ld1N0eWxlLmdldCgp
LCBmYWxzZSk7CisgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGNoaWxkRWxlbWVudCwgc3R5
bGVBdHRyLCBleGlzdGluZ1N0eWxlcy0+Y3NzVGV4dCgpKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwogdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VFbmRJZk5lZWRlZCgpCiB7CiAg
ICAgaWYgKCFtX3Nob3VsZE1lcmdlRW5kKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmggYi9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuaAppbmRleCAxY2I5M2MzLi5mZDhhZjY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAorKysgYi9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuaApAQCAtNjgsNiArNjgsNyBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgbmVnYXRlU3R5bGVSdWxlc1RoYXRBZmZlY3RBcHBlYXJhbmNlKCk7CiAgICAgdm9p
ZCBoYW5kbGVTdHlsZVNwYW5zKCk7CisgICAgdm9pZCBjb3B5U3R5bGVUb0NoaWxkcmVuKE5vZGUq
IHBhcmVudE5vZGUsIGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBwYXJlbnRTdHls
ZSk7CiAgICAgdm9pZCBoYW5kbGVQYXN0ZUFzUXVvdGF0aW9uTm9kZSgpOwogICAgIAogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKE5vZGUqKTsK
</data>
<flag name="review"
          id="30728"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>