<?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>136692</bug_id>
          
          <creation_ts>2014-09-09 19:24:58 -0700</creation_ts>
          <short_desc>[GTK] Race condition with WebKitWebView:is-loading after starting page load</short_desc>
          <delta_ts>2014-10-08 23:50:17 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>136997</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1034224</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-09-09 19:24:58 -0700</bug_when>
    <thetext>After starting a page load with, say, webkit_web_view_load_uri or webkit_web_view_go_back, the is-loading property of the web view would ideally be TRUE.  Instead, it is FALSE, and will be set to TRUE soon afterwards. This is unexpected and a practical problem for Epiphany [1].

If we use a PageLoadState::Observer, we can be notified of the new load before these functions return, without the need to manually set the is-loading property in each of the several web view functions that start a load.

It doesn&apos;t look like we can completely replace the WebKitLoaderClient with a PageLoadState::Observer, so this is a minimal patch that only changes how we set the is-loading property. We might want to change more.

[1] https://bugzilla.gnome.org/show_bug.cgi?id=735577#c15</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034225</commentid>
    <comment_count>1</comment_count>
      <attachid>237878</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-09-09 19:36:52 -0700</bug_when>
    <thetext>Created attachment 237878
Patch

Unfortunately, this either requires the WebKitWebViewBase to assume it is also a WebKitWebView, or else for the WebKitPageLoadObserver to make the same assumption. This seems undesirable, even if it is a pretty safe bet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034250</commentid>
    <comment_count>2</comment_count>
      <attachid>237878</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-10 02:03:16 -0700</bug_when>
    <thetext>Comment on attachment 237878
Patch

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

I also started with this, I have a wip patch in my local repo, but it&apos;s blocked by other differences between our API and the internal one regarding the active URL.

&gt; Source/WebKit2/PlatformGTK.cmake:169
&gt; +    UIProcess/API/gtk/WebKitPageLoadObserver.cpp
&gt; +    UIProcess/API/gtk/WebKitPageLoadObserver.h

I&apos;m not sure we need a new file for this, I would add the class in WebKitWebView.cpp, since it&apos;s a private class an only used by WebKitWebView.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp:40
&gt; -    webkitWebViewLoadChanged(WEBKIT_WEB_VIEW(clientInfo), WEBKIT_LOAD_STARTED);
&gt; +    ASSERT_UNUSED(clientInfo, webkit_web_view_is_loading(WEBKIT_WEB_VIEW(clientInfo)));

I don&apos;t think this is correct, we should really call webkitWebViewLoadChanged here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPageLoadObserver.cpp:24
&gt; +#include &lt;WebCore/platform/NotImplemented.h&gt;

This should be #include &lt;WebCore/NotImplemented.h&gt; but I don&apos;t think we need this here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPageLoadObserver.cpp:30
&gt; +    , m_pageLoadState(pageLoadState)

I would leave the caller use PageLoadState to add/remove the observer

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPageLoadObserver.cpp:43
&gt; +PassRefPtr&lt;WebKitPageLoadObserver&gt; WebKitPageLoadObserver::create(WebKitWebView&amp; webView, PageLoadState&amp; pageLoadState)
&gt; +{
&gt; +    return adoptRef(new WebKitPageLoadObserver(webView, pageLoadState));
&gt; +}

I don&apos;t this this class nedds to be ref counted, it will not be shared, it should be created by the web view in the constructor and deleted on dispose.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPageLoadObserver.cpp:47
&gt; +    notImplemented();

Don&apos;t need to use notImplemented in this case, I think, since it&apos;s not something that will not work because this is not implemented. We can use the will* methods to freeze the gobject property notify.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPageLoadObserver.cpp:53
&gt; +    if (m_pageLoadState.isLoading())
&gt; +        webkitWebViewLoadChanged(&amp;m_webView, WEBKIT_LOAD_STARTED);

