<?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>105189</bug_id>
          
          <creation_ts>2012-12-17 09:31:40 -0800</creation_ts>
          <short_desc>Add function to move caret selection towards a point</short_desc>
          <delta_ts>2013-01-05 12:02:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Hopman">cjhopman</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>792787</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Hopman">cjhopman</who>
    <bug_when>2012-12-17 09:31:40 -0800</bug_when>
    <thetext>Add function to move caret selection towards a point</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792794</commentid>
    <comment_count>1</comment_count>
      <attachid>179761</attachid>
    <who name="Chris Hopman">cjhopman</who>
    <bug_when>2012-12-17 09:39:46 -0800</bug_when>
    <thetext>Created attachment 179761
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792796</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-17 09:40:56 -0800</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>792797</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-17 09:41:20 -0800</bug_when>
    <thetext>Attachment 179761 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebKit/chromium/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
Source/WebKit/chromium/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
Source/WebKit/chromium/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
Source/WebKit/chromium/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
Source/WebKit/chromium/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:3:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:13:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:14:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:15:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:16:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:17:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:18:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 13 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792818</commentid>
    <comment_count>4</comment_count>
      <attachid>179763</attachid>
    <who name="Chris Hopman">cjhopman</who>
    <bug_when>2012-12-17 10:16:01 -0800</bug_when>
    <thetext>Created attachment 179763
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793362</commentid>
    <comment_count>5</comment_count>
      <attachid>179763</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-12-17 22:15:45 -0800</bug_when>
    <thetext>Comment on attachment 179763
Patch

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

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1393
&gt; +void WebFrameImpl::moveCaretSelectionTowardsWindowPoint(const WebPoint&amp; point)

Can you provide more details on how this function will be used by Chromium?

I&apos;m also having a hard time making sense of the definition of this new
function.  It seems highly specific to your particular use case.  I
wonder if there isn&apos;t a better decomposition of this into more general
purpose methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793628</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Hopman">cjhopman</who>
    <bug_when>2012-12-18 07:39:35 -0800</bug_when>
    <thetext>Sure. On Android, in an editable area, you can have an insertion handle. The user can drag this around to move where the caret selection is in the editable area. When those movements are within the editable area, the expected behavior is simple, move the caret to where its dragged. When a user drags the insertion handle outside of the editable area, the expected behavior is that the caret stays inside the editable area and vertically/horizontally aligned with the event position (unlike, for example, a range selection), and the edit box should scroll (slowly) towards the event position. Other touch-based(/touch-supporting) platforms would also likely want similar behavior.

When I originally wrote this, I tried to decompose it into:
1. Move the selection to the closest horizontal/vertically aligned position in the visible editable area.
2. If needed, move the selection 1 more line/character towards the point (i.e. scroll one line/character).
I did not find either of those behaviors already available, and that direction didn&apos;t work out as well as the way in this patch (quite possibly due to my inexperience in WebKit).

That being said, any suggestions for better approaches would be appreciated.

https://codereview.chromium.org/11593011/ is a chromium change that uses this new function. (Though that change is rather trivial other than the tests).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793759</commentid>
    <comment_count>7</comment_count>
      <attachid>179763</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-18 09:57:35 -0800</bug_when>
    <thetext>Comment on attachment 179763
Patch

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

It appears to me that this whole idea of moving caret towards a point is flawed in the presence of vertical writing mode bidirectional text.

&gt; Source/WebCore/ChangeLog:3
&gt; +        Fix an issue where page scale factor was not taken into account

Why is this different from the bug title?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793796</commentid>
    <comment_count>8</comment_count>
      <attachid>179763</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-18 10:13:36 -0800</bug_when>
    <thetext>Comment on attachment 179763
Patch

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

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1398
&gt; +    VisiblePosition movePosition = frame()-&gt;selection()-&gt;selection().visibleStart();

This should be visibleBase();

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1401
&gt; +    IntRect editableRect = editable-&gt;renderer()-&gt;enclosingLayer()-&gt;absoluteBoundingBox();

This is not right. You need to obtain the bounding box of the roo editable element.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1405
&gt; +    bool movingUp = point.y &lt; windowMovePosition.y();

This is wrong when we&apos;re in a vertical writing mode. r- because of this.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1407
&gt; +        VisiblePosition newMovePosition = movingUp ? previousLinePosition(movePosition, 0) : nextLinePosition(movePosition, 0);

Ditto.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1411
&gt; +        if (movingUp ? point.y &gt; windowNewMovePosition.y() : point.y &lt; windowNewMovePosition.y())

Ditto.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1414
&gt; +        if (movingUp ? editableRect.y() &gt; windowNewMovePosition.y(): editableRect.y() + editableRect.height() &lt; windowNewMovePosition.y())

Ditto.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1419
&gt; +    bool movingLeft = point.x &lt; windowMovePosition.x();

Ditto.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1421
&gt; +        VisiblePosition newMovePosition = movingLeft ? movePosition.left(true) : movePosition.right(true);

Ditto.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1425
&gt; +        if (movingLeft ? point.x &gt; windowNewMovePosition.x() : point.x &lt; windowNewMovePosition.x())

Ditto.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1428
&gt; +        if (movingLeft ? editableRect.x() &gt; windowNewMovePosition.x(): editableRect.x() + editableRect.width() &lt; windowNewMovePosition.x())

Ditto.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1432
&gt; +    frame()-&gt;selection()-&gt;moveTo(movePosition, UserTriggered);

You need to call FrameSelection::shouldChangeSelection before calling moveTo.
I&apos;d suggest adding this entire function to FrameSelection instead.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1434
&gt; +    if (viewImpl()-&gt;client())
&gt; +        viewImpl()-&gt;client()-&gt;didChangeSelection(true);

Why are we directly calling back to didChangeSelection? moveTo calls FrameSelection::setSelection, which in turn calls Editor::respondToChangedSelection and then EditorClient::respondToChangedSelection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794221</commentid>
    <comment_count>9</comment_count>
      <attachid>180067</attachid>
    <who name="Chris Hopman">cjhopman</who>
    <bug_when>2012-12-18 17:53:30 -0800</bug_when>
    <thetext>Created attachment 180067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794226</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Hopman">cjhopman</who>
    <bug_when>2012-12-18 17:55:43 -0800</bug_when>
    <thetext>With some help from eseidel and rniwa, this is now a much better approach.

I am unsure about the point conversion, there is a decent chance that I got that wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794229</commentid>
    <comment_count>11</comment_count>
      <attachid>180067</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-18 18:02:06 -0800</bug_when>
    <thetext>Comment on attachment 180067
Patch

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

&gt; Source/WebCore/rendering/RenderLayer.cpp:2108
&gt; +        LayoutRect unscaledRect = rect;
&gt; +        Frame* frame = renderer()-&gt;frame();
&gt; +        if (frame)
&gt; +            unscaledRect.scale(1 / frame-&gt;page()-&gt;pageScaleFactor());
&gt; +        LayoutRect exposeRect = LayoutRect(unscaledRect.x() + scrollXOffset(), unscaledRect.y() + scrollYOffset(), unscaledRect.width(), unscaledRect.height());

Please do this in a separate patch with its own testcase.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1399
&gt; +    Element* editable = frame()-&gt;selection()-&gt;rootEditableElement();
&gt; +    IntPoint contentsPoint = frame()-&gt;view()-&gt;windowToContents(IntPoint(point));
&gt; +    float pageScaleFactor = frame()-&gt;page()-&gt;pageScaleFactor();
&gt; +    contentsPoint.scale(1 / pageScaleFactor, 1 / pageScaleFactor);
&gt; +    LayoutPoint localPoint(editable-&gt;renderer()-&gt;absoluteToLocal(contentsPoint));
&gt; +    VisiblePosition position = editable-&gt;renderer()-&gt;positionForPoint(localPoint);
&gt; +    frame()-&gt;selection()-&gt;moveTo(position, UserTriggered);

YOu should test this in a subframe with page scale applied. I&apos;m not sure whether windowToContents() on a subframe applies the page scale. Also, if you&apos;re in a subframe, pageScale doesn&apos;t apply. frameScaleFactor() is more useful here.

It also looks like you assume windowToContents() gives you an &quot;absolute&quot; point in that frame (relative to the top left of the document, even when scrolled), since you then call absoluteToLocal() on it.

A good test here would be a zoomed page with both the root and the subframe scrolled. Ideally you&apos;d also have CSS transforms on an ancestor of the frame, and inside the frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794795</commentid>
    <comment_count>12</comment_count>
      <attachid>180193</attachid>
    <who name="Chris Hopman">cjhopman</who>
    <bug_when>2012-12-19 10:43:04 -0800</bug_when>
    <thetext>Created attachment 180193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794808</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-19 10:57:13 -0800</bug_when>
    <thetext>Does chromium draw the insertion handles, or are they from teh OS?  I&apos;m still surprised this needs special handling, separate from just exetending the selection with a pointing device beyond the bounds of the text area would.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794812</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Hopman">cjhopman</who>
    <bug_when>2012-12-19 11:03:24 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Does chromium draw the insertion handles, or are they from teh OS?  I&apos;m still surprised this needs special handling, separate from just exetending the selection with a pointing device beyond the bounds of the text area would.

Chromium draws them. I would be happy to reuse existing behavior, but I was unable to find it. For selection handles (i.e. range selections) we are using the behavior of extending selections (like dragging with a mouse). The insertion handle moves a caret selection and I could not find any such existing behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794819</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-19 11:19:58 -0800</bug_when>
    <thetext>rniwa would probably know best, if you can catch him (either via bugmail or #webkit).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794918</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-19 14:04:19 -0800</bug_when>
    <thetext>A caret is just a collapsed selection.  So I would expect them to go through the same code paths.

On a desktop you move the caret with the arrow keys, but I doubt we have special handling for arrow keys + text fields, rather I suspect the arrow keys just move the selection and the selection controller causes the text area to scroll?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794924</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-19 14:08:14 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; A caret is just a collapsed selection.  So I would expect them to go through the same code paths.

Right. EventHandler handles both cases.

&gt; On a desktop you move the caret with the arrow keys, but I doubt we have special handling for arrow keys + text fields, rather I suspect the arrow keys just move the selection and the selection controller causes the text area to scroll?

We don’t have a special case for arrow keys in textarea although we have a special code for editable regions (since that’s the only place where collapsed selection is rendered). FrameSelection::setSelection talks to RenderView to scroll relevant layers to &quot;reveal&quot; the selection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794939</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-19 14:19:08 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; Chromium draws them. I would be happy to reuse existing behavior, but I was unable to find it. For selection handles (i.e. range selections) we are using the behavior of extending selections (like dragging with a mouse). The insertion handle moves a caret selection and I could not find any such existing behavior.

I suspect this is the core confusion.  For other ports, WebKit itself draws all the input UI, like the cursor, etc.  In this case, Chromium is drawing it&apos;s own selection UI (in addition to WebKits) and thus needs a hook to tell WebKit to update it&apos;s part of things.   As Ryosuke points out, if this were in WebKit, most of the code would just be in EventHandler.cpp (the drawing code likely in RenderThemeChromiumAndroid?).

I&apos;m not sure this patch is wrong.  Just slightly atypical for WebKit&apos;s previous editing design.

Again, rniwa has been in this code much more recently than I, so I can correct any errors I may have made above. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794944</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-19 14:23:09 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt;
&gt; I suspect this is the core confusion.  For other ports, WebKit itself draws all the input UI, like the cursor, etc.  In this case, Chromium is drawing it&apos;s own selection UI (in addition to WebKits) and thus needs a hook to tell WebKit to update it&apos;s part of things.   As Ryosuke points out, if this were in WebKit, most of the code would just be in EventHandler.cpp (the drawing code likely in RenderThemeChromiumAndroid?).

It’s drawn by WebCore even. See CaretBase::paintCaret in FrameSelection.cpp.

&gt; I&apos;m not sure this patch is wrong.  Just slightly atypical for WebKit&apos;s previous editing design.

I concur. This &quot;feels wrong&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794951</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Hopman">cjhopman</who>
    <bug_when>2012-12-19 14:27:26 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; A caret is just a collapsed selection.  So I would expect them to go through the same code paths.
&gt; 
&gt; On a desktop you move the caret with the arrow keys, but I doubt we have special handling for arrow keys + text fields, rather I suspect the arrow keys just move the selection and the selection controller causes the text area to scroll?

But, my understanding (admittedly, little), is that when expanding a range selection you have a reference for what editable area the range needs to stay in. At least for our selection handles we end up calling selectRange(base, extent) where base is the fixed side (i.e. in the editable area) of the range and extent is where it is dragged to. This then ensures that the selection stays within the base&apos;s root editable element. Then, for modifying the selection with arrow keys (also home/end/etc), these use FrameSelection::modify which only moves one step in a particular granularity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794988</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Hopman">cjhopman</who>
    <bug_when>2012-12-19 15:03:49 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13)
&gt; &gt; Chromium draws them. I would be happy to reuse existing behavior, but I was unable to find it. For selection handles (i.e. range selections) we are using the behavior of extending selections (like dragging with a mouse). The insertion handle moves a caret selection and I could not find any such existing behavior.
&gt; 
&gt; I suspect this is the core confusion.  For other ports, WebKit itself draws all the input UI, like the cursor, etc.  In this case, Chromium is drawing it&apos;s own selection UI (in addition to WebKits) and thus needs a hook to tell WebKit to update it&apos;s part of things.   As Ryosuke points out, if this were in WebKit, most of the code would just be in EventHandler.cpp (the drawing code likely in RenderThemeChromiumAndroid?).
&gt; 
Yes this is adding a hook similar to the existing WebFrameImpl::selectRange. The behavior is similar to how I would expect the following to work:
  selectRange(frame()-&gt;selection()-&gt;selection().visibleBase(), point);
  selectRange(frame()-&gt;selection()-&gt;selection().visibleExtent(), frame()-&gt;selection()-&gt;selection().visibleExtent()); // not sure if .visibleExtent() is correct here

