<?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>138090</bug_id>
          
          <creation_ts>2014-10-27 04:09:56 -0700</creation_ts>
          <short_desc>[GTK] Minibrowser: Add support for zoom using Control Key + Mouse scroll</short_desc>
          <delta_ts>2014-11-25 05:47:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tanay">tanay.c</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1044226</commentid>
    <comment_count>0</comment_count>
    <who name="Tanay">tanay.c</who>
    <bug_when>2014-10-27 04:09:56 -0700</bug_when>
    <thetext>Supporting the following behaviour in GTK Minibrowser
1) Control key + Mouse scroll up -- Zoom in
2) Control key + Mouse scroll down -- Zoom out</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044227</commentid>
    <comment_count>1</comment_count>
      <attachid>240474</attachid>
    <who name="Tanay">tanay.c</who>
    <bug_when>2014-10-27 04:14:30 -0700</bug_when>
    <thetext>Created attachment 240474
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048296</commentid>
    <comment_count>2</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2014-11-12 16:23:32 -0800</bug_when>
    <thetext>CC&apos;ing Martin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048299</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-11-12 16:30:07 -0800</bug_when>
    <thetext>Is there already a way to zoom in MiniBrowser? I don&apos;t think we should be adding features just for the sake of adding features. It should be &quot;mini.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048343</commentid>
    <comment_count>4</comment_count>
    <who name="Tanay">tanay.c</who>
    <bug_when>2014-11-12 21:54:29 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Is there already a way to zoom in MiniBrowser? I don&apos;t think we should be
&gt; adding features just for the sake of adding features. It should be &quot;mini.&quot;

Yes, there is zoom support in the Minibrowser via keyboard &amp; softkeys. However, scroll with mouse to zoom seems more intuitive way to zoom and is a functionality present in all major browsers, hence it would be a good addition to GTK. 
Also it gives a good way to use/test gdk event API&apos;s for scroll direction and state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048366</commentid>
    <comment_count>5</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-11-13 00:08:38 -0800</bug_when>
    <thetext>If you want to test GTK features in a full blown WebKitGTK browser I suggest one called Epiphany.

MiniBrowser doesn&apos;t need new features, it should remain... minimal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048371</commentid>
    <comment_count>6</comment_count>
      <attachid>240474</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-11-13 00:40:11 -0800</bug_when>
    <thetext>Comment on attachment 240474
Patch

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

I don&apos;t see the problem of having this in MiniBrowser, I have some comments about the patch, though.

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:447
&gt; +static void mouseZoomCallback(BrowserWindow *window, const GdkEvent *event)

This is actually the scroll-event callback, that is used to implement zoom, I would call this scrollEventCallback instead. The function is boolean not void.

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:454
&gt; +    gdk_event_get_scroll_direction(event, &amp;direction);
&gt; +    gdk_event_get_state(event, &amp;state);

You could simply cast to GdkEventScroll or event change the function parameter to receive a GdkEventScroll directly, and then you can use event-&gt;state and event-&gt;direction directly.

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:456
&gt; +    if (direction == GDK_SCROLL_UP &amp;&amp; state == GDK_CONTROL_MASK) {

Instead of checking the state all the time, we can just return early when the state != GDK_CONTROL_MASK.

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:459
&gt; +            zoomLevel = webkit_web_view_get_zoom_level(window-&gt;webView) * zoomStep;
&gt; +            webkit_web_view_set_zoom_level(window-&gt;webView, zoomLevel);

This is duplicated in zoomInCallback, we could move this to a function browser_window_zoom_in() for example and call it from here and zoomInCallback()

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:466
&gt; +            zoomLevel = webkit_web_view_get_zoom_level(window-&gt;webView) / zoomStep;
&gt; +            webkit_web_view_set_zoom_level(window-&gt;webView, zoomLevel);

And the same here.

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:468
&gt; +    }

You should probably handle the other direction, including GDK_SCROLL_SMOOTH, a switch would look much better than ifs, I think

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:469
&gt; +}

You should return TRUE when you have handled the event and FALSE otherwise to propagate the event.

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:790
&gt; +    g_signal_connect(window, &quot;scroll_event&quot;, G_CALLBACK(mouseZoomCallback), window);

scroll_event -&gt; scroll-event. It doesn&apos;t make sense to pass the instance pointer as user data and you are not even handling the user data in the callback. I think it would be better if you implement the scroll_event vmethod of GtkWidgetClass instead of connecting to the signal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048382</commentid>
    <comment_count>7</comment_count>
      <attachid>240474</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-11-13 02:55:56 -0800</bug_when>
    <thetext>Comment on attachment 240474
Patch

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

