<?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>84527</bug_id>
          
          <creation_ts>2012-04-21 03:51:38 -0700</creation_ts>
          <short_desc>[Qt][WK2] Define clear split between QtWebPageLoadClient and QQuickWebViewPrivate for loading tasks.</short_desc>
          <delta_ts>2012-05-09 05:10:38 -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>WebKit Qt</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>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>abecsi</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>607192</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-04-21 03:51:38 -0700</bug_when>
    <thetext>Right now QtWebPageLoadClient does 4 different things
1, emits signals on webview: emit m_webView-&gt;loadingChanged(&amp;loadRequest);
2, calls into QQuickWebViewPrivate. m_webView-&gt;d_func()-&gt;loadDidCommit(); where there&apos;s no implementation whatsoever.
3, calls into QQuickWebViewPrivate. m_webView-&gt;d_func()-&gt;loadDidSucceed(); where the implementation could be completely omitted.
4, calls into QQuickWebViewPrivate: m_webView-&gt;d_func()-&gt;didChangeBackForwardList(); where there&apos;s some proxy implementation.

They should be harmonized in some ways, either push back more implementation to QtWebPageLoadClient so that it needs no access to QQuickWebViewPrivate, or just use it truly as a proxy class. Right now it&apos;s a mixture.

(case 3, loadDidSucceed() implements some deferred loading success dispatching due to the delayed interaction engine construction. I looked at the original patch (bug 77111) and don&apos;t see any reasoning why success() is special in that case, and for example failed() is not. Commit log also states that page is suspended while I don&apos;t think it is, it&apos;s just that the suspend flag is turned on by default, so not sure why success() is treated differently here, unless I miss something, which could very well be the case. If this delaying logic could be omitted, we would end up even less d_func() calls in QtWebPageLoadClient(), provided that&apos;s the preferred direction.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611570</commentid>
    <comment_count>1</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-04-27 09:15:48 -0700</bug_when>
    <thetext>Simon, do you know something about case#3? (as Andras is being on vacation for a week)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612519</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-04-30 01:53:21 -0700</bug_when>
    <thetext>(In reply to comment #0)
[...]
&gt; 3, calls into QQuickWebViewPrivate. m_webView-&gt;d_func()-&gt;loadDidSucceed(); where the implementation could be completely omitted.
[...] 
&gt; (case 3, loadDidSucceed() implements some deferred loading success dispatching due to the delayed interaction engine construction. I looked at the original patch (bug 77111) and don&apos;t see any reasoning why success() is special in that case, and for example failed() is not. Commit log also states that page is suspended while I don&apos;t think it is, it&apos;s just that the suspend flag is turned on by default, so not sure why success() is treated differently here, unless I miss something, which could very well be the case. If this delaying logic could be omitted, we would end up even less d_func() calls in QtWebPageLoadClient(), provided that&apos;s the preferred direction.)

I don&apos;t see much magic in loadDidSucceed apart from a straight signal emission.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615090</commentid>
    <comment_count>3</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-05-03 01:24:10 -0700</bug_when>
    <thetext>(In reply to comment #0) 
&gt; (case 3, loadDidSucceed() implements some deferred loading success dispatching due to the delayed interaction engine construction. I looked at the original patch (bug 77111) and don&apos;t see any reasoning why success() is special in that case, and for example failed() is not. Commit log also states that page is suspended while I don&apos;t think it is, it&apos;s just that the suspend flag is turned on by default, so not sure why success() is treated differently here, unless I miss something, which could very well be the case. If this delaying logic could be omitted, we would end up even less d_func() calls in QtWebPageLoadClient(), provided that&apos;s the preferred direction.)

This delay was needed before the WebView became a subclass of Flickable because the instantiation of the internal Flickable happened in onComponentComplete and we needed to defer the emission of the success signal after the construction finished to prevent crashes in API tests, since almost all the unit tests depend on loadSuccess.

This delay can be omitted since WebView is a direct subclass of Flickable now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616047</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-05-04 02:06:36 -0700</bug_when>
    <thetext>09:58:23 AM) simon: but I for one like the idea of removing unnecessary layers :)
(09:59:00 AM) zalan: simon: yea, it&apos;s the balance of having a bloated webview vs. layering.
(09:59:27 AM) simon: I suppose we could do it in two steps, make it a pure proxy first, and then move the rest

as discussed with Simon, as the first step, QtWebPageLoadClient will be transformed into a pure proxy class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618510</commentid>
    <comment_count>5</comment_count>
      <attachid>140717</attachid>
    <who name="alan">zalan</who>
    <bug_when>2012-05-08 07:27:26 -0700</bug_when>
    <thetext>Created attachment 140717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618515</commentid>
    <comment_count>6</comment_count>
      <attachid>140717</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-05-08 07:36:08 -0700</bug_when>
    <thetext>Comment on attachment 140717
Patch

Question : why? We separated this stuff back then to avoid QQuickWebView private to increase too much. The idea of QtWebPageLoadClient was to contain all the loading logic. Plus your changelog doesn&apos;t say the motivation of this move.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618518</commentid>
    <comment_count>7</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-05-08 07:41:05 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 140717 [details])
&gt; Question : why? We separated this stuff back then to avoid QQuickWebView private to increase too much. The idea of QtWebPageLoadClient was to contain all the loading logic. Plus your changelog doesn&apos;t say the motivation of this move.

Ok got a bit of info on the bug history.

I would advocate to push the logic into QtWebPageLoadClient and keep the QQuickWebView private for stuff related to QQuickItem usage that have no other place to go but the private pointer QQuickWebViewPrivate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618526</commentid>
    <comment_count>8</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-05-08 07:55:59 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 140717 [details] [details])
&gt; &gt; Question : why? We separated this stuff back then to avoid QQuickWebView private to increase too much. The idea of QtWebPageLoadClient was to contain all the loading logic. Plus your changelog doesn&apos;t say the motivation of this move.
&gt; 
&gt; Ok got a bit of info on the bug history.
&gt; 
&gt; I would advocate to push the logic into QtWebPageLoadClient and keep the QQuickWebView private for stuff related to QQuickItem usage that have no other place to go but the private pointer QQuickWebViewPrivate.

That was my original intention (as it can been seen here bug 84445), but discussing with Simon and Tor Arne, it ended up the other way around. As quoted here https://bugs.webkit.org/show_bug.cgi?id=84527#c4
I can see both directions&apos; advantages and disadvantages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618735</commentid>
    <comment_count>9</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-05-08 13:02:46 -0700</bug_when>
    <thetext>I&apos;ve made some of the commits that split that code. The main motivation was to break QtWebPageProxy class into smaller pieces. The QtWebPageProxy class handled all the C clients plus the C++ client code (like implementing PageClient interface) and was pretty confusing.

One drawback of making those classes just proxies to QQuickWebViewPrivate is the danger of recreating the big blob we had before. At the time the split was done I was imagining that we could make use of it to separate the Loader code in one place, Policy code in another, etc. Maybe the existing division isn&apos;t perfect, but we could try.

One example of this way of thinking: I wonder if url()/setUrl()/related could be moved inside the small class and make QQuickWebViewPrivate free of the complexity of handling those things (if now looks simple, remember we have bug 77554).

Maybe making the boring C client code (static methods that call the instance methods) less visible with macros or something else. Then handle everything on the instance methods (of the smaller classes) can make things less confusing in those small classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619234</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-05-09 00:35:33 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I&apos;ve made some of the commits that split that code. The main motivation was to break QtWebPageProxy class into smaller pieces. The QtWebPageProxy class handled all the C clients plus the C++ client code (like implementing PageClient interface) and was pretty confusing.
&gt; 
&gt; One drawback of making those classes just proxies to QQuickWebViewPrivate is the danger of recreating the big blob we had before. At the time the split was done I was imagining that we could make use of it to separate the Loader code in one place, Policy code in another, etc. Maybe the existing division isn&apos;t perfect, but we could try.
&gt; 
&gt; One example of this way of thinking: I wonder if url()/setUrl()/related could be moved inside the small class and make QQuickWebViewPrivate free of the complexity of handling those things (if now looks simple, remember we have bug 77554).

So there&apos;s a fear of bloating QQuickWebView, but I have to ask: What is that bloat exactly? What is that complexity that is required?


I believe we should strive towards keeping our API layer as thin as possible with as little logic and complexit as possible on top of what the internal WebKit2 API provides. If there is an actual logic, and actual behavior or algorithm for us to implement, then I think it&apos;s fine to have that in a separate encapsulated class. But that&apos;s not the case here, it&apos;s not the case for any of the loading state business nor the url() API, where we want to merely expose WebPageProxy::activeUrl().


Note: In WK1 we actually implemented a lot of things in QWebPage that for us are already implemented in WebPageProxy. That made it seem like it&apos;s bloated, because it implemented API _and_ semantics that are required between  ChromeClient/FrameLoaderClient and any sensible public API layer.


&gt; Maybe making the boring C client code (static methods that call the instance methods) less visible with macros or something else. Then handle everything on the instance methods (of the smaller classes) can make things less confusing in those small classes.

The C to C++ code is something that indeed can be improved with macros or templates. Tor Arne is looking into that. Right now there are cases where the C callback actually contains _logic_ before it calls the C++ function, and that doesn&apos;t feel right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619236</commentid>
    <comment_count>11</comment_count>
      <attachid>140717</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-05-09 00:37:46 -0700</bug_when>
    <thetext>Comment on attachment 140717
Patch

I&apos;m r+&apos;ing this patch because it moves code that implements an API right where the API is defined (signal emission as well as translation of WebPageProxy internals to public Qt API with correct types).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619361</commentid>
    <comment_count>12</comment_count>
      <attachid>140908</attachid>
    <who name="alan">zalan</who>
    <bug_when>2012-05-09 04:13:24 -0700</bug_when>
    <thetext>Created attachment 140908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619392</commentid>
    <comment_count>13</comment_count>
      <attachid>140908</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-09 05:10:32 -0700</bug_when>
    <thetext>Comment on attachment 140908
Patch

Clearing flags on attachment: 140908

Committed r116516: &lt;http://trac.webkit.org/changeset/116516&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619393</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-09 05:10:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140717</attachid>
            <date>2012-05-08 07:27:26 -0700</date>
            <delta_ts>2012-05-09 04:13:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84527-20120508162723.patch</filename>
            <type>text/plain</type>
            <size>18084</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNjQwNykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA1LTA4ICBaYWxhbiBC
