<?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>107026</bug_id>
          
          <creation_ts>2013-01-16 09:56:30 -0800</creation_ts>
          <short_desc>Hide the location bar on window.scrollTo(0,[01])</short_desc>
          <delta_ts>2013-05-02 11:45:24 -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>CLOSED</bug_status>
          <resolution>WONTFIX</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>107834</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="John Knottenbelt">jknotten</reporter>
          <assigned_to name="John Knottenbelt">jknotten</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>anilsson</cc>
    
    <cc>ap</cc>
    
    <cc>bdakin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>efidler</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>jamesr</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>luiz</cc>
    
    <cc>mvanouwerkerk</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>peter+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tdanderson</cc>
    
    <cc>thorton</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>808459</commentid>
    <comment_count>0</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-16 09:56:30 -0800</bug_when>
    <thetext>Allow Javascript-initiated scrolls to be detected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808463</commentid>
    <comment_count>1</comment_count>
      <attachid>182997</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-16 09:58:16 -0800</bug_when>
    <thetext>Created attachment 182997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808476</commentid>
    <comment_count>2</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-16 10:04:23 -0800</bug_when>
    <thetext>This change is needed by https://bugs.webkit.org/show_bug.cgi?id=107027</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809437</commentid>
    <comment_count>3</comment_count>
      <attachid>182997</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-01-17 10:21:08 -0800</bug_when>
    <thetext>Comment on attachment 182997
Patch

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

&gt; Source/WebCore/page/ChromeClient.h:181
&gt; +    virtual void scrollFromJavaScript(const IntPoint&amp;) const { }; // Currently only Chromium has non empty implementation.

This is a fairly weak abstraction. What does a &quot;scroll from JavaScript&quot; mean? Does this include programmatic navigations to anchors, for example? Or dispatching a synthetic click event on a scroll bar?

Also, you are saying that this is a de facto standard behavior. So, it&apos;s presumably already implemented without a Chromium-only hack?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810685</commentid>
    <comment_count>4</comment_count>
      <attachid>182997</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-18 09:10:27 -0800</bug_when>
    <thetext>Comment on attachment 182997
Patch

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

&gt;&gt; Source/WebCore/page/ChromeClient.h:181
&gt;&gt; +    virtual void scrollFromJavaScript(const IntPoint&amp;) const { }; // Currently only Chromium has non empty implementation.
&gt; 
&gt; This is a fairly weak abstraction. What does a &quot;scroll from JavaScript&quot; mean? Does this include programmatic navigations to anchors, for example? Or dispatching a synthetic click event on a scroll bar?
&gt; 
&gt; Also, you are saying that this is a de facto standard behavior. So, it&apos;s presumably already implemented without a Chromium-only hack?

Thanks for reviewing. You are quite correct, there are more sources of programmatic scroll than I originally considered. I think that existing browsers implement this behaviour by means of a platformWidget for the ScrollView, which implements (amongst other things) ScrollView::setScrollPosition. The platformWidget can then differentiate between user and programmatic scroll.

If, as in Chrome&apos;s case, there is no hostWidget, ScrollView::setScrollPosition will eventually call through to HostWindow::scroll, so that is a potential place to hook in. Unfortunately, this won&apos;t happen if the scroll position hasn&apos;t changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813177</commentid>
    <comment_count>5</comment_count>
      <attachid>184015</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-22 10:46:38 -0800</bug_when>
    <thetext>Created attachment 184015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813213</commentid>
    <comment_count>6</comment_count>
      <attachid>184015</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-22 11:01:12 -0800</bug_when>
    <thetext>Comment on attachment 184015
Patch

Attachment 184015 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16038654</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813214</commentid>
    <comment_count>7</comment_count>
      <attachid>182997</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-22 11:01:24 -0800</bug_when>
    <thetext>Comment on attachment 182997
Patch

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

&gt;&gt;&gt; Source/WebCore/page/ChromeClient.h:181
&gt;&gt;&gt; +    virtual void scrollFromJavaScript(const IntPoint&amp;) const { }; // Currently only Chromium has non empty implementation.
&gt;&gt; 
&gt;&gt; This is a fairly weak abstraction. What does a &quot;scroll from JavaScript&quot; mean? Does this include programmatic navigations to anchors, for example? Or dispatching a synthetic click event on a scroll bar?
&gt;&gt; 
&gt;&gt; Also, you are saying that this is a de facto standard behavior. So, it&apos;s presumably already implemented without a Chromium-only hack?
&gt; 
&gt; Thanks for reviewing. You are quite correct, there are more sources of programmatic scroll than I originally considered. I think that existing browsers implement this behaviour by means of a platformWidget for the ScrollView, which implements (amongst other things) ScrollView::setScrollPosition. The platformWidget can then differentiate between user and programmatic scroll.
&gt; 
&gt; If, as in Chrome&apos;s case, there is no hostWidget, ScrollView::setScrollPosition will eventually call through to HostWindow::scroll, so that is a potential place to hook in. Unfortunately, this won&apos;t happen if the scroll position hasn&apos;t changed.

It seems that platformWidget scrolling, or delegatesScrolling() is the only existing way to get all scroll events to the embedder. delegatesScrolling() is part of the implementation of TILED_BACKING_STORE, which is not used by Chromium. Also, Chromium doesn&apos;t use platformWidget for scrolling. 

Existing code paths (apart from the two mentioned above) squash any notifications where the scroll is to the same offset, but any programmatic scroll (even to the same position) should cause the URL bar to hide. 

Adding a method to ChromeClient seems to me to be a reasonable way to get these programmatic scroll events out to the embedder, unless there is better way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813217</commentid>
    <comment_count>8</comment_count>
      <attachid>184015</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-22 11:02:43 -0800</bug_when>
    <thetext>Comment on attachment 184015
Patch

Attachment 184015 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16045698</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813234</commentid>
    <comment_count>9</comment_count>
      <attachid>184015</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-22 11:10:00 -0800</bug_when>
    <thetext>Comment on attachment 184015
Patch

Attachment 184015 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16044676</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813250</commentid>
    <comment_count>10</comment_count>
      <attachid>184015</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-22 11:19:12 -0800</bug_when>
    <thetext>Comment on attachment 184015
Patch

Attachment 184015 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16065017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813252</commentid>
    <comment_count>11</comment_count>
      <attachid>184015</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-01-22 11:23:47 -0800</bug_when>
    <thetext>Comment on attachment 184015
Patch

Attachment 184015 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/16036709</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813269</commentid>
    <comment_count>12</comment_count>
      <attachid>184015</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-01-22 11:36:19 -0800</bug_when>
    <thetext>Comment on attachment 184015
Patch

Attachment 184015 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16063135</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813291</commentid>
    <comment_count>13</comment_count>
      <attachid>184015</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-22 11:59:15 -0800</bug_when>
    <thetext>Comment on attachment 184015
Patch

Attachment 184015 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/16036727</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813346</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-01-22 13:20:49 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 182997 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=182997&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/page/ChromeClient.h:181
&gt; &gt;&gt;&gt; +    virtual void scrollFromJavaScript(const IntPoint&amp;) const { }; // Currently only Chromium has non empty implementation.
&gt; &gt;&gt; 
&gt; &gt;&gt; This is a fairly weak abstraction. What does a &quot;scroll from JavaScript&quot; mean? Does this include programmatic navigations to anchors, for example? Or dispatching a synthetic click event on a scroll bar?
&gt; &gt;&gt; 
&gt; &gt;&gt; Also, you are saying that this is a de facto standard behavior. So, it&apos;s presumably already implemented without a Chromium-only hack?
&gt; &gt; 
&gt; &gt; Thanks for reviewing. You are quite correct, there are more sources of programmatic scroll than I originally considered. I think that existing browsers implement this behaviour by means of a platformWidget for the ScrollView, which implements (amongst other things) ScrollView::setScrollPosition. The platformWidget can then differentiate between user and programmatic scroll.
&gt; &gt; 
&gt; &gt; If, as in Chrome&apos;s case, there is no hostWidget, ScrollView::setScrollPosition will eventually call through to HostWindow::scroll, so that is a potential place to hook in. Unfortunately, this won&apos;t happen if the scroll position hasn&apos;t changed.
&gt; 
&gt; It seems that platformWidget scrolling, or delegatesScrolling() is the only existing way to get all scroll events to the embedder. delegatesScrolling() is part of the implementation of TILED_BACKING_STORE, which is not used by Chromium. Also, Chromium doesn&apos;t use platformWidget for scrolling. 
&gt; 
&gt; Existing code paths (apart from the two mentioned above) squash any notifications where the scroll is to the same offset, but any programmatic scroll (even to the same position) should cause the URL bar to hide. 

Please add tests to cover the behavior(s) you care about so we can make sure we have consistent behavior.


&gt; 
&gt; Adding a method to ChromeClient seems to me to be a reasonable way to get these programmatic scroll events out to the embedder, unless there is better way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813591</commentid>
    <comment_count>15</comment_count>
      <attachid>184015</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-22 17:18:25 -0800</bug_when>
    <thetext>Comment on attachment 184015
Patch

Attachment 184015 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16040900</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>813696</commentid>
    <comment_count>16</comment_count>
      <attachid>184015</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-22 19:43:46 -0800</bug_when>
    <thetext>Comment on attachment 184015
Patch

Attachment 184015 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16033983</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815541</commentid>
    <comment_count>17</comment_count>
      <attachid>184513</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-24 09:16:42 -0800</bug_when>
    <thetext>Created attachment 184513
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815544</commentid>
    <comment_count>18</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-24 09:19:15 -0800</bug_when>
    <thetext>Fixed build error. 

I&apos;ve added layout tests at  https://bugs.webkit.org/show_bug.cgi?id=107835
and DumpRenderTree support code at https://bugs.webkit.org/show_bug.cgi?id=107834

Both of the above depend on the Chromium layer at 
  https://bugs.webkit.org/show_bug.cgi?id=107027

Do you prefer to have it all in one big patch? Or should I break it up another way?

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815553</commentid>
    <comment_count>19</comment_count>
      <attachid>184514</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-01-24 09:30:47 -0800</bug_when>
    <thetext>Created attachment 184514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824470</commentid>
    <comment_count>20</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-04 09:47:46 -0800</bug_when>
    <thetext>Any feedback, comments much appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824527</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-04 10:28:21 -0800</bug_when>
    <thetext>I appreciate the improvements you made based on feedback, but I still feel that the concept of &quot;javascript initiated scroll&quot; is fairly weak, and cannot be clearly defined. JavaScript can intercept and affect nearly everything.

A user action to scroll down can be intercepted to do a scroll up, and I don&apos;t know if that would be user initiated of JS initiated.

Conversely, a user may enable continuous scrolling (e.g. in a book reader app), which would be implemented in JS and/or CSS, but conceptually remain a result of direct user action.

In fact, CSS scrolling is an interesting thing to consider in the context of this patch too - I don&apos;t think that the delegate function would be invoked.

This comment is not meant to block this patch, it&apos;s not the weakest abstraction we have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824548</commentid>
    <comment_count>22</comment_count>
      <attachid>184514</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-04 10:47:34 -0800</bug_when>
    <thetext>Comment on attachment 184514
Patch

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

&gt; Source/WebCore/page/ChromeClient.h:181
&gt; +    // Notify the ChromeClient that a programmatic (non user-initiated) scroll has taken place.

Please get rid of this comment. If you think this comment is helpful, then please rename the function to reflect the semantics of this comment first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825535</commentid>
    <comment_count>23</comment_count>
      <attachid>186640</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-05 09:12:18 -0800</bug_when>
    <thetext>Created attachment 186640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825536</commentid>
    <comment_count>24</comment_count>
      <attachid>184514</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-05 09:12:38 -0800</bug_when>
    <thetext>Comment on attachment 184514
Patch

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

&gt;&gt; Source/WebCore/page/ChromeClient.h:181
&gt;&gt; +    // Notify the ChromeClient that a programmatic (non user-initiated) scroll has taken place.
&gt; 
&gt; Please get rid of this comment. If you think this comment is helpful, then please rename the function to reflect the semantics of this comment first.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825541</commentid>
    <comment_count>25</comment_count>
      <attachid>186643</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-05 09:21:17 -0800</bug_when>
    <thetext>Created attachment 186643
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825552</commentid>
    <comment_count>26</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-05 09:31:02 -0800</bug_when>
    <thetext>Thanks, Alexey. I agree with your comments, but I&apos;m not sure what I can do to address them.  

I have changed the title of the bug to &quot;programmatic&quot;, instead of &quot;Javascript-initiated&quot; to try to make it a little bit clearer what we are looking for. 

As you have mentioned, there are programmatic scrolls that can result from user action. In some cases, the embedder should be able to determine that programmatic scroll has happened during a user gesture, and if it so chooses ignore them. It won&apos;t be possible in all cases, however (e.g. the book reader app / infinite style scrolling). 