&gt;&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:790
&gt;&gt; +    g_signal_connect(window, &quot;scroll_event&quot;, G_CALLBACK(mouseZoomCallback), window);
&gt; 
&gt; scroll_event -&gt; scroll-event. It doesn&apos;t make sense to pass the instance pointer as user data and you are not even handling the user data in the callback. I think it would be better if you implement the scroll_event vmethod of GtkWidgetClass instead of connecting to the signal.

hmm, but we don&apos;t want to connect to the window scroll event, but to the web view scroll event instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048383</commentid>
    <comment_count>8</comment_count>
    <who name="Tanay">tanay.c</who>
    <bug_when>2014-11-13 03:10:53 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 240474 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240474&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:790
&gt; &gt;&gt; +    g_signal_connect(window, &quot;scroll_event&quot;, G_CALLBACK(mouseZoomCallback), window);
&gt; &gt; 
&gt; &gt; scroll_event -&gt; scroll-event. It doesn&apos;t make sense to pass the instance pointer as user data and you are not even handling the user data in the callback. I think it would be better if you implement the scroll_event vmethod of GtkWidgetClass instead of connecting to the signal.
&gt; 
&gt; hmm, but we don&apos;t want to connect to the window scroll event, but to the web
&gt; view scroll event instead.

We are connecting to the scroll event for the window. The zoom API webkit_webview_set_zoom_level() acts on the window-&gt;webview. 
As per your review comment I am using the GDKEventScroll so I do not need to pass window as user data and will pass NULL instead. I will incorporate the other review comments and upload a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048384</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-11-13 03:14:24 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Comment on attachment 240474 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=240474&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:790
&gt; &gt; &gt;&gt; +    g_signal_connect(window, &quot;scroll_event&quot;, G_CALLBACK(mouseZoomCallback), window);
&gt; &gt; &gt; 
&gt; &gt; &gt; scroll_event -&gt; scroll-event. It doesn&apos;t make sense to pass the instance pointer as user data and you are not even handling the user data in the callback. I think it would be better if you implement the scroll_event vmethod of GtkWidgetClass instead of connecting to the signal.
&gt; &gt; 
&gt; &gt; hmm, but we don&apos;t want to connect to the window scroll event, but to the web
&gt; &gt; view scroll event instead.
&gt; 
&gt; We are connecting to the scroll event for the window. The zoom API
&gt; webkit_webview_set_zoom_level() acts on the window-&gt;webview. 
&gt; As per your review comment I am using the GDKEventScroll so I do not need to
&gt; pass window as user data and will pass NULL instead. I will incorporate the
&gt; other review comments and upload a patch.

But you don&apos;t want to zoom the view when scrolling in the toolbar for example</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048387</commentid>
    <comment_count>10</comment_count>
    <who name="Tanay">tanay.c</who>
    <bug_when>2014-11-13 03:50:20 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; Comment on attachment 240474 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=240474&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:790
&gt; &gt; &gt; &gt;&gt; +    g_signal_connect(window, &quot;scroll_event&quot;, G_CALLBACK(mouseZoomCallback), window);
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; scroll_event -&gt; scroll-event. It doesn&apos;t make sense to pass the instance pointer as user data and you are not even handling the user data in the callback. I think it would be better if you implement the scroll_event vmethod of GtkWidgetClass instead of connecting to the signal.
&gt; &gt; &gt; 
&gt; &gt; &gt; hmm, but we don&apos;t want to connect to the window scroll event, but to the web
&gt; &gt; &gt; view scroll event instead.
&gt; &gt; 
&gt; &gt; We are connecting to the scroll event for the window. The zoom API
&gt; &gt; webkit_webview_set_zoom_level() acts on the window-&gt;webview. 
&gt; &gt; As per your review comment I am using the GDKEventScroll so I do not need to
&gt; &gt; pass window as user data and will pass NULL instead. I will incorporate the
&gt; &gt; other review comments and upload a patch.
&gt; 
&gt; But you don&apos;t want to zoom the view when scrolling in the toolbar for example