dWp0YXMgIDx6YnVqdGFzQGdtYWlsLmNvbT4KKworICAgICAgICBbUXRdW1dLMl0gRGVmaW5lIGNs
ZWFyIHNwbGl0IGJldHdlZW4gUXRXZWJQYWdlTG9hZENsaWVudCBhbmQgUVF1aWNrV2ViVmlld1By
aXZhdGUgZm9yIGxvYWRpbmcgdGFza3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NDUyNyNjMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE1vdmluZyBsb2FkaW5nIHJlbGF0ZWQgbG9naWMgZnJvbSBRdFdl
YlBhZ2VMb2FkQ2xpZW50IHRvIFFRdWlja1dlYlZpZXdQcml2YXRlLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQ
cml2YXRlOjpRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJp
dmF0ZTo6cHJvdmlzaW9uYWxMb2FkRGlkU3RhcnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1By
aXZhdGU6OmxvYWREaWRDb21taXQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OmRp
ZFNhbWVEb2N1bWVudE5hdmlnYXRpb24pOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6
OnRpdGxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpsb2FkUHJv
Z3Jlc3NEaWRDaGFuZ2UpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OmJhY2tGb3J3
YXJkTGlzdERpZENoYW5nZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6bG9hZERp
ZEZhaWwpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OnByb2Nlc3NEaWRDcmFzaCk6
CisgICAgICAgIChRUXVpY2tXZWJWaWV3Ojpsb2FkUHJvZ3Jlc3MpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0
ZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQ
cml2YXRlOjpsb2FkUHJvZ3Jlc3MpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVBy
aXZhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6UXRXZWJFcnJvcjo6aXNDYW5jZWxsYXRpb24pOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VMb2FkQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdl
TG9hZENsaWVudDo6UXRXZWJQYWdlTG9hZENsaWVudCk6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRTdGFydFByb3Zpc2lvbmFsTG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFnZUxvYWRDbGllbnQ6OmRpZENvbW1pdExvYWQp
OgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlTG9hZENsaWVudDo6ZGlkUmVj
ZWl2ZVRpdGxlKToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlTG9hZENsaWVudDo6ZGlkQ2hh
bmdlUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRD
aGFuZ2VCYWNrRm9yd2FyZExpc3QpOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VMb2FkQ2xp
ZW50OjpkaXNwYXRjaExvYWRGYWlsZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VMb2Fk
Q2xpZW50OjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUpOgorICAgICAg
ICAoV2ViS2l0OjpRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZy
YW1lKToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlTG9hZENsaWVudDo6ZGlkU3RhcnRQcm9n
cmVzcyk6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFnZUxvYWRDbGllbnQ6OmRpZEZpbmlzaFBy
b2dyZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlTG9hZENsaWVudC5oOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFF0V2ViUGFnZUxvYWRDbGllbnQpOgorCiAyMDEy
LTA1LTA3ICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJlZmFjdG9yIHdpbmRvd0NsaXBSZWN0Rm9yTGF5ZXIgdG8gcmVtb3ZlIHRoZSBleHBsaWNp
dCBSZW5kZXJMYXllciBkZXBlbmRlbmN5CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAJKHJldmlzaW9uIDExNjMwNSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJRdERvd25sb2FkTWFuYWdlci5oIgog
I2luY2x1ZGUgIlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oIgogI2luY2x1ZGUgIlF0V2Vi
Q29udGV4dC5oIgorI2luY2x1ZGUgIlF0V2ViRXJyb3IuaCIKICNpbmNsdWRlICJRdFdlYkljb25E
YXRhYmFzZUNsaWVudC5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50SGFuZGxlci5oIgogI2lu
Y2x1ZGUgIlF0V2ViUGFnZUxvYWRDbGllbnQuaCIKQEAgLTE2Miw2ICsxNjMsNyBAQCBRUXVpY2tX
ZWJWaWV3UHJpdmF0ZTo6UVF1aWNrV2ViVmlld1ByaXZhCiAgICAgLCBtX25hdmlnYXRvclF0T2Jq
ZWN0RW5hYmxlZChmYWxzZSkKICAgICAsIG1fcmVuZGVyVG9PZmZzY3JlZW5CdWZmZXIoZmFsc2Up
CiAgICAgLCBtX2RpYWxvZ0FjdGl2ZShmYWxzZSkKKyAgICAsIG1fbG9hZFByb2dyZXNzKDApCiB7
CiAgICAgdmlld3BvcnQtPnNldENsaXAodHJ1ZSk7CiAgICAgdmlld3BvcnQtPnNldFBpeGVsQWxp
Z25lZCh0cnVlKTsKQEAgLTIzMCwxNCArMjMyLDc0IEBAIFFQb2ludEYgUVF1aWNrV2ViVmlld1By
aXZhdGU6OnBhZ2VJdGVtUG8KICAgICBccW1sc2lnbmFsIFdlYlZpZXc6OmxvYWRpbmdDaGFuZ2Vk
KFdlYkxvYWRSZXF1ZXN0IHJlcXVlc3QpCiAqLwogCit2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRl
Ojpwcm92aXNpb25hbExvYWREaWRTdGFydChjb25zdCBRVXJsJiB1cmwpCit7CisgICAgUV9RKFFR
dWlja1dlYlZpZXcpOworCisgICAgUVdlYkxvYWRSZXF1ZXN0IGxvYWRSZXF1ZXN0KHVybCwgUVF1
aWNrV2ViVmlldzo6TG9hZFN0YXJ0ZWRTdGF0dXMpOworICAgIGVtaXQgcS0+bG9hZGluZ0NoYW5n
ZWQoJmxvYWRSZXF1ZXN0KTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6bG9hZERp
ZENvbW1pdCgpCit7CisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworICAgIEFTU0VSVChxLT5sb2Fk
aW5nKCkpOworCisgICAgZW1pdCBxLT5uYXZpZ2F0aW9uSGlzdG9yeUNoYW5nZWQoKTsKKyAgICBl
bWl0IHEtPnVybENoYW5nZWQoKTsKKyAgICBlbWl0IHEtPnRpdGxlQ2hhbmdlZCgpOworfQorCit2
b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKCkKK3sK
KyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CisKKyAgICBlbWl0IHEtPm5hdmlnYXRpb25IaXN0b3J5
Q2hhbmdlZCgpOworICAgIGVtaXQgcS0+dXJsQ2hhbmdlZCgpOworfQorCit2b2lkIFFRdWlja1dl
YlZpZXdQcml2YXRlOjp0aXRsZURpZENoYW5nZSgpCit7CisgICAgUV9RKFFRdWlja1dlYlZpZXcp
OworCisgICAgZW1pdCBxLT50aXRsZUNoYW5nZWQoKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6bG9hZFByb2dyZXNzRGlkQ2hhbmdlKGludCBsb2FkUHJvZ3Jlc3MpCit7CisgICAg
UV9RKFFRdWlja1dlYlZpZXcpOworCisgICAgaWYgKCFsb2FkUHJvZ3Jlc3MpCisgICAgICAgIHNl
dEljb24oUVVybCgpKTsKKworICAgIG1fbG9hZFByb2dyZXNzID0gbG9hZFByb2dyZXNzOworCisg
ICAgZW1pdCBxLT5sb2FkUHJvZ3Jlc3NDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmll
d1ByaXZhdGU6OmJhY2tGb3J3YXJkTGlzdERpZENoYW5nZSgpCit7CisgICAgbmF2aWdhdGlvbkhp
c3RvcnktPmQtPnJlc2V0KCk7Cit9CisKIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmxvYWRE
aWRTdWNjZWVkKCkKIHsKICAgICBRX1EoUVF1aWNrV2ViVmlldyk7CiAgICAgQVNTRVJUKCFxLT5s
b2FkaW5nKCkpOworCiAgICAgUVdlYkxvYWRSZXF1ZXN0IGxvYWRSZXF1ZXN0KHEtPnVybCgpLCBR
UXVpY2tXZWJWaWV3OjpMb2FkU3VjY2VlZGVkU3RhdHVzKTsKICAgICBlbWl0IHEtPmxvYWRpbmdD
aGFuZ2VkKCZsb2FkUmVxdWVzdCk7CiB9CiAKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6Omxv
YWREaWRGYWlsKGNvbnN0IFF0V2ViRXJyb3ImIGVycm9yKQoreworICAgIFFfUShRUXVpY2tXZWJW
aWV3KTsKKyAgICBBU1NFUlQoIXEtPmxvYWRpbmcoKSk7CisKKyAgICBRV2ViTG9hZFJlcXVlc3Qg
bG9hZFJlcXVlc3QoZXJyb3IudXJsKCksIFFRdWlja1dlYlZpZXc6OkxvYWRGYWlsZWRTdGF0dXMs
IGVycm9yLmRlc2NyaXB0aW9uKCksIHN0YXRpY19jYXN0PFFRdWlja1dlYlZpZXc6OkVycm9yRG9t
YWluPihlcnJvci50eXBlKCkpLCBlcnJvci5lcnJvckNvZGUoKSk7CisgICAgZW1pdCBxLT5sb2Fk
aW5nQ2hhbmdlZCgmbG9hZFJlcXVlc3QpOworfQorCiB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRl
OjpvbkNvbXBvbmVudENvbXBsZXRlKCkKIHsKICAgICBpZiAobV9kZWZlcmVkVXJsVG9Mb2FkLmlz
RW1wdHkoKSkKQEAgLTI2OSwxOCArMzMxLDIyIEBAIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6
Ol9xX29uSWNvbkNoYW4KICAgICBzZXRJY29uKGljb25VUkwpOwogfQogCi12b2lkIFFRdWlja1dl
YlZpZXdQcml2YXRlOjpkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QoKQotewotICAgIG5hdmlnYXRp
b25IaXN0b3J5LT5kLT5yZXNldCgpOwotfQotCiB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpw
cm9jZXNzRGlkQ3Jhc2goKQogewotICAgIHBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+cmVzZXRH
ZXN0dXJlUmVjb2duaXplcnMoKTsKLSAgICBwYWdlTG9hZENsaWVudC0+Y29tcGxldGVMb2FkV2hl
blByb2Nlc3NEaWRDcmFzaElmTmVlZGVkKCk7CisgICAgUV9RKFFRdWlja1dlYlZpZXcpOwogCiAg
ICAgUVVybCB1cmwoS1VSTChXZWJDb3JlOjpQYXJzZWRVUkxTdHJpbmcsIHdlYlBhZ2VQcm94eS0+
dXJsQXRQcm9jZXNzRXhpdCgpKSk7CiAgICAgcVdhcm5pbmcoIldBUk5JTkc6IFRoZSB3ZWIgcHJv
Y2VzcyBleHBlcmllbmNlZCBhIGNyYXNoIG9uICclcycuIiwgcVByaW50YWJsZSh1cmwudG9TdHJp
bmcoUVVybDo6UmVtb3ZlVXNlckluZm8pKSk7CisKKyAgICBwYWdlVmlldy0+ZXZlbnRIYW5kbGVy
KCktPnJlc2V0R2VzdHVyZVJlY29nbml6ZXJzKCk7CisKKyAgICAvLyBDaGVjayBpZiBsb2FkaW5n
IHdhcyBvbmdvaW5nLCB3aGVuIHByb2Nlc3MgY3Jhc2hlZC4KKyAgICBpZiAobV9sb2FkUHJvZ3Jl
c3MgPiAwICYmIG1fbG9hZFByb2dyZXNzIDwgMTAwKSB7CisgICAgICAgIFFXZWJMb2FkUmVxdWVz
dCBsb2FkUmVxdWVzdCh1cmwsIFFRdWlja1dlYlZpZXc6OkxvYWRGYWlsZWRTdGF0dXMsIFFMYXRp
bjFTdHJpbmcoIlRoZSB3ZWIgcHJvY2VzcyBjcmFzaGVkLiIpLCBRUXVpY2tXZWJWaWV3OjpJbnRl
cm5hbEVycm9yRG9tYWluLCAwKTsKKworICAgICAgICBsb2FkUHJvZ3Jlc3NEaWRDaGFuZ2UoMTAw
KTsKKyAgICAgICAgZW1pdCBxLT5sb2FkaW5nQ2hhbmdlZCgmbG9hZFJlcXVlc3QpOworICAgIH0K
IH0KIAogdm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKQEAg
LTcwOCwxNiArNzc0LDYgQEAgdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6bG9h
ZAogICAgICAgICBsb2FkU3VjY2Vzc0Rpc3BhdGNoSXNQZW5kaW5nID0gdHJ1ZTsKIH0KIAotdm9p
ZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6bG9hZERpZENvbW1pdCgpCi17Ci0gICAg
Ly8gRHVlIHRvIGVudGVyaW5nIHByb3Zpc2lvbmFsIGxvYWQgYmVmb3JlIGNvbW1pdHRpbmcsIHdl
Ci0gICAgLy8gbWlnaHQgYWN0dWFsbHkgYmUgc3VzcGVuZGVkIGhlcmUuCi19Ci0KLXZvaWQgUVF1
aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OmRpZEZpbmlzaEZpcnN0Tm9uRW1wdHlMYXlvdXQo
KQotewotfQotCiB2b2lkIFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpkaWRDaGFuZ2VW
aWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiBuZXdB
dHRyaWJ1dGVzKQogewogICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKQEAgLTEzNjAsNyArMTQxNiw3
IEBAIFFVcmwgUVF1aWNrV2ViVmlldzo6aWNvbigpIGNvbnN0CiBpbnQgUVF1aWNrV2ViVmlldzo6
bG9hZFByb2dyZXNzKCkgY29uc3QKIHsKICAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7Ci0g
ICAgcmV0dXJuIGQtPnBhZ2VMb2FkQ2xpZW50LT5sb2FkUHJvZ3Jlc3MoKTsKKyAgICByZXR1cm4g
ZC0+bG9hZFByb2dyZXNzKCk7CiB9CiAKIGJvb2wgUVF1aWNrV2ViVmlldzo6Y2FuR29CYWNrKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
d19wX3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnZpZXdfcF9wLmgJKHJldmlzaW9uIDExNjMwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsNyBAQCBjbGFzcyBEcmF3aW5nQXJlYVByb3h5OwogY2xhc3MgUXREaWFsb2dSdW5uZXI7
CiBjbGFzcyBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU7CiBjbGFzcyBRdFdlYkNvbnRleHQ7
CitjbGFzcyBRdFdlYkVycm9yOwogY2xhc3MgUXRXZWJQYWdlTG9hZENsaWVudDsKIGNsYXNzIFF0
V2ViUGFnZVBvbGljeUNsaWVudDsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKQEAgLTczLDEzICs3NCwx
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBRUG9pbnRGIHBhZ2VJdGVtUG9zKCk7CiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzU2l6ZShjb25zdCBRU2l6ZUYmKSB7IH0KIAorICAgIHZp
cnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWREaWRTdGFydChjb25zdCBRVXJsJiB1cmwpOworICAg
IHZpcnR1YWwgdm9pZCBsb2FkRGlkQ29tbWl0KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFNhbWVE
b2N1bWVudE5hdmlnYXRpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGl0bGVEaWRDaGFuZ2UoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZFByb2dyZXNzRGlkQ2hhbmdlKGludCBsb2FkUHJvZ3Jlc3Mp
OworICAgIHZpcnR1YWwgdm9pZCBiYWNrRm9yd2FyZExpc3REaWRDaGFuZ2UoKTsKICAgICB2aXJ0
dWFsIHZvaWQgbG9hZERpZFN1Y2NlZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZEZhaWwo
Y29uc3QgV2ViS2l0OjpRdFdlYkVycm9yJiBlcnJvcik7CisKICAgICB2aXJ0dWFsIHZvaWQgb25D
b21wb25lbnRDb21wbGV0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlkQ29tbWl0KCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaEZpcnN0Tm9uRW1wdHlMYXlvdXQoKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6
OlZpZXdwb3J0QXR0cmlidXRlcyYgYXR0cikgeyB9Ci0gICAgdm9pZCBkaWRDaGFuZ2VCYWNrRm9y
d2FyZExpc3QoKTsKIAorICAgIGludCBsb2FkUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX2xv
YWRQcm9ncmVzczsgfQogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICB2aXJ0dWFs
IFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiB2aWV3cG9ydEludGVyYWN0aW9u
RW5naW5lKCkgeyByZXR1cm4gMDsgfQpAQCAtMTkzLDYgKzIwMCw3IEBAIHByb3RlY3RlZDoKICAg
ICBib29sIG1fZGlhbG9nQWN0aXZlOwogICAgIFFVcmwgbV9pY29uVVJMOwogICAgIFFVcmwgbV9k
ZWZlcmVkVXJsVG9Mb2FkOworICAgIGludCBtX2xvYWRQcm9ncmVzczsKIH07CiAKIGNsYXNzIFFR
dWlja1dlYlZpZXdMZWdhY3lQcml2YXRlIDogcHVibGljIFFRdWlja1dlYlZpZXdQcml2YXRlIHsK
QEAgLTIyMSw4ICsyMjksNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgbG9hZERpZFN1
Y2NlZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgb25Db21wb25lbnRDb21wbGV0ZSgpOwotICAgIHZp
cnR1YWwgdm9pZCBsb2FkRGlkQ29tbWl0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaEZp
cnN0Tm9uRW1wdHlMYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQ
cm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpOwogICAgIHZpcnR1
YWwgV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIHZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmUoKSB7IHJldHVybiBpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCk7IH0KICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJFcnJvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0V2ViRXJyb3IuY3BwCShyZXZpc2lvbiAxMTYzMDUpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDQg
KzY2LDkgQEAgUVN0cmluZyBRdFdlYkVycm9yOjpkZXNjcmlwdGlvbigpIGNvbnN0CiAgICAgcmV0
dXJuIFdLU3RyaW5nQ29weVFTdHJpbmcoV0tFcnJvckNvcHlMb2NhbGl6ZWREZXNjcmlwdGlvbihl
cnJvci5nZXQoKSkpOwogfQogCitib29sIFF0V2ViRXJyb3I6OmlzQ2FuY2VsbGF0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gdG9JbXBsKGVycm9yLmdldCgpKS0+cGxhdGZvcm1FcnJvcigpLmlz
Q2FuY2VsbGF0aW9uKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5oCShyZXZpc2lvbiAxMTYzMDUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICBRVXJsIHVybCgpIGNvbnN0OwogICAgIGludCBl
cnJvckNvZGUoKSBjb25zdDsKICAgICBRU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAg
Ym9vbCBpc0NhbmNlbGxhdGlvbigpIGNvbnN0OwogCiAgICAgaW50IGVycm9yQ29kZUFzSHR0cFN0
YXR1c0NvZGUoKSBjb25zdCB7IHJldHVybiBlcnJvckNvZGUoKTsgfQogICAgIFFOZXR3b3JrUmVw
bHk6Ok5ldHdvcmtFcnJvciBlcnJvckNvZGVBc05ldHdvcmtFcnJvcigpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PFFOZXR3b3JrUmVwbHk6Ok5ldHdvcmtFcnJvcj4oZXJyb3JDb2RlKCkpOyB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlTG9hZENsaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUxv
YWRDbGllbnQuY3BwCShyZXZpc2lvbiAxMTYzMDUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJQYWdlTG9hZENsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEzICsy
Miw3IEBACiAjaW5jbHVkZSAiUXRXZWJQYWdlTG9hZENsaWVudC5oIgogCiAjaW5jbHVkZSAiUXRX
ZWJFcnJvci5oIgotI2luY2x1ZGUgIldLU3RyaW5nUXQuaCIKLSNpbmNsdWRlICJxcXVpY2t3ZWJ2
aWV3X3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3BfcC5oIgotI2luY2x1ZGUgInF3ZWJs
b2FkcmVxdWVzdF9wLmgiCi0jaW5jbHVkZSA8S1VSTC5oPgotI2luY2x1ZGUgPFdLRnJhbWUuaD4K
LSNpbmNsdWRlIDxXZWJQYWdlUHJveHkuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
QEAgLTM2LDggKzMwLDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIFF0V2ViUGFnZUxvYWRDbGll
bnQ6OlF0V2ViUGFnZUxvYWRDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIFFRdWlja1dlYlZpZXcq
IHdlYlZpZXcpCiAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKLSAgICAsIG1fd2ViUGFnZVByb3h5
KHRvSW1wbChwYWdlUmVmKSkKLSAgICAsIG1fbG9hZFByb2dyZXNzKDApCiB7CiAgICAgV0tQYWdl
TG9hZGVyQ2xpZW50IGxvYWRDbGllbnQ7CiAgICAgbWVtc2V0KCZsb2FkQ2xpZW50LCAwLCBzaXpl
b2YoV0tQYWdlTG9hZGVyQ2xpZW50KSk7CkBAIC01Myw1NyArNDUsMzggQEAgUXRXZWJQYWdlTG9h
ZENsaWVudDo6UXRXZWJQYWdlTG9hZENsaWVudAogICAgIGxvYWRDbGllbnQuZGlkU3RhcnRQcm9n
cmVzcyA9IGRpZFN0YXJ0UHJvZ3Jlc3M7CiAgICAgbG9hZENsaWVudC5kaWRDaGFuZ2VQcm9ncmVz
cyA9IGRpZENoYW5nZVByb2dyZXNzOwogICAgIGxvYWRDbGllbnQuZGlkRmluaXNoUHJvZ3Jlc3Mg
PSBkaWRGaW5pc2hQcm9ncmVzczsKLSAgICBsb2FkQ2xpZW50LmRpZEZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dEZvckZyYW1lID0gZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJh
bWU7CiAgICAgbG9hZENsaWVudC5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QgPSBkaWRDaGFuZ2VC
YWNrRm9yd2FyZExpc3Q7CiAgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudChwYWdlUmVmLCAm
bG9hZENsaWVudCk7CiB9CiAKLXZvaWQgUXRXZWJQYWdlTG9hZENsaWVudDo6Y29tcGxldGVMb2Fk
V2hlblByb2Nlc3NEaWRDcmFzaElmTmVlZGVkKCkKLXsKLSAgICAvLyBDaGVjayBpZiBsb2FkaW5n
IHdhcyBvbmdvaW5nLCB3aGVuIHByb2Nlc3MgY3Jhc2hlZC4KLSAgICBpZiAoIW1fbG9hZFByb2dy
ZXNzIHx8IG1fbG9hZFByb2dyZXNzID09IDEwMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVVy
bCB1cmwoS1VSTChXZWJDb3JlOjpQYXJzZWRVUkxTdHJpbmcsIG1fd2ViUGFnZVByb3h5LT51cmxB
dFByb2Nlc3NFeGl0KCkpKTsKLSAgICBRV2ViTG9hZFJlcXVlc3QgbG9hZFJlcXVlc3QodXJsLCBR
UXVpY2tXZWJWaWV3OjpMb2FkRmFpbGVkU3RhdHVzLCBRTGF0aW4xU3RyaW5nKCJUaGUgd2ViIHBy
b2Nlc3MgY3Jhc2hlZC4iKSwgUVF1aWNrV2ViVmlldzo6SW50ZXJuYWxFcnJvckRvbWFpbiwgMCk7
Ci0KLSAgICBlbWl0IG1fd2ViVmlldy0+bG9hZGluZ0NoYW5nZWQoJmxvYWRSZXF1ZXN0KTsKLSAg
ICBzZXRMb2FkUHJvZ3Jlc3MoMTAwKTsKLX0KLQogdm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50Ojpk
aWRTdGFydFByb3Zpc2lvbmFsTG9hZChjb25zdCBRVXJsJiB1cmwpCiB7Ci0gICAgUVdlYkxvYWRS
ZXF1ZXN0IGxvYWRSZXF1ZXN0KHVybCwgUVF1aWNrV2ViVmlldzo6TG9hZFN0YXJ0ZWRTdGF0dXMp
OwotICAgIGVtaXQgbV93ZWJWaWV3LT5sb2FkaW5nQ2hhbmdlZCgmbG9hZFJlcXVlc3QpOworICAg
IG1fd2ViVmlldy0+ZF9mdW5jKCktPnByb3Zpc2lvbmFsTG9hZERpZFN0YXJ0KHVybCk7CiB9CiAK
IHZvaWQgUXRXZWJQYWdlTG9hZENsaWVudDo6ZGlkQ29tbWl0TG9hZCgpCiB7Ci0gICAgZW1pdCBt
X3dlYlZpZXctPm5hdmlnYXRpb25IaXN0b3J5Q2hhbmdlZCgpOwotICAgIGVtaXQgbV93ZWJWaWV3
LT51cmxDaGFuZ2VkKCk7Ci0gICAgZW1pdCBtX3dlYlZpZXctPnRpdGxlQ2hhbmdlZCgpOwogICAg
IG1fd2ViVmlldy0+ZF9mdW5jKCktPmxvYWREaWRDb21taXQoKTsKIH0KIAogdm9pZCBRdFdlYlBh
Z2VMb2FkQ2xpZW50OjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKCkKIHsKLSAgICBlbWl0IG1f
d2ViVmlldy0+bmF2aWdhdGlvbkhpc3RvcnlDaGFuZ2VkKCk7Ci0gICAgZW1pdCBtX3dlYlZpZXct
PnVybENoYW5nZWQoKTsKKyAgICBtX3dlYlZpZXctPmRfZnVuYygpLT5kaWRTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uKCk7CiB9CiAKIHZvaWQgUXRXZWJQYWdlTG9hZENsaWVudDo6ZGlkUmVjZWl2ZVRp
dGxlKCkKIHsKLSAgICBlbWl0IG1fd2ViVmlldy0+dGl0bGVDaGFuZ2VkKCk7CisgICAgbV93ZWJW
aWV3LT5kX2Z1bmMoKS0+dGl0bGVEaWRDaGFuZ2UoKTsKIH0KIAotdm9pZCBRdFdlYlBhZ2VMb2Fk
Q2xpZW50OjpkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKQordm9pZCBRdFdlYlBhZ2VM
b2FkQ2xpZW50OjpkaWRDaGFuZ2VQcm9ncmVzcyhpbnQgbG9hZFByb2dyZXNzKQogewotICAgIG1f
d2ViVmlldy0+ZF9mdW5jKCktPmRpZEZpbmlzaEZpcnN0Tm9uRW1wdHlMYXlvdXQoKTsKKyAgICBt
X3dlYlZpZXctPmRfZnVuYygpLT5sb2FkUHJvZ3Jlc3NEaWRDaGFuZ2UobG9hZFByb2dyZXNzKTsK
IH0KIAogdm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Qo
KQogewotICAgIG1fd2ViVmlldy0+ZF9mdW5jKCktPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdCgp
OworICAgIG1fd2ViVmlldy0+ZF9mdW5jKCktPmJhY2tGb3J3YXJkTGlzdERpZENoYW5nZSgpOwog
fQogCiB2b2lkIFF0V2ViUGFnZUxvYWRDbGllbnQ6OmRpc3BhdGNoTG9hZFN1Y2NlZWRlZCgpCkBA
IC0xMTEsMjQgKzg0LDE3IEBAIHZvaWQgUXRXZWJQYWdlTG9hZENsaWVudDo6ZGlzcGF0Y2hMb2Fk
U3UKICAgICBtX3dlYlZpZXctPmRfZnVuYygpLT5sb2FkRGlkU3VjY2VlZCgpOwogfQogCi12b2lk
IFF0V2ViUGFnZUxvYWRDbGllbnQ6OmRpc3BhdGNoTG9hZEZhaWxlZChXS0Vycm9yUmVmIGVycm9y
KQordm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaXNwYXRjaExvYWRGYWlsZWQoY29uc3QgUXRX
ZWJFcnJvciYgZXJyb3IpCiB7Ci0gICAgaW50IGVycm9yQ29kZSA9IFdLRXJyb3JHZXRFcnJvckNv
ZGUoZXJyb3IpOwotICAgIGlmICh0b0ltcGwoZXJyb3IpLT5wbGF0Zm9ybUVycm9yKCkuaXNDYW5j
ZWxsYXRpb24oKSB8fCBlcnJvckNvZGUgPT0ga1dLRXJyb3JDb2RlRnJhbWVMb2FkSW50ZXJydXB0
ZWRCeVBvbGljeUNoYW5nZSB8fCBlcnJvckNvZGUgPT0ga1dLRXJyb3JDb2RlUGx1Z0luV2lsbEhh
bmRsZUxvYWQpIHsKKyAgICBpbnQgZXJyb3JDb2RlID0gZXJyb3IuZXJyb3JDb2RlKCk7CisKKyAg
ICBpZiAoZXJyb3IuaXNDYW5jZWxsYXRpb24oKSB8fCBlcnJvckNvZGUgPT0ga1dLRXJyb3JDb2Rl
RnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBvbGljeUNoYW5nZSB8fCBlcnJvckNvZGUgPT0ga1dLRXJy
b3JDb2RlUGx1Z0luV2lsbEhhbmRsZUxvYWQpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
TG9hZFN0YXJ0ZWRTdGF0dXMgaGFzIGEgY291bnRlcnBhcnQgd2hlbiBlLmcuIHJlcXVlc3Rpbmcg
YSBkb3dubG9hZC4KICAgICAgICAgZGlzcGF0Y2hMb2FkU3VjY2VlZGVkKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBRdFdlYkVycm9yIHF0RXJyb3IoZXJyb3IpOwotICAgIFFXZWJM
b2FkUmVxdWVzdCBsb2FkUmVxdWVzdChxdEVycm9yLnVybCgpLCBRUXVpY2tXZWJWaWV3OjpMb2Fk
RmFpbGVkU3RhdHVzLCBxdEVycm9yLmRlc2NyaXB0aW9uKCksIHN0YXRpY19jYXN0PFFRdWlja1dl
YlZpZXc6OkVycm9yRG9tYWluPihxdEVycm9yLnR5cGUoKSksIHF0RXJyb3IuZXJyb3JDb2RlKCkp
OwotICAgIGVtaXQgbV93ZWJWaWV3LT5sb2FkaW5nQ2hhbmdlZCgmbG9hZFJlcXVlc3QpOwotfQot
Ci12b2lkIFF0V2ViUGFnZUxvYWRDbGllbnQ6OnNldExvYWRQcm9ncmVzcyhpbnQgbG9hZFByb2dy
ZXNzKQotewotICAgIG1fbG9hZFByb2dyZXNzID0gbG9hZFByb2dyZXNzOwotICAgIGVtaXQgbV93
ZWJWaWV3LT5sb2FkUHJvZ3Jlc3NDaGFuZ2VkKCk7CisgICAgbV93ZWJWaWV3LT5kX2Z1bmMoKS0+
bG9hZERpZEZhaWwoZXJyb3IpOwogfQogCiBzdGF0aWMgUXRXZWJQYWdlTG9hZENsaWVudCogdG9R
dFdlYlBhZ2VMb2FkQ2xpZW50KGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0xNDEsOCArMTA3
LDcgQEAgdm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRTdGFydFByb3ZpcwogewogICAgIGlm
ICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKICAgICAgICAgcmV0dXJuOwotICAgIFdlYkZy
YW1lUHJveHkqIHdrZnJhbWUgPSB0b0ltcGwoZnJhbWUpOwotICAgIFFTdHJpbmcgdXJsU3RyKHdr
ZnJhbWUtPnByb3Zpc2lvbmFsVVJMKCkpOworICAgIFFTdHJpbmcgdXJsU3RyKHRvSW1wbChmcmFt
ZSktPnByb3Zpc2lvbmFsVVJMKCkpOwogICAgIFFVcmwgcVVybCA9IHVybFN0cjsKICAgICB0b1F0
V2ViUGFnZUxvYWRDbGllbnQoY2xpZW50SW5mbyktPmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKHFV
cmwpOwogfQpAQCAtMTkxLDI2ICsxNTYsMTcgQEAgdm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50Ojpk
aWRSZWNlaXZlVGl0bAogCiB2b2lkIFF0V2ViUGFnZUxvYWRDbGllbnQ6OmRpZFN0YXJ0UHJvZ3Jl
c3MoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIFF0V2ViUGFnZUxv
YWRDbGllbnQqIGNsaWVudCA9IHRvUXRXZWJQYWdlTG9hZENsaWVudChjbGllbnRJbmZvKTsKLSAg
ICBjbGllbnQtPnNldExvYWRQcm9ncmVzcygwKTsKLSAgICBjbGllbnQtPm1fd2ViVmlldy0+ZF9m
dW5jKCktPnNldEljb24oUVVybCgpKTsKKyAgICB0b1F0V2ViUGFnZUxvYWRDbGllbnQoY2xpZW50
SW5mbyktPmRpZENoYW5nZVByb2dyZXNzKDApOwogfQogCiB2b2lkIFF0V2ViUGFnZUxvYWRDbGll
bnQ6OmRpZENoYW5nZVByb2dyZXNzKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQogewotICAgIHRvUXRXZWJQYWdlTG9hZENsaWVudChjbGllbnRJbmZvKS0+c2V0TG9hZFBy
b2dyZXNzKFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKHBhZ2UpICogMTAwKTsKKyAgICB0b1F0
V2ViUGFnZUxvYWRDbGllbnQoY2xpZW50SW5mbyktPmRpZENoYW5nZVByb2dyZXNzKFdLUGFnZUdl
dEVzdGltYXRlZFByb2dyZXNzKHBhZ2UpICogMTAwKTsKIH0KIAogdm9pZCBRdFdlYlBhZ2VMb2Fk
Q2xpZW50OjpkaWRGaW5pc2hQcm9ncmVzcyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCiB7Ci0gICAgdG9RdFdlYlBhZ2VMb2FkQ2xpZW50KGNsaWVudEluZm8pLT5zZXRMb2FkUHJv
Z3Jlc3MoMTAwKTsKLX0KLQotdm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYgZnJhbWUsIFdL
VHlwZVJlZiwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKLXsKLSAgICBpZiAoIVdLRnJhbWVJc01h
aW5GcmFtZShmcmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICB0b1F0V2ViUGFnZUxvYWRDbGll
bnQoY2xpZW50SW5mbyktPmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCgpOworICAgIHRv
UXRXZWJQYWdlTG9hZENsaWVudChjbGllbnRJbmZvKS0+ZGlkQ2hhbmdlUHJvZ3Jlc3MoMTAwKTsK
IH0KIAogdm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Qo
V0tQYWdlUmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYsIFdLQXJyYXlSZWYsIGNvbnN0IHZv
aWQgKmNsaWVudEluZm8pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlTG9hZENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFdlYlBhZ2VMb2FkQ2xpZW50LmgJKHJldmlzaW9uIDExNjMwNSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VMb2FkQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDI3ICszMiwyMyBAQCBjbGFzcyBRUXVpY2tXZWJWaWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgUXRXZWJFcnJvcjsKIAogY2xhc3MgUXRX
ZWJQYWdlTG9hZENsaWVudCB7CiBwdWJsaWM6CiAgICAgUXRXZWJQYWdlTG9hZENsaWVudChXS1Bh
Z2VSZWYsIFFRdWlja1dlYlZpZXcqKTsKIAotICAgIGludCBsb2FkUHJvZ3Jlc3MoKSBjb25zdCB7
IHJldHVybiBtX2xvYWRQcm9ncmVzczsgfQotICAgIHZvaWQgY29tcGxldGVMb2FkV2hlblByb2Nl
c3NEaWRDcmFzaElmTmVlZGVkKCk7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCBkaWRTdGFydFByb3Zp
c2lvbmFsTG9hZChjb25zdCBRVXJsJik7CiAgICAgdm9pZCBkaWRDb21taXRMb2FkKCk7CiAgICAg
dm9pZCBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlVGl0
bGUoKTsKLSAgICB2b2lkIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCgpOworICAgIHZv
aWQgZGlkQ2hhbmdlUHJvZ3Jlc3MoaW50KTsKICAgICB2b2lkIGRpZENoYW5nZUJhY2tGb3J3YXJk
TGlzdCgpOwogCiAgICAgdm9pZCBkaXNwYXRjaExvYWRTdWNjZWVkZWQoKTsKLSAgICB2b2lkIGRp
c3BhdGNoTG9hZEZhaWxlZChXS0Vycm9yUmVmKTsKKyAgICB2b2lkIGRpc3BhdGNoTG9hZEZhaWxl
ZChjb25zdCBRdFdlYkVycm9yJik7CiAKLSAgICB2b2lkIHNldExvYWRQcm9ncmVzcyhpbnQpOwog
CiAgICAgLy8gV0tQYWdlTG9hZENsaWVudCBjYWxsYmFja3MuCiAgICAgc3RhdGljIHZvaWQgZGlk
U3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLVHlw
ZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CkBAIC02NSwxMiArNjEsOSBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRpZFN0YXJ0UHJvZ3Jlc3MoV0tQYWdlUmVmLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKICAgICBzdGF0aWMgdm9pZCBkaWRDaGFuZ2VQcm9ncmVz
cyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogICAgIHN0YXRpYyB2b2lkIGRp
ZEZpbmlzaFByb2dyZXNzKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci0gICAg
c3RhdGljIHZvaWQgZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUoV0tQYWdl
UmVmLCBXS0ZyYW1lUmVmLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOwogICAgIHN0YXRpYyB2b2lkIGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXS1BhZ2VSZWYs
IFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiwgV0tBcnJheVJlZiwgY29uc3Qgdm9pZCAqY2xpZW50
SW5mbyk7CiAKICAgICBRUXVpY2tXZWJWaWV3KiBtX3dlYlZpZXc7Ci0gICAgV2ViUGFnZVByb3h5
KiBtX3dlYlBhZ2VQcm94eTsKLSAgICBpbnQgbV9sb2FkUHJvZ3Jlc3M7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJraXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140908</attachid>
            <date>2012-05-09 04:13:24 -0700</date>
            <delta_ts>2012-05-09 05:10:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84527-20120509131321.patch</filename>
            <type>text/plain</type>
            <size>18270</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNjUwNykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA1LTA5ICBaYWxhbiBC