(In reply to comment #21)
&gt; I appreciate the improvements you made based on feedback, but I still feel that the concept of &quot;javascript initiated scroll&quot; is fairly weak, and cannot be clearly defined. JavaScript can intercept and affect nearly everything.
&gt; 
&gt; A user action to scroll down can be intercepted to do a scroll up, and I don&apos;t know if that would be user initiated of JS initiated.
&gt; 
&gt; Conversely, a user may enable continuous scrolling (e.g. in a book reader app), which would be implemented in JS and/or CSS, but conceptually remain a result of direct user action.
&gt; 
&gt; In fact, CSS scrolling is an interesting thing to consider in the context of this patch too - I don&apos;t think that the delegate function would be invoked.
&gt; 
&gt; This comment is not meant to block this patch, it&apos;s not the weakest abstraction we have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825711</commentid>
    <comment_count>27</comment_count>
      <attachid>186643</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-05 12:35:31 -0800</bug_when>
    <thetext>Comment on attachment 186643
Patch

Attachment 186643 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16372890</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828768</commentid>
    <comment_count>28</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-08 14:30:44 -0800</bug_when>
    <thetext>Programmatic scroll is an existing concept in WebCore, see FrameView::inProgrammaticScroll(). I&apos;m not sure if the goal should be to unify the concepts, or to disambiguate them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831914</commentid>
    <comment_count>29</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-13 08:14:09 -0800</bug_when>
    <thetext>Alexey, our compositor applies user scroll updates in WebViewImpl::applyScrollAndScale, we are calling mainFrameImpl()-&gt;frameView()-&gt;scrollBy(scrollDelta) and/or Page::setPageScaleFactor which calls into FrameView::setScrollPosition. 

But, FrameView::setScrollPosition() is always considered to be a m_inProgrammaticScroll. So in this sense, we have lost the distinction between programmatic and compositor-originated scroll.

However, if we changed the compositor to call another API, we could preserve this m_inProgrammaticScroll flag&apos;s meaning for us. Do you have any suggestions as to what API would be better for us to call than the above? 

The motivation for this change is so that Chromium on Android can hide the URL bar when the user calls window.scrollTo(0,0), so it seems I would still need to get an event out to Chromium on programmatic scrolls so that the URL bar can be hidden when the user calls window.scrollTo(0, 0) or window.scrollTo(0, 1). I&apos;m not sure how I can do this without adding an additional escape hatch in the ChromeClient, calling it from setScrollPosition.

At the moment, I am able to tell whether the scroll is compositor-originated scrolls by setting a flag in when entering WebViewImpl::applyScrollAndScale, and clearing it on exit. Any programmatic scroll events that are fired while the flag is set can be ignored.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832024</commentid>
    <comment_count>30</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-02-13 10:18:01 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; Alexey, our compositor applies user scroll updates in WebViewImpl::applyScrollAndScale, we are calling mainFrameImpl()-&gt;frameView()-&gt;scrollBy(scrollDelta) and/or Page::setPageScaleFactor which calls into FrameView::setScrollPosition. 
&gt; 
&gt; But, FrameView::setScrollPosition() is always considered to be a m_inProgrammaticScroll. So in this sense, we have lost the distinction between programmatic and compositor-originated scroll.
&gt; 

That sounds like a bug - interactions from chromium&apos;s scrolling thread are user interactions and should not be considered programatic scrolls.

&gt; However, if we changed the compositor to call another API, we could preserve this m_inProgrammaticScroll flag&apos;s meaning for us. Do you have any suggestions as to what API would be better for us to call than the above? 

Can you file a new bug on this issue where we can figure it out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832050</commentid>
    <comment_count>31</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-13 10:42:13 -0800</bug_when>
    <thetext>Thanks James, filed https://bugs.webkit.org/show_bug.cgi?id=109712

(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; Alexey, our compositor applies user scroll updates in WebViewImpl::applyScrollAndScale, we are calling mainFrameImpl()-&gt;frameView()-&gt;scrollBy(scrollDelta) and/or Page::setPageScaleFactor which calls into FrameView::setScrollPosition. 
&gt; &gt; 
&gt; &gt; But, FrameView::setScrollPosition() is always considered to be a m_inProgrammaticScroll. So in this sense, we have lost the distinction between programmatic and compositor-originated scroll.
&gt; &gt; 
&gt; 
&gt; That sounds like a bug - interactions from chromium&apos;s scrolling thread are user interactions and should not be considered programatic scrolls.
&gt; 
&gt; &gt; However, if we changed the compositor to call another API, we could preserve this m_inProgrammaticScroll flag&apos;s meaning for us. Do you have any suggestions as to what API would be better for us to call than the above? 
&gt; 
&gt; Can you file a new bug on this issue where we can figure it out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834213</commentid>
    <comment_count>32</comment_count>
      <attachid>188607</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-15 11:30:09 -0800</bug_when>
    <thetext>Created attachment 188607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834228</commentid>
    <comment_count>33</comment_count>
      <attachid>188607</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 11:52:29 -0800</bug_when>
    <thetext>Comment on attachment 188607
Patch

Attachment 188607 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16589211</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834253</commentid>
    <comment_count>34</comment_count>
      <attachid>188607</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-15 12:04:03 -0800</bug_when>
    <thetext>Comment on attachment 188607
Patch

Attachment 188607 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16590205</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834331</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 13:30:44 -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>834402</commentid>
    <comment_count>36</comment_count>
      <attachid>188607</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-15 14:57:38 -0800</bug_when>
    <thetext>Comment on attachment 188607
Patch

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

&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:304
&gt; +    ChromeClientChromium* client = static_cast&lt;ChromeClientChromium*&gt;(
&gt; +        m_page-&gt;chrome()-&gt;client());

This static_cast looks pretty dubious....

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:4209
&gt; +    m_insideCompositor = true;

These sort of state variable tend to cause maintenance  problems.  We have a bunch of them in FrameLoader and they cause a mess.  It&apos;s better for the controlflow to be explicit rather than implicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834445</commentid>
    <comment_count>37</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-02-15 16:04:16 -0800</bug_when>
    <thetext>It&apos;s also not clear that we want to support this at all in chromium.  I don&apos;t think we should worry too much about the implementation until that decision is final.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835515</commentid>
    <comment_count>38</comment_count>
      <attachid>188607</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-18 08:44:20 -0800</bug_when>
    <thetext>Comment on attachment 188607
Patch

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

&gt;&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:304
&gt;&gt; +        m_page-&gt;chrome()-&gt;client());
&gt; 
&gt; This static_cast looks pretty dubious....

I copied this from PopupContainer::chromeClientChromium(). I&apos;m looking for a way to get the event to WebViewImpl, where the decision can be made on whether to request the URL bar to show or hide. 

The reasons why I have it in WebViewImpl:
  - so that we can know if I&apos;m in a compositor scroll or not (m_insideCompositor), but this will go away once https://bugs.webkit.org/show_bug.cgi?id=109712 is solved.
  - so that we can call a method on the WebViewClient to show or hide the URL bar.
  - so that we can know if the URL bar is currently showing or not (might be needed to the decision to show or hide it).

I notice that there are already some methods on ChromeClient itself: setToolbarsVisible, setStatusbarVisible, setScrollbarsVisible, setMenuBarVisible. These are encapsulated in the WebCore::WindowFeatures class. Apparently they are designed to mimic the IE window features (e.g. http://stackoverflow.com/questions/2909645/open-new-popup-window-without-address-bars-in-firefox-ie ) that you can specify for popup windows. I wonder, should we try to integrate with this feature?

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:4209
&gt;&gt; +    m_insideCompositor = true;
&gt; 
&gt; These sort of state variable tend to cause maintenance  problems.  We have a bunch of them in FrameLoader and they cause a mess.  It&apos;s better for the controlflow to be explicit rather than implicit.

I think we can avoid this state variable if we fix https://bugs.webkit.org/show_bug.cgi?id=109712 first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835624</commentid>
    <comment_count>39</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-18 10:53:52 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 188607 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=188607&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:304
&gt; &gt;&gt; +        m_page-&gt;chrome()-&gt;client());
&gt; &gt; 
&gt; &gt; This static_cast looks pretty dubious....
&gt; 
&gt; I copied this from PopupContainer::chromeClientChromium(). I&apos;m looking for a way to get the event to WebViewImpl, where the decision can be made on whether to request the URL bar to show or hide. 
&gt; 
&gt; The reasons why I have it in WebViewImpl:
&gt;   - so that we can know if I&apos;m in a compositor scroll or not (m_insideCompositor), but this will go away once https://bugs.webkit.org/show_bug.cgi?id=109712 is solved.
&gt;   - so that we can call a method on the WebViewClient to show or hide the URL bar.
&gt;   - so that we can know if the URL bar is currently showing or not (might be needed to the decision to show or hide it).
&gt; 
&gt; I notice that there are already some methods on ChromeClient itself: setToolbarsVisible, setStatusbarVisible, setScrollbarsVisible, setMenuBarVisible. These are encapsulated in the WebCore::WindowFeatures class. Apparently they are designed to mimic the IE window features (e.g. http://stackoverflow.com/questions/2909645/open-new-popup-window-without-address-bars-in-firefox-ie ) that you can specify for popup windows. I wonder, should we try to integrate with this feature?

It&apos;s likely you should add a virtual function to ChromeClient.  (&quot;Chrome&quot; in this name has nothing to do with Chrome the browser and instead realizes to the browser&apos;s non-content area.)  You shouldn&apos;t need a static_cast.

&gt; &gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:4209
&gt; &gt;&gt; +    m_insideCompositor = true;
&gt; &gt; 
&gt; &gt; These sort of state variable tend to cause maintenance  problems.  We have a bunch of them in FrameLoader and they cause a mess.  It&apos;s better for the controlflow to be explicit rather than implicit.
&gt; 
&gt; I think we can avoid this state variable if we fix https://bugs.webkit.org/show_bug.cgi?id=109712 first.

Great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838404</commentid>
    <comment_count>40</comment_count>
      <attachid>188607</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-21 07:28:15 -0800</bug_when>
    <thetext>Comment on attachment 188607
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:304
&gt;&gt;&gt;&gt; +        m_page-&gt;chrome()-&gt;client());
&gt;&gt;&gt; 
&gt;&gt;&gt; This static_cast looks pretty dubious....
&gt;&gt; 
&gt;&gt; I copied this from PopupContainer::chromeClientChromium(). I&apos;m looking for a way to get the event to WebViewImpl, where the decision can be made on whether to request the URL bar to show or hide. 
&gt;&gt; 
&gt;&gt; The reasons why I have it in WebViewImpl:
&gt;&gt;   - so that we can know if I&apos;m in a compositor scroll or not (m_insideCompositor), but this will go away once https://bugs.webkit.org/show_bug.cgi?id=109712 is solved.
&gt;&gt;   - so that we can call a method on the WebViewClient to show or hide the URL bar.
&gt;&gt;   - so that we can know if the URL bar is currently showing or not (might be needed to the decision to show or hide it).
&gt;&gt; 
&gt;&gt; I notice that there are already some methods on ChromeClient itself: setToolbarsVisible, setStatusbarVisible, setScrollbarsVisible, setMenuBarVisible. These are encapsulated in the WebCore::WindowFeatures class. Apparently they are designed to mimic the IE window features (e.g. http://stackoverflow.com/questions/2909645/open-new-popup-window-without-address-bars-in-firefox-ie ) that you can specify for popup windows. I wonder, should we try to integrate with this feature?
&gt; 
&gt; It&apos;s likely you should add a virtual function to ChromeClient.  (&quot;Chrome&quot; in this name has nothing to do with Chrome the browser and instead realizes to the browser&apos;s non-content area.)  You shouldn&apos;t need a static_cast.

Sounds good to me. I think that integrating with the WindowFeatures / setToolbarsVisible etc methods at this time is not a good idea, as this will likely impact window.open and window.showModalDialog APIs, which is not the intention of this work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841014</commentid>
    <comment_count>41</comment_count>
      <attachid>190072</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-25 09:13:02 -0800</bug_when>
    <thetext>Created attachment 190072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841022</commentid>
    <comment_count>42</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-25 09:18:03 -0800</bug_when>
    <thetext>This patch changes approach to intercepting only window.scrollTo API, as this is what developers are actually using to hide the URL bar. 

Regarding testing, does it sound like a reasonable approach to add a counter to DumpRenderTree to the count the number of calls to WebViewClient:: hideTopControls()? I can then write a layout test that verifies that the counter is incremented or not in the various situations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841023</commentid>
    <comment_count>43</comment_count>
      <attachid>190072</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-25 09:21:40 -0800</bug_when>
    <thetext>Comment on attachment 190072
Patch

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

&gt; Source/WebCore/page/DOMWindow.cpp:1441
&gt; +    if (!x &amp;&amp; (!y || y == 1)) {

So scrollTo(0,2) won&apos;t hide? I thought scrollTo was supposed to act as though the user had scrolled?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841024</commentid>
    <comment_count>44</comment_count>
      <attachid>190072</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-25 09:24:16 -0800</bug_when>
    <thetext>Comment on attachment 190072
Patch

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

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:4240
&gt; +    // FIXME: Also receive the value of m_topControlsHeight.

Since m_topControlsHeight doesn&apos;t change very often (at all?) I think having it be passed in in applyScrollAndScale may not be best. Does it make sense to make a separate public method to receive this value?

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:4454
&gt; +    // The idea is to get the top of the screen showing the given scroll offset,

Sorry, this comment has some bits taken from previous patch. There is no &quot;given scroll offset&quot;, as we just want to hide the URL bar. However, we shouldn&apos;t hide the URL bar if it&apos;s not possible for the user scroll to scroll by the height of the URL bar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841033</commentid>
    <comment_count>45</comment_count>
      <attachid>190072</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-25 09:34:59 -0800</bug_when>
    <thetext>Comment on attachment 190072
Patch

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

&gt;&gt; Source/WebCore/page/DOMWindow.cpp:1441
&gt;&gt; +    if (!x &amp;&amp; (!y || y == 1)) {
&gt; 
&gt; So scrollTo(0,2) won&apos;t hide? I thought scrollTo was supposed to act as though the user had scrolled?

In this patch, the idea is that the API is window.scrollTo(0,0) and window.scrollTo(0,1) hides the URL bar. This is why window.scrollTo(0,2) doesn&apos;t hide it, because that&apos;s not the API. We know that developers are using window.scrollTo(0,0) and window.scrollTo(0,1). I&apos;ve not seen any uses of window.scrollTo(0,2) to deliberately hide the URL bar. 

It&apos;s possible to make window.scrollTo(X,Y) hide the URL bar, as if a user had scrolled for any X,Y. The question must then be asked, should window.scrollBy, element.scrollIntoView, document.body.scrollTop = etc, also hide the URL bar? It seems to me that all the above, and more, should behave as if the user had scrolled it. Viewed like this, then there is no API, as such, to hide the URL bar, rather we are just making the WebKit scrolls behave in the same way as user scrolls. I&apos;d be happy to try to implement this if it is felt that this is better and more consistent than the API approach in the first paragraph.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841036</commentid>
    <comment_count>46</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-25 09:37:31 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; (From update of attachment 190072 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190072&amp;action=review
&gt;
&gt; It&apos;s possible to make window.scrollTo(X,Y) hide the URL bar, as if a user had scrolled for any X,Y. The question must then be asked, should window.scrollBy, element.scrollIntoView, document.body.scrollTop = etc, also hide the URL bar? It seems to me that all the above, and more, should behave as if the user had scrolled it. Viewed like this, then there is no API, as such, to hide the URL bar, rather we are just making the WebKit scrolls behave in the same way as user scrolls. I&apos;d be happy to try to implement this if it is felt that this is better and more consistent than the API approach in the first paragraph.

I suspect we&apos;ll end up matching whatever behavior other mobile browsers have.  I haven&apos;t done enough research to know what that is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841037</commentid>
    <comment_count>47</comment_count>
      <attachid>190072</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-25 09:40:20 -0800</bug_when>
    <thetext>Comment on attachment 190072
Patch

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

&gt;&gt;&gt; Source/WebCore/page/DOMWindow.cpp:1441
&gt;&gt;&gt; +    if (!x &amp;&amp; (!y || y == 1)) {
&gt;&gt; 
&gt;&gt; So scrollTo(0,2) won&apos;t hide? I thought scrollTo was supposed to act as though the user had scrolled?
&gt; 
&gt; In this patch, the idea is that the API is window.scrollTo(0,0) and window.scrollTo(0,1) hides the URL bar. This is why window.scrollTo(0,2) doesn&apos;t hide it, because that&apos;s not the API. We know that developers are using window.scrollTo(0,0) and window.scrollTo(0,1). I&apos;ve not seen any uses of window.scrollTo(0,2) to deliberately hide the URL bar. 
&gt; 
&gt; It&apos;s possible to make window.scrollTo(X,Y) hide the URL bar, as if a user had scrolled for any X,Y. The question must then be asked, should window.scrollBy, element.scrollIntoView, document.body.scrollTop = etc, also hide the URL bar? It seems to me that all the above, and more, should behave as if the user had scrolled it. Viewed like this, then there is no API, as such, to hide the URL bar, rather we are just making the WebKit scrolls behave in the same way as user scrolls. I&apos;d be happy to try to implement this if it is felt that this is better and more consistent than the API approach in the first paragraph.

If we chose to implement the behavior where these APIs tried to act like a user scroll, than presumably this would be done at a different level.  Since Mobile Safari doesn&apos;t add this line of code here (as far as I know), presumably they also do the hook at a different level.  That&apos;s not to suggest that this choice in behavior is incorrect however.  The way you&apos;ve added it here it seems more like adding a deprecated quirk to support a website.  If we believe this is an important feature for the mobile web (hiding the URL bar on JS-based scroll) then it seems we should do it in a less hacky way for the long-term.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841039</commentid>
    <comment_count>48</comment_count>
      <attachid>190072</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-25 09:41:19 -0800</bug_when>
    <thetext>Comment on attachment 190072
Patch

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

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:4456
&gt; +    // if possible. This isn&apos;t possible if the document isn&apos;t big enough. We assume
&gt; +    // that the location bar is showing for this check, since hiding it is idempotent.

I assume this matches mobile Safari?  (Assuming that&apos;s the goal?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841041</commentid>
    <comment_count>49</comment_count>
      <attachid>190072</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-25 09:47:12 -0800</bug_when>
    <thetext>Comment on attachment 190072
Patch

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

&gt;&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:4456
&gt;&gt; +    // that the location bar is showing for this check, since hiding it is idempotent.
&gt; 
&gt; I assume this matches mobile Safari?  (Assuming that&apos;s the goal?)

Yes, this matches Mobile Safari and Android Browser. 

If we have a short document, e.g. http://jsbin.com/ohitug/2 , that cannot be scrolled by the user to hide the URL bar, window.scrollTo shouldn&apos;t be able to hide it either. 

If, on the otherhand, window.scrollTo can hide the URL bar, the user ought to be able (if nothing is expressly trying to block him/her) to do scroll back up to reveal the URL bar again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841062</commentid>
    <comment_count>50</comment_count>
      <attachid>190072</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2013-02-25 10:06:53 -0800</bug_when>
    <thetext>Comment on attachment 190072
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/page/DOMWindow.cpp:1441
&gt;&gt;&gt;&gt; +    if (!x &amp;&amp; (!y || y == 1)) {
&gt;&gt;&gt; 
&gt;&gt;&gt; So scrollTo(0,2) won&apos;t hide? I thought scrollTo was supposed to act as though the user had scrolled?
&gt;&gt; 
&gt;&gt; In this patch, the idea is that the API is window.scrollTo(0,0) and window.scrollTo(0,1) hides the URL bar. This is why window.scrollTo(0,2) doesn&apos;t hide it, because that&apos;s not the API. We know that developers are using window.scrollTo(0,0) and window.scrollTo(0,1). I&apos;ve not seen any uses of window.scrollTo(0,2) to deliberately hide the URL bar. 
&gt;&gt; 
&gt;&gt; It&apos;s possible to make window.scrollTo(X,Y) hide the URL bar, as if a user had scrolled for any X,Y. The question must then be asked, should window.scrollBy, element.scrollIntoView, document.body.scrollTop = etc, also hide the URL bar? It seems to me that all the above, and more, should behave as if the user had scrolled it. Viewed like this, then there is no API, as such, to hide the URL bar, rather we are just making the WebKit scrolls behave in the same way as user scrolls. I&apos;d be happy to try to implement this if it is felt that this is better and more consistent than the API approach in the first paragraph.
&gt; 
&gt; If we chose to implement the behavior where these APIs tried to act like a user scroll, than presumably this would be done at a different level.  Since Mobile Safari doesn&apos;t add this line of code here (as far as I know), presumably they also do the hook at a different level.  That&apos;s not to suggest that this choice in behavior is incorrect however.  The way you&apos;ve added it here it seems more like adding a deprecated quirk to support a website.  If we believe this is an important feature for the mobile web (hiding the URL bar on JS-based scroll) then it seems we should do it in a less hacky way for the long-term.

Android Browser, and I believe Mobile Safari, hook in using the platformWidget abstraction. This is called by ScrollView::setScrollPosition. Android Browser, at least, requires some further changes to DOMWindow::scrollY so that negative scroll offsets are not exposed back to Javascript like http://gitorious.org/webkit-clutter/webkit-clutter/commit/f87a88934bd32fb1f6a0befbda004cfcc9d79aa2?format=diff (sorry I can&apos;t find a better public reference), which never made it to upstream WebKit.

I agree that window.scrollTo(0,0) and window.scrollTo(0,1) sounds like a deprecated quirk, but many mobile websites are using exactly this method to hide the URL bar.

In previous patches, I have been trying to align the scroll behaviours more generally by hooking in at FrameView::setScrollPosition. From your comments, it&apos;s sounds like something like this, or similar approach, might be better received.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841098</commentid>
    <comment_count>51</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-25 10:36:51 -0800</bug_when>
    <thetext>(In reply to comment #50)
&gt; (From update of attachment 190072 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190072&amp;action=review
&gt;
&gt; I agree that window.scrollTo(0,0) and window.scrollTo(0,1) sounds like a deprecated quirk, but many mobile websites are using exactly this method to hide the URL bar.

I guess that part is unclear to me.  What are they replaced by?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841099</commentid>
    <comment_count>52</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-25 10:40:24 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; (From update of attachment 190072 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190072&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/page/DOMWindow.cpp:1441
&gt; &gt;&gt; +    if (!x &amp;&amp; (!y || y == 1)) {
&gt; &gt; 
&gt; &gt; So scrollTo(0,2) won&apos;t hide? I thought scrollTo was supposed to act as though the user had scrolled?
&gt; 
&gt; In this patch, the idea is that the API is window.scrollTo(0,0) and window.scrollTo(0,1) hides the URL bar. This is why window.scrollTo(0,2) doesn&apos;t hide it, because that&apos;s not the API. We know that developers are using window.scrollTo(0,0) and window.scrollTo(0,1). I&apos;ve not seen any uses of window.scrollTo(0,2) to deliberately hide the URL bar. 
&gt; 
&gt; It&apos;s possible to make window.scrollTo(X,Y) hide the URL bar, as if a user had scrolled for any X,Y. The question must then be asked, should window.scrollBy, element.scrollIntoView, document.body.scrollTop = etc, also hide the URL bar? It seems to me that all the above, and more, should behave as if the user had scrolled it. Viewed like this, then there is no API, as such, to hide the URL bar, rather we are just making the WebKit scrolls behave in the same way as user scrolls. I&apos;d be happy to try to implement this if it is felt that this is better and more consistent than the API approach in the first paragraph.

I wouldn&apos;t call scrollTo(0, 1) an &quot;API&quot;. Arguably it&apos;s just an iOS bug that you&apos;re copying. I really don&apos;t want the WebCore codebase hard-coding this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841103</commentid>
    <comment_count>53</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-02-25 10:47:54 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; (In reply to comment #45)
&gt; &gt; (From update of attachment 190072 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190072&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/page/DOMWindow.cpp:1441
&gt; &gt; &gt;&gt; +    if (!x &amp;&amp; (!y || y == 1)) {
&gt; &gt; &gt; 
&gt; &gt; &gt; So scrollTo(0,2) won&apos;t hide? I thought scrollTo was supposed to act as though the user had scrolled?
&gt; &gt; 
&gt; &gt; In this patch, the idea is that the API is window.scrollTo(0,0) and window.scrollTo(0,1) hides the URL bar. This is why window.scrollTo(0,2) doesn&apos;t hide it, because that&apos;s not the API. We know that developers are using window.scrollTo(0,0) and window.scrollTo(0,1). I&apos;ve not seen any uses of window.scrollTo(0,2) to deliberately hide the URL bar. 
&gt; &gt; 
&gt; &gt; It&apos;s possible to make window.scrollTo(X,Y) hide the URL bar, as if a user had scrolled for any X,Y. The question must then be asked, should window.scrollBy, element.scrollIntoView, document.body.scrollTop = etc, also hide the URL bar? It seems to me that all the above, and more, should behave as if the user had scrolled it. Viewed like this, then there is no API, as such, to hide the URL bar, rather we are just making the WebKit scrolls behave in the same way as user scrolls. I&apos;d be happy to try to implement this if it is felt that this is better and more consistent than the API approach in the first paragraph.
&gt; 
&gt; I wouldn&apos;t call scrollTo(0, 1) an &quot;API&quot;. Arguably it&apos;s just an iOS bug that you&apos;re copying. I really don&apos;t want the WebCore codebase hard-coding this bug.

I tend to agree, but it&apos;s been copied by the Android browser (and possibly others) and is being used by many popular web sites.  We need to either hardcode this specific call or come up with some more general model.  It appears that doing something is necessary for compatibility with the mobile web.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841161</commentid>
    <comment_count>54</comment_count>
      <attachid>190072</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-02-25 11:48:18 -0800</bug_when>
    <thetext>Comment on attachment 190072
Patch

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

&gt; Source/WebCore/page/Chrome.h:129
&gt; +    void hideLocationBar() const;

I don&apos;t think a function like this belongs in Chrome. It makes assumptions about app behavior. If you want to add some &quot;did scroll to&quot; callback that&apos;s OK, but don&apos;t make it about the location bar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883860</commentid>
    <comment_count>55</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-02 11:40:11 -0700</bug_when>
    <thetext>Given that this was a Chromium feature, I think we can close this bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182997</attachid>
            <date>2013-01-16 09:58:16 -0800</date>
            <delta_ts>2013-01-22 11:01:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107026-20130116175517.patch</filename>
            <type>text/plain</type>
            <size>7567</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5ODgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDU5YTU0MjQ1MDBhN2Rm
OGQ5OTgyNGM0NjE5NGYzOWEzYjVjZjk2OS4uMjVmNWMxNjM0MjUzOTcxNTJmZTlmODJlNzgxZTQ1
ZmMwZDI0YTE1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEzLTAxLTE2ICBKb2hu
IEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFsbG93IEph
dmFzY3JpcHQtaW5pdGlhdGVkIHNjcm9sbHMgdG8gYmUgZGV0ZWN0ZWQuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDcwMjYKKworICAgICAgICBPbiBt
b2JpbGUsIGl0IGlzIGEgZGUgZmFjdG8gQVBJIHRvIGhpZGUgdGhlIFVSTCBiYXIgb24KKyAgICAg
ICAgSmF2YXNjcmlwdCBzY3JvbGxzLiBUaGlzIGNoYW5nZSBhbGxvd3MgZm9yIHRoaXMgZmVhdHVy
ZQorICAgICAgICB0byAgYmUgaW1wbGVtZW50ZWQgYnkgZXhwb3NpbmcgdGhlIEphdmFzY3JpcHQg
c2Nyb2xsCisgICAgICAgIGV2ZW50cyBvbiB0aGUgQ2hyb21lQ2xpZW50LgorCisgICAgICAgICog
aHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVt
ZW50OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6
c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpzY3JvbGxGcm9tSmF2YVNjcmlwdCk6CisgICAgICAgIChD
aHJvbWVDbGllbnQpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVdpbmRvdzo6c2Nyb2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93
OjpzY3JvbGxUbyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbkZyb21KYXZhU2NyaXB0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgIChGcmFt
ZVZpZXcpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb25Gcm9tSmF2YVNjcmlwdCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAg
IChTY3JvbGxWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbEJ5RnJv
bUphdmFTY3JpcHQpOgorCiAyMDEzLTAxLTE2ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFq
a293c2tpQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgRUZMIGJ1aWxkIGZpeCBh
ZnRlciByMTM5ODc3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCmluZGV4
IGRkNDQ1MTRhZjg4NTIxNDE4OGIxZWU4ODRiZGQ0YTg5M2ZjNjc2ZjkuLjkxYWEwZDMyMTVhMDNm
YmQ3MmMwOGY1ZDRhODQwMTBjYzI3NDNlNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEJvZHlFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5
RWxlbWVudC5jcHAKQEAgLTI3Nyw3ICsyNzcsNyBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0
U2Nyb2xsTGVmdChpbnQgc2Nyb2xsTGVmdCkKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+
dmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwotICAgIHZpZXctPnNldFNj
cm9sbFBvc2l0aW9uKEludFBvaW50KHN0YXRpY19jYXN0PGludD4oc2Nyb2xsTGVmdCAqIGZyYW1l
LT5wYWdlWm9vbUZhY3RvcigpICogZnJhbWUtPmZyYW1lU2NhbGVGYWN0b3IoKSksIHZpZXctPnNj
cm9sbFkoKSkpOworICAgIHZpZXctPnNldFNjcm9sbFBvc2l0aW9uRnJvbUphdmFTY3JpcHQoSW50
UG9pbnQoc3RhdGljX2Nhc3Q8aW50PihzY3JvbGxMZWZ0ICogZnJhbWUtPnBhZ2Vab29tRmFjdG9y
KCkgKiBmcmFtZS0+ZnJhbWVTY2FsZUZhY3RvcigpKSwgdmlldy0+c2Nyb2xsWSgpKSk7CiB9CiAK
IGludCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbFRvcCgpCkBAIC0yOTksNyArMjk5LDcgQEAgdm9p
ZCBIVE1MQm9keUVsZW1lbnQ6OnNldFNjcm9sbFRvcChpbnQgc2Nyb2xsVG9wKQogICAgIEZyYW1l
VmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1
cm47Ci0gICAgdmlldy0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQodmlldy0+c2Nyb2xsWCgp
LCBzdGF0aWNfY2FzdDxpbnQ+KHNjcm9sbFRvcCAqIGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpICog
ZnJhbWUtPmZyYW1lU2NhbGVGYWN0b3IoKSkpKTsKKyAgICB2aWV3LT5zZXRTY3JvbGxQb3NpdGlv
bkZyb21KYXZhU2NyaXB0KEludFBvaW50KHZpZXctPnNjcm9sbFgoKSwgc3RhdGljX2Nhc3Q8aW50
PihzY3JvbGxUb3AgKiBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKSAqIGZyYW1lLT5mcmFtZVNjYWxl
RmFjdG9yKCkpKSk7CiB9CiAKIGludCBIVE1MQm9keUVsZW1lbnQ6OnNjcm9sbEhlaWdodCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA4MzlhZTlmZjgyYTYzMzdlZTBlZjkyNzVk
NmYyMmNmMDM0YjMxOTJlLi40NTE4MTg3OGExMDI1NmJjNTQ2NGMxZmRmYmUyYWNjYjA3ZGY4NGY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTE3OCw2ICsxNzgsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dFVwZGF0ZWQoRnJhbWUqKSBjb25zdCB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdCB7
IH07IC8vIEN1cnJlbnRseSBvbmx5IE1hYyBoYXMgYSBub24gZW1wdHkgaW1wbGVtZW50YXRpb24u
CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsRnJvbUphdmFTY3JpcHQoY29uc3QgSW50UG9pbnQm
KSBjb25zdCB7IH07IC8vIEN1cnJlbnRseSBvbmx5IENocm9taXVtIGhhcyBub24gZW1wdHkgaW1w
bGVtZW50YXRpb24uCisKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVW5hdmFpbGFibGVQbHVnaW5N
ZXNzYWdlQmVCdXR0b24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5
UmVhc29uKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCB1bmF2YWls
YWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoRWxlbWVudCosIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQ
bHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lkIG1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2Rp
ZmllckZsYWdzKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggMmY1MWE4MTc1
MGNhNWNkOGY1YmQ1ZDI0ZGVjZGUwODQ1ZTBhZmM2YS4uNjlkNjk3NDAyMWY4NzAxZjc1ZmYxMmNl
MDIyZjExZjAxMjJkMzY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtMTQxNyw3
ICsxNDE3LDcgQEAgdm9pZCBET01XaW5kb3c6OnNjcm9sbEJ5KGludCB4LCBpbnQgeSkgY29uc3QK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50U2l6ZSBzY2FsZWRPZmZzZXQodmlldy0+bWFwRnJv
bUNTU1RvTGF5b3V0VW5pdHMoeCksIHZpZXctPm1hcEZyb21DU1NUb0xheW91dFVuaXRzKHkpKTsK
LSAgICB2aWV3LT5zY3JvbGxCeShzY2FsZWRPZmZzZXQpOworICAgIHZpZXctPnNjcm9sbEJ5RnJv
bUphdmFTY3JpcHQoc2NhbGVkT2Zmc2V0KTsKIH0KIAogdm9pZCBET01XaW5kb3c6OnNjcm9sbFRv
KGludCB4LCBpbnQgeSkgY29uc3QKQEAgLTE0MzIsNyArMTQzMiw3IEBAIHZvaWQgRE9NV2luZG93
OjpzY3JvbGxUbyhpbnQgeCwgaW50IHkpIGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIElu
dFBvaW50IGxheW91dFBvcyh2aWV3LT5tYXBGcm9tQ1NTVG9MYXlvdXRVbml0cyh4KSwgdmlldy0+
bWFwRnJvbUNTU1RvTGF5b3V0VW5pdHMoeSkpOwotICAgIHZpZXctPnNldFNjcm9sbFBvc2l0aW9u
KGxheW91dFBvcyk7CisgICAgdmlldy0+c2V0U2Nyb2xsUG9zaXRpb25Gcm9tSmF2YVNjcmlwdChs
YXlvdXRQb3MpOwogfQogCiB2b2lkIERPTVdpbmRvdzo6bW92ZUJ5KGZsb2F0IHgsIGZsb2F0IHkp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYzIwYjAzODcwMzdmODM4NGQ3
OGM2Y2MwNGJjZjMyMzljY2MyYThlYy4uYWNmZTNmNTE1MzMyNzQzMjJhMGJjMjI3NTBmMGFmYmFh
OGI1NmU4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMTc1OSw2ICsxNzU5LDE1
IEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxFbGVtZW50VG9SZWN0KEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgc2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoYm91
bmRzLngoKSAtIGNlbnRlcmluZ09mZnNldFggLSByZWN0LngoKSwgYm91bmRzLnkoKSAtIGNlbnRl
cmluZ09mZnNldFkgLSByZWN0LnkoKSkpOwogfQogCit2b2lkIEZyYW1lVmlldzo6c2V0U2Nyb2xs
UG9zaXRpb25Gcm9tSmF2YVNjcmlwdChjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9pbnQpCit7Cisg
ICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9pbnQpOworCisgICAgUGFnZSogcGFnZSA9IG1f
ZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiBtX2ZyYW1lID09IHBhZ2UtPm1haW5GcmFt
ZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnNjcm9sbEZyb21KYXZhU2Ny
aXB0KHNjcm9sbFBvaW50KTsKK30KKwogdm9pZCBGcmFtZVZpZXc6OnNldFNjcm9sbFBvc2l0aW9u
KGNvbnN0IEludFBvaW50JiBzY3JvbGxQb2ludCkKIHsKICAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9v
bD4gY2hhbmdlSW5Qcm9ncmFtbWF0aWNTY3JvbGwobV9pblByb2dyYW1tYXRpY1Njcm9sbCwgdHJ1
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAppbmRleCBhOThlODhmMWI1MDRiNjBhZjdmMzkwZWJh
MjcxMGFlOWEwYWM2YTVkLi44OTJjM2M4ZjRjYzEwMjRlOTRlN2Y4NmI4OTllNDg1ZTU3YWQ1Zjk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKQEAgLTE4NCw2ICsxODQsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkZyb21KYXZhU2NyaXB0KGNv
bnN0IEludFBvaW50JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0
aW9uKGNvbnN0IEludFBvaW50JikgT1ZFUlJJREU7CiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNo
YW5nZWRWaWFQbGF0Zm9ybVdpZGdldCgpOwogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Rml4ZWRF
bGVtZW50c0FmdGVyU2Nyb2xsaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwCmluZGV4IDgyYTBkYWI0YjM3OGFlZjhmOWRmNzhjMGExNTYwZjRmODc0ODc3YTkuLjhlNGEx
NTljOTgyN2QwZDI5Y2Q0Yjc4MzU3MmVmYjVlMmVkMjA1MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwCkBAIC0zOTQsNiArMzk0LDExIEBAIGludCBTY3JvbGxWaWV3Ojpz
Y3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKICAgICByZXR1cm4gMDsK
IH0KIAordm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbkZyb21KYXZhU2NyaXB0KGNv
bnN0IEludFBvaW50JiBzY3JvbGxQb2ludCkKK3sKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3Jv
bGxQb2ludCk7Cit9CisKIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3Qg
SW50UG9pbnQmIHNjcm9sbFBvaW50KQogewogICAgIGlmIChwcm9oaWJpdHNTY3JvbGxpbmcoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAppbmRleCBlMDQzZjZlOWY3NDgzZGM0MWM0
ODViYzFkNWYxYTA1NDA4NjRjNzQ2Li4xZDU0N2Q0ZjJlMWRkMWU3NmJkMjUzOGE5MjYxMTc4Mjg4
ZDViNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCkBAIC0xODUsNyArMTg1
LDkgQEAgcHVibGljOgogCiAgICAgLy8gRnVuY3Rpb25zIGZvciBzY3JvbGxpbmcgdGhlIHZpZXcu
CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uRnJvbUphdmFTY3JpcHQoY29uc3QgSW50
UG9pbnQmKTsKICAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmIHMpIHsgcmV0dXJuIHNl
dFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkgKyBzKTsgfQorICAgIHZvaWQgc2Nyb2xs
QnlGcm9tSmF2YVNjcmlwdChjb25zdCBJbnRTaXplJiBzKSB7IHJldHVybiBzZXRTY3JvbGxQb3Np
dGlvbkZyb21KYXZhU2NyaXB0KHNjcm9sbFBvc2l0aW9uKCkgKyBzKTsgfQogCiAgICAgLy8gVGhp
cyBmdW5jdGlvbiBzY3JvbGxzIGJ5IGxpbmVzLCBwYWdlcyBvciBwaXhlbHMuCiAgICAgYm9vbCBz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184015</attachid>
            <date>2013-01-22 10:46:38 -0800</date>
            <delta_ts>2013-01-24 09:16:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107026-20130122184331.patch</filename>
            <type>text/plain</type>
            <size>2618</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMTE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmNhZTc4MzI4NWUyZTI2
ZjdjMTMxZDc0YmI2OTA2MDg1YTY1MzE5YS4uYTE5ZDBhOGZkNjJlZGM1ZjEyNGQxZjQyNmRkMTIw
ZjI1ZWQxNzQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEzLTAxLTIyICBKb2hu
IEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFsbG93IHBy
b2dyYW1tYXRpYyBzY3JvbGxzIHRvIGJlIGRldGVjdGVkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDI2CisKKyAgICAgICAgT24gbW9iaWxlLCBp
dCBpcyBhIGRlIGZhY3RvIEFQSSB0byBoaWRlIHRoZSBVUkwgYmFyIG9uCisgICAgICAgIEphdmFz
Y3JpcHQgc2Nyb2xscy4gVGhpcyBjaGFuZ2UgYWxsb3dzIGZvciB0aGlzIGZlYXR1cmUKKyAgICAg
ICAgdG8gIGJlIGltcGxlbWVudGVkIGJ5IGV4cG9zaW5nIHRoZSBwcm9ncmFtbWF0aWMgc2Nyb2xs
CisgICAgICAgIGV2ZW50cyBvbiB0aGUgQ2hyb21lQ2xpZW50LgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAg
ICAgICAgKENocm9tZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmRp
ZFByb2dyYW1tYXRpY2FsbHlTY3JvbGwpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24pOgorCiAyMDEz
LTAxLTE4ICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KIAogICAgICAgICBJ
bXBsZW1lbnQgQ1NTSG9zdFJ1bGUgZm9yIEBob3N0IEAtcnVsZXMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaAppbmRleCA4MzlhZTlmZjgyYTYzMzdlZTBlZjkyNzVkNmYyMmNmMDM0YjMxOTJl
Li4yMjRlZTg1ZDhiNTc3Zjk2YjI2MDQxNGY5NWZhYzJjMGFkY2E3YWEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lQ2xpZW50LmgKQEAgLTE3OCw2ICsxNzgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGxheW91dFVwZGF0ZWQoRnJhbWUqKSBjb25zdCB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdCB7IH07IC8vIEN1cnJlbnRs
eSBvbmx5IE1hYyBoYXMgYSBub24gZW1wdHkgaW1wbGVtZW50YXRpb24uCiAKKyAgICAvLyBOb3Rp
ZnkgdGhlIENocm9tZUNsaWVudCB0aGF0IGEgcHJvZ3JhbW1hdGljIChub24gdXNlci1pbml0aWF0
ZWQpIHNjcm9sbCBoYXMgdGFrZW4gcGxhY2UuCisgICAgdmlydHVhbCB2b2lkIGRpZFByb2dyYW1t
YXRpY2FsbHlTY3JvbGwoY29uc3QgSW50UG9pbnQmKSBjb25zdCB7IH0KKwogICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihSZW5kZXJFbWJlZGRl
ZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCB2b2lkIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChFbGVt
ZW50KiwgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSBj
b25zdCB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3Qg
SGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAppbmRleCBjMjBiMDM4NzAzN2Y4Mzg0ZDc4YzZjYzA0YmNmMzIzOWNjYzJh
OGVjLi40M2Q4ZWUyY2NiYjY2MzI4Nzg2NTc1MTgxYzE2ZTU2MDZiNDU3NDdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xNzY4LDYgKzE3NjgsMTAgQEAgdm9pZCBGcmFtZVZpZXc6
OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb2ludCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9pbnQp
OworCisgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkgPyBmcmFtZSgpLT5wYWdlKCkgOiAwOworICAg
IGlmIChwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpID09IHRoaXMpCisgICAgICAgIHBhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKS0+ZGlkUHJvZ3JhbW1hdGljYWxseVNjcm9sbChzY3JvbGxQb2ludCk7
CiB9CiAKIHZvaWQgRnJhbWVWaWV3OjpkZWxlZ2F0ZXNTY3JvbGxpbmdEaWRDaGFuZ2UoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184513</attachid>
            <date>2013-01-24 09:16:42 -0800</date>
            <delta_ts>2013-01-24 09:30:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107026-20130124171334.patch</filename>
            <type>text/plain</type>
            <size>2615</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVhZWY2Mzg2MzlkYTc5
NzliY2EwZjcxY2Q5NGZkMWJmMTgzMDA1MS4uODdhNzQwZDNjMTNiNzdiNjcxNWI5YzViMjgxYzZi
YWVlYzExMmMxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEzLTAxLTIyICBKb2hu
IEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFsbG93IHBy
b2dyYW1tYXRpYyBzY3JvbGxzIHRvIGJlIGRldGVjdGVkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDI2CisKKyAgICAgICAgT24gbW9iaWxlLCBp
dCBpcyBhIGRlIGZhY3RvIEFQSSB0byBoaWRlIHRoZSBVUkwgYmFyIG9uCisgICAgICAgIEphdmFz
Y3JpcHQgc2Nyb2xscy4gVGhpcyBjaGFuZ2UgYWxsb3dzIGZvciB0aGlzIGZlYXR1cmUKKyAgICAg
ICAgdG8gIGJlIGltcGxlbWVudGVkIGJ5IGV4cG9zaW5nIHRoZSBwcm9ncmFtbWF0aWMgc2Nyb2xs
CisgICAgICAgIGV2ZW50cyBvbiB0aGUgQ2hyb21lQ2xpZW50LgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAg
ICAgICAgKENocm9tZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmRp
ZFByb2dyYW1tYXRpY2FsbHlTY3JvbGwpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24pOgorCiAyMDEz
LTAxLTIyICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIENv
bXBhY3RIVE1MVG9rZW4gYSBsaXR0bGUgbW9yZSBjb21wYWN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAppbmRleCAzMmQyZjhmNzk1ZjViNDkyZTVlMWQzOTNkNTkzYzUzYmJiMTFkZjAzLi4y
NDg5ZDMzMzMwMGMxYzJlMjk4MjY1ZWFjZmIyOTA0M2QwMGJmYjBjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lQ2xpZW50LmgKQEAgLTE3OCw2ICsxNzgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGxheW91dFVwZGF0ZWQoRnJhbWUqKSBjb25zdCB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdCB7IH07IC8vIEN1cnJlbnRseSBv
bmx5IE1hYyBoYXMgYSBub24gZW1wdHkgaW1wbGVtZW50YXRpb24uCiAKKyAgICAvLyBOb3RpZnkg
dGhlIENocm9tZUNsaWVudCB0aGF0IGEgcHJvZ3JhbW1hdGljIChub24gdXNlci1pbml0aWF0ZWQp
IHNjcm9sbCBoYXMgdGFrZW4gcGxhY2UuCisgICAgdmlydHVhbCB2b2lkIGRpZFByb2dyYW1tYXRp
Y2FsbHlTY3JvbGwoY29uc3QgSW50UG9pbnQmKSBjb25zdCB7IH0KKwogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihSZW5kZXJFbWJlZGRlZE9i
amVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCB2b2lkIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChFbGVtZW50
KiwgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSBjb25z
dCB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0
VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAppbmRleCAwMTg5ZmYxMTUxMTI4YjEwZjZmNWEzOTc3ZDhkZTA3MGRjMGNjYmU3
Li5mOWU5YmMyNDY0YTgyZDU1ZDIxNTlhOThiMGQ4YWQzOWIwMzBkYjRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCkBAIC0xNzc1LDYgKzE3NzUsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnNl
dFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb2ludCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9pbnQpOwor
CisgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkgPyBmcmFtZSgpLT5wYWdlKCkgOiAwOworICAgIGlm
IChwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpID09IHRoaXMpCisgICAgICAgIHBhZ2UtPmNocm9t
ZSgpLT5jbGllbnQoKS0+ZGlkUHJvZ3JhbW1hdGljYWxseVNjcm9sbChzY3JvbGxQb2ludCk7CiB9
CiAKIHZvaWQgRnJhbWVWaWV3OjpkZWxlZ2F0ZXNTY3JvbGxpbmdEaWRDaGFuZ2UoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184514</attachid>
            <date>2013-01-24 09:30:47 -0800</date>
            <delta_ts>2013-02-05 09:12:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107026-20130124172739.patch</filename>
            <type>text/plain</type>
            <size>2618</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVhZWY2Mzg2MzlkYTc5
NzliY2EwZjcxY2Q5NGZkMWJmMTgzMDA1MS4uODdhNzQwZDNjMTNiNzdiNjcxNWI5YzViMjgxYzZi
YWVlYzExMmMxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEzLTAxLTIyICBKb2hu
IEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFsbG93IHBy
b2dyYW1tYXRpYyBzY3JvbGxzIHRvIGJlIGRldGVjdGVkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDI2CisKKyAgICAgICAgT24gbW9iaWxlLCBp
dCBpcyBhIGRlIGZhY3RvIEFQSSB0byBoaWRlIHRoZSBVUkwgYmFyIG9uCisgICAgICAgIEphdmFz
Y3JpcHQgc2Nyb2xscy4gVGhpcyBjaGFuZ2UgYWxsb3dzIGZvciB0aGlzIGZlYXR1cmUKKyAgICAg
ICAgdG8gIGJlIGltcGxlbWVudGVkIGJ5IGV4cG9zaW5nIHRoZSBwcm9ncmFtbWF0aWMgc2Nyb2xs
CisgICAgICAgIGV2ZW50cyBvbiB0aGUgQ2hyb21lQ2xpZW50LgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAg
ICAgICAgKENocm9tZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmRp
ZFByb2dyYW1tYXRpY2FsbHlTY3JvbGwpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24pOgorCiAyMDEz
LTAxLTIyICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIENv
bXBhY3RIVE1MVG9rZW4gYSBsaXR0bGUgbW9yZSBjb21wYWN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaAppbmRleCAzMmQyZjhmNzk1ZjViNDkyZTVlMWQzOTNkNTkzYzUzYmJiMTFkZjAzLi4y
NDg5ZDMzMzMwMGMxYzJlMjk4MjY1ZWFjZmIyOTA0M2QwMGJmYjBjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lQ2xpZW50LmgKQEAgLTE3OCw2ICsxNzgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGxheW91dFVwZGF0ZWQoRnJhbWUqKSBjb25zdCB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdCB7IH07IC8vIEN1cnJlbnRseSBv
bmx5IE1hYyBoYXMgYSBub24gZW1wdHkgaW1wbGVtZW50YXRpb24uCiAKKyAgICAvLyBOb3RpZnkg
dGhlIENocm9tZUNsaWVudCB0aGF0IGEgcHJvZ3JhbW1hdGljIChub24gdXNlci1pbml0aWF0ZWQp
IHNjcm9sbCBoYXMgdGFrZW4gcGxhY2UuCisgICAgdmlydHVhbCB2b2lkIGRpZFByb2dyYW1tYXRp
Y2FsbHlTY3JvbGwoY29uc3QgSW50UG9pbnQmKSBjb25zdCB7IH0KKwogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihSZW5kZXJFbWJlZGRlZE9i
amVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCB2b2lkIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChFbGVtZW50
KiwgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSBjb25z
dCB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0
VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAppbmRleCAwMTg5ZmYxMTUxMTI4YjEwZjZmNWEzOTc3ZDhkZTA3MGRjMGNjYmU3
Li5hZTY0ZTFlNjA1ZDZjYjgxNjI0OTUyZDM5ZmNiZjZkYzQ0ZDZjMzIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCkBAIC0xNzc1LDYgKzE3NzUsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnNl
dFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb2ludCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9pbnQpOwor
CisgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkgPyBmcmFtZSgpLT5wYWdlKCkgOiAwOworICAgIGlm
IChwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpID09IGZyYW1lKCkpCisgICAgICAgIHBhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKS0+ZGlkUHJvZ3JhbW1hdGljYWxseVNjcm9sbChzY3JvbGxQb2ludCk7
CiB9CiAKIHZvaWQgRnJhbWVWaWV3OjpkZWxlZ2F0ZXNTY3JvbGxpbmdEaWRDaGFuZ2UoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186640</attachid>
            <date>2013-02-05 09:12:18 -0800</date>
            <delta_ts>2013-02-05 09:21:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107026-20130205170856.patch</filename>
            <type>text/plain</type>
            <size>2881</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxODgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQwNGQwMmIwYmQ3MzMy
ZmI0N2Q4NGMzZGNjN2RkMzcwMDAzNWFiOS4uMzMzNDMwYWMxNzE4OGVmMWMxOTQ1MjkyYzJhMTY1
NGYzNjMwNDAxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEzLTAxLTIyICBKb2hu
IEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFsbG93IHBy
b2dyYW1tYXRpYyBzY3JvbGxzIHRvIGJlIGRldGVjdGVkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDI2CisKKyAgICAgICAgT24gbW9iaWxlLCBp
dCBpcyBhIGRlIGZhY3RvIEFQSSB0byBoaWRlIHRoZSBVUkwgYmFyIG9uCisgICAgICAgIHByb2dy
YW1tYXRpYyBzY3JvbGxzLiBUaGlzIGNoYW5nZSBhbGxvd3MgZm9yIHRoaXMgZmVhdHVyZQorICAg
ICAgICB0byAgYmUgaW1wbGVtZW50ZWQgYnkgZXhwb3NpbmcgdGhlIHByb2dyYW1tYXRpYyBzY3Jv
bGwKKyAgICAgICAgZXZlbnRzIG9uIHRoZSBDaHJvbWVDbGllbnQuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgor
ICAgICAgICAoQ2hyb21lQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6
ZGlkUHJvZ3JhbW1hdGljYWxseVNjcm9sbCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbik6CisKIDIw
MTMtMDItMDUgIEp1bGllbiBCcmlhbmNlYXUgIDxqYnJpYW5jZWF1QG5kcy5jb20+CiAKICAgICAg
ICAgQnVpbGQgaXMgYnJva2VuIHNpbmNlIHIxNDE1NDMgZm9yIHBsYXRmb3JtcyB3aXRob3V0IE9w
ZW5HTApAQCAtNSw3ICsyMywxMSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNt
YW5uLgogCi0gICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpkaWRQcm9ncmFtbWF0aWNhbGx5
U2Nyb2xsKToKKyAgICAgICAgKENocm9tZUNsaWVudCk6CisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbik6
CiAKIDIwMTMtMDItMDUgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCAzNDAzYjM5NWE5ZGYzMmU1NjhkZmViYjUy
NDlkOTg3YjkwNmRiOGQ1Li44M2FjMDczYzBkZDAyZTI4MTAxMzM5NmEzN2UxNTY0MzllODUzYTg1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTE3OCw2ICsxNzgsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dFVwZGF0ZWQoRnJhbWUqKSBjb25zdCB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdCB7
IH07IC8vIEN1cnJlbnRseSBvbmx5IE1hYyBoYXMgYSBub24gZW1wdHkgaW1wbGVtZW50YXRpb24u
CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUHJvZ3JhbW1hdGljYWxseVNjcm9sbChjb25zdCBJbnRQ
b2ludCYpIGNvbnN0IHsgfQorCiAgICAgdmlydHVhbCBib29sIHNob3VsZFVuYXZhaWxhYmxlUGx1
Z2luTWVzc2FnZUJlQnV0dG9uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQbHVnaW5VbmF2YWlsYWJp
bGl0eVJlYXNvbikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgdW5h
dmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKEVsZW1lbnQqLCBSZW5kZXJFbWJlZGRlZE9iamVj
dDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0IHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQg
bW9kaWZpZXJGbGFncykgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDdjYWJm
MmQ3YjYxYzEwZDRhNGM3MzFiNzIzMDgyMDIwNTY0MDBjNWIuLjE4Zjk0Y2EyZDRkMmIyM2ZhOTZj
YmIwMmJhZmIyYmJiZDFlMmU2YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTE3
NzUsNiArMTc3NSwxMCBAQCB2b2lkIEZyYW1lVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3Qg
SW50UG9pbnQmIHNjcm9sbFBvaW50KQogICAgICAgICByZXR1cm47CiAKICAgICBTY3JvbGxWaWV3
OjpzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb2ludCk7CisKKyAgICBQYWdlKiBwYWdlID0gZnJh
bWUoKSA/IGZyYW1lKCktPnBhZ2UoKSA6IDA7CisgICAgaWYgKHBhZ2UgJiYgcGFnZS0+bWFpbkZy
YW1lKCkgPT0gZnJhbWUoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5kaWRQ
cm9ncmFtbWF0aWNhbGx5U2Nyb2xsKHNjcm9sbFBvaW50KTsKIH0KIAogdm9pZCBGcmFtZVZpZXc6
OmRlbGVnYXRlc1Njcm9sbGluZ0RpZENoYW5nZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186643</attachid>
            <date>2013-02-05 09:21:17 -0800</date>
            <delta_ts>2013-02-15 11:30:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107026-20130205171755.patch</filename>
            <type>text/plain</type>
            <size>2554</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxODgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQwNGQwMmIwYmQ3MzMy
ZmI0N2Q4NGMzZGNjN2RkMzcwMDAzNWFiOS4uZmZjOGVmOWY2MTI1ZTIzMmE3NjQxM2IyZjJjYzJl
NDE3ZmU0MTU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEzLTAyLTA1ICBKb2hu
IEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFsbG93IEph
dmFzY3JpcHQtaW5pdGlhdGVkIHNjcm9sbHMgdG8gYmUgZGV0ZWN0ZWQuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDcwMjYKKworICAgICAgICBPbiBt
b2JpbGUsIGl0IGlzIGEgZGUgZmFjdG8gQVBJIHRvIGhpZGUgdGhlIFVSTCBiYXIgb24KKyAgICAg
ICAgcHJvZ3JhbW1hdGljIHNjcm9sbHMuIFRoaXMgY2hhbmdlIGFsbG93cyBmb3IgdGhpcyBmZWF0
dXJlCisgICAgICAgIHRvICBiZSBpbXBsZW1lbnRlZCBieSBleHBvc2luZyB0aGUgcHJvZ3JhbW1h
dGljIHNjcm9sbAorICAgICAgICBldmVudHMgb24gdGhlIENocm9tZUNsaWVudC4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xp
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmRpZFByb2dyYW1tYXRpY2Fs
bHlTY3JvbGwpOgorICAgICAgICAoQ2hyb21lQ2xpZW50KToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
Vmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFNjcm9sbFBvc2l0aW9u
KToKKwogMjAxMy0wMi0wNSAgSnVsaWVuIEJyaWFuY2VhdSAgPGpicmlhbmNlYXVAbmRzLmNvbT4K
IAogICAgICAgICBCdWlsZCBpcyBicm9rZW4gc2luY2UgcjE0MTU0MyBmb3IgcGxhdGZvcm1zIHdp
dGhvdXQgT3BlbkdMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCAzNDAzYjM5NWE5
ZGYzMmU1NjhkZmViYjUyNDlkOTg3YjkwNmRiOGQ1Li44M2FjMDczYzBkZDAyZTI4MTAxMzM5NmEz
N2UxNTY0MzllODUzYTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTE3OCw2
ICsxNzgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dFVwZGF0ZWQoRnJhbWUq
KSBjb25zdCB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IElu
dFJlY3QmKSBjb25zdCB7IH07IC8vIEN1cnJlbnRseSBvbmx5IE1hYyBoYXMgYSBub24gZW1wdHkg
aW1wbGVtZW50YXRpb24uCiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUHJvZ3JhbW1hdGljYWxseVNj
cm9sbChjb25zdCBJbnRQb2ludCYpIGNvbnN0IHsgfQorCiAgICAgdmlydHVhbCBib29sIHNob3Vs
ZFVuYXZhaWxhYmxlUGx1Z2luTWVzc2FnZUJlQnV0dG9uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpQ
bHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIHZvaWQgdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKEVsZW1lbnQqLCBSZW5k
ZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0IHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVz
dWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncykgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCmluZGV4IDdjYWJmMmQ3YjYxYzEwZDRhNGM3MzFiNzIzMDgyMDIwNTY0MDBjNWIuLjE4Zjk0
Y2EyZDRkMmIyM2ZhOTZjYmIwMmJhZmIyYmJiZDFlMmU2YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAKQEAgLTE3NzUsNiArMTc3NSwxMCBAQCB2b2lkIEZyYW1lVmlldzo6c2V0U2Nyb2xs
UG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvaW50KQogICAgICAgICByZXR1cm47CiAK
ICAgICBTY3JvbGxWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb2ludCk7CisKKyAgICBQ
YWdlKiBwYWdlID0gZnJhbWUoKSA/IGZyYW1lKCktPnBhZ2UoKSA6IDA7CisgICAgaWYgKHBhZ2Ug
JiYgcGFnZS0+bWFpbkZyYW1lKCkgPT0gZnJhbWUoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCkt
PmNsaWVudCgpLT5kaWRQcm9ncmFtbWF0aWNhbGx5U2Nyb2xsKHNjcm9sbFBvaW50KTsKIH0KIAog
dm9pZCBGcmFtZVZpZXc6OmRlbGVnYXRlc1Njcm9sbGluZ0RpZENoYW5nZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188607</attachid>
            <date>2013-02-15 11:30:09 -0800</date>
            <delta_ts>2013-02-25 09:12:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107026-20130215192635.patch</filename>
            <type>text/plain</type>
            <size>14878</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyOTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDkzZTVlNWE2MTdhN2U0
M2MyZGM2YTViNDBiMGE3ZWZmNDY5MGIyNy4uMTgwMDBlNjUwYjQ2OGJkNTUwZGE2YzRmZjZhY2Vm
NjFjYWRiN2IyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEzLTAyLTE1ICBKb2hu
IEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFsbG93IFdl
YktpdCBzY3JvbGxzIHRvIGhpZGUgVVJMIGJhciBpbiBDaHJvbWUgb24gQW5kcm9pZC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzAyNgorCisgICAg
ICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2ggaXMgdG8gYWxsb3cgc2Nyb2xscyBmcm9tIFdl
YktpdCB0bworICAgICAgICBoaWRlIHRoZSBVUkwgYmFyIGluIHRoZSBzYW1lIHdheSBhcyBzY3Jv
bGxzIGZyb20gdGhlIHVzZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCB1c2VzIHRoZSByZXF1ZXN0
U2Nyb2xsUG9zaXRpb25VcGRhdGUgbWV0aG9kIG9uCisgICAgICAgIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yIHRvIHJlY2VpdmUgdGhlIFdlYktpdCBzY3JvbGxzLiBJZiB0aGUgVVJMIGJhcgorICAgICAg
ICBpcyBzaG93aW5nLCBhIHNjcm9sbCB0byB0aGUgc2FtZSBwb3NpdGlvbiBtYXkgbWVhbiB0aGF0
IHRoZSBVUkwKKyAgICAgICAgYmFyIHNob3VsZCBiZSBoaWRkZW4sIHNvIHdlIG5lZWQgcmVxdWVz
dFNjcm9sbFBvc2l0aW9uVXBkYXRlIHRvIGJlCisgICAgICAgIGNhbGxlZCBldmVuIGlmIHRoZSBj
b250ZW50IHNjcm9sbCBwb3NpdGlvbiBkb2Vzbid0IGNoYW5nZS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmll
dzo6c2V0U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXF1
ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAqIHBhZ2UvY2hyb21pdW0vQ2hyb21l
Q2xpZW50Q2hyb21pdW0uaDoKKyAgICAgICAgKENocm9tZUNsaWVudENocm9taXVtKToKKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnJl
cXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmg6
CisgICAgICAgIChTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtKToKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRl
KToKKwogMjAxMy0wMi0xNCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbHdheXMgc2hvdyBtZW1vcnkgc2l6ZSBpbiBNYiBv
biB0aGUgbmF0aXZlIG1lbW9yeSBncmFwaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAz
YjdiOTA5ZDQxNzRkMDI4Y2M0NjgyYjJiNjY1MWViZjM5MzNjMzhmLi5kY2QwODY4ZGVjMTdhZjY2
NzE4MjA0Yjk3YTA4NWViYzhhNzRjYTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM1IEBACisyMDEzLTAyLTE1ICBKb2huIEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEFsbG93IFdlYktpdCBzY3JvbGxzIHRvIGhpZGUgVVJMIGJh
ciBpbiBDaHJvbWUgb24gQW5kcm9pZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNzAyNgorCisgICAgICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0
Y2ggaXMgdG8gYWxsb3cgc2Nyb2xscyBmcm9tIFdlYktpdCB0bworICAgICAgICBoaWRlIHRoZSBV
UkwgYmFyIGluIHRoZSBzYW1lIHdheSBhcyBzY3JvbGxzIGZyb20gdGhlIHVzZXIuCisKKyAgICAg
ICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSB0d28ga2luZHMgb2Ygc2Nyb2xscyBpcyB0
aGF0IHVzZXIKKyAgICAgICAgc2Nyb2xscyBhcmUgdGhvc2UgdGhhdCBvcmlnaW5hdGUgaW4gdGhl
IGNvbXBvc2l0b3IuIFRoZSBVUkwgYmFyCisgICAgICAgIHNob3VsZCBub3QgYmUgaGlkZGVuIGlm
IHRoZSBkb2N1bWVudCB3b3VsZG4ndCBmaXQgdGhlIHdob2xlCisgICAgICAgIHNjcmVlbi4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHB1YmxpYy9X
ZWJXaWRnZXRDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViV2lkZ2V0Q2xpZW50OjpkaWRQ
cm9ncmFtbWF0aWNhbGx5U2Nyb2xsKToKKyAgICAgICAgKFdlYldpZGdldENsaWVudCk6CisgICAg
ICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVD
bGllbnRJbXBsOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5oOgorICAgICAgICAoQ2hyb21lQ2xp
ZW50SW1wbCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OmFwcGx5U2Nyb2xsQW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpoaWRlVG9wQ29udHJvbHMpOgorICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViVmlld0ltcGwpOgorCiAyMDEzLTAyLTE0ICBWc2V2
b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQg
Y2hyb21pdW0gdGVzdCBmaXg6IGluY29ycmVjdCBmaWVsZCB3YXMgdXNlZCBmb3IgVUlTb3VyY2VD
b2RlIHVybC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBkYWNhMDg4MTBjOTUxOGRm
MzhjYmZjYmI0OGUyMjIzNDFlYjYyOTQ5Li41MThhYjk2YmI1NGY5YmZlMTJhM2M0MjlmYmYyY2Y5
MWE5YzIyNGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xNzcwLDEwICsxNzcw
LDEwIEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9pbnQpCiAKICAgICBJbnRQb2ludCBuZXdTY3JvbGxQb3NpdGlvbiA9IGFkanVzdFNj
cm9sbFBvc2l0aW9uV2l0aGluUmFuZ2Uoc2Nyb2xsUG9pbnQpOwogCi0gICAgaWYgKG5ld1Njcm9s
bFBvc2l0aW9uID09IHNjcm9sbFBvc2l0aW9uKCkpCisgICAgaWYgKHJlcXVlc3RTY3JvbGxQb3Np
dGlvblVwZGF0ZShuZXdTY3JvbGxQb3NpdGlvbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUobmV3U2Nyb2xsUG9zaXRpb24pKQorICAgIGlm
IChuZXdTY3JvbGxQb3NpdGlvbiA9PSBzY3JvbGxQb3NpdGlvbigpKQogICAgICAgICByZXR1cm47
CiAKICAgICBTY3JvbGxWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbihuZXdTY3JvbGxQb3NpdGlvbik7
CkBAIC0xOTM5LDE0ICsxOTM5LDE0IEBAIGJvb2wgRnJhbWVWaWV3OjpyZXF1ZXN0U2Nyb2xsUG9z
aXRpb25VcGRhdGUoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQogICAgICAgICB2aXNpYmxlUmVj
dC5zZXRMb2NhdGlvbihwb3NpdGlvbik7CiAgICAgICAgIHRpbGVkQmFja2luZy0+cHJlcG9wdWxh
dGVSZWN0KHZpc2libGVSZWN0KTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwb3Np
dGlvbik7CisjZW5kaWYKIAogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7
CiAgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3Ig
PSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQogICAgICAgICAgICAgcmV0dXJuIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUodGhpcywgcG9zaXRp
b24pOwogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBvc2l0aW9uKTsKLSNlbmRpZgog
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9j
aHJvbWl1bS9DaHJvbWVDbGllbnRDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jaHJv
bWl1bS9DaHJvbWVDbGllbnRDaHJvbWl1bS5oCmluZGV4IDAyZTJhOTQ1ZDg4NmUwMzNjNzE4MmVj
M2ExNTBiZGFiZjM4N2Y5MzguLmYwMDY1NzczMjU3NWZlY2VmNDJhNDhlODRiZDU2NTc1NmRhYmM0
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vQ2hyb21lQ2xpZW50
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0Nocm9tZUNsaWVu
dENocm9taXVtLmgKQEAgLTUxLDYgKzUxLDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAvLyBOb3RpZmllcyB0aGUgY2xpZW50IGEgcG9wdXAgd2FzIGNsb3Nl
ZC4KICAgICB2aXJ0dWFsIHZvaWQgcG9wdXBDbG9zZWQoUG9wdXBDb250YWluZXIqIHBvcHVwQ29u
dGFpbmVyKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBk
YXRlKEZyYW1lVmlldyosIGNvbnN0IEludFBvaW50Jik7CisKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9t
aXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAKaW5k
ZXggYTc0MWY4ZDA3ZGE5Njg1Nzc0OTBhYWFiODFlOWM3ODgyYzliMDA0ZC4uNWM0ZjI1Y2JkYzA0
NzlmM2FkOWUyZmMyZDExMWZlYjVmYjhmMTc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29v
cmRpbmF0b3JDaHJvbWl1bS5jcHAKQEAgLTI3LDYgKzI3LDggQEAKIAogI2luY2x1ZGUgIlNjcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1
ZGUgIkNocm9tZUNsaWVudENocm9taXVtLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKQEAgLTI5
Niw0ICsyOTgsMTMgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpyZWNvbXB1
dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEYKICAgICBzZXRXaGVlbEV2ZW50
SGFuZGxlckNvdW50KGNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpKTsKIH0K
IAorYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpyZXF1ZXN0U2Nyb2xsUG9zaXRp
b25VcGRhdGUoRnJhbWVWaWV3KiBmcmFtZXZpZXcsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sK
KyAgICBDaHJvbWVDbGllbnRDaHJvbWl1bSogY2xpZW50ID0gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xp
ZW50Q2hyb21pdW0qPigKKyAgICAgICAgbV9wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpOworCisg
ICAgcmV0dXJuIGNsaWVudC0+cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGZyYW1ldmlldywg
cG9pbnQpOworfQorCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0u
aAppbmRleCBhZDM2ZjExNjA3MThjMGZhNTQ5ZGUyNDk4MTUyYTcwNTc5NjIxM2MyLi5hZTg4MTI5
MjUxMGZlMmNlMDAxN2FhYWJmZDUwYmM2MDJlMTRhMTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bS5oCkBAIC03MSw2ICs3MSw4IEBAIHB1YmxpYzoKICAgICAvLyBT
aG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRvdWNoIGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkLCBy
ZW1vdmVkLCBvciBtb3ZlZC4KICAgICB2aXJ0dWFsIHZvaWQgdG91Y2hFdmVudFRhcmdldFJlY3Rz
RGlkQ2hhbmdlKGNvbnN0IERvY3VtZW50KikgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIGJvb2wg
cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyosIGNvbnN0IEludFBvaW50Jik7
CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVy
Q291bnRGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CiAgICAgdmlydHVhbCB2b2lkIHNldFNob3Vs
ZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGlu
Z1JlYXNvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCmluZGV4IGZhZTFjNjVjZjczYjIzMmM1
NzQ4YzgwMmY3MDUzM2FmYzA5YTgzZTQuLjA0NTkyNzcwOWQwMThmNDgxZmE0ODQ0MzI5YWQ4ZTYw
NzMxYTYzMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0KQEAgLTE5Nyw2ICsxOTcsOSBAQCBi
b29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUo
RnJhbWVWaWV3KiBmcmFtZVZpZXcsCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBB
U1NFUlQobV9wYWdlKTsKIAorICAgIGlmIChuZXdTY3JvbGxQb3NpdGlvbiA9PSBzY3JvbGxQb3Np
dGlvbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIGlmICghY29vcmRpbmF0ZXNTY3Jv
bGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCmluZGV4
IGZhOWQzZDhmYTM2YmNiMzYyODlkNzBmMjk0ODNkZjdkOWY0ZTM1MjMuLjhlYTNhZjRlN2UyNmI4
N2MyZDE2MzJmZDI0ZDEzY2UyY2Q2NGE1ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCkBAIC0xNzAsNiArMTcwLDggQEAgcHVibGljOgog
ICAgIC8vIENhbGxlZCB3aGVuIGEgZ2VzdHVyZSBldmVudCBpcyBoYW5kbGVkLgogICAgIHZpcnR1
YWwgdm9pZCBkaWRIYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBldmVu
dCwgYm9vbCBldmVudENhbmNlbGxlZCkgeyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUHJvZ3Jh
bW1hdGljYWxseVNjcm9sbChjb25zdCBXZWJLaXQ6OldlYlBvaW50JiBwb2ludCkgeyB9CisKIHBy
b3RlY3RlZDoKICAgICB+V2ViV2lkZ2V0Q2xpZW50KCkgeyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAppbmRleCAyNGIwNjIzMDM5NjQy
NjA3NmFiNmNmMzEwZWNmZjI2MDg3ZWU0YzI4Li5lM2ViM2VhNzEyNWZkNWI4OGQ4NjdjYmZlMGY2
ZThmZDlhMDcyZDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJv
bWVDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVD
bGllbnRJbXBsLmNwcApAQCAtMTE3MCw2ICsxMTcwLDEyIEBAIHZvaWQgQ2hyb21lQ2xpZW50SW1w
bDo6YW5ub3RhdGVkUmVnaW9uc0NoYW5nZWQoKQogfQogI2VuZGlmCiAKK2Jvb2wgQ2hyb21lQ2xp
ZW50SW1wbDo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyogZnJhbWV2aWV3
LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIG1fd2ViVmlldy0+cmVxdWVz
dFNjcm9sbFBvc2l0aW9uVXBkYXRlKGZyYW1ldmlldywgcG9pbnQpOworfQorCisKICNpZiBFTkFC
TEUoTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpCiBQYXNzT3duUHRyPE5hdmlnYXRvckNvbnRlbnRV
dGlsc0NsaWVudEltcGw+IE5hdmlnYXRvckNvbnRlbnRVdGlsc0NsaWVudEltcGw6OmNyZWF0ZShX
ZWJWaWV3SW1wbCogd2ViVmlldykKIHsKQEAgLTExODcsNCArMTE5Myw2IEBAIHZvaWQgTmF2aWdh
dG9yQ29udGVudFV0aWxzQ2xpZW50SW1wbDo6cmVnaXN0ZXJQcm90b2NvbEhhbmRsZXIoY29uc3Qg
U3RyaW5nJiBzY2hlCiB9IAogI2VuZGlmCiAKKworCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaAppbmRleCBkNWU5
YWZmM2FhNDNlNzNiZmI5OTNlOTA2NTdhZmUyZWZhNmUyMWY3Li4yN2JhNjFjOWExZjE3ZjQ4YTcy
YjY0OWRlOWQ1OTViNWFlMmQ3NjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21lQ2xpZW50SW1wbC5oCkBAIC0yMzMsNiArMjMzLDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc1BvaW50ZXJMb2NrZWQoKTsKICNlbmRpZgogCisgICAgdmlydHVhbCBib29sIHJl
cXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShXZWJDb3JlOjpGcmFtZVZpZXcqLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpOworCiBwcml2YXRlOgogICAgIFdlYk5hdmlnYXRpb25Qb2xpY3kgZ2V0
TmF2aWdhdGlvblBvbGljeSgpOwogICAgIHZvaWQgZ2V0UG9wdXBNZW51SW5mbyhXZWJDb3JlOjpQ
b3B1cENvbnRhaW5lciosIFdlYlBvcHVwTWVudUluZm8qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBkN2RlODY5NjI2ZGZmN2M2YTc5MzBhZWFlMGQ3
MTIxNzM4N2RkNTFjLi4xNTA4MjNkNDFmYjY5YWQ3MWIzZjk4NWU4NjE3NDViYmFmOTAzYzJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC00NTIsNiAr
NDUyLDEwIEBAIFdlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQp
CiAgICAgLCBtX3Nob3dQYWludFJlY3RzKGZhbHNlKQogICAgICwgbV9zaG93RGVidWdCb3JkZXJz
KGZhbHNlKQogICAgICwgbV9jb250aW51b3VzUGFpbnRpbmdFbmFibGVkKGZhbHNlKQorICAgICwg
bV9pbnNpZGVDb21wb3NpdG9yKGZhbHNlKQorICAgICwgbV90b3BDb250cm9sc0hlaWdodCg5NikK
KyAgICAsIG1fdG9wQ29udHJvbHNTaG93aW5nKHRydWUpCisKIHsKICAgICAvLyBXZWJLaXQvd2lu
L1dlYlZpZXcuY3BwIGRvZXMgdGhlIHNhbWUgdGhpbmcsIGV4Y2VwdCB0aGV5IGNhbGwgdGhlCiAg
ICAgLy8gS0pTIHNwZWNpZmljIHdyYXBwZXIgYXJvdW5kIHRoaXMgbWV0aG9kLiBXZSBuZWVkIHRv
IGhhdmUgdGhyZWFkaW5nCkBAIC00MTk4LDYgKzQyMDIsMTIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6
YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFn
ZVNjYWwKICAgICBpZiAoIW1haW5GcmFtZUltcGwoKSB8fCAhbWFpbkZyYW1lSW1wbCgpLT5mcmFt
ZVZpZXcoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6IEFsc28gcmVjZWl2ZWQg
dGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIG1fdG9wQ29udHJvbHNTaG93aW5nLCBhbmQgdGhlIHZh
bHVlCisgICAgLy8gb2YgbV90b3BDb250cm9sc0hlaWdodC4gUGVyaGFwcyBzaW1wbHkgdGhlIHZh
bHVlIG9mIGNvbnRlbnRfdG9wX29mZnNldCBmcm9tIHRoZQorICAgIC8vIFRvcENvbnRyb2xzTWFu
YWdlciB3aWxsIGJlIGVub3VnaD8KKworICAgIG1faW5zaWRlQ29tcG9zaXRvciA9IHRydWU7CisK
ICAgICBpZiAocGFnZVNjYWxlRGVsdGEgPT0gMSkgewogICAgICAgICBUUkFDRV9FVkVOVF9JTlNU
QU5UMigid2Via2l0IiwgIldlYlZpZXdJbXBsOjphcHBseVNjcm9sbEFuZFNjYWxlOjpzY3JvbGxC
eSIsICJ4Iiwgc2Nyb2xsRGVsdGEud2lkdGgsICJ5Iiwgc2Nyb2xsRGVsdGEuaGVpZ2h0KTsKICAg
ICAgICAgbWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZpZXcoKS0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEp
OwpAQCAtNDIyMCw2ICs0MjMwLDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlTY3JvbGxBbmRT
Y2FsZShjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNjYWwKICAgICAgICAg
c2V0UGFnZVNjYWxlRmFjdG9yKHBhZ2VTY2FsZUZhY3RvcigpICogcGFnZVNjYWxlRGVsdGEsIHNj
cm9sbFBvaW50KTsKICAgICAgICAgbV9kb3VibGVUYXBab29tSW5FZmZlY3QgPSBmYWxzZTsKICAg
ICB9CisKKyAgICBtX2luc2lkZUNvbXBvc2l0b3IgPSBmYWxzZTsKIH0KIAogdm9pZCBXZWJWaWV3
SW1wbDo6d2lsbENvbW1pdCgpCkBAIC00NDA2LDQgKzQ0MTgsNTQgQEAgYm9vbCBXZWJWaWV3SW1w
bDo6c2hvdWxkRGlzYWJsZURlc2t0b3BXb3JrYXJvdW5kcygpCiAgICAgICAgIHx8IChhcmd1bWVu
dHMubWluWm9vbSA9PSBhcmd1bWVudHMubWF4Wm9vbSAmJiBhcmd1bWVudHMubWluWm9vbSAhPSBW
aWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvKTsKIH0KIAorYm9vbCBXZWJWaWV3SW1wbDo6cmVx
dWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyogZnJhbWV2aWV3LCBjb25zdCBJbnRQ
b2ludCYgcG9pbnQpCit7CisgICAgLy8gV2ViS2l0IGhhcyByZXF1ZXN0ZWQgdG8gc2Nyb2xsIGZy
YW1ldmlldyB0byBwb3NpdGlvbiBwb2ludC4gSWYgaXQncyB0aGUKKyAgICAvLyBtYWluIGZyYW1l
LCB3ZSBuZWVkIHRvIGRlY2lkZSB3aGV0aGVyIHRoaXMgc2Nyb2xsIHNob3VsZCBjYXVzZSB0aGUg
VVJMCisgICAgLy8gYmFyIHRvIGhpZGUuCisgICAgaWYgKGZyYW1ldmlldy0+cGFyZW50KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElmIHRoZSBjb21wb3NpdG9yIGlzIGNhbGxp
bmcgaW50byBoZXJlLCB0aGUgdG9wIGNvbnRyb2xzIHBvc2l0aW9ucyBoYXZlCisgICAgLy8gYWxy
ZWFkeSBiZWVuIHNldCBieSB0aGUgVG9wQ29udHJvbHNNYW5hZ2VyLgorICAgIGlmIChtX2luc2lk
ZUNvbXBvc2l0b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFBvaW50IGFkanVz
dGVkUG9pbnQgPSBmcmFtZXZpZXctPmFkanVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2UocG9p
bnQpOworCisgICAgLy8gVGhlIGlkZWEgaXMgdG8gZ2V0IHRoZSB0b3Agb2YgdGhlIHNjcmVlbiBz
aG93aW5nIHRoZSBnaXZlbiBzY3JvbGwgb2Zmc2V0LAorICAgIC8vIGlmIHBvc3NpYmxlLiBUaGlz
IGlzbid0IHBvc3NpYmxlIGlmIHRoZSBkb2N1bWVudCBpc24ndCBiaWcgZW5vdWdoLgorICAgIGlu
dCBtaW5Db250ZW50SGVpZ2h0Rm9yU2Nyb2xsID0gZnJhbWV2aWV3LT52aXNpYmxlSGVpZ2h0KCkg
KyBtX3RvcENvbnRyb2xzSGVpZ2h0OworICAgIGlmIChmcmFtZXZpZXctPmNvbnRlbnRzSGVpZ2h0
KCkgPCBtaW5Db250ZW50SGVpZ2h0Rm9yU2Nyb2xsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBJbnRTaXplIGRlbHRhID0gYWRqdXN0ZWRQb2ludCAtIGZyYW1ldmlldy0+c2Nyb2xsUG9z
aXRpb24oKTsKKworICAgIGlmIChtX3RvcENvbnRyb2xzU2hvd2luZykgeworICAgICAgICAvLyBJ
ZiB0aGUgVVJMIGJhciBpcyBzaG93aW5nLCBpdCBtZWFucyB0aGUgdHJ1ZSBjdXJyZW50IHNjcm9s
bCBwb3NpdGlvbgorICAgICAgICAvLyBvZiB0aGUgZnJhbWV2aWV3IGlzIGFjdHVhbGx5IGxlc3Mg
YnkgdGhlIG1fdG9wQ29udHJvbHNIZWlnaHQsIHNvCisgICAgICAgIC8vIG91ciBkZWx0YSwgaWYg
d2UgYXJlIHRvIG1ha2UgdGhlIGdpdmVuIHBvaW50IHRoZSB0b3Agb2YgdGhlIHNjcmVlbiwKKyAg
ICAgICAgLy8gbmVlZHMgdG8gYmUgaW5jcmVhc2VkIGJ5IG1fdG9wQ29udHJvbHNIZWlnaHQuCisg
ICAgICAgIGRlbHRhLmV4cGFuZCgwLCBtX3RvcENvbnRyb2xzSGVpZ2h0KTsKKworICAgICAgICAv
LyBJZiBpdCdzIGEgc2Nyb2xsIGRvd24sIHdlIHdhbnQgdG8gaGlkZSB0aGUgVVJMIGJhci4gSWYg
aXQncyBhIHNjcm9sbCB1cCwKKyAgICAgICAgLy8gd2UnbGwgbGVhdmUgaXQgYWxvbmUuCisgICAg
ICAgIGlmIChkZWx0YS5oZWlnaHQoKSA+IDApCisgICAgICAgICAgICBoaWRlVG9wQ29udHJvbHMo
KTsKKyAgICB9CisKKyAgICAvLyBXZSByZXR1cm4gZmFsc2UgYW55d2F5IHNvIHRoYXQgdGhlIGZy
YW1ldmlldyB3aWxsIG5vdyB1cGRhdGUgdGhlIGNvbnRlbnQKKyAgICAvLyBwb3NpdGlvbiBhcyBy
ZXF1ZXN0ZWQuIFRoaXMgaXMgZGVzaXJhYmxlIHNvIHRoYXQgdGhlIGVmZmVjdHMgb2YKKyAgICAv
LyB3aW5kb3cuc2Nyb2xsVG8gY2FuIGJlIGltbWVkaWF0ZWx5IHBlcmNlaXZlZCBieSBKYXZhU2Ny
aXB0LgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJWaWV3SW1wbDo6aGlkZVRvcENv
bnRyb2xzKCkKK3sKKyAgICAvLyBVc2UgdGhlIHByZXZpb3VzIHBsdW1iaW5nIHRvIGhpZGUgdGhl
IHRvcCBjb250cm9scy4gVGhpcyBzaG91bGQgYmUKKyAgICAvLyByZW5hbWVkIHRvIGhpZGVUb3BD
b250cm9scygpLgorICAgIG1fY2xpZW50LT5kaWRQcm9ncmFtbWF0aWNhbGx5U2Nyb2xsKFdlYlBv
aW50KDAsIDApKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGE5NTE5NmNlMzZiYWYzNmQ4MDI5MTNlZWY5
MmViNDExZGNhZmZmMzkuLjgwMjNkNDZjZjAyYmJmMzhlZjRhMmU1YTlmMTY3MjE0ZmM0MWI5NDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtNjEzLDcgKzYx
MywxMSBAQCBwdWJsaWM6CiAKICAgICBXZWJTZXR0aW5nc0ltcGwqIHNldHRpbmdzSW1wbCgpOwog
CisgICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoV2ViQ29yZTo6RnJhbWVWaWV3
KiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKKwogcHJpdmF0ZToKKyAgICB2b2lkIGhpZGVU
b3BDb250cm9scygpOworCiAgICAgdm9pZCBjb21wdXRlUGFnZVNjYWxlRmFjdG9yTGltaXRzKCk7
CiAgICAgZmxvYXQgY2xhbXBQYWdlU2NhbGVGYWN0b3JUb0xpbWl0cyhmbG9hdCBzY2FsZSk7CiAg
ICAgV2ViQ29yZTo6SW50UG9pbnQgY2xhbXBPZmZzZXRBdFNjYWxlKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBvZmZzZXQsIGZsb2F0IHNjYWxlKSBjb25zdDsKQEAgLTg5OCw2ICs5MDIsMTAgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fc2hvd1BhaW50UmVjdHM7CiAgICAgYm9vbCBtX3Nob3dEZWJ1
Z0JvcmRlcnM7CiAgICAgYm9vbCBtX2NvbnRpbnVvdXNQYWludGluZ0VuYWJsZWQ7CisKKyAgICBi
b29sIG1faW5zaWRlQ29tcG9zaXRvcjsKKyAgICBpbnQgbV90b3BDb250cm9sc0hlaWdodDsKKyAg
ICBib29sIG1fdG9wQ29udHJvbHNTaG93aW5nOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190072</attachid>
            <date>2013-02-25 09:13:02 -0800</date>
            <delta_ts>2013-02-25 11:48:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107026-20130225170918.patch</filename>
            <type>text/plain</type>
            <size>10698</size>
            <attacher name="John Knottenbelt">jknotten</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzOTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg1NTJhZmIxMjRlNmVi
ZTFiNzU1NTMzZTU2YmIxZjYyNGE5OTdhYS4uMjE3N2I2NzVhOWFiYjlmNGY5MTdlNDcwMTYwZTMx
NzYxYTY2NzE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEzLTAyLTI1ICBKb2hu
IEtub3R0ZW5iZWx0ICA8amtub3R0ZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEhpZGUgdGhl
IGxvY2F0aW9uIGJhciBvbiB3aW5kb3cuc2Nyb2xsVG8oMCxbMDFdKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDI2CisKKyAgICAgICAgVGhlIHB1
cnBvc2Ugb2YgdGhpcyBwYXRjaCBpcyB0byBhbGxvdyBXZWJLaXQgdG8gaGlkZSB0aGUKKyAgICAg
ICAgbG9jYXRpb24gYmFyIHdoZW4gSmF2YXNjcmlwdCBpbnZva2VzIHdpbmRvdy5zY3JvbGxUbygw
LDApCisgICAgICAgIG9yIHdpbmRvdy5zY3JvbGxUbygwLDEpLCBhcyB0aGlzIGlzIHRoZSBBUEkg
dGhhdCBkZXZlbG9wZXJzLAorICAgICAgICBhbmQgbWFueSBtb2JpbGUgd2Vic2l0ZXMsIGFyZSB1
c2luZyBmb3IgdGhpcyBwdXJwb3NlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogcGFnZS9D
aHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpoaWRlTG9jYXRpb25CYXIpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKENo
cm9tZSk6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZUNsaWVudDo6aGlkZUxvY2F0aW9uQmFyKToKKyAgICAgICAgKENocm9tZUNsaWVudCk6
CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2lu
ZG93OjpzY3JvbGxUbyk6CisgICAgICAgICogcGFnZS9GZWF0dXJlT2JzZXJ2ZXIuaDoKKwogMjAx
My0wMi0yNSAgQWxleGVpIEZpbGlwcG92ICA8YWxwaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
V2ViIEluc3BlY3RvcjogbW92ZSBwcm9maWxlIHR5cGUgc3BlY2lmaWMgY29kZSBvdXQgb2YgUHJv
ZmlsZXNQYW5lbCAocmVmYWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDJiOTZm
MTUyYTkyMTVhN2U2NWRlZDJhNzY5MzI3ZjFkNjZlYjgxMzEuLmE3M2ZhZTJiYzhkMDhjYTQ3ZWZj
ZDkyYTZjZTNlYTk5YTA3ODQ3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzIgQEAKKzIwMTMtMDItMjUgIEpvaG4gS25vdHRlbmJlbHQgIDxqa25vdHRlbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgSGlkZSB0aGUgbG9jYXRpb24gYmFyIG9uIHdpbmRvdy5zY3JvbGxU
bygwLFswMV0pCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDcwMjYKKworICAgICAgICBUaGUgcHVycG9zZSBvZiB0aGlzIHBhdGNoIGlzIHRvIGFsbG93
IFdlYktpdCB0byBoaWRlIHRoZQorICAgICAgICBsb2NhdGlvbiBiYXIgd2hlbiBKYXZhc2NyaXB0
IGludm9rZXMgd2luZG93LnNjcm9sbFRvKDAsMCkKKyAgICAgICAgb3Igd2luZG93LnNjcm9sbFRv
KDAsMSksIGFzIHRoaXMgaXMgdGhlIEFQSSB0aGF0IGRldmVsb3BlcnMsCisgICAgICAgIGFuZCBt
YW55IG1vYmlsZSB3ZWJzaXRlcywgYXJlIHVzaW5nIGZvciB0aGlzIHB1cnBvc2UuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViV2lk
Z2V0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYldpZGdldENsaWVudDo6ZGlkUHJvZ3Jh
bW1hdGljYWxseVNjcm9sbCk6CisgICAgICAgIChXZWJXaWRnZXRDbGllbnQpOgorICAgICAgICAq
IHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50
SW1wbDo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKENocm9tZUNsaWVudElt
cGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpXZWJWaWV3SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjph
cHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlcXVl
c3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6aGlkZVRvcENvbnRyb2xzKToKKyAgICAgICAgKiBzcmMvV2ViVmll
d0ltcGwuaDoKKyAgICAgICAgKFdlYlZpZXdJbXBsKToKKwogMjAxMy0wMi0yNCAgSGFqaW1lIE1v
cnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgW0N1c3RvbSBFbGVtZW50c10g
SW1wbGVtZW50IGJhcmUtYm9uZSBkb2N1bWVudC5yZWdpc3RlcigpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5j
cHAKaW5kZXggODVhOTc1NTJhZGY1MWZmYzU3YWQ0ZGJiNTBjMDIxMTZmMTRlNGMxZC4uYjYwNjQ0
YzI5MzlhNWE2MmViN2EzMTM3YzkxNGY2NmZhMTgxZmU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNw
cApAQCAtMjc3LDYgKzI3NywxMSBAQCBib29sIENocm9tZTo6bWVudWJhclZpc2libGUoKSBjb25z
dAogICAgIHJldHVybiBtX2NsaWVudC0+bWVudWJhclZpc2libGUoKTsKIH0KIAordm9pZCBDaHJv
bWU6OmhpZGVMb2NhdGlvbkJhcigpIGNvbnN0Cit7CisgICAgbV9jbGllbnQtPmhpZGVMb2NhdGlv
bkJhcigpOworfQorCiB2b2lkIENocm9tZTo6c2V0UmVzaXphYmxlKGJvb2wgYikgY29uc3QKIHsK
ICAgICBtX2NsaWVudC0+c2V0UmVzaXphYmxlKGIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKaW5kZXggNTI5
M2M0YTZiMWY0N2ZkMDMwZTZjODBkNzkyNzM2NWQ3NmMxNmI0Yi4uZmY5ZjQ1NmQ4YWI0NTMyZGJi
MTYzZmFjYjk4Y2JlMzRiZDcwYzYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCkBAIC0xMjYsNiArMTI2
LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWVudWJhclZpc2libGUoYm9vbCkgY29uc3Q7CiAg
ICAgYm9vbCBtZW51YmFyVmlzaWJsZSgpIGNvbnN0OwogCisgICAgdm9pZCBoaWRlTG9jYXRpb25C
YXIoKSBjb25zdDsKKwogICAgIHZvaWQgc2V0UmVzaXphYmxlKGJvb2wpIGNvbnN0OwogCiAgICAg
Ym9vbCBjYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZUNsaWVudC5oCmluZGV4IDVmNmNlMzlhNTE5MDRlYTQ1MzBkNWJiNzNlNTVhMjE4MmZjNTU1NDcu
LjJlMzAzMzI5ZGFlZGM2MGE1MTg2MzJkNmJlYzI1YWE4ZTUwMjk1MGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWVDbGllbnQuaApAQCAtMTI4LDYgKzEyOCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2V0TWVudWJhclZpc2libGUoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBtZW51
YmFyVmlzaWJsZSgpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBoaWRlTG9jYXRpb25CYXIoKSB7
IH07CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzaXphYmxlKGJvb2wpID0gMDsKIAogICAgIHZp
cnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZUlEKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggM2YyNmIx
MTQ3ZjE1NmM5YjUzNDkxMTY0MDQ2NWNjMjhlNjNkNzA3Ni4uOGEyZWQyZjZhOWY1NjEyNzIyYTMx
NWE1YTZmZWZjNDNjY2Y5ODQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtNTcs
NiArNTcsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCisjaW5jbHVkZSAi
RmVhdHVyZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9j
dXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTE0MzYsNiArMTQzNywxOSBA
QCB2b2lkIERPTVdpbmRvdzo6c2Nyb2xsVG8oaW50IHgsIGludCB5KSBjb25zdAogCiAgICAgSW50
UG9pbnQgbGF5b3V0UG9zKHZpZXctPm1hcEZyb21DU1NUb0xheW91dFVuaXRzKHgpLCB2aWV3LT5t
YXBGcm9tQ1NTVG9MYXlvdXRVbml0cyh5KSk7CiAgICAgdmlldy0+c2V0U2Nyb2xsUG9zaXRpb24o
bGF5b3V0UG9zKTsKKworICAgIGlmICgheCAmJiAoIXkgfHwgeSA9PSAxKSkgeworICAgICAgICBG
ZWF0dXJlT2JzZXJ2ZXI6Om9ic2VydmUoZG9jdW1lbnQoKSwgRmVhdHVyZU9ic2VydmVyOjpXaW5k
b3dTY3JvbGxUb1plcm9PbmVPclplcm8pOworCisgICAgICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1l
LT5wYWdlKCk7CisgICAgICAgIGlmICghcGFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAobV9mcmFtZSAhPSBwYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBwYWdlLT5jaHJvbWUoKS0+aGlkZUxvY2F0aW9uQmFyKCk7CisgICAgfQog
fQogCiB2b2lkIERPTVdpbmRvdzo6bW92ZUJ5KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZlYXR1cmVPYnNlcnZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GZWF0dXJlT2JzZXJ2ZXIuaAppbmRleCA3MWY3YThhNWQ3YzIyYTIzZmFhNDVj
MzViMGI2Yzg2Y2QxNDhkNDNmLi45MmFlZmRlYTgwYjAyM2ZiZmJiNzc0OGM2NjNiMDFmYzMxYzU5
NmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZlYXR1cmVPYnNlcnZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRmVhdHVyZU9ic2VydmVyLmgKQEAgLTk2LDYgKzk2LDcg
QEAgcHVibGljOgogICAgICAgICBSZXN1bHRzQXR0cmlidXRlLAogICAgICAgICBTdGVwQXR0cmli
dXRlLAogICAgICAgICBQYWdlVmlzaXRzLAorICAgICAgICBXaW5kb3dTY3JvbGxUb1plcm9PbmVP
clplcm8sCiAgICAgICAgIC8vIEFkZCBuZXcgZmVhdHVyZXMgYWJvdmUgdGhpcyBsaW5lLiBEb24n
dCBjaGFuZ2UgYXNzaWduZWQgbnVtYmVycyBvZiBlYWNoIGl0ZW1zLgogICAgICAgICBOdW1iZXJP
ZkZlYXR1cmVzLCAvLyBUaGlzIGVudW0gdmFsdWUgbXVzdCBiZSBsYXN0LgogICAgIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXaWRnZXRDbGllbnQuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCmluZGV4IGZh
OWQzZDhmYTM2YmNiMzYyODlkNzBmMjk0ODNkZjdkOWY0ZTM1MjMuLmQwYjQ5MmQyYmNiNGU0MmFm
NWFiYWMzMjQxZWFmODI1NWFkY2M5MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYldpZGdldENsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYldpZGdldENsaWVudC5oCkBAIC0xNzAsNiArMTcwLDkgQEAgcHVibGljOgogICAg
IC8vIENhbGxlZCB3aGVuIGEgZ2VzdHVyZSBldmVudCBpcyBoYW5kbGVkLgogICAgIHZpcnR1YWwg
dm9pZCBkaWRIYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBldmVudCwg
Ym9vbCBldmVudENhbmNlbGxlZCkgeyB9CiAKKyAgICAvLyBDYWxsZWQgd2hlbiBXZWJLaXQgcmVx
dWVzdHMgdGhlIHRvcCBjb250cm9scyB0byBiZSBoaWRkZW4uCisgICAgdmlydHVhbCB2b2lkIGhp
ZGVUb3BDb250cm9scygpIHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgfldlYldpZGdldENsaWVudCgp
IHsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNs
aWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5jcHAKaW5kZXggYjExMDg5M2RkNTM3OGU2OGU5ODFjMjFjNDg2Y2M5ZTEyNzRjMDVjMi4uMWFi
ZTE5OGI0ZTFhODM5MTIzYjhiNmZkNjhjY2RjNjhhMGFhOTQzZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKQEAgLTM4Niw2ICszODYsMTEg
QEAgYm9vbCBDaHJvbWVDbGllbnRJbXBsOjptZW51YmFyVmlzaWJsZSgpCiAgICAgcmV0dXJuIG1f
bWVudWJhclZpc2libGU7CiB9CiAKK3ZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6aGlkZUxvY2F0aW9u
QmFyKCkKK3sKKyAgICBtX3dlYlZpZXctPmhpZGVMb2NhdGlvbkJhcigpOworfQorCiB2b2lkIENo
cm9tZUNsaWVudEltcGw6OnNldFJlc2l6YWJsZShib29sIHZhbHVlKQogewogICAgIG1fcmVzaXph
YmxlID0gdmFsdWU7CkBAIC0xMTYxLDQgKzExNjYsNiBAQCB2b2lkIE5hdmlnYXRvckNvbnRlbnRV
dGlsc0NsaWVudEltcGw6OnJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyKGNvbnN0IFN0cmluZyYgc2No
ZQogfSAKICNlbmRpZgogCisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKaW5kZXggODQwN2FjYzY5NTM5NDYz
NGEyNzgzNjA0YTBhOGFiOWViYWM1ZjExZC4uNjBhOTU0ZTcxOTVjZjI5MDAxNDBhNjExMWJmOTM3
Zjk0MDQ2MmFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21l
Q2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVu
dEltcGwuaApAQCAtOTYsNiArOTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNjcm9s
bGJhcnNWaXNpYmxlKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE1lbnViYXJWaXNpYmxlKGJvb2wp
OwogICAgIHZpcnR1YWwgYm9vbCBtZW51YmFyVmlzaWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBo
aWRlTG9jYXRpb25CYXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzaXphYmxlKGJvb2wpOwog
ICAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKAogICAgICAgICBXZWJDb3JlOjpN
ZXNzYWdlU291cmNlLCBXZWJDb3JlOjpNZXNzYWdlTGV2ZWwsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggYWQzZWQ0MWUzMzNiNjg0MGQzMzVhYjI2YmM4
YjA2MTg5ODVjZDdjNi4uZTE1NzAzOWYxNzVlMjBkNmE0MzNiYmVjMDhhMDVmYTAwOGVlOWNjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtNDU4LDYg
KzQ1OCw3IEBAIFdlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQp
CiAgICAgLCBtX3Nob3dQYWludFJlY3RzKGZhbHNlKQogICAgICwgbV9zaG93RGVidWdCb3JkZXJz
KGZhbHNlKQogICAgICwgbV9jb250aW51b3VzUGFpbnRpbmdFbmFibGVkKGZhbHNlKQorICAgICwg
bV90b3BDb250cm9sc0hlaWdodCg5NikKIHsKICAgICAvLyBXZWJLaXQvd2luL1dlYlZpZXcuY3Bw
IGRvZXMgdGhlIHNhbWUgdGhpbmcsIGV4Y2VwdCB0aGV5IGNhbGwgdGhlCiAgICAgLy8gS0pTIHNw
ZWNpZmljIHdyYXBwZXIgYXJvdW5kIHRoaXMgbWV0aG9kLiBXZSBuZWVkIHRvIGhhdmUgdGhyZWFk
aW5nCkBAIC00MjM2LDYgKzQyMzcsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjphcHBseVNjcm9sbEFu
ZFNjYWxlKGNvbnN0IFdlYlNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBwYWdlU2NhbAogICAgIGlm
ICghbWFpbkZyYW1lSW1wbCgpIHx8ICFtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpKQogICAg
ICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogQWxzbyByZWNlaXZlIHRoZSB2YWx1ZSBvZiBt
X3RvcENvbnRyb2xzSGVpZ2h0LgorCiAgICAgaWYgKHBhZ2VTY2FsZURlbHRhID09IDEpIHsKICAg
ICAgICAgVFJBQ0VfRVZFTlRfSU5TVEFOVDIoIndlYmtpdCIsICJXZWJWaWV3SW1wbDo6YXBwbHlT
Y3JvbGxBbmRTY2FsZTo6c2Nyb2xsQnkiLCAieCIsIHNjcm9sbERlbHRhLndpZHRoLCAieSIsIHNj
cm9sbERlbHRhLmhlaWdodCk7CiAgICAgICAgIG1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCkt
PnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKQEAgLTQ0NDQsNCArNDQ0NywyMCBAQCBib29sIFdlYlZp
ZXdJbXBsOjpzaG91bGREaXNhYmxlRGVza3RvcFdvcmthcm91bmRzKCkKICAgICAgICAgfHwgKGFy
Z3VtZW50cy5taW5ab29tID09IGFyZ3VtZW50cy5tYXhab29tICYmIGFyZ3VtZW50cy5taW5ab29t
ICE9IFZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG8pOwogfQogCit2b2lkIFdlYlZpZXdJbXBs
OjpoaWRlTG9jYXRpb25CYXIoKQoreworICAgIC8vIFdlYktpdCBoYXMgcmVxdWVzdGVkIHRvIGhp
ZGUgdGhlIGxvY2F0aW9uIGJhci4gVGhpcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBlZmZlY3QKKyAg
ICAvLyBhcyBpZiB0aGUgdXNlciBzY3JvbGxlZCBkb3duIHRvIGhpZGUgdGhlIGxvY2F0aW9uIGJh
ci4gCisgICAgLy8gVGhlIGlkZWEgaXMgdG8gZ2V0IHRoZSB0b3Agb2YgdGhlIHNjcmVlbiBzaG93
aW5nIHRoZSBnaXZlbiBzY3JvbGwgb2Zmc2V0LAorICAgIC8vIGlmIHBvc3NpYmxlLiBUaGlzIGlz
bid0IHBvc3NpYmxlIGlmIHRoZSBkb2N1bWVudCBpc24ndCBiaWcgZW5vdWdoLiBXZSBhc3N1bWUK
KyAgICAvLyB0aGF0IHRoZSBsb2NhdGlvbiBiYXIgaXMgc2hvd2luZyBmb3IgdGhpcyBjaGVjaywg
c2luY2UgaGlkaW5nIGl0IGlzIGlkZW1wb3RlbnQuCisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IG1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCk7ICAKKyAgICBpbnQgbWluQ29udGVudEhl
aWdodEZvclNjcm9sbCA9IGZyYW1lVmlldy0+dmlzaWJsZUhlaWdodCgpICsgbV90b3BDb250cm9s
c0hlaWdodDsKKyAgICBpZiAoZnJhbWVWaWV3LT5jb250ZW50c0hlaWdodCgpIDwgbWluQ29udGVu
dEhlaWdodEZvclNjcm9sbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQtPmhpZGVU
b3BDb250cm9scygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGNjNGI5NjZlZDY3ZTc5OGE0YTIyZDg4YzFi
ZGViOGFlM2VhODM2Y2MuLjY4MGNhOGI1YThhNjU5Yzk1YTJhMjc5M2IzMGY0NmQ3ZjczZGExODYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtNjE5LDYgKzYx
OSw4IEBAIHB1YmxpYzoKIAogICAgIFdlYlNldHRpbmdzSW1wbCogc2V0dGluZ3NJbXBsKCk7CiAK
KyAgICB2b2lkIGhpZGVMb2NhdGlvbkJhcigpOworCiBwcml2YXRlOgogICAgIHZvaWQgY29tcHV0
ZVBhZ2VTY2FsZUZhY3RvckxpbWl0cygpOwogICAgIGZsb2F0IGNsYW1wUGFnZVNjYWxlRmFjdG9y
VG9MaW1pdHMoZmxvYXQgc2NhbGUpOwpAQCAtOTExLDYgKzkxMyw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3Nob3dQYWludFJlY3RzOwogICAgIGJvb2wgbV9zaG93RGVidWdCb3JkZXJzOwogICAg
IGJvb2wgbV9jb250aW51b3VzUGFpbnRpbmdFbmFibGVkOworCisgICAgaW50IG1fdG9wQ29udHJv
bHNIZWlnaHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="210677"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>