I just tried to connect to the WebKitWebView &apos;scroll-event&apos; signal and I am only getting a event-&gt;direction value of &apos;4&apos; for up and down scroll. This is corresponding to GDK_SMOOTH_SCROLL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048388</commentid>
    <comment_count>11</comment_count>
    <who name="Tanay">tanay.c</who>
    <bug_when>2014-11-13 04:04:06 -0800</bug_when>
    <thetext>Since I recieve only one scroll direction value in this case (WebKitWebView) it is not possible to differentiate between the events. Connecting to window scroll events does not cause any issues as per my testing. Please do let me know your inputs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048395</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-11-13 05:04:44 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; Comment on attachment 240474 [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=240474&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt;&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:790
&gt; &gt; &gt; &gt; &gt;&gt; +    g_signal_connect(window, &quot;scroll_event&quot;, G_CALLBACK(mouseZoomCallback), window);
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; scroll_event -&gt; scroll-event. It doesn&apos;t make sense to pass the instance pointer as user data and you are not even handling the user data in the callback. I think it would be better if you implement the scroll_event vmethod of GtkWidgetClass instead of connecting to the signal.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; hmm, but we don&apos;t want to connect to the window scroll event, but to the web
&gt; &gt; &gt; &gt; view scroll event instead.
&gt; &gt; &gt; 
&gt; &gt; &gt; We are connecting to the scroll event for the window. The zoom API
&gt; &gt; &gt; webkit_webview_set_zoom_level() acts on the window-&gt;webview. 
&gt; &gt; &gt; As per your review comment I am using the GDKEventScroll so I do not need to
&gt; &gt; &gt; pass window as user data and will pass NULL instead. I will incorporate the
&gt; &gt; &gt; other review comments and upload a patch.
&gt; &gt; 
&gt; &gt; But you don&apos;t want to zoom the view when scrolling in the toolbar for example
&gt; 
&gt; I just tried to connect to the WebKitWebView &apos;scroll-event&apos; signal and I am
&gt; only getting a event-&gt;direction value of &apos;4&apos; for up and down scroll. This is
&gt; corresponding to GDK_SMOOTH_SCROLL.

Yes, that&apos;s because the web view has the GDK_SMOOTH_SCROLL_MASK in its event mask. You should handle GDK_SMOOTH_SCROLL as I suggested previously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048396</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-11-13 05:05:25 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Since I recieve only one scroll direction value in this case (WebKitWebView)
&gt; it is not possible to differentiate between the events. Connecting to window
&gt; scroll events does not cause any issues as per my testing. Please do let me
&gt; know your inputs.

Does not cause any issues doesn&apos;t mean it&apos;s correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048397</commentid>
    <comment_count>14</comment_count>
      <attachid>240474</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-11-13 05:09:21 -0800</bug_when>
    <thetext>Comment on attachment 240474
Patch

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

&gt;&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:456
&gt;&gt; +    if (direction == GDK_SCROLL_UP &amp;&amp; state == GDK_CONTROL_MASK) {
&gt; 
&gt; Instead of checking the state all the time, we can just return early when the state != GDK_CONTROL_MASK.

The state comparison is also wrong, since state is a bitmask you have to compare with the mask (gtk_accelerator_get_default_mod_mask()) if (state &amp; mask == GDK_CONTROL_MASK)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048654</commentid>
    <comment_count>15</comment_count>
      <attachid>241552</attachid>
    <who name="Tanay">tanay.c</who>
    <bug_when>2014-11-13 21:21:37 -0800</bug_when>
    <thetext>Created attachment 241552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048655</commentid>
    <comment_count>16</comment_count>
    <who name="Tanay">tanay.c</who>
    <bug_when>2014-11-13 21:26:42 -0800</bug_when>
    <thetext>Thanks for the inputs.
Uploaded patch with review comments and changes for: 
1) Connecting to WebView scroll event
2) Using the GdkEventScroll -&gt; delta_y values to determine scroll direction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050950</commentid>
    <comment_count>17</comment_count>
    <who name="Tanay">tanay.c</who>
    <bug_when>2014-11-24 22:59:21 -0800</bug_when>
    <thetext>Reminder to review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050953</commentid>
    <comment_count>18</comment_count>
      <attachid>241552</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-11-24 23:38:55 -0800</bug_when>
    <thetext>Comment on attachment 241552
Patch

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

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:448
&gt; +static void browser_window_zoom_in(BrowserWindow *window)

Private methods should follow the WebKit coding style, this should be browserWindowZoomIn

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:456
&gt; +static void browser_window_zoom_out(BrowserWindow *window)

Ditto.

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:470
&gt; +        return isEventHandled;

This is the only place where we return FALSE, so I think we don&apos;t need the local variable, simply return FALSE here directly and TRUE after the if

&gt; Tools/MiniBrowser/gtk/BrowserWindow.c:480
&gt; +    return isEventHandled;

This is always TRUE at this point due to the early return. But the event was actually handled only if the zoom happened. You could make zoom in/out functions bool and return False when the view can&apos;t zoom, and return that value directly here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050974</commentid>
    <comment_count>19</comment_count>
      <attachid>242191</attachid>
    <who name="Tanay">tanay.c</who>
    <bug_when>2014-11-25 02:27:32 -0800</bug_when>
    <thetext>Created attachment 242191
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050980</commentid>
    <comment_count>20</comment_count>
      <attachid>242191</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-11-25 03:47:13 -0800</bug_when>
    <thetext>Comment on attachment 242191