dWp0YXMgIDx6YnVqdGFzQGdtYWlsLmNvbT4KKworICAgICAgICBbUXRdW1dLMl0gRGVmaW5lIGNs
ZWFyIHNwbGl0IGJldHdlZW4gUXRXZWJQYWdlTG9hZENsaWVudCBhbmQgUVF1aWNrV2ViVmlld1By
aXZhdGUgZm9yIGxvYWRpbmcgdGFza3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NDUyNyNjMworCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhh
dXNtYW5uLgorCisgICAgICAgIE1vdmluZyBsb2FkaW5nIHJlbGF0ZWQgY29kZSBhbmQgc2lnbmFs
IGVtaXNzaW9uIGZyb20gUXRXZWJQYWdlTG9hZENsaWVudCB0byBRUXVpY2tXZWJWaWV3UHJpdmF0
ZS4KKyAgICAgICAgSXQgcHV0cyB0aGUgbG9hZGluZyBjb2RlIHRoYXQgaW1wbGVtZW50cyBhbiBB
UEkgcmlnaHQgd2hlcmUgdGhlIEFQSSBpcyBkZWZpbmVkLCBpbmNsdWRpbmcKKyAgICAgICAgc2ln
bmFsIGVtaXNzaW9uIGFzIHdlbGwgYXMgdHJhbnNsYXRpb24gb2YgV2ViUGFnZVByb3h5IGludGVy
bmFscyB0byBwdWJsaWMgUXQgQVBJIHdpdGggY29ycmVjdCB0eXBlcy4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6UVF1aWNrV2ViVmlld1ByaXZhdGUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1By
aXZhdGU6OnByb3Zpc2lvbmFsTG9hZERpZFN0YXJ0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQ
cml2YXRlOjpsb2FkRGlkQ29tbWl0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpk
aWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRl
Ojp0aXRsZURpZENoYW5nZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6bG9hZFBy
b2dyZXNzRGlkQ2hhbmdlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpiYWNrRm9y
d2FyZExpc3REaWRDaGFuZ2UpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OmxvYWRE
aWRGYWlsKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpwcm9jZXNzRGlkQ3Jhc2gp
OgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6bG9hZFByb2dyZXNzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmg6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZh
dGU6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6bG9hZFByb2dyZXNzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQ
cml2YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlF0V2ViRXJyb3I6OmlzQ2FuY2VsbGF0aW9uKToKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViRXJyb3IuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvUXRXZWJQYWdlTG9hZENsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFn
ZUxvYWRDbGllbnQ6OlF0V2ViUGFnZUxvYWRDbGllbnQpOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYktpdDo6UXRXZWJQYWdlTG9hZENsaWVudDo6ZGlkU3RhcnRQcm92aXNpb25hbExv
YWQpOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRDb21taXRMb2Fk
KToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlTG9hZENsaWVudDo6ZGlkU2FtZURvY3VtZW50
TmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFnZUxvYWRDbGllbnQ6OmRpZFJl
Y2VpdmVUaXRsZSk6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFnZUxvYWRDbGllbnQ6OmRpZENo
YW5nZVByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlTG9hZENsaWVudDo6ZGlk
Q2hhbmdlQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlTG9hZENs
aWVudDo6ZGlzcGF0Y2hMb2FkRmFpbGVkKToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlTG9h
ZENsaWVudDo6ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6UXRXZWJQYWdlTG9hZENsaWVudDo6ZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JG
cmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFnZUxvYWRDbGllbnQ6OmRpZFN0YXJ0UHJv
Z3Jlc3MpOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRGaW5pc2hQ
cm9ncmVzcyk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUxvYWRDbGllbnQuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChRdFdlYlBhZ2VMb2FkQ2xpZW50KToKKwogMjAx
Mi0wNS0wOSAgWmFsYW4gQnVqdGFzICA8emJ1anRhc0BnbWFpbC5jb20+CiAKICAgICAgICAgW1F0
XVtXSzJdIFJlbW92ZSBkZWxheWVkIGxvYWREaWRTdWNjZWVkKCkgc2lnbmFsaW5nIGFuZCBtX2Rl
ZmVyZWRVcmxUb0xvYWQgZnJvbSBRUXVpY2tXZWJWaWV3UHJpdmF0ZQpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCShyZXZpc2lv
biAxMTY1MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiUXREb3du
bG9hZE1hbmFnZXIuaCIKICNpbmNsdWRlICJRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIK
ICNpbmNsdWRlICJRdFdlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJRdFdlYkVycm9yLmgiCiAjaW5j
bHVkZSAiUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VFdmVu
dEhhbmRsZXIuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VMb2FkQ2xpZW50LmgiCkBAIC0yNjUsNiAr
MjY2LDcgQEAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2YQogICAgICwg
bV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3JlbmRlclRvT2Zmc2Ny
ZWVuQnVmZmVyKGZhbHNlKQogICAgICwgbV9kaWFsb2dBY3RpdmUoZmFsc2UpCisgICAgLCBtX2xv
YWRQcm9ncmVzcygwKQogewogICAgIHZpZXdwb3J0LT5zZXRDbGlwKHRydWUpOwogICAgIHZpZXdw
b3J0LT5zZXRQaXhlbEFsaWduZWQodHJ1ZSk7CkBAIC0zMzMsMTQgKzMzNSw3NCBAQCBRUG9pbnRG
IFFRdWlja1dlYlZpZXdQcml2YXRlOjpwYWdlSXRlbVBvCiAgICAgXHFtbHNpZ25hbCBXZWJWaWV3
Ojpsb2FkaW5nQ2hhbmdlZChXZWJMb2FkUmVxdWVzdCByZXF1ZXN0KQogKi8KIAordm9pZCBRUXVp
Y2tXZWJWaWV3UHJpdmF0ZTo6cHJvdmlzaW9uYWxMb2FkRGlkU3RhcnQoY29uc3QgUVVybCYgdXJs
KQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKworICAgIFFXZWJMb2FkUmVxdWVzdCBsb2Fk
UmVxdWVzdCh1cmwsIFFRdWlja1dlYlZpZXc6OkxvYWRTdGFydGVkU3RhdHVzKTsKKyAgICBlbWl0
IHEtPmxvYWRpbmdDaGFuZ2VkKCZsb2FkUmVxdWVzdCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmll
d1ByaXZhdGU6OmxvYWREaWRDb21taXQoKQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKyAg
ICBBU1NFUlQocS0+bG9hZGluZygpKTsKKworICAgIGVtaXQgcS0+bmF2aWdhdGlvbkhpc3RvcnlD
aGFuZ2VkKCk7CisgICAgZW1pdCBxLT51cmxDaGFuZ2VkKCk7CisgICAgZW1pdCBxLT50aXRsZUNo
YW5nZWQoKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6ZGlkU2FtZURvY3VtZW50
TmF2aWdhdGlvbigpCit7CisgICAgUV9RKFFRdWlja1dlYlZpZXcpOworCisgICAgZW1pdCBxLT5u
YXZpZ2F0aW9uSGlzdG9yeUNoYW5nZWQoKTsKKyAgICBlbWl0IHEtPnVybENoYW5nZWQoKTsKK30K
Kwordm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6dGl0bGVEaWRDaGFuZ2UoKQoreworICAgIFFf
UShRUXVpY2tXZWJWaWV3KTsKKworICAgIGVtaXQgcS0+dGl0bGVDaGFuZ2VkKCk7Cit9CisKK3Zv
aWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmxvYWRQcm9ncmVzc0RpZENoYW5nZShpbnQgbG9hZFBy
b2dyZXNzKQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKworICAgIGlmICghbG9hZFByb2dy
ZXNzKQorICAgICAgICBzZXRJY29uKFFVcmwoKSk7CisKKyAgICBtX2xvYWRQcm9ncmVzcyA9IGxv
YWRQcm9ncmVzczsKKworICAgIGVtaXQgcS0+bG9hZFByb2dyZXNzQ2hhbmdlZCgpOworfQorCit2
b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpiYWNrRm9yd2FyZExpc3REaWRDaGFuZ2UoKQorewor
ICAgIG5hdmlnYXRpb25IaXN0b3J5LT5kLT5yZXNldCgpOworfQorCiB2b2lkIFFRdWlja1dlYlZp
ZXdQcml2YXRlOjpsb2FkRGlkU3VjY2VlZCgpCiB7CiAgICAgUV9RKFFRdWlja1dlYlZpZXcpOwog
ICAgIEFTU0VSVCghcS0+bG9hZGluZygpKTsKKwogICAgIFFXZWJMb2FkUmVxdWVzdCBsb2FkUmVx
dWVzdChxLT51cmwoKSwgUVF1aWNrV2ViVmlldzo6TG9hZFN1Y2NlZWRlZFN0YXR1cyk7CiAgICAg
ZW1pdCBxLT5sb2FkaW5nQ2hhbmdlZCgmbG9hZFJlcXVlc3QpOwogfQogCit2b2lkIFFRdWlja1dl
YlZpZXdQcml2YXRlOjpsb2FkRGlkRmFpbChjb25zdCBRdFdlYkVycm9yJiBlcnJvcikKK3sKKyAg
ICBRX1EoUVF1aWNrV2ViVmlldyk7CisgICAgQVNTRVJUKCFxLT5sb2FkaW5nKCkpOworCisgICAg
UVdlYkxvYWRSZXF1ZXN0IGxvYWRSZXF1ZXN0KGVycm9yLnVybCgpLCBRUXVpY2tXZWJWaWV3OjpM
b2FkRmFpbGVkU3RhdHVzLCBlcnJvci5kZXNjcmlwdGlvbigpLCBzdGF0aWNfY2FzdDxRUXVpY2tX
ZWJWaWV3OjpFcnJvckRvbWFpbj4oZXJyb3IudHlwZSgpKSwgZXJyb3IuZXJyb3JDb2RlKCkpOwor
ICAgIGVtaXQgcS0+bG9hZGluZ0NoYW5nZWQoJmxvYWRSZXF1ZXN0KTsKK30KKwogdm9pZCBRUXVp
Y2tXZWJWaWV3UHJpdmF0ZTo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKICAgICBRX1EoUVF1aWNrV2Vi
Vmlldyk7CkBAIC0zNjQsMTggKzQyNiwyMiBAQCB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpf
cV9vbkljb25DaGFuCiAgICAgc2V0SWNvbihpY29uVVJMKTsKIH0KIAotdm9pZCBRUXVpY2tXZWJW
aWV3UHJpdmF0ZTo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KCkKLXsKLSAgICBuYXZpZ2F0aW9u
SGlzdG9yeS0+ZC0+cmVzZXQoKTsKLX0KLQogdm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6cHJv
Y2Vzc0RpZENyYXNoKCkKIHsKLSAgICBwYWdlVmlldy0+ZXZlbnRIYW5kbGVyKCktPnJlc2V0R2Vz
dHVyZVJlY29nbml6ZXJzKCk7Ci0gICAgcGFnZUxvYWRDbGllbnQtPmNvbXBsZXRlTG9hZFdoZW5Q
cm9jZXNzRGlkQ3Jhc2hJZk5lZWRlZCgpOworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKIAogICAg
IFFVcmwgdXJsKEtVUkwoV2ViQ29yZTo6UGFyc2VkVVJMU3RyaW5nLCB3ZWJQYWdlUHJveHktPnVy
bEF0UHJvY2Vzc0V4aXQoKSkpOwogICAgIHFXYXJuaW5nKCJXQVJOSU5HOiBUaGUgd2ViIHByb2Nl
c3MgZXhwZXJpZW5jZWQgYSBjcmFzaCBvbiAnJXMnLiIsIHFQcmludGFibGUodXJsLnRvU3RyaW5n
KFFVcmw6OlJlbW92ZVVzZXJJbmZvKSkpOworCisgICAgcGFnZVZpZXctPmV2ZW50SGFuZGxlcigp
LT5yZXNldEdlc3R1cmVSZWNvZ25pemVycygpOworCisgICAgLy8gQ2hlY2sgaWYgbG9hZGluZyB3
YXMgb25nb2luZywgd2hlbiBwcm9jZXNzIGNyYXNoZWQuCisgICAgaWYgKG1fbG9hZFByb2dyZXNz
ID4gMCAmJiBtX2xvYWRQcm9ncmVzcyA8IDEwMCkgeworICAgICAgICBRV2ViTG9hZFJlcXVlc3Qg
bG9hZFJlcXVlc3QodXJsLCBRUXVpY2tXZWJWaWV3OjpMb2FkRmFpbGVkU3RhdHVzLCBRTGF0aW4x
U3RyaW5nKCJUaGUgd2ViIHByb2Nlc3MgY3Jhc2hlZC4iKSwgUVF1aWNrV2ViVmlldzo6SW50ZXJu
YWxFcnJvckRvbWFpbiwgMCk7CisKKyAgICAgICAgbG9hZFByb2dyZXNzRGlkQ2hhbmdlKDEwMCk7
CisgICAgICAgIGVtaXQgcS0+bG9hZGluZ0NoYW5nZWQoJmxvYWRSZXF1ZXN0KTsKKyAgICB9CiB9
CiAKIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmRpZFJlbGF1bmNoUHJvY2VzcygpCkBAIC03
ODcsMTYgKzg1Myw2IEBAIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6Om9uQ28K
ICAgICBfcV9vblZpc2libGVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgUVF1aWNrV2ViVmlld0ZsaWNr
YWJsZVByaXZhdGU6OmxvYWREaWRDb21taXQoKQotewotICAgIC8vIER1ZSB0byBlbnRlcmluZyBw
cm92aXNpb25hbCBsb2FkIGJlZm9yZSBjb21taXR0aW5nLCB3ZQotICAgIC8vIG1pZ2h0IGFjdHVh
bGx5IGJlIHN1c3BlbmRlZCBoZXJlLgotfQotCi12b2lkIFFRdWlja1dlYlZpZXdGbGlja2FibGVQ
cml2YXRlOjpkaWRGaW5pc2hGaXJzdE5vbkVtcHR5TGF5b3V0KCkKLXsKLX0KLQogdm9pZCBRUXVp
Y2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNv
bnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKIHsKICAgICBR
X1EoUVF1aWNrV2ViVmlldyk7CkBAIC0xNDUyLDcgKzE1MDgsNyBAQCBRVXJsIFFRdWlja1dlYlZp
ZXc6Omljb24oKSBjb25zdAogaW50IFFRdWlja1dlYlZpZXc6OmxvYWRQcm9ncmVzcygpIGNvbnN0
CiB7CiAgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOwotICAgIHJldHVybiBkLT5wYWdlTG9h
ZENsaWVudC0+bG9hZFByb2dyZXNzKCk7CisgICAgcmV0dXJuIGQtPmxvYWRQcm9ncmVzcygpOwog
fQogCiBib29sIFFRdWlja1dlYlZpZXc6OmNhbkdvQmFjaygpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCShy
ZXZpc2lvbiAxMTY1MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnZpZXdfcF9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgRHJh
d2luZ0FyZWFQcm94eTsKIGNsYXNzIFF0RGlhbG9nUnVubmVyOwogY2xhc3MgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOwogY2xhc3MgUXRXZWJDb250ZXh0OworY2xhc3MgUXRXZWJFcnJvcjsK
IGNsYXNzIFF0V2ViUGFnZUxvYWRDbGllbnQ7CiBjbGFzcyBRdFdlYlBhZ2VQb2xpY3lDbGllbnQ7
CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC03NSwxMiArNzYsMTggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgUVBvaW50RiBwYWdlSXRlbVBvcygpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250
ZW50c1NpemUoY29uc3QgUVNpemVGJikgeyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9u
YWxMb2FkRGlkU3RhcnQoY29uc3QgUVVybCYgdXJsKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERp
ZENvbW1pdCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKCk7
CisgICAgdmlydHVhbCB2b2lkIHRpdGxlRGlkQ2hhbmdlKCk7CisgICAgdmlydHVhbCB2b2lkIGxv
YWRQcm9ncmVzc0RpZENoYW5nZShpbnQgbG9hZFByb2dyZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YmFja0ZvcndhcmRMaXN0RGlkQ2hhbmdlKCk7CiAgICAgdmlydHVhbCB2b2lkIGxvYWREaWRTdWNj
ZWVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWREaWRDb21taXQoKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZGlkRmluaXNoRmlyc3ROb25FbXB0eUxheW91dCgpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBsb2FkRGlkRmFpbChjb25zdCBXZWJLaXQ6OlF0V2ViRXJyb3ImIGVycm9yKTsKKwogICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmll
d3BvcnRBdHRyaWJ1dGVzJiBhdHRyKSB7IH0KLSAgICB2b2lkIGRpZENoYW5nZUJhY2tGb3J3YXJk
TGlzdCgpOwogCisgICAgaW50IGxvYWRQcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZFBy
b2dyZXNzOyB9CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKIAogICAgIHZpcnR1YWwgV2Vi
S2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIHZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmUoKSB7IHJldHVybiAwOyB9CkBAIC0xOTMsNiArMjAwLDcgQEAgcHJvdGVjdGVkOgogICAgIGJv
b2wgbV9yZW5kZXJUb09mZnNjcmVlbkJ1ZmZlcjsKICAgICBib29sIG1fZGlhbG9nQWN0aXZlOwog
ICAgIFFVcmwgbV9pY29uVVJMOworICAgIGludCBtX2xvYWRQcm9ncmVzczsKIH07CiAKIGNsYXNz
IFFRdWlja1dlYlZpZXdMZWdhY3lQcml2YXRlIDogcHVibGljIFFRdWlja1dlYlZpZXdQcml2YXRl
IHsKQEAgLTIyMSw4ICsyMjksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBRUG9pbnRGIHBhZ2VJ
dGVtUG9zKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzU2l6ZShjb25zdCBRU2l6
ZUYmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBsb2FkRGlkQ29tbWl0KCk7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZEZpbmlzaEZpcnN0Tm9uRW1wdHlMYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRl
cyYpOwogICAgIHZpcnR1YWwgV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIHZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoKSB7IHJldHVybiBpbnRlcmFjdGlvbkVuZ2luZS5kYXRh
KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViRXJyb3IuY3BwCShyZXZpc2lvbiAxMTY1MDcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDQgKzY2LDkgQEAgUVN0cmluZyBRdFdlYkVycm9yOjpkZXNjcmlwdGlvbigp
IGNvbnN0CiAgICAgcmV0dXJuIFdLU3RyaW5nQ29weVFTdHJpbmcoV0tFcnJvckNvcHlMb2NhbGl6
ZWREZXNjcmlwdGlvbihlcnJvci5nZXQoKSkpOwogfQogCitib29sIFF0V2ViRXJyb3I6OmlzQ2Fu
Y2VsbGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdG9JbXBsKGVycm9yLmdldCgpKS0+cGxh
dGZvcm1FcnJvcigpLmlzQ2FuY2VsbGF0aW9uKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViRXJyb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5oCShyZXZpc2lv
biAxMTY1MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICBRVXJsIHVybCgpIGNv
bnN0OwogICAgIGludCBlcnJvckNvZGUoKSBjb25zdDsKICAgICBRU3RyaW5nIGRlc2NyaXB0aW9u
KCkgY29uc3Q7CisgICAgYm9vbCBpc0NhbmNlbGxhdGlvbigpIGNvbnN0OwogCiAgICAgaW50IGVy
cm9yQ29kZUFzSHR0cFN0YXR1c0NvZGUoKSBjb25zdCB7IHJldHVybiBlcnJvckNvZGUoKTsgfQog
ICAgIFFOZXR3b3JrUmVwbHk6Ok5ldHdvcmtFcnJvciBlcnJvckNvZGVBc05ldHdvcmtFcnJvcigp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFFOZXR3b3JrUmVwbHk6Ok5ldHdvcmtFcnJvcj4o
ZXJyb3JDb2RlKCkpOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlTG9hZENsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZUxvYWRDbGllbnQuY3BwCShyZXZpc2lvbiAxMTY1MDcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlTG9hZENsaWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDEzICsyMiw3IEBACiAjaW5jbHVkZSAiUXRXZWJQYWdlTG9hZENsaWVudC5oIgog
CiAjaW5jbHVkZSAiUXRXZWJFcnJvci5oIgotI2luY2x1ZGUgIldLU3RyaW5nUXQuaCIKLSNpbmNs
dWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3BfcC5oIgot
I2luY2x1ZGUgInF3ZWJsb2FkcmVxdWVzdF9wLmgiCi0jaW5jbHVkZSA8S1VSTC5oPgotI2luY2x1
ZGUgPFdLRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJQYWdlUHJveHkuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKQEAgLTM2LDggKzMwLDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIFF0
V2ViUGFnZUxvYWRDbGllbnQ6OlF0V2ViUGFnZUxvYWRDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYs
IFFRdWlja1dlYlZpZXcqIHdlYlZpZXcpCiAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKLSAgICAs
IG1fd2ViUGFnZVByb3h5KHRvSW1wbChwYWdlUmVmKSkKLSAgICAsIG1fbG9hZFByb2dyZXNzKDAp
CiB7CiAgICAgV0tQYWdlTG9hZGVyQ2xpZW50IGxvYWRDbGllbnQ7CiAgICAgbWVtc2V0KCZsb2Fk
Q2xpZW50LCAwLCBzaXplb2YoV0tQYWdlTG9hZGVyQ2xpZW50KSk7CkBAIC01Myw1NyArNDUsMzgg
QEAgUXRXZWJQYWdlTG9hZENsaWVudDo6UXRXZWJQYWdlTG9hZENsaWVudAogICAgIGxvYWRDbGll
bnQuZGlkU3RhcnRQcm9ncmVzcyA9IGRpZFN0YXJ0UHJvZ3Jlc3M7CiAgICAgbG9hZENsaWVudC5k
aWRDaGFuZ2VQcm9ncmVzcyA9IGRpZENoYW5nZVByb2dyZXNzOwogICAgIGxvYWRDbGllbnQuZGlk
RmluaXNoUHJvZ3Jlc3MgPSBkaWRGaW5pc2hQcm9ncmVzczsKLSAgICBsb2FkQ2xpZW50LmRpZEZp
cnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lID0gZGlkRmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0Rm9yRnJhbWU7CiAgICAgbG9hZENsaWVudC5kaWRDaGFuZ2VCYWNrRm9yd2FyZExp
c3QgPSBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Q7CiAgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNs
aWVudChwYWdlUmVmLCAmbG9hZENsaWVudCk7CiB9CiAKLXZvaWQgUXRXZWJQYWdlTG9hZENsaWVu
dDo6Y29tcGxldGVMb2FkV2hlblByb2Nlc3NEaWRDcmFzaElmTmVlZGVkKCkKLXsKLSAgICAvLyBD
aGVjayBpZiBsb2FkaW5nIHdhcyBvbmdvaW5nLCB3aGVuIHByb2Nlc3MgY3Jhc2hlZC4KLSAgICBp
ZiAoIW1fbG9hZFByb2dyZXNzIHx8IG1fbG9hZFByb2dyZXNzID09IDEwMCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUVVybCB1cmwoS1VSTChXZWJDb3JlOjpQYXJzZWRVUkxTdHJpbmcsIG1fd2Vi
UGFnZVByb3h5LT51cmxBdFByb2Nlc3NFeGl0KCkpKTsKLSAgICBRV2ViTG9hZFJlcXVlc3QgbG9h
ZFJlcXVlc3QodXJsLCBRUXVpY2tXZWJWaWV3OjpMb2FkRmFpbGVkU3RhdHVzLCBRTGF0aW4xU3Ry
aW5nKCJUaGUgd2ViIHByb2Nlc3MgY3Jhc2hlZC4iKSwgUVF1aWNrV2ViVmlldzo6SW50ZXJuYWxF
cnJvckRvbWFpbiwgMCk7Ci0KLSAgICBlbWl0IG1fd2ViVmlldy0+bG9hZGluZ0NoYW5nZWQoJmxv
YWRSZXF1ZXN0KTsKLSAgICBzZXRMb2FkUHJvZ3Jlc3MoMTAwKTsKLX0KLQogdm9pZCBRdFdlYlBh
Z2VMb2FkQ2xpZW50OjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZChjb25zdCBRVXJsJiB1cmwpCiB7
Ci0gICAgUVdlYkxvYWRSZXF1ZXN0IGxvYWRSZXF1ZXN0KHVybCwgUVF1aWNrV2ViVmlldzo6TG9h
ZFN0YXJ0ZWRTdGF0dXMpOwotICAgIGVtaXQgbV93ZWJWaWV3LT5sb2FkaW5nQ2hhbmdlZCgmbG9h
ZFJlcXVlc3QpOworICAgIG1fd2ViVmlldy0+ZF9mdW5jKCktPnByb3Zpc2lvbmFsTG9hZERpZFN0
YXJ0KHVybCk7CiB9CiAKIHZvaWQgUXRXZWJQYWdlTG9hZENsaWVudDo6ZGlkQ29tbWl0TG9hZCgp
CiB7Ci0gICAgZW1pdCBtX3dlYlZpZXctPm5hdmlnYXRpb25IaXN0b3J5Q2hhbmdlZCgpOwotICAg
IGVtaXQgbV93ZWJWaWV3LT51cmxDaGFuZ2VkKCk7Ci0gICAgZW1pdCBtX3dlYlZpZXctPnRpdGxl
Q2hhbmdlZCgpOwogICAgIG1fd2ViVmlldy0+ZF9mdW5jKCktPmxvYWREaWRDb21taXQoKTsKIH0K
IAogdm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKCkK
IHsKLSAgICBlbWl0IG1fd2ViVmlldy0+bmF2aWdhdGlvbkhpc3RvcnlDaGFuZ2VkKCk7Ci0gICAg
ZW1pdCBtX3dlYlZpZXctPnVybENoYW5nZWQoKTsKKyAgICBtX3dlYlZpZXctPmRfZnVuYygpLT5k
aWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKCk7CiB9CiAKIHZvaWQgUXRXZWJQYWdlTG9hZENsaWVu
dDo6ZGlkUmVjZWl2ZVRpdGxlKCkKIHsKLSAgICBlbWl0IG1fd2ViVmlldy0+dGl0bGVDaGFuZ2Vk
KCk7CisgICAgbV93ZWJWaWV3LT5kX2Z1bmMoKS0+dGl0bGVEaWRDaGFuZ2UoKTsKIH0KIAotdm9p
ZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKQor
dm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRDaGFuZ2VQcm9ncmVzcyhpbnQgbG9hZFByb2dy
ZXNzKQogewotICAgIG1fd2ViVmlldy0+ZF9mdW5jKCktPmRpZEZpbmlzaEZpcnN0Tm9uRW1wdHlM
YXlvdXQoKTsKKyAgICBtX3dlYlZpZXctPmRfZnVuYygpLT5sb2FkUHJvZ3Jlc3NEaWRDaGFuZ2Uo
bG9hZFByb2dyZXNzKTsKIH0KIAogdm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRDaGFuZ2VC
YWNrRm9yd2FyZExpc3QoKQogewotICAgIG1fd2ViVmlldy0+ZF9mdW5jKCktPmRpZENoYW5nZUJh
Y2tGb3J3YXJkTGlzdCgpOworICAgIG1fd2ViVmlldy0+ZF9mdW5jKCktPmJhY2tGb3J3YXJkTGlz
dERpZENoYW5nZSgpOwogfQogCiB2b2lkIFF0V2ViUGFnZUxvYWRDbGllbnQ6OmRpc3BhdGNoTG9h
ZFN1Y2NlZWRlZCgpCkBAIC0xMTEsMjQgKzg0LDE3IEBAIHZvaWQgUXRXZWJQYWdlTG9hZENsaWVu
dDo6ZGlzcGF0Y2hMb2FkU3UKICAgICBtX3dlYlZpZXctPmRfZnVuYygpLT5sb2FkRGlkU3VjY2Vl
ZCgpOwogfQogCi12b2lkIFF0V2ViUGFnZUxvYWRDbGllbnQ6OmRpc3BhdGNoTG9hZEZhaWxlZChX
S0Vycm9yUmVmIGVycm9yKQordm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaXNwYXRjaExvYWRG
YWlsZWQoY29uc3QgUXRXZWJFcnJvciYgZXJyb3IpCiB7Ci0gICAgaW50IGVycm9yQ29kZSA9IFdL
RXJyb3JHZXRFcnJvckNvZGUoZXJyb3IpOwotICAgIGlmICh0b0ltcGwoZXJyb3IpLT5wbGF0Zm9y
bUVycm9yKCkuaXNDYW5jZWxsYXRpb24oKSB8fCBlcnJvckNvZGUgPT0ga1dLRXJyb3JDb2RlRnJh
bWVMb2FkSW50ZXJydXB0ZWRCeVBvbGljeUNoYW5nZSB8fCBlcnJvckNvZGUgPT0ga1dLRXJyb3JD
b2RlUGx1Z0luV2lsbEhhbmRsZUxvYWQpIHsKKyAgICBpbnQgZXJyb3JDb2RlID0gZXJyb3IuZXJy
b3JDb2RlKCk7CisKKyAgICBpZiAoZXJyb3IuaXNDYW5jZWxsYXRpb24oKSB8fCBlcnJvckNvZGUg
PT0ga1dLRXJyb3JDb2RlRnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBvbGljeUNoYW5nZSB8fCBlcnJv
ckNvZGUgPT0ga1dLRXJyb3JDb2RlUGx1Z0luV2lsbEhhbmRsZUxvYWQpIHsKICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgTG9hZFN0YXJ0ZWRTdGF0dXMgaGFzIGEgY291bnRlcnBhcnQgd2hlbiBl
LmcuIHJlcXVlc3RpbmcgYSBkb3dubG9hZC4KICAgICAgICAgZGlzcGF0Y2hMb2FkU3VjY2VlZGVk
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBRdFdlYkVycm9yIHF0RXJyb3IoZXJy
b3IpOwotICAgIFFXZWJMb2FkUmVxdWVzdCBsb2FkUmVxdWVzdChxdEVycm9yLnVybCgpLCBRUXVp
Y2tXZWJWaWV3OjpMb2FkRmFpbGVkU3RhdHVzLCBxdEVycm9yLmRlc2NyaXB0aW9uKCksIHN0YXRp
Y19jYXN0PFFRdWlja1dlYlZpZXc6OkVycm9yRG9tYWluPihxdEVycm9yLnR5cGUoKSksIHF0RXJy
b3IuZXJyb3JDb2RlKCkpOwotICAgIGVtaXQgbV93ZWJWaWV3LT5sb2FkaW5nQ2hhbmdlZCgmbG9h
ZFJlcXVlc3QpOwotfQotCi12b2lkIFF0V2ViUGFnZUxvYWRDbGllbnQ6OnNldExvYWRQcm9ncmVz
cyhpbnQgbG9hZFByb2dyZXNzKQotewotICAgIG1fbG9hZFByb2dyZXNzID0gbG9hZFByb2dyZXNz
OwotICAgIGVtaXQgbV93ZWJWaWV3LT5sb2FkUHJvZ3Jlc3NDaGFuZ2VkKCk7CisgICAgbV93ZWJW
aWV3LT5kX2Z1bmMoKS0+bG9hZERpZEZhaWwoZXJyb3IpOwogfQogCiBzdGF0aWMgUXRXZWJQYWdl
TG9hZENsaWVudCogdG9RdFdlYlBhZ2VMb2FkQ2xpZW50KGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
CkBAIC0xNDEsOCArMTA3LDcgQEAgdm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRTdGFydFBy
b3ZpcwogewogICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKICAgICAgICAgcmV0
dXJuOwotICAgIFdlYkZyYW1lUHJveHkqIHdrZnJhbWUgPSB0b0ltcGwoZnJhbWUpOwotICAgIFFT
dHJpbmcgdXJsU3RyKHdrZnJhbWUtPnByb3Zpc2lvbmFsVVJMKCkpOworICAgIFFTdHJpbmcgdXJs
U3RyKHRvSW1wbChmcmFtZSktPnByb3Zpc2lvbmFsVVJMKCkpOwogICAgIFFVcmwgcVVybCA9IHVy
bFN0cjsKICAgICB0b1F0V2ViUGFnZUxvYWRDbGllbnQoY2xpZW50SW5mbyktPmRpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkKHFVcmwpOwogfQpAQCAtMTkxLDI2ICsxNTYsMTcgQEAgdm9pZCBRdFdlYlBh
Z2VMb2FkQ2xpZW50OjpkaWRSZWNlaXZlVGl0bAogCiB2b2lkIFF0V2ViUGFnZUxvYWRDbGllbnQ6
OmRpZFN0YXJ0UHJvZ3Jlc3MoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewot
ICAgIFF0V2ViUGFnZUxvYWRDbGllbnQqIGNsaWVudCA9IHRvUXRXZWJQYWdlTG9hZENsaWVudChj
bGllbnRJbmZvKTsKLSAgICBjbGllbnQtPnNldExvYWRQcm9ncmVzcygwKTsKLSAgICBjbGllbnQt
Pm1fd2ViVmlldy0+ZF9mdW5jKCktPnNldEljb24oUVVybCgpKTsKKyAgICB0b1F0V2ViUGFnZUxv
YWRDbGllbnQoY2xpZW50SW5mbyktPmRpZENoYW5nZVByb2dyZXNzKDApOwogfQogCiB2b2lkIFF0
V2ViUGFnZUxvYWRDbGllbnQ6OmRpZENoYW5nZVByb2dyZXNzKFdLUGFnZVJlZiBwYWdlLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIHRvUXRXZWJQYWdlTG9hZENsaWVudChjbGllbnRJ
bmZvKS0+c2V0TG9hZFByb2dyZXNzKFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKHBhZ2UpICog
MTAwKTsKKyAgICB0b1F0V2ViUGFnZUxvYWRDbGllbnQoY2xpZW50SW5mbyktPmRpZENoYW5nZVBy
b2dyZXNzKFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKHBhZ2UpICogMTAwKTsKIH0KIAogdm9p
ZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRGaW5pc2hQcm9ncmVzcyhXS1BhZ2VSZWYsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgdG9RdFdlYlBhZ2VMb2FkQ2xpZW50KGNsaWVudElu
Zm8pLT5zZXRMb2FkUHJvZ3Jlc3MoMTAwKTsKLX0KLQotdm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50
OjpkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJh
bWVSZWYgZnJhbWUsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKLXsKLSAgICBp
ZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICB0b1F0
V2ViUGFnZUxvYWRDbGllbnQoY2xpZW50SW5mbyktPmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dCgpOworICAgIHRvUXRXZWJQYWdlTG9hZENsaWVudChjbGllbnRJbmZvKS0+ZGlkQ2hhbmdl
UHJvZ3Jlc3MoMTAwKTsKIH0KIAogdm9pZCBRdFdlYlBhZ2VMb2FkQ2xpZW50OjpkaWRDaGFuZ2VC
YWNrRm9yd2FyZExpc3QoV0tQYWdlUmVmLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYsIFdLQXJy
YXlSZWYsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlTG9hZENsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VMb2FkQ2xpZW50LmgJKHJldmlzaW9uIDExNjUwNykK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VMb2FkQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDI3ICszMiwyMyBAQCBjbGFzcyBRUXVpY2tXZWJWaWV3OwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgUXRXZWJFcnJv
cjsKIAogY2xhc3MgUXRXZWJQYWdlTG9hZENsaWVudCB7CiBwdWJsaWM6CiAgICAgUXRXZWJQYWdl
TG9hZENsaWVudChXS1BhZ2VSZWYsIFFRdWlja1dlYlZpZXcqKTsKIAotICAgIGludCBsb2FkUHJv
Z3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX2xvYWRQcm9ncmVzczsgfQotICAgIHZvaWQgY29tcGxl
dGVMb2FkV2hlblByb2Nlc3NEaWRDcmFzaElmTmVlZGVkKCk7Ci0KIHByaXZhdGU6CiAgICAgdm9p
ZCBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZChjb25zdCBRVXJsJik7CiAgICAgdm9pZCBkaWRDb21t
aXRMb2FkKCk7CiAgICAgdm9pZCBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKCk7CiAgICAgdm9p
ZCBkaWRSZWNlaXZlVGl0bGUoKTsKLSAgICB2b2lkIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dCgpOworICAgIHZvaWQgZGlkQ2hhbmdlUHJvZ3Jlc3MoaW50KTsKICAgICB2b2lkIGRpZENo
YW5nZUJhY2tGb3J3YXJkTGlzdCgpOwogCiAgICAgdm9pZCBkaXNwYXRjaExvYWRTdWNjZWVkZWQo
KTsKLSAgICB2b2lkIGRpc3BhdGNoTG9hZEZhaWxlZChXS0Vycm9yUmVmKTsKKyAgICB2b2lkIGRp
c3BhdGNoTG9hZEZhaWxlZChjb25zdCBRdFdlYkVycm9yJik7CiAKLSAgICB2b2lkIHNldExvYWRQ
cm9ncmVzcyhpbnQpOwogCiAgICAgLy8gV0tQYWdlTG9hZENsaWVudCBjYWxsYmFja3MuCiAgICAg
c3RhdGljIHZvaWQgZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1BhZ2VSZWYsIFdL
RnJhbWVSZWYsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CkBA
IC02NSwxMiArNjEsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRpZFN0YXJ0UHJvZ3Jl
c3MoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKICAgICBzdGF0aWMgdm9pZCBk
aWRDaGFuZ2VQcm9ncmVzcyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogICAg
IHN0YXRpYyB2b2lkIGRpZEZpbmlzaFByb2dyZXNzKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbyk7Ci0gICAgc3RhdGljIHZvaWQgZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0
Rm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOwogICAgIHN0YXRpYyB2b2lkIGRpZENoYW5nZUJhY2tGb3J3YXJk
TGlzdChXS1BhZ2VSZWYsIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiwgV0tBcnJheVJlZiwgY29u
c3Qgdm9pZCAqY2xpZW50SW5mbyk7CiAKICAgICBRUXVpY2tXZWJWaWV3KiBtX3dlYlZpZXc7Ci0g
ICAgV2ViUGFnZVByb3h5KiBtX3dlYlBhZ2VQcm94eTsKLSAgICBpbnQgbV9sb2FkUHJvZ3Jlc3M7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJraXQK
</data>

          </attachment>
      

    </bug>

</bugzilla>