I don&apos;t think this is correct, we should only emit load-started when the frame has transition to provisional state, and this is happening before. I agree on changing the is-loading before as well as making sure that get_uri() right after load_uri() doesn&apos;t return null but the requested uri, but for that we should also implement the didChangeActiveURL.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPageLoadObserver.h:29
&gt; +class WebKitPageLoadObserver : public RefCounted&lt;WebKitPageLoadObserver&gt;, public PageLoadState::Observer {

This class could be marked as final, and again I don&apos;t think it needs to be refcounted.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitPageLoadObserver.h:62
&gt; +    WebKitWebView&amp; m_webView;

I don&apos;t use references for GObjects, use a pointer instead.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:102
&gt; +    RefPtr&lt;WebKitPageLoadObserver&gt; pageLoadObserver;

I don&apos;t think this should be in WebKitWebViewBase, but in WebKitWebView.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:1011
&gt; +    priv-&gt;pageLoadObserver = WebKitPageLoadObserver::create(*WEBKIT_WEB_VIEW(webkitWebViewBase), priv-&gt;pageProxy-&gt;pageLoadState());

It&apos;s not correct to cast the webkitWebViewBase as WebKitWebView here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034274</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2014-09-10 06:20:24 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 237878 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=237878&amp;action=review
&gt; 
&gt; I also started with this, I have a wip patch in my local repo, but it&apos;s blocked by other differences between our API and the internal one regarding the active URL.

Do you want me to keep working on this then?

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:102
&gt; &gt; +    RefPtr&lt;WebKitPageLoadObserver&gt; pageLoadObserver;
&gt; 
&gt; I don&apos;t think this should be in WebKitWebViewBase, but in WebKitWebView.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:1011
&gt; &gt; +    priv-&gt;pageLoadObserver = WebKitPageLoadObserver::create(*WEBKIT_WEB_VIEW(webkitWebViewBase), priv-&gt;pageProxy-&gt;pageLoadState());
&gt; 
&gt; It&apos;s not correct to cast the webkitWebViewBase as WebKitWebView here.

The problem is that I&apos;m not sure when else it is safe to add the page load observer, except when the WebKitWebViewBase creates a new page?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034276</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-10 06:23:42 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 237878 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=237878&amp;action=review
&gt; &gt; 
&gt; &gt; I also started with this, I have a wip patch in my local repo, but it&apos;s blocked by other differences between our API and the internal one regarding the active URL.
&gt; 
&gt; Do you want me to keep working on this then?

I already have a patch, but we need to fix other things before, so it&apos;s better to wait for now.

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:102
&gt; &gt; &gt; +    RefPtr&lt;WebKitPageLoadObserver&gt; pageLoadObserver;
&gt; &gt; 
&gt; &gt; I don&apos;t think this should be in WebKitWebViewBase, but in WebKitWebView.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:1011
&gt; &gt; &gt; +    priv-&gt;pageLoadObserver = WebKitPageLoadObserver::create(*WEBKIT_WEB_VIEW(webkitWebViewBase), priv-&gt;pageProxy-&gt;pageLoadState());
&gt; &gt; 
&gt; &gt; It&apos;s not correct to cast the webkitWebViewBase as WebKitWebView here.
&gt; 
&gt; The problem is that I&apos;m not sure when else it is safe to add the page load observer, except when the WebKitWebViewBase creates a new page?

In the web view constructor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035893</commentid>
    <comment_count>5</comment_count>
      <attachid>238303</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-18 03:21:05 -0700</bug_when>
    <thetext>Created attachment 238303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040356</commentid>
    <comment_count>6</comment_count>
      <attachid>238303</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2014-10-08 11:29:18 -0700</bug_when>
    <thetext>Comment on attachment 238303
Patch

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

LGTM, thanks!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1590
&gt; +    if (isDelayedEvent) {
&gt; +        if (loadEvent == WEBKIT_LOAD_COMMITTED)
&gt; +            webView-&gt;priv-&gt;waitingForMainResource = false;
&gt; +        else if (loadEvent == WEBKIT_LOAD_FINISHED) {
&gt; +            // Manually set is-loading again in case a new load was started.
&gt; +            webkitWebViewSetIsLoading(webView, getPage(webView)-&gt;pageLoadState().isLoading());
&gt; +        }
&gt; +    }

Is there a reason not to do these checks in the if/else if block above? Do they need to come after the load changed signal emission?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040486</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-08 22:42:12 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 238303 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238303&amp;action=review
&gt; 
&gt; LGTM, thanks!
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1590
&gt; &gt; +    if (isDelayedEvent) {
&gt; &gt; +        if (loadEvent == WEBKIT_LOAD_COMMITTED)
&gt; &gt; +            webView-&gt;priv-&gt;waitingForMainResource = false;
&gt; &gt; +        else if (loadEvent == WEBKIT_LOAD_FINISHED) {
&gt; &gt; +            // Manually set is-loading again in case a new load was started.
&gt; &gt; +            webkitWebViewSetIsLoading(webView, getPage(webView)-&gt;pageLoadState().isLoading());
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; Is there a reason not to do these checks in the if/else if block above? Do they need to come after the load changed signal emission?

Exactly, for example we guarantee that is-loading is false when load-changed is emitted with FINISHED.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040491</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-08 23:33:57 -0700</bug_when>
    <thetext>Committed r174497: &lt;http://trac.webkit.org/changeset/174497&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237878</attachid>
            <date>2014-09-09 19:36:52 -0700</date>
            <delta_ts>2014-09-18 03:21:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136692-20140909213647.patch</filename>
            <type>text/plain</type>
            <size>11978</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYmJmZjYzYTAxMTNkNjBl
YWIyZDdhZDE3ZDFlYmQyMzlmYzVhNzM4MS4uYzI1MGEzNzQ2ODc5OTZiMmJjYjAxM2M0YTMxNWM4
NjE1Y2NiMDRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE0LTA5LTA5ICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBSYWNlIGNv
bmRpdGlvbiB3aXRoIFdlYktpdFdlYlZpZXc6aXMtbG9hZGluZyBhZnRlciBzdGFydGluZyBwYWdl
IGxvYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NjY5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
UGxhdGZvcm1HVEsuY21ha2U6IEFkZCBXZWJLaXRQYWdlTG9hZE9ic2VydmVyIGZpbGVzLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5jcHA6CisgICAgICAg
IChkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKTogUmVtb3ZlIGNhbGwgdG8KKyAgICAg
ICAgd2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkOyBpbnN0ZWFkLCBhc3NlcnQgaXQgaGFzIGFscmVh
ZHkgYmVlbiBjYWxsZWQgYnkKKyAgICAgICAgdGhlIFdlYktpdFBhZ2VMb2FkT2JzZXJ2ZXIuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UGFnZUxvYWRPYnNlcnZlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6V2ViS2l0UGFnZUxvYWRPYnNl
cnZlcik6CisgICAgICAgIChXZWJLaXRQYWdlTG9hZE9ic2VydmVyOjp+V2ViS2l0UGFnZUxvYWRP
YnNlcnZlcik6CisgICAgICAgIChXZWJLaXRQYWdlTG9hZE9ic2VydmVyOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6d2lsbENoYW5nZUlzTG9hZGluZyk6CisgICAg
ICAgIChXZWJLaXRQYWdlTG9hZE9ic2VydmVyOjpkaWRDaGFuZ2VJc0xvYWRpbmcpOgorICAgICAg
ICAoV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6d2lsbENoYW5nZVRpdGxlKToKKyAgICAgICAgKFdl
YktpdFBhZ2VMb2FkT2JzZXJ2ZXI6OmRpZENoYW5nZVRpdGxlKToKKyAgICAgICAgKFdlYktpdFBh
Z2VMb2FkT2JzZXJ2ZXI6OndpbGxDaGFuZ2VBY3RpdmVVUkwpOgorICAgICAgICAoV2ViS2l0UGFn
ZUxvYWRPYnNlcnZlcjo6ZGlkQ2hhbmdlQWN0aXZlVVJMKToKKyAgICAgICAgKFdlYktpdFBhZ2VM
b2FkT2JzZXJ2ZXI6OndpbGxDaGFuZ2VIYXNPbmx5U2VjdXJlQ29udGVudCk6CisgICAgICAgIChX
ZWJLaXRQYWdlTG9hZE9ic2VydmVyOjpkaWRDaGFuZ2VIYXNPbmx5U2VjdXJlQ29udGVudCk6Cisg
ICAgICAgIChXZWJLaXRQYWdlTG9hZE9ic2VydmVyOjp3aWxsQ2hhbmdlRXN0aW1hdGVkUHJvZ3Jl
c3MpOgorICAgICAgICAoV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6ZGlkQ2hhbmdlRXN0aW1hdGVk
UHJvZ3Jlc3MpOgorICAgICAgICAoV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6d2lsbENoYW5nZUNh
bkdvQmFjayk6CisgICAgICAgIChXZWJLaXRQYWdlTG9hZE9ic2VydmVyOjpkaWRDaGFuZ2VDYW5H
b0JhY2spOgorICAgICAgICAoV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6d2lsbENoYW5nZUNhbkdv
Rm9yd2FyZCk6CisgICAgICAgIChXZWJLaXRQYWdlTG9hZE9ic2VydmVyOjpkaWRDaGFuZ2VDYW5H
b0ZvcndhcmQpOgorICAgICAgICAoV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6d2lsbENoYW5nZU5l
dHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViS2l0UGFnZUxvYWRPYnNlcnZl
cjo6ZGlkQ2hhbmdlTmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVzcyk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UGFnZUxvYWRPYnNlcnZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UpOiBDcmVhdGUgYSBXZWJLaXRQYWdlTG9hZE9ic2VydmVy
IHdoZW4KKyAgICAgICAgY3JlYXRpbmcgYSBuZXcgd2ViIHBhZ2UuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaDogQWRkIG1pc3NpbmcgaW5jbHVkZXMu
CisKIDIwMTQtMDktMDggIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBCdWlsZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFr
ZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDcyZGE3YmIyOWQ4YTVm
NDViYzBlNGVkNTRkNGE5YjEyNzYzODZlMjAuLjdmNzRiZmExYTE4YjM4OGUyNTA5ZGQyMzQ2NzFl
OTkwMDE1MzQwMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0xNjUsNiArMTY1LDgg
QEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZS5oCisgICAgVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0UGFnZUxvYWRPYnNlcnZlci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRQYWdlTG9hZE9ic2VydmVyLmgKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQZXJtaXNz
aW9uUmVxdWVzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQZXJtaXNzaW9uUmVx
dWVzdC5oCiAgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UGx1Z2luLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5j
cHAKaW5kZXggYmVkNTk1YmUyODM5ZmEwOWIzOTllY2QxZjI0YzFiZmVlODJlNzlhOS4uYmI3YWM4
Mzc2Y2Y1MDc2YWZlNjNlMTk1ZThiNmM3MmI3YTg2MGNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwCkBAIC0z
Nyw3ICszNyw3IEBAIHN0YXRpYyB2b2lkIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUo
V0tQYWdlUmVmLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSCiAgICAgaWYgKCFXS0ZyYW1lSXNN
YWluRnJhbWUoZnJhbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICB3ZWJraXRXZWJWaWV3TG9h
ZENoYW5nZWQoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCBXRUJLSVRfTE9BRF9TVEFSVEVE
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNsaWVudEluZm8sIHdlYmtpdF93ZWJfdmlld19pc19sb2Fk
aW5nKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSkpOwogfQogCiBzdGF0aWMgdm9pZCBkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1BhZ2VSZWYs
IFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiAvKiB1c2VyRGF0YSAqLywgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFBhZ2VMb2FkT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UGFnZUxvYWRPYnNlcnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2QzNTg1NGRiNzI4
ZTc3NThkNzk1NzlkZWJjNzY4YTNjMjNkZDY5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBhZ2VMb2FkT2JzZXJ2ZXIuY3BwCkBAIC0w
LDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRQYWdlTG9hZE9ic2VydmVyLmgiCisKKyNp
bmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvcGxhdGZv
cm0vTm90SW1wbGVtZW50ZWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworV2ViS2l0
UGFnZUxvYWRPYnNlcnZlcjo6V2ViS2l0UGFnZUxvYWRPYnNlcnZlcihXZWJLaXRXZWJWaWV3JiB3
ZWJWaWV3LCBQYWdlTG9hZFN0YXRlJiBwYWdlTG9hZFN0YXRlKQorICAgIDogbV93ZWJWaWV3KHdl
YlZpZXcpCisgICAgLCBtX3BhZ2VMb2FkU3RhdGUocGFnZUxvYWRTdGF0ZSkKK3sKKyAgICBtX3Bh
Z2VMb2FkU3RhdGUuYWRkT2JzZXJ2ZXIoKnRoaXMpOworfQorCitXZWJLaXRQYWdlTG9hZE9ic2Vy
dmVyOjp+V2ViS2l0UGFnZUxvYWRPYnNlcnZlcigpCit7CisgICAgbV9wYWdlTG9hZFN0YXRlLnJl
bW92ZU9ic2VydmVyKCp0aGlzKTsKK30KKworUGFzc1JlZlB0cjxXZWJLaXRQYWdlTG9hZE9ic2Vy
dmVyPiBXZWJLaXRQYWdlTG9hZE9ic2VydmVyOjpjcmVhdGUoV2ViS2l0V2ViVmlldyYgd2ViVmll
dywgUGFnZUxvYWRTdGF0ZSYgcGFnZUxvYWRTdGF0ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdlYktpdFBhZ2VMb2FkT2JzZXJ2ZXIod2ViVmlldywgcGFnZUxvYWRTdGF0ZSkpOworfQor
Cit2b2lkIFdlYktpdFBhZ2VMb2FkT2JzZXJ2ZXI6OndpbGxDaGFuZ2VJc0xvYWRpbmcoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6
ZGlkQ2hhbmdlSXNMb2FkaW5nKCkKK3sKKyAgICBpZiAobV9wYWdlTG9hZFN0YXRlLmlzTG9hZGlu
ZygpKQorICAgICAgICB3ZWJraXRXZWJWaWV3TG9hZENoYW5nZWQoJm1fd2ViVmlldywgV0VCS0lU
X0xPQURfU1RBUlRFRCk7Cit9CisKK3ZvaWQgV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6d2lsbENo
YW5nZVRpdGxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYktpdFBh
Z2VMb2FkT2JzZXJ2ZXI6OmRpZENoYW5nZVRpdGxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFdlYktpdFBhZ2VMb2FkT2JzZXJ2ZXI6OndpbGxDaGFuZ2VBY3RpdmVVUkwo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViS2l0UGFnZUxvYWRPYnNl
cnZlcjo6ZGlkQ2hhbmdlQWN0aXZlVVJMKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYktpdFBhZ2VMb2FkT2JzZXJ2ZXI6OndpbGxDaGFuZ2VIYXNPbmx5U2VjdXJlQ29u
dGVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJLaXRQYWdlTG9h
ZE9ic2VydmVyOjpkaWRDaGFuZ2VIYXNPbmx5U2VjdXJlQ29udGVudCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJLaXRQYWdlTG9hZE9ic2VydmVyOjp3aWxsQ2hhbmdl
RXN0aW1hdGVkUHJvZ3Jlc3MoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6ZGlkQ2hhbmdlRXN0aW1hdGVkUHJvZ3Jlc3MoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6
d2lsbENoYW5nZUNhbkdvQmFjaygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJLaXRQYWdlTG9hZE9ic2VydmVyOjpkaWRDaGFuZ2VDYW5Hb0JhY2soKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6d2lsbENo
YW5nZUNhbkdvRm9yd2FyZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJLaXRQYWdlTG9hZE9ic2VydmVyOjpkaWRDaGFuZ2VDYW5Hb0ZvcndhcmQoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6d2lsbENo
YW5nZU5ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgV2ViS2l0UGFnZUxvYWRPYnNlcnZlcjo6ZGlkQ2hhbmdlTmV0d29ya1JlcXVl
c3RzSW5Qcm9ncmVzcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBhZ2VMb2FkT2JzZXJ2ZXIu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBhZ2VMb2FkT2JzZXJ2
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mNWI1YjQ5YzgyOWNjYjA1MjM1OGM0ZDM4NjkxODViNWY2YmUzOTRl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UGFnZUxvYWRPYnNlcnZlci5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRQYWdlTG9hZE9ic2VydmVyX2gKKyNk
ZWZpbmUgV2ViS2l0UGFnZUxvYWRPYnNlcnZlcl9oCisKKyNpbmNsdWRlICJQYWdlTG9hZFN0YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlldy5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJLaXRQYWdlTG9hZE9ic2VydmVy
IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViS2l0UGFnZUxvYWRPYnNlcnZlcj4sIHB1YmxpYyBQYWdl
TG9hZFN0YXRlOjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
S2l0UGFnZUxvYWRPYnNlcnZlcj4gY3JlYXRlKFdlYktpdFdlYlZpZXcmIHdlYlZpZXcsIFBhZ2VM
b2FkU3RhdGUmIHBhZ2VMb2FkU3RhdGUpOworCisgICAgdmlydHVhbCB+V2ViS2l0UGFnZUxvYWRP
YnNlcnZlcigpOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VJc0xvYWRpbmcoKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlSXNMb2FkaW5nKCkgb3ZlcnJpZGU7CisK
KyAgICB2aXJ0dWFsIHZvaWQgd2lsbENoYW5nZVRpdGxlKCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGRpZENoYW5nZVRpdGxlKCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2ls
bENoYW5nZUFjdGl2ZVVSTCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VB
Y3RpdmVVUkwoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlSGFzT25s
eVNlY3VyZUNvbnRlbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlSGFz
T25seVNlY3VyZUNvbnRlbnQoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2hh
bmdlRXN0aW1hdGVkUHJvZ3Jlc3MoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hh
bmdlRXN0aW1hdGVkUHJvZ3Jlc3MoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCB3aWxs
Q2hhbmdlQ2FuR29CYWNrKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNh
bkdvQmFjaygpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VDYW5Hb0Zv
cndhcmQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ2FuR29Gb3J3YXJk
KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENoYW5nZU5ldHdvcmtSZXF1ZXN0
c0luUHJvZ3Jlc3MoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlTmV0d29y
a1JlcXVlc3RzSW5Qcm9ncmVzcygpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFdlYktpdFBh
Z2VMb2FkT2JzZXJ2ZXIoV2ViS2l0V2ViVmlldyYgd2ViVmlldywgUGFnZUxvYWRTdGF0ZSYgcGFn
ZUxvYWRTdGF0ZSk7CisKKyAgICBXZWJLaXRXZWJWaWV3JiBtX3dlYlZpZXc7CisgICAgUGFnZUxv
YWRTdGF0ZSYgbV9wYWdlTG9hZFN0YXRlOworfTsKKworfQorCisjZW5kaWYgLy8gV2ViS2l0UGFn
ZUxvYWRPYnNlcnZlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggYzkyOGE4Y2IxYTBlOTkwMjQ2ZDg0MWI3
NjY2ZWYxYzg1ZWVhYjAzZi4uYTYxM2Q2NTNmYWJjNTE5ZmQ5NTUzY2UwOWYxODVkYTcxZDZjOTg0
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlLmNwcApAQCAtMzksNyArMzksOSBAQAogI2luY2x1ZGUgIldlYkZ1bGxTY3Jl
ZW5DbGllbnRHdGsuaCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgogI2luY2x1ZGUg
IldlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCisjaW5jbHVkZSAiV2ViS2l0UGFnZUxvYWRP
YnNlcnZlci5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmgiCiAjaW5j
bHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3Vw
LmgiCkBAIC05Nyw2ICs5OSw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsK
ICAgICBXZWJLaXRXZWJWaWV3Q2hpbGRyZW5NYXAgY2hpbGRyZW47CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFBhZ2VDbGllbnRJbXBsPiBwYWdlQ2xpZW50OwogICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+
IHBhZ2VQcm94eTsKKyAgICBSZWZQdHI8V2ViS2l0UGFnZUxvYWRPYnNlcnZlcj4gcGFnZUxvYWRP
YnNlcnZlcjsKICAgICBib29sIHNob3VsZEZvcndhcmROZXh0S2V5RXZlbnQ7CiAgICAgR3RrQ2xp
Y2tDb3VudGVyIGNsaWNrQ291bnRlcjsKICAgICBDU3RyaW5nIHRvb2x0aXBUZXh0OwpAQCAtMTAw
NSw2ICsxMDA4LDcgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0
V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlLCBXZWJDb24KICAgICB3ZWJQYWdlQ29uZmln
dXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgPSB1c2VyQ29udGVudENvbnRyb2xsZXI7CiAg
ICAgcHJpdi0+cGFnZVByb3h5ID0gY29udGV4dC0+Y3JlYXRlV2ViUGFnZSgqcHJpdi0+cGFnZUNs
aWVudCwgV1RGOjptb3ZlKHdlYlBhZ2VDb25maWd1cmF0aW9uKSk7CiAgICAgcHJpdi0+cGFnZVBy
b3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworICAgIHByaXYtPnBhZ2VMb2FkT2JzZXJ2ZXIgPSBX
ZWJLaXRQYWdlTG9hZE9ic2VydmVyOjpjcmVhdGUoKldFQktJVF9XRUJfVklFVyh3ZWJraXRXZWJW
aWV3QmFzZSksIHByaXYtPnBhZ2VQcm94eS0+cGFnZUxvYWRTdGF0ZSgpKTsKIAogI2lmIFVTRShU
RVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oWDExKQogICAgIGlmIChwcml2LT5yZWRpcmVj
dGVkV2luZG93KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdQcml2YXRlLmgKaW5kZXggNWY2OTQxY2VjOWQ4ZDgxZTFiY2YxNTdkYjIw
ODA1YjY4OTkyN2YwZC4uZDZiNzc0N2ZkNTg0MDBiNjkyZjljNDMzZTY4MGI1NDZiN2Y1MzE3YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3UHJpdmF0ZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXZWJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRl
LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlldy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAo=
</data>
<flag name="review"
          id="262629"
          type_id="1"
          status="-"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="262630"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238303</attachid>
            <date>2014-09-18 03:21:05 -0700</date>
            <delta_ts>2014-10-08 11:29:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-is-loading.diff</filename>
            <type>text/plain</type>
            <size>22325</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAyNjFkYTNkLi5hMDM5NmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDQg
QEAKIDIwMTQtMDktMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFJhY2UgY29uZGl0aW9uIHdpdGggV2ViS2l0V2ViVmlldzppcy1sb2FkaW5n
IGFmdGVyIHN0YXJ0aW5nIHBhZ2UgbG9hZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NjkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXNlIFBhZ2VMb2FkU3RhdGU6Ok9ic2VydmVyIHRvIHVwZGF0ZSBi
b3RoIGlzLWxvYWRpbmcgYW5kIHVyaQorICAgICAgICBwcm9wZXJ0aWVzLCBpbnN0ZWFkIG9mIG1h
bnVhbGx5IHVwZGF0ZSB0aGVtLiBUaGlzIGVuc3VyZXMgdGhhdCBvdXIKKyAgICAgICAgd2ViIHZp
ZXcgaXMgYWx3YXlzIGluIHN5bmMgd2l0aCB0aGUgV2ViUGFnZVByb3h5IHNvIHRoYXQKKyAgICAg
ICAgd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcoKSByZXR1cm5zIHRydWUgcmlnaHQgYWZ0ZXIg
cmVxdWVzdGluZworICAgICAgICBhbnkgbG9hZC4gV2Ugc3RpbGwgbmVlZCB0byBtYW51YWxseSBz
ZXQgdGhlIGlzLWxvYWRpbmcgcHJvcGVydHkKKyAgICAgICAgb25seSBpbiB0aGUgY2FzZSB3aGVy
ZSB3ZSBkZWxheSB0aGUgZW1pc3Npb24gb2YgdGhlIGxvYWQtY2hhbmdlZAorICAgICAgICBzaWdu
YWxzIHdoZW4gd2FpdGluZyBmb3IgdGhlIG1haW4gcmVzb3VyY2UuIFRoZSBiYWhhdmlvdXIgaXMg
YSBiaXQKKyAgICAgICAgZGlmZmVyZW50IGJ1dCBzdGlsbCBjb25zaXN0ZW50IHdpdGggd2hhdCBv
dXIgQVBJIGRvY3VtZW50YXRpb24gc2F5cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdExvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChhdHRhY2hMb2FkZXJDbGllbnRUb1Zp
ZXcpOiBSZW1vdmUKKyAgICAgICAgZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lIGlt
cGxlbWVudGF0aW9uLCBzaW5jZSB3ZSBhcmUKKyAgICAgICAgYWxyZWFkeSBub3RpZmllZCBhYm91
dCB0aGUgVVJMIGNoYW5nZSBieSB0aGUgUGFnZUxvYWRTdGF0ZTo6T2JzZXJ2ZXIuCisgICAgICAg
IChkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0V2Vi
Vmlld1NldElzTG9hZGluZyk6IE5vIGxvbmdlciB1cGRhdGUgdGhlIFVSSSB3aGVuCisgICAgICAg
IGNoYW5naW5nIHRoZSBpcy1sb2FkaW5nIHByb3BlcnR5LgorICAgICAgICAod2Via2l0V2ViVmll
d0NvbnN0cnVjdGVkKTogQ3JhdGUgYSBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXIgYW5kIGFkZAorICAg
ICAgICBpdCB0byB0aGUgUGFnZUxvYWRTdGF0ZS4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdEaXNw
b3NlKTogUmVtb3ZlIHRoZSBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXIgZnJvbSB0aGUgUGFnZUxvYWRT
dGF0ZS4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdFbWl0TG9hZENoYW5nZWQpOiBBZGQgaXNEZWxh
eWVkRXZlbnQgcGFyYW1ldGVyIHRvCisgICAgICAgIHVwZGF0ZSB0aGUgaXMtbG9hZGluZyBwcm9w
ZXJ0eSBhY2NvcmRpbmdseSB3aGVuIGVtaXR0aW5nIHRoZQorICAgICAgICBkZWxheWVkIGV2ZW50
cy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdFbWl0RGVsYXllZExvYWRFdmVudHMpOiBQYXNzIHRy
dWUgYXMgaXNEZWxheWVkRXZlbnQKKyAgICAgICAgcGFyYW1ldGVyIG9mIHdlYmtpdFdlYlZpZXdF
bWl0TG9hZENoYW5nZWQoKS4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdMb2FkQ2hhbmdlZCk6IFBh
c3MgZmFsc2UgYXMgaXNEZWxheWVkRXZlbnQgcGFyYW1ldGVyCisgICAgICAgIG9mIHdlYmtpdFdl
YlZpZXdFbWl0TG9hZENoYW5nZWQoKS4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVk
KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyk6CisgICAg
ICAgICh3ZWJraXRXZWJWaWV3VXBkYXRlVVJJKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oOgorCisyMDE0LTA5LTE4ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwogICAgICAgICBQZW5kaW5nIEFQ
SSByZXF1ZXN0IFVSTCBubyBzZXQgd2hlbiBsb2FkaW5nIEZpbGUsIERhdGEsIEFsdGVybmF0ZSBI
VE1MIG9yIHBsYWluIHRleHQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNjkxNgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcAppbmRleCBiZWQ1OTViLi5lMDQ4NDBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJD
bGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExv
YWRlckNsaWVudC5jcHAKQEAgLTkxLDE0ICs5MSw2IEBAIHN0YXRpYyB2b2lkIGRpZEZhaWxMb2Fk
V2l0aEVycm9yRm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS0Vycm9yUmVm
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VFcnJvci5mYWlsaW5nVVJMKCku
dXRmOCgpLmRhdGEoKSwgd2ViRXJyb3IuZ2V0KCkpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRTYW1l
RG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmIGZyYW1lLCBX
S1NhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCi17Ci0gICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB3ZWJraXRXZWJWaWV3VXBkYXRlVVJJKFdFQktJVF9XRUJfVklFVyhjbGll
bnRJbmZvKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdLUGFn
ZVJlZiwgV0tTdHJpbmdSZWYgdGl0bGVSZWYsIFdLRnJhbWVSZWYgZnJhbWVSZWYsIFdLVHlwZVJl
ZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFt
ZShmcmFtZVJlZikpCkBAIC0xNTEsNyArMTQzLDcgQEAgdm9pZCBhdHRhY2hMb2FkZXJDbGllbnRU
b1ZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICAgICAgMCwgLy8gZGlkRmluaXNoRG9j
dW1lbnRMb2FkRm9yRnJhbWUKICAgICAgICAgZGlkRmluaXNoTG9hZEZvckZyYW1lLAogICAgICAg
ICBkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lLAotICAgICAgICBkaWRTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uRm9yRnJhbWUsCisgICAgICAgIDAsIC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRp
b25Gb3JGcmFtZQogICAgICAgICBkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSwKICAgICAgICAgMCwg
Ly8gZGlkRmlyc3RMYXlvdXRGb3JGcmFtZQogICAgICAgICAwLCAvLyBkaWRGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCA5MDU3YzM0Li40YmJlMDJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApA
QCAtMTQzLDYgKzE0Myw3IEBAIGVudW0gewogCiB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIEdS
ZWZQdHI8V2ViS2l0V2ViUmVzb3VyY2U+ID4gTG9hZGluZ1Jlc291cmNlc01hcDsKIHR5cGVkZWYg
SGFzaE1hcDx1aW50NjRfdCwgR1JlZlB0cjxHVGFzaz4gPiBTbmFwc2hvdFJlc3VsdHNNYXA7Citj
bGFzcyBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXI7CiAKIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZh
dGUgewogICAgIH5fV2ViS2l0V2ViVmlld1ByaXZhdGUoKQpAQCAtMTYzLDYgKzE2NCw3IEBAIHN0
cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgewogICAgIENTdHJpbmcgYWN0aXZlVVJJOwogICAg
IGJvb2wgaXNMb2FkaW5nOwogCisgICAgc3RkOjp1bmlxdWVfcHRyPFBhZ2VMb2FkU3RhdGVPYnNl
cnZlcj4gbG9hZE9ic2VydmVyOwogICAgIGJvb2wgd2FpdGluZ0Zvck1haW5SZXNvdXJjZTsKICAg
ICB1bnNpZ25lZCBsb25nIG1haW5SZXNvdXJjZVJlc3BvbnNlSGFuZGxlcklEOwogICAgIFdlYktp
dExvYWRFdmVudCBsYXN0RGVsYXllZEV2ZW50OwpAQCAtMjAzLDYgKzIwNSw2NiBAQCBzdGF0aWMg
aW5saW5lIFdlYlBhZ2VQcm94eSogZ2V0UGFnZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAg
IHJldHVybiB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UocmVpbnRlcnByZXRfY2FzdDxXZWJLaXRX
ZWJWaWV3QmFzZSo+KHdlYlZpZXcpKTsKIH0KIAorc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1Nl
dElzTG9hZGluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBib29sIGlzTG9hZGluZykKK3sKKyAg
ICBpZiAod2ViVmlldy0+cHJpdi0+aXNMb2FkaW5nID09IGlzTG9hZGluZykKKyAgICAgICAgcmV0
dXJuOworCisgICAgd2ViVmlldy0+cHJpdi0+aXNMb2FkaW5nID0gaXNMb2FkaW5nOworICAgIGdf
b2JqZWN0X25vdGlmeShHX09CSkVDVCh3ZWJWaWV3KSwgImlzLWxvYWRpbmciKTsKK30KKworY2xh
c3MgUGFnZUxvYWRTdGF0ZU9ic2VydmVyIGZpbmFsIDogcHVibGljIFBhZ2VMb2FkU3RhdGU6Ok9i
c2VydmVyIHsKK3B1YmxpYzoKKyAgICBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXIoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKKyAgICAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKKyAgICB7CisgICAgfQor
Citwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlSXNMb2FkaW5nKCkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGdfb2JqZWN0X2ZyZWV6ZV9ub3RpZnkoR19PQkpFQ1QobV93ZWJW
aWV3KSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VJc0xvYWRpbmcoKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fd2ViVmlldy0+cHJpdi0+d2FpdGluZ0Zvck1haW5S
ZXNvdXJjZSkgeworICAgICAgICAgICAgLy8gVGhlIGFjdHVhbCBsb2FkIGhhcyBmaW5pc2hlZCBi
dXQgd2UgaGF2ZW4ndCBlbWl0dGVkIHRoZSBkZWxheWVkIGxvYWQgZXZlbnRzIHlldCwgc28gd2Ug
YXJlIHN0aWxsIGxvYWRpbmcuCisgICAgICAgICAgICBnX29iamVjdF90aGF3X25vdGlmeShHX09C
SkVDVChtX3dlYlZpZXcpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICB3ZWJraXRXZWJWaWV3U2V0SXNMb2FkaW5nKG1fd2ViVmlldywgZ2V0UGFnZShtX3dlYlZpZXcp
LT5wYWdlTG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkpOworICAgICAgICBnX29iamVjdF90aGF3X25v
dGlmeShHX09CSkVDVChtX3dlYlZpZXcpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd2ls
bENoYW5nZVRpdGxlKCkgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVRp
dGxlKCkgb3ZlcnJpZGUgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENoYW5nZUFjdGl2ZVVS
TCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBnX29iamVjdF9mcmVlemVfbm90aWZ5KEdfT0JK
RUNUKG1fd2ViVmlldykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQWN0aXZl
VVJMKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+YWN0aXZlVVJJ
ID0gZ2V0UGFnZShtX3dlYlZpZXcpLT5wYWdlTG9hZFN0YXRlKCkuYWN0aXZlVVJMKCkudXRmOCgp
OworICAgICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QobV93ZWJWaWV3KSwgInVyaSIpOwor
ICAgICAgICBnX29iamVjdF90aGF3X25vdGlmeShHX09CSkVDVChtX3dlYlZpZXcpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENoYW5nZUhhc09ubHlTZWN1cmVDb250ZW50KCkgb3Zl
cnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUhhc09ubHlTZWN1cmVDb250ZW50
KCkgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VFc3RpbWF0ZWRQcm9n
cmVzcygpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VFc3RpbWF0ZWRQ
cm9ncmVzcygpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlQ2FuR29C
YWNrKCkgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNhbkdvQmFjaygp
IG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlQ2FuR29Gb3J3YXJkKCkg
b3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNhbkdvRm9yd2FyZCgpIG92
ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlTmV0d29ya1JlcXVlc3RzSW5Q
cm9ncmVzcygpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VOZXR3b3Jr
UmVxdWVzdHNJblByb2dyZXNzKCkgb3ZlcnJpZGUgeyB9CisKKyAgICBXZWJLaXRXZWJWaWV3KiBt
X3dlYlZpZXc7Cit9OworCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0xvYWRGYWlsKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCwgY29uc3QgY2hhciogZmFpbGlu
Z1VSSSwgR0Vycm9yKiBlcnJvcikKIHsKICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBX
RUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEKQpAQCAt
NDkzLDYgKzU1NSwxMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09i
amVjdCogb2JqZWN0KQogICAgIGlmICghcHJpdi0+c2V0dGluZ3MpCiAgICAgICAgIHByaXYtPnNl
dHRpbmdzID0gYWRvcHRHUmVmKHdlYmtpdF9zZXR0aW5nc19uZXcoKSk7CiAgICAgd2Via2l0V2Vi
Q29udGV4dENyZWF0ZVBhZ2VGb3JXZWJWaWV3KHByaXYtPmNvbnRleHQsIHdlYlZpZXcsIHByaXYt
PnVzZXJDb250ZW50TWFuYWdlci5nZXQoKSwgcHJpdi0+cmVsYXRlZFZpZXcpOworCisgICAgcHJp
di0+bG9hZE9ic2VydmVyID0gc3RkOjptYWtlX3VuaXF1ZTxQYWdlTG9hZFN0YXRlT2JzZXJ2ZXI+
KHdlYlZpZXcpOworICAgIGdldFBhZ2Uod2ViVmlldyktPnBhZ2VMb2FkU3RhdGUoKS5hZGRPYnNl
cnZlcigqcHJpdi0+bG9hZE9ic2VydmVyKTsKKwogICAgIC8vIFRoZSByZWxhdGVkIHZpZXcgaXMg
b25seSB2YWxpZCBkdXJpbmcgdGhlIGNvbnN0cnVjdGlvbi4KICAgICBwcml2LT5yZWxhdGVkVmll
dyA9IG51bGxwdHI7CiAKQEAgLTU5MSw2ICs2NTcsMTEgQEAgc3RhdGljIHZvaWQgd2Via2l0V2Vi
Vmlld0Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogICAgIHdlYmtpdFdlYlZpZXdEaXNjb25uZWN0
U2V0dGluZ3NTaWduYWxIYW5kbGVycyh3ZWJWaWV3KTsKICAgICB3ZWJraXRXZWJWaWV3RGlzY29u
bmVjdEZhdmljb25EYXRhYmFzZVNpZ25hbEhhbmRsZXJzKHdlYlZpZXcpOwogCisgICAgaWYgKHdl
YlZpZXctPnByaXYtPmxvYWRPYnNlcnZlcikgeworICAgICAgICBnZXRQYWdlKHdlYlZpZXcpLT5w
YWdlTG9hZFN0YXRlKCkucmVtb3ZlT2JzZXJ2ZXIoKndlYlZpZXctPnByaXYtPmxvYWRPYnNlcnZl
cik7CisgICAgICAgIHdlYlZpZXctPnByaXYtPmxvYWRPYnNlcnZlci5yZXNldCgpOworICAgIH0K
KwogICAgIHdlYmtpdFdlYkNvbnRleHRXZWJWaWV3RGVzdHJveWVkKHdlYlZpZXctPnByaXYtPmNv
bnRleHQsIHdlYlZpZXcpOwogCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3Bh
cmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKQEAgLTE0ODQsMjEgKzE1NTUsNiBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdl
YlZpZXdDbGFzcykKICAgICAgICAgICAgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVF
U1QpOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0SXNMb2FkaW5nKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIGJvb2wgaXNMb2FkaW5nKQotewotICAgIGlmICh3ZWJWaWV3LT5wcml2
LT5pc0xvYWRpbmcgPT0gaXNMb2FkaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3ZWJWaWV3
LT5wcml2LT5pc0xvYWRpbmcgPSBpc0xvYWRpbmc7Ci0gICAgZ19vYmplY3RfZnJlZXplX25vdGlm
eShHX09CSkVDVCh3ZWJWaWV3KSk7Ci0gICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHdlYlZp
ZXcpLCAiaXMtbG9hZGluZyIpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBVUkkgaWYgYSBuZXcgbG9h
ZCBoYXMgc3RhcnRlZC4KLSAgICBpZiAod2ViVmlldy0+cHJpdi0+aXNMb2FkaW5nKQotICAgICAg
ICB3ZWJraXRXZWJWaWV3VXBkYXRlVVJJKHdlYlZpZXcpOwotICAgIGdfb2JqZWN0X3RoYXdfbm90
aWZ5KEdfT0JKRUNUKHdlYlZpZXcpKTsKLX0KLQogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Nh
bmNlbEF1dGhlbnRpY2F0aW9uUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAg
IGlmICghd2ViVmlldy0+cHJpdi0+YXV0aGVudGljYXRpb25SZXF1ZXN0KQpAQCAtMTUwOCwxOSAr
MTU2NCwzMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q2FuY2VsQXV0aGVudGljYXRpb25S
ZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgd2ViVmlldy0+cHJpdi0+YXV0aGVu
dGljYXRpb25SZXF1ZXN0LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdF
bWl0TG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxv
YWRFdmVudCkKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdFbWl0TG9hZENoYW5nZWQoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCwgYm9vbCBpc0RlbGF5
ZWRFdmVudCkKIHsKICAgICBpZiAobG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX1NUQVJURUQpIHsK
LSAgICAgICAgd2Via2l0V2ViVmlld1NldElzTG9hZGluZyh3ZWJWaWV3LCB0cnVlKTsKICAgICAg
ICAgd2Via2l0V2ViVmlld1dhdGNoRm9yQ2hhbmdlc0luRmF2aWNvbih3ZWJWaWV3KTsKICAgICAg
ICAgd2Via2l0V2ViVmlld0NhbmNlbEF1dGhlbnRpY2F0aW9uUmVxdWVzdCh3ZWJWaWV3KTsKICAg
ICB9IGVsc2UgaWYgKGxvYWRFdmVudCA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgewotICAgICAg
ICB3ZWJraXRXZWJWaWV3U2V0SXNMb2FkaW5nKHdlYlZpZXcsIGZhbHNlKTsKKyAgICAgICAgaWYg
KGlzRGVsYXllZEV2ZW50KSB7CisgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIHRoZSBkZWxheWVk
IGV2ZW50LCB3ZSBuZWVkIHRvIG1hbnVhbGx5IHNldCBpcy1sb2FkaW5nIHRvIGZhbHNlLgorICAg
ICAgICAgICAgd2Via2l0V2ViVmlld1NldElzTG9hZGluZyh3ZWJWaWV3LCBmYWxzZSk7CisgICAg
ICAgIH0KICAgICAgICAgd2Via2l0V2ViVmlld0NhbmNlbEF1dGhlbnRpY2F0aW9uUmVxdWVzdCh3
ZWJWaWV3KTsKICAgICAgICAgd2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RNYWluUmVzb3VyY2VSZXNw
b25zZUNoYW5nZWRTaWduYWxIYW5kbGVyKHdlYlZpZXcpOwotICAgIH0gZWxzZQotICAgICAgICB3
ZWJraXRXZWJWaWV3VXBkYXRlVVJJKHdlYlZpZXcpOworICAgIH0KKwogICAgIGdfc2lnbmFsX2Vt
aXQod2ViVmlldywgc2lnbmFsc1tMT0FEX0NIQU5HRURdLCAwLCBsb2FkRXZlbnQpOworCisgICAg
aWYgKGlzRGVsYXllZEV2ZW50KSB7CisgICAgICAgIGlmIChsb2FkRXZlbnQgPT0gV0VCS0lUX0xP
QURfQ09NTUlUVEVEKQorICAgICAgICAgICAgd2ViVmlldy0+cHJpdi0+d2FpdGluZ0Zvck1haW5S
ZXNvdXJjZSA9IGZhbHNlOworICAgICAgICBlbHNlIGlmIChsb2FkRXZlbnQgPT0gV0VCS0lUX0xP
QURfRklOSVNIRUQpIHsKKyAgICAgICAgICAgIC8vIE1hbnVhbGx5IHNldCBpcy1sb2FkaW5nIGFn
YWluIGluIGNhc2UgYSBuZXcgbG9hZCB3YXMgc3RhcnRlZC4KKyAgICAgICAgICAgIHdlYmtpdFdl
YlZpZXdTZXRJc0xvYWRpbmcod2ViVmlldywgZ2V0UGFnZSh3ZWJWaWV3KS0+cGFnZUxvYWRTdGF0
ZSgpLmlzTG9hZGluZygpKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld0VtaXREZWxheWVkTG9hZEV2ZW50cyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQpA
QCAtMTUzMSw5ICsxNTk4LDggQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0VtaXREZWxheWVk
TG9hZEV2ZW50cyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIEFTU0VSVChwcml2LT5sYXN0
RGVsYXllZEV2ZW50ID09IFdFQktJVF9MT0FEX0NPTU1JVFRFRCB8fCBwcml2LT5sYXN0RGVsYXll
ZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKTsKIAogICAgIGlmIChwcml2LT5sYXN0RGVs
YXllZEV2ZW50ID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICB3ZWJraXRXZWJWaWV3
RW1pdExvYWRDaGFuZ2VkKHdlYlZpZXcsIFdFQktJVF9MT0FEX0NPTU1JVFRFRCk7Ci0gICAgd2Vi
a2l0V2ViVmlld0VtaXRMb2FkQ2hhbmdlZCh3ZWJWaWV3LCBwcml2LT5sYXN0RGVsYXllZEV2ZW50
KTsKLSAgICBwcml2LT53YWl0aW5nRm9yTWFpblJlc291cmNlID0gZmFsc2U7CisgICAgICAgIHdl
YmtpdFdlYlZpZXdFbWl0TG9hZENoYW5nZWQod2ViVmlldywgV0VCS0lUX0xPQURfQ09NTUlUVEVE
LCB0cnVlKTsKKyAgICB3ZWJraXRXZWJWaWV3RW1pdExvYWRDaGFuZ2VkKHdlYlZpZXcsIHByaXYt
Pmxhc3REZWxheWVkRXZlbnQsIHRydWUpOwogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkQ2hh
bmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50KQpA
QCAtMTU2NCwxMiArMTYzMCwxMSBAQCB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkQ2hhbmdlZChXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50KQogICAgIGlmIChw
cml2LT53YWl0aW5nRm9yTWFpblJlc291cmNlKQogICAgICAgICBwcml2LT5sYXN0RGVsYXllZEV2
ZW50ID0gbG9hZEV2ZW50OwogICAgIGVsc2UKLSAgICAgICAgd2Via2l0V2ViVmlld0VtaXRMb2Fk
Q2hhbmdlZCh3ZWJWaWV3LCBsb2FkRXZlbnQpOworICAgICAgICB3ZWJraXRXZWJWaWV3RW1pdExv
YWRDaGFuZ2VkKHdlYlZpZXcsIGxvYWRFdmVudCwgZmFsc2UpOwogfQogCiB2b2lkIHdlYmtpdFdl
YlZpZXdMb2FkRmFpbGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBs
b2FkRXZlbnQsIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciAqZXJyb3IpCiB7Ci0gICAg
d2Via2l0V2ViVmlld1NldElzTG9hZGluZyh3ZWJWaWV3LCBmYWxzZSk7CiAgICAgd2Via2l0V2Vi
Vmlld0NhbmNlbEF1dGhlbnRpY2F0aW9uUmVxdWVzdCh3ZWJWaWV3KTsKIAogICAgIGdib29sZWFu
IHJldHVyblZhbHVlOwpAQCAtMTU3OSw3ICsxNjQ0LDYgQEAgdm9pZCB3ZWJraXRXZWJWaWV3TG9h
ZEZhaWxlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50
LAogCiB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yLCBHVGxz
Q2VydGlmaWNhdGVGbGFncyB0bHNFcnJvcnMsIEdUbHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUp
CiB7Ci0gICAgd2Via2l0V2ViVmlld1NldElzTG9hZGluZyh3ZWJWaWV3LCBmYWxzZSk7CiAgICAg
d2Via2l0V2ViVmlld0NhbmNlbEF1dGhlbnRpY2F0aW9uUmVxdWVzdCh3ZWJWaWV3KTsKIAogICAg
IFdlYktpdFRMU0Vycm9yc1BvbGljeSB0bHNFcnJvcnNQb2xpY3kgPSB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYlZpZXctPnByaXYtPmNvbnRleHQpOwpAQCAtMTYx
MiwxNiArMTY3Niw2IEBAIHZvaWQgd2Via2l0V2ViVmlld1NldEVzdGltYXRlZExvYWRQcm9ncmVz
cyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBkb3VibGUgZXN0aW1hCiAgICAgZ19vYmplY3Rfbm90
aWZ5KEdfT0JKRUNUKHdlYlZpZXcpLCAiZXN0aW1hdGVkLWxvYWQtcHJvZ3Jlc3MiKTsKIH0KIAot
dm9pZCB3ZWJraXRXZWJWaWV3VXBkYXRlVVJJKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi17Ci0g
ICAgQ1N0cmluZyBhY3RpdmVVUkkgPSBnZXRQYWdlKHdlYlZpZXcpLT5wYWdlTG9hZFN0YXRlKCku
YWN0aXZlVVJMKCkudXRmOCgpOwotICAgIGlmICh3ZWJWaWV3LT5wcml2LT5hY3RpdmVVUkkgPT0g
YWN0aXZlVVJJKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3ZWJWaWV3LT5wcml2LT5hY3RpdmVV
UkkgPSBhY3RpdmVVUkk7Ci0gICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHdlYlZpZXcpLCAi
dXJpIik7Ci19Ci0KIFdlYlBhZ2VQcm94eSogd2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVz
LCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uKiBuYXZpZ2F0aW9uQWN0aW9uKQogewogICAgIFdlYktp
dFdlYlZpZXcqIG5ld1dlYlZpZXc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCA1ZjY5NDFjLi4zOGI4N2Fm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdQcml2YXRlLmgKQEAgLTM3LDcgKzM3LDYgQEAgdm9pZCB3ZWJraXRXZWJWaWV3TG9h
ZEZhaWxlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0TG9hZEV2ZW50LCBjb25zdCBjaGFyKiBmYWls
aW4KIHZvaWQgd2Via2l0V2ViVmlld0xvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFdlYktpdFdlYlZp
ZXcqLCBjb25zdCBjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IqLCBHVGxzQ2VydGlmaWNhdGVGbGFn
cywgR1Rsc0NlcnRpZmljYXRlKik7CiB2b2lkIHdlYmtpdFdlYlZpZXdTZXRFc3RpbWF0ZWRMb2Fk
UHJvZ3Jlc3MoV2ViS2l0V2ViVmlldyosIGRvdWJsZSBlc3RpbWF0ZWRMb2FkUHJvZ3Jlc3MpOwog
dm9pZCB3ZWJraXRXZWJWaWV3U2V0VGl0bGUoV2ViS2l0V2ViVmlldyosIGNvbnN0IENTdHJpbmcm
KTsKLXZvaWQgd2Via2l0V2ViVmlld1VwZGF0ZVVSSShXZWJLaXRXZWJWaWV3Kik7CiBXZWJLaXQ6
OldlYlBhZ2VQcm94eSogd2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UoV2ViS2l0V2ViVmlldyos
IGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiwgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiop
Owogdm9pZCB3ZWJraXRXZWJWaWV3UmVhZHlUb1Nob3dQYWdlKFdlYktpdFdlYlZpZXcqKTsKIHZv
aWQgd2Via2l0V2ViVmlld1J1bkFzTW9kYWwoV2ViS2l0V2ViVmlldyopOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDI4YTdkZDMuLmMwMjNhNGMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwyOSBAQAogMjAxNC0wOS0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKKyAgICAgICAgUmFjZSBjb25kaXRpb24gd2l0aCBXZWJLaXRXZWJWaWV3Omlz
LWxvYWRpbmcgYWZ0ZXIgc3RhcnRpbmcgcGFnZSBsb2FkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY2OTIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsv
TG9hZFRyYWNraW5nVGVzdC5jcHA6CisgICAgICAgIChsb2FkQ2hhbmdlZENhbGxiYWNrKTogT25s
eSBjaGVjayBpcy1sb2FkaW5nIGlzIGZhbHNlIHdoZW4gbG9hZAorICAgICAgICBoYXMgZmluaXNo
ZWQgaWYgdGhlIGxvYWQgZGlkbid0IGZhaWwgZHVlIHRvIGEgY2FuY2VsbGF0aW9uLgorICAgICAg
ICAobG9hZEZhaWxlZENhbGxiYWNrKTogT25seSBjaGVjayBpcy1sb2FkaW5nIGlzIGZhbHNlIGlm
IHRoZSBsb2FkCisgICAgICAgIGRpZG4ndCBmYWlsIGR1ZSB0byBhIGNhbmNlbGxhdGlvbi4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcDoKKyAg
ICAgICAgKFdlYlZpZXdUZXN0Ojpsb2FkVVJJKTogQ2hlY2sgaXMtbG9hZGluZyBpcyB0cnVlIGFu
ZCBhY3RpdmUgVVJJIGlzCisgICAgICAgIHRoZSByZXF1ZXN0ZWQgb25lIHJpZ3RoIGFmdGVyIHJl
cXVlc3RpbmcgdGhlIGxvYWQuCisgICAgICAgIChXZWJWaWV3VGVzdDo6bG9hZEh0bWwpOiBEaXR0
by4KKyAgICAgICAgKFdlYlZpZXdUZXN0Ojpsb2FkUGxhaW5UZXh0KTogRGl0dG8uCisgICAgICAg
IChXZWJWaWV3VGVzdDo6bG9hZEJ5dGVzKTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3VGVzdDo6
bG9hZFJlcXVlc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXdUZXN0Ojpsb2FkQWx0ZXJuYXRl
SFRNTCk6IERpdHRvLgorICAgICAgICAoV2ViVmlld1Rlc3Q6OmdvQmFjayk6IERpdHRvLgorICAg
ICAgICAoV2ViVmlld1Rlc3Q6OmdvRm9yd2FyZCk6IERpdHRvLgorICAgICAgICAoV2ViVmlld1Rl
c3Q6OmdvVG9CYWNrRm9yd2FyZExpc3RJdGVtKTogRGl0dG8uCisKKzIwMTQtMDktMTggIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFBlbmRpbmcg
QVBJIHJlcXVlc3QgVVJMIG5vIHNldCB3aGVuIGxvYWRpbmcgRmlsZSwgRGF0YSwgQWx0ZXJuYXRl
IEhUTUwgb3IgcGxhaW4gdGV4dAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM2OTE2CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3Rr
L1dlYktpdDJHdGsvTG9hZFRyYWNraW5nVGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0
ay9XZWJLaXQyR3RrL0xvYWRUcmFja2luZ1Rlc3QuY3BwCmluZGV4IDlhYTMyMzguLmE1OWNiOTIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvTG9hZFRyYWNr
aW5nVGVzdC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9Mb2Fk
VHJhY2tpbmdUZXN0LmNwcApAQCAtNTAsOSArNTAsMTUgQEAgc3RhdGljIHZvaWQgbG9hZENoYW5n
ZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2
ZW4KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6
Ci0gICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7
Ci0gICAgICAgIGlmICghdGVzdC0+bV9sb2FkRmFpbGVkKQorICAgICAgICBpZiAoIXRlc3QtPm1f
bG9hZEZhaWxlZCkgeworICAgICAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19pc19s
b2FkaW5nKHdlYlZpZXcpKTsKICAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2Fj
dGl2ZVVSSS5kYXRhKCksID09LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoIWdfZXJyb3JfbWF0Y2hlcyh0ZXN0LT5tX2Vycm9yLmdldCgpLCBX
RUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEKSkgewor
ICAgICAgICAgICAgLy8gV2hlbiBhIG5ldyBsb2FkIGlzIHN0YXJ0ZWQgYmVmb3JlIHRoZSBwcmV2
aW91cyBvbmUgaGFzIGZpbmlzaGVkLCB3ZSByZWNlaXZlIHRoZSBsb2FkLWZpbmlzaGVkIHNpZ25h
bAorICAgICAgICAgICAgLy8gb2YgdGhlIG9uZ29pbmcgbG9hZCB3aGlsZSB3ZSBhbHJlYWR5IGhh
dmUgYSBwcm92aXNpb25hbCBVUkwgZm9yIHRoZSBuZXcgbG9hZC4gVGhpcyBpcyB0aGUgb25seSBj
YXNlCisgICAgICAgICAgICAvLyB3aGVyZSBpc2xvYWRpbmcgaXMgdHJ1ZSB3aGVuIHRoZSBsb2Fk
IGhhcyBmaW5pc2hlZC4KKyAgICAgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfaXNf
bG9hZGluZyh3ZWJWaWV3KSk7CisgICAgICAgIH0KICAgICAgICAgdGVzdC0+bG9hZEZpbmlzaGVk
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC02MywxOSArNjksMjQgQEAgc3Rh
dGljIHZvaWQgbG9hZENoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJL
aXRMb2FkRXZlbnQgbG9hZEV2ZW4KIHN0YXRpYyB2b2lkIGxvYWRGYWlsZWRDYWxsYmFjayhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBjb25zdCBjaGFy
KiBmYWlsaW5nVVJJLCBHRXJyb3IqIGVycm9yLCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQogewog
ICAgIHRlc3QtPm1fbG9hZEZhaWxlZCA9IHRydWU7CisKKyAgICBnX2Fzc2VydChlcnJvcik7CiAg
ICAgdGVzdC0+bV9lcnJvci5yZXNldChnX2Vycm9yX2NvcHkoZXJyb3IpKTsKIAorICAgIGlmICgh
Z19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdP
UktfRVJST1JfQ0FOQ0VMTEVEKSkgeworICAgICAgICAvLyBXaGVuIGEgbmV3IGxvYWQgaXMgc3Rh
cnRlZCBiZWZvcmUgdGhlIHByZXZpb3VzIG9uZSBoYXMgZmluaXNoZWQsIHdlIHJlY2VpdmUgdGhl
IGxvYWQtZmFpbGVkIHNpZ25hbAorICAgICAgICAvLyBvZiB0aGUgb25nb2luZyBsb2FkIHdoaWxl
IHdlIGFscmVhZHkgaGF2ZSBhIHByb3Zpc2lvbmFsIFVSTCBmb3IgdGhlIG5ldyBsb2FkLiBUaGlz
IGlzIHRoZSBvbmx5IGNhc2UKKyAgICAgICAgLy8gd2hlcmUgaXMtbG9hZGluZyBpcyB0cnVlIHdo
ZW4gdGhlIGxvYWQgaGFzIGZhaWxlZC4KKyAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmll
d19pc19sb2FkaW5nKHdlYlZpZXcpKTsKKyAgICB9CisKICAgICBzd2l0Y2ggKGxvYWRFdmVudCkg
ewogICAgIGNhc2UgV0VCS0lUX0xPQURfU1RBUlRFRDoKLSAgICAgICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKICAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHRlc3QtPm1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIGZhaWxpbmdVUkkpOwotICAgICAgICBnX2Fz
c2VydChlcnJvcik7CiAgICAgICAgIHRlc3QtPnByb3Zpc2lvbmFsTG9hZEZhaWxlZChmYWlsaW5n
VVJJLCBlcnJvcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlU
VEVEOgotICAgICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmll
dykpOwogICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCA9
PSwgd2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldykpOwotICAgICAgICBnX2Fzc2VydChl
cnJvcik7CiAgICAgICAgIHRlc3QtPmxvYWRGYWlsZWQoZmFpbGluZ1VSSSwgZXJyb3IpOwogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0
ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcAppbmRleCBkODRiM2EzLi5kZDIwM2Q5IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNw
cApAQCAtNTQsNiArNTQsOCBAQCB2b2lkIFdlYlZpZXdUZXN0Ojpsb2FkVVJJKGNvbnN0IGNoYXIq
IHVyaSkKIHsKICAgICBtX2FjdGl2ZVVSSSA9IHVyaTsKICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF91cmkobV93ZWJWaWV3LCB1cmkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19s
b2FkaW5nKG1fd2ViVmlldykpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3VyaShtX3dlYlZpZXcpLCA9PSwgbV9hY3RpdmVVUkkuZGF0YSgpKTsKIH0KIAogdm9pZCBX
ZWJWaWV3VGVzdDo6bG9hZEh0bWwoY29uc3QgY2hhciogaHRtbCwgY29uc3QgY2hhciogYmFzZVVS
SSkKQEAgLTYzLDEyICs2NSwxNiBAQCB2b2lkIFdlYlZpZXdUZXN0Ojpsb2FkSHRtbChjb25zdCBj
aGFyKiBodG1sLCBjb25zdCBjaGFyKiBiYXNlVVJJKQogICAgIGVsc2UKICAgICAgICAgbV9hY3Rp
dmVVUkkgPSBiYXNlVVJJOwogICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWwobV93ZWJWaWV3
LCBodG1sLCBiYXNlVVJJKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGlu
ZyhtX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91
cmkobV93ZWJWaWV3KSwgPT0sIG1fYWN0aXZlVVJJLmRhdGEoKSk7CiB9CiAKIHZvaWQgV2ViVmll
d1Rlc3Q6OmxvYWRQbGFpblRleHQoY29uc3QgY2hhciogcGxhaW5UZXh0KQogewogICAgIG1fYWN0
aXZlVVJJID0gImFib3V0OmJsYW5rIjsKICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9wbGFpbl90
ZXh0KG1fd2ViVmlldywgcGxhaW5UZXh0KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdf
aXNfbG9hZGluZyhtX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92
aWV3X2dldF91cmkobV93ZWJWaWV3KSwgPT0sIG1fYWN0aXZlVVJJLmRhdGEoKSk7CiB9CiAKIHZv
aWQgV2ViVmlld1Rlc3Q6OmxvYWRCeXRlcyhHQnl0ZXMqIGJ5dGVzLCBjb25zdCBjaGFyKiBtaW1l
VHlwZSwgY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IGNoYXIqIGJhc2VVUkkpCkBAIC03OCwy
MyArODQsMzAgQEAgdm9pZCBXZWJWaWV3VGVzdDo6bG9hZEJ5dGVzKEdCeXRlcyogYnl0ZXMsIGNv
bnN0IGNoYXIqIG1pbWVUeXBlLCBjb25zdCBjaGFyKiBlbmMKICAgICBlbHNlCiAgICAgICAgIG1f
YWN0aXZlVVJJID0gYmFzZVVSSTsKICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9ieXRlcyhtX3dl
YlZpZXcsIGJ5dGVzLCBtaW1lVHlwZSwgZW5jb2RpbmcsIGJhc2VVUkkpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKG1fd2ViVmlldykpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShtX3dlYlZpZXcpLCA9PSwgbV9hY3RpdmVVUkku
ZGF0YSgpKTsKIH0KIAogdm9pZCBXZWJWaWV3VGVzdDo6bG9hZFJlcXVlc3QoV2ViS2l0VVJJUmVx
dWVzdCogcmVxdWVzdCkKIHsKICAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF91cmlfcmVxdWVzdF9n
ZXRfdXJpKHJlcXVlc3QpOwogICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3JlcXVlc3QobV93ZWJW
aWV3LCByZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyht
X3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmko
bV93ZWJWaWV3KSwgPT0sIG1fYWN0aXZlVVJJLmRhdGEoKSk7CiB9CiAKIHZvaWQgV2ViVmlld1Rl
c3Q6OmxvYWRBbHRlcm5hdGVIVE1MKGNvbnN0IGNoYXIqIGh0bWwsIGNvbnN0IGNoYXIqIGNvbnRl
bnRVUkksIGNvbnN0IGNoYXIqIGJhc2VVUkkpCiB7CiAgICAgbV9hY3RpdmVVUkkgPSBjb250ZW50
VVJJOwogICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVybmF0ZV9odG1sKG1fd2ViVmlldywg
aHRtbCwgY29udGVudFVSSSwgYmFzZVVSSSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3
X2lzX2xvYWRpbmcobV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
dmlld19nZXRfdXJpKG1fd2ViVmlldyksID09LCBtX2FjdGl2ZVVSSS5kYXRhKCkpOwogfQogCiB2
b2lkIFdlYlZpZXdUZXN0Ojpnb0JhY2soKQogewotICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfY2Fu
X2dvX2JhY2sobV93ZWJWaWV3KSkgeworICAgIGJvb2wgY2FuR29CYWNrID0gd2Via2l0X3dlYl92
aWV3X2Nhbl9nb19iYWNrKG1fd2ViVmlldyk7CisgICAgaWYgKGNhbkdvQmFjaykgewogICAgICAg
ICBXZWJLaXRCYWNrRm9yd2FyZExpc3QqIGxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tf
Zm9yd2FyZF9saXN0KG1fd2ViVmlldyk7CiAgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0qIGl0ZW0gPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIC0x
KTsKICAgICAgICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9n
ZXRfb3JpZ2luYWxfdXJpKGl0ZW0pOwpAQCAtMTAyLDExICsxMTUsMTYgQEAgdm9pZCBXZWJWaWV3
VGVzdDo6Z29CYWNrKCkKIAogICAgIC8vIENhbGwgZ29fYmFjayBldmVuIHdoZW4gY2FuX2dvX2Jh
Y2sgcmV0dXJucyBGQUxTRSB0byBjaGVjayBub3RoaW5nIGhhcHBlbnMuCiAgICAgd2Via2l0X3dl
Yl92aWV3X2dvX2JhY2sobV93ZWJWaWV3KTsKKyAgICBpZiAoY2FuR29CYWNrKSB7CisgICAgICAg
IGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKG1fd2ViVmlldykpOworICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkobV93ZWJWaWV3KSwgPT0s
IG1fYWN0aXZlVVJJLmRhdGEoKSk7CisgICAgfQogfQogCiB2b2lkIFdlYlZpZXdUZXN0Ojpnb0Zv
cndhcmQoKQogewotICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQobV93ZWJW
aWV3KSkgeworICAgIGJvb2wgY2FuR29Gb3J3YXJkID0gd2Via2l0X3dlYl92aWV3X2Nhbl9nb19m
b3J3YXJkKG1fd2ViVmlldyk7CisgICAgaWYgKGNhbkdvRm9yd2FyZCkgewogICAgICAgICBXZWJL
aXRCYWNrRm9yd2FyZExpc3QqIGxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2Fy
ZF9saXN0KG1fd2ViVmlldyk7CiAgICAgICAgIFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0
ZW0gPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGxpc3QsIDEpOwogICAg
ICAgICBtX2FjdGl2ZVVSSSA9IHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dldF9vcmln
aW5hbF91cmkoaXRlbSk7CkBAIC0xMTQsMTIgKzEzMiwxOCBAQCB2b2lkIFdlYlZpZXdUZXN0Ojpn
b0ZvcndhcmQoKQogCiAgICAgLy8gQ2FsbCBnb19mb3J3YXJkIGV2ZW4gd2hlbiBjYW5fZ29fZm9y
d2FyZCByZXR1cm5zIEZBTFNFIHRvIGNoZWNrIG5vdGhpbmcgaGFwcGVucy4KICAgICB3ZWJraXRf
d2ViX3ZpZXdfZ29fZm9yd2FyZChtX3dlYlZpZXcpOworICAgIGlmIChjYW5Hb0ZvcndhcmQpIHsK
KyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcobV93ZWJWaWV3KSk7
CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShtX3dlYlZp
ZXcpLCA9PSwgbV9hY3RpdmVVUkkuZGF0YSgpKTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViVmlld1Rl
c3Q6OmdvVG9CYWNrRm9yd2FyZExpc3RJdGVtKFdlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0
ZW0pCiB7CiAgICAgbV9hY3RpdmVVUkkgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9n
ZXRfb3JpZ2luYWxfdXJpKGl0ZW0pOwogICAgIHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2Zv
cndhcmRfbGlzdF9pdGVtKG1fd2ViVmlldywgaXRlbSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dl
Yl92aWV3X2lzX2xvYWRpbmcobV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF93ZWJfdmlld19nZXRfdXJpKG1fd2ViVmlldyksID09LCBtX2FjdGl2ZVVSSS5kYXRhKCkpOwog
fQogCiB2b2lkIFdlYlZpZXdUZXN0OjpxdWl0TWFpbkxvb3AoKQo=
</data>
<flag name="review"
          id="263058"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>