Patch

Ok, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050984</commentid>
    <comment_count>21</comment_count>
      <attachid>242191</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-25 05:47:52 -0800</bug_when>
    <thetext>Comment on attachment 242191
Patch

Clearing flags on attachment: 242191

Committed r176539: &lt;http://trac.webkit.org/changeset/176539&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050985</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-25 05:47:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240474</attachid>
            <date>2014-10-27 04:14:30 -0700</date>
            <delta_ts>2014-11-13 21:21:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138090-20141027164504.patch</filename>
            <type>text/plain</type>
            <size>2627</size>
            <attacher name="Tanay">tanay.c</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE3NTIxNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDE0LTEwLTI3ICBUYW5heSBDICA8dGFuYXkuY0BzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBbR1RLXSBNaW5pYnJvd3NlcjogQWRkIHN1cHBvcnQgZm9yIHpvb20gdXNpbmcgQ29u
dHJvbCBLZXkgKyBNb3VzZSBzY3JvbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzODA5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYzogQWRkZWQg
aW1wbGVtZW50YXRpb24gZm9yIHpvb20gdXNpbmcgbW91c2Ugc2Nyb2xsICsgY29udHJvbCBrZXkK
KyAgICAgICAgKG1vdXNlWm9vbUNhbGxiYWNrKTogQWRkZWQuCisgICAgICAgIChicm93c2VyV2lu
ZG93Q29uc3RydWN0ZWQpOiBNb2RpZmllZC4gCisKIDIwMTQtMTAtMjUgIFJhbmllcmUgU2lsdmEg
IDxyYW5pZXJlQGltZS51bmljYW1wLmJyPgogCiAgICAgICAgIEZpeCBsaW5rIHRvIEFyY2ggTGlu
dXggV2lraQpJbmRleDogVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCShyZXZpc2lv
biAxNzQ5MjMpCisrKyBUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NDQsNiArNDQ0LDMwIEBAIHN0YXRpYyBnYm9vbGVhbiBicm93c2VyV2lu
ZG93Q2FuWm9vbU91dCgKICAgICByZXR1cm4gem9vbUxldmVsID4gbWluaW11bVpvb21MZXZlbDsK
IH0KIAorc3RhdGljIHZvaWQgbW91c2Vab29tQ2FsbGJhY2soQnJvd3NlcldpbmRvdyAqd2luZG93
LCBjb25zdCBHZGtFdmVudCAqZXZlbnQpCit7CisgICAgR2RrU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbjsKKyAgICBHZGtNb2RpZmllclR5cGUgc3RhdGU7CisgICAgZ2RvdWJsZSB6b29tTGV2ZWw7
CisgICAgCisgICAgZ2RrX2V2ZW50X2dldF9zY3JvbGxfZGlyZWN0aW9uKGV2ZW50LCAmZGlyZWN0
aW9uKTsKKyAgICBnZGtfZXZlbnRfZ2V0X3N0YXRlKGV2ZW50LCAmc3RhdGUpOworICAgIAorICAg
IGlmIChkaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9VUCAmJiBzdGF0ZSA9PSBHREtfQ09OVFJPTF9N
QVNLKSB7CisgICAgICAgIGlmIChicm93c2VyV2luZG93Q2FuWm9vbUluKHdpbmRvdykpIHsKKyAg
ICAgICAgICAgIHpvb21MZXZlbCA9IHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCh3aW5k
b3ctPndlYlZpZXcpICogem9vbVN0ZXA7CisgICAgICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0
X3pvb21fbGV2ZWwod2luZG93LT53ZWJWaWV3LCB6b29tTGV2ZWwpOworICAgICAgICB9IAorICAg
IH0KKworICAgIGlmIChkaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9ET1dOICYmIHN0YXRlID09IEdE
S19DT05UUk9MX01BU0spIHsKKyAgICAgICAgaWYgKGJyb3dzZXJXaW5kb3dDYW5ab29tT3V0KHdp
bmRvdykpIHsKKyAgICAgICAgICAgIHpvb21MZXZlbCA9IHdlYmtpdF93ZWJfdmlld19nZXRfem9v
bV9sZXZlbCh3aW5kb3ctPndlYlZpZXcpIC8gem9vbVN0ZXA7CisgICAgICAgICAgICB3ZWJraXRf
d2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwod2luZG93LT53ZWJWaWV3LCB6b29tTGV2ZWwpOworICAg
ICAgICB9CisgICAgfQorfQorCiBzdGF0aWMgdm9pZCBicm93c2VyV2luZG93VXBkYXRlWm9vbUFj
dGlvbnMoQnJvd3NlcldpbmRvdyAqd2luZG93KQogewogICAgIGd0a193aWRnZXRfc2V0X3NlbnNp
dGl2ZSh3aW5kb3ctPnpvb21Jbkl0ZW0sIGJyb3dzZXJXaW5kb3dDYW5ab29tSW4od2luZG93KSk7
CkBAIC03NjMsNiArNzg3LDcgQEAgc3RhdGljIHZvaWQgYnJvd3NlcldpbmRvd0NvbnN0cnVjdGVk
KEdPYgogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LT53ZWJWaWV3LCAibGVhdmUtZnVsbHNj
cmVlbiIsIEdfQ0FMTEJBQ0sod2ViVmlld0xlYXZlRnVsbFNjcmVlbiksIHdpbmRvdyk7CiAgICAg
Z19zaWduYWxfY29ubmVjdCh3aW5kb3ctPndlYlZpZXcsICJub3RpZnk6OmlzLWxvYWRpbmciLCBH
X0NBTExCQUNLKHdlYlZpZXdJc0xvYWRpbmdDaGFuZ2VkKSwgd2luZG93KTsKIAorICAgIGdfc2ln
bmFsX2Nvbm5lY3Qod2luZG93LCAic2Nyb2xsX2V2ZW50IiwgR19DQUxMQkFDSyhtb3VzZVpvb21D
YWxsYmFjayksIHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2NvbnRleHQod2luZG93LT53ZWJWaWV3KSwgImRvd25sb2FkLXN0YXJ0ZWQiLCBHX0NBTExC
QUNLKGRvd25sb2FkU3RhcnRlZCksIHdpbmRvdyk7CiAKICAgICB3aW5kb3ctPnNlYXJjaEJhciA9
IEJST1dTRVJfU0VBUkNIX0JBUihicm93c2VyX3NlYXJjaF9iYXJfbmV3KHdpbmRvdy0+d2ViVmll
dykpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241552</attachid>
            <date>2014-11-13 21:21:37 -0800</date>
            <delta_ts>2014-11-25 02:27:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138090-20141114105209.patch</filename>
            <type>text/plain</type>
            <size>3775</size>
            <attacher name="Tanay">tanay.c</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE3NjExNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4IEBACisyMDE0LTExLTEzICBUYW5heSBDICA8dGFuYXkuY0BzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBbR1RLXSBNaW5pYnJvd3NlcjogQWRkIHN1cHBvcnQgZm9yIHpvb20gdXNpbmcgQ29u