I don&apos;t really like doing two select ranges when the first one is really only used to constrain the point to being in the root editable element of the current selection. Also, ::selectRange doesn&apos;t appear to honor the platform editing behavior, which is required (though I could be wrong, or maybe it&apos;s unintentional).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795536</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Hopman">cjhopman</who>
    <bug_when>2012-12-20 10:13:31 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; I&apos;m not sure this patch is wrong.  Just slightly atypical for WebKit&apos;s previous editing design.
&gt; 
&gt; I concur. This &quot;feels wrong&quot;.

Hm, ok, I have a proposal:

What&apos;s really wanted is a WebFrame::selectRange() that (1) honors the platform editing behavior, and (2) is restricted to the root editable element of the current selection.

So, what if I change selectRange to do (1) and make it optionally do (2)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799081</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Hopman">cjhopman</who>
    <bug_when>2013-01-02 16:49:53 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13)
&gt; &gt; Chromium draws them. I would be happy to reuse existing behavior, but I was unable to find it. For selection handles (i.e. range selections) we are using the behavior of extending selections (like dragging with a mouse). The insertion handle moves a caret selection and I could not find any such existing behavior.
&gt; 
&gt; I suspect this is the core confusion.  For other ports, WebKit itself draws all the input UI, like the cursor, etc.  In this case, Chromium is drawing it&apos;s own selection UI (in addition to WebKits) and thus needs a hook to tell WebKit to update it&apos;s part of things.   As Ryosuke points out, if this were in WebKit, most of the code would just be in EventHandler.cpp (the drawing code likely in RenderThemeChromiumAndroid?).
&gt; 
&gt; I&apos;m not sure this patch is wrong.  Just slightly atypical for WebKit&apos;s previous editing design.
&gt; 
&gt; Again, rniwa has been in this code much more recently than I, so I can correct any errors I may have made above. :)

Looking through the history of these functions... a WebFrame::moveCaret() function used to exist. It was merged into selectRange with https://bugs.webkit.org/show_bug.cgi?id=96508. Since selectRange is not the same behavior as moveCaret (I have a local patch that extends selectRange to support the moveCaret behavior, but it is not any simpler than this patch), and there is precedent for such a moveCaret hook, I think this approach should be fine (though I do prefer the ::moveCaret() function name to the name in my last patch).

eseidel, rniwa: What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800606</commentid>
    <comment_count>24</comment_count>
      <attachid>180193</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-04 14:08:01 -0800</bug_when>
    <thetext>Comment on attachment 180193
Patch

I suspect this is uneeded.  But I don&apos;t want to block you any more than we have, and I don&apos;t think we&apos;re making further design progress on this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800648</commentid>
    <comment_count>25</comment_count>
      <attachid>180193</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-04 15:00:34 -0800</bug_when>
    <thetext>Comment on attachment 180193
Patch

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

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1395
&gt; +    LayoutPoint localPoint(editable-&gt;convertFromPage(contentsPoint));

We should be using = here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800946</commentid>
    <comment_count>26</comment_count>
      <attachid>180193</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-05 12:02:35 -0800</bug_when>
    <thetext>Comment on attachment 180193
Patch

Clearing flags on attachment: 180193

Committed r138893: &lt;http://trac.webkit.org/changeset/138893&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800947</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-05 12:02:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179761</attachid>
            <date>2012-12-17 09:39:46 -0800</date>
            <delta_ts>2012-12-17 10:15:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105189-20121217093704.patch</filename>
            <type>text/plain</type>
            <size>15288</size>
            <attacher name="Chris Hopman">cjhopman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTU1ZWUwZTc2ODE1ZTQ4
