<?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>93724</bug_id>
          
          <creation_ts>2012-08-10 09:09:24 -0700</creation_ts>
          <short_desc>[chromium] Add WebView methods setCompositionFromExistingText and expandSelectionAndDelete.</short_desc>
          <delta_ts>2012-08-21 15:49:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>66687</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Oli Lan">olilan</reporter>
          <assigned_to name="Oli Lan">olilan</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>hbono</cc>
    
    <cc>jamesr</cc>
    
    <cc>mifenton</cc>
    
    <cc>rniwa</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>692587</commentid>
    <comment_count>0</comment_count>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-10 09:09:24 -0700</bug_when>
    <thetext>Add WebView methods setComposingRegion and deleteSurroundingText, and an Editor method setComposingRegion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692592</commentid>
    <comment_count>1</comment_count>
      <attachid>157742</attachid>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-10 09:17:04 -0700</bug_when>
    <thetext>Created attachment 157742
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692600</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-10 09:22:14 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692610</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-10 09:30:51 -0700</bug_when>
    <thetext>@rniwa: Would you be willing to review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692611</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-10 09:31:23 -0700</bug_when>
    <thetext>@olilan: Is this related to upstreaming the chromium-android port?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692618</commentid>
    <comment_count>5</comment_count>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-10 09:40:24 -0700</bug_when>
    <thetext>Yes, this is part of chromium-Android upstreaming, though this implementation isn&apos;t in downstream Chrome for Android. These methods are re-implemented here in response to a suggestion from rniwa in a chromium review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692619</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-10 09:41:29 -0700</bug_when>
    <thetext>Cool, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692636</commentid>
    <comment_count>7</comment_count>
      <attachid>157742</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-08-10 09:59:52 -0700</bug_when>
    <thetext>Comment on attachment 157742
Patch

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

WebKit API changes seem fine.  Please have rniwa@ review the editor changes and usage.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2234
&gt; +void WebViewImpl:: deleteSurroundingText(int before, int after)

nit: space after &quot;::&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692660</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-10 10:38:45 -0700</bug_when>
    <thetext>This patch needs to be reviewed by Alexey.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692681</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-08-10 11:01:10 -0700</bug_when>
    <thetext>Can you explain what functionality is enabled by this? Terminology here is fairly confusing (setComposingRegion sounds like rendering code in WebKit).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692773</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-10 11:56:10 -0700</bug_when>
    <thetext>Context from http://codereview.chromium.org/10836053/

Add IPCs/methods for additional IME actions.

This adds IPCs and support in RenderViewImpl for the following: ReplaceAll, Unselect,
SetEditableSelectionOffsets, SetComposingRegion, DeleteSurroundingText.

These are used to implement IME actions in the Android port, providing functions as required
by the Android InputConnection interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692782</commentid>
    <comment_count>11</comment_count>
      <attachid>157742</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-10 12:01:45 -0700</bug_when>
    <thetext>Comment on attachment 157742
Patch

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

&gt; Source/WebCore/editing/Editor.cpp:2370
&gt; +bool Editor::setComposingRegion(int compositionStart, int compositionEnd, const Vector&lt;CompositionUnderline&gt;&amp; underlines)

I would rename it to setCompositionWithoutInsertingText.

&gt; Source/WebCore/editing/Editor.cpp:2382
&gt; +    Element* rootEditableElement = m_frame-&gt;selection()-&gt;rootEditableElement();
&gt; +    if (!rootEditableElement)
&gt; +        return false;

It&apos;s strange that we check the editability here. The caller should probably check this.

&gt; Source/WebCore/editing/Editor.cpp:2412
&gt; +    unsigned startOffset = range-&gt;startOffset();
&gt; +    unsigned endOffset = range-&gt;endOffset();
&gt; +    m_compositionNode = toText(startNode);
&gt; +    m_compositionStart = startOffset;
&gt; +    m_compositionEnd = endOffset;
&gt; +    m_customCompositionUnderlines = underlines;
&gt; +    size_t numUnderlines = m_customCompositionUnderlines.size();
&gt; +    for (size_t i = 0; i &lt; numUnderlines; ++i) {
&gt; +        m_customCompositionUnderlines[i].startOffset += startOffset;
&gt; +        m_customCompositionUnderlines[i].endOffset += endOffset;
&gt; +    }
&gt; +    if (startNode-&gt;renderer())
&gt; +        startNode-&gt;renderer()-&gt;repaint();

This is very unusual things to do. Why do we need to do this?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2221
&gt; +bool WebViewImpl::setComposingRegion(int compositionStart, int compositionEnd, const WebVector&lt;WebCompositionUnderline&gt;&amp; underlines)

Ditto about the function name.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2228
&gt; +    if (!editor || !editor-&gt;canEdit())

In fact, you&apos;re checking the editability here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692813</commentid>
    <comment_count>12</comment_count>
      <attachid>157742</attachid>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-10 12:39:07 -0700</bug_when>
    <thetext>Comment on attachment 157742
Patch

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

&gt;&gt; Source/WebCore/editing/Editor.cpp:2412
&gt;&gt; +        startNode-&gt;renderer()-&gt;repaint();
&gt; 
&gt; This is very unusual things to do. Why do we need to do this?

Do you mean the repaint, or all of the above? This was intended to be similar to what is done in the setComposition method (lines 1461-1471), including the repaint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692825</commentid>
    <comment_count>13</comment_count>
      <attachid>157742</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-10 12:56:08 -0700</bug_when>
    <thetext>Comment on attachment 157742
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/Editor.cpp:2412
&gt;&gt;&gt; +        startNode-&gt;renderer()-&gt;repaint();
&gt;&gt; 
&gt;&gt; This is very unusual things to do. Why do we need to do this?
&gt; 
&gt; Do you mean the repaint, or all of the above? This was intended to be similar to what is done in the setComposition method (lines 1461-1471), including the repaint.

No, why are we manually setting composition underlines?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692838</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-08-10 13:16:31 -0700</bug_when>
    <thetext>&gt; &gt; +bool Editor::setComposingRegion(int compositionStart, int compositionEnd, const Vector&lt;CompositionUnderline&gt;&amp; underlines)

&gt; I would rename it to setCompositionWithoutInsertingText.

So, it converts existing text into a composition (similar to what Kotoeri &quot;Reverse Conversion&quot; does on Mac)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693500</commentid>
    <comment_count>15</comment_count>
      <attachid>157950</attachid>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-13 03:24:08 -0700</bug_when>
    <thetext>Created attachment 157950
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693501</commentid>
    <comment_count>16</comment_count>
      <attachid>157742</attachid>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-13 03:27:07 -0700</bug_when>
    <thetext>Comment on attachment 157742
Patch

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

&gt;&gt; Source/WebCore/editing/Editor.cpp:2370
&gt;&gt; +bool Editor::setComposingRegion(int compositionStart, int compositionEnd, const Vector&lt;CompositionUnderline&gt;&amp; underlines)
&gt; 
&gt; I would rename it to setCompositionWithoutInsertingText.

Done.

&gt;&gt; Source/WebCore/editing/Editor.cpp:2382
&gt;&gt; +        return false;
&gt; 
&gt; It&apos;s strange that we check the editability here. The caller should probably check this.

OK, check removed.

&gt;&gt;&gt;&gt; Source/WebCore/editing/Editor.cpp:2412
&gt;&gt;&gt;&gt; +        startNode-&gt;renderer()-&gt;repaint();
&gt;&gt;&gt; 
&gt;&gt;&gt; This is very unusual things to do. Why do we need to do this?
&gt;&gt; 
&gt;&gt; Do you mean the repaint, or all of the above? This was intended to be similar to what is done in the setComposition method (lines 1461-1471), including the repaint.
&gt; 
&gt; No, why are we manually setting composition underlines?

This sets the underlines in the same way that the existing method setComposition(const String&amp; text, const Vector&lt;CompositionUnderline&gt;&amp; underlines, unsigned selectionStart, unsigned selectionEnd) does. Underlines can be provided by callers (as they are currently in WebViewImpl::setComposition) and this just adjusts them to have the correct start offset for the new composition.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2221
&gt;&gt; +bool WebViewImpl::setComposingRegion(int compositionStart, int compositionEnd, const WebVector&lt;WebCompositionUnderline&gt;&amp; underlines)
&gt; 
&gt; Ditto about the function name.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2234
&gt;&gt; +void WebViewImpl:: deleteSurroundingText(int before, int after)
&gt; 
&gt; nit: space after &quot;::&quot;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693511</commentid>
    <comment_count>17</comment_count>
    <who name="Hironori Bono">hbono</who>
    <bug_when>2012-08-13 03:55:56 -0700</bug_when>
    <thetext>Greetings Oli,

Thank you for your interesting change.
Just out of curiosity, I&apos;m personally interested in the usage scenarios of the Editor::setCompositionWithoutInsertingText function as Alexey wrote in his comment. (If this function has usage scenarios also useful for other platforms, we like to replace other platform-specific code to use it.) Would it be possible to give us usage scenarios of this function, i.e. when Android IMEs calls this function? For example, reconverting text, etc. (I&apos;m not a WebKit reviewer and it is good to ignore my comment, though.)

Regards,

Hironori Bono