dHJvbCBLZXkgKyBNb3VzZSBzY3JvbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzODA5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYzogSW1wbGVt
ZW50aW5nIHpvb20gdXNpbmcgQ250cmwgKyBNb3VzZSBzY3JvbGwKKyAgICAgICAgKGJyb3dzZXJf
d2luZG93X3pvb21faW4pOiBBZGRlZC4KKyAgICAgICAgKGJyb3dzZXJfd2luZG93X3pvb21fb3V0
KTogQWRkZWQuCisgICAgICAgIChzY3JvbGxFdmVudENhbGxiYWNrKTogQWRkZWQuCisgICAgICAg
ICh6b29tSW5DYWxsYmFjayk6IE1vZGlmaWVkLgorICAgICAgICAoem9vbU91dENhbGxiYWNrKTog
TW9kaWZpZWQuCisgICAgICAgIChicm93c2VyV2luZG93Q29uc3RydWN0ZWQpOiBNb2RpZmllZC4K
KwogMjAxNC0xMS0xMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4NjI4CkluZGV4
OiBUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmMJKHJldmlzaW9uIDE3NTQ2NikKKysr
IFRvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmMJKHdvcmtpbmcgY29weSkKQEAg
LTQ0NSw2ICs0NDUsNDEgQEAgc3RhdGljIGdib29sZWFuIGJyb3dzZXJXaW5kb3dDYW5ab29tT3V0
KAogICAgIHJldHVybiB6b29tTGV2ZWwgPiBtaW5pbXVtWm9vbUxldmVsOwogfQogCitzdGF0aWMg
dm9pZCBicm93c2VyX3dpbmRvd196b29tX2luKEJyb3dzZXJXaW5kb3cgKndpbmRvdykKK3sKKyAg
ICBpZiAoYnJvd3NlcldpbmRvd0Nhblpvb21Jbih3aW5kb3cpKSB7CisgICAgICAgIGdkb3VibGUg
em9vbUxldmVsID0gd2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHdpbmRvdy0+d2ViVmll
dykgKiB6b29tU3RlcDsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsKHdp
bmRvdy0+d2ViVmlldywgem9vbUxldmVsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGJyb3dz
ZXJfd2luZG93X3pvb21fb3V0KEJyb3dzZXJXaW5kb3cgKndpbmRvdykKK3sKKyAgICBpZiAoYnJv
d3NlcldpbmRvd0Nhblpvb21PdXQod2luZG93KSkgeworICAgICAgICBnZG91YmxlIHpvb21MZXZl
bCA9IHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCh3aW5kb3ctPndlYlZpZXcpIC8gem9v
bVN0ZXA7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCh3aW5kb3ctPndl
YlZpZXcsIHpvb21MZXZlbCk7CisgICAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gc2Nyb2xsRXZl
bnRDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBjb25zdCBHZGtFdmVudFNjcm9sbCAq
ZXZlbnQsIEJyb3dzZXJXaW5kb3cgKndpbmRvdykKK3sKKyAgICBnYm9vbGVhbiBpc0V2ZW50SGFu
ZGxlZCA9IEZBTFNFOworICAgIEdka01vZGlmaWVyVHlwZSBtb2QgPSBndGtfYWNjZWxlcmF0b3Jf
Z2V0X2RlZmF1bHRfbW9kX21hc2soKTsKKworICAgIGlmICgoZXZlbnQtPnN0YXRlICYgbW9kKSAh
PSBHREtfQ09OVFJPTF9NQVNLKQorICAgICAgICByZXR1cm4gaXNFdmVudEhhbmRsZWQ7CisgICAg
CisgICAgaWYgKGV2ZW50LT5kZWx0YV95IDwgMCkgeworICAgICAgICBicm93c2VyX3dpbmRvd196
b29tX2luKHdpbmRvdyk7CisgICAgICAgIGlzRXZlbnRIYW5kbGVkID0gVFJVRTsKKyAgICB9IGVs
c2UgeworICAgICAgICBicm93c2VyX3dpbmRvd196b29tX291dCh3aW5kb3cpOworICAgICAgICBp
c0V2ZW50SGFuZGxlZCA9IFRSVUU7CisgICAgfQorCisgICAgcmV0dXJuIGlzRXZlbnRIYW5kbGVk
OworfQorCiBzdGF0aWMgdm9pZCBicm93c2VyV2luZG93VXBkYXRlWm9vbUFjdGlvbnMoQnJvd3Nl
cldpbmRvdyAqd2luZG93KQogewogICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSh3aW5kb3ct
Pnpvb21Jbkl0ZW0sIGJyb3dzZXJXaW5kb3dDYW5ab29tSW4od2luZG93KSk7CkBAIC01MDMsMTgg
KzUzOCwxMiBAQCBzdGF0aWMgZ2Jvb2xlYW4gaW5zcGVjdG9yV2FzQ2xvc2VkKFdlYktpCiAKIHN0
YXRpYyB2b2lkIHpvb21JbkNhbGxiYWNrKEJyb3dzZXJXaW5kb3cgKndpbmRvdykKIHsKLSAgICBp
ZiAoYnJvd3NlcldpbmRvd0Nhblpvb21Jbih3aW5kb3cpKSB7Ci0gICAgICAgIGdkb3VibGUgem9v
bUxldmVsID0gd2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHdpbmRvdy0+d2ViVmlldykg
KiB6b29tU3RlcDsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsKHdpbmRv
dy0+d2ViVmlldywgem9vbUxldmVsKTsKLSAgICB9CisgICAgYnJvd3Nlcl93aW5kb3dfem9vbV9p
bih3aW5kb3cpOwogfQogCiBzdGF0aWMgdm9pZCB6b29tT3V0Q2FsbGJhY2soQnJvd3NlcldpbmRv
dyAqd2luZG93KQogewotICAgIGlmIChicm93c2VyV2luZG93Q2FuWm9vbU91dCh3aW5kb3cpKSB7
Ci0gICAgICAgIGdkb3VibGUgem9vbUxldmVsID0gd2Via2l0X3dlYl92aWV3X2dldF96b29tX2xl
dmVsKHdpbmRvdy0+d2ViVmlldykgLyB6b29tU3RlcDsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3
X3NldF96b29tX2xldmVsKHdpbmRvdy0+d2ViVmlldywgem9vbUxldmVsKTsKLSAgICB9CisgICAg
YnJvd3Nlcl93aW5kb3dfem9vbV9vdXQod2luZG93KTsKIH0KIAogc3RhdGljIHZvaWQgZGVmYXVs
dFpvb21DYWxsYmFjayhCcm93c2VyV2luZG93ICp3aW5kb3cpCkBAIC03ODEsNiArODEwLDcgQEAg
c3RhdGljIHZvaWQgYnJvd3NlcldpbmRvd0NvbnN0cnVjdGVkKEdPYgogICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2luZG93LT53ZWJWaWV3LCAiZW50ZXItZnVsbHNjcmVlbiIsIEdfQ0FMTEJBQ0sod2Vi
Vmlld0VudGVyRnVsbFNjcmVlbiksIHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3aW5k
b3ctPndlYlZpZXcsICJsZWF2ZS1mdWxsc2NyZWVuIiwgR19DQUxMQkFDSyh3ZWJWaWV3TGVhdmVG
dWxsU2NyZWVuKSwgd2luZG93KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdy0+d2ViVmll
dywgIm5vdGlmeTo6aXMtbG9hZGluZyIsIEdfQ0FMTEJBQ0sod2ViVmlld0lzTG9hZGluZ0NoYW5n
ZWQpLCB3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LT53ZWJWaWV3LCAic2Ny
b2xsLWV2ZW50IiwgR19DQUxMQkFDSyhzY3JvbGxFdmVudENhbGxiYWNrKSwgd2luZG93KTsKIAog
ICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdpbmRvdy0+
d2ViVmlldyksICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWQp
LCB3aW5kb3cpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242191</attachid>
            <date>2014-11-25 02:27:32 -0800</date>
            <delta_ts>2014-11-25 05:47:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138090-20141125155817.patch</filename>
            <type>text/plain</type>
            <size>3706</size>
            <attacher name="Tanay">tanay.c</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE3NjUzOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4IEBACisyMDE0LTExLTI1ICBUYW5heSBDICA8dGFuYXkuY0BzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBbR1RLXSBNaW5pYnJvd3NlcjogQWRkIHN1cHBvcnQgZm9yIHpvb20gdXNpbmcgQ29u