OWE2NGYzNzE0ZmJhYjYyMjA3MzQ0YTVkMy4uMDMwOGIzNDg1Yjg2MzdkNGNjMGU3MTRiMjE3MmUy
OTkzZTQzYjBhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTEyLTE3ICBDaHJp
cyBIb3BtYW4gIDxjamhvcG1hbkBnb29nbGUuY29tPgorCisJCQkJRml4IGFuIGlzc3VlIHdoZXJl
IHBhZ2Ugc2NhbGUgZmFjdG9yIHdhcyBub3QgdGFrZW4gaW50byBhY2NvdW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUxODkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMh
KS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZSk6CisJCQkJRml4IGFuIGlzc3Vl
IHdoZXJlIHBhZ2Ugc2NhbGUgZmFjdG9yIHdhcyBub3QgYmVpbmcgdGFrZW4gaW50byBhY2NvdW50
CisJCQkJaW4gb25lIG9mIHRoZSBjb2RlIHBhdGhzLiAgU3BlY2lmaWNhbGx5LCB3aGVyZSB0aGUg
bWV0aG9kIHNjcm9sbHMgdGhlCisJCQkJZW5jbG9zaW5nIFJlbmRlckJveCwgdGhlIGJvdW5kcyBv
ZiB0aGUgcmVuZGVyYm94IGFyZSB1bnNjYWxlZCwgd2hlcmVhcworCQkJCXRoZSBtZXRob2QgdGFr
ZXMgYSByZWN0IHBhcmFtZXRlciB0aGF0IGlzIHNjYWxlZC4gTm90ZTogZWxzZXdoZXJlIGluCisJ
CQkJdGhlIG1ldGhvZCwgd2hlcmUgdGhlIHBhcmVudCBsYXllciBpcyBzY3JvbGxlZCwgdGhlIHNj
YWxlZCByZWN0IGlzCisJCQkJY29ycmVjdC4gU28gd2UgY2Fubm90IHNpbXBseSBwYXNzIGluIGFu
IHVuc2NhbGVkIHJlY3QgdG8KKwkJCQlzY3JvbGxSZWN0VG9WaXNpYmxlLgorCiAyMDEyLTEyLTEz
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQXR0ZW1wdCB0byBy
YXRpb25hbGl6ZSBhbmQgc2ltcGxpZnkgV1RGOjpiaW5hcnlTZWFyY2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggZmNkNTVlZTkwZjBlMzhlNzZjYTUwM2MyM2M1NGYwMmRjZjE3ZmZhYi4u
YjA3YWRkYmY1MzUyZjY4MTcwMjJiMTA3Y2RhMDI2ZDVlMDAxMjhmMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0xMi0xNyAgQ2hyaXMgSG9wbWFuICA8
Y2pob3BtYW5AZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgZnVuY3Rpb24gdG8gbW92ZSBjYXJl
dCBzZWxlY3Rpb24gdG93YXJkcyBhIHBvaW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUxODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworCQkJCUFkZCBhIGZ1bmN0aW9uIHRvIG1vdmUgYSBjYXJldCBzZWxlY3Rpb24g
dG93YXJkcyBhIHdpbmRvdyBwb2ludC4KKwkJCQlUaGUgY2FyZXQgc2hvdWxkIHN0YXkgdmVydGlj
YWxseSBhbmQgaG9yaXpvbnRhbGx5IGFsaWduZWQgd2l0aCB0aGUKKwkJCQlwb2ludCAodW5saWtl
LCBmb3IgZXhhbXBsZSwgYSByYW5nZSBzZWxlY3Rpb24pLCBhbmQgaWYgdGhlIHBvaW50IGlzCisJ
CQkJb3V0c2lkZSB0aGUgZWRpdGFibGUgYXJlYSwgdGhlIGFyZWEgc2hvdWxkIGJlIHNjcm9sbGVk
IGEgbGl0dGxlICh+b25lCisJCQkJbGluZS9jaGFyYWN0ZXIpIHRvd2FyZCB0aGUgcG9pbnQuCisK
KyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKFdlYkZyYW1lKToKKyAgICAg
ICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
Ojptb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRzV2luZG93UG9pbnQpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6CisgICAgICAgIChXZWJGcmFtZUltcGwp
OgorICAgICAgICAqIHRlc3RzL1dlYkZyYW1lVGVzdC5jcHA6CisKIDIwMTItMTItMTMgIFRpZW4t
UmVuIENoZW4gIDx0cmNoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIERvbid0IGNvbnNpZGVy
IGNvbnRhaW5lciBub2RlcyBvZiBvdGhlciBkaXNhbWJpZ3VhdGVkIG5vZGVzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAzMjhlMGUzNGQwZDdjOTcxY2M0N2I4
YTRiYjk1ZmQzNmZjZDM2Y2Y4Li42N2QxOWRiYWU3ZTBhY2I0MzliYzY0ZjRhMWMyZjBlNWU1OTcx
NDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE4NDUs
NyArMTg0NSwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0
IExheW91dFJlY3QmIHJlY3QsIGNvbnN0IFNjcm9sbEFsaWdubQogICAgICAgICBhYnNQb3MubW92
ZShib3gtPmJvcmRlckxlZnQoKSwgYm94LT5ib3JkZXJUb3AoKSk7CiAKICAgICAgICAgTGF5b3V0
UmVjdCBsYXllckJvdW5kcyA9IExheW91dFJlY3QoYWJzUG9zLngoKSArIHNjcm9sbFhPZmZzZXQo
KSwgYWJzUG9zLnkoKSArIHNjcm9sbFlPZmZzZXQoKSwgYm94LT5jbGllbnRXaWR0aCgpLCBib3gt
PmNsaWVudEhlaWdodCgpKTsKLSAgICAgICAgTGF5b3V0UmVjdCBleHBvc2VSZWN0ID0gTGF5b3V0
UmVjdChyZWN0LngoKSArIHNjcm9sbFhPZmZzZXQoKSwgcmVjdC55KCkgKyBzY3JvbGxZT2Zmc2V0
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIExheW91dFJlY3QgdW5z
Y2FsZWRSZWN0ID0gcmVjdDsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gcmVuZGVyZXIoKS0+ZnJh
bWUoKTsKKyAgICAgICAgaWYgKGZyYW1lKQorICAgICAgICAgICAgdW5zY2FsZWRSZWN0LnNjYWxl
KDEgLyBmcmFtZS0+cGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgIExheW91dFJl
Y3QgZXhwb3NlUmVjdCA9IExheW91dFJlY3QodW5zY2FsZWRSZWN0LngoKSArIHNjcm9sbFhPZmZz
ZXQoKSwgdW5zY2FsZWRSZWN0LnkoKSArIHNjcm9sbFlPZmZzZXQoKSwgdW5zY2FsZWRSZWN0Lndp
ZHRoKCksIHVuc2NhbGVkUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIExheW91dFJlY3QgciA9IGdl
dFJlY3RUb0V4cG9zZShsYXllckJvdW5kcywgZXhwb3NlUmVjdCwgYWxpZ25YLCBhbGlnblkpOwog
ICAgICAgICAKICAgICAgICAgaW50IHJvdW5kZWRBZGp1c3RlZFggPSByb3VuZFRvSW50KHIueCgp
IC0gYWJzUG9zLngoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJGcmFtZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaApp
bmRleCA2MDA3MjUyZGYyMzQ5YWQ3ZGExZjEwNzE1YzQyZDAxNjk2MjdhYzkzLi5kMGUzZDI1YjU4
ZDM4YTkwNzZhODk0MDFkYTFiNTllYjAxNGRlMGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkZyYW1lLmgKQEAgLTQ3MCw2ICs0NzAsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2VsZWN0UmFuZ2UoY29uc3QgV2ViUmFuZ2UmKSA9IDA7CiAKKyAgICB2aXJ0dWFs
IHZvaWQgbW92ZUNhcmV0U2VsZWN0aW9uVG93YXJkc1dpbmRvd1BvaW50KGNvbnN0IFdlYlBvaW50
JikgPSAwOworCiAgICAgLy8gUHJpbnRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBSZWZvcm1hdHMgdGhlIFdl
YkZyYW1lIGZvciBwcmludGluZy4gV2ViUHJpbnRQYXJhbXMgc3BlY2lmaWVzIHRoZSBwcmludGFi
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IGY5
NDNmNWI4ZjRkMDgwMzNhMGNlZGJlZGViYWZlOTIwZGQ3N2Q4YmUuLjY0ZjcxZGQ4ZmJkYTgwMzc3
YWFlZmI2YTNhMDAwNjM5MzY2ODFiMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRnJhbWVJbXBsLmNwcApAQCAtMTc4LDEyICsxNzgsMTQgQEAKICNpbmNsdWRlICJXZWJSYW5n
ZS5oIgogI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgogI2luY2x1ZGUgIldlYlNlY3VyaXR5
T3JpZ2luLmgiCisjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgogI2luY2x1ZGUgIldlYlZpZXdJ
bXBsLmgiCiAjaW5jbHVkZSAiWFBhdGhSZXN1bHQuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5o
IgogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgInBhaW50aW5nL0dyYXBoaWNzQ29udGV4
dEJ1aWxkZXIuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCIKKyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2lu
Y2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJGaWxlU3lzdGVt
Lmg+CkBAIC0xMzg4LDYgKzEzOTAsNTEgQEAgdm9pZCBXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdl
KGNvbnN0IFdlYlJhbmdlJiB3ZWJSYW5nZSkKICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCkt
PnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFdlYkNvcmU6OlZQX0RFRkFVTFRfQUZGSU5J
VFksIGZhbHNlKTsKIH0KIAordm9pZCBXZWJGcmFtZUltcGw6Om1vdmVDYXJldFNlbGVjdGlvblRv
d2FyZHNXaW5kb3dQb2ludChjb25zdCBXZWJQb2ludCYgcG9pbnQpCit7CisgICAgQVNTRVJUKGZy
YW1lKCktPnNlbGVjdGlvbigpLT5pc0NhcmV0KCkpOworICAgIEFTU0VSVChmcmFtZSgpLT5zZWxl
Y3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKKworICAgIFZpc2libGVQb3NpdGlvbiBt
b3ZlUG9zaXRpb24gPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCk7CisKKyAgICBFbGVtZW50KiBlZGl0YWJsZSA9IGZyYW1lKCktPnNlbGVjdGlvbigpLT5y
b290RWRpdGFibGVFbGVtZW50KCk7CisgICAgSW50UmVjdCBlZGl0YWJsZVJlY3QgPSBlZGl0YWJs
ZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpOwor
ICAgIGVkaXRhYmxlUmVjdC5zY2FsZSh2aWV3SW1wbCgpLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisK
KyAgICBJbnRSZWN0IHdpbmRvd01vdmVQb3NpdGlvbiA9IGZyYW1lKCktPnZpZXcoKS0+Y29udGVu
dHNUb1dpbmRvdyhtb3ZlUG9zaXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpKTsKKyAgICBib29s
IG1vdmluZ1VwID0gcG9pbnQueSA8IHdpbmRvd01vdmVQb3NpdGlvbi55KCk7CisgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld01vdmVQb3NpdGlvbiA9IG1vdmlu
Z1VwID8gcHJldmlvdXNMaW5lUG9zaXRpb24obW92ZVBvc2l0aW9uLCAwKSA6IG5leHRMaW5lUG9z
aXRpb24obW92ZVBvc2l0aW9uLCAwKTsKKyAgICAgICAgSW50UmVjdCB3aW5kb3dOZXdNb3ZlUG9z
aXRpb24gPSBmcmFtZSgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cobmV3TW92ZVBvc2l0aW9u
LmFic29sdXRlQ2FyZXRCb3VuZHMoKSk7CisgICAgICAgIGlmIChpblNhbWVMaW5lKG1vdmVQb3Np
dGlvbiwgbmV3TW92ZVBvc2l0aW9uKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAo
bW92aW5nVXAgPyBwb2ludC55ID4gd2luZG93TmV3TW92ZVBvc2l0aW9uLnkoKSA6IHBvaW50Lnkg
PCB3aW5kb3dOZXdNb3ZlUG9zaXRpb24ueSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IG1vdmVQb3NpdGlvbiA9IG5ld01vdmVQb3NpdGlvbjsKKyAgICAgICAgaWYgKG1vdmluZ1VwID8g
ZWRpdGFibGVSZWN0LnkoKSA+IHdpbmRvd05ld01vdmVQb3NpdGlvbi55KCk6IGVkaXRhYmxlUmVj
dC55KCkgKyBlZGl0YWJsZVJlY3QuaGVpZ2h0KCkgPCB3aW5kb3dOZXdNb3ZlUG9zaXRpb24ueSgp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgd2luZG93TW92ZVBvc2l0aW9uID0g
ZnJhbWUoKS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KG1vdmVQb3NpdGlvbi5hYnNvbHV0ZUNh
cmV0Qm91bmRzKCkpOworICAgIGJvb2wgbW92aW5nTGVmdCA9IHBvaW50LnggPCB3aW5kb3dNb3Zl
UG9zaXRpb24ueCgpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlv
biBuZXdNb3ZlUG9zaXRpb24gPSBtb3ZpbmdMZWZ0ID8gbW92ZVBvc2l0aW9uLmxlZnQodHJ1ZSkg
OiBtb3ZlUG9zaXRpb24ucmlnaHQodHJ1ZSk7CisgICAgICAgIEludFJlY3Qgd2luZG93TmV3TW92
ZVBvc2l0aW9uID0gZnJhbWUoKS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KG5ld01vdmVQb3Np
dGlvbi5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOworICAgICAgICBpZiAoIWluU2FtZUxpbmUobW92
ZVBvc2l0aW9uLCBuZXdNb3ZlUG9zaXRpb24pKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGlmIChtb3ZpbmdMZWZ0ID8gcG9pbnQueCA+IHdpbmRvd05ld01vdmVQb3NpdGlvbi54KCkgOiBw
b2ludC54IDwgd2luZG93TmV3TW92ZVBvc2l0aW9uLngoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBtb3ZlUG9zaXRpb24gPSBuZXdNb3ZlUG9zaXRpb247CisgICAgICAgIGlmIChtb3Zp
bmdMZWZ0ID8gZWRpdGFibGVSZWN0LngoKSA+IHdpbmRvd05ld01vdmVQb3NpdGlvbi54KCk6IGVk
aXRhYmxlUmVjdC54KCkgKyBlZGl0YWJsZVJlY3Qud2lkdGgoKSA8IHdpbmRvd05ld01vdmVQb3Np
dGlvbi54KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBmcmFtZSgpLT5zZWxl
Y3Rpb24oKS0+bW92ZVRvKG1vdmVQb3NpdGlvbiwgVXNlclRyaWdnZXJlZCk7CisgICAgaWYgKHZp
ZXdJbXBsKCktPmNsaWVudCgpKQorICAgICAgICB2aWV3SW1wbCgpLT5jbGllbnQoKS0+ZGlkQ2hh
bmdlU2VsZWN0aW9uKHRydWUpOworfQorCisKIFZpc2libGVQb3NpdGlvbiBXZWJGcmFtZUltcGw6
OnZpc2libGVQb3NpdGlvbkZvcldpbmRvd1BvaW50KGNvbnN0IFdlYlBvaW50JiBwb2ludCkKIHsK
ICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0ID0gSGl0VGVzdFJlcXVlc3Q6Ok1vdmUgfCBIaXRU
ZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJl
cXVlc3Q6Oklnbm9yZUNsaXBwaW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRnJhbWVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuaAppbmRleCA3MjJlY2Y1NTk3NDUwZWNlNTRiNmRlNDJhYjg4YTEwMzhmZWMxZDFhLi4w
NDU0NWFhOWE5ZjlhMzg5MDJjMmFkNGVkODMxMjQxYzRkNmVlODIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaApAQCAtMTkwLDYgKzE5MCw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0V29yZEFyb3VuZENhcmV0KCk7CiAgICAgdmlydHVhbCB2
b2lkIHNlbGVjdFJhbmdlKGNvbnN0IFdlYlBvaW50JiBiYXNlLCBjb25zdCBXZWJQb2ludCYgZXh0
ZW50KTsKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0UmFuZ2UoY29uc3QgV2ViUmFuZ2UmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbW92ZUNhcmV0U2VsZWN0aW9uVG93YXJkc1dpbmRvd1BvaW50KGNvbnN0
IFdlYlBvaW50Jik7CiAgICAgdmlydHVhbCBpbnQgcHJpbnRCZWdpbihjb25zdCBXZWJQcmludFBh
cmFtcyYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJOb2RlJiBjb25zdHJh
aW5Ub05vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiB1c2VCcm93c2VyT3Zl
cmxheXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFt
ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3Bw
CmluZGV4IDI2MDIwZjc4ZDBjOTJmZWE2YjdlNjNmYjM2ZmFlZGU5YjUzM2Q2YmYuLmQyYTI3MTRk
OGE0OTk1NzBmNTlhYzdjNmYwYmFjYzAzOWM0YzRiNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKQEAgLTE1MTcsNiArMTUxNywxMzYgQEAgVEVT
VF9GKFdlYkZyYW1lVGVzdCwgU2VsZWN0UmFuZ2VDYW5Nb3ZlU2VsZWN0aW9uRW5kKQogICAgIHdl
YlZpZXctPmNsb3NlKCk7CiB9CiAKKyNkZWZpbmUgRVhQRUNUX0NBUkVUX05FQVIod2ViVmlldywg
cHgsIHB5KSB7IFwKKyAgICBXZWJSZWN0IHJlY3QsIGNhcmV0OyBcCisgICAgd2ViVmlldy0+c2Vs
ZWN0aW9uQm91bmRzKGNhcmV0LCByZWN0KTsgXAorICAgIEVYUEVDVF9MVChjYXJldC54LCAocHgp
ICsgMjUpOyBcCisgICAgRVhQRUNUX0dUKGNhcmV0LngsIChweCkgLSAyNSk7IFwKKyAgICBFWFBF
Q1RfTFQoY2FyZXQueSwgKHB5KSArIDI1KTsgXAorICAgIEVYUEVDVF9HVChjYXJldC55LCAocHkp
IC0gMjUpOyBcCit9CisKK1RFU1RfRihXZWJGcmFtZVRlc3QsIE1vdmVDYXJldFNlbGVjdGlvblRv
d2FyZHNXaW5kb3dQb3NpdGlvbikKK3sKKyAgICByZWdpc3Rlck1vY2tlZEh0dHBVUkxMb2FkKCJt
b3ZlX2NhcmV0Lmh0bWwiKTsKKyAgICBXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwgPSBzdGF0aWNf
Y2FzdDxXZWJWaWV3SW1wbCo+KGNyZWF0ZVdlYlZpZXdGb3JUZXh0U2VsZWN0aW9uKG1fYmFzZVVS
TCArICJtb3ZlX2NhcmV0Lmh0bWwiKSk7CisgICAgd2ViVmlld0ltcGwtPnJlc2l6ZShXZWJTaXpl
KDEwMDAsIDEwMDApKTsKKyAgICBXZWJGcmFtZUltcGwqIGZyYW1lID0gd2ViVmlld0ltcGwtPm1h
aW5GcmFtZUltcGwoKTsKKworICAgIC8vIEFzc3VtZSB0aGUgdXNlciBoYXMgcGluY2ggem9vbWVk
IHRvIHBhZ2Ugc2NhbGUgZmFjdG9yIDIuCisgICAgZmxvYXQgdXNlclBpbmNoUGFnZVNjYWxlRmFj
dG9yID0gMjsKKyAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yUHJlc2VydmluZ1Nj
cm9sbE9mZnNldCh1c2VyUGluY2hQYWdlU2NhbGVGYWN0b3IpOworICAgIHdlYlZpZXdJbXBsLT5t
YWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpLT5sYXlvdXQoKTsKKworCisgICAgZnJhbWUtPmV4
ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKCJzZWxlY3RFbGVtZW50KCdFZGl0Qm94V2l0aExv
bmdUZXh0Jyk7IikpOworICAgIFdlYlJlY3QgYm91bmRzID0gZWxlbWVudEJvdW5kcyhmcmFtZSwg
IkVkaXRCb3hXaXRoTG9uZ1RleHQiKTsKKyAgICBpbnQgdG9wID0gYm91bmRzLnk7CisgICAgaW50
IGxlZnQgPSBib3VuZHMueDsKKyAgICBpbnQgYm90dG9tID0gYm91bmRzLnkgKyBib3VuZHMuaGVp
Z2h0IC0gMTsKKyAgICBpbnQgcmlnaHQgPSBib3VuZHMueCArIGJvdW5kcy53aWR0aCAtIDE7Cisg
ICAgaW50IGNlbnRlclggPSAobGVmdCArIHJpZ2h0KSAvIDI7CisgICAgaW50IGNlbnRlclkgPSAo
dG9wICsgYm90dG9tKSAvIDI7CisgICAgRVhQRUNUX0NBUkVUX05FQVIod2ViVmlld0ltcGwsIGxl
ZnQsIHRvcCk7CisKKyAgICAvLyBBIG1vdmUgd2l0aGluIHRoZSBib3ggc2hvdWxkIG1vdmUgdGhl
IHNlbGVjdGlvbiBuZWFyIHRoZSBwb2ludC4KKyAgICBmcmFtZS0+bW92ZUNhcmV0U2VsZWN0aW9u
VG93YXJkc1dpbmRvd1BvaW50KFdlYlBvaW50KGNlbnRlclgsIGNlbnRlclkpKTsKKyAgICBFWFBF
Q1RfQ0FSRVRfTkVBUih3ZWJWaWV3SW1wbCwgKGxlZnQgKyByaWdodCkgLyAyLCBjZW50ZXJZKTsK
KworICAgIC8vIEEgbW92ZSBhYm92ZSBvciBiZWxvdyB0aGUgYm94IHNob3VsZCBtb3ZlIHRoZSBz
ZWxlY3Rpb24gdG8gYSB2ZXJ0aWNhbGx5CisgICAgLy8gYWxpZ25lZCBwb3NpdGlvbi4KKyAgICBm
cmFtZS0+bW92ZUNhcmV0U2VsZWN0aW9uVG93YXJkc1dpbmRvd1BvaW50KFdlYlBvaW50KGxlZnQs
IGJvdHRvbSAtIDEwMCkpOworICAgIEVYUEVDVF9DQVJFVF9ORUFSKHdlYlZpZXdJbXBsLCBsZWZ0
LCBjZW50ZXJZKTsKKyAgICBmcmFtZS0+bW92ZUNhcmV0U2VsZWN0aW9uVG93YXJkc1dpbmRvd1Bv
aW50KFdlYlBvaW50KHJpZ2h0LCB0b3AgKyAxMDApKTsKKyAgICBFWFBFQ1RfQ0FSRVRfTkVBUih3
ZWJWaWV3SW1wbCwgcmlnaHQsIGNlbnRlclkpOworCisgICAgLy8gQSBtb3ZlIHRvIHRoZSByaWdo
dCBvZiB0aGUgYm94IHNob3VsZCBtb3ZlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGZhciByaWdodAor
ICAgIC8vIGFuZCBzY3JvbGwgb25lIGNoYXJhY3Rlci4KKyAgICBmcmFtZS0+bW92ZUNhcmV0U2Vs
ZWN0aW9uVG93YXJkc1dpbmRvd1BvaW50KFdlYlBvaW50KHJpZ2h0ICsgNTAsIGJvdHRvbSkpOwor
ICAgIEVYUEVDVF9DQVJFVF9ORUFSKHdlYlZpZXdJbXBsLCByaWdodCwgY2VudGVyWSk7CisgICAg
V2ViUmFuZ2UgaW5pdGlhbFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb25SYW5nZSgpOworICAg
IGZyYW1lLT5tb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRzV2luZG93UG9pbnQoV2ViUG9pbnQocmln
aHQgKyA1MCwgYm90dG9tKSk7CisgICAgRVhQRUNUX0NBUkVUX05FQVIod2ViVmlld0ltcGwsIHJp
Z2h0LCBjZW50ZXJZKTsKKyAgICBXZWJSYW5nZSBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9u
UmFuZ2UoKTsKKyAgICBFWFBFQ1RfRVEoc2VsZWN0aW9uLnN0YXJ0T2Zmc2V0KCksIGluaXRpYWxT
ZWxlY3Rpb24uc3RhcnRPZmZzZXQoKSArIDEpOworICAgIC8vIE1vdmUgb25jZSBtb3JlIHRvIGVu
c3VyZSB0aGF0IHRoZSBib3ggaGFzIGJlZW4gc2Nyb2xsZWQgYXQgbGVhc3QgdHdvCisgICAgLy8g
Y2hhcmFjdGVycyB0byB0aGUgcmlnaHQuCisgICAgZnJhbWUtPm1vdmVDYXJldFNlbGVjdGlvblRv
d2FyZHNXaW5kb3dQb2ludChXZWJQb2ludChyaWdodCArIDUwLCBib3R0b20pKTsKKworICAgIC8v
IEEgbW92ZSB0byB0aGUgbGVmdCBvZiB0aGUgYm94IHNob3VsZCBtb3ZlIHRoZSBzZWxlY3Rpb24g
dG8gdGhlIGZhciBsZWZ0CisgICAgLy8gYW5kIHNjcm9sbCBvbmUgY2hhcmFjdGVyLgorICAgIGZy
YW1lLT5tb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRzV2luZG93UG9pbnQoV2ViUG9pbnQoMSwgYm90
dG9tKSk7CisgICAgRVhQRUNUX0NBUkVUX05FQVIod2ViVmlld0ltcGwsIGxlZnQsIGNlbnRlclkp
OworICAgIGluaXRpYWxTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uUmFuZ2UoKTsKKyAgICBF
WFBFQ1RfTFQoaW5pdGlhbFNlbGVjdGlvbi5zdGFydE9mZnNldCgpLCAyKTsKKyAgICBmcmFtZS0+
bW92ZUNhcmV0U2VsZWN0aW9uVG93YXJkc1dpbmRvd1BvaW50KFdlYlBvaW50KDEsIGJvdHRvbSkp
OworICAgIEVYUEVDVF9DQVJFVF9ORUFSKHdlYlZpZXdJbXBsLCBsZWZ0LCBjZW50ZXJZKTsKKyAg
ICBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uUmFuZ2UoKTsKKyAgICBFWFBFQ1RfRVEoc2Vs
ZWN0aW9uLnN0YXJ0T2Zmc2V0KCksIGluaXRpYWxTZWxlY3Rpb24uc3RhcnRPZmZzZXQoKSAtIDEp
OworCisKKyAgICBmcmFtZS0+ZXhlY3V0ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoInNlbGVjdEVs
ZW1lbnQoJ0VkaXRCb3hXaXRoU2hvcnRUZXh0Jyk7IikpOworICAgIGJvdW5kcyA9IGVsZW1lbnRC
b3VuZHMoZnJhbWUsICJFZGl0Qm94V2l0aFNob3J0VGV4dCIpOworICAgIHRvcCA9IGJvdW5kcy55
OworICAgIGxlZnQgPSBib3VuZHMueDsKKyAgICBib3R0b20gPSBib3VuZHMueSArIGJvdW5kcy5o
ZWlnaHQgLSAxOworICAgIHJpZ2h0ID0gYm91bmRzLnggKyBib3VuZHMud2lkdGggLSAxOworICAg
IEVYUEVDVF9DQVJFVF9ORUFSKHdlYlZpZXdJbXBsLCBsZWZ0LCB0b3ApOworCisgICAgLy8gVGhl
IHRleHQgZW5kcyBuZWFyIHRoZSBtaWRkbGUgb2YgdGhlIGlucHV0IGJveCwgYW5kIHNvIG1vdmVz
IHRvIHRoZSBmYXIKKyAgICAvLyByaWdodCBzaG91bGQgc3RvcCBsb25nIGJlZm9yZSB0aGUgcmln
aHQgZWRnZS4KKyAgICBmcmFtZS0+bW92ZUNhcmV0U2VsZWN0aW9uVG93YXJkc1dpbmRvd1BvaW50
KFdlYlBvaW50KHJpZ2h0ICsgNTAsIGJvdHRvbSkpOworICAgIFdlYlJlY3QgcmVjdCwgY2FyZXQ7
CisgICAgd2ViVmlld0ltcGwtPnNlbGVjdGlvbkJvdW5kcyhjYXJldCwgcmVjdCk7CisgICAgRVhQ
RUNUX0xUKGNhcmV0LngsIHJpZ2h0IC0gMjAwKTsKKyAgICBFWFBFQ1RfRVEoZnJhbWUtPnNlbGVj
dGlvblJhbmdlKCkuc3RhcnRPZmZzZXQoKSwgKGludClzdGQ6OnN0cmluZygiSnVzdCBzaG9ydCB0
ZXh0LiIpLnNpemUoKSk7CisKKworICAgIGZyYW1lLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNv
dXJjZSgic2VsZWN0RWxlbWVudCgnVGV4dEFyZWFXaXRoTG9uZ1RleHQnKTsiKSk7CisgICAgYm91
bmRzID0gZWxlbWVudEJvdW5kcyhmcmFtZSwgIlRleHRBcmVhV2l0aExvbmdUZXh0Iik7CisgICAg
dG9wID0gYm91bmRzLnk7CisgICAgbGVmdCA9IGJvdW5kcy54OworICAgIGJvdHRvbSA9IGJvdW5k
cy55ICsgYm91bmRzLmhlaWdodCAtIDE7CisgICAgcmlnaHQgPSBib3VuZHMueCArIGJvdW5kcy53
aWR0aCAtIDE7CisgICAgY2VudGVyWCA9IChsZWZ0ICsgcmlnaHQpIC8gMjsKKyAgICBjZW50ZXJZ
ID0gKHRvcCArIGJvdHRvbSkgLyAyOworICAgIEVYUEVDVF9DQVJFVF9ORUFSKHdlYlZpZXdJbXBs
LCBsZWZ0LCB0b3ApOworCisgICAgLy8gQSBtb3ZlIHdpdGhpbiB0aGUgdGV4dGFyZWEgc2hvdWxk
IG1vdmUgdGhlIHNlbGVjdGlvbiBuZWFyIHRoZSBwb2ludC4KKyAgICBmcmFtZS0+bW92ZUNhcmV0
U2VsZWN0aW9uVG93YXJkc1dpbmRvd1BvaW50KFdlYlBvaW50KGNlbnRlclgsIGNlbnRlclkpKTsK
KyAgICBFWFBFQ1RfQ0FSRVRfTkVBUih3ZWJWaWV3SW1wbCwgY2VudGVyWCwgY2VudGVyWSk7Cisg
ICAgZnJhbWUtPm1vdmVDYXJldFNlbGVjdGlvblRvd2FyZHNXaW5kb3dQb2ludChXZWJQb2ludChs
ZWZ0ICsgYm91bmRzLndpZHRoIC8gNCwgdG9wKSk7CisgICAgRVhQRUNUX0NBUkVUX05FQVIod2Vi
Vmlld0ltcGwsIGxlZnQgKyBib3VuZHMud2lkdGggLyA0LCB0b3ApOworCisgICAgLy8gQSBtb3Zl
IGFib3ZlL2JlbG93IHRoZSB0ZXh0YXJlYSBzaG91bGQgbW92ZSB0aGUgc2VsZWN0aW9uIHRvIGEK
KyAgICAvLyBob3Jpem9udGFsbHkgYWxpZ25lZCBwb3NpdGlvbiBuZWFyIHRoZSB0b3AvYm90dG9t
LiBGdXJ0aGVyIG1vdmVtZW50cyBvbgorICAgIC8vIHRoZSBzYW1lIHNpZGUgc2hvdWxkIHNjcm9s
bCB0aGUgdGV4dC4KKyAgICBmcmFtZS0+bW92ZUNhcmV0U2VsZWN0aW9uVG93YXJkc1dpbmRvd1Bv
aW50KFdlYlBvaW50KGNlbnRlclgsIGJvdHRvbSArIDUwKSk7CisgICAgRVhQRUNUX0NBUkVUX05F
QVIod2ViVmlld0ltcGwsIGNlbnRlclgsIGJvdHRvbSAtIDIwKTsKKyAgICBpbml0aWFsU2VsZWN0
aW9uID0gZnJhbWUtPnNlbGVjdGlvblJhbmdlKCk7CisgICAgZnJhbWUtPm1vdmVDYXJldFNlbGVj
dGlvblRvd2FyZHNXaW5kb3dQb2ludChXZWJQb2ludChjZW50ZXJYLCBib3R0b20gKyA1MCkpOwor
ICAgIEVYUEVDVF9DQVJFVF9ORUFSKHdlYlZpZXdJbXBsLCBjZW50ZXJYLCBib3R0b20gLSAyMCk7
CisgICAgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvblJhbmdlKCk7CisgICAgRVhQRUNUX0dU
KHNlbGVjdGlvbi5zdGFydE9mZnNldCgpLCBpbml0aWFsU2VsZWN0aW9uLnN0YXJ0T2Zmc2V0KCkg
KyAzMCk7CisgICAgRVhQRUNUX0xUKHNlbGVjdGlvbi5zdGFydE9mZnNldCgpLCBpbml0aWFsU2Vs
ZWN0aW9uLnN0YXJ0T2Zmc2V0KCkgKyAxMDApOworCisgICAgZnJhbWUtPm1vdmVDYXJldFNlbGVj
dGlvblRvd2FyZHNXaW5kb3dQb2ludChXZWJQb2ludChjZW50ZXJYLCB0b3AgLSA1MCkpOworICAg
IEVYUEVDVF9DQVJFVF9ORUFSKHdlYlZpZXdJbXBsLCBjZW50ZXJYLCB0b3ApOworICAgIGluaXRp
YWxTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uUmFuZ2UoKTsKKyAgICBmcmFtZS0+bW92ZUNh
cmV0U2VsZWN0aW9uVG93YXJkc1dpbmRvd1BvaW50KFdlYlBvaW50KGNlbnRlclgsIHRvcCAtIDUw
KSk7CisgICAgRVhQRUNUX0NBUkVUX05FQVIod2ViVmlld0ltcGwsIGNlbnRlclgsIHRvcCk7Cisg
ICAgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvblJhbmdlKCk7CisgICAgRVhQRUNUX0dUKHNl
bGVjdGlvbi5zdGFydE9mZnNldCgpLCBpbml0aWFsU2VsZWN0aW9uLnN0YXJ0T2Zmc2V0KCkgLSAx
MDApOworICAgIEVYUEVDVF9MVChzZWxlY3Rpb24uc3RhcnRPZmZzZXQoKSwgaW5pdGlhbFNlbGVj
dGlvbi5zdGFydE9mZnNldCgpICsgMzApOworCisgICAgLy8gQSBtb3ZlIHRvIHRoZSBsZWZ0IG9y
IHJpZ2h0IG9mIHRoZSB0ZXh0YXJlYSBzaG91bGQgbW92ZSB0aGUgc2VsZWN0aW9uIHRvCisgICAg
Ly8gYSB2ZXJ0aWNhbGx5IGFsaWduZWQgc3BvdCBuZWFyIHRoZSBsZWZ0L3JpZ2h0IGVkZ2UuCisg
ICAgZnJhbWUtPm1vdmVDYXJldFNlbGVjdGlvblRvd2FyZHNXaW5kb3dQb2ludChXZWJQb2ludChs
ZWZ0IC0gMjAsIGNlbnRlclkpKTsKKyAgICBFWFBFQ1RfQ0FSRVRfTkVBUih3ZWJWaWV3SW1wbCwg
bGVmdCwgY2VudGVyWSk7CisKKyAgICB3ZWJWaWV3SW1wbC0+Y2xvc2UoKTsKK30KKwogY2xhc3Mg
RGlzYW1iaWd1YXRpb25Qb3B1cFRlc3RXZWJWaWV3Q2xpZW50IDogcHVibGljIFdlYlZpZXdDbGll
bnQgewogcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBkaWRUYXBNdWx0aXBsZVRhcmdldHMoY29u
c3QgV2ViR2VzdHVyZUV2ZW50JiwgY29uc3QgV2ViVmVjdG9yPFdlYlJlY3Q+JiB0YXJnZXRSZWN0
cykgT1ZFUlJJREUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179763</attachid>
            <date>2012-12-17 10:16:01 -0800</date>
            <delta_ts>2012-12-18 17:53:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105189-20121217101319.patch</filename>
            <type>text/plain</type>
            <size>17159</size>
            <attacher name="Chris Hopman">cjhopman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3ODg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjg1ZWQxYmI2Zjc3YjJl