(In reply to comment #14)
&gt; So, it converts existing text into a composition (similar to what Kotoeri &quot;Reverse Conversion&quot; does on Mac)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693523</commentid>
    <comment_count>18</comment_count>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-13 04:08:12 -0700</bug_when>
    <thetext>Android IMEs utilise the InputConnection interface which provides a method setComposingRegion that does precisely what setCompositionWithoutInsertingText does - it creates a composition between the two provided offsets in the existing text being edited.

IMEs can use this method however they wish. An example is the third-party IME SwiftKey which uses it to set the composition whenever the cursor is moved. For example, if the text is &quot;hello&quot; and the cursor is moved to be after the &quot;e&quot;, SwiftKey calls setComposingRegion to make &quot;he&quot; the composition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693703</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-08-13 09:18:47 -0700</bug_when>
    <thetext>So, sounds like this is exactly what Kotoeri does, so adding code to WebCore should be unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693769</commentid>
    <comment_count>20</comment_count>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-13 10:06:08 -0700</bug_when>
    <thetext>Do you know how Kotoeri achieves this? From what I can see, the only way currently to create a new composition is to use Editor::setComposition(text, undelines, selectionStart, selectionEnd), which inserts new text.

It&apos;s possible to achieve the same effect as the new method by deleting text and calling setComposition to reinsert it, passing in the existing selection offsets, but it seems cleaner to be able to do this without having to delete and reinsert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693770</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-08-13 10:08:45 -0700</bug_when>
    <thetext>&gt; It&apos;s possible to achieve the same effect as the new method by deleting text and calling setComposition to reinsert it

I don&apos;t know, but this seems very likely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693798</commentid>
    <comment_count>22</comment_count>
      <attachid>157950</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-13 10:33:45 -0700</bug_when>
    <thetext>Comment on attachment 157950
Patch

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

&gt; Source/WebCore/editing/Editor.cpp:2376
&gt; +        if (compositionNode &amp;&amp; compositionNode-&gt;renderer())
&gt; +            compositionNode-&gt;renderer()-&gt;repaint();

This call to repaint() is superfluous. cancelComposition must have updated it already.

&gt; Source/WebCore/editing/Editor.cpp:2390
&gt; +

It appears that we can just select the range (without changing composition node, etc...) and call setComposition at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694805</commentid>
    <comment_count>23</comment_count>
      <attachid>157950</attachid>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-14 04:32:27 -0700</bug_when>
    <thetext>Comment on attachment 157950
Patch

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

&gt;&gt; Source/WebCore/editing/Editor.cpp:2376
&gt;&gt; +            compositionNode-&gt;renderer()-&gt;repaint();
&gt; 
&gt; This call to repaint() is superfluous. cancelComposition must have updated it already.

Without this, the node isn&apos;t repainted - cancelComposition calls setComposition(emptyString(), CancelComposition) which doesn&apos;t call repaint. In my testing I found that without this, calling setCompositionWithoutInsertingText with 0,0 would leave the previous underlines visible, even though the composition was cancelled.

&gt;&gt; Source/WebCore/editing/Editor.cpp:2390
&gt;&gt; +
&gt; 
&gt; It appears that we can just select the range (without changing composition node, etc...) and call setComposition at this point.

No, that won&apos;t work because setComposition selects the existing composition near the start of the method (as the intention is that setComposition replaces the existing composition with the new composition).

To use setComposition here, we&apos;d have to do the following:
- cancel the existing composition
- retrieve the current selection offsets
- select the range
- retrieve the text of the range
- delete the range
- call setComposition with the text and previous selection offsets</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695690</commentid>
    <comment_count>24</comment_count>
    <who name="Hironori Bono">hbono</who>
    <bug_when>2012-08-14 20:09:24 -0700</bug_when>
    <thetext>Greetings Oli,

To look into the reversion conversion of Kotoeri, it seems WebKit retrieves the selection text, passes it to Kotoeri, and calls Editor::setComposition() with the new text sent from Kotoeri. (This new text may differ from the selection text when using Kotoeri.) I like this method because it ensures the composition text is always in one text node. (For other platforms, the selection text used for reverse conversion is not always in one node. The Editor::setCompositionWithoutInsertingText function seems to return false without creating a composition range when a selection text is not in one node and I wonder if this change can handle this case.)

Regards,

Hironori Bono

(In reply to comment #20)
&gt; Do you know how Kotoeri achieves this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695757</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-14 23:05:12 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 157950 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=157950&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/editing/Editor.cpp:2376
&gt; &gt;&gt; +            compositionNode-&gt;renderer()-&gt;repaint();
&gt; &gt; 
&gt; &gt; This call to repaint() is superfluous. cancelComposition must have updated it already.
&gt; 
&gt; Without this, the node isn&apos;t repainted - cancelComposition calls setComposition(emptyString(), CancelComposition) which doesn&apos;t call repaint.

That sounds like a bug we need to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696136</commentid>
    <comment_count>26</comment_count>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-15 10:54:54 -0700</bug_when>
    <thetext>(In reply to comment #24)

@hbono, you&apos;re right, this solution doesn&apos;t handle the case where the new composition would span more than one node. Implementing this by calling setComposition would handle that case.

@rniwa, what&apos;s your opinion on this? Is the current implementation in my patch ok, or would you prefer an implementation as I described in #23, where we would call setComposition after saving and deleting the range?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696237</commentid>
    <comment_count>27</comment_count>
      <attachid>157950</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-08-15 12:02:15 -0700</bug_when>
    <thetext>Comment on attachment 157950
Patch

Marking r-, please don&apos;t add new Editor code when you don&apos;t need to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696239</commentid>
    <comment_count>28</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-15 12:04:47 -0700</bug_when>
    <thetext>Retreiving text and setting the composition text is probably the right approach. We might even consider moving some code from Mac port&apos;s implemanation to share more code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696281</commentid>
    <comment_count>29</comment_count>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-15 12:37:55 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Retreiving text and setting the composition text is probably the right approach. We might even consider moving some code from Mac port&apos;s implemanation to share more code.

@rniwa: considering ap&apos;s comments, where would you suggest we do this? Should I return to my original implementation (i.e. do this in Chromium code instead of here)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696309</commentid>
    <comment_count>30</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-15 13:21:48 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; Retreiving text and setting the composition text is probably the right approach. We might even consider moving some code from Mac port&apos;s implemanation to share more code.
&gt; 
&gt; @rniwa: considering ap&apos;s comments, where would you suggest we do this? Should I return to my original implementation (i.e. do this in Chromium code instead of here)?

This should be done in Source/chromium/WebKit. We can probably share code with Mac port.

@hbono: do you know where this logic for Kotoeri is implemented?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696738</commentid>
    <comment_count>31</comment_count>
    <who name="Hironori Bono">hbono</who>
    <bug_when>2012-08-15 22:13:41 -0700</bug_when>
    <thetext>Greetings Niwa-san,

Apple WebKit implements it in &lt;WebKit2/UIProcess/API/mac/WKView.mm&gt;.
In brief, OS X calls NSTextInputClient methods to get the selection text and start a composition as listed below when I start a reconvert of Kotoeri.
1. OS X calls [WKView selectedRange:] (*1) to get the selection range;
2. OS X calls [WKView attributedSubstringForProposedRange:] (*2) to get the selection text, and;
3. OS X calls [WKView setMarkedText:] (*3) to start a composition with new text.

(*1) http://code.google.com/searchframe#OAMlx_jo-ck/src/third_party/WebKit/Source/WebKit2/UIProcess/API/mac/WKView.mm&amp;l=1419
(*2) http://code.google.com/searchframe#OAMlx_jo-ck/src/third_party/WebKit/Source/WebKit2/UIProcess/API/mac/WKView.mm&amp;l=1572
(*3) http://code.google.com/searchframe#OAMlx_jo-ck/src/third_party/WebKit/Source/WebKit2/UIProcess/API/mac/WKView.mm&amp;l=1518

On Chromium, when the current selection changes, a renderer sends a ViewHostMsg_SelectionChange message to send its range and its text to a browser (*4)  to avoid a sync call from a browser to a renderer. That is, a browser returns this range and text when OS X needs it. Can Android also use them?

(*4) http://code.google.com/searchframe#OAMlx_jo-ck/src/content/browser/renderer_host/render_view_host_impl.cc&amp;l=1285

Regards,

Hironori Bono

(In reply to comment #30)
&gt; @hbono: do you know where this logic for Kotoeri is implemented?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698409</commentid>
    <comment_count>32</comment_count>
      <attachid>159140</attachid>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-17 09:28:05 -0700</bug_when>
    <thetext>Created attachment 159140
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698412</commentid>
    <comment_count>33</comment_count>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-17 09:31:21 -0700</bug_when>
    <thetext>OK, I have implemented the new setComposition method in WebViewImpl. I&apos;ve renamed it to setCompositionFromExistingText as it&apos;s not quite true that it doesn&apos;t insert text. It&apos;s necessary for the method to reselect the previous selection rather than just using the selection parameters of Editor::setComposition as setComposition can only select from within the new composition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698485</commentid>
    <comment_count>34</comment_count>
      <attachid>159140</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-17 10:51:30 -0700</bug_when>
    <thetext>Comment on attachment 159140
Patch

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

Oh my, this patch is much prettier.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2240
&gt; +    editor-&gt;performDelete();

You need to call document()-&gt;execCommand(&quot;delete&quot;, true) instead otherwise this deletion will be added to the undo stack as a separate undo step.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2248
&gt; +void WebViewImpl::deleteSurroundingText(int before, int after)

deleteSurroundingText sounds as if you&apos;re only deleting the surrounding text and not text in between.
I would have called this extendSelectionAndDelete.

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2267
&gt; +        editor-&gt;performDelete();

Ditto about calling document()-&gt;execCommand instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699573</commentid>
    <comment_count>35</comment_count>
      <attachid>159446</attachid>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-20 09:07:05 -0700</bug_when>
    <thetext>Created attachment 159446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699577</commentid>
    <comment_count>36</comment_count>
      <attachid>159140</attachid>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-20 09:08:38 -0700</bug_when>
    <thetext>Comment on attachment 159140
Patch

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

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2240
&gt;&gt; +    editor-&gt;performDelete();
&gt; 
&gt; You need to call document()-&gt;execCommand(&quot;delete&quot;, true) instead otherwise this deletion will be added to the undo stack as a separate undo step.

OK, done.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2248
&gt;&gt; +void WebViewImpl::deleteSurroundingText(int before, int after)
&gt; 
&gt; deleteSurroundingText sounds as if you&apos;re only deleting the surrounding text and not text in between.
&gt; I would have called this extendSelectionAndDelete.

Renamed as suggested.

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:2267
&gt;&gt; +        editor-&gt;performDelete();
&gt; 
&gt; Ditto about calling document()-&gt;execCommand instead.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699632</commentid>
    <comment_count>37</comment_count>
      <attachid>159446</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-20 10:18:35 -0700</bug_when>
    <thetext>Comment on attachment 159446
Patch

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

&gt; Source/WebKit/chromium/ChangeLog:3
&gt; +        Add WebView methods setCompositionFromExistingText and extendSelectionAndDelete.

Please update this line so that it matches the bug title.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699647</commentid>
    <comment_count>38</comment_count>
      <attachid>159470</attachid>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-20 10:30:29 -0700</bug_when>
    <thetext>Created attachment 159470
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699648</commentid>
    <comment_count>39</comment_count>
      <attachid>159446</attachid>
    <who name="Oli Lan">olilan</who>
    <bug_when>2012-08-20 10:30:47 -0700</bug_when>
    <thetext>Comment on attachment 159446
Patch

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

&gt;&gt; Source/WebKit/chromium/ChangeLog:3
&gt;&gt; +        Add WebView methods setCompositionFromExistingText and extendSelectionAndDelete.
&gt; 
&gt; Please update this line so that it matches the bug title.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699661</commentid>
    <comment_count>40</comment_count>
      <attachid>159470</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-20 10:36:10 -0700</bug_when>
    <thetext>Comment on attachment 159470
Patch

Since you&apos;re not a committer, you should ask some committer to land your patch or set cq? flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701210</commentid>
    <comment_count>41</comment_count>
      <attachid>159470</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-21 15:49:35 -0700</bug_when>
    <thetext>Comment on attachment 159470
Patch

Clearing flags on attachment: 159470

Committed r126200: &lt;http://trac.webkit.org/changeset/126200&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701211</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-21 15:49:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157742</attachid>
            <date>2012-08-10 09:17:04 -0700</date>
            <delta_ts>2012-08-13 03:27:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93724-20120810171636.patch</filename>
            <type>text/plain</type>
            <size>11384</size>
            <attacher name="Oli Lan">olilan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWMxNzQ1Mzk2YjUzYjFm
YjU3YThiMzA1YWU5NzcwNDU2MjA0ZmVmYi4uMmFiOTc4MDk5YWQzZDA1ZDllMTkxM2FhYmM4MTcy
ZWRjZmQzOGI2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA4LTEwICBPbGkg
TGFuICA8b2xpbGFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgV2ViVmlldyBtZXRob2Rz
IHNldENvbXBvc2luZ1JlZ2lvbiBhbmQgZGVsZXRlU3Vycm91bmRpbmdUZXh0LCBhbmQgYW4gRWRp
dG9yIG1ldGhvZCBzZXRDb21wb3NpbmdSZWdpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzcyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBuZXcgbWV0aG9kIEVkaXRvcjo6c2V0Q29tcG9z
aW5nUmVnaW9uIHRvIGNoYW5nZSB0aGUgY29tcG9zaXRpb24gdG8gYmUgYmV0d2VlbgorICAgICAg
ICB0aGUgcHJvdmlkZWQgb2Zmc2V0cywgcmVsYXRpdmUgdG8gdGhlIHJvb3RFZGl0YWJsZUVsZW1l
bnQuIFRoaXMgbWV0aG9kIGRvZXMgbm90IGNoYW5nZQorICAgICAgICB0aGUgY3VycmVudCBzZWxl
Y3Rpb24uCisgICAgICAgICAgICAgICAgCisgICAgICAgIFRoaXMgaXMgdGVzdGVkIHZpYSBXZWJW
aWV3SW1wbCBpbiBhIG5ldyB0ZXN0IGFkZGVkIHRvIENocm9taXVtJ3MgV2ViVmlld1Rlc3QuCisK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNldENvbXBvc2luZ1JlZ2lvbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRvci5oOgorICAgICAgICAoRWRpdG9yKToKKwogMjAxMi0wOC0wMSAgVnNldm9sb2Qg
Vmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBD
cmFzaGVzIGluIE5ldHdvcmtSZXNvdXJjZXNEYXRhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA5Njg0OTkzNDQ3OGNjZjBjZTI1NzBiNTlhOWQzMDM5M2VlMGZjYTBmLi4xNGJkZjhmOTU1
ZTdmZGI4YmI3YzY1YTVmOWM3YmZkYjlkYjg5Mzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTA4LTEwICBPbGkgTGFuICA8b2xpbGFuQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBBZGQgV2ViVmlldyBtZXRob2RzIHNldENvbXBvc2luZ1JlZ2lvbiBh
bmQgZGVsZXRlU3Vycm91bmRpbmdUZXh0LCBhbmQgYW4gRWRpdG9yIG1ldGhvZCBzZXRDb21wb3Np
bmdSZWdpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MzcyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgYWRkcyB0d28gbmV3IG1ldGhvZHMgdG8gV2ViVmlld0ltcGw6IHNldENvbXBvc2luZ1Jl
Z2lvbiwgd2hpY2ggY2hhbmdlcyB0aGUgY29tcG9zaXRpb24gdG8KKyAgICAgICAgYmUgYmV0d2Vl
biB0d28gb2Zmc2V0cywgcmVsYXRpdmUgdG8gdGhlIHJvb3RFZGl0YWJsZUVsZW1lbnQgYW5kIGxl
YXZpbmcgdGhlIGN1cnJlbnQgc2VsZWN0aW9uCisgICAgICAgIHVuY2hhbmdlZDsgYW5kIGRlbGV0
ZVN1cnJvdW5kaW5nVGV4dCB3aGljaCBkZWxldGVzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNo
YXJhY3RlcnMgYmVmb3JlCisgICAgICAgIGFuZCBhZnRlciB0aGUgY3VycmVudCBlZGl0aW5nIHBv
aW50LgorCisgICAgICAgIFRoZXNlIG1ldGhvZHMgd2lsbCBiZSB1c2VkIGUuZy4gYnkgdGhlIEFu
ZHJvaWQgcG9ydCB0byBpbXBsZW1lbnQgSU1FIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgTmV3
IHRlc3RzIFdlYlZpZXdUZXN0LkRlbGV0ZVN1cnJvdW5kaW5nVGV4dCBhbmQgV2ViVmlld1Rlc3Qu
U2V0Q29tcG9zaW5nUmVnaW9uIHRlc3QgdGhlIHR3bworICAgICAgICBuZXcgbWV0aG9kcy4gICAg
ICAgCisKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAoV2ViVmlldyk6Cisg
ICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OnNldENvbXBvc2luZ1JlZ2lvbik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0OjpkZWxldGVTdXJyb3VuZGluZ1RleHQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5o
OgorICAgICAgICAoV2ViVmlld0ltcGwpOgorICAgICAgICAqIHRlc3RzL1dlYlZpZXdUZXN0LmNw
cDoKKwogMjAxMi0wOC0wMSAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdGVzdCBuYXRpdmUgbWVtb3J5IGluc3RydW1lbnRh
dGlvbiBjb2RlIHdpdGggaGVscCBvZiB1bml0dGVzdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAppbmRleCA5ZjMzMjk5YzI3MTU5NWQzNzcwNTFiOTUzOGUyZTQ0ZmUyMTkyY2ZmLi45MDUyZjZl
NGVhYmViZWM2ZWZlNmYxNTBlYzUyMGI5MjU1ZGFiOWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCkBAIC0yMzY3LDYgKzIzNjcsNTMgQEAgYm9vbCBFZGl0b3I6OnNldFNlbGVjdGlvbk9m
ZnNldHMoaW50IHNlbGVjdGlvblN0YXJ0LCBpbnQgc2VsZWN0aW9uRW5kKQogICAgIHJldHVybiBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVlBfREVG
QVVMVF9BRkZJTklUWSwgZmFsc2UpOwogfQogCitib29sIEVkaXRvcjo6c2V0Q29tcG9zaW5nUmVn
aW9uKGludCBjb21wb3NpdGlvblN0YXJ0LCBpbnQgY29tcG9zaXRpb25FbmQsIGNvbnN0IFZlY3Rv
cjxDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMpCit7CisgICAgaWYgKGNvbXBvc2l0
aW9uU3RhcnQgPT0gY29tcG9zaXRpb25FbmQpIHsKKyAgICAgICAgUmVmUHRyPFRleHQ+IGNvbXBv
c2l0aW9uTm9kZSA9IG1fY29tcG9zaXRpb25Ob2RlOworICAgICAgICBjYW5jZWxDb21wb3NpdGlv
bigpOworICAgICAgICBpZiAoY29tcG9zaXRpb25Ob2RlICYmIGNvbXBvc2l0aW9uTm9kZS0+cmVu
ZGVyZXIoKSkKKyAgICAgICAgICAgIGNvbXBvc2l0aW9uTm9kZS0+cmVuZGVyZXIoKS0+cmVwYWlu
dCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBFbGVtZW50KiByb290RWRp
dGFibGVFbGVtZW50ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKKyAgICBpZiAoIXJvb3RFZGl0YWJsZUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0
aW9uQW5kTGVuZ3RoKHJvb3RFZGl0YWJsZUVsZW1lbnQsIGNvbXBvc2l0aW9uU3RhcnQsIGNvbXBv
c2l0aW9uRW5kIC0gY29tcG9zaXRpb25TdGFydCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgTm9kZSogc3RhcnROb2RlID0gcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCk7CisgICAgTm9kZSogZW5kTm9kZSA9IHJhbmdlLT5lbmRDb250YWluZXIoKTsKKyAgICBT
dHJpbmcgdGV4dCA9IHBsYWluVGV4dChyYW5nZS5nZXQoKSk7CisgICAgaWYgKHN0YXJ0Tm9kZSAh
PSBlbmROb2RlIHx8IHRleHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBOb2RlKiB0YXJnZXQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOworICAg
IGlmICghbV9jb21wb3NpdGlvbk5vZGUpCisgICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hFdmVudChD
b21wb3NpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBvc2l0aW9uc3RhcnRFdmVu
dCwgbV9mcmFtZS0+ZG9tV2luZG93KCksIHRleHQpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoQ29tcG9zaXRpb25FdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5jb21wb3NpdGlvbnVwZGF0ZUV2ZW50LCBtX2ZyYW1lLT5kb21XaW5kb3coKSwg
dGV4dCksIGVjKTsKKworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gcmFuZ2UtPnN0YXJ0T2Zm
c2V0KCk7CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOworICAg
IG1fY29tcG9zaXRpb25Ob2RlID0gdG9UZXh0KHN0YXJ0Tm9kZSk7CisgICAgbV9jb21wb3NpdGlv
blN0YXJ0ID0gc3RhcnRPZmZzZXQ7CisgICAgbV9jb21wb3NpdGlvbkVuZCA9IGVuZE9mZnNldDsK
KyAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcyA9IHVuZGVybGluZXM7CisgICAgc2l6
ZV90IG51bVVuZGVybGluZXMgPSBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1VbmRlcmxpbmVzOyArK2kpIHsKKyAgICAg
ICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXNbaV0uc3RhcnRPZmZzZXQgKz0gc3RhcnRP
ZmZzZXQ7CisgICAgICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzW2ldLmVuZE9mZnNl
dCArPSBlbmRPZmZzZXQ7CisgICAgfQorICAgIGlmIChzdGFydE5vZGUtPnJlbmRlcmVyKCkpCisg
ICAgICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogewogICAgIGlmICghY2FuRWRpdCgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggYmRkMzgyOTU0Yzc5NmQzZDE1NDc3NzZkMDIz
MzQ2MGVjMGUxNTBlYS4uYjliNDU2YmFmZjE1YTQ5MTYyNmExMDg5MGRhZDgwMzc5ZGI5YTk1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0yOTYsNiArMjk2LDcgQEAgcHVibGljOgogICAg
IFBhc3NSZWZQdHI8UmFuZ2U+IGNvbXBvc2l0aW9uUmFuZ2UoKSBjb25zdDsKICAgICBib29sIGdl
dENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwgdW5zaWduZWQm
IHNlbGVjdGlvbkVuZCkgY29uc3Q7CiAgICAgYm9vbCBzZXRTZWxlY3Rpb25PZmZzZXRzKGludCBz
ZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvbkVuZCk7CisgICAgYm9vbCBzZXRDb21wb3NpbmdS
ZWdpb24oaW50IGNvbXBvc2l0aW9uU3RhcnQsIGludCBjb21wb3NpdGlvbkVuZCwgY29uc3QgVmVj
dG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcyk7CiAKICAgICAvLyBnZXR0aW5n
IGludGVybmF0aW9uYWwgdGV4dCBpbnB1dCBjb21wb3NpdGlvbiBzdGF0ZSAoZm9yIHVzZSBieSBJ
bmxpbmVUZXh0Qm94KQogICAgIFRleHQqIGNvbXBvc2l0aW9uTm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29tcG9zaXRpb25Ob2RlLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJWaWV3LmgKaW5kZXggNGRhMzM2M2RkMTNmZDI1YWJiMWVlMjM0NzVmODMyYjY0ZGE4ZGFmNC4u
Nzk3MjRiNmFjMWNiMzc4MDE4ZmU4ZGMwMWY4YjBmZDc2MjFiOTY1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZpZXcuaApAQCAtNDU4LDYgKzQ1OCw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNmZXJBY3RpdmVXaGVlbEZsaW5nQW5pbWF0aW9uKGNvbnN0IFdl
YkFjdGl2ZVdoZWVsRmxpbmdQYXJhbWV0ZXJzJikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHNl
dEVkaXRhYmxlU2VsZWN0aW9uT2Zmc2V0cyhpbnQgc3RhcnQsIGludCBlbmQpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgc2V0Q29tcG9zaW5nUmVnaW9uKGludCBjb21wb3NpdGlvblN0YXJ0LCBpbnQg
Y29tcG9zaXRpb25FbmQsIGNvbnN0IFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVybGluZT4m
IHVuZGVybGluZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlU3Vycm91bmRpbmdUZXh0
KGludCBiZWZvcmUsIGludCBhZnRlcikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGlzU2VsZWN0
aW9uRWRpdGFibGUoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAppbmRleCBkODc1MGUzOGEyODdlYjE5MDczNzQ0Y2MwMzllMmM0YTI0ZDRl
Yzk0Li5jZmIxZWNkODMxZTNiODBhNmQyOTBlYjFmNGMzM2Q5YTUwMGM3MGZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0yMjE4LDYgKzIyMTgsNDIg
QEAgYm9vbCBXZWJWaWV3SW1wbDo6c2V0RWRpdGFibGVTZWxlY3Rpb25PZmZzZXRzKGludCBzdGFy
dCwgaW50IGVuZCkKICAgICByZXR1cm4gZWRpdG9yLT5zZXRTZWxlY3Rpb25PZmZzZXRzKHN0YXJ0
LCBlbmQpOwogfQogCitib29sIFdlYlZpZXdJbXBsOjpzZXRDb21wb3NpbmdSZWdpb24oaW50IGNv
bXBvc2l0aW9uU3RhcnQsIGludCBjb21wb3NpdGlvbkVuZCwgY29uc3QgV2ViVmVjdG9yPFdlYkNv
bXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcykKK3sKKyAgICBjb25zdCBGcmFtZSogZm9j
dXNlZCA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZvY3VzZWQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7
CisgICAgaWYgKCFlZGl0b3IgfHwgIWVkaXRvci0+Y2FuRWRpdCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gZWRpdG9yLT5zZXRDb21wb3NpbmdSZWdpb24oY29tcG9zaXRp
b25TdGFydCwgY29tcG9zaXRpb25FbmQsIENvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRl
cih1bmRlcmxpbmVzKSk7Cit9CisKK3ZvaWQgV2ViVmlld0ltcGw6OiBkZWxldGVTdXJyb3VuZGlu
Z1RleHQoaW50IGJlZm9yZSwgaW50IGFmdGVyKQoreworICAgIGNvbnN0IEZyYW1lKiBmb2N1c2Vk
ID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOworICAgIGlmICghZm9jdXNlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRWRpdG9yKiBlZGl0b3IgPSBmb2N1c2VkLT5lZGl0b3IoKTsKKyAgICBpZiAo
IWVkaXRvciB8fCAhZWRpdG9yLT5jYW5FZGl0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZy
YW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBmb2N1c2VkLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAo
IXNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90IGxvY2F0aW9uOworICAg
IHNpemVfdCBsZW5ndGg7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi0+c2Vs
ZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGlmIChyYW5nZSAmJiBUZXh0SXRlcmF0b3I6Omdl
dExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHNlbGVjdGlvbi0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpLCByYW5nZS5nZXQoKSwgbG9jYXRpb24sIGxlbmd0aCkpIHsKKyAgICAgICAgZWRpdG9yLT5z
ZXRTZWxlY3Rpb25PZmZzZXRzKG1heChzdGF0aWNfY2FzdDxpbnQ+KGxvY2F0aW9uKSAtIGJlZm9y
ZSwgMCksIGxvY2F0aW9uICsgbGVuZ3RoICsgYWZ0ZXIpOworICAgICAgICBlZGl0b3ItPnBlcmZv
cm1EZWxldGUoKTsKKyAgICB9Cit9CisKIGJvb2wgV2ViVmlld0ltcGw6OmlzU2VsZWN0aW9uRWRp
dGFibGUoKSBjb25zdAogewogICAgIGNvbnN0IEZyYW1lKiBmcmFtZSA9IGZvY3VzZWRXZWJDb3Jl
RnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IDBi
MWRhMmEyN2Q1NjkxM2JlNjIwMDFhZWZiMDIwNTlhZmZjZDA4MDUuLmM1MGZmMWE3YzE3MGYxNmQw
ZDJmZGEwNTI2Y2IwNWJjYTU2ODcwZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaApAQCAtMTYyLDYgKzE2Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYlRl
eHRJbnB1dEluZm8gdGV4dElucHV0SW5mbygpOwogICAgIHZpcnR1YWwgV2ViVGV4dElucHV0VHlw
ZSB0ZXh0SW5wdXRUeXBlKCk7CiAgICAgdmlydHVhbCBib29sIHNldEVkaXRhYmxlU2VsZWN0aW9u
T2Zmc2V0cyhpbnQgc3RhcnQsIGludCBlbmQpOworICAgIHZpcnR1YWwgYm9vbCBzZXRDb21wb3Np
bmdSZWdpb24oaW50IGNvbXBvc2l0aW9uU3RhcnQsIGludCBjb21wb3NpdGlvbkVuZCwgY29uc3Qg
V2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcyk7CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZVN1cnJvdW5kaW5nVGV4dChpbnQgYmVmb3JlLCBpbnQgYWZ0ZXIpOwog
ICAgIHZpcnR1YWwgYm9vbCBpc1NlbGVjdGlvbkVkaXRhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBXZWJDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2Vs
ZWN0aW9uQm91bmRzKFdlYlJlY3QmIHN0YXJ0LCBXZWJSZWN0JiBlbmQpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJWaWV3VGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAppbmRleCAzY2ExMDk0ZDBh
YzJkY2UwYzAxYzFhOGVlYjYxNzVjNzM2NDgwYWZlLi40NGY4MmNiYTkwYzg1NDA0NDUyMmU2M2Iz
ZWY2MzVkMjgxYmU4ODg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1dlYlZpZXdUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlZp
ZXdUZXN0LmNwcApAQCAtMzc5LDQgKzM3OSw0MyBAQCBURVNUX0YoV2ViVmlld1Rlc3QsIEZvcm1D
aGFuZ2UpCiAgICAgd2ViVmlldy0+Y2xvc2UoKTsKIH0KIAorVEVTVF9GKFdlYlZpZXdUZXN0LCBE
ZWxldGVTdXJyb3VuZGluZ1RleHQpCit7CisgICAgVVJMVGVzdEhlbHBlcnM6OnJlZ2lzdGVyTW9j
a2VkVVJMRnJvbUJhc2VVUkwoV2ViU3RyaW5nOjpmcm9tVVRGOChtX2Jhc2VVUkwuY19zdHIoKSks
IFdlYlN0cmluZzo6ZnJvbVVURjgoImlucHV0X2ZpZWxkX3BvcHVsYXRlZC5odG1sIikpOworICAg
IFdlYlZpZXcqIHdlYlZpZXcgPSBGcmFtZVRlc3RIZWxwZXJzOjpjcmVhdGVXZWJWaWV3QW5kTG9h
ZChtX2Jhc2VVUkwgKyAiaW5wdXRfZmllbGRfcG9wdWxhdGVkLmh0bWwiKTsKKyAgICB3ZWJWaWV3
LT5zZXRJbml0aWFsRm9jdXMoZmFsc2UpOworICAgIHdlYlZpZXctPnNldEVkaXRhYmxlU2VsZWN0
aW9uT2Zmc2V0cygxMCwgMTApOworICAgIHdlYlZpZXctPmRlbGV0ZVN1cnJvdW5kaW5nVGV4dCg1
LCA4KTsKKyAgICBXZWJUZXh0SW5wdXRJbmZvIGluZm8gPSB3ZWJWaWV3LT50ZXh0SW5wdXRJbmZv
KCk7CisgICAgRVhQRUNUX0VRKCIwMTIzNGlqa2xtbm9wcXJzdHV2d3h5eiIsIHN0ZDo6c3RyaW5n
KGluZm8udmFsdWUudXRmOCgpLmRhdGEoKSkpOworICAgIEVYUEVDVF9FUSg1LCBpbmZvLnNlbGVj
dGlvblN0YXJ0KTsKKyAgICBFWFBFQ1RfRVEoNSwgaW5mby5zZWxlY3Rpb25FbmQpOworICAgIHdl
YlZpZXctPmRlbGV0ZVN1cnJvdW5kaW5nVGV4dCgxMCwgMCk7CisgICAgaW5mbyA9IHdlYlZpZXct
PnRleHRJbnB1dEluZm8oKTsKKyAgICBFWFBFQ1RfRVEoImlqa2xtbm9wcXJzdHV2d3h5eiIsIHN0
ZDo6c3RyaW5nKGluZm8udmFsdWUudXRmOCgpLmRhdGEoKSkpOworICAgIHdlYlZpZXctPmNsb3Nl
KCk7Cit9CisKK1RFU1RfRihXZWJWaWV3VGVzdCwgU2V0Q29tcG9zaW5nUmVnaW9uKQoreworICAg
IFVSTFRlc3RIZWxwZXJzOjpyZWdpc3Rlck1vY2tlZFVSTEZyb21CYXNlVVJMKFdlYlN0cmluZzo6
ZnJvbVVURjgobV9iYXNlVVJMLmNfc3RyKCkpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbnB1dF9m
aWVsZF9wb3B1bGF0ZWQuaHRtbCIpKTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gRnJhbWVUZXN0
SGVscGVyczo6Y3JlYXRlV2ViVmlld0FuZExvYWQobV9iYXNlVVJMICsgImlucHV0X2ZpZWxkX3Bv
cHVsYXRlZC5odG1sIik7CisgICAgd2ViVmlldy0+c2V0SW5pdGlhbEZvY3VzKGZhbHNlKTsKKyAg
ICBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxpbmU+IGVtcHR5VW5kZXJsaW5lczsKKyAg
ICB3ZWJWaWV3LT5zZXRFZGl0YWJsZVNlbGVjdGlvbk9mZnNldHMoNCwgMTApOworICAgIHdlYlZp
ZXctPnNldENvbXBvc2luZ1JlZ2lvbig4LCAxMiwgZW1wdHlVbmRlcmxpbmVzKTsKKyAgICBXZWJU
ZXh0SW5wdXRJbmZvIGluZm8gPSB3ZWJWaWV3LT50ZXh0SW5wdXRJbmZvKCk7CisgICAgRVhQRUNU
X0VRKDQsIGluZm8uc2VsZWN0aW9uU3RhcnQpOworICAgIEVYUEVDVF9FUSgxMCwgaW5mby5zZWxl
Y3Rpb25FbmQpOworICAgIEVYUEVDVF9FUSg4LCBpbmZvLmNvbXBvc2l0aW9uU3RhcnQpOworICAg
IEVYUEVDVF9FUSgxMiwgaW5mby5jb21wb3NpdGlvbkVuZCk7CisgICAgd2ViVmlldy0+c2V0Q29t
cG9zaW5nUmVnaW9uKDAsIDAsIGVtcHR5VW5kZXJsaW5lcyk7CisgICAgaW5mbyA9IHdlYlZpZXct
PnRleHRJbnB1dEluZm8oKTsKKyAgICBFWFBFQ1RfRVEoNCwgaW5mby5zZWxlY3Rpb25TdGFydCk7
CisgICAgRVhQRUNUX0VRKDEwLCBpbmZvLnNlbGVjdGlvbkVuZCk7CisgICAgRVhQRUNUX0VRKC0x
LCBpbmZvLmNvbXBvc2l0aW9uU3RhcnQpOworICAgIEVYUEVDVF9FUSgtMSwgaW5mby5jb21wb3Np
dGlvbkVuZCk7CisgICAgd2ViVmlldy0+Y2xvc2UoKTsKK30KKwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157950</attachid>
            <date>2012-08-13 03:24:08 -0700</date>
            <delta_ts>2012-08-17 09:27:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93724-20120813112336.patch</filename>
            <type>text/plain</type>
            <size>11805</size>
            <attacher name="Oli Lan">olilan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWMxNzQ1Mzk2YjUzYjFm
YjU3YThiMzA1YWU5NzcwNDU2MjA0ZmVmYi4uNGUwNDExZDBmZDY4YWM5ZjdhMzAyNDc3MDk1ZmMz
NjFmN2I2MmQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA4LTEwICBPbGkg
TGFuICA8b2xpbGFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgV2ViVmlldyBtZXRob2Rz
IHNldENvbXBvc2l0aW9uV2l0aG91dEluc2VydGluZ1RleHQgYW5kIGRlbGV0ZVN1cnJvdW5kaW5n
VGV4dCwgYW5kIGFuIEVkaXRvciBtZXRob2Qgc2V0Q29tcG9zaXRpb25XaXRob3V0SW5zZXJ0aW5n
VGV4dC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkz
NzI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
cyBhIG5ldyBtZXRob2QgRWRpdG9yOjpzZXRDb21wb3NpdGlvbldpdGhvdXRJbnNlcnRpbmdUZXh0
IHRvIGNyZWF0ZSBhIG5ldyBjb21wb3NpdGlvbgorICAgICAgICBmcm9tIHRoZSBleGlzdGluZyB0
ZXh0IGluIGFuIGlucHV0IGZpZWxkLCBpLmUuIGl0IGNvbnZlcnRzIGV4aXN0aW5nIHRleHQgaW50
byBhIGNvbXBvc2l0aW9uLgorICAgICAgICBUaGUgY29tcG9zaXRpb24gaXMgc2V0IHRvIGJlIGJl
dHdlZW4gdGhlIHByb3ZpZGVkIG9mZnNldHMsIHJlbGF0aXZlIHRvIHRoZSByb290RWRpdGFibGVF
bGVtZW50LgorCisgICAgICAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IGNoYW5nZSB0aGUgY3VycmVu
dCBzZWxlY3Rpb24uCisKKyAgICAgICAgVGhpcyBpcyB0ZXN0ZWQgdmlhIFdlYlZpZXdJbXBsIGlu
IGEgbmV3IHRlc3QgYWRkZWQgdG8gQ2hyb21pdW0ncyBXZWJWaWV3VGVzdC4KKworICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9z
aW5nUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
Lmg6CisgICAgICAgIChFZGl0b3IpOgorCiAyMDEyLTA4LTAxICBWc2V2b2xvZCBWbGFzb3YgIDx2
c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IENyYXNoZXMgaW4g
TmV0d29ya1Jlc291cmNlc0RhdGEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDk2ODQ5
OTM0NDc4Y2NmMGNlMjU3MGI1OWE5ZDMwMzkzZWUwZmNhMGYuLjAyN2RiYTc4ZjU2ZmJkMjE3MTA3
Y2E1ODFlNjVmZGFiYWNiNDM0OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzQgQEAKKzIwMTItMDgtMTAgIE9saSBMYW4gIDxvbGlsYW5AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIEFkZCBXZWJWaWV3IG1ldGhvZHMgc2V0Q29tcG9zaXRpb25XaXRob3V0SW5zZXJ0aW5n
VGV4dCBhbmQgZGVsZXRlU3Vycm91bmRpbmdUZXh0LCBhbmQgYW4gRWRpdG9yIG1ldGhvZCBzZXRD
b21wb3NpdGlvbldpdGhvdXRJbnNlcnRpbmdUZXh0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM3MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgdHdvIG5ldyBtZXRob2RzIHRvIFdlYlZp
ZXdJbXBsLgorCisgICAgICAgIDEpIHNldENvbXBvc2l0aW9uV2l0aG91dEluc2VydGluZ1RleHQg
Y3JlYXRlcyBhIG5ldyBjb21wb3NpdGlvbiBmcm9tIHRoZSBleGlzdGluZyB0ZXh0CisgICAgICAg
IGluIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBpbnB1dCBmaWVsZC4gVGhlIG5ldyBjb21wb3NpdGlv
biBpcyBiZXR3ZWVuIHRoZSB0d28gb2Zmc2V0cworICAgICAgICBwcm92aWRlZCwgcmVsYXRpdmUg
dG8gdGhlIHJvb3RFZGl0YWJsZUVsZW1lbnQuIFRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyBsZWZ0
IHVuY2hhbmdlZC4KKyAgICAgICAgCisgICAgICAgIDIpIGRlbGV0ZVN1cnJvdW5kaW5nVGV4dCBk
ZWxldGVzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYmVmb3JlIGFuZCBhZnRl
cgorICAgICAgICB0aGUgY3VycmVudCBlZGl0aW5nIHBvaW50LgorCisgICAgICAgIFRoZXNlIG1l
dGhvZHMgd2lsbCBiZSB1c2VkIGUuZy4gYnkgdGhlIEFuZHJvaWQgcG9ydCB0byBpbXBsZW1lbnQg
SU1FIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgTmV3IHRlc3RzIFdlYlZpZXdUZXN0LkRlbGV0
ZVN1cnJvdW5kaW5nVGV4dCBhbmQgV2ViVmlld1Rlc3QuU2V0Q29tcG9zaXRpb25XaXRob3V0SW5z
ZXJ0aW5nVGV4dAorICAgICAgICB0ZXN0IHRoZSB0d28gbmV3IG1ldGhvZHMuICAgICAgIAorCisg
ICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAgKFdlYlZpZXcpOgorICAgICAgICAq
IHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRD
b21wb3NpbmdSZWdpb24pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6ZGVs
ZXRlU3Vycm91bmRpbmdUZXh0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAg
ICAgKFdlYlZpZXdJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9XZWJWaWV3VGVzdC5jcHA6CisKIDIw
MTItMDgtMDEgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IHRlc3QgbmF0aXZlIG1lbW9yeSBpbnN0cnVtZW50YXRpb24gY29k
ZSB3aXRoIGhlbHAgb2YgdW5pdHRlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXgg
OWYzMzI5OWMyNzE1OTVkMzc3MDUxYjk1MzhlMmU0NGZlMjE5MmNmZi4uOTcwNGY4ZDhjZWJkMjZk
NTcyNjcxMDhlY2RmYjViMjYzNmY0ZTU5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApA
QCAtMjM2Nyw2ICsyMzY3LDUwIEBAIGJvb2wgRWRpdG9yOjpzZXRTZWxlY3Rpb25PZmZzZXRzKGlu
dCBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvbkVuZCkKICAgICByZXR1cm4gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFZQX0RFRkFVTFRfQUZG
SU5JVFksIGZhbHNlKTsKIH0KIAorYm9vbCBFZGl0b3I6OnNldENvbXBvc2l0aW9uV2l0aG91dElu
c2VydGluZ1RleHQoaW50IGNvbXBvc2l0aW9uU3RhcnQsIGludCBjb21wb3NpdGlvbkVuZCwgY29u
c3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcykKK3sKKyAgICBpZiAo
Y29tcG9zaXRpb25TdGFydCA9PSBjb21wb3NpdGlvbkVuZCkgeworICAgICAgICBSZWZQdHI8VGV4
dD4gY29tcG9zaXRpb25Ob2RlID0gbV9jb21wb3NpdGlvbk5vZGU7CisgICAgICAgIGNhbmNlbENv
bXBvc2l0aW9uKCk7CisgICAgICAgIGlmIChjb21wb3NpdGlvbk5vZGUgJiYgY29tcG9zaXRpb25O
b2RlLT5yZW5kZXJlcigpKQorICAgICAgICAgICAgY29tcG9zaXRpb25Ob2RlLT5yZW5kZXJlcigp
LT5yZXBhaW50KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEVsZW1lbnQq
IHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdl
RnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHJvb3RFZGl0YWJsZUVsZW1lbnQsIGNvbXBvc2l0aW9uU3Rh
cnQsIGNvbXBvc2l0aW9uRW5kIC0gY29tcG9zaXRpb25TdGFydCk7CisgICAgaWYgKCFyYW5nZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTm9kZSogc3RhcnROb2RlID0gcmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCk7CisgICAgTm9kZSogZW5kTm9kZSA9IHJhbmdlLT5lbmRDb250YWluZXIo
KTsKKyAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4dChyYW5nZS5nZXQoKSk7CisgICAgaWYgKHN0
YXJ0Tm9kZSAhPSBlbmROb2RlIHx8IHRleHQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBOb2RlKiB0YXJnZXQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9k
ZSgpOworICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUpCisgICAgICAgIHRhcmdldC0+ZGlzcGF0
Y2hFdmVudChDb21wb3NpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBvc2l0aW9u
c3RhcnRFdmVudCwgbV9mcmFtZS0+ZG9tV2luZG93KCksIHRleHQpKTsKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoQ29tcG9zaXRpb25FdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wb3NpdGlvbnVwZGF0ZUV2ZW50LCBtX2ZyYW1lLT5kb21X
aW5kb3coKSwgdGV4dCksIGVjKTsKKworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gcmFuZ2Ut
PnN0YXJ0T2Zmc2V0KCk7CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNl
dCgpOworICAgIG1fY29tcG9zaXRpb25Ob2RlID0gdG9UZXh0KHN0YXJ0Tm9kZSk7CisgICAgbV9j
b21wb3NpdGlvblN0YXJ0ID0gc3RhcnRPZmZzZXQ7CisgICAgbV9jb21wb3NpdGlvbkVuZCA9IGVu
ZE9mZnNldDsKKyAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcyA9IHVuZGVybGluZXM7
CisgICAgc2l6ZV90IG51bVVuZGVybGluZXMgPSBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5l
cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1VbmRlcmxpbmVzOyArK2kp
IHsKKyAgICAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGluZXNbaV0uc3RhcnRPZmZzZXQg
Kz0gc3RhcnRPZmZzZXQ7CisgICAgICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzW2ld
LmVuZE9mZnNldCArPSBlbmRPZmZzZXQ7CisgICAgfQorICAgIGlmIChzdGFydE5vZGUtPnJlbmRl
cmVyKCkpCisgICAgICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+cmVwYWludCgpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogewogICAgIGlmICgh
Y2FuRWRpdCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggYmRkMzgyOTU0Yzc5NmQzZDE1
NDc3NzZkMDIzMzQ2MGVjMGUxNTBlYS4uYTVmZDMxZjRkNzJkNGU0MmJhOTg1Y2IwMDExOWM0Mzkw
YzYwOTM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0yOTYsNiArMjk2LDcgQEAgcHVi
bGljOgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IGNvbXBvc2l0aW9uUmFuZ2UoKSBjb25zdDsKICAg
ICBib29sIGdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVuc2lnbmVkJiBzZWxlY3Rpb25TdGFydCwg
dW5zaWduZWQmIHNlbGVjdGlvbkVuZCkgY29uc3Q7CiAgICAgYm9vbCBzZXRTZWxlY3Rpb25PZmZz
ZXRzKGludCBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvbkVuZCk7CisgICAgYm9vbCBzZXRD
b21wb3NpdGlvbldpdGhvdXRJbnNlcnRpbmdUZXh0KGludCBjb21wb3NpdGlvblN0YXJ0LCBpbnQg
Y29tcG9zaXRpb25FbmQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVy
bGluZXMpOwogCiAgICAgLy8gZ2V0dGluZyBpbnRlcm5hdGlvbmFsIHRleHQgaW5wdXQgY29tcG9z
aXRpb24gc3RhdGUgKGZvciB1c2UgYnkgSW5saW5lVGV4dEJveCkKICAgICBUZXh0KiBjb21wb3Np
dGlvbk5vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0aW9uTm9kZS5nZXQoKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCmluZGV4IDRkYTMzNjNkZDEzZmQyNWFi
YjFlZTIzNDc1ZjgzMmI2NGRhOGRhZjQuLmU2ZGJiNGM5ZGRhNjBkODJmMWUzZmUxMGI0MjhhYjFj
MTZhYjEwZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZp
ZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTQ1
OCw2ICs0NTgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRyYW5zZmVyQWN0aXZlV2hl
ZWxGbGluZ0FuaW1hdGlvbihjb25zdCBXZWJBY3RpdmVXaGVlbEZsaW5nUGFyYW1ldGVycyYpID0g
MDsKIAogICAgIHZpcnR1YWwgYm9vbCBzZXRFZGl0YWJsZVNlbGVjdGlvbk9mZnNldHMoaW50IHN0
YXJ0LCBpbnQgZW5kKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNldENvbXBvc2l0aW9uV2l0aG91
dEluc2VydGluZ1RleHQoaW50IGNvbXBvc2l0aW9uU3RhcnQsIGludCBjb21wb3NpdGlvbkVuZCwg
Y29uc3QgV2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcykgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVTdXJyb3VuZGluZ1RleHQoaW50IGJlZm9yZSwgaW50
IGFmdGVyKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWxlY3Rpb25FZGl0YWJsZSgpIGNv
bnN0ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmlu
ZGV4IGQ4NzUwZTM4YTI4N2ViMTkwNzM3NDRjYzAzOWUyYzRhMjRkNGVjOTQuLjI3YjQ5M2EyZjQ0
NDEzNWQzMzMwODFiN2U4MmEyNDk2ZmJlNWQzNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTIyMTgsNiArMjIxOCw0MiBAQCBib29sIFdlYlZpZXdJ
bXBsOjpzZXRFZGl0YWJsZVNlbGVjdGlvbk9mZnNldHMoaW50IHN0YXJ0LCBpbnQgZW5kKQogICAg
IHJldHVybiBlZGl0b3ItPnNldFNlbGVjdGlvbk9mZnNldHMoc3RhcnQsIGVuZCk7CiB9CiAKK2Jv
b2wgV2ViVmlld0ltcGw6OnNldENvbXBvc2l0aW9uV2l0aG91dEluc2VydGluZ1RleHQoaW50IGNv
bXBvc2l0aW9uU3RhcnQsIGludCBjb21wb3NpdGlvbkVuZCwgY29uc3QgV2ViVmVjdG9yPFdlYkNv
bXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcykKK3sKKyAgICBjb25zdCBGcmFtZSogZm9j
dXNlZCA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZvY3VzZWQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7
CisgICAgaWYgKCFlZGl0b3IgfHwgIWVkaXRvci0+Y2FuRWRpdCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gZWRpdG9yLT5zZXRDb21wb3NpdGlvbldpdGhvdXRJbnNlcnRp
bmdUZXh0KGNvbXBvc2l0aW9uU3RhcnQsIGNvbXBvc2l0aW9uRW5kLCBDb21wb3NpdGlvblVuZGVy
bGluZVZlY3RvckJ1aWxkZXIodW5kZXJsaW5lcykpOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpk
ZWxldGVTdXJyb3VuZGluZ1RleHQoaW50IGJlZm9yZSwgaW50IGFmdGVyKQoreworICAgIGNvbnN0
IEZyYW1lKiBmb2N1c2VkID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOworICAgIGlmICghZm9jdXNl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRWRpdG9yKiBlZGl0b3IgPSBmb2N1c2VkLT5lZGl0
b3IoKTsKKyAgICBpZiAoIWVkaXRvciB8fCAhZWRpdG9yLT5jYW5FZGl0KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBmb2N1c2VkLT5zZWxlY3Rp
b24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90
IGxvY2F0aW9uOworICAgIHNpemVfdCBsZW5ndGg7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGlmIChyYW5nZSAmJiBU
ZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHNlbGVjdGlvbi0+cm9v
dEVkaXRhYmxlRWxlbWVudCgpLCByYW5nZS5nZXQoKSwgbG9jYXRpb24sIGxlbmd0aCkpIHsKKyAg
ICAgICAgZWRpdG9yLT5zZXRTZWxlY3Rpb25PZmZzZXRzKG1heChzdGF0aWNfY2FzdDxpbnQ+KGxv
Y2F0aW9uKSAtIGJlZm9yZSwgMCksIGxvY2F0aW9uICsgbGVuZ3RoICsgYWZ0ZXIpOworICAgICAg
ICBlZGl0b3ItPnBlcmZvcm1EZWxldGUoKTsKKyAgICB9Cit9CisKIGJvb2wgV2ViVmlld0ltcGw6
OmlzU2VsZWN0aW9uRWRpdGFibGUoKSBjb25zdAogewogICAgIGNvbnN0IEZyYW1lKiBmcmFtZSA9
IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oCmluZGV4IDBiMWRhMmEyN2Q1NjkxM2JlNjIwMDFhZWZiMDIwNTlhZmZjZDA4MDUuLjAw
YWNlNDFiZTZmY2RjNTYzZTIwODA3NDRkYmI1YmQzNDlmYzk4NjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMTYyLDYgKzE2Miw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFdlYlRleHRJbnB1dEluZm8gdGV4dElucHV0SW5mbygpOwogICAgIHZpcnR1YWwg
V2ViVGV4dElucHV0VHlwZSB0ZXh0SW5wdXRUeXBlKCk7CiAgICAgdmlydHVhbCBib29sIHNldEVk
aXRhYmxlU2VsZWN0aW9uT2Zmc2V0cyhpbnQgc3RhcnQsIGludCBlbmQpOworICAgIHZpcnR1YWwg
Ym9vbCBzZXRDb21wb3NpdGlvbldpdGhvdXRJbnNlcnRpbmdUZXh0KGludCBjb21wb3NpdGlvblN0
YXJ0LCBpbnQgY29tcG9zaXRpb25FbmQsIGNvbnN0IFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVu
ZGVybGluZT4mIHVuZGVybGluZXMpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVTdXJyb3VuZGlu
Z1RleHQoaW50IGJlZm9yZSwgaW50IGFmdGVyKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWxlY3Rp
b25FZGl0YWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgV2ViQ29sb3IgYmFja2dyb3VuZENvbG9y
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNlbGVjdGlvbkJvdW5kcyhXZWJSZWN0JiBzdGFy
dCwgV2ViUmVjdCYgZW5kKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9X
ZWJWaWV3VGVzdC5jcHAKaW5kZXggM2NhMTA5NGQwYWMyZGNlMGMwMWMxYThlZWI2MTc1YzczNjQ4
MGFmZS4uNWUyNzhiN2IyM2MxZjM1NDY5NTdmYjdmYjE1N2UyNWY4NjY0ZWM5NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKQEAgLTM3OSw0ICszNzks
NDMgQEAgVEVTVF9GKFdlYlZpZXdUZXN0LCBGb3JtQ2hhbmdlKQogICAgIHdlYlZpZXctPmNsb3Nl
KCk7CiB9CiAKK1RFU1RfRihXZWJWaWV3VGVzdCwgRGVsZXRlU3Vycm91bmRpbmdUZXh0KQorewor
ICAgIFVSTFRlc3RIZWxwZXJzOjpyZWdpc3Rlck1vY2tlZFVSTEZyb21CYXNlVVJMKFdlYlN0cmlu
Zzo6ZnJvbVVURjgobV9iYXNlVVJMLmNfc3RyKCkpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbnB1
dF9maWVsZF9wb3B1bGF0ZWQuaHRtbCIpKTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gRnJhbWVU
ZXN0SGVscGVyczo6Y3JlYXRlV2ViVmlld0FuZExvYWQobV9iYXNlVVJMICsgImlucHV0X2ZpZWxk
X3BvcHVsYXRlZC5odG1sIik7CisgICAgd2ViVmlldy0+c2V0SW5pdGlhbEZvY3VzKGZhbHNlKTsK
KyAgICB3ZWJWaWV3LT5zZXRFZGl0YWJsZVNlbGVjdGlvbk9mZnNldHMoMTAsIDEwKTsKKyAgICB3
ZWJWaWV3LT5kZWxldGVTdXJyb3VuZGluZ1RleHQoNSwgOCk7CisgICAgV2ViVGV4dElucHV0SW5m
byBpbmZvID0gd2ViVmlldy0+dGV4dElucHV0SW5mbygpOworICAgIEVYUEVDVF9FUSgiMDEyMzRp
amtsbW5vcHFyc3R1dnd4eXoiLCBzdGQ6OnN0cmluZyhpbmZvLnZhbHVlLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICBFWFBFQ1RfRVEoNSwgaW5mby5zZWxlY3Rpb25TdGFydCk7CisgICAgRVhQRUNUX0VR
KDUsIGluZm8uc2VsZWN0aW9uRW5kKTsKKyAgICB3ZWJWaWV3LT5kZWxldGVTdXJyb3VuZGluZ1Rl
eHQoMTAsIDApOworICAgIGluZm8gPSB3ZWJWaWV3LT50ZXh0SW5wdXRJbmZvKCk7CisgICAgRVhQ
RUNUX0VRKCJpamtsbW5vcHFyc3R1dnd4eXoiLCBzdGQ6OnN0cmluZyhpbmZvLnZhbHVlLnV0Zjgo
KS5kYXRhKCkpKTsKKyAgICB3ZWJWaWV3LT5jbG9zZSgpOworfQorCitURVNUX0YoV2ViVmlld1Rl
c3QsIFNldENvbXBvc2l0aW9uV2l0aG91dEluc2VydGluZ1RleHQpCit7CisgICAgVVJMVGVzdEhl
bHBlcnM6OnJlZ2lzdGVyTW9ja2VkVVJMRnJvbUJhc2VVUkwoV2ViU3RyaW5nOjpmcm9tVVRGOCht
X2Jhc2VVUkwuY19zdHIoKSksIFdlYlN0cmluZzo6ZnJvbVVURjgoImlucHV0X2ZpZWxkX3BvcHVs
YXRlZC5odG1sIikpOworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBGcmFtZVRlc3RIZWxwZXJzOjpj
cmVhdGVXZWJWaWV3QW5kTG9hZChtX2Jhc2VVUkwgKyAiaW5wdXRfZmllbGRfcG9wdWxhdGVkLmh0
bWwiKTsKKyAgICB3ZWJWaWV3LT5zZXRJbml0aWFsRm9jdXMoZmFsc2UpOworICAgIFdlYlZlY3Rv
cjxXZWJDb21wb3NpdGlvblVuZGVybGluZT4gZW1wdHlVbmRlcmxpbmVzOworICAgIHdlYlZpZXct
PnNldEVkaXRhYmxlU2VsZWN0aW9uT2Zmc2V0cyg0LCAxMCk7CisgICAgd2ViVmlldy0+c2V0Q29t
cG9zaXRpb25XaXRob3V0SW5zZXJ0aW5nVGV4dCg4LCAxMiwgZW1wdHlVbmRlcmxpbmVzKTsKKyAg
ICBXZWJUZXh0SW5wdXRJbmZvIGluZm8gPSB3ZWJWaWV3LT50ZXh0SW5wdXRJbmZvKCk7CisgICAg
RVhQRUNUX0VRKDQsIGluZm8uc2VsZWN0aW9uU3RhcnQpOworICAgIEVYUEVDVF9FUSgxMCwgaW5m
by5zZWxlY3Rpb25FbmQpOworICAgIEVYUEVDVF9FUSg4LCBpbmZvLmNvbXBvc2l0aW9uU3RhcnQp
OworICAgIEVYUEVDVF9FUSgxMiwgaW5mby5jb21wb3NpdGlvbkVuZCk7CisgICAgd2ViVmlldy0+
c2V0Q29tcG9zaXRpb25XaXRob3V0SW5zZXJ0aW5nVGV4dCgwLCAwLCBlbXB0eVVuZGVybGluZXMp
OworICAgIGluZm8gPSB3ZWJWaWV3LT50ZXh0SW5wdXRJbmZvKCk7CisgICAgRVhQRUNUX0VRKDQs
IGluZm8uc2VsZWN0aW9uU3RhcnQpOworICAgIEVYUEVDVF9FUSgxMCwgaW5mby5zZWxlY3Rpb25F
bmQpOworICAgIEVYUEVDVF9FUSgtMSwgaW5mby5jb21wb3NpdGlvblN0YXJ0KTsKKyAgICBFWFBF
Q1RfRVEoLTEsIGluZm8uY29tcG9zaXRpb25FbmQpOworICAgIHdlYlZpZXctPmNsb3NlKCk7Cit9
CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159140</attachid>
            <date>2012-08-17 09:28:05 -0700</date>
            <delta_ts>2012-08-20 09:08:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93724-20120817172729.patch</filename>
            <type>text/plain</type>
            <size>7742</size>
            <attacher name="Oli Lan">olilan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1OTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDkxOTEyOThlYjBlNTY4NThiODExZDRjMmZjODI3ZmJhYTk3NDE3OWMuLjg0Nzc5Y2Q5YjAxODA3
ZDczMDQ5NmE4MTcwY2Q0Y2ViY2FkOWMwMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTItMDgtMTcgIE9saSBMYW4gIDxvbGlsYW5AY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIEFkZCBXZWJWaWV3IG1ldGhvZHMgc2V0Q29tcG9zaXRpb25Gcm9tRXhpc3Rp
bmdUZXh0IGFuZCBkZWxldGVTdXJyb3VuZGluZ1RleHQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzcyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyB0d28gbmV3IG1ldGhvZHMgdG8gV2Vi
Vmlld0ltcGwuCisKKyAgICAgICAgMSkgc2V0Q29tcG9zaXRpb25Gcm9tRXhpc3RpbmdUZXh0IGNy
ZWF0ZXMgYSBuZXcgY29tcG9zaXRpb24gZnJvbSB0aGUgZXhpc3RpbmcgdGV4dAorICAgICAgICBp
biB0aGUgY3VycmVudGx5IGZvY3VzZWQgaW5wdXQgZmllbGQuIFRoZSBuZXcgY29tcG9zaXRpb24g
aXMgYmV0d2VlbiB0aGUgdHdvIG9mZnNldHMKKyAgICAgICAgcHJvdmlkZWQsIHJlbGF0aXZlIHRv
IHRoZSByb290RWRpdGFibGVFbGVtZW50LiBUaGUgY3VycmVudCBzZWxlY3Rpb24gaXMgbGVmdCB1
bmNoYW5nZWQuCisgICAgICAgIAorICAgICAgICAyKSBkZWxldGVTdXJyb3VuZGluZ1RleHQgZGVs
ZXRlcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJlZm9yZSBhbmQgYWZ0ZXIK
KyAgICAgICAgdGhlIGN1cnJlbnQgZWRpdGluZyBwb2ludC4KKworICAgICAgICBUaGVzZSBtZXRo
b2RzIHdpbGwgYmUgdXNlZCBlLmcuIGJ5IHRoZSBBbmRyb2lkIHBvcnQgdG8gaW1wbGVtZW50IElN
RSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIE5ldyB0ZXN0cyBXZWJWaWV3VGVzdC5EZWxldGVT
dXJyb3VuZGluZ1RleHQgYW5kIFdlYlZpZXdUZXN0LlNldENvbXBvc2l0aW9uRnJvbUV4aXN0aW5n
VGV4dAorICAgICAgICB0ZXN0IHRoZSB0d28gbmV3IG1ldGhvZHMuICAgICAgIAorCisgICAgICAg
ICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAgKFdlYlZpZXcpOgorICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRDb21wb3Np
bmdSZWdpb24pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6ZGVsZXRlU3Vy
cm91bmRpbmdUZXh0KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdl
YlZpZXdJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9XZWJWaWV3VGVzdC5jcHA6CisKIDIwMTItMDgt
MTcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjU4OTIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJWaWV3LmgKaW5kZXggNDVkM2RkM2MzNGQxMmNiNzhhNGY3Yzc5MjRlMDg0NTQ5MTlh
NDE3Ny4uZTRjMTc2YjQzMmU2MjFhNzA5M2FlNGI5M2MzMWNmYTYzYzhjMjAwMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaApAQCAtNDYwLDYgKzQ2MCw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmZXJBY3RpdmVXaGVlbEZsaW5nQW5pbWF0aW9uKGNv
bnN0IFdlYkFjdGl2ZVdoZWVsRmxpbmdQYXJhbWV0ZXJzJikgPSAwOwogCiAgICAgdmlydHVhbCBi
b29sIHNldEVkaXRhYmxlU2VsZWN0aW9uT2Zmc2V0cyhpbnQgc3RhcnQsIGludCBlbmQpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgc2V0Q29tcG9zaXRpb25Gcm9tRXhpc3RpbmdUZXh0KGludCBjb21w
b3NpdGlvblN0YXJ0LCBpbnQgY29tcG9zaXRpb25FbmQsIGNvbnN0IFdlYlZlY3RvcjxXZWJDb21w
b3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlU3Vycm91bmRpbmdUZXh0KGludCBiZWZvcmUsIGludCBhZnRlcikgPSAwOwogCiAgICAgdmly
dHVhbCBib29sIGlzU2VsZWN0aW9uRWRpdGFibGUoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCAwYmQzZWExMTZlNGMwNTJkZWFh
MDVlNjYzMDc2NGUzMmY5Y2E0MTY4Li5iZjg2ODM4YjAxZGE1ZTIxOWU4ZDE4YmE1ZDIwZWEzMGQ1
OTNjODVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBA
IC0yMjE2LDYgKzIyMTYsNTggQEAgYm9vbCBXZWJWaWV3SW1wbDo6c2V0RWRpdGFibGVTZWxlY3Rp
b25PZmZzZXRzKGludCBzdGFydCwgaW50IGVuZCkKICAgICByZXR1cm4gZWRpdG9yLT5zZXRTZWxl
Y3Rpb25PZmZzZXRzKHN0YXJ0LCBlbmQpOwogfQogCitib29sIFdlYlZpZXdJbXBsOjpzZXRDb21w
b3NpdGlvbkZyb21FeGlzdGluZ1RleHQoaW50IGNvbXBvc2l0aW9uU3RhcnQsIGludCBjb21wb3Np
dGlvbkVuZCwgY29uc3QgV2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJs
aW5lcykKK3sKKyAgICBjb25zdCBGcmFtZSogZm9jdXNlZCA9IGZvY3VzZWRXZWJDb3JlRnJhbWUo
KTsKKyAgICBpZiAoIWZvY3VzZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVkaXRv
ciogZWRpdG9yID0gZm9jdXNlZC0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IgfHwgIWVkaXRv
ci0+Y2FuRWRpdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlZGl0b3ItPmNhbmNl
bENvbXBvc2l0aW9uKCk7CisKKyAgICBpZiAoY29tcG9zaXRpb25TdGFydCA9PSBjb21wb3NpdGlv
bkVuZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBzaXplX3QgbG9jYXRpb247CisgICAg
c2l6ZV90IGxlbmd0aDsKKyAgICBjYXJldE9yU2VsZWN0aW9uUmFuZ2UoJmxvY2F0aW9uLCAmbGVu
Z3RoKTsKKyAgICBlZGl0b3ItPnNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKHRy
dWUpOworICAgIGVkaXRvci0+c2V0U2VsZWN0aW9uT2Zmc2V0cyhjb21wb3NpdGlvblN0YXJ0LCBj
b21wb3NpdGlvbkVuZCk7CisgICAgU3RyaW5nIHRleHQgPSBlZGl0b3ItPnNlbGVjdGVkVGV4dCgp
OworICAgIGVkaXRvci0+cGVyZm9ybURlbGV0ZSgpOworICAgIGVkaXRvci0+c2V0Q29tcG9zaXRp
b24odGV4dCwgQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyKHVuZGVybGluZXMpLCAw
LCAwKTsKKyAgICBlZGl0b3ItPnNldFNlbGVjdGlvbk9mZnNldHMobG9jYXRpb24sIGxvY2F0aW9u
ICsgbGVuZ3RoKTsKKyAgICBlZGl0b3ItPnNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hh
bmdlKGZhbHNlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYlZpZXdJbXBsOjpk
ZWxldGVTdXJyb3VuZGluZ1RleHQoaW50IGJlZm9yZSwgaW50IGFmdGVyKQoreworICAgIGNvbnN0
IEZyYW1lKiBmb2N1c2VkID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOworICAgIGlmICghZm9jdXNl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRWRpdG9yKiBlZGl0b3IgPSBmb2N1c2VkLT5lZGl0
b3IoKTsKKyAgICBpZiAoIWVkaXRvciB8fCAhZWRpdG9yLT5jYW5FZGl0KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rpb24gPSBmb2N1c2VkLT5zZWxlY3Rp
b24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90
IGxvY2F0aW9uOworICAgIHNpemVfdCBsZW5ndGg7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGlmIChyYW5nZSAmJiBU
ZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKHNlbGVjdGlvbi0+cm9v
dEVkaXRhYmxlRWxlbWVudCgpLCByYW5nZS5nZXQoKSwgbG9jYXRpb24sIGxlbmd0aCkpIHsKKyAg
ICAgICAgZWRpdG9yLT5zZXRTZWxlY3Rpb25PZmZzZXRzKG1heChzdGF0aWNfY2FzdDxpbnQ+KGxv
Y2F0aW9uKSAtIGJlZm9yZSwgMCksIGxvY2F0aW9uICsgbGVuZ3RoICsgYWZ0ZXIpOworICAgICAg
ICBlZGl0b3ItPnBlcmZvcm1EZWxldGUoKTsKKyAgICB9Cit9CisKIGJvb2wgV2ViVmlld0ltcGw6
OmlzU2VsZWN0aW9uRWRpdGFibGUoKSBjb25zdAogewogICAgIGNvbnN0IEZyYW1lKiBmcmFtZSA9
IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oCmluZGV4IDM5NzgzNjgwZmExOTg5ODg2YzQ2MGIxM2Q0MGRkMTQwNDFhMmE0MmIuLmEz
Y2M4MTM5ZjMxMWZlMzg2ZmUyOGQ1MTI5NGEwZTdmYWZjODliNmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMTYyLDYgKzE2Miw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFdlYlRleHRJbnB1dEluZm8gdGV4dElucHV0SW5mbygpOwogICAgIHZpcnR1YWwg
V2ViVGV4dElucHV0VHlwZSB0ZXh0SW5wdXRUeXBlKCk7CiAgICAgdmlydHVhbCBib29sIHNldEVk
aXRhYmxlU2VsZWN0aW9uT2Zmc2V0cyhpbnQgc3RhcnQsIGludCBlbmQpOworICAgIHZpcnR1YWwg
Ym9vbCBzZXRDb21wb3NpdGlvbkZyb21FeGlzdGluZ1RleHQoaW50IGNvbXBvc2l0aW9uU3RhcnQs
IGludCBjb21wb3NpdGlvbkVuZCwgY29uc3QgV2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJs
aW5lPiYgdW5kZXJsaW5lcyk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVN1cnJvdW5kaW5nVGV4
dChpbnQgYmVmb3JlLCBpbnQgYWZ0ZXIpOwogICAgIHZpcnR1YWwgYm9vbCBpc1NlbGVjdGlvbkVk
aXRhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBXZWJDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0aW9uQm91bmRzKFdlYlJlY3QmIHN0YXJ0LCBX
ZWJSZWN0JiBlbmQpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9XZWJWaWV3VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlZp
ZXdUZXN0LmNwcAppbmRleCAzY2ExMDk0ZDBhYzJkY2UwYzAxYzFhOGVlYjYxNzVjNzM2NDgwYWZl
Li4zZmQzMTk5NDE2ZjVhMzU1OGZhNzk0NTZjZmYwODNmMDIxNGY0NWU2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApAQCAtMzc5LDQgKzM3OSw0MyBA
QCBURVNUX0YoV2ViVmlld1Rlc3QsIEZvcm1DaGFuZ2UpCiAgICAgd2ViVmlldy0+Y2xvc2UoKTsK
IH0KIAorVEVTVF9GKFdlYlZpZXdUZXN0LCBEZWxldGVTdXJyb3VuZGluZ1RleHQpCit7CisgICAg
VVJMVGVzdEhlbHBlcnM6OnJlZ2lzdGVyTW9ja2VkVVJMRnJvbUJhc2VVUkwoV2ViU3RyaW5nOjpm
cm9tVVRGOChtX2Jhc2VVUkwuY19zdHIoKSksIFdlYlN0cmluZzo6ZnJvbVVURjgoImlucHV0X2Zp
ZWxkX3BvcHVsYXRlZC5odG1sIikpOworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBGcmFtZVRlc3RI
ZWxwZXJzOjpjcmVhdGVXZWJWaWV3QW5kTG9hZChtX2Jhc2VVUkwgKyAiaW5wdXRfZmllbGRfcG9w
dWxhdGVkLmh0bWwiKTsKKyAgICB3ZWJWaWV3LT5zZXRJbml0aWFsRm9jdXMoZmFsc2UpOworICAg
IHdlYlZpZXctPnNldEVkaXRhYmxlU2VsZWN0aW9uT2Zmc2V0cygxMCwgMTApOworICAgIHdlYlZp
ZXctPmRlbGV0ZVN1cnJvdW5kaW5nVGV4dCg1LCA4KTsKKyAgICBXZWJUZXh0SW5wdXRJbmZvIGlu
Zm8gPSB3ZWJWaWV3LT50ZXh0SW5wdXRJbmZvKCk7CisgICAgRVhQRUNUX0VRKCIwMTIzNGlqa2xt
bm9wcXJzdHV2d3h5eiIsIHN0ZDo6c3RyaW5nKGluZm8udmFsdWUudXRmOCgpLmRhdGEoKSkpOwor
ICAgIEVYUEVDVF9FUSg1LCBpbmZvLnNlbGVjdGlvblN0YXJ0KTsKKyAgICBFWFBFQ1RfRVEoNSwg
aW5mby5zZWxlY3Rpb25FbmQpOworICAgIHdlYlZpZXctPmRlbGV0ZVN1cnJvdW5kaW5nVGV4dCgx
MCwgMCk7CisgICAgaW5mbyA9IHdlYlZpZXctPnRleHRJbnB1dEluZm8oKTsKKyAgICBFWFBFQ1Rf
RVEoImlqa2xtbm9wcXJzdHV2d3h5eiIsIHN0ZDo6c3RyaW5nKGluZm8udmFsdWUudXRmOCgpLmRh
dGEoKSkpOworICAgIHdlYlZpZXctPmNsb3NlKCk7Cit9CisKK1RFU1RfRihXZWJWaWV3VGVzdCwg
U2V0Q29tcG9zaXRpb25Gcm9tRXhpc3RpbmdUZXh0KQoreworICAgIFVSTFRlc3RIZWxwZXJzOjpy
ZWdpc3Rlck1vY2tlZFVSTEZyb21CYXNlVVJMKFdlYlN0cmluZzo6ZnJvbVVURjgobV9iYXNlVVJM
LmNfc3RyKCkpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbnB1dF9maWVsZF9wb3B1bGF0ZWQuaHRt
bCIpKTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gRnJhbWVUZXN0SGVscGVyczo6Y3JlYXRlV2Vi
Vmlld0FuZExvYWQobV9iYXNlVVJMICsgImlucHV0X2ZpZWxkX3BvcHVsYXRlZC5odG1sIik7Cisg
ICAgd2ViVmlldy0+c2V0SW5pdGlhbEZvY3VzKGZhbHNlKTsKKyAgICBXZWJWZWN0b3I8V2ViQ29t
cG9zaXRpb25VbmRlcmxpbmU+IGVtcHR5VW5kZXJsaW5lczsKKyAgICB3ZWJWaWV3LT5zZXRFZGl0
YWJsZVNlbGVjdGlvbk9mZnNldHMoNCwgMTApOworICAgIHdlYlZpZXctPnNldENvbXBvc2l0aW9u
RnJvbUV4aXN0aW5nVGV4dCg4LCAxMiwgZW1wdHlVbmRlcmxpbmVzKTsKKyAgICBXZWJUZXh0SW5w
dXRJbmZvIGluZm8gPSB3ZWJWaWV3LT50ZXh0SW5wdXRJbmZvKCk7CisgICAgRVhQRUNUX0VRKDQs
IGluZm8uc2VsZWN0aW9uU3RhcnQpOworICAgIEVYUEVDVF9FUSgxMCwgaW5mby5zZWxlY3Rpb25F
bmQpOworICAgIEVYUEVDVF9FUSg4LCBpbmZvLmNvbXBvc2l0aW9uU3RhcnQpOworICAgIEVYUEVD
VF9FUSgxMiwgaW5mby5jb21wb3NpdGlvbkVuZCk7CisgICAgd2ViVmlldy0+c2V0Q29tcG9zaXRp
b25Gcm9tRXhpc3RpbmdUZXh0KDAsIDAsIGVtcHR5VW5kZXJsaW5lcyk7CisgICAgaW5mbyA9IHdl
YlZpZXctPnRleHRJbnB1dEluZm8oKTsKKyAgICBFWFBFQ1RfRVEoNCwgaW5mby5zZWxlY3Rpb25T
dGFydCk7CisgICAgRVhQRUNUX0VRKDEwLCBpbmZvLnNlbGVjdGlvbkVuZCk7CisgICAgRVhQRUNU
X0VRKC0xLCBpbmZvLmNvbXBvc2l0aW9uU3RhcnQpOworICAgIEVYUEVDVF9FUSgtMSwgaW5mby5j
b21wb3NpdGlvbkVuZCk7CisgICAgd2ViVmlldy0+Y2xvc2UoKTsKK30KKwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159446</attachid>
            <date>2012-08-20 09:07:05 -0700</date>
            <delta_ts>2012-08-20 10:30:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93724-20120820170625.patch</filename>
            <type>text/plain</type>
            <size>8017</size>
            <attacher name="Oli Lan">olilan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MDIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGQ2YmY2NTM0YTdjZTViM2FhZTkzYWRmYjRkYTg1YmFkMDFiMzQ3NzYuLmQ5MTRmZjVhZmE4YWE3
ODM5Y2JlNGMyYjA1YzA2NzQzZDVhNDJhYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTItMDgtMjAgIE9saSBMYW4gIDxvbGlsYW5AY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIEFkZCBXZWJWaWV3IG1ldGhvZHMgc2V0Q29tcG9zaXRpb25Gcm9tRXhpc3Rp
bmdUZXh0IGFuZCBleHRlbmRTZWxlY3Rpb25BbmREZWxldGUuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzcyNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyB0d28gbmV3IG1ldGhvZHMgdG8g
V2ViVmlld0ltcGwuCisKKyAgICAgICAgMSkgc2V0Q29tcG9zaXRpb25Gcm9tRXhpc3RpbmdUZXh0
IGNyZWF0ZXMgYSBuZXcgY29tcG9zaXRpb24gZnJvbSB0aGUgZXhpc3RpbmcgdGV4dAorICAgICAg
ICBpbiB0aGUgY3VycmVudGx5IGZvY3VzZWQgaW5wdXQgZmllbGQuIFRoZSBuZXcgY29tcG9zaXRp
b24gaXMgYmV0d2VlbiB0aGUgdHdvIG9mZnNldHMKKyAgICAgICAgcHJvdmlkZWQsIHJlbGF0aXZl
IHRvIHRoZSByb290RWRpdGFibGVFbGVtZW50LiBUaGUgY3VycmVudCBzZWxlY3Rpb24gaXMgbGVm
dCB1bmNoYW5nZWQuCisgICAgICAgIAorICAgICAgICAyKSBleHRlbmRTZWxlY3Rpb25BbmREZWxl
dGUgZXh0ZW5kcyB0aGUgc2VsZWN0aW9uIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNoYXJh
Y3RlcnMKKyAgICAgICAgYmVmb3JlIGFuZCBhZnRlciwgYW5kIHRoZW4gZGVsZXRlcyB0aGUgc2Vs
ZWN0aW9uLiBJZiB0aGUgc2VsZWN0aW9uIGlzIGp1c3QgYSBjYXJldCwgdGhlIGVmZmVjdAorICAg
ICAgICBpcyB0byBkZWxldGUgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycyBiZWZv
cmUgYW5kIGFmdGVyIHRoZSBjdXJyZW50IGVkaXRpbmcgcG9pbnQuCisKKyAgICAgICAgVGhlc2Ug
bWV0aG9kcyB3aWxsIGJlIHVzZWQgZS5nLiBieSB0aGUgQW5kcm9pZCBwb3J0IHRvIGltcGxlbWVu
dCBJTUUgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICBOZXcgdGVzdHMgV2ViVmlld1Rlc3QuRXh0
ZW5kU2VsZWN0aW9uQW5kRGVsZXRlIGFuZCBXZWJWaWV3VGVzdC5TZXRDb21wb3NpdGlvbkZyb21F
eGlzdGluZ1RleHQKKyAgICAgICAgdGVzdCB0aGUgdHdvIG5ldyBtZXRob2RzLiAgICAgICAKKwor
ICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAg
KiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0
Q29tcG9zaW5nUmVnaW9uKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmV4
dGVuZFNlbGVjdGlvbkFuZERlbGV0ZSk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6Cisg
ICAgICAgIChXZWJWaWV3SW1wbCk6CisgICAgICAgICogdGVzdHMvV2ViVmlld1Rlc3QuY3BwOgor
CiAyMDEyLTA4LTIwICBTYW1pIEt5b3N0aWxhICA8c2t5b3N0aWxAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gQ29udmVydCBzY3JlZW4gc3BhY2Ugc2Nyb2xsIGdlc3R1cmVzIHRv
IGxheWVyIHNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKaW5kZXgg
NDVkM2RkM2MzNGQxMmNiNzhhNGY3Yzc5MjRlMDg0NTQ5MTlhNDE3Ny4uZTk1ZWM2YjUzNWU4OTVi
NGVkZWRjMTE0NTA3ZDMzMjRhNmJlMGUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlZpZXcuaApAQCAtNDYwLDYgKzQ2MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
dHJhbnNmZXJBY3RpdmVXaGVlbEZsaW5nQW5pbWF0aW9uKGNvbnN0IFdlYkFjdGl2ZVdoZWVsRmxp
bmdQYXJhbWV0ZXJzJikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHNldEVkaXRhYmxlU2VsZWN0
aW9uT2Zmc2V0cyhpbnQgc3RhcnQsIGludCBlbmQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0
Q29tcG9zaXRpb25Gcm9tRXhpc3RpbmdUZXh0KGludCBjb21wb3NpdGlvblN0YXJ0LCBpbnQgY29t
cG9zaXRpb25FbmQsIGNvbnN0IFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVybGluZT4mIHVu
ZGVybGluZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXh0ZW5kU2VsZWN0aW9uQW5kRGVsZXRl
KGludCBiZWZvcmUsIGludCBhZnRlcikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGlzU2VsZWN0
aW9uRWRpdGFibGUoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAppbmRleCAwYmQzZWExMTZlNGMwNTJkZWFhMDVlNjYzMDc2NGUzMmY5Y2E0
MTY4Li43NGUyYTI5YmZhNjllNWQ3ZWM5NzY1YTZlYTAwZTI5NjMxYTZmZjQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0yMjE2LDYgKzIyMTYsNTgg
QEAgYm9vbCBXZWJWaWV3SW1wbDo6c2V0RWRpdGFibGVTZWxlY3Rpb25PZmZzZXRzKGludCBzdGFy
dCwgaW50IGVuZCkKICAgICByZXR1cm4gZWRpdG9yLT5zZXRTZWxlY3Rpb25PZmZzZXRzKHN0YXJ0
LCBlbmQpOwogfQogCitib29sIFdlYlZpZXdJbXBsOjpzZXRDb21wb3NpdGlvbkZyb21FeGlzdGlu
Z1RleHQoaW50IGNvbXBvc2l0aW9uU3RhcnQsIGludCBjb21wb3NpdGlvbkVuZCwgY29uc3QgV2Vi
VmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcykKK3sKKyAgICBjb25z
dCBGcmFtZSogZm9jdXNlZCA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBpZiAoIWZvY3Vz
ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVkaXRvciogZWRpdG9yID0gZm9jdXNl
ZC0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IgfHwgIWVkaXRvci0+Y2FuRWRpdCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlZGl0b3ItPmNhbmNlbENvbXBvc2l0aW9uKCk7CisK
KyAgICBpZiAoY29tcG9zaXRpb25TdGFydCA9PSBjb21wb3NpdGlvbkVuZCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBzaXplX3QgbG9jYXRpb247CisgICAgc2l6ZV90IGxlbmd0aDsKKyAg
ICBjYXJldE9yU2VsZWN0aW9uUmFuZ2UoJmxvY2F0aW9uLCAmbGVuZ3RoKTsKKyAgICBlZGl0b3It
PnNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlKHRydWUpOworICAgIGVkaXRvci0+
c2V0U2VsZWN0aW9uT2Zmc2V0cyhjb21wb3NpdGlvblN0YXJ0LCBjb21wb3NpdGlvbkVuZCk7Cisg
ICAgU3RyaW5nIHRleHQgPSBlZGl0b3ItPnNlbGVjdGVkVGV4dCgpOworICAgIGZvY3VzZWQtPmRv
Y3VtZW50KCktPmV4ZWNDb21tYW5kKCJkZWxldGUiLCB0cnVlKTsKKyAgICBlZGl0b3ItPnNldENv
bXBvc2l0aW9uKHRleHQsIENvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlcih1bmRlcmxp
bmVzKSwgMCwgMCk7CisgICAgZWRpdG9yLT5zZXRTZWxlY3Rpb25PZmZzZXRzKGxvY2F0aW9uLCBs
b2NhdGlvbiArIGxlbmd0aCk7CisgICAgZWRpdG9yLT5zZXRJZ25vcmVDb21wb3NpdGlvblNlbGVj
dGlvbkNoYW5nZShmYWxzZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJWaWV3
SW1wbDo6ZXh0ZW5kU2VsZWN0aW9uQW5kRGVsZXRlKGludCBiZWZvcmUsIGludCBhZnRlcikKK3sK
KyAgICBjb25zdCBGcmFtZSogZm9jdXNlZCA9IGZvY3VzZWRXZWJDb3JlRnJhbWUoKTsKKyAgICBp
ZiAoIWZvY3VzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEVkaXRvciogZWRpdG9yID0gZm9j
dXNlZC0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IgfHwgIWVkaXRvci0+Y2FuRWRpdCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZVNlbGVjdGlvbiogc2VsZWN0aW9uID0gZm9jdXNl
ZC0+c2VsZWN0aW9uKCk7CisgICAgaWYgKCFzZWxlY3Rpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIHNpemVfdCBsb2NhdGlvbjsKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBzZWxlY3Rpb24tPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAo
cmFuZ2UgJiYgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShzZWxl
Y3Rpb24tPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSwgcmFuZ2UuZ2V0KCksIGxvY2F0aW9uLCBsZW5n
dGgpKSB7CisgICAgICAgIGVkaXRvci0+c2V0U2VsZWN0aW9uT2Zmc2V0cyhtYXgoc3RhdGljX2Nh
c3Q8aW50Pihsb2NhdGlvbikgLSBiZWZvcmUsIDApLCBsb2NhdGlvbiArIGxlbmd0aCArIGFmdGVy
KTsKKyAgICAgICAgZm9jdXNlZC0+ZG9jdW1lbnQoKS0+ZXhlY0NvbW1hbmQoImRlbGV0ZSIsIHRy
dWUpOworICAgIH0KK30KKwogYm9vbCBXZWJWaWV3SW1wbDo6aXNTZWxlY3Rpb25FZGl0YWJsZSgp
IGNvbnN0CiB7CiAgICAgY29uc3QgRnJhbWUqIGZyYW1lID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggMzk3ODM2ODBm
YTE5ODk4ODZjNDYwYjEzZDQwZGQxNDA0MWEyYTQyYi4uNDk5MjkxNjBkNDVhZDAzY2RjZTU4OGVm
MGRkZWE5ODAzYWZkMmVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oCkBAIC0xNjIsNiArMTYyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViVGV4dElucHV0
SW5mbyB0ZXh0SW5wdXRJbmZvKCk7CiAgICAgdmlydHVhbCBXZWJUZXh0SW5wdXRUeXBlIHRleHRJ
bnB1dFR5cGUoKTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0RWRpdGFibGVTZWxlY3Rpb25PZmZzZXRz
KGludCBzdGFydCwgaW50IGVuZCk7CisgICAgdmlydHVhbCBib29sIHNldENvbXBvc2l0aW9uRnJv
bUV4aXN0aW5nVGV4dChpbnQgY29tcG9zaXRpb25TdGFydCwgaW50IGNvbXBvc2l0aW9uRW5kLCBj
b25zdCBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXh0ZW5kU2VsZWN0aW9uQW5kRGVsZXRlKGludCBiZWZvcmUsIGludCBh
ZnRlcik7CiAgICAgdmlydHVhbCBib29sIGlzU2VsZWN0aW9uRWRpdGFibGUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFdlYkNvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBzZWxlY3Rpb25Cb3VuZHMoV2ViUmVjdCYgc3RhcnQsIFdlYlJlY3QmIGVuZCkgY29uc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlZpZXdUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVmlld1Rlc3QuY3BwCmluZGV4IDNj
YTEwOTRkMGFjMmRjZTBjMDFjMWE4ZWViNjE3NWM3MzY0ODBhZmUuLjQ2Yzk2MzEwZDY0Yzg4ZGE5
MGJmMTcxZDM4MjMyN2JmMDMzMGQ3ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvV2ViVmlld1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvV2ViVmlld1Rlc3QuY3BwCkBAIC0zNzksNCArMzc5LDQzIEBAIFRFU1RfRihXZWJWaWV3VGVz
dCwgRm9ybUNoYW5nZSkKICAgICB3ZWJWaWV3LT5jbG9zZSgpOwogfQogCitURVNUX0YoV2ViVmll
d1Rlc3QsIEV4dGVuZFNlbGVjdGlvbkFuZERlbGV0ZSkKK3sKKyAgICBVUkxUZXN0SGVscGVyczo6
cmVnaXN0ZXJNb2NrZWRVUkxGcm9tQmFzZVVSTChXZWJTdHJpbmc6OmZyb21VVEY4KG1fYmFzZVVS
TC5jX3N0cigpKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW5wdXRfZmllbGRfcG9wdWxhdGVkLmh0
bWwiKSk7CisgICAgV2ViVmlldyogd2ViVmlldyA9IEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0ZVdl
YlZpZXdBbmRMb2FkKG1fYmFzZVVSTCArICJpbnB1dF9maWVsZF9wb3B1bGF0ZWQuaHRtbCIpOwor
ICAgIHdlYlZpZXctPnNldEluaXRpYWxGb2N1cyhmYWxzZSk7CisgICAgd2ViVmlldy0+c2V0RWRp
dGFibGVTZWxlY3Rpb25PZmZzZXRzKDEwLCAxMCk7CisgICAgd2ViVmlldy0+ZXh0ZW5kU2VsZWN0
aW9uQW5kRGVsZXRlKDUsIDgpOworICAgIFdlYlRleHRJbnB1dEluZm8gaW5mbyA9IHdlYlZpZXct
PnRleHRJbnB1dEluZm8oKTsKKyAgICBFWFBFQ1RfRVEoIjAxMjM0aWprbG1ub3BxcnN0dXZ3eHl6
Iiwgc3RkOjpzdHJpbmcoaW5mby52YWx1ZS51dGY4KCkuZGF0YSgpKSk7CisgICAgRVhQRUNUX0VR
KDUsIGluZm8uc2VsZWN0aW9uU3RhcnQpOworICAgIEVYUEVDVF9FUSg1LCBpbmZvLnNlbGVjdGlv
bkVuZCk7CisgICAgd2ViVmlldy0+ZXh0ZW5kU2VsZWN0aW9uQW5kRGVsZXRlKDEwLCAwKTsKKyAg
ICBpbmZvID0gd2ViVmlldy0+dGV4dElucHV0SW5mbygpOworICAgIEVYUEVDVF9FUSgiaWprbG1u
b3BxcnN0dXZ3eHl6Iiwgc3RkOjpzdHJpbmcoaW5mby52YWx1ZS51dGY4KCkuZGF0YSgpKSk7Cisg
ICAgd2ViVmlldy0+Y2xvc2UoKTsKK30KKworVEVTVF9GKFdlYlZpZXdUZXN0LCBTZXRDb21wb3Np
dGlvbkZyb21FeGlzdGluZ1RleHQpCit7CisgICAgVVJMVGVzdEhlbHBlcnM6OnJlZ2lzdGVyTW9j
a2VkVVJMRnJvbUJhc2VVUkwoV2ViU3RyaW5nOjpmcm9tVVRGOChtX2Jhc2VVUkwuY19zdHIoKSks
IFdlYlN0cmluZzo6ZnJvbVVURjgoImlucHV0X2ZpZWxkX3BvcHVsYXRlZC5odG1sIikpOworICAg
IFdlYlZpZXcqIHdlYlZpZXcgPSBGcmFtZVRlc3RIZWxwZXJzOjpjcmVhdGVXZWJWaWV3QW5kTG9h
ZChtX2Jhc2VVUkwgKyAiaW5wdXRfZmllbGRfcG9wdWxhdGVkLmh0bWwiKTsKKyAgICB3ZWJWaWV3
LT5zZXRJbml0aWFsRm9jdXMoZmFsc2UpOworICAgIFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVu
ZGVybGluZT4gZW1wdHlVbmRlcmxpbmVzOworICAgIHdlYlZpZXctPnNldEVkaXRhYmxlU2VsZWN0
aW9uT2Zmc2V0cyg0LCAxMCk7CisgICAgd2ViVmlldy0+c2V0Q29tcG9zaXRpb25Gcm9tRXhpc3Rp
bmdUZXh0KDgsIDEyLCBlbXB0eVVuZGVybGluZXMpOworICAgIFdlYlRleHRJbnB1dEluZm8gaW5m
byA9IHdlYlZpZXctPnRleHRJbnB1dEluZm8oKTsKKyAgICBFWFBFQ1RfRVEoNCwgaW5mby5zZWxl
Y3Rpb25TdGFydCk7CisgICAgRVhQRUNUX0VRKDEwLCBpbmZvLnNlbGVjdGlvbkVuZCk7CisgICAg
RVhQRUNUX0VRKDgsIGluZm8uY29tcG9zaXRpb25TdGFydCk7CisgICAgRVhQRUNUX0VRKDEyLCBp
bmZvLmNvbXBvc2l0aW9uRW5kKTsKKyAgICB3ZWJWaWV3LT5zZXRDb21wb3NpdGlvbkZyb21FeGlz
dGluZ1RleHQoMCwgMCwgZW1wdHlVbmRlcmxpbmVzKTsKKyAgICBpbmZvID0gd2ViVmlldy0+dGV4
dElucHV0SW5mbygpOworICAgIEVYUEVDVF9FUSg0LCBpbmZvLnNlbGVjdGlvblN0YXJ0KTsKKyAg
ICBFWFBFQ1RfRVEoMTAsIGluZm8uc2VsZWN0aW9uRW5kKTsKKyAgICBFWFBFQ1RfRVEoLTEsIGlu
Zm8uY29tcG9zaXRpb25TdGFydCk7CisgICAgRVhQRUNUX0VRKC0xLCBpbmZvLmNvbXBvc2l0aW9u
RW5kKTsKKyAgICB3ZWJWaWV3LT5jbG9zZSgpOworfQorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159470</attachid>
            <date>2012-08-20 10:30:29 -0700</date>
            <delta_ts>2012-08-21 15:49:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93724-20120820182949.patch</filename>
            <type>text/plain</type>
            <size>8028</size>
            <attacher name="Oli Lan">olilan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MDIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGQ2YmY2NTM0YTdjZTViM2FhZTkzYWRmYjRkYTg1YmFkMDFiMzQ3NzYuLjVjNzllYjllNDUyZWRl
ZDQ5MzdkODg2OWE0YWFkNTk2ZjQ0NGU2NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTItMDgtMjAgIE9saSBMYW4gIDxvbGlsYW5AY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIFdlYlZpZXcgbWV0aG9kcyBzZXRDb21wb3NpdGlv
bkZyb21FeGlzdGluZ1RleHQgYW5kIGV4dGVuZFNlbGVjdGlvbkFuZERlbGV0ZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNzI0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIHR3byBuZXcg
bWV0aG9kcyB0byBXZWJWaWV3SW1wbC4KKworICAgICAgICAxKSBzZXRDb21wb3NpdGlvbkZyb21F
eGlzdGluZ1RleHQgY3JlYXRlcyBhIG5ldyBjb21wb3NpdGlvbiBmcm9tIHRoZSBleGlzdGluZyB0
ZXh0CisgICAgICAgIGluIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBpbnB1dCBmaWVsZC4gVGhlIG5l
dyBjb21wb3NpdGlvbiBpcyBiZXR3ZWVuIHRoZSB0d28gb2Zmc2V0cworICAgICAgICBwcm92aWRl
ZCwgcmVsYXRpdmUgdG8gdGhlIHJvb3RFZGl0YWJsZUVsZW1lbnQuIFRoZSBjdXJyZW50IHNlbGVj
dGlvbiBpcyBsZWZ0IHVuY2hhbmdlZC4KKyAgICAgICAgCisgICAgICAgIDIpIGV4dGVuZFNlbGVj
dGlvbkFuZERlbGV0ZSBleHRlbmRzIHRoZSBzZWxlY3Rpb24gYnkgdGhlIHNwZWNpZmllZCBudW1i
ZXIgb2YgY2hhcmFjdGVycworICAgICAgICBiZWZvcmUgYW5kIGFmdGVyLCBhbmQgdGhlbiBkZWxl
dGVzIHRoZSBzZWxlY3Rpb24uIElmIHRoZSBzZWxlY3Rpb24gaXMganVzdCBhIGNhcmV0LCB0aGUg
ZWZmZWN0CisgICAgICAgIGlzIHRvIGRlbGV0ZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBjaGFy
YWN0ZXJzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGN1cnJlbnQgZWRpdGluZyBwb2ludC4KKworICAg
ICAgICBUaGVzZSBtZXRob2RzIHdpbGwgYmUgdXNlZCBlLmcuIGJ5IHRoZSBBbmRyb2lkIHBvcnQg
dG8gaW1wbGVtZW50IElNRSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIE5ldyB0ZXN0cyBXZWJW
aWV3VGVzdC5FeHRlbmRTZWxlY3Rpb25BbmREZWxldGUgYW5kIFdlYlZpZXdUZXN0LlNldENvbXBv
c2l0aW9uRnJvbUV4aXN0aW5nVGV4dAorICAgICAgICB0ZXN0IHRoZSB0d28gbmV3IG1ldGhvZHMu
ICAgICAgIAorCisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAgKFdlYlZpZXcp
OgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpzZXRDb21wb3NpbmdSZWdpb24pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6ZXh0ZW5kU2VsZWN0aW9uQW5kRGVsZXRlKToKKyAgICAgICAgKiBzcmMvV2ViVmll
d0ltcGwuaDoKKyAgICAgICAgKFdlYlZpZXdJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9XZWJWaWV3
VGVzdC5jcHA6CisKIDIwMTItMDgtMjAgIFNhbWkgS3lvc3RpbGEgIDxza3lvc3RpbEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDb252ZXJ0IHNjcmVlbiBzcGFjZSBzY3JvbGwg
Z2VzdHVyZXMgdG8gbGF5ZXIgc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZp
ZXcuaAppbmRleCA0NWQzZGQzYzM0ZDEyY2I3OGE0ZjdjNzkyNGUwODQ1NDkxOWE0MTc3Li5lOTVl
YzZiNTM1ZTg5NWI0ZWRlZGMxMTQ1MDdkMzMyNGE2YmUwZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViVmlldy5oCkBAIC00NjAsNiArNDYwLDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCB0cmFuc2ZlckFjdGl2ZVdoZWVsRmxpbmdBbmltYXRpb24oY29uc3QgV2ViQWN0
aXZlV2hlZWxGbGluZ1BhcmFtZXRlcnMmKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2V0RWRp
dGFibGVTZWxlY3Rpb25PZmZzZXRzKGludCBzdGFydCwgaW50IGVuZCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBzZXRDb21wb3NpdGlvbkZyb21FeGlzdGluZ1RleHQoaW50IGNvbXBvc2l0aW9uU3Rh
cnQsIGludCBjb21wb3NpdGlvbkVuZCwgY29uc3QgV2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5k
ZXJsaW5lPiYgdW5kZXJsaW5lcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleHRlbmRTZWxlY3Rp
b25BbmREZWxldGUoaW50IGJlZm9yZSwgaW50IGFmdGVyKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJv
b2wgaXNTZWxlY3Rpb25FZGl0YWJsZSgpIGNvbnN0ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDBiZDNlYTExNmU0YzA1MmRlYWEwNWU2NjMw
NzY0ZTMyZjljYTQxNjguLjc0ZTJhMjliZmE2OWU1ZDdlYzk3NjVhNmVhMDBlMjk2MzFhNmZmNDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTIyMTYs
NiArMjIxNiw1OCBAQCBib29sIFdlYlZpZXdJbXBsOjpzZXRFZGl0YWJsZVNlbGVjdGlvbk9mZnNl
dHMoaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHJldHVybiBlZGl0b3ItPnNldFNlbGVjdGlvbk9m
ZnNldHMoc3RhcnQsIGVuZCk7CiB9CiAKK2Jvb2wgV2ViVmlld0ltcGw6OnNldENvbXBvc2l0aW9u
RnJvbUV4aXN0aW5nVGV4dChpbnQgY29tcG9zaXRpb25TdGFydCwgaW50IGNvbXBvc2l0aW9uRW5k
LCBjb25zdCBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzKQor
eworICAgIGNvbnN0IEZyYW1lKiBmb2N1c2VkID0gZm9jdXNlZFdlYkNvcmVGcmFtZSgpOworICAg
IGlmICghZm9jdXNlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRWRpdG9yKiBlZGl0
b3IgPSBmb2N1c2VkLT5lZGl0b3IoKTsKKyAgICBpZiAoIWVkaXRvciB8fCAhZWRpdG9yLT5jYW5F
ZGl0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGVkaXRvci0+Y2FuY2VsQ29tcG9z
aXRpb24oKTsKKworICAgIGlmIChjb21wb3NpdGlvblN0YXJ0ID09IGNvbXBvc2l0aW9uRW5kKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHNpemVfdCBsb2NhdGlvbjsKKyAgICBzaXplX3Qg
bGVuZ3RoOworICAgIGNhcmV0T3JTZWxlY3Rpb25SYW5nZSgmbG9jYXRpb24sICZsZW5ndGgpOwor
ICAgIGVkaXRvci0+c2V0SWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7Cisg
ICAgZWRpdG9yLT5zZXRTZWxlY3Rpb25PZmZzZXRzKGNvbXBvc2l0aW9uU3RhcnQsIGNvbXBvc2l0
aW9uRW5kKTsKKyAgICBTdHJpbmcgdGV4dCA9IGVkaXRvci0+c2VsZWN0ZWRUZXh0KCk7CisgICAg
Zm9jdXNlZC0+ZG9jdW1lbnQoKS0+ZXhlY0NvbW1hbmQoImRlbGV0ZSIsIHRydWUpOworICAgIGVk
aXRvci0+c2V0Q29tcG9zaXRpb24odGV4dCwgQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWls
ZGVyKHVuZGVybGluZXMpLCAwLCAwKTsKKyAgICBlZGl0b3ItPnNldFNlbGVjdGlvbk9mZnNldHMo
bG9jYXRpb24sIGxvY2F0aW9uICsgbGVuZ3RoKTsKKyAgICBlZGl0b3ItPnNldElnbm9yZUNvbXBv
c2l0aW9uU2VsZWN0aW9uQ2hhbmdlKGZhbHNlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFdlYlZpZXdJbXBsOjpleHRlbmRTZWxlY3Rpb25BbmREZWxldGUoaW50IGJlZm9yZSwgaW50
IGFmdGVyKQoreworICAgIGNvbnN0IEZyYW1lKiBmb2N1c2VkID0gZm9jdXNlZFdlYkNvcmVGcmFt
ZSgpOworICAgIGlmICghZm9jdXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRWRpdG9yKiBl
ZGl0b3IgPSBmb2N1c2VkLT5lZGl0b3IoKTsKKyAgICBpZiAoIWVkaXRvciB8fCAhZWRpdG9yLT5j
YW5FZGl0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lU2VsZWN0aW9uKiBzZWxlY3Rp
b24gPSBmb2N1c2VkLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgc2l6ZV90IGxvY2F0aW9uOworICAgIHNpemVfdCBsZW5ndGg7CisgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgp
OworICAgIGlmIChyYW5nZSAmJiBUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJv
bVJhbmdlKHNlbGVjdGlvbi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLCByYW5nZS5nZXQoKSwgbG9j
YXRpb24sIGxlbmd0aCkpIHsKKyAgICAgICAgZWRpdG9yLT5zZXRTZWxlY3Rpb25PZmZzZXRzKG1h
eChzdGF0aWNfY2FzdDxpbnQ+KGxvY2F0aW9uKSAtIGJlZm9yZSwgMCksIGxvY2F0aW9uICsgbGVu
Z3RoICsgYWZ0ZXIpOworICAgICAgICBmb2N1c2VkLT5kb2N1bWVudCgpLT5leGVjQ29tbWFuZCgi
ZGVsZXRlIiwgdHJ1ZSk7CisgICAgfQorfQorCiBib29sIFdlYlZpZXdJbXBsOjppc1NlbGVjdGlv
bkVkaXRhYmxlKCkgY29uc3QKIHsKICAgICBjb25zdCBGcmFtZSogZnJhbWUgPSBmb2N1c2VkV2Vi
Q29yZUZyYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRl
eCAzOTc4MzY4MGZhMTk4OTg4NmM0NjBiMTNkNDBkZDE0MDQxYTJhNDJiLi40OTkyOTE2MGQ0NWFk
MDNjZGNlNTg4ZWYwZGRlYTk4MDNhZmQyZWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgKQEAgLTE2Miw2ICsxNjIsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBX
ZWJUZXh0SW5wdXRJbmZvIHRleHRJbnB1dEluZm8oKTsKICAgICB2aXJ0dWFsIFdlYlRleHRJbnB1
dFR5cGUgdGV4dElucHV0VHlwZSgpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRFZGl0YWJsZVNlbGVj
dGlvbk9mZnNldHMoaW50IHN0YXJ0LCBpbnQgZW5kKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0Q29t
cG9zaXRpb25Gcm9tRXhpc3RpbmdUZXh0KGludCBjb21wb3NpdGlvblN0YXJ0LCBpbnQgY29tcG9z
aXRpb25FbmQsIGNvbnN0IFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVy
bGluZXMpOworICAgIHZpcnR1YWwgdm9pZCBleHRlbmRTZWxlY3Rpb25BbmREZWxldGUoaW50IGJl
Zm9yZSwgaW50IGFmdGVyKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWxlY3Rpb25FZGl0YWJsZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgV2ViQ29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIHNlbGVjdGlvbkJvdW5kcyhXZWJSZWN0JiBzdGFydCwgV2ViUmVjdCYg
ZW5kKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2Vi
Vmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJWaWV3VGVzdC5j
cHAKaW5kZXggM2NhMTA5NGQwYWMyZGNlMGMwMWMxYThlZWI2MTc1YzczNjQ4MGFmZS4uNDZjOTYz
MTBkNjRjODhkYTkwYmYxNzFkMzgyMzI3YmYwMzMwZDdkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKQEAgLTM3OSw0ICszNzksNDMgQEAgVEVTVF9G
KFdlYlZpZXdUZXN0LCBGb3JtQ2hhbmdlKQogICAgIHdlYlZpZXctPmNsb3NlKCk7CiB9CiAKK1RF
U1RfRihXZWJWaWV3VGVzdCwgRXh0ZW5kU2VsZWN0aW9uQW5kRGVsZXRlKQoreworICAgIFVSTFRl
c3RIZWxwZXJzOjpyZWdpc3Rlck1vY2tlZFVSTEZyb21CYXNlVVJMKFdlYlN0cmluZzo6ZnJvbVVU
RjgobV9iYXNlVVJMLmNfc3RyKCkpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbnB1dF9maWVsZF9w
b3B1bGF0ZWQuaHRtbCIpKTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gRnJhbWVUZXN0SGVscGVy
czo6Y3JlYXRlV2ViVmlld0FuZExvYWQobV9iYXNlVVJMICsgImlucHV0X2ZpZWxkX3BvcHVsYXRl
ZC5odG1sIik7CisgICAgd2ViVmlldy0+c2V0SW5pdGlhbEZvY3VzKGZhbHNlKTsKKyAgICB3ZWJW
aWV3LT5zZXRFZGl0YWJsZVNlbGVjdGlvbk9mZnNldHMoMTAsIDEwKTsKKyAgICB3ZWJWaWV3LT5l
eHRlbmRTZWxlY3Rpb25BbmREZWxldGUoNSwgOCk7CisgICAgV2ViVGV4dElucHV0SW5mbyBpbmZv
ID0gd2ViVmlldy0+dGV4dElucHV0SW5mbygpOworICAgIEVYUEVDVF9FUSgiMDEyMzRpamtsbW5v
cHFyc3R1dnd4eXoiLCBzdGQ6OnN0cmluZyhpbmZvLnZhbHVlLnV0ZjgoKS5kYXRhKCkpKTsKKyAg
ICBFWFBFQ1RfRVEoNSwgaW5mby5zZWxlY3Rpb25TdGFydCk7CisgICAgRVhQRUNUX0VRKDUsIGlu
Zm8uc2VsZWN0aW9uRW5kKTsKKyAgICB3ZWJWaWV3LT5leHRlbmRTZWxlY3Rpb25BbmREZWxldGUo
MTAsIDApOworICAgIGluZm8gPSB3ZWJWaWV3LT50ZXh0SW5wdXRJbmZvKCk7CisgICAgRVhQRUNU
X0VRKCJpamtsbW5vcHFyc3R1dnd4eXoiLCBzdGQ6OnN0cmluZyhpbmZvLnZhbHVlLnV0ZjgoKS5k
YXRhKCkpKTsKKyAgICB3ZWJWaWV3LT5jbG9zZSgpOworfQorCitURVNUX0YoV2ViVmlld1Rlc3Qs
IFNldENvbXBvc2l0aW9uRnJvbUV4aXN0aW5nVGV4dCkKK3sKKyAgICBVUkxUZXN0SGVscGVyczo6
cmVnaXN0ZXJNb2NrZWRVUkxGcm9tQmFzZVVSTChXZWJTdHJpbmc6OmZyb21VVEY4KG1fYmFzZVVS
TC5jX3N0cigpKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW5wdXRfZmllbGRfcG9wdWxhdGVkLmh0
bWwiKSk7CisgICAgV2ViVmlldyogd2ViVmlldyA9IEZyYW1lVGVzdEhlbHBlcnM6OmNyZWF0ZVdl
YlZpZXdBbmRMb2FkKG1fYmFzZVVSTCArICJpbnB1dF9maWVsZF9wb3B1bGF0ZWQuaHRtbCIpOwor
ICAgIHdlYlZpZXctPnNldEluaXRpYWxGb2N1cyhmYWxzZSk7CisgICAgV2ViVmVjdG9yPFdlYkNv
bXBvc2l0aW9uVW5kZXJsaW5lPiBlbXB0eVVuZGVybGluZXM7CisgICAgd2ViVmlldy0+c2V0RWRp
dGFibGVTZWxlY3Rpb25PZmZzZXRzKDQsIDEwKTsKKyAgICB3ZWJWaWV3LT5zZXRDb21wb3NpdGlv
bkZyb21FeGlzdGluZ1RleHQoOCwgMTIsIGVtcHR5VW5kZXJsaW5lcyk7CisgICAgV2ViVGV4dElu
cHV0SW5mbyBpbmZvID0gd2ViVmlldy0+dGV4dElucHV0SW5mbygpOworICAgIEVYUEVDVF9FUSg0
LCBpbmZvLnNlbGVjdGlvblN0YXJ0KTsKKyAgICBFWFBFQ1RfRVEoMTAsIGluZm8uc2VsZWN0aW9u
RW5kKTsKKyAgICBFWFBFQ1RfRVEoOCwgaW5mby5jb21wb3NpdGlvblN0YXJ0KTsKKyAgICBFWFBF
Q1RfRVEoMTIsIGluZm8uY29tcG9zaXRpb25FbmQpOworICAgIHdlYlZpZXctPnNldENvbXBvc2l0
aW9uRnJvbUV4aXN0aW5nVGV4dCgwLCAwLCBlbXB0eVVuZGVybGluZXMpOworICAgIGluZm8gPSB3
ZWJWaWV3LT50ZXh0SW5wdXRJbmZvKCk7CisgICAgRVhQRUNUX0VRKDQsIGluZm8uc2VsZWN0aW9u
U3RhcnQpOworICAgIEVYUEVDVF9FUSgxMCwgaW5mby5zZWxlY3Rpb25FbmQpOworICAgIEVYUEVD
VF9FUSgtMSwgaW5mby5jb21wb3NpdGlvblN0YXJ0KTsKKyAgICBFWFBFQ1RfRVEoLTEsIGluZm8u
Y29tcG9zaXRpb25FbmQpOworICAgIHdlYlZpZXctPmNsb3NlKCk7Cit9CisKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>