dHJvbCBLZXkgKyBNb3VzZSBzY3JvbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzODA5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYzogSW1wbGVt
ZW50aW5nIHpvb20gdXNpbmcgQ250cmwgKyBNb3VzZSBzY3JvbGwKKyAgICAgICAgKGJyb3dzZXJX
aW5kb3dab29tSW4pOiBBZGRlZC4KKyAgICAgICAgKGJyb3dzZXJXaW5kb3dab29tT3V0KTogQWRk
ZWQuCisgICAgICAgIChzY3JvbGxFdmVudENhbGxiYWNrKTogQWRkZWQuCisgICAgICAgICh6b29t
SW5DYWxsYmFjayk6IE1vZGlmaWVkLgorICAgICAgICAoem9vbU91dENhbGxiYWNrKTogTW9kaWZp
ZWQuCisgICAgICAgIChicm93c2VyV2luZG93Q29uc3RydWN0ZWQpOiBNb2RpZmllZC4KKwogMjAx
NC0xMS0yNSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFtFRkxdIFJFR1JFU1NJT04ocjE3NjUxNCk6IEl0IG1hZGUgcGVyZm9ybWFuY2UgdGVzdHMgZmFp
bApJbmRleDogVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCShyZXZpc2lvbiAxNzY1
MzcpCisrKyBUb29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCSh3b3JraW5nIGNv
cHkpCkBAIC00NDUsNiArNDQ1LDM5IEBAIHN0YXRpYyBnYm9vbGVhbiBicm93c2VyV2luZG93Q2Fu
Wm9vbU91dCgKICAgICByZXR1cm4gem9vbUxldmVsID4gbWluaW11bVpvb21MZXZlbDsKIH0KIAor
c3RhdGljIGdib29sZWFuIGJyb3dzZXJXaW5kb3dab29tSW4oQnJvd3NlcldpbmRvdyAqd2luZG93
KQoreworICAgIGlmIChicm93c2VyV2luZG93Q2FuWm9vbUluKHdpbmRvdykpIHsKKyAgICAgICAg
Z2RvdWJsZSB6b29tTGV2ZWwgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwod2luZG93
LT53ZWJWaWV3KSAqIHpvb21TdGVwOworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21f
bGV2ZWwod2luZG93LT53ZWJWaWV3LCB6b29tTGV2ZWwpOworICAgICAgICByZXR1cm4gVFJVRTsK
KyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYnJvd3Nlcldp
bmRvd1pvb21PdXQoQnJvd3NlcldpbmRvdyAqd2luZG93KQoreworICAgIGlmIChicm93c2VyV2lu
ZG93Q2FuWm9vbU91dCh3aW5kb3cpKSB7CisgICAgICAgIGdkb3VibGUgem9vbUxldmVsID0gd2Vi
a2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHdpbmRvdy0+d2ViVmlldykgLyB6b29tU3RlcDsK
KyAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsKHdpbmRvdy0+d2ViVmlldywg
em9vbUxldmVsKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxT
RTsKK30KKworc3RhdGljIGdib29sZWFuIHNjcm9sbEV2ZW50Q2FsbGJhY2soV2ViS2l0V2ViVmll
dyAqd2ViVmlldywgY29uc3QgR2RrRXZlbnRTY3JvbGwgKmV2ZW50LCBCcm93c2VyV2luZG93ICp3
aW5kb3cpCit7CisgICAgR2RrTW9kaWZpZXJUeXBlIG1vZCA9IGd0a19hY2NlbGVyYXRvcl9nZXRf
ZGVmYXVsdF9tb2RfbWFzaygpOworCisgICAgaWYgKChldmVudC0+c3RhdGUgJiBtb2QpICE9IEdE
S19DT05UUk9MX01BU0spCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAKKyAgICBpZiAoZXZl
bnQtPmRlbHRhX3kgPCAwKQorICAgICAgICByZXR1cm4gYnJvd3NlcldpbmRvd1pvb21Jbih3aW5k
b3cpOworICAgIAorICAgIHJldHVybiBicm93c2VyV2luZG93Wm9vbU91dCh3aW5kb3cpOworfQor
CiBzdGF0aWMgdm9pZCBicm93c2VyV2luZG93VXBkYXRlWm9vbUFjdGlvbnMoQnJvd3NlcldpbmRv
dyAqd2luZG93KQogewogICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSh3aW5kb3ctPnpvb21J
bkl0ZW0sIGJyb3dzZXJXaW5kb3dDYW5ab29tSW4od2luZG93KSk7CkBAIC01MDMsMTggKzUzNiwx
MiBAQCBzdGF0aWMgZ2Jvb2xlYW4gaW5zcGVjdG9yV2FzQ2xvc2VkKFdlYktpCiAKIHN0YXRpYyB2
b2lkIHpvb21JbkNhbGxiYWNrKEJyb3dzZXJXaW5kb3cgKndpbmRvdykKIHsKLSAgICBpZiAoYnJv
d3NlcldpbmRvd0Nhblpvb21Jbih3aW5kb3cpKSB7Ci0gICAgICAgIGdkb3VibGUgem9vbUxldmVs
ID0gd2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHdpbmRvdy0+d2ViVmlldykgKiB6b29t
U3RlcDsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsKHdpbmRvdy0+d2Vi
Vmlldywgem9vbUxldmVsKTsKLSAgICB9CisgICAgYnJvd3NlcldpbmRvd1pvb21Jbih3aW5kb3cp
OwogfQogCiBzdGF0aWMgdm9pZCB6b29tT3V0Q2FsbGJhY2soQnJvd3NlcldpbmRvdyAqd2luZG93
KQogewotICAgIGlmIChicm93c2VyV2luZG93Q2FuWm9vbU91dCh3aW5kb3cpKSB7Ci0gICAgICAg
IGdkb3VibGUgem9vbUxldmVsID0gd2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKHdpbmRv
dy0+d2ViVmlldykgLyB6b29tU3RlcDsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29t
X2xldmVsKHdpbmRvdy0+d2ViVmlldywgem9vbUxldmVsKTsKLSAgICB9CisgICAgYnJvd3Nlcldp
bmRvd1pvb21PdXQod2luZG93KTsKIH0KIAogc3RhdGljIHZvaWQgZGVmYXVsdFpvb21DYWxsYmFj
ayhCcm93c2VyV2luZG93ICp3aW5kb3cpCkBAIC03ODEsNiArODA4LDcgQEAgc3RhdGljIHZvaWQg
YnJvd3NlcldpbmRvd0NvbnN0cnVjdGVkKEdPYgogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93
LT53ZWJWaWV3LCAiZW50ZXItZnVsbHNjcmVlbiIsIEdfQ0FMTEJBQ0sod2ViVmlld0VudGVyRnVs
bFNjcmVlbiksIHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3ctPndlYlZpZXcs
ICJsZWF2ZS1mdWxsc2NyZWVuIiwgR19DQUxMQkFDSyh3ZWJWaWV3TGVhdmVGdWxsU2NyZWVuKSwg
d2luZG93KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdy0+d2ViVmlldywgIm5vdGlmeTo6
aXMtbG9hZGluZyIsIEdfQ0FMTEJBQ0sod2ViVmlld0lzTG9hZGluZ0NoYW5nZWQpLCB3aW5kb3cp
OworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LT53ZWJWaWV3LCAic2Nyb2xsLWV2ZW50Iiwg
R19DQUxMQkFDSyhzY3JvbGxFdmVudENhbGxiYWNrKSwgd2luZG93KTsKIAogICAgIGdfc2lnbmFs
X2Nvbm5lY3Qod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdpbmRvdy0+d2ViVmlldyksICJk
b3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWQpLCB3aW5kb3cpOwog
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>