YWI3MmIxOWE5NzY0NTJlMjZiMWE4NWE5ZS4uMDVkZWQ2NWRiODZlNWY4NjBjMGQxNWUzOTgzZTc3
MTkzYzFhOTAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTEyLTE3ICBDaHJp
cyBIb3BtYW4gIDxjamhvcG1hbkBnb29nbGUuY29tPgorCisgICAgICAgIEZpeCBhbiBpc3N1ZSB3
aGVyZSBwYWdlIHNjYWxlIGZhY3RvciB3YXMgbm90IHRha2VuIGludG8gYWNjb3VudAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MTg5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChP
T1BTISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUpOgorICAgICAgICBGaXgg
YW4gaXNzdWUgd2hlcmUgcGFnZSBzY2FsZSBmYWN0b3Igd2FzIG5vdCBiZWluZyB0YWtlbiBpbnRv
IGFjY291bnQKKyAgICAgICAgaW4gb25lIG9mIHRoZSBjb2RlIHBhdGhzLiAgU3BlY2lmaWNhbGx5
LCB3aGVyZSB0aGUgbWV0aG9kIHNjcm9sbHMgdGhlCisgICAgICAgIGVuY2xvc2luZyBSZW5kZXJC
b3gsIHRoZSBib3VuZHMgb2YgdGhlIHJlbmRlcmJveCBhcmUgdW5zY2FsZWQsIHdoZXJlYXMKKyAg
ICAgICAgdGhlIG1ldGhvZCB0YWtlcyBhIHJlY3QgcGFyYW1ldGVyIHRoYXQgaXMgc2NhbGVkLiBO
b3RlOiBlbHNld2hlcmUgaW4KKyAgICAgICAgdGhlIG1ldGhvZCwgd2hlcmUgdGhlIHBhcmVudCBs
YXllciBpcyBzY3JvbGxlZCwgdGhlIHNjYWxlZCByZWN0IGlzCisgICAgICAgIGNvcnJlY3QuIFNv
IHdlIGNhbm5vdCBzaW1wbHkgcGFzcyBpbiBhbiB1bnNjYWxlZCByZWN0IHRvCisgICAgICAgIHNj
cm9sbFJlY3RUb1Zpc2libGUuCisKIDIwMTItMTItMTcgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzY3OTQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDFkYmFhZWU0ZDNkNWRjODRiMzRlYjM2MjNh
MGIyNzA5ZDk2ZWE1MTkuLjljMzZlOGNmNzY2MzFlMWQ4ODNkNjEwNzAyMzI0M2JmMDFlMDE4ZmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMTItMTcg
IENocmlzIEhvcG1hbiAgPGNqaG9wbWFuQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIGZ1bmN0
aW9uIHRvIG1vdmUgY2FyZXQgc2VsZWN0aW9uIHRvd2FyZHMgYSBwb2ludAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgZnVuY3Rpb24gdG8gbW92
ZSBhIGNhcmV0IHNlbGVjdGlvbiB0b3dhcmRzIGEgd2luZG93IHBvaW50LgorICAgICAgICBUaGUg
Y2FyZXQgc2hvdWxkIHN0YXkgdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5IGFsaWduZWQgd2l0
aCB0aGUKKyAgICAgICAgcG9pbnQgKHVubGlrZSwgZm9yIGV4YW1wbGUsIGEgcmFuZ2Ugc2VsZWN0
aW9uKSwgYW5kIGlmIHRoZSBwb2ludCBpcworICAgICAgICBvdXRzaWRlIHRoZSBlZGl0YWJsZSBh
cmVhLCB0aGUgYXJlYSBzaG91bGQgYmUgc2Nyb2xsZWQgYSBsaXR0bGUgKH5vbmUKKyAgICAgICAg
bGluZS9jaGFyYWN0ZXIpIHRvd2FyZCB0aGUgcG9pbnQuCisKKyAgICAgICAgKiBwdWJsaWMvV2Vi
RnJhbWUuaDoKKyAgICAgICAgKFdlYkZyYW1lKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjptb3ZlQ2FyZXRTZWxlY3Rpb25U
b3dhcmRzV2luZG93UG9pbnQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBzcmMvV2Vi
RnJhbWVJbXBsLmg6CisgICAgICAgIChXZWJGcmFtZUltcGwpOgorICAgICAgICAqIHRlc3RzL1dl
YkZyYW1lVGVzdC5jcHA6CisKIDIwMTItMTItMTYgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFB1c2ggcGl4ZWwgc25hcHBpbmcgbG9naWMgaW50byBUcmFu
c2Zvcm1TdGF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXgg
YzBjZTgyNDBhYjlmOGU5ZmM5NmI0NGQwNjVkMjhmMjlkYWQ5OTA3Yi4uOTlmMjNlYTI2ZmYyNGJh
OTM4ZGYxNTVjMTJhMDQwZDAzNGJlODhkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCkBAIC0yMTAxLDcgKzIxMDEsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiByZWN0LCBjb25zdCBTY3JvbGxBbGln
bm0KICAgICAgICAgYWJzUG9zLm1vdmUoYm94LT5ib3JkZXJMZWZ0KCksIGJveC0+Ym9yZGVyVG9w
KCkpOwogCiAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHMgPSBMYXlvdXRSZWN0KGFic1Bv
cy54KCkgKyBzY3JvbGxYT2Zmc2V0KCksIGFic1Bvcy55KCkgKyBzY3JvbGxZT2Zmc2V0KCksIGJv
eC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAgIExheW91dFJl
Y3QgZXhwb3NlUmVjdCA9IExheW91dFJlY3QocmVjdC54KCkgKyBzY3JvbGxYT2Zmc2V0KCksIHJl
Y3QueSgpICsgc2Nyb2xsWU9mZnNldCgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwor
ICAgICAgICBMYXlvdXRSZWN0IHVuc2NhbGVkUmVjdCA9IHJlY3Q7CisgICAgICAgIEZyYW1lKiBm
cmFtZSA9IHJlbmRlcmVyKCktPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkKKyAgICAgICAg
ICAgIHVuc2NhbGVkUmVjdC5zY2FsZSgxIC8gZnJhbWUtPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9y
KCkpOworICAgICAgICBMYXlvdXRSZWN0IGV4cG9zZVJlY3QgPSBMYXlvdXRSZWN0KHVuc2NhbGVk
UmVjdC54KCkgKyBzY3JvbGxYT2Zmc2V0KCksIHVuc2NhbGVkUmVjdC55KCkgKyBzY3JvbGxZT2Zm
c2V0KCksIHVuc2NhbGVkUmVjdC53aWR0aCgpLCB1bnNjYWxlZFJlY3QuaGVpZ2h0KCkpOwogICAg
ICAgICBMYXlvdXRSZWN0IHIgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGV4cG9zZVJl
Y3QsIGFsaWduWCwgYWxpZ25ZKTsKICAgICAgICAgCiAgICAgICAgIGludCByb3VuZGVkQWRqdXN0
ZWRYID0gcm91bmRUb0ludChyLngoKSAtIGFic1Bvcy54KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkZyYW1lLmgKaW5kZXggNjAwNzI1MmRmMjM0OWFkN2RhMWYxMDcxNWM0MmQw
MTY5NjI3YWM5My4uZDBlM2QyNWI1OGQzOGE5MDc2YTg5NDAxZGExYjU5ZWIwMTRkZTBiNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCkBAIC00NzAsNiArNDcwLDgg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdFJhbmdlKGNvbnN0IFdlYlJhbmdl
JikgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIG1vdmVDYXJldFNlbGVjdGlvblRvd2FyZHNXaW5k
b3dQb2ludChjb25zdCBXZWJQb2ludCYpID0gMDsKKwogICAgIC8vIFByaW50aW5nIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAg
ICAgLy8gUmVmb3JtYXRzIHRoZSBXZWJGcmFtZSBmb3IgcHJpbnRpbmcuIFdlYlByaW50UGFyYW1z
IHNwZWNpZmllcyB0aGUgcHJpbnRhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmNwcAppbmRleCBmOTQzZjViOGY0ZDA4MDMzYTBjZWRiZWRlYmFmZTkyMGRkNzdk
OGJlLi42NGY3MWRkOGZiZGE4MDM3N2FhZWZiNmEzYTAwMDYzOTM2NjgxYjM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTE3OCwxMiArMTc4LDE0
IEBACiAjaW5jbHVkZSAiV2ViUmFuZ2UuaCIKICNpbmNsdWRlICJXZWJTY3JpcHRTb3VyY2UuaCIK
ICNpbmNsdWRlICJXZWJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIldlYlZpZXdDbGllbnQu
aCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCiAj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJw
YWludGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KICNpbmNsdWRl
IDxwdWJsaWMvV2ViRmlsZVN5c3RlbS5oPgpAQCAtMTM4OCw2ICsxMzkwLDUxIEBAIHZvaWQgV2Vi
RnJhbWVJbXBsOjpzZWxlY3RSYW5nZShjb25zdCBXZWJSYW5nZSYgd2ViUmFuZ2UpCiAgICAgICAg
IGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3RlZFJhbmdlKHJhbmdlLmdldCgpLCBXZWJD
b3JlOjpWUF9ERUZBVUxUX0FGRklOSVRZLCBmYWxzZSk7CiB9CiAKK3ZvaWQgV2ViRnJhbWVJbXBs
Ojptb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRzV2luZG93UG9pbnQoY29uc3QgV2ViUG9pbnQmIHBv
aW50KQoreworICAgIEFTU0VSVChmcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNDYXJldCgpKTsKKyAg
ICBBU1NFUlQoZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CisK
KyAgICBWaXNpYmxlUG9zaXRpb24gbW92ZVBvc2l0aW9uID0gZnJhbWUoKS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOworCisgICAgRWxlbWVudCogZWRpdGFibGUgPSBm
cmFtZSgpLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIEludFJlY3Qg
ZWRpdGFibGVSZWN0ID0gZWRpdGFibGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCktPmFi
c29sdXRlQm91bmRpbmdCb3goKTsKKyAgICBlZGl0YWJsZVJlY3Quc2NhbGUodmlld0ltcGwoKS0+
cGFnZVNjYWxlRmFjdG9yKCkpOworCisgICAgSW50UmVjdCB3aW5kb3dNb3ZlUG9zaXRpb24gPSBm
cmFtZSgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cobW92ZVBvc2l0aW9uLmFic29sdXRlQ2Fy
ZXRCb3VuZHMoKSk7CisgICAgYm9vbCBtb3ZpbmdVcCA9IHBvaW50LnkgPCB3aW5kb3dNb3ZlUG9z
aXRpb24ueSgpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBu
ZXdNb3ZlUG9zaXRpb24gPSBtb3ZpbmdVcCA/IHByZXZpb3VzTGluZVBvc2l0aW9uKG1vdmVQb3Np
dGlvbiwgMCkgOiBuZXh0TGluZVBvc2l0aW9uKG1vdmVQb3NpdGlvbiwgMCk7CisgICAgICAgIElu
dFJlY3Qgd2luZG93TmV3TW92ZVBvc2l0aW9uID0gZnJhbWUoKS0+dmlldygpLT5jb250ZW50c1Rv
V2luZG93KG5ld01vdmVQb3NpdGlvbi5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOworICAgICAgICBp
ZiAoaW5TYW1lTGluZShtb3ZlUG9zaXRpb24sIG5ld01vdmVQb3NpdGlvbikpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgaWYgKG1vdmluZ1VwID8gcG9pbnQueSA+IHdpbmRvd05ld01vdmVQ
b3NpdGlvbi55KCkgOiBwb2ludC55IDwgd2luZG93TmV3TW92ZVBvc2l0aW9uLnkoKSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBtb3ZlUG9zaXRpb24gPSBuZXdNb3ZlUG9zaXRpb247Cisg
ICAgICAgIGlmIChtb3ZpbmdVcCA/IGVkaXRhYmxlUmVjdC55KCkgPiB3aW5kb3dOZXdNb3ZlUG9z
aXRpb24ueSgpOiBlZGl0YWJsZVJlY3QueSgpICsgZWRpdGFibGVSZWN0LmhlaWdodCgpIDwgd2lu
ZG93TmV3TW92ZVBvc2l0aW9uLnkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHdpbmRvd01vdmVQb3NpdGlvbiA9IGZyYW1lKCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyht
b3ZlUG9zaXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpKTsKKyAgICBib29sIG1vdmluZ0xlZnQg
PSBwb2ludC54IDwgd2luZG93TW92ZVBvc2l0aW9uLngoKTsKKyAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3TW92ZVBvc2l0aW9uID0gbW92aW5nTGVmdCA/IG1v
dmVQb3NpdGlvbi5sZWZ0KHRydWUpIDogbW92ZVBvc2l0aW9uLnJpZ2h0KHRydWUpOworICAgICAg
ICBJbnRSZWN0IHdpbmRvd05ld01vdmVQb3NpdGlvbiA9IGZyYW1lKCktPnZpZXcoKS0+Y29udGVu
dHNUb1dpbmRvdyhuZXdNb3ZlUG9zaXRpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpKTsKKyAgICAg
ICAgaWYgKCFpblNhbWVMaW5lKG1vdmVQb3NpdGlvbiwgbmV3TW92ZVBvc2l0aW9uKSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBpZiAobW92aW5nTGVmdCA/IHBvaW50LnggPiB3aW5kb3dO
ZXdNb3ZlUG9zaXRpb24ueCgpIDogcG9pbnQueCA8IHdpbmRvd05ld01vdmVQb3NpdGlvbi54KCkp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbW92ZVBvc2l0aW9uID0gbmV3TW92ZVBvc2l0
aW9uOworICAgICAgICBpZiAobW92aW5nTGVmdCA/IGVkaXRhYmxlUmVjdC54KCkgPiB3aW5kb3dO
ZXdNb3ZlUG9zaXRpb24ueCgpOiBlZGl0YWJsZVJlY3QueCgpICsgZWRpdGFibGVSZWN0LndpZHRo
KCkgPCB3aW5kb3dOZXdNb3ZlUG9zaXRpb24ueCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPm1vdmVUbyhtb3ZlUG9zaXRpb24sIFVzZXJU
cmlnZ2VyZWQpOworICAgIGlmICh2aWV3SW1wbCgpLT5jbGllbnQoKSkKKyAgICAgICAgdmlld0lt
cGwoKS0+Y2xpZW50KCktPmRpZENoYW5nZVNlbGVjdGlvbih0cnVlKTsKK30KKworCiBWaXNpYmxl
UG9zaXRpb24gV2ViRnJhbWVJbXBsOjp2aXNpYmxlUG9zaXRpb25Gb3JXaW5kb3dQb2ludChjb25z
dCBXZWJQb2ludCYgcG9pbnQpCiB7CiAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdCA9IEhpdFRl
c3RSZXF1ZXN0OjpNb3ZlIHwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVl
c3Q6OkFjdGl2ZSB8IEhpdFRlc3RSZXF1ZXN0OjpJZ25vcmVDbGlwcGluZzsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKaW5kZXggNzIyZWNmNTU5NzQ1MGVjZTU0YjZk
ZTQyYWI4OGExMDM4ZmVjMWQxYS4uMDQ1NDVhYTlhOWY5YTM4OTAyYzJhZDRlZDgzMTI0MWM0ZDZl
ZTgyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBs
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKQEAgLTE5
MCw2ICsxOTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNlbGVjdFdvcmRBcm91bmRD
YXJldCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RSYW5nZShjb25zdCBXZWJQb2ludCYgYmFz
ZSwgY29uc3QgV2ViUG9pbnQmIGV4dGVudCk7CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdFJhbmdl
KGNvbnN0IFdlYlJhbmdlJik7CisgICAgdmlydHVhbCB2b2lkIG1vdmVDYXJldFNlbGVjdGlvblRv
d2FyZHNXaW5kb3dQb2ludChjb25zdCBXZWJQb2ludCYpOwogICAgIHZpcnR1YWwgaW50IHByaW50
QmVnaW4oY29uc3QgV2ViUHJpbnRQYXJhbXMmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViTm9kZSYgY29uc3RyYWluVG9Ob2RlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCogdXNlQnJvd3Nlck92ZXJsYXlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvV2ViRnJhbWVUZXN0LmNwcAppbmRleCAyNjAyMGY3OGQwYzkyZmVhNmI3ZTYzZmIzNmZh
ZWRlOWI1MzNkNmJmLi5kMmEyNzE0ZDhhNDk5NTcwZjU5YWM3YzZmMGJhY2MwMzljNGM0YjYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCkBAIC0x
NTE3LDYgKzE1MTcsMTM2IEBAIFRFU1RfRihXZWJGcmFtZVRlc3QsIFNlbGVjdFJhbmdlQ2FuTW92
ZVNlbGVjdGlvbkVuZCkKICAgICB3ZWJWaWV3LT5jbG9zZSgpOwogfQogCisjZGVmaW5lIEVYUEVD
VF9DQVJFVF9ORUFSKHdlYlZpZXcsIHB4LCBweSkgeyBcCisgICAgV2ViUmVjdCByZWN0LCBjYXJl
dDsgXAorICAgIHdlYlZpZXctPnNlbGVjdGlvbkJvdW5kcyhjYXJldCwgcmVjdCk7IFwKKyAgICBF
WFBFQ1RfTFQoY2FyZXQueCwgKHB4KSArIDI1KTsgXAorICAgIEVYUEVDVF9HVChjYXJldC54LCAo
cHgpIC0gMjUpOyBcCisgICAgRVhQRUNUX0xUKGNhcmV0LnksIChweSkgKyAyNSk7IFwKKyAgICBF
WFBFQ1RfR1QoY2FyZXQueSwgKHB5KSAtIDI1KTsgXAorfQorCitURVNUX0YoV2ViRnJhbWVUZXN0
LCBNb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRzV2luZG93UG9zaXRpb24pCit7CisgICAgcmVnaXN0
ZXJNb2NrZWRIdHRwVVJMTG9hZCgibW92ZV9jYXJldC5odG1sIik7CisgICAgV2ViVmlld0ltcGwq
IHdlYlZpZXdJbXBsID0gc3RhdGljX2Nhc3Q8V2ViVmlld0ltcGwqPihjcmVhdGVXZWJWaWV3Rm9y
VGV4dFNlbGVjdGlvbihtX2Jhc2VVUkwgKyAibW92ZV9jYXJldC5odG1sIikpOworICAgIHdlYlZp
ZXdJbXBsLT5yZXNpemUoV2ViU2l6ZSgxMDAwLCAxMDAwKSk7CisgICAgV2ViRnJhbWVJbXBsKiBm
cmFtZSA9IHdlYlZpZXdJbXBsLT5tYWluRnJhbWVJbXBsKCk7CisKKyAgICAvLyBBc3N1bWUgdGhl
IHVzZXIgaGFzIHBpbmNoIHpvb21lZCB0byBwYWdlIHNjYWxlIGZhY3RvciAyLgorICAgIGZsb2F0
IHVzZXJQaW5jaFBhZ2VTY2FsZUZhY3RvciA9IDI7CisgICAgd2ViVmlld0ltcGwtPnNldFBhZ2VT
Y2FsZUZhY3RvclByZXNlcnZpbmdTY3JvbGxPZmZzZXQodXNlclBpbmNoUGFnZVNjYWxlRmFjdG9y
KTsKKyAgICB3ZWJWaWV3SW1wbC0+bWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZpZXcoKS0+bGF5b3V0
KCk7CisKKworICAgIGZyYW1lLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZSgic2VsZWN0
RWxlbWVudCgnRWRpdEJveFdpdGhMb25nVGV4dCcpOyIpKTsKKyAgICBXZWJSZWN0IGJvdW5kcyA9
IGVsZW1lbnRCb3VuZHMoZnJhbWUsICJFZGl0Qm94V2l0aExvbmdUZXh0Iik7CisgICAgaW50IHRv
cCA9IGJvdW5kcy55OworICAgIGludCBsZWZ0ID0gYm91bmRzLng7CisgICAgaW50IGJvdHRvbSA9
IGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCAtIDE7CisgICAgaW50IHJpZ2h0ID0gYm91bmRzLngg
KyBib3VuZHMud2lkdGggLSAxOworICAgIGludCBjZW50ZXJYID0gKGxlZnQgKyByaWdodCkgLyAy
OworICAgIGludCBjZW50ZXJZID0gKHRvcCArIGJvdHRvbSkgLyAyOworICAgIEVYUEVDVF9DQVJF
VF9ORUFSKHdlYlZpZXdJbXBsLCBsZWZ0LCB0b3ApOworCisgICAgLy8gQSBtb3ZlIHdpdGhpbiB0
aGUgYm94IHNob3VsZCBtb3ZlIHRoZSBzZWxlY3Rpb24gbmVhciB0aGUgcG9pbnQuCisgICAgZnJh
bWUtPm1vdmVDYXJldFNlbGVjdGlvblRvd2FyZHNXaW5kb3dQb2ludChXZWJQb2ludChjZW50ZXJY
LCBjZW50ZXJZKSk7CisgICAgRVhQRUNUX0NBUkVUX05FQVIod2ViVmlld0ltcGwsIChsZWZ0ICsg
cmlnaHQpIC8gMiwgY2VudGVyWSk7CisKKyAgICAvLyBBIG1vdmUgYWJvdmUgb3IgYmVsb3cgdGhl
IGJveCBzaG91bGQgbW92ZSB0aGUgc2VsZWN0aW9uIHRvIGEgdmVydGljYWxseQorICAgIC8vIGFs
aWduZWQgcG9zaXRpb24uCisgICAgZnJhbWUtPm1vdmVDYXJldFNlbGVjdGlvblRvd2FyZHNXaW5k
b3dQb2ludChXZWJQb2ludChsZWZ0LCBib3R0b20gLSAxMDApKTsKKyAgICBFWFBFQ1RfQ0FSRVRf
TkVBUih3ZWJWaWV3SW1wbCwgbGVmdCwgY2VudGVyWSk7CisgICAgZnJhbWUtPm1vdmVDYXJldFNl
bGVjdGlvblRvd2FyZHNXaW5kb3dQb2ludChXZWJQb2ludChyaWdodCwgdG9wICsgMTAwKSk7Cisg
ICAgRVhQRUNUX0NBUkVUX05FQVIod2ViVmlld0ltcGwsIHJpZ2h0LCBjZW50ZXJZKTsKKworICAg
IC8vIEEgbW92ZSB0byB0aGUgcmlnaHQgb2YgdGhlIGJveCBzaG91bGQgbW92ZSB0aGUgc2VsZWN0
aW9uIHRvIHRoZSBmYXIgcmlnaHQKKyAgICAvLyBhbmQgc2Nyb2xsIG9uZSBjaGFyYWN0ZXIuCisg
ICAgZnJhbWUtPm1vdmVDYXJldFNlbGVjdGlvblRvd2FyZHNXaW5kb3dQb2ludChXZWJQb2ludChy
aWdodCArIDUwLCBib3R0b20pKTsKKyAgICBFWFBFQ1RfQ0FSRVRfTkVBUih3ZWJWaWV3SW1wbCwg
cmlnaHQsIGNlbnRlclkpOworICAgIFdlYlJhbmdlIGluaXRpYWxTZWxlY3Rpb24gPSBmcmFtZS0+
c2VsZWN0aW9uUmFuZ2UoKTsKKyAgICBmcmFtZS0+bW92ZUNhcmV0U2VsZWN0aW9uVG93YXJkc1dp
bmRvd1BvaW50KFdlYlBvaW50KHJpZ2h0ICsgNTAsIGJvdHRvbSkpOworICAgIEVYUEVDVF9DQVJF
VF9ORUFSKHdlYlZpZXdJbXBsLCByaWdodCwgY2VudGVyWSk7CisgICAgV2ViUmFuZ2Ugc2VsZWN0
aW9uID0gZnJhbWUtPnNlbGVjdGlvblJhbmdlKCk7CisgICAgRVhQRUNUX0VRKHNlbGVjdGlvbi5z
dGFydE9mZnNldCgpLCBpbml0aWFsU2VsZWN0aW9uLnN0YXJ0T2Zmc2V0KCkgKyAxKTsKKyAgICAv
LyBNb3ZlIG9uY2UgbW9yZSB0byBlbnN1cmUgdGhhdCB0aGUgYm94IGhhcyBiZWVuIHNjcm9sbGVk
IGF0IGxlYXN0IHR3bworICAgIC8vIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0LgorICAgIGZyYW1l
LT5tb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRzV2luZG93UG9pbnQoV2ViUG9pbnQocmlnaHQgKyA1
MCwgYm90dG9tKSk7CisKKyAgICAvLyBBIG1vdmUgdG8gdGhlIGxlZnQgb2YgdGhlIGJveCBzaG91
bGQgbW92ZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBmYXIgbGVmdAorICAgIC8vIGFuZCBzY3JvbGwg
b25lIGNoYXJhY3Rlci4KKyAgICBmcmFtZS0+bW92ZUNhcmV0U2VsZWN0aW9uVG93YXJkc1dpbmRv
d1BvaW50KFdlYlBvaW50KDEsIGJvdHRvbSkpOworICAgIEVYUEVDVF9DQVJFVF9ORUFSKHdlYlZp
ZXdJbXBsLCBsZWZ0LCBjZW50ZXJZKTsKKyAgICBpbml0aWFsU2VsZWN0aW9uID0gZnJhbWUtPnNl
bGVjdGlvblJhbmdlKCk7CisgICAgRVhQRUNUX0xUKGluaXRpYWxTZWxlY3Rpb24uc3RhcnRPZmZz
ZXQoKSwgMik7CisgICAgZnJhbWUtPm1vdmVDYXJldFNlbGVjdGlvblRvd2FyZHNXaW5kb3dQb2lu
dChXZWJQb2ludCgxLCBib3R0b20pKTsKKyAgICBFWFBFQ1RfQ0FSRVRfTkVBUih3ZWJWaWV3SW1w
bCwgbGVmdCwgY2VudGVyWSk7CisgICAgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvblJhbmdl
KCk7CisgICAgRVhQRUNUX0VRKHNlbGVjdGlvbi5zdGFydE9mZnNldCgpLCBpbml0aWFsU2VsZWN0
aW9uLnN0YXJ0T2Zmc2V0KCkgLSAxKTsKKworCisgICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2Vi
U2NyaXB0U291cmNlKCJzZWxlY3RFbGVtZW50KCdFZGl0Qm94V2l0aFNob3J0VGV4dCcpOyIpKTsK
KyAgICBib3VuZHMgPSBlbGVtZW50Qm91bmRzKGZyYW1lLCAiRWRpdEJveFdpdGhTaG9ydFRleHQi
KTsKKyAgICB0b3AgPSBib3VuZHMueTsKKyAgICBsZWZ0ID0gYm91bmRzLng7CisgICAgYm90dG9t
ID0gYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0IC0gMTsKKyAgICByaWdodCA9IGJvdW5kcy54ICsg
Ym91bmRzLndpZHRoIC0gMTsKKyAgICBFWFBFQ1RfQ0FSRVRfTkVBUih3ZWJWaWV3SW1wbCwgbGVm
dCwgdG9wKTsKKworICAgIC8vIFRoZSB0ZXh0IGVuZHMgbmVhciB0aGUgbWlkZGxlIG9mIHRoZSBp
bnB1dCBib3gsIGFuZCBzbyBtb3ZlcyB0byB0aGUgZmFyCisgICAgLy8gcmlnaHQgc2hvdWxkIHN0
b3AgbG9uZyBiZWZvcmUgdGhlIHJpZ2h0IGVkZ2UuCisgICAgZnJhbWUtPm1vdmVDYXJldFNlbGVj
dGlvblRvd2FyZHNXaW5kb3dQb2ludChXZWJQb2ludChyaWdodCArIDUwLCBib3R0b20pKTsKKyAg
ICBXZWJSZWN0IHJlY3QsIGNhcmV0OworICAgIHdlYlZpZXdJbXBsLT5zZWxlY3Rpb25Cb3VuZHMo
Y2FyZXQsIHJlY3QpOworICAgIEVYUEVDVF9MVChjYXJldC54LCByaWdodCAtIDIwMCk7CisgICAg
RVhQRUNUX0VRKGZyYW1lLT5zZWxlY3Rpb25SYW5nZSgpLnN0YXJ0T2Zmc2V0KCksIChpbnQpc3Rk
OjpzdHJpbmcoIkp1c3Qgc2hvcnQgdGV4dC4iKS5zaXplKCkpOworCisKKyAgICBmcmFtZS0+ZXhl
Y3V0ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoInNlbGVjdEVsZW1lbnQoJ1RleHRBcmVhV2l0aExv
bmdUZXh0Jyk7IikpOworICAgIGJvdW5kcyA9IGVsZW1lbnRCb3VuZHMoZnJhbWUsICJUZXh0QXJl
YVdpdGhMb25nVGV4dCIpOworICAgIHRvcCA9IGJvdW5kcy55OworICAgIGxlZnQgPSBib3VuZHMu
eDsKKyAgICBib3R0b20gPSBib3VuZHMueSArIGJvdW5kcy5oZWlnaHQgLSAxOworICAgIHJpZ2h0
ID0gYm91bmRzLnggKyBib3VuZHMud2lkdGggLSAxOworICAgIGNlbnRlclggPSAobGVmdCArIHJp
Z2h0KSAvIDI7CisgICAgY2VudGVyWSA9ICh0b3AgKyBib3R0b20pIC8gMjsKKyAgICBFWFBFQ1Rf
Q0FSRVRfTkVBUih3ZWJWaWV3SW1wbCwgbGVmdCwgdG9wKTsKKworICAgIC8vIEEgbW92ZSB3aXRo
aW4gdGhlIHRleHRhcmVhIHNob3VsZCBtb3ZlIHRoZSBzZWxlY3Rpb24gbmVhciB0aGUgcG9pbnQu
CisgICAgZnJhbWUtPm1vdmVDYXJldFNlbGVjdGlvblRvd2FyZHNXaW5kb3dQb2ludChXZWJQb2lu
dChjZW50ZXJYLCBjZW50ZXJZKSk7CisgICAgRVhQRUNUX0NBUkVUX05FQVIod2ViVmlld0ltcGws
IGNlbnRlclgsIGNlbnRlclkpOworICAgIGZyYW1lLT5tb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRz
V2luZG93UG9pbnQoV2ViUG9pbnQobGVmdCArIGJvdW5kcy53aWR0aCAvIDQsIHRvcCkpOworICAg
IEVYUEVDVF9DQVJFVF9ORUFSKHdlYlZpZXdJbXBsLCBsZWZ0ICsgYm91bmRzLndpZHRoIC8gNCwg
dG9wKTsKKworICAgIC8vIEEgbW92ZSBhYm92ZS9iZWxvdyB0aGUgdGV4dGFyZWEgc2hvdWxkIG1v
dmUgdGhlIHNlbGVjdGlvbiB0byBhCisgICAgLy8gaG9yaXpvbnRhbGx5IGFsaWduZWQgcG9zaXRp
b24gbmVhciB0aGUgdG9wL2JvdHRvbS4gRnVydGhlciBtb3ZlbWVudHMgb24KKyAgICAvLyB0aGUg
c2FtZSBzaWRlIHNob3VsZCBzY3JvbGwgdGhlIHRleHQuCisgICAgZnJhbWUtPm1vdmVDYXJldFNl
bGVjdGlvblRvd2FyZHNXaW5kb3dQb2ludChXZWJQb2ludChjZW50ZXJYLCBib3R0b20gKyA1MCkp
OworICAgIEVYUEVDVF9DQVJFVF9ORUFSKHdlYlZpZXdJbXBsLCBjZW50ZXJYLCBib3R0b20gLSAy
MCk7CisgICAgaW5pdGlhbFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb25SYW5nZSgpOworICAg
IGZyYW1lLT5tb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRzV2luZG93UG9pbnQoV2ViUG9pbnQoY2Vu
dGVyWCwgYm90dG9tICsgNTApKTsKKyAgICBFWFBFQ1RfQ0FSRVRfTkVBUih3ZWJWaWV3SW1wbCwg
Y2VudGVyWCwgYm90dG9tIC0gMjApOworICAgIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb25S
YW5nZSgpOworICAgIEVYUEVDVF9HVChzZWxlY3Rpb24uc3RhcnRPZmZzZXQoKSwgaW5pdGlhbFNl
bGVjdGlvbi5zdGFydE9mZnNldCgpICsgMzApOworICAgIEVYUEVDVF9MVChzZWxlY3Rpb24uc3Rh
cnRPZmZzZXQoKSwgaW5pdGlhbFNlbGVjdGlvbi5zdGFydE9mZnNldCgpICsgMTAwKTsKKworICAg
IGZyYW1lLT5tb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRzV2luZG93UG9pbnQoV2ViUG9pbnQoY2Vu
dGVyWCwgdG9wIC0gNTApKTsKKyAgICBFWFBFQ1RfQ0FSRVRfTkVBUih3ZWJWaWV3SW1wbCwgY2Vu
dGVyWCwgdG9wKTsKKyAgICBpbml0aWFsU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvblJhbmdl
KCk7CisgICAgZnJhbWUtPm1vdmVDYXJldFNlbGVjdGlvblRvd2FyZHNXaW5kb3dQb2ludChXZWJQ
b2ludChjZW50ZXJYLCB0b3AgLSA1MCkpOworICAgIEVYUEVDVF9DQVJFVF9ORUFSKHdlYlZpZXdJ
bXBsLCBjZW50ZXJYLCB0b3ApOworICAgIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb25SYW5n
ZSgpOworICAgIEVYUEVDVF9HVChzZWxlY3Rpb24uc3RhcnRPZmZzZXQoKSwgaW5pdGlhbFNlbGVj
dGlvbi5zdGFydE9mZnNldCgpIC0gMTAwKTsKKyAgICBFWFBFQ1RfTFQoc2VsZWN0aW9uLnN0YXJ0
T2Zmc2V0KCksIGluaXRpYWxTZWxlY3Rpb24uc3RhcnRPZmZzZXQoKSArIDMwKTsKKworICAgIC8v
IEEgbW92ZSB0byB0aGUgbGVmdCBvciByaWdodCBvZiB0aGUgdGV4dGFyZWEgc2hvdWxkIG1vdmUg
dGhlIHNlbGVjdGlvbiB0bworICAgIC8vIGEgdmVydGljYWxseSBhbGlnbmVkIHNwb3QgbmVhciB0
aGUgbGVmdC9yaWdodCBlZGdlLgorICAgIGZyYW1lLT5tb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRz
V2luZG93UG9pbnQoV2ViUG9pbnQobGVmdCAtIDIwLCBjZW50ZXJZKSk7CisgICAgRVhQRUNUX0NB
UkVUX05FQVIod2ViVmlld0ltcGwsIGxlZnQsIGNlbnRlclkpOworCisgICAgd2ViVmlld0ltcGwt
PmNsb3NlKCk7Cit9CisKIGNsYXNzIERpc2FtYmlndWF0aW9uUG9wdXBUZXN0V2ViVmlld0NsaWVu
dCA6IHB1YmxpYyBXZWJWaWV3Q2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZGlk
VGFwTXVsdGlwbGVUYXJnZXRzKGNvbnN0IFdlYkdlc3R1cmVFdmVudCYsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJSZWN0PiYgdGFyZ2V0UmVjdHMpIE9WRVJSSURFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvbW92ZV9jYXJldC5odG1sIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL21vdmVfY2FyZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmU0ZDZhZDE4
N2QyODFjZTM4Y2NkYWE0MTVjNzg3MGNjZDI2MGZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL21vdmVfY2FyZXQuaHRtbApAQCAtMCwwICsxLDE4
IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIHNlbGVjdEVsZW1lbnQoaWQp
IHsKKyAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgIGVsZW1l
bnQuZm9jdXMoKTsKKyAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSgpOworfQorPC9zY3JpcHQ+
Cis8L2hlYWQ+CisgIDxib2R5IG9ubG9hZD0ic2VsZWN0RWxlbWVudCgnRWRpdEJveFdpdGhMb25n
VGV4dCcpIj4KKyAgICAgIDxpbnB1dCBpZD0iRWRpdEJveFdpdGhMb25nVGV4dCIgc3R5bGU9Indp
ZHRoOjI1MCIgdmFsdWU9IlZlcnkgbG9uZyB0ZXh0IHRvIGZpbGwgdGhlIGVkaXQgYm94LiAgTmVl
ZHMgdG8gb3ZlcmZpbGwgdGhlIGVkaXQgYm94IHRvIHRlc3QgbW92aW5nIGNhcmV0IHBhc3QgdGhl
IGVuZC4iIHR5cGU9InRleHQiPgorICAgICAgPGJyLz4KKyAgICAgIDxpbnB1dCBpZD0iRWRpdEJv
eFdpdGhTaG9ydFRleHQiIHN0eWxlPSJ3aWR0aDoyNTAiIHZhbHVlPSJKdXN0IHNob3J0IHRleHQu
IiB0eXBlPSJ0ZXh0Ij4KKyAgICAgIDxici8+CisgICAgICA8dGV4dGFyZWEgaWQ9IlRleHRBcmVh
V2l0aExvbmdUZXh0IiBzdHlsZT0id2lkdGg6MzAwOyBoZWlnaHQ6MjUwIj4gTG9yZW0gaXBzdW0g
ZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVz
bW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLiBV
dCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNv
IGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LiBEdWlzIGF1
dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbiB2b2x1cHRhdGUgdmVsaXQgZXNzZSBj
aWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2Nj
YWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYSBk
ZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0
IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBv
ciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFk
IG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMg
bmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LiBEdWlzIGF1dGUgaXJ1cmUg
ZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbiB2b2x1cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9s
b3JlIGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3Vw
aWRhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVudCBt
b2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS4gPC90ZXh0YXJlYT4KKyAgPC9ib2R5PgorPC9odG1s
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180067</attachid>
            <date>2012-12-18 17:53:30 -0800</date>
            <delta_ts>2012-12-19 10:43:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105189-20121218175047.patch</filename>
            <type>text/plain</type>
            <size>6136</size>
            <attacher name="Chris Hopman">cjhopman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGI2YTEwMDBjMWNkYmVh
ZmJkY2M5Yzg4ZWQyNGRjNmE4MjdiMzI3OS4uMzdmZWRjMWE4OTFhM2NlYjE1M2E2MmRmMWUyYWVm
NTM5MjBkNGQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTEyLTE4ICBDaHJp
cyBIb3BtYW4gIDxjamhvcG1hbkBnb29nbGUuY29tPgorCisgICAgICAgIEFkZCBmdW5jdGlvbiB0
byBtb3ZlIGNhcmV0IHNlbGVjdGlvbiB0b3dhcmRzIGEgcG9pbnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTE4OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKToKKyAgICAgICAgRml4IGFuIGlzc3VlIHdo
ZXJlIHBhZ2Ugc2NhbGUgZmFjdG9yIHdhcyBub3QgYmVpbmcgdGFrZW4gaW50byBhY2NvdW50IGlu
IG9uZQorICAgICAgICBvZiB0aGUgY29kZSBwYXRocy4gIFNwZWNpZmljYWxseSwgd2hlcmUgdGhl
IG1ldGhvZCBzY3JvbGxzIHRoZSBlbmNsb3NpbmcKKyAgICAgICAgUmVuZGVyQm94LCB0aGUgYm91
bmRzIG9mIHRoZSByZW5kZXJib3ggYXJlIHVuc2NhbGVkLCB3aGVyZWFzIHRoZSBtZXRob2QgdGFr
ZXMKKyAgICAgICAgYSByZWN0IHBhcmFtZXRlciB0aGF0IGlzIHNjYWxlZC4gTm90ZTogZWxzZXdo
ZXJlIGluIHRoZSBtZXRob2QsIHdoZXJlIHRoZQorICAgICAgICBwYXJlbnQgbGF5ZXIgaXMgc2Ny
b2xsZWQsIHRoZSBzY2FsZWQgcmVjdCBpcyBjb3JyZWN0LiBTbyB3ZSBjYW5ub3Qgc2ltcGx5IHBh
c3MKKyAgICAgICAgaW4gYW4gdW5zY2FsZWQgcmVjdCB0byBzY3JvbGxSZWN0VG9WaXNpYmxlLgor
CiAyMDEyLTEyLTE4ICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBIYXZlIGtGaXhlZFBvaW50RGVub21pbmF0b3IgYmUgY29uc3RhbnQgYWNyb3NzIHBvcnRzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDlhYzhlMThjMmU3NmU0ZDEwZDAwMjlhZmZmMTZk
MjkyZmYyODY4YjYuLjg0NWJlNWVmMmEwMmQxOGFjNDUyMTM4YTFiM2U3MTJjMGVhZmViODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTItMTItMTggIENo
cmlzIEhvcG1hbiAgPGNqaG9wbWFuQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIGZ1bmN0aW9u
IHRvIG1vdmUgY2FyZXQgc2VsZWN0aW9uIHRvd2FyZHMgYSBwb2ludAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1MTg5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBtb3ZlcyB0aGUg
c2VsZWN0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHBvaW50IGluIHRoZQorICAgICAgICByb290
RWRpdGFibGVFbGVtZW50IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gVXNlZCBvbiBBbmRyb2lk
IGZvcgorICAgICAgICB0aGUgYmVoYXZpb3Igb2YgaW5zZXJ0aW9uIGhhbmRsZXMgKGkuZS4gZHJh
Z2dpbmcgdGhlIGNhcmV0IGFyb3VuZCkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoK
KyAgICAgICAgKFdlYkZyYW1lKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjptb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRzV2lu
ZG93UG9pbnQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBs
Lmg6CisgICAgICAgIChXZWJGcmFtZUltcGwpOgorCiAyMDEyLTEyLTE3ICBBbmRyZXkgS29zeWFr
b3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogcGFpbnQg
aW5zcGVjdG9yIG92ZXJsYXkgb24gYSB0cmFuc3BhcmVuY3kgbGF5ZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGMwY2U4MjQwYWI5ZjhlOWZjOTZiNDRkMDY1
ZDI4ZjI5ZGFkOTkwN2IuLjk5ZjIzZWEyNmZmMjRiYTkzOGRmMTU1YzEyYTA0MGQwMzRiZTg4ZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjEwMSw3ICsy
MTAxLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5
b3V0UmVjdCYgcmVjdCwgY29uc3QgU2Nyb2xsQWxpZ25tCiAgICAgICAgIGFic1Bvcy5tb3ZlKGJv
eC0+Ym9yZGVyTGVmdCgpLCBib3gtPmJvcmRlclRvcCgpKTsKIAogICAgICAgICBMYXlvdXRSZWN0
IGxheWVyQm91bmRzID0gTGF5b3V0UmVjdChhYnNQb3MueCgpICsgc2Nyb2xsWE9mZnNldCgpLCBh
YnNQb3MueSgpICsgc2Nyb2xsWU9mZnNldCgpLCBib3gtPmNsaWVudFdpZHRoKCksIGJveC0+Y2xp
ZW50SGVpZ2h0KCkpOwotICAgICAgICBMYXlvdXRSZWN0IGV4cG9zZVJlY3QgPSBMYXlvdXRSZWN0
KHJlY3QueCgpICsgc2Nyb2xsWE9mZnNldCgpLCByZWN0LnkoKSArIHNjcm9sbFlPZmZzZXQoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgTGF5b3V0UmVjdCB1bnNjYWxl
ZFJlY3QgPSByZWN0OworICAgICAgICBGcmFtZSogZnJhbWUgPSByZW5kZXJlcigpLT5mcmFtZSgp
OworICAgICAgICBpZiAoZnJhbWUpCisgICAgICAgICAgICB1bnNjYWxlZFJlY3Quc2NhbGUoMSAv
IGZyYW1lLT5wYWdlKCktPnBhZ2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgTGF5b3V0UmVjdCBl
eHBvc2VSZWN0ID0gTGF5b3V0UmVjdCh1bnNjYWxlZFJlY3QueCgpICsgc2Nyb2xsWE9mZnNldCgp
LCB1bnNjYWxlZFJlY3QueSgpICsgc2Nyb2xsWU9mZnNldCgpLCB1bnNjYWxlZFJlY3Qud2lkdGgo
KSwgdW5zY2FsZWRSZWN0LmhlaWdodCgpKTsKICAgICAgICAgTGF5b3V0UmVjdCByID0gZ2V0UmVj
dFRvRXhwb3NlKGxheWVyQm91bmRzLCBleHBvc2VSZWN0LCBhbGlnblgsIGFsaWduWSk7CiAgICAg
ICAgIAogICAgICAgICBpbnQgcm91bmRlZEFkanVzdGVkWCA9IHJvdW5kVG9JbnQoci54KCkgLSBh
YnNQb3MueCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkZyYW1lLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCmluZGV4
IDYwMDcyNTJkZjIzNDlhZDdkYTFmMTA3MTVjNDJkMDE2OTYyN2FjOTMuLmQwZTNkMjViNThkMzhh
OTA3NmE4OTQwMWRhMWI1OWViMDE0ZGUwYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkZyYW1lLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViRnJhbWUuaApAQCAtNDcwLDYgKzQ3MCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBzZWxlY3RSYW5nZShjb25zdCBXZWJSYW5nZSYpID0gMDsKIAorICAgIHZpcnR1YWwgdm9p
ZCBtb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRzV2luZG93UG9pbnQoY29uc3QgV2ViUG9pbnQmKSA9
IDA7CisKICAgICAvLyBQcmludGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIFJlZm9ybWF0cyB0aGUgV2ViRnJh
bWUgZm9yIHByaW50aW5nLiBXZWJQcmludFBhcmFtcyBzcGVjaWZpZXMgdGhlIHByaW50YWJsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggZjk0M2Y1
YjhmNGQwODAzM2EwY2VkYmVkZWJhZmU5MjBkZDc3ZDhiZS4uODViOWY0N2IwNWFhYjNlOWI4YzIy
NzI0ZmMyMzcxMDVlYTUwYmJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuY3BwCkBAIC0xMzg4LDYgKzEzODgsMTcgQEAgdm9pZCBXZWJGcmFtZUltcGw6OnNl
bGVjdFJhbmdlKGNvbnN0IFdlYlJhbmdlJiB3ZWJSYW5nZSkKICAgICAgICAgZnJhbWUoKS0+c2Vs
ZWN0aW9uKCktPnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFdlYkNvcmU6OlZQX0RFRkFV
TFRfQUZGSU5JVFksIGZhbHNlKTsKIH0KIAordm9pZCBXZWJGcmFtZUltcGw6Om1vdmVDYXJldFNl
bGVjdGlvblRvd2FyZHNXaW5kb3dQb2ludChjb25zdCBXZWJQb2ludCYgcG9pbnQpCit7CisgICAg
RWxlbWVudCogZWRpdGFibGUgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpOworICAgIEludFBvaW50IGNvbnRlbnRzUG9pbnQgPSBmcmFtZSgpLT52aWV3KCktPndp
bmRvd1RvQ29udGVudHMoSW50UG9pbnQocG9pbnQpKTsKKyAgICBmbG9hdCBwYWdlU2NhbGVGYWN0
b3IgPSBmcmFtZSgpLT5wYWdlKCktPnBhZ2VTY2FsZUZhY3RvcigpOworICAgIGNvbnRlbnRzUG9p
bnQuc2NhbGUoMSAvIHBhZ2VTY2FsZUZhY3RvciwgMSAvIHBhZ2VTY2FsZUZhY3Rvcik7CisgICAg
TGF5b3V0UG9pbnQgbG9jYWxQb2ludChlZGl0YWJsZS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xv
Y2FsKGNvbnRlbnRzUG9pbnQpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBlZGl0
YWJsZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChsb2NhbFBvaW50KTsKKyAgICBmcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+bW92ZVRvKHBvc2l0aW9uLCBVc2VyVHJpZ2dlcmVkKTsKK30KKwog
VmlzaWJsZVBvc2l0aW9uIFdlYkZyYW1lSW1wbDo6dmlzaWJsZVBvc2l0aW9uRm9yV2luZG93UG9p
bnQoY29uc3QgV2ViUG9pbnQmIHBvaW50KQogewogICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3Qg
PSBIaXRUZXN0UmVxdWVzdDo6TW92ZSB8IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRl
c3RSZXF1ZXN0OjpBY3RpdmUgfCBIaXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmc7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCmluZGV4IDcyMmVjZjU1OTc0NTBl
Y2U1NGI2ZGU0MmFiODhhMTAzOGZlYzFkMWEuLjA0NTQ1YWE5YTlmOWEzODkwMmMyYWQ0ZWQ4MzEy
NDFjNGQ2ZWU4MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5o
CkBAIC0xOTAsNiArMTkwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RXb3Jk
QXJvdW5kQ2FyZXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0UmFuZ2UoY29uc3QgV2ViUG9p
bnQmIGJhc2UsIGNvbnN0IFdlYlBvaW50JiBleHRlbnQpOwogICAgIHZpcnR1YWwgdm9pZCBzZWxl
Y3RSYW5nZShjb25zdCBXZWJSYW5nZSYpOworICAgIHZpcnR1YWwgdm9pZCBtb3ZlQ2FyZXRTZWxl
Y3Rpb25Ub3dhcmRzV2luZG93UG9pbnQoY29uc3QgV2ViUG9pbnQmKTsKICAgICB2aXJ0dWFsIGlu
dCBwcmludEJlZ2luKGNvbnN0IFdlYlByaW50UGFyYW1zJiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYk5vZGUmIGNvbnN0cmFpblRvTm9kZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wqIHVzZUJyb3dzZXJPdmVybGF5cyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180193</attachid>
            <date>2012-12-19 10:43:04 -0800</date>
            <delta_ts>2013-01-05 12:02:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105189-20121219104021.patch</filename>
            <type>text/plain</type>
            <size>3668</size>
            <attacher name="Chris Hopman">cjhopman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDlhYzhlMThjMmU3NmU0ZDEwZDAwMjlhZmZmMTZkMjkyZmYyODY4YjYuLjg0NWJlNWVmMmEwMmQx
OGFjNDUyMTM4YTFiM2U3MTJjMGVhZmViODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTItMTItMTggIENocmlzIEhvcG1hbiAgPGNqaG9wbWFuQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgQWRkIGZ1bmN0aW9uIHRvIG1vdmUgY2FyZXQgc2VsZWN0aW9uIHRv
d2FyZHMgYSBwb2ludAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA1MTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBmdW5jdGlvbiBtb3ZlcyB0aGUgc2VsZWN0aW9uIHRvIHRoZSBjb3JyZXNwb25k
aW5nIHBvaW50IGluIHRoZQorICAgICAgICByb290RWRpdGFibGVFbGVtZW50IG9mIHRoZSBjdXJy
ZW50IHNlbGVjdGlvbi4gVXNlZCBvbiBBbmRyb2lkIGZvcgorICAgICAgICB0aGUgYmVoYXZpb3Ig
b2YgaW5zZXJ0aW9uIGhhbmRsZXMgKGkuZS4gZHJhZ2dpbmcgdGhlIGNhcmV0IGFyb3VuZCkuCisK
KyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKFdlYkZyYW1lKToKKyAgICAg
ICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
Ojptb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRzV2luZG93UG9pbnQpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6CisgICAgICAgIChXZWJGcmFtZUltcGwp
OgorCiAyMDEyLTEyLTE3ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogcGFpbnQgaW5zcGVjdG9yIG92ZXJsYXkgb24gYSB0cmFu
c3BhcmVuY3kgbGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkZyYW1lLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCmlu
ZGV4IDYwMDcyNTJkZjIzNDlhZDdkYTFmMTA3MTVjNDJkMDE2OTYyN2FjOTMuLmQwZTNkMjViNThk
MzhhOTA3NmE4OTQwMWRhMWI1OWViMDE0ZGUwYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViRnJhbWUuaApAQCAtNDcwLDYgKzQ3MCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBzZWxlY3RSYW5nZShjb25zdCBXZWJSYW5nZSYpID0gMDsKIAorICAgIHZpcnR1YWwg
dm9pZCBtb3ZlQ2FyZXRTZWxlY3Rpb25Ub3dhcmRzV2luZG93UG9pbnQoY29uc3QgV2ViUG9pbnQm
KSA9IDA7CisKICAgICAvLyBQcmludGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIFJlZm9ybWF0cyB0aGUgV2Vi
RnJhbWUgZm9yIHByaW50aW5nLiBXZWJQcmludFBhcmFtcyBzcGVjaWZpZXMgdGhlIHByaW50YWJs
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKaW5kZXggZjk0
M2Y1YjhmNGQwODAzM2EwY2VkYmVkZWJhZmU5MjBkZDc3ZDhiZS4uNzkxNGYxZWViNjQxZDlmM2E0
MWU3NWVmNDNmZWJkMGI1ZGIzNmI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGcmFtZUltcGwuY3BwCkBAIC0xMzg4LDYgKzEzODgsMTYgQEAgdm9pZCBXZWJGcmFtZUltcGw6
OnNlbGVjdFJhbmdlKGNvbnN0IFdlYlJhbmdlJiB3ZWJSYW5nZSkKICAgICAgICAgZnJhbWUoKS0+
c2VsZWN0aW9uKCktPnNldFNlbGVjdGVkUmFuZ2UocmFuZ2UuZ2V0KCksIFdlYkNvcmU6OlZQX0RF
RkFVTFRfQUZGSU5JVFksIGZhbHNlKTsKIH0KIAordm9pZCBXZWJGcmFtZUltcGw6Om1vdmVDYXJl
dFNlbGVjdGlvblRvd2FyZHNXaW5kb3dQb2ludChjb25zdCBXZWJQb2ludCYgcG9pbnQpCit7Cisg
ICAgRWxlbWVudCogZWRpdGFibGUgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpOworICAgIEludFBvaW50IGNvbnRlbnRzUG9pbnQgPSBmcmFtZSgpLT52aWV3KCkt
PndpbmRvd1RvQ29udGVudHMoSW50UG9pbnQocG9pbnQpKTsKKyAgICBMYXlvdXRQb2ludCBsb2Nh
bFBvaW50KGVkaXRhYmxlLT5jb252ZXJ0RnJvbVBhZ2UoY29udGVudHNQb2ludCkpOworICAgIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGVkaXRhYmxlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZv
clBvaW50KGxvY2FsUG9pbnQpOworICAgIGlmIChmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2hvdWxk
Q2hhbmdlU2VsZWN0aW9uKHBvc2l0aW9uKSkKKyAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCkt
Pm1vdmVUbyhwb3NpdGlvbiwgVXNlclRyaWdnZXJlZCk7Cit9CisKIFZpc2libGVQb3NpdGlvbiBX
ZWJGcmFtZUltcGw6OnZpc2libGVQb3NpdGlvbkZvcldpbmRvd1BvaW50KGNvbnN0IFdlYlBvaW50
JiBwb2ludCkKIHsKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0ID0gSGl0VGVzdFJlcXVlc3Q6
Ok1vdmUgfCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZl
IHwgSGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBwaW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuaAppbmRleCA3MjJlY2Y1NTk3NDUwZWNlNTRiNmRlNDJhYjg4YTEw
MzhmZWMxZDFhLi4wNDU0NWFhOWE5ZjlhMzg5MDJjMmFkNGVkODMxMjQxYzRkNmVlODIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuaApAQCAtMTkwLDYgKzE5MCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0V29yZEFyb3VuZENhcmV0KCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNlbGVjdFJhbmdlKGNvbnN0IFdlYlBvaW50JiBiYXNlLCBjb25zdCBX
ZWJQb2ludCYgZXh0ZW50KTsKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0UmFuZ2UoY29uc3QgV2Vi
UmFuZ2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZUNhcmV0U2VsZWN0aW9uVG93YXJkc1dpbmRv
d1BvaW50KGNvbnN0IFdlYlBvaW50Jik7CiAgICAgdmlydHVhbCBpbnQgcHJpbnRCZWdpbihjb25z
dCBXZWJQcmludFBhcmFtcyYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJO
b2RlJiBjb25zdHJhaW5Ub05vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiB1
c2VCcm93c2VyT3ZlcmxheXMpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>