<?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>98874</bug_id>
          
          <creation_ts>2012-10-10 00:34:23 -0700</creation_ts>
          <short_desc>[GTK] WebKitWebView doesn&apos;t notify of favicon changes for known favicons but new pages</short_desc>
          <delta_ts>2012-11-08 01:37:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>mario</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>738682</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-10 00:34:23 -0700</bug_when>
    <thetext>If the page is unknown (not registered in the icon database) but the icon is known (registered by another page) favicon-ready signal is not emitted because the icon has already been imported from the database. The view always asks for the favicon when the load has been committed, but it&apos;s usually too early and the favicon of the page is still unkown. 

To reproduce:

1.- Delete your icon database
2.- Start minibrowser
3.- Go to a page that has a favicon
4.- Click on a link in the same page that loads a new page

We need to know when the favicon is updated in the database to ask for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738697</commentid>
    <comment_count>1</comment_count>
      <attachid>167948</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-10 00:58:17 -0700</bug_when>
    <thetext>Created attachment 167948
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738699</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 01:00:26 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738700</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 01:00:46 -0700</bug_when>
    <thetext>Attachment 167948 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:106:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:107:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:108:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738749</commentid>
    <comment_count>4</comment_count>
      <attachid>167948</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-10-10 01:59:54 -0700</bug_when>
    <thetext>Comment on attachment 167948
Patch

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

Looks good to me, just have some minor comments

&gt; Source/WebKit2/ChangeLog:36
&gt; +        (_WebKitWebViewPrivate): Add favicon URI to make we only ask for a

&quot; to make we only ask &quot; -&gt; &quot; to make sure we only ask &quot;

&gt; Source/WebKit2/ChangeLog:45
&gt; +        (faviconChangedCallback): Call webkitWebViewUpdateFaviconURI) with

&quot;webkitWebViewUpdateFaviconURI)&quot; -&gt; &quot;webkitWebViewUpdateFaviconURI()&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:290
&gt; +static void getFaviconReadyCallback(GObject* object, GAsyncResult* result, gpointer userData)

Maybe rename it to getFaviconCallback, getFaviconAsyncCallback or getFaviconFromDatabaseCallback ?

getFaviconReadyCallback sounds strange to me (seems like it comes from the previous favicon-ready signal)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:294
&gt; +    if (!g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) {

I guess the reason to only check if the error is G_IO_ERROR_CANCELLED is because in any other case (error or not) we want to update the favicon, setting it to 0 if an error other than &apos;cancelled&apos; has actually happened, right?

If so, I think a brief comment would be nice here, since at a first glance it surprised me not to see something like a plain &quot;if (!error)&quot;. Maybe it&apos;s just me, though :)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:313
&gt; +    if (webView-&gt;priv-&gt;faviconURI == faviconURI)

I&apos;m not sure whether you want this check here. What if the URI is the same but the actual data for the favicon has changed? I&apos;m afraid in that case you might find yourself trying to update the favicon and getting no results.

I suppose the reason for this is that this method is actually called webkitWebViewUpdateFaviconURI(), which leds to my second comment: supposing you consider my comment of removing this early return, and as the method is actually requesting a favicon from the database in its last line, perhaps it would be better to rename it to webkitWebViewUpdateFavicon()?

Or maybe you just want to keep the URI updated and update the icon&apos;s data _only_ when that URI changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738771</commentid>
    <comment_count>5</comment_count>
      <attachid>167948</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-10 03:00:19 -0700</bug_when>
    <thetext>Comment on attachment 167948
Patch

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

&gt;&gt; Source/WebKit2/ChangeLog:36
&gt;&gt; +        (_WebKitWebViewPrivate): Add favicon URI to make we only ask for a
&gt; 
&gt; &quot; to make we only ask &quot; -&gt; &quot; to make sure we only ask &quot;

Good catch thanks

&gt;&gt; Source/WebKit2/ChangeLog:45
&gt;&gt; +        (faviconChangedCallback): Call webkitWebViewUpdateFaviconURI) with
&gt; 
&gt; &quot;webkitWebViewUpdateFaviconURI)&quot; -&gt; &quot;webkitWebViewUpdateFaviconURI()&quot;

Oops

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:290
&gt;&gt; +static void getFaviconReadyCallback(GObject* object, GAsyncResult* result, gpointer userData)
&gt; 
&gt; Maybe rename it to getFaviconCallback, getFaviconAsyncCallback or getFaviconFromDatabaseCallback ?
&gt; 
&gt; getFaviconReadyCallback sounds strange to me (seems like it comes from the previous favicon-ready signal)

This doesn&apos;t come from favicon-ready, but from webkit_favicon_database_get_favicon(), it&apos;s the GAsyncReadyCallback. We can call it gotFaviconCallback for example, but since there&apos;s favicon-ready signal anymore there&apos;s no confusion, no?

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:294
&gt;&gt; +    if (!g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
&gt; 
&gt; I guess the reason to only check if the error is G_IO_ERROR_CANCELLED is because in any other case (error or not) we want to update the favicon, setting it to 0 if an error other than &apos;cancelled&apos; has actually happened, right?
&gt; 
&gt; If so, I think a brief comment would be nice here, since at a first glance it surprised me not to see something like a plain &quot;if (!error)&quot;. Maybe it&apos;s just me, though :)

Yes we don&apos;t want to reset the favicon when the request has been cancelled. Maybe it&apos;s easier to understand if we return early when the error is cancelled.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:313
&gt;&gt; +    if (webView-&gt;priv-&gt;faviconURI == faviconURI)
&gt; 
&gt; I&apos;m not sure whether you want this check here. What if the URI is the same but the actual data for the favicon has changed? I&apos;m afraid in that case you might find yourself trying to update the favicon and getting no results.
&gt; 
&gt; I suppose the reason for this is that this method is actually called webkitWebViewUpdateFaviconURI(), which leds to my second comment: supposing you consider my comment of removing this early return, and as the method is actually requesting a favicon from the database in its last line, perhaps it would be better to rename it to webkitWebViewUpdateFavicon()?
&gt; 
&gt; Or maybe you just want to keep the URI updated and update the icon&apos;s data _only_ when that URI changes?

I&apos;m not sure that&apos;s possible, do you know a test case where the data of the favicon changes, but not he uri? Anyway, the idea is to not ask for the favicon unless the favicon URI has changed. If it&apos;s possible to change the icon contents in the database, but not the uri, this method shouldn&apos;t be called anyway, In such case webkitWebViewUpdateFavicon() will be called. I guess we would need a new signal in the database favicon-data-changed or something like that. Note that the iconChanged callback is not called in this page http://www.p01.org/releases/DEFENDER_of_the_favicon/ after the favicon has been added to the database.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738779</commentid>
    <comment_count>6</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-10-10 03:09:50 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; [...]
&gt; This doesn&apos;t come from favicon-ready, but from
&gt; webkit_favicon_database_get_favicon(), it&apos;s the GAsyncReadyCallback. We can
&gt; call it gotFaviconCallback for example, but since there&apos;s favicon-ready
&gt; signal anymore there&apos;s no confusion, no?

Yes, I know. It&apos;s not about avoiding the confusion, but just about removing the word ready from there, which I think it&apos;s not needed.

Not a strong opinion anyway, though.

&gt; [...]
&gt; Yes we don&apos;t want to reset the favicon when the request has been cancelled. 
&gt; Maybe it&apos;s easier to understand if we return early when the error is 
&gt; cancelled.

Yes, that might work too.

&gt; [...]
&gt; I&apos;m not sure that&apos;s possible, do you know a test case where the data of the
&gt; favicon changes, but not he uri?

Not really.

&gt; Anyway, the idea is to not ask for the favicon unless the favicon URI has
&gt; changed. If it&apos;s possible to change the icon contents in the database, but
&gt; not the uri, this method shouldn&apos;t be called anyway, In such case
&gt; webkitWebViewUpdateFavicon() will be called. I guess we would need a new
&gt; signal in the database favicon-data-changed or something like that.

Fair enough, I can buy this.

&gt; Note that the iconChanged callback is not called in this page
&gt; http://www.p01.org/releases/DEFENDER_of_the_favicon/ after the favicon
&gt; has been added to the database.

Ok. Forget about those comments then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738803</commentid>
    <comment_count>7</comment_count>
      <attachid>167969</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-10 03:45:15 -0700</bug_when>
    <thetext>Created attachment 167969
Updated patch to address review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738810</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 03:48:04 -0700</bug_when>
    <thetext>Attachment 167969 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:106:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:107:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:108:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739671</commentid>
    <comment_count>9</comment_count>
      <attachid>167969</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-10-11 00:48:23 -0700</bug_when>
    <thetext>Comment on attachment 167969
Updated patch to address review comments

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

Looks good to me. Now I think it&apos;s time someone else performed an official review.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:295
&gt;          return;

I definitely like more this early return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739795</commentid>
    <comment_count>10</comment_count>
      <attachid>168190</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-11 04:10:35 -0700</bug_when>
    <thetext>Created attachment 168190
Patch updated to current git master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739799</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-11 04:13:11 -0700</bug_when>
    <thetext>Attachment 168190 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:106:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:107:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:108:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742125</commentid>
    <comment_count>12</comment_count>
      <attachid>168732</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-15 09:57:14 -0700</bug_when>
    <thetext>Created attachment 168732
Updated patch

Patch updated to add a change suggested by Mario, because unit tests didn&apos;t pass for him. The idea is to wait until there&apos;s an icon record in the database to emit favicon-changed. For some reason I don&apos;t need this to make unit tests pass, but it&apos;s a good idea in any case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742226</commentid>
    <comment_count>13</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-10-15 11:36:08 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=168732) [details]
&gt; Updated patch
&gt; 
&gt; Patch updated to add a change suggested by Mario, because unit tests didn&apos;t
&gt; pass for him. The idea is to wait until there&apos;s an icon record in the database
&gt; to emit favicon-changed. For some reason I don&apos;t need this to make unit tests
&gt; pass, but it&apos;s a good idea in any case.

Thanks. I&apos;ve tested this patch locally and I can confirm it works fine for me, at least in the cases I&apos;ve tried it out so far (running TestWebKitFavicons and testing my patches for epiphany with it)

So, it looks good to me, but some formal reviewer should bless it anyway. Any takers? Gustavo? Martin? Xan?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742407</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-15 14:09:44 -0700</bug_when>
    <thetext>Attachment 168732 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:106:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:107:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:108:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743090</commentid>
    <comment_count>15</comment_count>
      <attachid>168732</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-10-16 05:49:43 -0700</bug_when>
    <thetext>Comment on attachment 168732
Updated patch

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

This seems reasonable in general, I just have a few comments and questions. Still somebody else needs to have a look at it, and I&apos;d like to test the full thing (ephy patches included) before pushing it.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:182
&gt; +        return;

As commented on jabber, seems weird to check for this kind of thing in a callback. Carlos told me we do it because we cannot check beforehand when the process is done, but maybe add a FIXME for it.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:195
&gt; +

Also as commented on jabber, seems we are never notified when a favicon changen but its URIs stays the same. Not sure where this could be added as a FIXME, but it would be good to document somewhere this kind of thing.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:326
&gt; +        return;

This seems like pushing the &apos;early return&apos; religion a bit too far, but no big deal.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:182
&gt; +    // and then when the icon is loaded.

What happens when you ask for the favicon the first time then? You get nothing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743094</commentid>
    <comment_count>16</comment_count>
      <attachid>168732</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-16 06:04:12 -0700</bug_when>
    <thetext>Comment on attachment 168732
Updated patch

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

Thanks for reviewing it.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:182
&gt;&gt; +        return;
&gt; 
&gt; As commented on jabber, seems weird to check for this kind of thing in a callback. Carlos told me we do it because we cannot check beforehand when the process is done, but maybe add a FIXME for it.

We would need to add a callback to the C API client to get notified when the URL import is completed

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:195
&gt;&gt; +
&gt; 
&gt; Also as commented on jabber, seems we are never notified when a favicon changen but its URIs stays the same. Not sure where this could be added as a FIXME, but it would be good to document somewhere this kind of thing.

The API doc for favicon-changed signals says: &quot;This signal is emitted when the favicon URI of @page_uri has been changed to @favicon_uri in the database.&quot; so it&apos;s documented somewhere :-)

I was assuming we were not notified when the icon data changes, because this callback is never called for this page http://www.p01.org/releases/DEFENDER_of_the_favicon/ that changes the favicon dynamically, but I haven&apos;t tried other test cases, so I can be wrong.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:182
&gt;&gt; +    // and then when the icon is loaded.
&gt; 
&gt; What happens when you ask for the favicon the first time then? You get nothing?

The first time icon is NULL, so notify::favicon will be emitted when it becomes not NULL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743097</commentid>
    <comment_count>17</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-10-16 06:09:27 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 168732 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168732&amp;action=review
&gt; 
&gt; This seems reasonable in general, I just have a few comments and questions.
&gt; Still somebody else needs to have a look at it, and I&apos;d like to test the
&gt; full thing (ephy patches included) before pushing it.

As I said, the patch looks good to me as well. About the patches for ephy, those currently in [1] are already updated to take into account the patch being proposed here, so it&apos;s easy to try it out.

As for me, I&apos;ve just tried them out right now and I can confirm they work fine for me.

[1] https://bugzilla.gnome.org/show_bug.cgi?id=679370</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753155</commentid>
    <comment_count>18</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-10-29 01:35:23 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #15)
&gt; &gt; (From update of attachment 168732 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168732&amp;action=review
&gt; &gt; 
&gt; &gt; This seems reasonable in general, I just have a few comments and questions.
&gt; &gt; Still somebody else needs to have a look at it, and I&apos;d like to test the
&gt; &gt; full thing (ephy patches included) before pushing it.
&gt; 
&gt; As I said, the patch looks good to me as well. About the patches for ephy, those currently in [1] are already updated to take into account the patch being proposed here, so it&apos;s easy to try it out.
&gt; 
&gt; As for me, I&apos;ve just tried them out right now and I can confirm they work fine for me.
&gt; 
&gt; [1] https://bugzilla.gnome.org/show_bug.cgi?id=679370

Ping reviewers? This patch has been almost for 2 weeks here with no feedback and I think it would be good if we could move things forward, not to let it bitrot too much.

The patch works fine for me and makes possible to port one of epiphany&apos;s most visible missing features when using WK2, both in release and debug builds, so I don&apos;t see any reason why we shouldn&apos;t give it some love already, if time permits.

Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758784</commentid>
    <comment_count>19</comment_count>
      <attachid>168732</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-05 12:29:18 -0800</bug_when>
    <thetext>Comment on attachment 168732
Updated patch

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

This looks sane to me. I don&apos;t think we should block the patch any longer. If it needs to be tested in epiphany, we can always land after that&apos;s finished.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:108
&gt;&gt; +                     G_TYPE_STRING,
&gt; 
&gt; Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]

Please fix the style here before landing.

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:195
&gt;&gt;&gt; +
&gt;&gt; 
&gt;&gt; Also as commented on jabber, seems we are never notified when a favicon changen but its URIs stays the same. Not sure where this could be added as a FIXME, but it would be good to document somewhere this kind of thing.
&gt; 
&gt; The API doc for favicon-changed signals says: &quot;This signal is emitted when the favicon URI of @page_uri has been changed to @favicon_uri in the database.&quot; so it&apos;s documented somewhere :-)
&gt; 
&gt; I was assuming we were not notified when the icon data changes, because this callback is never called for this page http://www.p01.org/releases/DEFENDER_of_the_favicon/ that changes the favicon dynamically, but I haven&apos;t tried other test cases, so I can be wrong.

I think this is an interesting question to answer indeed. The callback name suggests that it should be called when the data changes, but not the URL. How exactly do we plan to support pages like http://www.p01.org/releases/DEFENDER_of_the_favicon/ if not with the favicon-changed signal? If this will never be called when the URL is the same perhaps it&apos;s better named favicon-uri-changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761424</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-08 00:35:52 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 168732 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168732&amp;action=review
&gt; 
&gt; This looks sane to me. I don&apos;t think we should block the patch any longer. If it needs to be tested in epiphany, we can always land after that&apos;s finished.

Thank you very much!

&gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:108
&gt; &gt;&gt; +                     G_TYPE_STRING,
&gt; &gt; 
&gt; &gt; Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; 
&gt; Please fix the style here before landing.
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:195
&gt; &gt;&gt;&gt; +
&gt; &gt;&gt; 
&gt; &gt;&gt; Also as commented on jabber, seems we are never notified when a favicon changen but its URIs stays the same. Not sure where this could be added as a FIXME, but it would be good to document somewhere this kind of thing.
&gt; &gt; 
&gt; &gt; The API doc for favicon-changed signals says: &quot;This signal is emitted when the favicon URI of @page_uri has been changed to @favicon_uri in the database.&quot; so it&apos;s documented somewhere :-)
&gt; &gt; 
&gt; &gt; I was assuming we were not notified when the icon data changes, because this callback is never called for this page http://www.p01.org/releases/DEFENDER_of_the_favicon/ that changes the favicon dynamically, but I haven&apos;t tried other test cases, so I can be wrong.
&gt; 
&gt; I think this is an interesting question to answer indeed. The callback name suggests that it should be called when the data changes, but not the URL. How exactly do we plan to support pages like http://www.p01.org/releases/DEFENDER_of_the_favicon/ if not with the favicon-changed signal? If this will never be called when the URL is the same perhaps it&apos;s better named favicon-uri-changed.

We could add a favicon-data-changed, or simply emit favicon-changed with the same URL and document that when the signal is emitted for the same icon URL is because the icon data changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761468</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-08 01:37:25 -0800</bug_when>
    <thetext>Committed r133867: &lt;http://trac.webkit.org/changeset/133867&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167948</attachid>
            <date>2012-10-10 00:58:17 -0700</date>
            <delta_ts>2012-10-10 03:45:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-favicon-changed.diff</filename>
            <type>text/plain</type>
            <size>27153</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZGYzMzcwLi5mM2UxNTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMg
QEAKKzIwMTItMTAtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFdlYktpdFdlYlZpZXcgZG9lc24ndCBub3RpZnkgb2YgZmF2aWNv
biBjaGFuZ2VzIGZvciBrbm93biBmYXZpY29ucyBidXQgbmV3IHBhZ2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODg3NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHRoZSBwYWdlIGlzIHVua25vd24g
KG5vdCByZWdpc3RlcmVkIGluIHRoZSBpY29uIGRhdGFiYXNlKSBidXQKKyAgICAgICAgdGhlIGlj
b24gaXMga25vd24gKHJlZ2lzdGVyZWQgYnkgYW5vdGhlciBwYWdlKSBmYXZpY29uLXJlYWR5Cisg
ICAgICAgIHNpZ25hbCBpcyBub3QgZW1pdHRlZCBiZWNhdXNlIHRoZSBpY29uIGhhcyBhbHJlYWR5
IGJlZW4gaW1wb3J0ZWQKKyAgICAgICAgZnJvbSB0aGUgZGF0YWJhc2UuIFRoZSB2aWV3IGFsd2F5
cyBhc2tzIGZvciB0aGUgZmF2aWNvbiB3aGVuIHRoZQorICAgICAgICBsb2FkIGhhcyBiZWVuIGNv
bW1pdHRlZCwgYnV0IGl0J3MgdXN1YWxseSB0b28gZWFybHkgYW5kIHRoZQorICAgICAgICBmYXZp
Y29uIG9mIHRoZSBwYWdlIGlzIHN0aWxsIHVua293bi4gV2UgY2FuIHVzZQorICAgICAgICBkaWRD
aGFuZ2VJY29uRm9yUGFnZVVSTENhbGxiYWNrIHRvIGtub3cgd2hlbiB0byBhc2sgZm9yIHRoZQor
ICAgICAgICBmYXZpY29uIGVtaXR0aW5nIGEgZmF2aWNvbi1jaGFuZ2VkIHNpZ25hbC4gVGhlIGNh
bGxiYWNrCisgICAgICAgIGljb25EYXRhUmVhZHlGb3JQYWdlVVJMQ2FsbGJhY2sgaXMgc3RpbGwg
dXNlZnVsIHRvIHByb2Nlc3MgcGVuZGluZworICAgICAgICBpY29uIHJlcXVlc3RzLCBidXQgdGhl
IGZhdmljb24tcmVhZHkgc2lnbmFsIGNhbiBiZSByZW1vdmVkIGluCisgICAgICAgIGZhdm9yIG9m
IGZhdmljb24tY2hhbmdlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZh
dmljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChfV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0
ZSk6IEtlZXAgYSBtYXAgb2YgcGFnZSBpY29ucyB0aGF0IGhhcworICAgICAgICBiZWVuIGltcG9y
dGVkIHRvIG1ha2Ugc3VyZSB3ZSBvbmx5IGVtaXQgZmF2aWNvbi1jaGFuZ2VkIHNpZ25hbAorICAg
ICAgICB3aGVuIHRoZSBmYXZpY29uIFVSSSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYmVjYXVzZQor
ICAgICAgICBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTENhbGxiYWNrIGNhbiBiZSBjYWxsZWQgbXVs
dGlwbGUgdGltZXMgZm9yCisgICAgICAgIHRoZSBzYW1lIGZhdmljb24gVVJJIGluIHNvbWUgY2Fz
ZXMuCisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGFzc19pbml0KTogUmVtb3Zl
IGZhdmljb24tcmVhZHkgc2lnbmFsCisgICAgICAgIGFuZCBhZGQgZmF2aWNvbi1jaGFuZ2VkIHRo
YXQgaW5jbHVkZXMgdGhlIG5ldyBmYXZpY29uIFVSSSBmb3IgdGhlCisgICAgICAgIGdpdmVuIHBh
Z2UgVVJJLgorICAgICAgICAoZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkxDYWxsYmFjayk6IEVtaXQg
ZmF2aWNvbi1jaGFuZ2VkIHNpZ25hbCBpZgorICAgICAgICB0aGUgZmF2aWNvbiBVUkkgaXMgbmV3
IG9yIGhhcyBjaGFuZ2VkIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkkuCisgICAgICAgIChpY29uRGF0
YVJlYWR5Rm9yUGFnZVVSTENhbGxiYWNrKTogUHJvY2VzcyBwZW5kaW5nIGljb24gcmVxdWVzdHMu
CisgICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUpOiBBZGQgaW1wbGVtZW50YXRp
b24gZm9yCisgICAgICAgIGRpZENoYW5nZUljb25Gb3JQYWdlVVJMQ2FsbGJhY2suCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAoX1dl
YktpdFdlYlZpZXdQcml2YXRlKTogQWRkIGZhdmljb24gVVJJIHRvIG1ha2Ugd2Ugb25seSBhc2sg
Zm9yIGEKKyAgICAgICAgbmV3IGZhdmljb24gd2hlbiB0aGUgZmF2aWNvbiBVUkkgaGFzIGNoYW5n
ZWQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvbik6IFVwZGF0ZSB0aGUgZmF2
aWNvbiBhbmQgZW1pdAorICAgICAgICBub3RpZnk6OmZhdmljb24gaWYgaXQgaGFzIGNoYW5nZWQu
CisgICAgICAgIChnZXRGYXZpY29uUmVhZHlDYWxsYmFjayk6IFVwZGF0ZSB0aGUgZmF2aWNvbiBp
ZiB0aGUgcmVxdWVzdAorICAgICAgICBoYXNuJ3QgYmVlbiBjYW5jZWxsZWQuCisgICAgICAgICh3
ZWJraXRXZWJWaWV3UmVxdWVzdEZhdmljb24pOiBBc2sgZm9yIHRoZSBwYWdlIGZhdmljb24uCisg
ICAgICAgICh3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSSk6IFVwZGF0ZWQgdGhlIGZhdmlj
b24gVVJJIGFuZAorICAgICAgICByZXF1ZXN0IHRoZSBwYWdlIGZhdmljb24gaWYgdGhlIGZhdmlj
b24gVVJJIGhhcyBjaGFuZ2VkLgorICAgICAgICAoZmF2aWNvbkNoYW5nZWRDYWxsYmFjayk6IENh
bGwgd2Via2l0V2ViVmlld1VwZGF0ZUZhdmljb25VUkkpIHdpdGgKKyAgICAgICAgdGhlIGdpdmVu
IGZhdmljb24gVVJJLgorICAgICAgICAod2Via2l0V2ViVmlld1dhdGNoRm9yQ2hhbmdlc0luRmF2
aWNvbik6IENvbm5lY3QgdG8KKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlOjpmYXZpY29u
LWNoYW5nZWQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3RGlzY29ubmVjdEZhdmljb25EYXRhYmFz
ZVNpZ25hbEhhbmRsZXJzKTogRGlzY29ubmVjdAorICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJh
c2U6OmZhdmljb24tY2hhbmdlZCBzaWduYWwuCisgICAgICAgICh3ZWJraXRXZWJWaWV3TG9hZENo
YW5nZWQpOiBDYWxsIHdlYmtpdFdlYlZpZXdVcGRhdGVGYXZpY29uVVJJKCkKKyAgICAgICAgd2l0
aCB0aGUgY3VycmVudCBmYXZpY29uIFVSSSB3aGVuIHRoZSBsb2FkIGhhcyBiZWVuIGNvbW1pdHRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRh
dGFiYXNlLmNwcDoKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHRlc3RHZXRG
YXZpY29uKToKKyAgICAgICAgKHRlc3RHZXRGYXZpY29uVVJJKToKKyAgICAgICAgKHRlc3RXZWJW
aWV3RmF2aWNvbik6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3Q6IEFkZCBuZXcgbWFyc2hhbGVyLgorCiAyMDEyLTEw
LTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBBZGQgYSBzZXR0aW5nIHRvIGVuYWJsZS9kaXNhYmxlIHNtb290aCBzY3JvbGxpbmcg
dG8gV2ViS2l0MiBHVEsrIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKaW5kZXggY2IwMTZhYi4uYmY1
YzliYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RmF2aWNvbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAi
V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmgiCiAKICNpbmNsdWRlICJXZWJLaXRGYXZpY29uRGF0YWJh
c2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0TWFyc2hhbC5oIgogI2luY2x1ZGUgIldlYktp
dFByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ltYWdlLmg+CkBAIC0zNSw3ICszNiw3IEBACiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwogCiBlbnVtIHsKLSAgICBJQ09OX1JFQURZLAorICAgIEZBVklDT05fQ0hBTkdFRCwKIAogICAg
IExBU1RfU0lHTkFMCiB9OwpAQCAtNDgsNiArNDksNyBAQCB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqPiBQZW5kaW5nSWNvblJlcXVlc3RNYXA7CiBzdHJ1
Y3QgX1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUgewogICAgIFJlZlB0cjxXZWJJY29uRGF0
YWJhc2U+IGljb25EYXRhYmFzZTsKICAgICBQZW5kaW5nSWNvblJlcXVlc3RNYXAgcGVuZGluZ0lj
b25SZXF1ZXN0czsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwYWdlVVJMVG9JY29uVVJM
TWFwOwogfTsKIAogR19ERUZJTkVfVFlQRShXZWJLaXRGYXZpY29uRGF0YWJhc2UsIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlLCBHX1RZUEVfT0JKRUNUKQpAQCAtODQsMjMgKzg2LDI2IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0RmF2aWNvbkRh
dGFiYXNlQ2xhc3MqIGZhdmljCiAgICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdEZh
dmljb25EYXRhYmFzZUZpbmFsaXplOwogCiAgICAgLyoqCi0gICAgICogV2ViS2l0RmF2aWNvbkRh
dGFiYXNlOjpmYXZpY29uLXJlYWR5OgorICAgICAqIFdlYktpdEZhdmljb25EYXRhYmFzZTo6ZmF2
aWNvbi1jaGFuZ2VkOgogICAgICAqIEBkYXRhYmFzZTogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUg
c2lnbmFsIGlzIGVtaXR0ZWQKLSAgICAgKiBAcGFnZV91cmk6IHRoZSBVUkkgb2YgdGhlIFdlYiBw
YWdlIGNvbnRhaW5pbmcgdGhlIGljb24uCisgICAgICogQHBhZ2VfdXJpOiB0aGUgVVJJIG9mIHRo
ZSBXZWIgcGFnZSBjb250YWluaW5nIHRoZSBpY29uCisgICAgICogQGZhdmljb25fdXJpOiB0aGUg
VVJJIG9mIHRoZSBmYXZpY29uCiAgICAgICoKLSAgICAgKiBUaGlzIHNpZ25hbCBnZXRzIGVtaXR0
ZWQgd2hlbiB0aGUgZmF2aWNvbiBvZiBAcGFnZV91cmkgaXMKLSAgICAgKiByZWFkeS4gVGhpcyBt
ZWFucyB0aGF0IHRoZSBmYXZpY29uJ3MgZGF0YSBpcyByZWFkeSB0byBiZSB1c2VkCi0gICAgICog
YnkgdGhlIGFwcGxpY2F0aW9uLCBlaXRoZXIgYmVjYXVzZSBpdCBoYXMgYmVlbiBsb2FkZWQgZnJv
bSB0aGUKLSAgICAgKiBuZXR3b3JrLCBpZiBpdCdzIHRoZSBmaXJzdCB0aW1lIGl0IGdldHMgcmV0
cmlldmVkLCBvciBiZWNhdXNlCi0gICAgICogaXQgaGFzIGJlZW4gYWxyZWFkeSBpbXBvcnRlZCBm
cm9tIHRoZSBpY29uIGRhdGFiYXNlLgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hl
biB0aGUgZmF2aWNvbiBVUkkgb2YgQHBhZ2VfdXJpIGhhcworICAgICAqIGJlZW4gY2hhbmdlZCB0
byBAZmF2aWNvbl91cmkgaW4gdGhlIGRhdGFiYXNlLiBZb3UgY2FuIGNvbm5lY3QKKyAgICAgKiB0
byB0aGlzIHNpZ25hbCBhbmQgY2FsbCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNv
bigpCisgICAgICogdG8gZ2V0IHRoZSBmYXZpY29uLiBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4g
dGhlIGZhdmljb24gb2YgYQorICAgICAqICNXZWJLaXRXZWJWaWV3IGl0J3MgZWFzaWVyIHRvIHVz
ZSB0aGUgI1dlYktpdFdlYlZpZXc6ZmF2aWNvbgorICAgICAqIHByb3BlcnR5LiBTZWUgd2Via2l0
X3dlYl92aWV3X2dldF9mYXZpY29uKCkgZm9yIG1vcmUgZGV0YWlscy4KICAgICAgKi8KLSAgICBz
aWduYWxzW0lDT05fUkVBRFldID0KLSAgICAgICAgZ19zaWduYWxfbmV3KCJmYXZpY29uLXJlYWR5
IiwKKyAgICBzaWduYWxzW0ZBVklDT05fQ0hBTkdFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXco
ImZhdmljb24tY2hhbmdlZCIsCiAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFT
UyhmYXZpY29uRGF0YWJhc2VDbGFzcyksCiAgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9S
VU5fTEFTVCwKICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAg
ICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fU1RSSU5HLAotICAgICAgICAgICAgICAgICAg
ICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9W
T0lEX19TVFJJTkdfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDIs
CisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HLAogICAgICAgICAgICAgICAgICAg
ICAgR19UWVBFX1NUUklORyk7CiAKICAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZmF2aWNv
bkRhdGFiYXNlQ2xhc3MsIHNpemVvZihXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlKSk7CkBA
IC0xNzAsMTUgKzE3NSwyNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzUGVuZGluZ0ljb25zRm9yUGFn
ZVVSTChXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdAogICAgIGRlbGV0ZVBl
bmRpbmdJY29uUmVxdWVzdHMoZGF0YWJhc2UsIHBlbmRpbmdJY29uUmVxdWVzdHMsIHBhZ2VVUkwp
OwogfQogCi1zdGF0aWMgdm9pZCBpY29uRGF0YVJlYWR5Rm9yUGFnZVVSTENhbGxiYWNrKFdLSWNv
bkRhdGFiYXNlUmVmIHdrSWNvbkRhdGFiYXNlLCBXS1VSTFJlZiB3a1BhZ2VVUkwsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCitzdGF0aWMgdm9pZCBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTENhbGxi
YWNrKFdLSWNvbkRhdGFiYXNlUmVmIHdrSWNvbkRhdGFiYXNlLCBXS1VSTFJlZiB3a1BhZ2VVUkws
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LQogICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSBXRUJLSVRfRkFWSUNPTl9E
QVRBQkFTRShjbGllbnRJbmZvKTsKKyAgICBpZiAoIWRhdGFiYXNlLT5wcml2LT5pY29uRGF0YWJh
c2UtPmlzVXJsSW1wb3J0Q29tcGxldGVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFN0cmlu
ZyBwYWdlVVJMID0gdG9JbXBsKHdrUGFnZVVSTCktPnN0cmluZygpOworICAgIFN0cmluZyBjdXJy
ZW50SWNvblVSTDsKKyAgICBkYXRhYmFzZS0+cHJpdi0+aWNvbkRhdGFiYXNlLT5zeW5jaHJvbm91
c0ljb25VUkxGb3JQYWdlVVJMKHBhZ2VVUkwsIGN1cnJlbnRJY29uVVJMKTsKKyAgICBjb25zdCBT
dHJpbmcmIGljb25VUkwgPSBkYXRhYmFzZS0+cHJpdi0+cGFnZVVSTFRvSWNvblVSTE1hcC5nZXQo
cGFnZVVSTCk7CisgICAgaWYgKGljb25VUkwgPT0gY3VycmVudEljb25VUkwpCisgICAgICAgIHJl
dHVybjsKIAotICAgIHByb2Nlc3NQZW5kaW5nSWNvbnNGb3JQYWdlVVJMKGRhdGFiYXNlLCBwYWdl
VVJMKTsKLSAgICBnX3NpZ25hbF9lbWl0KGRhdGFiYXNlLCBzaWduYWxzW0lDT05fUkVBRFldLCAw
LCBwYWdlVVJMLnV0ZjgoKS5kYXRhKCkpOworICAgIGRhdGFiYXNlLT5wcml2LT5wYWdlVVJMVG9J
Y29uVVJMTWFwLnNldChwYWdlVVJMLCBjdXJyZW50SWNvblVSTCk7CisgICAgZ19zaWduYWxfZW1p
dChkYXRhYmFzZSwgc2lnbmFsc1tGQVZJQ09OX0NIQU5HRURdLCAwLCBwYWdlVVJMLnV0ZjgoKS5k
YXRhKCksIGN1cnJlbnRJY29uVVJMLnV0ZjgoKS5kYXRhKCkpOworfQorCitzdGF0aWMgdm9pZCBp
Y29uRGF0YVJlYWR5Rm9yUGFnZVVSTENhbGxiYWNrKFdLSWNvbkRhdGFiYXNlUmVmIHdrSWNvbkRh
dGFiYXNlLCBXS1VSTFJlZiB3a1BhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBwcm9jZXNzUGVuZGluZ0ljb25zRm9yUGFn
ZVVSTChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShjbGllbnRJbmZvKSwgdG9JbXBsKHdrUGFnZVVS
TCktPnN0cmluZygpKTsKIH0KIAogV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiB3ZWJraXRGYXZpY29u
RGF0YWJhc2VDcmVhdGUoV2ViSWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UpCkBAIC0xODksNyAr
MjA2LDcgQEAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiB3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVh
dGUoV2ViSWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UKICAgICBXS0ljb25EYXRhYmFzZUNsaWVu
dCB3a0ljb25EYXRhYmFzZUNsaWVudCA9IHsKICAgICAgICAga1dLSWNvbkRhdGFiYXNlQ2xpZW50
Q3VycmVudFZlcnNpb24sCiAgICAgICAgIGZhdmljb25EYXRhYmFzZSwgLy8gY2xpZW50SW5mbwot
ICAgICAgICAwLCAvLyBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTENhbGxiYWNrCisgICAgICAgIGRp
ZENoYW5nZUljb25Gb3JQYWdlVVJMQ2FsbGJhY2ssCiAgICAgICAgIDAsIC8vIGRpZFJlbW92ZUFs
bEljb25zQ2FsbGJhY2sKICAgICAgICAgaWNvbkRhdGFSZWFkeUZvclBhZ2VVUkxDYWxsYmFjaywK
ICAgICB9OwpAQCAtMTk3LDE4ICsyMTQsNiBAQCBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIHdlYmtp
dEZhdmljb25EYXRhYmFzZUNyZWF0ZShXZWJJY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZQogICAg
IHJldHVybiBmYXZpY29uRGF0YWJhc2U7CiB9CiAKLWNhaXJvX3N1cmZhY2VfdCogd2Via2l0RmF2
aWNvbkRhdGFiYXNlR2V0RmF2aWNvbihXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBj
b25zdCBDU3RyaW5nJiBwYWdlVVJMKQotewotICAgIEFTU0VSVChXRUJLSVRfSVNfRkFWSUNPTl9E
QVRBQkFTRShkYXRhYmFzZSkpOwotICAgIEFTU0VSVCghcGFnZVVSTC5pc051bGwoKSk7Ci0KLSAg
ICBjYWlyb19zdXJmYWNlX3QqIGljb25TdXJmYWNlID0gZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91
c2x5KGRhdGFiYXNlLCBTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkwuZGF0YSgpKSwgMCk7Ci0gICAg
aWYgKCFpY29uU3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY2Fpcm9f
c3VyZmFjZV9yZWZlcmVuY2UoaWNvblN1cmZhY2UpOwotfQotCiBzdGF0aWMgUGVuZGluZ0ljb25S
ZXF1ZXN0VmVjdG9yKiBnZXRPckNyZWF0ZVBlbmRpbmdJY29uUmVxdWVzdHMoV2ViS2l0RmF2aWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMKQogewogICAgIFBlbmRp
bmdJY29uUmVxdWVzdFZlY3RvciogaWNvbnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25S
ZXF1ZXN0cy5nZXQocGFnZVVSTCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlLmgKaW5kZXgg
NmM1MDk0OS4uOTg5ZmRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaApAQCAtMjcs
NiArMjcsNSBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogV2ViS2l0RmF2aWNvbkRhdGFi
YXNlKiB3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUoV2ViSWNvbkRhdGFiYXNlKik7Ci1jYWly
b19zdXJmYWNlX3QqIHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb24oV2ViS2l0RmF2aWNv
bkRhdGFiYXNlKiwgY29uc3QgQ1N0cmluZyYpOwogCiAjZW5kaWYgLy8gV2ViS2l0RmF2aWNvbkRh
dGFiYXNlUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDRlNDNhMGMuLjg4NTcyOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0xMjIs
OCArMTIyLDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgYm9vbCBpc0xv
YWRpbmc7CiAKICAgICBib29sIHdhaXRpbmdGb3JNYWluUmVzb3VyY2U7Ci0gICAgZ3Vsb25nIG1h
aW5SZXNvdXJjZVJlc3BvbnNlSGFuZGxlcklEOwotICAgIGd1bG9uZyB3YXRjaEZvckNoYW5nZXNJ
bkZhdmljb25IYW5kbGVySUQ7CisgICAgdW5zaWduZWQgbG9uZyBtYWluUmVzb3VyY2VSZXNwb25z
ZUhhbmRsZXJJRDsKICAgICBXZWJLaXRMb2FkRXZlbnQgbGFzdERlbGF5ZWRFdmVudDsKIAogICAg
IEdSZWZQdHI8V2ViS2l0QmFja0ZvcndhcmRMaXN0PiBiYWNrRm9yd2FyZExpc3Q7CkBAIC0xNDYs
NiArMTQ1LDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAKICAgICBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBmYXZpY29uOwogICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBmYXZp
Y29uQ2FuY2VsbGFibGU7CisgICAgQ1N0cmluZyBmYXZpY29uVVJJOworICAgIHVuc2lnbmVkIGxv
bmcgZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQ7CiB9OwogCiBzdGF0aWMgZ3VpbnQgc2lnbmFsc1tM
QVNUX1NJR05BTF0gPSB7IDAsIH07CkBAIC0yNjcsNiArMjY4LDE2IEBAIHN0YXRpYyB2b2lkIHVz
ZXJBZ2VudENoYW5nZWQoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzLCBHUGFyYW1TcGVjKiwgV2Vi
S2l0V2ViVmllCiAgICAgZ2V0UGFnZSh3ZWJWaWV3KS0+c2V0Q3VzdG9tVXNlckFnZW50KFN0cmlu
Zzo6ZnJvbVVURjgod2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzKSkpOwog
fQogCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvbihXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBjYWlyb19zdXJmYWNlX3QqIGZhdmljb24pCit7CisgICAgV2ViS2l0V2ViVmll
d1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworICAgIGlmIChwcml2LT5mYXZpY29uLmdl
dCgpID09IGZhdmljb24pCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPmZhdmljb24gPSBm
YXZpY29uOworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVCh3ZWJWaWV3KSwgImZhdmljb24i
KTsKK30KKwogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NhbmNlbEZhdmljb25SZXF1ZXN0KFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgaWYgKCF3ZWJWaWV3LT5wcml2LT5mYXZpY29u
Q2FuY2VsbGFibGUpCkBAIC0yNzYsMjYgKzI4Nyw0MiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJW
aWV3Q2FuY2VsRmF2aWNvblJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICB3ZWJW
aWV3LT5wcml2LT5mYXZpY29uQ2FuY2VsbGFibGUgPSAwOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3VXBkYXRlRmF2aWNvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjYWlyb19zdXJm
YWNlX3QqIGZhdmljb24pCitzdGF0aWMgdm9pZCBnZXRGYXZpY29uUmVhZHlDYWxsYmFjayhHT2Jq
ZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKIHsK
LSAgICBpZiAod2ViVmlldy0+cHJpdi0+ZmF2aWNvbi5nZXQoKSA9PSBmYXZpY29uKQorICAgIEdP
d25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBmYXZpY29u
ID0gYWRvcHRSZWYod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoKFdF
QktJVF9GQVZJQ09OX0RBVEFCQVNFKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7
CisgICAgaWYgKCFnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9f
RVJST1JfQ0FOQ0VMTEVEKSkgeworICAgICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VC
S0lUX1dFQl9WSUVXKHVzZXJEYXRhKTsKKyAgICAgICAgd2Via2l0V2ViVmlld1VwZGF0ZUZhdmlj
b24od2ViVmlldywgZmF2aWNvbi5nZXQoKSk7CisgICAgICAgIHdlYlZpZXctPnByaXYtPmZhdmlj
b25DYW5jZWxsYWJsZSA9IDA7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3
UmVxdWVzdEZhdmljb24oV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICB3ZWJraXRXZWJW
aWV3Q2FuY2VsRmF2aWNvblJlcXVlc3Qod2ViVmlldyk7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgcHJpdi0+ZmF2aWNvbkNhbmNlbGxhYmxl
ID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgIFdlYktpdEZhdmljb25EYXRh
YmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uo
cHJpdi0+Y29udGV4dCk7CisgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24o
ZGF0YWJhc2UsIHByaXYtPmFjdGl2ZVVSSS5kYXRhKCksIHByaXYtPmZhdmljb25DYW5jZWxsYWJs
ZS5nZXQoKSwgZ2V0RmF2aWNvblJlYWR5Q2FsbGJhY2ssIHdlYlZpZXcpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBjb25zdCBjaGFyKiBmYXZpY29uVVJJKQoreworICAgIGlmICh3ZWJWaWV3LT5wcml2LT5mYXZp
Y29uVVJJID09IGZhdmljb25VUkkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHdlYlZpZXctPnBy
aXYtPmZhdmljb24gPSBmYXZpY29uOwotICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVCh3ZWJW
aWV3KSwgImZhdmljb24iKTsKKyAgICB3ZWJWaWV3LT5wcml2LT5mYXZpY29uVVJJID0gZmF2aWNv
blVSSTsKKyAgICB3ZWJraXRXZWJWaWV3UmVxdWVzdEZhdmljb24od2ViVmlldyk7CiB9CiAKLXN0
YXRpYyB2b2lkIGljb25SZWFkeUNhbGxiYWNrKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UsIGNvbnN0IGNoYXIqIHVyaSwgV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3N0YXRpYyB2b2lk
IGZhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwg
Y29uc3QgY2hhciogcGFnZVVSSSwgY29uc3QgY2hhciogZmF2aWNvblVSSSwgV2ViS2l0V2ViVmll
dyogd2ViVmlldykKIHsKLSAgICAvLyBDb25zaWRlciBvbmx5IHRoZSBpY29uIG1hdGNoaW5nIHRo
ZSBhY3RpdmUgVVJJIGZvciB0aGlzIHdlYnZpZXcuCi0gICAgaWYgKHdlYlZpZXctPnByaXYtPmFj
dGl2ZVVSSSAhPSB1cmkpCisgICAgaWYgKHdlYlZpZXctPnByaXYtPmFjdGl2ZVVSSSAhPSBwYWdl
VVJJKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBVcGRhdGUgdGhlIGZhdmljb24gb25seSBp
ZiB3ZSBkb24ndCBoYXZlIG9uZSBhbHJlYWR5LgotICAgIGlmICghd2ViVmlldy0+cHJpdi0+ZmF2
aWNvbikgewotICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBmYXZpY29uID0gYWRvcHRS
ZWYod2Via2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbihkYXRhYmFzZSwgd2ViVmlldy0+cHJp
di0+YWN0aXZlVVJJKSk7Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdVcGRhdGVGYXZpY29uKHdlYlZp
ZXcsIGZhdmljb24uZ2V0KCkpOwotICAgIH0KKyAgICB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNv
blVSSSh3ZWJWaWV3LCBmYXZpY29uVVJJKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0V2ViVmll
d1NldFNldHRpbmdzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFNldHRpbmdzKiBzZXR0
aW5ncykKQEAgLTMyNiwyNCArMzUzLDE5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaXNj
b25uZWN0TWFpblJlc291cmNlUmVzcG9uc2VDaGFuZ2VkU2lnbmFsSGFuZGxlcihXZWJLCiBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3V2F0Y2hGb3JDaGFuZ2VzSW5GYXZpY29uKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCiB7CiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3
LT5wcml2OwotICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UocHJpdi0+Y29udGV4dCk7Ci0KLSAgICAvLyBN
YWtlIHN1cmUgd2Ugb25seSBjb25uZWN0IHRvIHRoaXMgc2lnbmFsIG9uY2UgcGVyIHZpZXcuCi0g
ICAgaWYgKHByaXYtPndhdGNoRm9yQ2hhbmdlc0luRmF2aWNvbkhhbmRsZXJJRCkKKyAgICBpZiAo
cHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBy
aXYtPndhdGNoRm9yQ2hhbmdlc0luRmF2aWNvbkhhbmRsZXJJRCA9Ci0gICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QoZGF0YWJhc2UsICJmYXZpY29uLXJlYWR5IiwgR19DQUxMQkFDSyhpY29uUmVhZHlD
YWxsYmFjayksIHdlYlZpZXcpOworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2Ug
PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UocHJpdi0+Y29udGV4dCk7
CisgICAgcHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0KGRh
dGFiYXNlLCAiZmF2aWNvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyhmYXZpY29uQ2hhbmdlZENhbGxi
YWNrKSwgd2ViVmlldyk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaXNjb25uZWN0
RmF2aWNvbkRhdGFiYXNlU2lnbmFsSGFuZGxlcnMoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsK
ICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7Ci0gICAgV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2
aWNvbl9kYXRhYmFzZShwcml2LT5jb250ZXh0KTsKLQotICAgIGlmIChwcml2LT53YXRjaEZvckNo
YW5nZXNJbkZhdmljb25IYW5kbGVySUQpCi0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29u
bmVjdChkYXRhYmFzZSwgcHJpdi0+d2F0Y2hGb3JDaGFuZ2VzSW5GYXZpY29uSGFuZGxlcklEKTsK
LSAgICBwcml2LT53YXRjaEZvckNoYW5nZXNJbkZhdmljb25IYW5kbGVySUQgPSAwOworICAgIGlm
IChwcml2LT5mYXZpY29uQ2hhbmdlZEhhbmRsZXJJRCkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxl
cl9kaXNjb25uZWN0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShwcml2
LT5jb250ZXh0KSwgcHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQpOworICAgIHByaXYtPmZh
dmljb25DaGFuZ2VkSGFuZGxlcklEID0gMDsKIH0KIAogc3RhdGljIHZvaWQgZmlsZUNob29zZXJE
aWFsb2dSZXNwb25zZUNhbGxiYWNrKEd0a0RpYWxvZyogZGlhbG9nLCBnaW50IHJlc3BvbnNlSUQs
IFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKQEAgLTEyNjEsMjUgKzEyODMsNiBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3RW1pdERlbGF5ZWRMb2FkRXZlbnRzKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCiAgICAgcHJpdi0+d2FpdGluZ0Zvck1haW5SZXNvdXJjZSA9IGZhbHNl
OwogfQogCi1zdGF0aWMgdm9pZCBnZXRGYXZpY29uUmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmpl
Y3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBHT3du
UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZmF2aWNvbiA9
IGFkb3B0UmVmKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaChXRUJL
SVRfRkFWSUNPTl9EQVRBQkFTRShvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwot
ICAgIGlmICghZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VS
Uk9SX0NBTkNFTExFRCkpIHsKLSAgICAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyh1c2VyRGF0YSk7Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdVcGRhdGVGYXZpY29u
KHdlYlZpZXcsIGZhdmljb24uZ2V0KCkpOwotICAgICAgICB3ZWJWaWV3LT5wcml2LT5mYXZpY29u
Q2FuY2VsbGFibGUgPSAwOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1Jl
cXVlc3RGYXZpY29uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi17Ci0gICAgV2ViS2l0V2ViVmll
d1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwotICAgIFdlYktpdEZhdmljb25EYXRhYmFz
ZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UocHJp
di0+Y29udGV4dCk7Ci0gICAgcHJpdi0+ZmF2aWNvbkNhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdf
Y2FuY2VsbGFibGVfbmV3KCkpOwotICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZp
Y29uKGRhdGFiYXNlLCBwcml2LT5hY3RpdmVVUkkuZGF0YSgpLCBwcml2LT5mYXZpY29uQ2FuY2Vs
bGFibGUuZ2V0KCksIGdldEZhdmljb25SZWFkeUNhbGxiYWNrLCB3ZWJWaWV3KTsKLX0KLQogdm9p
ZCB3ZWJraXRXZWJWaWV3TG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0
TG9hZEV2ZW50IGxvYWRFdmVudCkKIHsKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9
IHdlYlZpZXctPnByaXY7CkBAIC0xMjkyLDcgKzEyOTUsOSBAQCB2b2lkIHdlYmtpdFdlYlZpZXdM
b2FkQ2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2
ZW50KQogICAgICAgICBwcml2LT5tYWluUmVzb3VyY2UgPSAwOwogICAgICAgICBwcml2LT53YWl0
aW5nRm9yTWFpblJlc291cmNlID0gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChsb2FkRXZlbnQgPT0g
V0VCS0lUX0xPQURfQ09NTUlUVEVEKSB7Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdSZXF1ZXN0RmF2
aWNvbih3ZWJWaWV3KTsKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShwcml2LT5jb250ZXh0KTsK
KyAgICAgICAgR093blB0cjxjaGFyPiBmYXZpY29uVVJJKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNl
X2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwgcHJpdi0+YWN0aXZlVVJJLmRhdGEoKSkpOworICAg
ICAgICB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSSh3ZWJWaWV3LCBmYXZpY29uVVJJLmdl
dCgpKTsKIAogICAgICAgICBwcml2LT5zdWJyZXNvdXJjZXNNYXAuY2xlYXIoKTsKICAgICAgICAg
aWYgKCFwcml2LT5tYWluUmVzb3VyY2UpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRh
YmFzZS5jcHAKaW5kZXggMzEzMjU0ZC4uZGI0ZDI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZh
dmljb25EYXRhYmFzZS5jcHAKQEAgLTM2LDE0ICszNiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIDog
bV93ZWJDb250ZXh0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQogICAgICAgICAs
IG1fZmF2aWNvbigwKQogICAgICAgICAsIG1fZXJyb3IoMCkKLSAgICAgICAgLCBtX2ljb25SZWFk
eVNpZ25hbFJlY2VpdmVkKGZhbHNlKQogICAgICAgICAsIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJl
Y2VpdmVkKGZhbHNlKQogICAgIHsKICAgICAgICAgaWYgKCFnX3N0cl9lcXVhbCh3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5KG1fd2ViQ29udGV4dCksIGtU
ZW1wRGlyZWN0b3J5KSkKICAgICAgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2aWNv
bl9kYXRhYmFzZV9kaXJlY3RvcnkobV93ZWJDb250ZXh0LCBrVGVtcERpcmVjdG9yeSk7CiAKICAg
ICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOwotICAgICAgICBnX3NpZ25hbF9j
b25uZWN0KGRhdGFiYXNlLCAiZmF2aWNvbi1yZWFkeSIsIEdfQ0FMTEJBQ0soaWNvblJlYWR5Q2Fs
bGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkYXRhYmFzZSwgImZhdmlj
b24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0soZmF2aWNvbkNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwog
ICAgIH0KIAogICAgIH5GYXZpY29uRGF0YWJhc2VUZXN0KCkKQEAgLTU1LDEzICs1NCwxMyBAQCBw
dWJsaWM6CiAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChkYXRh
YmFzZSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgaWNvblJlYWR5Q2FsbGJhY2soV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSwgY29uc3QgY2hhciogcGFnZVVSSSwgRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkK
KyAgICBzdGF0aWMgdm9pZCBmYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdEZhdmljb25EYXRh
YmFzZSogZGF0YWJhc2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkksIGNvbnN0IGNoYXIqIGZhdmljb25V
UkksIEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QpCiAgICAgewotICAgICAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgPT0sIHBhZ2VV
UkkpOwotICAgICAgICB0ZXN0LT5tX2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkID0gdHJ1ZTsKKyAg
ICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJW
aWV3KSwgcGFnZVVSSSkpCisgICAgICAgICAgICB0ZXN0LT5tX2Zhdmljb25VUkkgPSBmYXZpY29u
VVJJOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGZhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCisg
ICAgc3RhdGljIHZvaWQgdmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyog
d2ViVmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCiAgICAgewogICAgICAg
ICBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNl
VGVzdCo+KGRhdGEpOwogICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcgPT0gd2ViVmll
dyk7CkBAIC04MCw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHdhaXRVbnRpbEZhdmljb25D
aGFuZ2VkKCkKICAgICB7CiAgICAgICAgIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkID0g
ZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlcklEID0gZ19zaWduYWxfY29ubmVj
dChtX3dlYlZpZXcsICJub3RpZnk6OmZhdmljb24iLCBHX0NBTExCQUNLKGZhdmljb25DaGFuZ2Vk
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBoYW5kbGVySUQgPSBnX3Np
Z25hbF9jb25uZWN0KG1fd2ViVmlldywgIm5vdGlmeTo6ZmF2aWNvbiIsIEdfQ0FMTEJBQ0sodmll
d0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICAgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOwogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93ZWJW
aWV3LCBoYW5kbGVySUQpOwogICAgIH0KQEAgLTkyLDYgKzkxLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG1fZmF2aWNvbik7CiAgICAgICAgICAgICBtX2Zh
dmljb24gPSAwOwogICAgICAgICB9CisKICAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNv
bnRleHQpOwogICAgICAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbihkYXRh
YmFzZSwgcGFnZVVSSSwgMCwgZ2V0RmF2aWNvbkNhbGxiYWNrLCB0aGlzKTsKICAgICAgICAgZ19t
YWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwpAQCAtOTksOCArOTksOCBAQCBwdWJsaWM6CiAKICAg
ICBXZWJLaXRXZWJDb250ZXh0KiBtX3dlYkNvbnRleHQ7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBt
X2Zhdmljb247CisgICAgQ1N0cmluZyBtX2Zhdmljb25VUkk7CiAgICAgR093blB0cjxHRXJyb3I+
IG1fZXJyb3I7Ci0gICAgYm9vbCBtX2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkOwogICAgIGJvb2wg
bV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQ7CiB9OwogCkBAIC0xMTIsMjIgKzExMiwyNyBA
QCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdl
LCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Y2hhciogY29udGVudHM7Ci0gICAgZ3NpemUgbGVuZ3RoOwogICAgIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL2Zhdmljb24uaWNvIikpIHsKLSAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GYXZp
Y29uKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRh
dGEoKSwgImJsYW5rLmljbyIsIE5VTEwpKTsKLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhw
YXRoVG9GYXZpY29uLmdldCgpLCAmY29udGVudHMsICZsZW5ndGgsIDApOwotICAgIH0gZWxzZSBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9ub2Zhdmljb24vZmF2aWNvbi5pY28iKSkgewogICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQp
OwogICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9i
b2R5KTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNoYXIqIGNvbnRlbnRzOworICAg
IGdzaXplIGxlbmd0aDsKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pY29uL2Zhdmljb24u
aWNvIikpIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GYXZpY29uKGdfYnVpbGRfZmls
ZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgImJsYW5rLmlj
byIsIE5VTEwpKTsKKyAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9GYXZpY29uLmdl
dCgpLCAmY29udGVudHMsICZsZW5ndGgsIDApOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMs
IGxlbmd0aCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL25vZmF2aWNvbiIp
KSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBub0Zhdmljb25IVE1MID0gIjxodG1sPjxo
ZWFkPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIG5vRmF2
aWNvbkhUTUwsIHN0cmxlbihub0Zhdmljb25IVE1MKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
Y29udGVudHMgPSBnX3N0cmR1cCgiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7Ci0g
ICAgICAgIGxlbmd0aCA9IHN0cmxlbihjb250ZW50cyk7CisgICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBjb250ZW50c0hUTUwgPSAiPGh0bWw+PGhlYWQ+PGxpbmsgcmVsPSdpY29uJyBocmVmPScv
aWNvbi9mYXZpY29uLmljbycgdHlwZT0naW1hZ2UveC1pY287IGNoYXJzZXQ9YmluYXJ5Jz48L2hl
YWQ+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgY29udGVu
dHNIVE1MLCBzdHJsZW4oY29udGVudHNIVE1MKSk7CiAgICAgfQogCiAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250
ZW50cywgbGVuZ3RoKTsKICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5KTsKIH0KIApAQCAtMTQ5LDM5ICsxNTQsNTAgQEAgc3RhdGljIHZvaWQgdGVz
dEdldEZhdmljb24oRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsK
ICAgICAvLyBXZSBuZWVkIHRvIGxvYWQgdGhlIHBhZ2UgZmlyc3QgdG8gZW5zdXJlIHRoZSBpY29u
IGRhdGEgd2lsbCBiZQogICAgIC8vIGluIHRoZSBkYXRhYmFzZSBpbiBjYXNlIHRoZXJlJ3MgYW4g
YXNzb2NpYXRlZCBmYXZpY29uLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvZm9vIikuZGF0YSgpKTsKICAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgp
OwotICAgIGdfYXNzZXJ0KHRlc3QtPm1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQpOworICAgIENT
dHJpbmcgZmF2aWNvblVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pY29uL2Zhdmljb24u
aWNvIik7CiAKICAgICAvLyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29u
LgotICAgIHRlc3QtPm1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQgPSBmYWxzZTsKLSAgICB0ZXN0
LT5nZXRGYXZpY29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2Fp
dFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CiAgICAg
Z19hc3NlcnQodGVzdC0+bV9mYXZpY29uKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9m
YXZpY29uVVJJLmRhdGEoKSwgPT0sIGZhdmljb25VUkkuZGF0YSgpKTsKICAgICBnX2Fzc2VydCgh
dGVzdC0+bV9lcnJvcik7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1faWNvblJlYWR5U2lnbmFsUmVj
ZWl2ZWQpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBhbmQgaGVpZ2h0IG1hdGNoIHRob3Nl
IGZyb20gYmxhbmsuaWNvICgxNngxNiBmYXZpY29uKS4KICAgICBnX2Fzc2VydF9jbXBpbnQoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgodGVzdC0+bV9mYXZpY29uKSwgPT0sIDE2KTsKICAg
ICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHRlc3QtPm1f
ZmF2aWNvbiksID09LCAxNik7CiAKKyAgICAvLyBDaGVjayB0aGF0IGFub3RoZXIgcGFnZSB3aXRo
IHRoZSBzYW1lIGZhdmljb24gcmV0dXJuIHRoZSBzYW1lIGljb24uCisgICAgY2Fpcm9fc3VyZmFj
ZV90KiBmYXZpY29uID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UodGVzdC0+bV9mYXZpY29uKTsK
KyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9iYXIiKS5kYXRhKCkp
OworICAgIC8vIEl0J3MgYSBuZXcgcGFnZSBpbiB0aGUgZGF0YWJhc2UsIHNvIGZhdmljb24gd2ls
bCBjaGFuZ2UgdHdpY2UsIGZpcnN0IHRvIHJlc2V0IGl0CisgICAgLy8gYW5kIHRoZW4gd2hlbiB0
aGUgaWNvbiBpcyBsb2FkZWQuCisgICAgdGVzdC0+d2FpdFVudGlsRmF2aWNvbkNoYW5nZWQoKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOworICAgIHRlc3QtPmdldEZhdmlj
b25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2Jh
ciIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIodGVzdC0+bV9mYXZpY29uVVJJLmRhdGEoKSwgPT0sIGZhdmljb25VUkkuZGF0YSgp
KTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb24gPT0gZmF2aWNvbik7CisgICAgZ19hc3Nl
cnQoIXRlc3QtPm1fZXJyb3IpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShmYXZpY29uKTsK
KwogICAgIC8vIENoZWNrIHRoZSBBUEkgcmV0cmlldmluZyBhbiBpbnZhbGlkIGZhdmljb24uCiAg
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9mYXZpY29uIikuZGF0
YSgpKTsKICAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIGdfYXNzZXJ0
KCF0ZXN0LT5tX2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkKTsKIAotICAgIHRlc3QtPmdldEZhdmlj
b25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25v
ZmF2aWNvbi8iKS5kYXRhKCkpOworICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2Fp
dFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vZmF2aWNvbiIpLmRhdGEoKSk7
CiAgICAgZ19hc3NlcnQoIXRlc3QtPm1fZmF2aWNvbik7CiAgICAgZ19hc3NlcnQodGVzdC0+bV9l
cnJvcik7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQpOwog
fQogCiBzdGF0aWMgdm9pZCB0ZXN0R2V0RmF2aWNvblVSSShGYXZpY29uRGF0YWJhc2VUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVzdC0+bV93ZWJD
b250ZXh0KTsKIAotICAgIGNvbnN0IGNoYXIqIGJhc2VVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvIikuZGF0YSgpOworICAgIGNvbnN0IGNoYXIqIGJhc2VVUkkgPSBrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvZm9vIikuZGF0YSgpOwogICAgIEdPd25QdHI8Y2hhcj4gaWNvblVSSSh3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoZGF0YWJhc2UsIGJhc2VVUkkpKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIoaWNvblVSSS5nZXQoKSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9mYXZpY29uLmljbyIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGljb25V
UkkuZ2V0KCksID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaWNvbi9mYXZpY29uLmljbyIp
LmRhdGEoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RmF2aWNvbihGYXZpY29uRGF0
YWJhc2VUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQpAQCAtMTg5LDkgKzIwNSwxMiBAQCBzdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld0Zhdmljb24oRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKICAgICBjYWlyb19zdXJmYWNlX3QqIGljb25Gcm9tV2ViVmlldyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfZmF2aWNvbih0ZXN0LT5tX3dlYlZpZXcpOwogICAgIGdfYXNzZXJ0KCFp
Y29uRnJvbVdlYlZpZXcpOwogCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9mb28iKS5kYXRhKCkpOwogICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7
CiAgICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQpOworICAg
IC8vIFRoZSBpY29uIGlzIGtub3duIGFuZCBoYXNuJ3QgY2hhbmdlZCBpbiB0aGUgZGF0YWJhc2Us
IHNvIG5vdGlmeTo6ZmF2aWNvbiBpcyBlbWl0dGVkCisgICAgLy8gYnV0IFdlYktpdEZhdmljb25E
YXRhYmFzZTo6aWNvbi1jaGFuZ2VkIGlzbid0LgorICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNv
blVSSS5pc051bGwoKSk7CiAKICAgICBpY29uRnJvbVdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2Zhdmljb24odGVzdC0+bV93ZWJWaWV3KTsKICAgICBnX2Fzc2VydChpY29uRnJvbVdlYlZp
ZXcpOwpAQCAtMjEyLDggKzIzMSw4IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBGYXZpY29uRGF0
YWJhc2VUZXN0OjphZGQoIldlYktpdEZhdmljb25EYXRhYmFzZSIsICJzZXQtZGlyZWN0b3J5Iiwg
dGVzdFNldERpcmVjdG9yeSk7CiAgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRG
YXZpY29uRGF0YWJhc2UiLCAiZ2V0LWZhdmljb24iLCB0ZXN0R2V0RmF2aWNvbik7CiAgICAgRmF2
aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJhc2UiLCAiZ2V0LWZhdmlj
b24tdXJpIiwgdGVzdEdldEZhdmljb25VUkkpOwotICAgIEZhdmljb25EYXRhYmFzZVRlc3Q6OmFk
ZCgiV2ViS2l0RmF2aWNvbkRhdGFiYXNlIiwgImNsZWFyLWRhdGFiYXNlIiwgdGVzdENsZWFyRGF0
YWJhc2UpOwogICAgIEZhdmljb25EYXRhYmFzZVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJm
YXZpY29uIiwgdGVzdFdlYlZpZXdGYXZpY29uKTsKKyAgICBGYXZpY29uRGF0YWJhc2VUZXN0Ojph
ZGQoIldlYktpdEZhdmljb25EYXRhYmFzZSIsICJjbGVhci1kYXRhYmFzZSIsIHRlc3RDbGVhckRh
dGFiYXNlKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlRmluYWxpemVk
Q2FsbGJhY2soZ3BvaW50ZXIsIEdPYmplY3QqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKaW5kZXggZTZjOGExMC4uZWZkOWUw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1h
cnNoYWwubGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
bWFyc2hhbC5saXN0CkBAIC05LDUgKzksNiBAQCBPQkpFQ1Q6Vk9JRAogVk9JRDpPQkpFQ1QsVUlO
VAogVk9JRDpPQkpFQ1QsT0JKRUNUCiBWT0lEOk9CSkVDVCxQT0lOVEVSCitWT0lEOlNUUklORyxT
VFJJTkcKIFZPSUQ6VUlOVDY0CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167969</attachid>
            <date>2012-10-10 03:45:15 -0700</date>
            <delta_ts>2012-10-11 04:10:35 -0700</delta_ts>
            <desc>Updated patch to address review comments</desc>
            <filename>wk2-favicon-changed.diff</filename>
            <type>text/plain</type>
            <size>27141</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZGYzMzcwLi5jZGY5NDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMg
QEAKKzIwMTItMTAtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFdlYktpdFdlYlZpZXcgZG9lc24ndCBub3RpZnkgb2YgZmF2aWNv
biBjaGFuZ2VzIGZvciBrbm93biBmYXZpY29ucyBidXQgbmV3IHBhZ2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODg3NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHRoZSBwYWdlIGlzIHVua25vd24g
KG5vdCByZWdpc3RlcmVkIGluIHRoZSBpY29uIGRhdGFiYXNlKSBidXQKKyAgICAgICAgdGhlIGlj
b24gaXMga25vd24gKHJlZ2lzdGVyZWQgYnkgYW5vdGhlciBwYWdlKSBmYXZpY29uLXJlYWR5Cisg
ICAgICAgIHNpZ25hbCBpcyBub3QgZW1pdHRlZCBiZWNhdXNlIHRoZSBpY29uIGhhcyBhbHJlYWR5
IGJlZW4gaW1wb3J0ZWQKKyAgICAgICAgZnJvbSB0aGUgZGF0YWJhc2UuIFRoZSB2aWV3IGFsd2F5
cyBhc2tzIGZvciB0aGUgZmF2aWNvbiB3aGVuIHRoZQorICAgICAgICBsb2FkIGhhcyBiZWVuIGNv
bW1pdHRlZCwgYnV0IGl0J3MgdXN1YWxseSB0b28gZWFybHkgYW5kIHRoZQorICAgICAgICBmYXZp
Y29uIG9mIHRoZSBwYWdlIGlzIHN0aWxsIHVua293bi4gV2UgY2FuIHVzZQorICAgICAgICBkaWRD
aGFuZ2VJY29uRm9yUGFnZVVSTENhbGxiYWNrIHRvIGtub3cgd2hlbiB0byBhc2sgZm9yIHRoZQor
ICAgICAgICBmYXZpY29uIGVtaXR0aW5nIGEgZmF2aWNvbi1jaGFuZ2VkIHNpZ25hbC4gVGhlIGNh
bGxiYWNrCisgICAgICAgIGljb25EYXRhUmVhZHlGb3JQYWdlVVJMQ2FsbGJhY2sgaXMgc3RpbGwg
dXNlZnVsIHRvIHByb2Nlc3MgcGVuZGluZworICAgICAgICBpY29uIHJlcXVlc3RzLCBidXQgdGhl
IGZhdmljb24tcmVhZHkgc2lnbmFsIGNhbiBiZSByZW1vdmVkIGluCisgICAgICAgIGZhdm9yIG9m
IGZhdmljb24tY2hhbmdlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZh
dmljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChfV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0
ZSk6IEtlZXAgYSBtYXAgb2YgcGFnZSBpY29ucyB0aGF0IGhhcworICAgICAgICBiZWVuIGltcG9y
dGVkIHRvIG1ha2Ugc3VyZSB3ZSBvbmx5IGVtaXQgZmF2aWNvbi1jaGFuZ2VkIHNpZ25hbAorICAg
ICAgICB3aGVuIHRoZSBmYXZpY29uIFVSSSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYmVjYXVzZQor
ICAgICAgICBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTENhbGxiYWNrIGNhbiBiZSBjYWxsZWQgbXVs
dGlwbGUgdGltZXMgZm9yCisgICAgICAgIHRoZSBzYW1lIGZhdmljb24gVVJJIGluIHNvbWUgY2Fz
ZXMuCisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGFzc19pbml0KTogUmVtb3Zl
IGZhdmljb24tcmVhZHkgc2lnbmFsCisgICAgICAgIGFuZCBhZGQgZmF2aWNvbi1jaGFuZ2VkIHRo
YXQgaW5jbHVkZXMgdGhlIG5ldyBmYXZpY29uIFVSSSBmb3IgdGhlCisgICAgICAgIGdpdmVuIHBh
Z2UgVVJJLgorICAgICAgICAoZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkxDYWxsYmFjayk6IEVtaXQg
ZmF2aWNvbi1jaGFuZ2VkIHNpZ25hbCBpZgorICAgICAgICB0aGUgZmF2aWNvbiBVUkkgaXMgbmV3
IG9yIGhhcyBjaGFuZ2VkIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkkuCisgICAgICAgIChpY29uRGF0
YVJlYWR5Rm9yUGFnZVVSTENhbGxiYWNrKTogUHJvY2VzcyBwZW5kaW5nIGljb24gcmVxdWVzdHMu
CisgICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUpOiBBZGQgaW1wbGVtZW50YXRp
b24gZm9yCisgICAgICAgIGRpZENoYW5nZUljb25Gb3JQYWdlVVJMQ2FsbGJhY2suCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAoX1dl
YktpdFdlYlZpZXdQcml2YXRlKTogQWRkIGZhdmljb24gVVJJIHRvIG1ha2Ugc3VyZSB3ZSBvbmx5
IGFzayBmb3IgYQorICAgICAgICBuZXcgZmF2aWNvbiB3aGVuIHRoZSBmYXZpY29uIFVSSSBoYXMg
Y2hhbmdlZC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdVcGRhdGVGYXZpY29uKTogVXBkYXRlIHRo
ZSBmYXZpY29uIGFuZCBlbWl0CisgICAgICAgIG5vdGlmeTo6ZmF2aWNvbiBpZiBpdCBoYXMgY2hh
bmdlZC4KKyAgICAgICAgKGdvdEZhdmljb25DYWxsYmFjayk6IFVwZGF0ZSB0aGUgZmF2aWNvbiBp
ZiB0aGUgcmVxdWVzdCBoYXNuJ3QKKyAgICAgICAgYmVlbiBjYW5jZWxsZWQuCisgICAgICAgICh3
ZWJraXRXZWJWaWV3UmVxdWVzdEZhdmljb24pOiBBc2sgZm9yIHRoZSBwYWdlIGZhdmljb24uCisg
ICAgICAgICh3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSSk6IFVwZGF0ZWQgdGhlIGZhdmlj
b24gVVJJIGFuZAorICAgICAgICByZXF1ZXN0IHRoZSBwYWdlIGZhdmljb24gaWYgdGhlIGZhdmlj
b24gVVJJIGhhcyBjaGFuZ2VkLgorICAgICAgICAoZmF2aWNvbkNoYW5nZWRDYWxsYmFjayk6IENh
bGwgd2Via2l0V2ViVmlld1VwZGF0ZUZhdmljb25VUkkoKSB3aXRoCisgICAgICAgIHRoZSBnaXZl
biBmYXZpY29uIFVSSS4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdXYXRjaEZvckNoYW5nZXNJbkZh
dmljb24pOiBDb25uZWN0IHRvCisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZTo6ZmF2aWNv
bi1jaGFuZ2VkLgorICAgICAgICAod2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RGYXZpY29uRGF0YWJh
c2VTaWduYWxIYW5kbGVycyk6IERpc2Nvbm5lY3QKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFi
YXNlOjpmYXZpY29uLWNoYW5nZWQgc2lnbmFsLgorICAgICAgICAod2Via2l0V2ViVmlld0xvYWRD
aGFuZ2VkKTogQ2FsbCB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSSgpCisgICAgICAgIHdp
dGggdGhlIGN1cnJlbnQgZmF2aWNvbiBVUkkgd2hlbiB0aGUgbG9hZCBoYXMgYmVlbiBjb21taXR0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25E
YXRhYmFzZS5jcHA6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgICh0ZXN0R2V0
RmF2aWNvbik6CisgICAgICAgICh0ZXN0R2V0RmF2aWNvblVSSSk6CisgICAgICAgICh0ZXN0V2Vi
Vmlld0Zhdmljb24pOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0OiBBZGQgbmV3IG1hcnNoYWxlci4KKwogMjAxMi0x
MC0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dUS10gQWRkIGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBzbW9vdGggc2Nyb2xsaW5n
IHRvIFdlYktpdDIgR1RLKyBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCmluZGV4IGNiMDE2YWIuLmJm
NWM5YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZhdmljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUg
IldlYktpdEZhdmljb25EYXRhYmFzZS5oIgogCiAjaW5jbHVkZSAiV2ViS2l0RmF2aWNvbkRhdGFi
YXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdE1hcnNoYWwuaCIKICNpbmNsdWRlICJXZWJL
aXRQcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9JbWFnZS5oPgpAQCAtMzUsNyArMzYsNyBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKIAogZW51bSB7Ci0gICAgSUNPTl9SRUFEWSwKKyAgICBGQVZJQ09OX0NIQU5HRUQsCiAKICAg
ICBMQVNUX1NJR05BTAogfTsKQEAgLTQ4LDYgKzQ5LDcgQEAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKj4gUGVuZGluZ0ljb25SZXF1ZXN0TWFwOwogc3Ry
dWN0IF9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlIHsKICAgICBSZWZQdHI8V2ViSWNvbkRh
dGFiYXNlPiBpY29uRGF0YWJhc2U7CiAgICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFwIHBlbmRpbmdJ
Y29uUmVxdWVzdHM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGFnZVVSTFRvSWNvblVS
TE1hcDsKIH07CiAKIEdfREVGSU5FX1RZUEUoV2ViS2l0RmF2aWNvbkRhdGFiYXNlLCB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZSwgR19UWVBFX09CSkVDVCkKQEAgLTg0LDIzICs4NiwyNiBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGFzc19pbml0KFdlYktpdEZhdmljb25E
YXRhYmFzZUNsYXNzKiBmYXZpYwogICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRG
YXZpY29uRGF0YWJhc2VGaW5hbGl6ZTsKIAogICAgIC8qKgotICAgICAqIFdlYktpdEZhdmljb25E
YXRhYmFzZTo6ZmF2aWNvbi1yZWFkeToKKyAgICAgKiBXZWJLaXRGYXZpY29uRGF0YWJhc2U6OmZh
dmljb24tY2hhbmdlZDoKICAgICAgKiBAZGF0YWJhc2U6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhl
IHNpZ25hbCBpcyBlbWl0dGVkCi0gICAgICogQHBhZ2VfdXJpOiB0aGUgVVJJIG9mIHRoZSBXZWIg
cGFnZSBjb250YWluaW5nIHRoZSBpY29uLgorICAgICAqIEBwYWdlX3VyaTogdGhlIFVSSSBvZiB0
aGUgV2ViIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgorICAgICAqIEBmYXZpY29uX3VyaTogdGhl
IFVSSSBvZiB0aGUgZmF2aWNvbgogICAgICAqCi0gICAgICogVGhpcyBzaWduYWwgZ2V0cyBlbWl0
dGVkIHdoZW4gdGhlIGZhdmljb24gb2YgQHBhZ2VfdXJpIGlzCi0gICAgICogcmVhZHkuIFRoaXMg
bWVhbnMgdGhhdCB0aGUgZmF2aWNvbidzIGRhdGEgaXMgcmVhZHkgdG8gYmUgdXNlZAotICAgICAq
IGJ5IHRoZSBhcHBsaWNhdGlvbiwgZWl0aGVyIGJlY2F1c2UgaXQgaGFzIGJlZW4gbG9hZGVkIGZy
b20gdGhlCi0gICAgICogbmV0d29yaywgaWYgaXQncyB0aGUgZmlyc3QgdGltZSBpdCBnZXRzIHJl
dHJpZXZlZCwgb3IgYmVjYXVzZQotICAgICAqIGl0IGhhcyBiZWVuIGFscmVhZHkgaW1wb3J0ZWQg
ZnJvbSB0aGUgaWNvbiBkYXRhYmFzZS4KKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdo
ZW4gdGhlIGZhdmljb24gVVJJIG9mIEBwYWdlX3VyaSBoYXMKKyAgICAgKiBiZWVuIGNoYW5nZWQg
dG8gQGZhdmljb25fdXJpIGluIHRoZSBkYXRhYmFzZS4gWW91IGNhbiBjb25uZWN0CisgICAgICog
dG8gdGhpcyBzaWduYWwgYW5kIGNhbGwgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmlj
b24oKQorICAgICAqIHRvIGdldCB0aGUgZmF2aWNvbi4gSWYgeW91IGFyZSBpbnRlcmVzdGVkIGlu
IHRoZSBmYXZpY29uIG9mIGEKKyAgICAgKiAjV2ViS2l0V2ViVmlldyBpdCdzIGVhc2llciB0byB1
c2UgdGhlICNXZWJLaXRXZWJWaWV3OmZhdmljb24KKyAgICAgKiBwcm9wZXJ0eS4gU2VlIHdlYmtp
dF93ZWJfdmlld19nZXRfZmF2aWNvbigpIGZvciBtb3JlIGRldGFpbHMuCiAgICAgICovCi0gICAg
c2lnbmFsc1tJQ09OX1JFQURZXSA9Ci0gICAgICAgIGdfc2lnbmFsX25ldygiZmF2aWNvbi1yZWFk
eSIsCisgICAgc2lnbmFsc1tGQVZJQ09OX0NIQU5HRURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3
KCJmYXZpY29uLWNoYW5nZWQiLAogICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xB
U1MoZmF2aWNvbkRhdGFiYXNlQ2xhc3MpLAogICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxf
UlVOX0xBU1QsCiAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAotICAgICAgICAgICAgICAg
ICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1NUUklORywKLSAgICAgICAgICAgICAgICAg
ICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxf
Vk9JRF9fU1RSSU5HX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAy
LAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUklORywKICAgICAgICAgICAgICAgICAg
ICAgIEdfVFlQRV9TVFJJTkcpOwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGZhdmlj
b25EYXRhYmFzZUNsYXNzLCBzaXplb2YoV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSkpOwpA
QCAtMTcwLDE1ICsxNzUsMjcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc1BlbmRpbmdJY29uc0ZvclBh
Z2VVUkwoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QKICAgICBkZWxldGVQ
ZW5kaW5nSWNvblJlcXVlc3RzKGRhdGFiYXNlLCBwZW5kaW5nSWNvblJlcXVlc3RzLCBwYWdlVVJM
KTsKIH0KIAotc3RhdGljIHZvaWQgaWNvbkRhdGFSZWFkeUZvclBhZ2VVUkxDYWxsYmFjayhXS0lj
b25EYXRhYmFzZVJlZiB3a0ljb25EYXRhYmFzZSwgV0tVUkxSZWYgd2tQYWdlVVJMLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQorc3RhdGljIHZvaWQgZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkxDYWxs
YmFjayhXS0ljb25EYXRhYmFzZVJlZiB3a0ljb25EYXRhYmFzZSwgV0tVUkxSZWYgd2tQYWdlVVJM
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gV0VCS0lUX0ZBVklDT05f
REFUQUJBU0UoY2xpZW50SW5mbyk7CisgICAgaWYgKCFkYXRhYmFzZS0+cHJpdi0+aWNvbkRhdGFi
YXNlLT5pc1VybEltcG9ydENvbXBsZXRlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBTdHJp
bmcgcGFnZVVSTCA9IHRvSW1wbCh3a1BhZ2VVUkwpLT5zdHJpbmcoKTsKKyAgICBTdHJpbmcgY3Vy
cmVudEljb25VUkw7CisgICAgZGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZS0+c3luY2hyb25v
dXNJY29uVVJMRm9yUGFnZVVSTChwYWdlVVJMLCBjdXJyZW50SWNvblVSTCk7CisgICAgY29uc3Qg
U3RyaW5nJiBpY29uVVJMID0gZGF0YWJhc2UtPnByaXYtPnBhZ2VVUkxUb0ljb25VUkxNYXAuZ2V0
KHBhZ2VVUkwpOworICAgIGlmIChpY29uVVJMID09IGN1cnJlbnRJY29uVVJMKQorICAgICAgICBy
ZXR1cm47CiAKLSAgICBwcm9jZXNzUGVuZGluZ0ljb25zRm9yUGFnZVVSTChkYXRhYmFzZSwgcGFn
ZVVSTCk7Ci0gICAgZ19zaWduYWxfZW1pdChkYXRhYmFzZSwgc2lnbmFsc1tJQ09OX1JFQURZXSwg
MCwgcGFnZVVSTC51dGY4KCkuZGF0YSgpKTsKKyAgICBkYXRhYmFzZS0+cHJpdi0+cGFnZVVSTFRv
SWNvblVSTE1hcC5zZXQocGFnZVVSTCwgY3VycmVudEljb25VUkwpOworICAgIGdfc2lnbmFsX2Vt
aXQoZGF0YWJhc2UsIHNpZ25hbHNbRkFWSUNPTl9DSEFOR0VEXSwgMCwgcGFnZVVSTC51dGY4KCku
ZGF0YSgpLCBjdXJyZW50SWNvblVSTC51dGY4KCkuZGF0YSgpKTsKK30KKworc3RhdGljIHZvaWQg
aWNvbkRhdGFSZWFkeUZvclBhZ2VVUkxDYWxsYmFjayhXS0ljb25EYXRhYmFzZVJlZiB3a0ljb25E
YXRhYmFzZSwgV0tVUkxSZWYgd2tQYWdlVVJMLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcHJvY2Vzc1BlbmRpbmdJY29uc0ZvclBh
Z2VVUkwoV0VCS0lUX0ZBVklDT05fREFUQUJBU0UoY2xpZW50SW5mbyksIHRvSW1wbCh3a1BhZ2VV
UkwpLT5zdHJpbmcoKSk7CiB9CiAKIFdlYktpdEZhdmljb25EYXRhYmFzZSogd2Via2l0RmF2aWNv
bkRhdGFiYXNlQ3JlYXRlKFdlYkljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlKQpAQCAtMTg5LDcg
KzIwNiw3IEBAIFdlYktpdEZhdmljb25EYXRhYmFzZSogd2Via2l0RmF2aWNvbkRhdGFiYXNlQ3Jl
YXRlKFdlYkljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlCiAgICAgV0tJY29uRGF0YWJhc2VDbGll
bnQgd2tJY29uRGF0YWJhc2VDbGllbnQgPSB7CiAgICAgICAgIGtXS0ljb25EYXRhYmFzZUNsaWVu
dEN1cnJlbnRWZXJzaW9uLAogICAgICAgICBmYXZpY29uRGF0YWJhc2UsIC8vIGNsaWVudEluZm8K
LSAgICAgICAgMCwgLy8gZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkxDYWxsYmFjaworICAgICAgICBk
aWRDaGFuZ2VJY29uRm9yUGFnZVVSTENhbGxiYWNrLAogICAgICAgICAwLCAvLyBkaWRSZW1vdmVB
bGxJY29uc0NhbGxiYWNrCiAgICAgICAgIGljb25EYXRhUmVhZHlGb3JQYWdlVVJMQ2FsbGJhY2ss
CiAgICAgfTsKQEAgLTE5NywxOCArMjE0LDYgQEAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiB3ZWJr
aXRGYXZpY29uRGF0YWJhc2VDcmVhdGUoV2ViSWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UKICAg
ICByZXR1cm4gZmF2aWNvbkRhdGFiYXNlOwogfQogCi1jYWlyb19zdXJmYWNlX3QqIHdlYmtpdEZh
dmljb25EYXRhYmFzZUdldEZhdmljb24oV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwg
Y29uc3QgQ1N0cmluZyYgcGFnZVVSTCkKLXsKLSAgICBBU1NFUlQoV0VCS0lUX0lTX0ZBVklDT05f
REFUQUJBU0UoZGF0YWJhc2UpKTsKLSAgICBBU1NFUlQoIXBhZ2VVUkwuaXNOdWxsKCkpOwotCi0g
ICAgY2Fpcm9fc3VyZmFjZV90KiBpY29uU3VyZmFjZSA9IGdldEljb25TdXJmYWNlU3luY2hyb25v
dXNseShkYXRhYmFzZSwgU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJMLmRhdGEoKSksIDApOwotICAg
IGlmICghaWNvblN1cmZhY2UpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGNhaXJv
X3N1cmZhY2VfcmVmZXJlbmNlKGljb25TdXJmYWNlKTsKLX0KLQogc3RhdGljIFBlbmRpbmdJY29u
UmVxdWVzdFZlY3RvciogZ2V0T3JDcmVhdGVQZW5kaW5nSWNvblJlcXVlc3RzKFdlYktpdEZhdmlj
b25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKIHsKICAgICBQZW5k
aW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gZGF0YWJhc2UtPnByaXYtPnBlbmRpbmdJY29u
UmVxdWVzdHMuZ2V0KHBhZ2VVUkwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oCmluZGV4
IDZjNTA5NDkuLjk4OWZkZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlLmgKQEAgLTI3
LDYgKzI3LDUgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIFdlYktpdEZhdmljb25EYXRh
YmFzZSogd2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKFdlYkljb25EYXRhYmFzZSopOwotY2Fp
cm9fc3VyZmFjZV90KiB3ZWJraXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uKFdlYktpdEZhdmlj
b25EYXRhYmFzZSosIGNvbnN0IENTdHJpbmcmKTsKIAogI2VuZGlmIC8vIFdlYktpdEZhdmljb25E
YXRhYmFzZVByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCA0ZTQzYTBjLi5jODllZmQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMTIy
LDggKzEyMiw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgewogICAgIGJvb2wgaXNM
b2FkaW5nOwogCiAgICAgYm9vbCB3YWl0aW5nRm9yTWFpblJlc291cmNlOwotICAgIGd1bG9uZyBt
YWluUmVzb3VyY2VSZXNwb25zZUhhbmRsZXJJRDsKLSAgICBndWxvbmcgd2F0Y2hGb3JDaGFuZ2Vz
SW5GYXZpY29uSGFuZGxlcklEOworICAgIHVuc2lnbmVkIGxvbmcgbWFpblJlc291cmNlUmVzcG9u
c2VIYW5kbGVySUQ7CiAgICAgV2ViS2l0TG9hZEV2ZW50IGxhc3REZWxheWVkRXZlbnQ7CiAKICAg
ICBHUmVmUHRyPFdlYktpdEJhY2tGb3J3YXJkTGlzdD4gYmFja0ZvcndhcmRMaXN0OwpAQCAtMTQ2
LDYgKzE0NSw4IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgewogCiAgICAgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gZmF2aWNvbjsKICAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gZmF2
aWNvbkNhbmNlbGxhYmxlOworICAgIENTdHJpbmcgZmF2aWNvblVSSTsKKyAgICB1bnNpZ25lZCBs
b25nIGZhdmljb25DaGFuZ2VkSGFuZGxlcklEOwogfTsKIAogc3RhdGljIGd1aW50IHNpZ25hbHNb
TEFTVF9TSUdOQUxdID0geyAwLCB9OwpAQCAtMjY3LDYgKzI2OCwxNiBAQCBzdGF0aWMgdm9pZCB1
c2VyQWdlbnRDaGFuZ2VkKFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncywgR1BhcmFtU3BlYyosIFdl
YktpdFdlYlZpZQogICAgIGdldFBhZ2Uod2ViVmlldyktPnNldEN1c3RvbVVzZXJBZ2VudChTdHJp
bmc6OmZyb21VVEY4KHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncykpKTsK
IH0KIAorc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1VwZGF0ZUZhdmljb24oV2ViS2l0V2ViVmll
dyogd2ViVmlldywgY2Fpcm9fc3VyZmFjZV90KiBmYXZpY29uKQoreworICAgIFdlYktpdFdlYlZp
ZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAgICBpZiAocHJpdi0+ZmF2aWNvbi5n
ZXQoKSA9PSBmYXZpY29uKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5mYXZpY29uID0g
ZmF2aWNvbjsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyksICJmYXZpY29u
Iik7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDYW5jZWxGYXZpY29uUmVxdWVzdChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGlmICghd2ViVmlldy0+cHJpdi0+ZmF2aWNv
bkNhbmNlbGxhYmxlKQpAQCAtMjc2LDI2ICsyODcsNDMgQEAgc3RhdGljIHZvaWQgd2Via2l0V2Vi
Vmlld0NhbmNlbEZhdmljb25SZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgd2Vi
Vmlldy0+cHJpdi0+ZmF2aWNvbkNhbmNlbGxhYmxlID0gMDsKIH0KIAotc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld1VwZGF0ZUZhdmljb24oV2ViS2l0V2ViVmlldyogd2ViVmlldywgY2Fpcm9fc3Vy
ZmFjZV90KiBmYXZpY29uKQorc3RhdGljIHZvaWQgZ290RmF2aWNvbkNhbGxiYWNrKEdPYmplY3Qq
IG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQogewotICAg
IGlmICh3ZWJWaWV3LT5wcml2LT5mYXZpY29uLmdldCgpID09IGZhdmljb24pCisgICAgR093blB0
cjxHRXJyb3I+IGVycm9yOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGZhdmljb24gPSBh
ZG9wdFJlZih3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9maW5pc2goV0VCS0lU
X0ZBVklDT05fREFUQUJBU0Uob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAg
ICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9S
X0NBTkNFTExFRCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHdlYlZpZXctPnByaXYtPmZhdmlj
b24gPSBmYXZpY29uOwotICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVCh3ZWJWaWV3KSwgImZh
dmljb24iKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHVz
ZXJEYXRhKTsKKyAgICB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvbih3ZWJWaWV3LCBmYXZpY29u
LmdldCgpKTsKKyAgICB3ZWJWaWV3LT5wcml2LT5mYXZpY29uQ2FuY2VsbGFibGUgPSAwOwogfQog
Ci1zdGF0aWMgdm9pZCBpY29uUmVhZHlDYWxsYmFjayhXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRh
dGFiYXNlLCBjb25zdCBjaGFyKiB1cmksIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCitzdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3UmVxdWVzdEZhdmljb24oV2ViS2l0V2ViVmlldyogd2ViVmlldykK
IHsKLSAgICAvLyBDb25zaWRlciBvbmx5IHRoZSBpY29uIG1hdGNoaW5nIHRoZSBhY3RpdmUgVVJJ
IGZvciB0aGlzIHdlYnZpZXcuCi0gICAgaWYgKHdlYlZpZXctPnByaXYtPmFjdGl2ZVVSSSAhPSB1
cmkpCisgICAgd2Via2l0V2ViVmlld0NhbmNlbEZhdmljb25SZXF1ZXN0KHdlYlZpZXcpOworCisg
ICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworICAgIHByaXYt
PmZhdmljb25DYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAg
ICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dl
dF9mYXZpY29uX2RhdGFiYXNlKHByaXYtPmNvbnRleHQpOworICAgIHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF9mYXZpY29uKGRhdGFiYXNlLCBwcml2LT5hY3RpdmVVUkkuZGF0YSgpLCBwcml2
LT5mYXZpY29uQ2FuY2VsbGFibGUuZ2V0KCksIGdvdEZhdmljb25DYWxsYmFjaywgd2ViVmlldyk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdVcGRhdGVGYXZpY29uVVJJKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIGZhdmljb25VUkkpCit7CisgICAgaWYgKHdlYlZp
ZXctPnByaXYtPmZhdmljb25VUkkgPT0gZmF2aWNvblVSSSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gVXBkYXRlIHRoZSBmYXZpY29uIG9ubHkgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUgYWxyZWFk
eS4KLSAgICBpZiAoIXdlYlZpZXctPnByaXYtPmZhdmljb24pIHsKLSAgICAgICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gZmF2aWNvbiA9IGFkb3B0UmVmKHdlYmtpdEZhdmljb25EYXRhYmFzZUdl
dEZhdmljb24oZGF0YWJhc2UsIHdlYlZpZXctPnByaXYtPmFjdGl2ZVVSSSkpOwotICAgICAgICB3
ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvbih3ZWJWaWV3LCBmYXZpY29uLmdldCgpKTsKLSAgICB9
CisgICAgd2ViVmlldy0+cHJpdi0+ZmF2aWNvblVSSSA9IGZhdmljb25VUkk7CisgICAgd2Via2l0
V2ViVmlld1JlcXVlc3RGYXZpY29uKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9pZCBmYXZpY29u
Q2hhbmdlZENhbGxiYWNrKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGNo
YXIqIHBhZ2VVUkksIGNvbnN0IGNoYXIqIGZhdmljb25VUkksIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCit7CisgICAgaWYgKHdlYlZpZXctPnByaXYtPmFjdGl2ZVVSSSAhPSBwYWdlVVJJKQorICAg
ICAgICByZXR1cm47CisKKyAgICB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSSh3ZWJWaWV3
LCBmYXZpY29uVVJJKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1NldFNldHRpbmdz
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncykKQEAgLTMy
NiwyNCArMzU0LDE5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaXNjb25uZWN0TWFpblJl
c291cmNlUmVzcG9uc2VDaGFuZ2VkU2lnbmFsSGFuZGxlcihXZWJLCiBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3V2F0Y2hGb3JDaGFuZ2VzSW5GYXZpY29uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
CiB7CiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwotICAg
IFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2Zhdmljb25fZGF0YWJhc2UocHJpdi0+Y29udGV4dCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgd2Ug
b25seSBjb25uZWN0IHRvIHRoaXMgc2lnbmFsIG9uY2UgcGVyIHZpZXcuCi0gICAgaWYgKHByaXYt
PndhdGNoRm9yQ2hhbmdlc0luRmF2aWNvbkhhbmRsZXJJRCkKKyAgICBpZiAocHJpdi0+ZmF2aWNv
bkNoYW5nZWRIYW5kbGVySUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByaXYtPndhdGNoRm9y
Q2hhbmdlc0luRmF2aWNvbkhhbmRsZXJJRCA9Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZGF0
YWJhc2UsICJmYXZpY29uLXJlYWR5IiwgR19DQUxMQkFDSyhpY29uUmVhZHlDYWxsYmFjayksIHdl
YlZpZXcpOworICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UocHJpdi0+Y29udGV4dCk7CisgICAgcHJpdi0+
ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0KGRhdGFiYXNlLCAiZmF2
aWNvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyhmYXZpY29uQ2hhbmdlZENhbGxiYWNrKSwgd2ViVmll
dyk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaXNjb25uZWN0RmF2aWNvbkRhdGFi
YXNlU2lnbmFsSGFuZGxlcnMoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBXZWJLaXRX
ZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7Ci0gICAgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZShwcml2LT5jb250ZXh0KTsKLQotICAgIGlmIChwcml2LT53YXRjaEZvckNoYW5nZXNJbkZhdmlj
b25IYW5kbGVySUQpCi0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChkYXRhYmFz
ZSwgcHJpdi0+d2F0Y2hGb3JDaGFuZ2VzSW5GYXZpY29uSGFuZGxlcklEKTsKLSAgICBwcml2LT53
YXRjaEZvckNoYW5nZXNJbkZhdmljb25IYW5kbGVySUQgPSAwOworICAgIGlmIChwcml2LT5mYXZp
Y29uQ2hhbmdlZEhhbmRsZXJJRCkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0
KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShwcml2LT5jb250ZXh0KSwg
cHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQpOworICAgIHByaXYtPmZhdmljb25DaGFuZ2Vk
SGFuZGxlcklEID0gMDsKIH0KIAogc3RhdGljIHZvaWQgZmlsZUNob29zZXJEaWFsb2dSZXNwb25z
ZUNhbGxiYWNrKEd0a0RpYWxvZyogZGlhbG9nLCBnaW50IHJlc3BvbnNlSUQsIFdlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKQEAgLTEyNjEsMjUgKzEyODQsNiBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3RW1pdERlbGF5ZWRMb2FkRXZlbnRzKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCiAgICAgcHJpdi0+d2FpdGluZ0Zvck1haW5SZXNvdXJjZSA9IGZhbHNlOwogfQogCi1zdGF0
aWMgdm9pZCBnZXRGYXZpY29uUmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyb3I7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZmF2aWNvbiA9IGFkb3B0UmVmKHdl
YmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9E
QVRBQkFTRShvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwotICAgIGlmICghZ19l
cnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExF
RCkpIHsKLSAgICAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh1
c2VyRGF0YSk7Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdVcGRhdGVGYXZpY29uKHdlYlZpZXcsIGZh
dmljb24uZ2V0KCkpOwotICAgICAgICB3ZWJWaWV3LT5wcml2LT5mYXZpY29uQ2FuY2VsbGFibGUg
PSAwOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1JlcXVlc3RGYXZpY29u
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi17Ci0gICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHBy
aXYgPSB3ZWJWaWV3LT5wcml2OwotICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2Ug
PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UocHJpdi0+Y29udGV4dCk7
Ci0gICAgcHJpdi0+ZmF2aWNvbkNhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVf
bmV3KCkpOwotICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uKGRhdGFiYXNl
LCBwcml2LT5hY3RpdmVVUkkuZGF0YSgpLCBwcml2LT5mYXZpY29uQ2FuY2VsbGFibGUuZ2V0KCks
IGdldEZhdmljb25SZWFkeUNhbGxiYWNrLCB3ZWJWaWV3KTsKLX0KLQogdm9pZCB3ZWJraXRXZWJW
aWV3TG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxv
YWRFdmVudCkKIHsKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnBy
aXY7CkBAIC0xMjkyLDcgKzEyOTYsOSBAQCB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkQ2hhbmdlZChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50KQogICAgICAg
ICBwcml2LT5tYWluUmVzb3VyY2UgPSAwOwogICAgICAgICBwcml2LT53YWl0aW5nRm9yTWFpblJl
c291cmNlID0gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChsb2FkRXZlbnQgPT0gV0VCS0lUX0xPQURf
Q09NTUlUVEVEKSB7Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdSZXF1ZXN0RmF2aWNvbih3ZWJWaWV3
KTsKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJf
Y29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShwcml2LT5jb250ZXh0KTsKKyAgICAgICAgR093
blB0cjxjaGFyPiBmYXZpY29uVVJJKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29u
X3VyaShkYXRhYmFzZSwgcHJpdi0+YWN0aXZlVVJJLmRhdGEoKSkpOworICAgICAgICB3ZWJraXRX
ZWJWaWV3VXBkYXRlRmF2aWNvblVSSSh3ZWJWaWV3LCBmYXZpY29uVVJJLmdldCgpKTsKIAogICAg
ICAgICBwcml2LT5zdWJyZXNvdXJjZXNNYXAuY2xlYXIoKTsKICAgICAgICAgaWYgKCFwcml2LT5t
YWluUmVzb3VyY2UpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKaW5k
ZXggMzEzMjU0ZC4uZGI0ZDI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25EYXRhYmFz
ZS5jcHAKQEAgLTM2LDE0ICszNiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV93ZWJDb250ZXh0
KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQogICAgICAgICAsIG1fZmF2aWNvbigw
KQogICAgICAgICAsIG1fZXJyb3IoMCkKLSAgICAgICAgLCBtX2ljb25SZWFkeVNpZ25hbFJlY2Vp
dmVkKGZhbHNlKQogICAgICAgICAsIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkKGZhbHNl
KQogICAgIHsKICAgICAgICAgaWYgKCFnX3N0cl9lcXVhbCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5KG1fd2ViQ29udGV4dCksIGtUZW1wRGlyZWN0b3J5
KSkKICAgICAgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9k
aXJlY3RvcnkobV93ZWJDb250ZXh0LCBrVGVtcERpcmVjdG9yeSk7CiAKICAgICAgICAgV2ViS2l0
RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNv
bl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRhdGFi
YXNlLCAiZmF2aWNvbi1yZWFkeSIsIEdfQ0FMTEJBQ0soaWNvblJlYWR5Q2FsbGJhY2spLCB0aGlz
KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkYXRhYmFzZSwgImZhdmljb24tY2hhbmdlZCIs
IEdfQ0FMTEJBQ0soZmF2aWNvbkNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgIH0KIAogICAg
IH5GYXZpY29uRGF0YWJhc2VUZXN0KCkKQEAgLTU1LDEzICs1NCwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChkYXRhYmFzZSwgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgaWNvblJlYWR5Q2FsbGJhY2soV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29u
c3QgY2hhciogcGFnZVVSSSwgRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKKyAgICBzdGF0aWMg
dm9pZCBmYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkksIGNvbnN0IGNoYXIqIGZhdmljb25VUkksIEZhdmljb25E
YXRhYmFzZVRlc3QqIHRlc3QpCiAgICAgewotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgPT0sIHBhZ2VVUkkpOwotICAgICAg
ICB0ZXN0LT5tX2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFn
X3N0cmNtcDAod2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgcGFnZVVS
SSkpCisgICAgICAgICAgICB0ZXN0LT5tX2Zhdmljb25VUkkgPSBmYXZpY29uVVJJOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIGZhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyog
d2ViVmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCisgICAgc3RhdGljIHZv
aWQgdmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1Bh
cmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCiAgICAgewogICAgICAgICBGYXZpY29uRGF0
YWJhc2VUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEp
OwogICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcgPT0gd2ViVmlldyk7CkBAIC04MCw3
ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHdhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCkKICAg
ICB7CiAgICAgICAgIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkID0gZmFsc2U7Ci0gICAg
ICAgIHVuc2lnbmVkIGxvbmcgaGFuZGxlcklEID0gZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcs
ICJub3RpZnk6OmZhdmljb24iLCBHX0NBTExCQUNLKGZhdmljb25DaGFuZ2VkQ2FsbGJhY2spLCB0
aGlzKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBoYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0
KG1fd2ViVmlldywgIm5vdGlmeTo6ZmF2aWNvbiIsIEdfQ0FMTEJBQ0sodmlld0Zhdmljb25DaGFu
Z2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OwogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93ZWJWaWV3LCBoYW5kbGVy
SUQpOwogICAgIH0KQEAgLTkyLDYgKzkxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgY2Fpcm9f
c3VyZmFjZV9kZXN0cm95KG1fZmF2aWNvbik7CiAgICAgICAgICAgICBtX2Zhdmljb24gPSAwOwog
ICAgICAgICB9CisKICAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOwogICAg
ICAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbihkYXRhYmFzZSwgcGFnZVVS
SSwgMCwgZ2V0RmF2aWNvbkNhbGxiYWNrLCB0aGlzKTsKICAgICAgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOwpAQCAtOTksOCArOTksOCBAQCBwdWJsaWM6CiAKICAgICBXZWJLaXRXZWJD
b250ZXh0KiBtX3dlYkNvbnRleHQ7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBtX2Zhdmljb247Cisg
ICAgQ1N0cmluZyBtX2Zhdmljb25VUkk7CiAgICAgR093blB0cjxHRXJyb3I+IG1fZXJyb3I7Ci0g
ICAgYm9vbCBtX2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkOwogICAgIGJvb2wgbV9mYXZpY29uTm90
aWZpY2F0aW9uUmVjZWl2ZWQ7CiB9OwogCkBAIC0xMTIsMjIgKzExMiwyNyBAQCBzZXJ2ZXJDYWxs
YmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFy
KiBwYXRoLCBHSGFzaAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2hhciogY29udGVu
dHM7Ci0gICAgZ3NpemUgbGVuZ3RoOwogICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Zhdmlj
b24uaWNvIikpIHsKLSAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GYXZpY29uKGdfYnVpbGRf
ZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgImJsYW5r
LmljbyIsIE5VTEwpKTsKLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9GYXZpY29u
LmdldCgpLCAmY29udGVudHMsICZsZW5ndGgsIDApOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi9ub2Zhdmljb24vZmF2aWNvbi5pY28iKSkgewogICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwogICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKICAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNoYXIqIGNvbnRlbnRzOworICAgIGdzaXplIGxlbmd0
aDsKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pY29uL2Zhdmljb24uaWNvIikpIHsKKyAg
ICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GYXZpY29uKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6
Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgImJsYW5rLmljbyIsIE5VTEwpKTsK
KyAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9GYXZpY29uLmdldCgpLCAmY29udGVu
dHMsICZsZW5ndGgsIDApOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Cisg
ICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL25vZmF2aWNvbiIpKSB7CisgICAgICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBub0Zhdmljb25IVE1MID0gIjxodG1sPjxoZWFkPjxib2R5PnRl
c3Q8L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIG5vRmF2aWNvbkhUTUwsIHN0
cmxlbihub0Zhdmljb25IVE1MKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGVudHMgPSBn
X3N0cmR1cCgiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAgIGxlbmd0
aCA9IHN0cmxlbihjb250ZW50cyk7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50
c0hUTUwgPSAiPGh0bWw+PGhlYWQ+PGxpbmsgcmVsPSdpY29uJyBocmVmPScvaWNvbi9mYXZpY29u
LmljbycgdHlwZT0naW1hZ2UveC1pY287IGNoYXJzZXQ9YmluYXJ5Jz48L2hlYWQ+PGJvZHk+dGVz
dDwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3Nh
Z2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgY29udGVudHNIVE1MLCBzdHJs
ZW4oY29udGVudHNIVE1MKSk7CiAgICAgfQogCiAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3Ro
KTsKICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5
KTsKIH0KIApAQCAtMTQ5LDM5ICsxNTQsNTAgQEAgc3RhdGljIHZvaWQgdGVzdEdldEZhdmljb24o
RmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICAvLyBXZSBu
ZWVkIHRvIGxvYWQgdGhlIHBhZ2UgZmlyc3QgdG8gZW5zdXJlIHRoZSBpY29uIGRhdGEgd2lsbCBi
ZQogICAgIC8vIGluIHRoZSBkYXRhYmFzZSBpbiBjYXNlIHRoZXJlJ3MgYW4gYXNzb2NpYXRlZCBm
YXZpY29uLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRh
dGEoKSk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIiku
ZGF0YSgpKTsKICAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIGdfYXNz
ZXJ0KHRlc3QtPm1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQpOworICAgIENTdHJpbmcgZmF2aWNv
blVSSSA9IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pY29uL2Zhdmljb24uaWNvIik7CiAKICAg
ICAvLyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29uLgotICAgIHRlc3Qt
Pm1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQgPSBmYWxzZTsKLSAgICB0ZXN0LT5nZXRGYXZpY29u
Rm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5k
YXRhKCkpOworICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CiAgICAgZ19hc3NlcnQodGVz
dC0+bV9mYXZpY29uKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9mYXZpY29uVVJJLmRh
dGEoKSwgPT0sIGZhdmljb25VUkkuZGF0YSgpKTsKICAgICBnX2Fzc2VydCghdGVzdC0+bV9lcnJv
cik7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQpOwogCiAg
ICAgLy8gQ2hlY2sgdGhhdCB3aWR0aCBhbmQgaGVpZ2h0IG1hdGNoIHRob3NlIGZyb20gYmxhbmsu
aWNvICgxNngxNiBmYXZpY29uKS4KICAgICBnX2Fzc2VydF9jbXBpbnQoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfd2lkdGgodGVzdC0+bV9mYXZpY29uKSwgPT0sIDE2KTsKICAgICBnX2Fzc2VydF9j
bXBpbnQoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHRlc3QtPm1fZmF2aWNvbiksID09
LCAxNik7CiAKKyAgICAvLyBDaGVjayB0aGF0IGFub3RoZXIgcGFnZSB3aXRoIHRoZSBzYW1lIGZh
dmljb24gcmV0dXJuIHRoZSBzYW1lIGljb24uCisgICAgY2Fpcm9fc3VyZmFjZV90KiBmYXZpY29u
ID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UodGVzdC0+bV9mYXZpY29uKTsKKyAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9iYXIiKS5kYXRhKCkpOworICAgIC8vIEl0
J3MgYSBuZXcgcGFnZSBpbiB0aGUgZGF0YWJhc2UsIHNvIGZhdmljb24gd2lsbCBjaGFuZ2UgdHdp
Y2UsIGZpcnN0IHRvIHJlc2V0IGl0CisgICAgLy8gYW5kIHRoZW4gd2hlbiB0aGUgaWNvbiBpcyBs
b2FkZWQuCisgICAgdGVzdC0+d2FpdFVudGlsRmF2aWNvbkNoYW5nZWQoKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOworICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJ
QW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2JhciIpLmRhdGEoKSk7
CisgICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVz
dC0+bV9mYXZpY29uVVJJLmRhdGEoKSwgPT0sIGZhdmljb25VUkkuZGF0YSgpKTsKKyAgICBnX2Fz
c2VydCh0ZXN0LT5tX2Zhdmljb24gPT0gZmF2aWNvbik7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1f
ZXJyb3IpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShmYXZpY29uKTsKKwogICAgIC8vIENo
ZWNrIHRoZSBBUEkgcmV0cmlldmluZyBhbiBpbnZhbGlkIGZhdmljb24uCiAgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9mYXZpY29uIikuZGF0YSgpKTsKICAgICB0
ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdlZCgpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2lj
b25SZWFkeVNpZ25hbFJlY2VpdmVkKTsKIAotICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJ
QW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vZmF2aWNvbi8iKS5k
YXRhKCkpOworICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL25vZmF2aWNvbiIpLmRhdGEoKSk7CiAgICAgZ19hc3Nl
cnQoIXRlc3QtPm1fZmF2aWNvbik7CiAgICAgZ19hc3NlcnQodGVzdC0+bV9lcnJvcik7Ci0gICAg
Z19hc3NlcnQoIXRlc3QtPm1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQpOwogfQogCiBzdGF0aWMg
dm9pZCB0ZXN0R2V0RmF2aWNvblVSSShGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQogewogICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UodGVzdC0+bV93ZWJDb250ZXh0KTsKIAot
ICAgIGNvbnN0IGNoYXIqIGJhc2VVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0
YSgpOworICAgIGNvbnN0IGNoYXIqIGJhc2VVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
Zm9vIikuZGF0YSgpOwogICAgIEdPd25QdHI8Y2hhcj4gaWNvblVSSSh3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoZGF0YWJhc2UsIGJhc2VVUkkpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIoaWNvblVSSS5nZXQoKSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mYXZp
Y29uLmljbyIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGljb25VUkkuZ2V0KCksID09
LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaWNvbi9mYXZpY29uLmljbyIpLmRhdGEoKSk7CiB9
CiAKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQpAQCAtMTg5LDkgKzIwNSwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0Zhdmljb24oRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
ICAgICBjYWlyb19zdXJmYWNlX3QqIGljb25Gcm9tV2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfZmF2aWNvbih0ZXN0LT5tX3dlYlZpZXcpOwogICAgIGdfYXNzZXJ0KCFpY29uRnJvbVdlYlZp
ZXcpOwogCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0
YSgpKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKS5k
YXRhKCkpOwogICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7CiAgICAgZ19hc3Nl
cnQodGVzdC0+bV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQpOworICAgIC8vIFRoZSBpY29u
IGlzIGtub3duIGFuZCBoYXNuJ3QgY2hhbmdlZCBpbiB0aGUgZGF0YWJhc2UsIHNvIG5vdGlmeTo6
ZmF2aWNvbiBpcyBlbWl0dGVkCisgICAgLy8gYnV0IFdlYktpdEZhdmljb25EYXRhYmFzZTo6aWNv
bi1jaGFuZ2VkIGlzbid0LgorICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvblVSSS5pc051bGwo
KSk7CiAKICAgICBpY29uRnJvbVdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24o
dGVzdC0+bV93ZWJWaWV3KTsKICAgICBnX2Fzc2VydChpY29uRnJvbVdlYlZpZXcpOwpAQCAtMjEy
LDggKzIzMSw4IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBGYXZpY29uRGF0YWJhc2VUZXN0Ojph
ZGQoIldlYktpdEZhdmljb25EYXRhYmFzZSIsICJzZXQtZGlyZWN0b3J5IiwgdGVzdFNldERpcmVj
dG9yeSk7CiAgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJh
c2UiLCAiZ2V0LWZhdmljb24iLCB0ZXN0R2V0RmF2aWNvbik7CiAgICAgRmF2aWNvbkRhdGFiYXNl
VGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJhc2UiLCAiZ2V0LWZhdmljb24tdXJpIiwgdGVz
dEdldEZhdmljb25VUkkpOwotICAgIEZhdmljb25EYXRhYmFzZVRlc3Q6OmFkZCgiV2ViS2l0RmF2
aWNvbkRhdGFiYXNlIiwgImNsZWFyLWRhdGFiYXNlIiwgdGVzdENsZWFyRGF0YWJhc2UpOwogICAg
IEZhdmljb25EYXRhYmFzZVRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmYXZpY29uIiwgdGVz
dFdlYlZpZXdGYXZpY29uKTsKKyAgICBGYXZpY29uRGF0YWJhc2VUZXN0OjphZGQoIldlYktpdEZh
dmljb25EYXRhYmFzZSIsICJjbGVhci1kYXRhYmFzZSIsIHRlc3RDbGVhckRhdGFiYXNlKTsKIH0K
IAogc3RhdGljIHZvaWQgd2Via2l0RmF2aWNvbkRhdGFiYXNlRmluYWxpemVkQ2FsbGJhY2soZ3Bv
aW50ZXIsIEdPYmplY3QqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKaW5kZXggZTZjOGExMC4uZWZkOWUwNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0
CkBAIC05LDUgKzksNiBAQCBPQkpFQ1Q6Vk9JRAogVk9JRDpPQkpFQ1QsVUlOVAogVk9JRDpPQkpF
Q1QsT0JKRUNUCiBWT0lEOk9CSkVDVCxQT0lOVEVSCitWT0lEOlNUUklORyxTVFJJTkcKIFZPSUQ6
VUlOVDY0CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168190</attachid>
            <date>2012-10-11 04:10:35 -0700</date>
            <delta_ts>2012-10-15 09:57:14 -0700</delta_ts>
            <desc>Patch updated to current git master</desc>
            <filename>wk2-favicon-changed3.diff</filename>
            <type>text/plain</type>
            <size>27443</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwNjIyMDhjLi45YjgzYjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQg
QEAKKzIwMTItMTAtMTEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFdlYktpdFdlYlZpZXcgZG9lc24ndCBub3RpZnkgb2YgZmF2aWNv
biBjaGFuZ2VzIGZvciBrbm93biBmYXZpY29ucyBidXQgbmV3IHBhZ2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODg3NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHRoZSBwYWdlIGlzIHVua25vd24g
KG5vdCByZWdpc3RlcmVkIGluIHRoZSBpY29uIGRhdGFiYXNlKSBidXQKKyAgICAgICAgdGhlIGlj
b24gaXMga25vd24gKHJlZ2lzdGVyZWQgYnkgYW5vdGhlciBwYWdlKSBmYXZpY29uLXJlYWR5Cisg
ICAgICAgIHNpZ25hbCBpcyBub3QgZW1pdHRlZCBiZWNhdXNlIHRoZSBpY29uIGhhcyBhbHJlYWR5
IGJlZW4gaW1wb3J0ZWQKKyAgICAgICAgZnJvbSB0aGUgZGF0YWJhc2UuIFRoZSB2aWV3IGFsd2F5
cyBhc2tzIGZvciB0aGUgZmF2aWNvbiB3aGVuIHRoZQorICAgICAgICBsb2FkIGhhcyBiZWVuIGNv
bW1pdHRlZCwgYnV0IGl0J3MgdXN1YWxseSB0b28gZWFybHkgYW5kIHRoZQorICAgICAgICBmYXZp
Y29uIG9mIHRoZSBwYWdlIGlzIHN0aWxsIHVua293bi4gV2UgY2FuIHVzZQorICAgICAgICBkaWRD
aGFuZ2VJY29uRm9yUGFnZVVSTENhbGxiYWNrIHRvIGtub3cgd2hlbiB0byBhc2sgZm9yIHRoZQor
ICAgICAgICBmYXZpY29uIGVtaXR0aW5nIGEgZmF2aWNvbi1jaGFuZ2VkIHNpZ25hbC4gVGhlIGNh
bGxiYWNrCisgICAgICAgIGljb25EYXRhUmVhZHlGb3JQYWdlVVJMQ2FsbGJhY2sgaXMgc3RpbGwg
dXNlZnVsIHRvIHByb2Nlc3MgcGVuZGluZworICAgICAgICBpY29uIHJlcXVlc3RzLCBidXQgdGhl
IGZhdmljb24tcmVhZHkgc2lnbmFsIGNhbiBiZSByZW1vdmVkIGluCisgICAgICAgIGZhdm9yIG9m
IGZhdmljb24tY2hhbmdlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZh
dmljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChfV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0
ZSk6IEtlZXAgYSBtYXAgb2YgcGFnZSBpY29ucyB0aGF0IGhhcworICAgICAgICBiZWVuIGltcG9y
dGVkIHRvIG1ha2Ugc3VyZSB3ZSBvbmx5IGVtaXQgZmF2aWNvbi1jaGFuZ2VkIHNpZ25hbAorICAg
ICAgICB3aGVuIHRoZSBmYXZpY29uIFVSSSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYmVjYXVzZQor
ICAgICAgICBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTENhbGxiYWNrIGNhbiBiZSBjYWxsZWQgbXVs
dGlwbGUgdGltZXMgZm9yCisgICAgICAgIHRoZSBzYW1lIGZhdmljb24gVVJJIGluIHNvbWUgY2Fz
ZXMuCisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGFzc19pbml0KTogUmVtb3Zl
IGZhdmljb24tcmVhZHkgc2lnbmFsCisgICAgICAgIGFuZCBhZGQgZmF2aWNvbi1jaGFuZ2VkIHRo
YXQgaW5jbHVkZXMgdGhlIG5ldyBmYXZpY29uIFVSSSBmb3IgdGhlCisgICAgICAgIGdpdmVuIHBh
Z2UgVVJJLgorICAgICAgICAoZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkxDYWxsYmFjayk6IEVtaXQg
ZmF2aWNvbi1jaGFuZ2VkIHNpZ25hbCBpZgorICAgICAgICB0aGUgZmF2aWNvbiBVUkkgaXMgbmV3
IG9yIGhhcyBjaGFuZ2VkIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkkuCisgICAgICAgIChpY29uRGF0
YVJlYWR5Rm9yUGFnZVVSTENhbGxiYWNrKTogUHJvY2VzcyBwZW5kaW5nIGljb24gcmVxdWVzdHMu
CisgICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUpOiBBZGQgaW1wbGVtZW50YXRp
b24gZm9yCisgICAgICAgIGRpZENoYW5nZUljb25Gb3JQYWdlVVJMQ2FsbGJhY2suCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAoX1dl
YktpdFdlYlZpZXdQcml2YXRlKTogQWRkIGZhdmljb24gVVJJIHRvIG1ha2Ugc3VyZSB3ZSBvbmx5
IGFzayBmb3IgYQorICAgICAgICBuZXcgZmF2aWNvbiB3aGVuIHRoZSBmYXZpY29uIFVSSSBoYXMg
Y2hhbmdlZC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdVcGRhdGVGYXZpY29uKTogVXBkYXRlIHRo
ZSBmYXZpY29uIGFuZCBlbWl0CisgICAgICAgIG5vdGlmeTo6ZmF2aWNvbiBpZiBpdCBoYXMgY2hh
bmdlZC4KKyAgICAgICAgKGdvdEZhdmljb25DYWxsYmFjayk6IFVwZGF0ZSB0aGUgZmF2aWNvbiBp
ZiB0aGUgcmVxdWVzdCBoYXNuJ3QKKyAgICAgICAgYmVlbiBjYW5jZWxsZWQuCisgICAgICAgICh3
ZWJraXRXZWJWaWV3UmVxdWVzdEZhdmljb24pOiBBc2sgZm9yIHRoZSBwYWdlIGZhdmljb24uCisg
ICAgICAgICh3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSSk6IFVwZGF0ZWQgdGhlIGZhdmlj
b24gVVJJIGFuZAorICAgICAgICByZXF1ZXN0IHRoZSBwYWdlIGZhdmljb24gaWYgdGhlIGZhdmlj
b24gVVJJIGhhcyBjaGFuZ2VkLgorICAgICAgICAoZmF2aWNvbkNoYW5nZWRDYWxsYmFjayk6IENh
bGwgd2Via2l0V2ViVmlld1VwZGF0ZUZhdmljb25VUkkoKSB3aXRoCisgICAgICAgIHRoZSBnaXZl
biBmYXZpY29uIFVSSS4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdXYXRjaEZvckNoYW5nZXNJbkZh
dmljb24pOiBDb25uZWN0IHRvCisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZTo6ZmF2aWNv
bi1jaGFuZ2VkLgorICAgICAgICAod2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RGYXZpY29uRGF0YWJh
c2VTaWduYWxIYW5kbGVycyk6IERpc2Nvbm5lY3QKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFi
YXNlOjpmYXZpY29uLWNoYW5nZWQgc2lnbmFsLgorICAgICAgICAod2Via2l0V2ViVmlld0xvYWRD
aGFuZ2VkKTogQ2FsbCB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSSgpCisgICAgICAgIHdp
dGggdGhlIGN1cnJlbnQgZmF2aWNvbiBVUkkgd2hlbiB0aGUgbG9hZCBoYXMgYmVlbiBjb21taXR0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25E
YXRhYmFzZS5jcHA6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgICh0ZXN0Tm90
SW5pdGlhbGl6ZWQpOgorICAgICAgICAodGVzdEdldEZhdmljb24pOgorICAgICAgICAodGVzdEdl
dEZhdmljb25VUkkpOgorICAgICAgICAodGVzdFdlYlZpZXdGYXZpY29uKToKKyAgICAgICAgKGJl
Zm9yZUFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlz
dDogQWRkIG5ldyBtYXJzaGFsZXIuCisKIDIwMTItMTAtMTEgIE1hcmlvIFNhbmNoZXogUHJhZGEg
IDxtc2FuY2hlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEl0IHNob3VsZCBiZSBwb3Nz
aWJsZSB0byBkaXNhYmxlIGZhdmljb25zIGluIFdlYktpdDIgR1RLKyBBUEkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJh
c2UuY3BwCmluZGV4IGNiMDE2YWIuLmJmNWM5YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcApAQCAt
MjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIldlYktpdEZhdmljb25EYXRhYmFzZS5oIgogCiAjaW5j
bHVkZSAiV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdE1h
cnNoYWwuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9G
aWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZS5oPgpAQCAtMzUsNyArMzYsNyBA
QAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogZW51bSB7Ci0gICAgSUNPTl9SRUFEWSwKKyAg
ICBGQVZJQ09OX0NIQU5HRUQsCiAKICAgICBMQVNUX1NJR05BTAogfTsKQEAgLTQ4LDYgKzQ5LDcg
QEAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKj4gUGVu
ZGluZ0ljb25SZXF1ZXN0TWFwOwogc3RydWN0IF9XZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRl
IHsKICAgICBSZWZQdHI8V2ViSWNvbkRhdGFiYXNlPiBpY29uRGF0YWJhc2U7CiAgICAgUGVuZGlu
Z0ljb25SZXF1ZXN0TWFwIHBlbmRpbmdJY29uUmVxdWVzdHM7CisgICAgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gcGFnZVVSTFRvSWNvblVSTE1hcDsKIH07CiAKIEdfREVGSU5FX1RZUEUoV2ViS2l0
RmF2aWNvbkRhdGFiYXNlLCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZSwgR19UWVBFX09CSkVDVCkK
QEAgLTg0LDIzICs4NiwyNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9j
bGFzc19pbml0KFdlYktpdEZhdmljb25EYXRhYmFzZUNsYXNzKiBmYXZpYwogICAgIGdPYmplY3RD
bGFzcy0+ZmluYWxpemUgPSB3ZWJraXRGYXZpY29uRGF0YWJhc2VGaW5hbGl6ZTsKIAogICAgIC8q
KgotICAgICAqIFdlYktpdEZhdmljb25EYXRhYmFzZTo6ZmF2aWNvbi1yZWFkeToKKyAgICAgKiBX
ZWJLaXRGYXZpY29uRGF0YWJhc2U6OmZhdmljb24tY2hhbmdlZDoKICAgICAgKiBAZGF0YWJhc2U6
IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAgICogQHBhZ2Vf
dXJpOiB0aGUgVVJJIG9mIHRoZSBXZWIgcGFnZSBjb250YWluaW5nIHRoZSBpY29uLgorICAgICAq
IEBwYWdlX3VyaTogdGhlIFVSSSBvZiB0aGUgV2ViIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbgor
ICAgICAqIEBmYXZpY29uX3VyaTogdGhlIFVSSSBvZiB0aGUgZmF2aWNvbgogICAgICAqCi0gICAg
ICogVGhpcyBzaWduYWwgZ2V0cyBlbWl0dGVkIHdoZW4gdGhlIGZhdmljb24gb2YgQHBhZ2VfdXJp
IGlzCi0gICAgICogcmVhZHkuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZmF2aWNvbidzIGRhdGEgaXMg
cmVhZHkgdG8gYmUgdXNlZAotICAgICAqIGJ5IHRoZSBhcHBsaWNhdGlvbiwgZWl0aGVyIGJlY2F1
c2UgaXQgaGFzIGJlZW4gbG9hZGVkIGZyb20gdGhlCi0gICAgICogbmV0d29yaywgaWYgaXQncyB0
aGUgZmlyc3QgdGltZSBpdCBnZXRzIHJldHJpZXZlZCwgb3IgYmVjYXVzZQotICAgICAqIGl0IGhh
cyBiZWVuIGFscmVhZHkgaW1wb3J0ZWQgZnJvbSB0aGUgaWNvbiBkYXRhYmFzZS4KKyAgICAgKiBU
aGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIGZhdmljb24gVVJJIG9mIEBwYWdlX3VyaSBo
YXMKKyAgICAgKiBiZWVuIGNoYW5nZWQgdG8gQGZhdmljb25fdXJpIGluIHRoZSBkYXRhYmFzZS4g
WW91IGNhbiBjb25uZWN0CisgICAgICogdG8gdGhpcyBzaWduYWwgYW5kIGNhbGwgd2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24oKQorICAgICAqIHRvIGdldCB0aGUgZmF2aWNvbi4g
SWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIHRoZSBmYXZpY29uIG9mIGEKKyAgICAgKiAjV2ViS2l0
V2ViVmlldyBpdCdzIGVhc2llciB0byB1c2UgdGhlICNXZWJLaXRXZWJWaWV3OmZhdmljb24KKyAg
ICAgKiBwcm9wZXJ0eS4gU2VlIHdlYmtpdF93ZWJfdmlld19nZXRfZmF2aWNvbigpIGZvciBtb3Jl
IGRldGFpbHMuCiAgICAgICovCi0gICAgc2lnbmFsc1tJQ09OX1JFQURZXSA9Ci0gICAgICAgIGdf
c2lnbmFsX25ldygiZmF2aWNvbi1yZWFkeSIsCisgICAgc2lnbmFsc1tGQVZJQ09OX0NIQU5HRURd
ID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJmYXZpY29uLWNoYW5nZWQiLAogICAgICAgICAgICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZmF2aWNvbkRhdGFiYXNlQ2xhc3MpLAogICAgICAg
ICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCiAgICAgICAgICAgICAgICAgICAgICAw
LCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1NU
UklORywKLSAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAg
ICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fU1RSSU5HX1NUUklORywKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NU
UklORywKICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOwogCiAgICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKGZhdmljb25EYXRhYmFzZUNsYXNzLCBzaXplb2YoV2ViS2l0RmF2
aWNvbkRhdGFiYXNlUHJpdmF0ZSkpOwpAQCAtMTcwLDE1ICsxNzUsMjcgQEAgc3RhdGljIHZvaWQg
cHJvY2Vzc1BlbmRpbmdJY29uc0ZvclBhZ2VVUkwoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRh
YmFzZSwgY29uc3QKICAgICBkZWxldGVQZW5kaW5nSWNvblJlcXVlc3RzKGRhdGFiYXNlLCBwZW5k
aW5nSWNvblJlcXVlc3RzLCBwYWdlVVJMKTsKIH0KIAotc3RhdGljIHZvaWQgaWNvbkRhdGFSZWFk
eUZvclBhZ2VVUkxDYWxsYmFjayhXS0ljb25EYXRhYmFzZVJlZiB3a0ljb25EYXRhYmFzZSwgV0tV
UkxSZWYgd2tQYWdlVVJMLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorc3RhdGljIHZvaWQgZGlk
Q2hhbmdlSWNvbkZvclBhZ2VVUkxDYWxsYmFjayhXS0ljb25EYXRhYmFzZVJlZiB3a0ljb25EYXRh
YmFzZSwgV0tVUkxSZWYgd2tQYWdlVVJMLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRh
dGFiYXNlID0gV0VCS0lUX0ZBVklDT05fREFUQUJBU0UoY2xpZW50SW5mbyk7CisgICAgaWYgKCFk
YXRhYmFzZS0+cHJpdi0+aWNvbkRhdGFiYXNlLT5pc1VybEltcG9ydENvbXBsZXRlZCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBTdHJpbmcgcGFnZVVSTCA9IHRvSW1wbCh3a1BhZ2VVUkwpLT5z
dHJpbmcoKTsKKyAgICBTdHJpbmcgY3VycmVudEljb25VUkw7CisgICAgZGF0YWJhc2UtPnByaXYt
Pmljb25EYXRhYmFzZS0+c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChwYWdlVVJMLCBjdXJy
ZW50SWNvblVSTCk7CisgICAgY29uc3QgU3RyaW5nJiBpY29uVVJMID0gZGF0YWJhc2UtPnByaXYt
PnBhZ2VVUkxUb0ljb25VUkxNYXAuZ2V0KHBhZ2VVUkwpOworICAgIGlmIChpY29uVVJMID09IGN1
cnJlbnRJY29uVVJMKQorICAgICAgICByZXR1cm47CiAKLSAgICBwcm9jZXNzUGVuZGluZ0ljb25z
Rm9yUGFnZVVSTChkYXRhYmFzZSwgcGFnZVVSTCk7Ci0gICAgZ19zaWduYWxfZW1pdChkYXRhYmFz
ZSwgc2lnbmFsc1tJQ09OX1JFQURZXSwgMCwgcGFnZVVSTC51dGY4KCkuZGF0YSgpKTsKKyAgICBk
YXRhYmFzZS0+cHJpdi0+cGFnZVVSTFRvSWNvblVSTE1hcC5zZXQocGFnZVVSTCwgY3VycmVudElj
b25VUkwpOworICAgIGdfc2lnbmFsX2VtaXQoZGF0YWJhc2UsIHNpZ25hbHNbRkFWSUNPTl9DSEFO
R0VEXSwgMCwgcGFnZVVSTC51dGY4KCkuZGF0YSgpLCBjdXJyZW50SWNvblVSTC51dGY4KCkuZGF0
YSgpKTsKK30KKworc3RhdGljIHZvaWQgaWNvbkRhdGFSZWFkeUZvclBhZ2VVUkxDYWxsYmFjayhX
S0ljb25EYXRhYmFzZVJlZiB3a0ljb25EYXRhYmFzZSwgV0tVUkxSZWYgd2tQYWdlVVJMLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
cHJvY2Vzc1BlbmRpbmdJY29uc0ZvclBhZ2VVUkwoV0VCS0lUX0ZBVklDT05fREFUQUJBU0UoY2xp
ZW50SW5mbyksIHRvSW1wbCh3a1BhZ2VVUkwpLT5zdHJpbmcoKSk7CiB9CiAKIFdlYktpdEZhdmlj
b25EYXRhYmFzZSogd2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKFdlYkljb25EYXRhYmFzZSog
aWNvbkRhdGFiYXNlKQpAQCAtMTg5LDcgKzIwNiw3IEBAIFdlYktpdEZhdmljb25EYXRhYmFzZSog
d2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKFdlYkljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNl
CiAgICAgV0tJY29uRGF0YWJhc2VDbGllbnQgd2tJY29uRGF0YWJhc2VDbGllbnQgPSB7CiAgICAg
ICAgIGtXS0ljb25EYXRhYmFzZUNsaWVudEN1cnJlbnRWZXJzaW9uLAogICAgICAgICBmYXZpY29u
RGF0YWJhc2UsIC8vIGNsaWVudEluZm8KLSAgICAgICAgMCwgLy8gZGlkQ2hhbmdlSWNvbkZvclBh
Z2VVUkxDYWxsYmFjaworICAgICAgICBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTENhbGxiYWNrLAog
ICAgICAgICAwLCAvLyBkaWRSZW1vdmVBbGxJY29uc0NhbGxiYWNrCiAgICAgICAgIGljb25EYXRh
UmVhZHlGb3JQYWdlVVJMQ2FsbGJhY2ssCiAgICAgfTsKQEAgLTE5NywxOCArMjE0LDYgQEAgV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlKiB3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUoV2ViSWNvbkRh
dGFiYXNlKiBpY29uRGF0YWJhc2UKICAgICByZXR1cm4gZmF2aWNvbkRhdGFiYXNlOwogfQogCi1j
YWlyb19zdXJmYWNlX3QqIHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb24oV2ViS2l0RmF2
aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgQ1N0cmluZyYgcGFnZVVSTCkKLXsKLSAgICBB
U1NFUlQoV0VCS0lUX0lTX0ZBVklDT05fREFUQUJBU0UoZGF0YWJhc2UpKTsKLSAgICBBU1NFUlQo
IXBhZ2VVUkwuaXNOdWxsKCkpOwotCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBpY29uU3VyZmFjZSA9
IGdldEljb25TdXJmYWNlU3luY2hyb25vdXNseShkYXRhYmFzZSwgU3RyaW5nOjpmcm9tVVRGOChw
YWdlVVJMLmRhdGEoKSksIDApOwotICAgIGlmICghaWNvblN1cmZhY2UpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKGljb25TdXJmYWNlKTsK
LX0KLQogc3RhdGljIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogZ2V0T3JDcmVhdGVQZW5kaW5n
SWNvblJlcXVlc3RzKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmlu
ZyYgcGFnZVVSTCkKIHsKICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IqIGljb25zID0gZGF0
YWJhc2UtPnByaXYtPnBlbmRpbmdJY29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkwpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNl
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNv
bkRhdGFiYXNlUHJpdmF0ZS5oCmluZGV4IDZjNTA5NDkuLjk4OWZkZTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZVByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29u
RGF0YWJhc2VQcml2YXRlLmgKQEAgLTI3LDYgKzI3LDUgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CiAKIFdlYktpdEZhdmljb25EYXRhYmFzZSogd2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRl
KFdlYkljb25EYXRhYmFzZSopOwotY2Fpcm9fc3VyZmFjZV90KiB3ZWJraXRGYXZpY29uRGF0YWJh
c2VHZXRGYXZpY29uKFdlYktpdEZhdmljb25EYXRhYmFzZSosIGNvbnN0IENTdHJpbmcmKTsKIAog
I2VuZGlmIC8vIFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCAyMzZhNGYz
Li5iMmEzMTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3LmNwcApAQCAtMTIyLDggKzEyMiw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmll
d1ByaXZhdGUgewogICAgIGJvb2wgaXNMb2FkaW5nOwogCiAgICAgYm9vbCB3YWl0aW5nRm9yTWFp
blJlc291cmNlOwotICAgIGd1bG9uZyBtYWluUmVzb3VyY2VSZXNwb25zZUhhbmRsZXJJRDsKLSAg
ICBndWxvbmcgd2F0Y2hGb3JDaGFuZ2VzSW5GYXZpY29uSGFuZGxlcklEOworICAgIHVuc2lnbmVk
IGxvbmcgbWFpblJlc291cmNlUmVzcG9uc2VIYW5kbGVySUQ7CiAgICAgV2ViS2l0TG9hZEV2ZW50
IGxhc3REZWxheWVkRXZlbnQ7CiAKICAgICBHUmVmUHRyPFdlYktpdEJhY2tGb3J3YXJkTGlzdD4g
YmFja0ZvcndhcmRMaXN0OwpAQCAtMTQ2LDYgKzE0NSw4IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmll
d1ByaXZhdGUgewogCiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZmF2aWNvbjsKICAgICBH
UmVmUHRyPEdDYW5jZWxsYWJsZT4gZmF2aWNvbkNhbmNlbGxhYmxlOworICAgIENTdHJpbmcgZmF2
aWNvblVSSTsKKyAgICB1bnNpZ25lZCBsb25nIGZhdmljb25DaGFuZ2VkSGFuZGxlcklEOwogfTsK
IAogc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwpAQCAtMjY3LDYg
KzI2OCwxNiBAQCBzdGF0aWMgdm9pZCB1c2VyQWdlbnRDaGFuZ2VkKFdlYktpdFNldHRpbmdzKiBz
ZXR0aW5ncywgR1BhcmFtU3BlYyosIFdlYktpdFdlYlZpZQogICAgIGdldFBhZ2Uod2ViVmlldykt
PnNldEN1c3RvbVVzZXJBZ2VudChTdHJpbmc6OmZyb21VVEY4KHdlYmtpdF9zZXR0aW5nc19nZXRf
dXNlcl9hZ2VudChzZXR0aW5ncykpKTsKIH0KIAorc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1Vw
ZGF0ZUZhdmljb24oV2ViS2l0V2ViVmlldyogd2ViVmlldywgY2Fpcm9fc3VyZmFjZV90KiBmYXZp
Y29uKQoreworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsK
KyAgICBpZiAocHJpdi0+ZmF2aWNvbi5nZXQoKSA9PSBmYXZpY29uKQorICAgICAgICByZXR1cm47
CisKKyAgICBwcml2LT5mYXZpY29uID0gZmF2aWNvbjsKKyAgICBnX29iamVjdF9ub3RpZnkoR19P
QkpFQ1Qod2ViVmlldyksICJmYXZpY29uIik7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdDYW5jZWxGYXZpY29uUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGlm
ICghd2ViVmlldy0+cHJpdi0+ZmF2aWNvbkNhbmNlbGxhYmxlKQpAQCAtMjc2LDI2ICsyODcsNDMg
QEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NhbmNlbEZhdmljb25SZXF1ZXN0KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCiAgICAgd2ViVmlldy0+cHJpdi0+ZmF2aWNvbkNhbmNlbGxhYmxlID0g
MDsKIH0KIAotc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1VwZGF0ZUZhdmljb24oV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgY2Fpcm9fc3VyZmFjZV90KiBmYXZpY29uKQorc3RhdGljIHZvaWQgZ290
RmF2aWNvbkNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdw
b2ludGVyIHVzZXJEYXRhKQogewotICAgIGlmICh3ZWJWaWV3LT5wcml2LT5mYXZpY29uLmdldCgp
ID09IGZhdmljb24pCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IGZhdmljb24gPSBhZG9wdFJlZih3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9n
ZXRfZmF2aWNvbl9maW5pc2goV0VCS0lUX0ZBVklDT05fREFUQUJBU0Uob2JqZWN0KSwgcmVzdWx0
LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgp
LCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHdlYlZpZXctPnByaXYtPmZhdmljb24gPSBmYXZpY29uOwotICAgIGdfb2JqZWN0X25vdGlm
eShHX09CSkVDVCh3ZWJWaWV3KSwgImZhdmljb24iKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHVzZXJEYXRhKTsKKyAgICB3ZWJraXRXZWJWaWV3VXBkYXRl
RmF2aWNvbih3ZWJWaWV3LCBmYXZpY29uLmdldCgpKTsKKyAgICB3ZWJWaWV3LT5wcml2LT5mYXZp
Y29uQ2FuY2VsbGFibGUgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBpY29uUmVhZHlDYWxsYmFjayhX
ZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBjaGFyKiB1cmksIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3UmVxdWVzdEZhdmljb24o
V2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKLSAgICAvLyBDb25zaWRlciBvbmx5IHRoZSBpY29u
IG1hdGNoaW5nIHRoZSBhY3RpdmUgVVJJIGZvciB0aGlzIHdlYnZpZXcuCi0gICAgaWYgKHdlYlZp
ZXctPnByaXYtPmFjdGl2ZVVSSSAhPSB1cmkpCisgICAgd2Via2l0V2ViVmlld0NhbmNlbEZhdmlj
b25SZXF1ZXN0KHdlYlZpZXcpOworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3
ZWJWaWV3LT5wcml2OworICAgIHByaXYtPmZhdmljb25DYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihn
X2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNl
ID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHByaXYtPmNvbnRleHQp
OworICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uKGRhdGFiYXNlLCBwcml2
LT5hY3RpdmVVUkkuZGF0YSgpLCBwcml2LT5mYXZpY29uQ2FuY2VsbGFibGUuZ2V0KCksIGdvdEZh
dmljb25DYWxsYmFjaywgd2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdV
cGRhdGVGYXZpY29uVVJJKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIGZhdmlj
b25VUkkpCit7CisgICAgaWYgKHdlYlZpZXctPnByaXYtPmZhdmljb25VUkkgPT0gZmF2aWNvblVS
SSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVXBkYXRlIHRoZSBmYXZpY29uIG9ubHkgaWYg
d2UgZG9uJ3QgaGF2ZSBvbmUgYWxyZWFkeS4KLSAgICBpZiAoIXdlYlZpZXctPnByaXYtPmZhdmlj
b24pIHsKLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZmF2aWNvbiA9IGFkb3B0UmVm
KHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb24oZGF0YWJhc2UsIHdlYlZpZXctPnByaXYt
PmFjdGl2ZVVSSSkpOwotICAgICAgICB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvbih3ZWJWaWV3
LCBmYXZpY29uLmdldCgpKTsKLSAgICB9CisgICAgd2ViVmlldy0+cHJpdi0+ZmF2aWNvblVSSSA9
IGZhdmljb25VUkk7CisgICAgd2Via2l0V2ViVmlld1JlcXVlc3RGYXZpY29uKHdlYlZpZXcpOwor
fQorCitzdGF0aWMgdm9pZCBmYXZpY29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdEZhdmljb25EYXRh
YmFzZSogZGF0YWJhc2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkksIGNvbnN0IGNoYXIqIGZhdmljb25V
UkksIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgaWYgKHdlYlZpZXctPnByaXYtPmFj
dGl2ZVVSSSAhPSBwYWdlVVJJKQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJraXRXZWJWaWV3
VXBkYXRlRmF2aWNvblVSSSh3ZWJWaWV3LCBmYXZpY29uVVJJKTsKIH0KIAogc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld1NldFNldHRpbmdzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFNl
dHRpbmdzKiBzZXR0aW5ncykKQEAgLTMyNiwyNCArMzU0LDE5IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dFdlYlZpZXdEaXNjb25uZWN0TWFpblJlc291cmNlUmVzcG9uc2VDaGFuZ2VkU2lnbmFsSGFuZGxl
cihXZWJLCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3V2F0Y2hGb3JDaGFuZ2VzSW5GYXZpY29u
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHBy
aXYgPSB3ZWJWaWV3LT5wcml2OwotICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2Ug
PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UocHJpdi0+Y29udGV4dCk7
Ci0KLSAgICAvLyBNYWtlIHN1cmUgd2Ugb25seSBjb25uZWN0IHRvIHRoaXMgc2lnbmFsIG9uY2Ug
cGVyIHZpZXcuCi0gICAgaWYgKHByaXYtPndhdGNoRm9yQ2hhbmdlc0luRmF2aWNvbkhhbmRsZXJJ
RCkKKyAgICBpZiAocHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHByaXYtPndhdGNoRm9yQ2hhbmdlc0luRmF2aWNvbkhhbmRsZXJJRCA9Ci0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoZGF0YWJhc2UsICJmYXZpY29uLXJlYWR5IiwgR19DQUxMQkFD
SyhpY29uUmVhZHlDYWxsYmFjayksIHdlYlZpZXcpOworICAgIFdlYktpdEZhdmljb25EYXRhYmFz
ZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UocHJp
di0+Y29udGV4dCk7CisgICAgcHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQgPSBnX3NpZ25h
bF9jb25uZWN0KGRhdGFiYXNlLCAiZmF2aWNvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyhmYXZpY29u
Q2hhbmdlZENhbGxiYWNrKSwgd2ViVmlldyk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdEaXNjb25uZWN0RmF2aWNvbkRhdGFiYXNlU2lnbmFsSGFuZGxlcnMoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKIHsKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnBy
aXY7Ci0gICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShwcml2LT5jb250ZXh0KTsKLQotICAgIGlmIChwcml2
LT53YXRjaEZvckNoYW5nZXNJbkZhdmljb25IYW5kbGVySUQpCi0gICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJfZGlzY29ubmVjdChkYXRhYmFzZSwgcHJpdi0+d2F0Y2hGb3JDaGFuZ2VzSW5GYXZpY29u
SGFuZGxlcklEKTsKLSAgICBwcml2LT53YXRjaEZvckNoYW5nZXNJbkZhdmljb25IYW5kbGVySUQg
PSAwOworICAgIGlmIChwcml2LT5mYXZpY29uQ2hhbmdlZEhhbmRsZXJJRCkKKyAgICAgICAgZ19z
aWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9k
YXRhYmFzZShwcml2LT5jb250ZXh0KSwgcHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQpOwor
ICAgIHByaXYtPmZhdmljb25DaGFuZ2VkSGFuZGxlcklEID0gMDsKIH0KIAogc3RhdGljIHZvaWQg
ZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKEd0a0RpYWxvZyogZGlhbG9nLCBnaW50
IHJlc3BvbnNlSUQsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKQEAgLTEyNjEs
MjUgKzEyODQsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3RW1pdERlbGF5ZWRMb2FkRXZl
bnRzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcHJpdi0+d2FpdGluZ0Zvck1haW5SZXNv
dXJjZSA9IGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCBnZXRGYXZpY29uUmVhZHlDYWxsYmFjayhH
T2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkK
LXsKLSAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gZmF2aWNvbiA9IGFkb3B0UmVmKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29u
X2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShvYmplY3QpLCByZXN1bHQsICZlcnJvci5v
dXRQdHIoKSkpOwotICAgIGlmICghZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VS
Uk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpIHsKLSAgICAgICAgV2ViS2l0V2ViVmlldyogd2Vi
VmlldyA9IFdFQktJVF9XRUJfVklFVyh1c2VyRGF0YSk7Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdV
cGRhdGVGYXZpY29uKHdlYlZpZXcsIGZhdmljb24uZ2V0KCkpOwotICAgICAgICB3ZWJWaWV3LT5w
cml2LT5mYXZpY29uQ2FuY2VsbGFibGUgPSAwOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld1JlcXVlc3RGYXZpY29uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi17Ci0gICAg
V2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwotICAgIFdlYktpdEZh
dmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25f
ZGF0YWJhc2UocHJpdi0+Y29udGV4dCk7Ci0gICAgcHJpdi0+ZmF2aWNvbkNhbmNlbGxhYmxlID0g
YWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwotICAgIHdlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9mYXZpY29uKGRhdGFiYXNlLCBwcml2LT5hY3RpdmVVUkkuZGF0YSgpLCBwcml2LT5m
YXZpY29uQ2FuY2VsbGFibGUuZ2V0KCksIGdldEZhdmljb25SZWFkeUNhbGxiYWNrLCB3ZWJWaWV3
KTsKLX0KLQogdm9pZCB3ZWJraXRXZWJWaWV3TG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCkKIHsKICAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CkBAIC0xMjkyLDcgKzEyOTYsOSBAQCB2b2lkIHdl
YmtpdFdlYlZpZXdMb2FkQ2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2Fk
RXZlbnQgbG9hZEV2ZW50KQogICAgICAgICBwcml2LT5tYWluUmVzb3VyY2UgPSAwOwogICAgICAg
ICBwcml2LT53YWl0aW5nRm9yTWFpblJlc291cmNlID0gZmFsc2U7CiAgICAgfSBlbHNlIGlmIChs
b2FkRXZlbnQgPT0gV0VCS0lUX0xPQURfQ09NTUlUVEVEKSB7Ci0gICAgICAgIHdlYmtpdFdlYlZp
ZXdSZXF1ZXN0RmF2aWNvbih3ZWJWaWV3KTsKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShwcml2
LT5jb250ZXh0KTsKKyAgICAgICAgR093blB0cjxjaGFyPiBmYXZpY29uVVJJKHdlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwgcHJpdi0+YWN0aXZlVVJJLmRh
dGEoKSkpOworICAgICAgICB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSSh3ZWJWaWV3LCBm
YXZpY29uVVJJLmdldCgpKTsKIAogICAgICAgICBwcml2LT5zdWJyZXNvdXJjZXNNYXAuY2xlYXIo
KTsKICAgICAgICAgaWYgKCFwcml2LT5tYWluUmVzb3VyY2UpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJh
c2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dEZhdmljb25EYXRhYmFzZS5jcHAKaW5kZXggNDBmYjVhMS4uYWMxM2U0ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25E
YXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKQEAgLTM2LDExICszNiwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIDogbV93ZWJDb250ZXh0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgp
KQogICAgICAgICAsIG1fZmF2aWNvbigwKQogICAgICAgICAsIG1fZXJyb3IoMCkKLSAgICAgICAg
LCBtX2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkKGZhbHNlKQogICAgICAgICAsIG1fZmF2aWNvbk5v
dGlmaWNhdGlvblJlY2VpdmVkKGZhbHNlKQogICAgIHsKICAgICAgICAgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZShtX3dlYkNvbnRleHQpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRhdGFiYXNlLCAiZmF2
aWNvbi1yZWFkeSIsIEdfQ0FMTEJBQ0soaWNvblJlYWR5Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChkYXRhYmFzZSwgImZhdmljb24tY2hhbmdlZCIsIEdfQ0FMTEJB
Q0soZmF2aWNvbkNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgIH0KIAogICAgIH5GYXZpY29u
RGF0YWJhc2VUZXN0KCkKQEAgLTUyLDEzICs1MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChkYXRhYmFzZSwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgaWNvblJl
YWR5Q2FsbGJhY2soV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgY2hhciog
cGFnZVVSSSwgRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKKyAgICBzdGF0aWMgdm9pZCBmYXZp
Y29uQ2hhbmdlZENhbGxiYWNrKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0
IGNoYXIqIHBhZ2VVUkksIGNvbnN0IGNoYXIqIGZhdmljb25VUkksIEZhdmljb25EYXRhYmFzZVRl
c3QqIHRlc3QpCiAgICAgewotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3
X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgPT0sIHBhZ2VVUkkpOwotICAgICAgICB0ZXN0LT5t
X2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAo
d2Via2l0X3dlYl92aWV3X2dldF91cmkodGVzdC0+bV93ZWJWaWV3KSwgcGFnZVVSSSkpCisgICAg
ICAgICAgICB0ZXN0LT5tX2Zhdmljb25VUkkgPSBmYXZpY29uVVJJOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIGZhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywg
R1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCisgICAgc3RhdGljIHZvaWQgdmlld0Zh
dmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgR1BhcmFtU3BlYyog
cHNwZWMsIGdwb2ludGVyIGRhdGEpCiAgICAgewogICAgICAgICBGYXZpY29uRGF0YWJhc2VUZXN0
KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8RmF2aWNvbkRhdGFiYXNlVGVzdCo+KGRhdGEpOwogICAgICAg
ICBnX2Fzc2VydCh0ZXN0LT5tX3dlYlZpZXcgPT0gd2ViVmlldyk7CkBAIC03Nyw3ICs3Niw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHdhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCkKICAgICB7CiAgICAg
ICAgIG1fZmF2aWNvbk5vdGlmaWNhdGlvblJlY2VpdmVkID0gZmFsc2U7Ci0gICAgICAgIHVuc2ln
bmVkIGxvbmcgaGFuZGxlcklEID0gZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJub3RpZnk6
OmZhdmljb24iLCBHX0NBTExCQUNLKGZhdmljb25DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICAgICAgdW5zaWduZWQgbG9uZyBoYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmll
dywgIm5vdGlmeTo6ZmF2aWNvbiIsIEdfQ0FMTEJBQ0sodmlld0Zhdmljb25DaGFuZ2VkQ2FsbGJh
Y2spLCB0aGlzKTsKICAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwogICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV93ZWJWaWV3LCBoYW5kbGVySUQpOwogICAg
IH0KQEAgLTg5LDYgKzg4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9k
ZXN0cm95KG1fZmF2aWNvbik7CiAgICAgICAgICAgICBtX2Zhdmljb24gPSAwOwogICAgICAgICB9
CisKICAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJf
Y29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dlYkNvbnRleHQpOwogICAgICAgICB3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbihkYXRhYmFzZSwgcGFnZVVSSSwgMCwgZ2V0
RmF2aWNvbkNhbGxiYWNrLCB0aGlzKTsKICAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxv
b3ApOwpAQCAtOTYsOCArOTYsOCBAQCBwdWJsaWM6CiAKICAgICBXZWJLaXRXZWJDb250ZXh0KiBt
X3dlYkNvbnRleHQ7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBtX2Zhdmljb247CisgICAgQ1N0cmlu
ZyBtX2Zhdmljb25VUkk7CiAgICAgR093blB0cjxHRXJyb3I+IG1fZXJyb3I7Ci0gICAgYm9vbCBt
X2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkOwogICAgIGJvb2wgbV9mYXZpY29uTm90aWZpY2F0aW9u
UmVjZWl2ZWQ7CiB9OwogCkBAIC0xMDksMjkgKzEwOSwzNCBAQCBzZXJ2ZXJDYWxsYmFjayhTb3Vw
U2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBH
SGFzaAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2hhciogY29udGVudHM7Ci0gICAg
Z3NpemUgbGVuZ3RoOwogICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Zhdmljb24uaWNvIikp
IHsKLSAgICAgICAgR093blB0cjxjaGFyPiBwYXRoVG9GYXZpY29uKGdfYnVpbGRfZmlsZW5hbWUo
VGVzdDo6Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgImJsYW5rLmljbyIsIE5V
TEwpKTsKLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cyhwYXRoVG9GYXZpY29uLmdldCgpLCAm
Y29udGVudHMsICZsZW5ndGgsIDApOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwg
Ii9ub2Zhdmljb24vZmF2aWNvbi5pY28iKSkgewogICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwogICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNoYXIqIGNvbnRlbnRzOworICAgIGdzaXplIGxlbmd0aDsKKyAgICBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pY29uL2Zhdmljb24uaWNvIikpIHsKKyAgICAgICAgR093
blB0cjxjaGFyPiBwYXRoVG9GYXZpY29uKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0V2ViS2l0
MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgImJsYW5rLmljbyIsIE5VTEwpKTsKKyAgICAgICAg
Z19maWxlX2dldF9jb250ZW50cyhwYXRoVG9GYXZpY29uLmdldCgpLCAmY29udGVudHMsICZsZW5n
dGgsIDApOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7CisgICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL25vZmF2aWNvbiIpKSB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBub0Zhdmljb25IVE1MID0gIjxodG1sPjxoZWFkPjxib2R5PnRlc3Q8L2JvZHk+
PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIG5vRmF2aWNvbkhUTUwsIHN0cmxlbihub0Zh
dmljb25IVE1MKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGVudHMgPSBnX3N0cmR1cCgi
PGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+Iik7Ci0gICAgICAgIGxlbmd0aCA9IHN0cmxl
bihjb250ZW50cyk7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50c0hUTUwgPSAi
PGh0bWw+PGhlYWQ+PGxpbmsgcmVsPSdpY29uJyBocmVmPScvaWNvbi9mYXZpY29uLmljbycgdHlw
ZT0naW1hZ2UveC1pY287IGNoYXJzZXQ9YmluYXJ5Jz48L2hlYWQ+PGJvZHk+dGVzdDwvYm9keT48
L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgY29udGVudHNIVE1MLCBzdHJsZW4oY29udGVu
dHNIVE1MKSk7CiAgICAgfQogCiAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfT0spOwotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKICAgICBz
b3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKIH0KIAog
c3RhdGljIHZvaWQgdGVzdE5vdEluaXRpYWxpemVkKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCiB7CiAgICAgLy8gVHJ5IHRvIHJldHJpZXZlIGEgdmFsaWQgZmF2aWNv
biBmcm9tIGEgbm90IGluaXRpYWxpemVkIGRhdGFiYXNlLgotICAgIHRlc3QtPmdldEZhdmljb25G
b3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRh
dGEoKSk7CisgICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKTsKICAgICBnX2Fzc2VydCghdGVz
dC0+bV9mYXZpY29uKTsKICAgICBnX2Fzc2VydCh0ZXN0LT5tX2Vycm9yKTsKICAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9lcnJvci0+Y29kZSwgPT0sIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNF
X0VSUk9SX05PVF9JTklUSUFMSVpFRCk7CkBAIC0xNTYsMzkgKzE2MSw1MCBAQCBzdGF0aWMgdm9p
ZCB0ZXN0R2V0RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQogewogICAgIC8vIFdlIG5lZWQgdG8gbG9hZCB0aGUgcGFnZSBmaXJzdCB0byBlbnN1cmUgdGhl
IGljb24gZGF0YSB3aWxsIGJlCiAgICAgLy8gaW4gdGhlIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUn
cyBhbiBhc3NvY2lhdGVkIGZhdmljb24uCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9mb28iKS5kYXRhKCkpOwogICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFu
Z2VkKCk7Ci0gICAgZ19hc3NlcnQodGVzdC0+bV9pY29uUmVhZHlTaWduYWxSZWNlaXZlZCk7Cisg
ICAgQ1N0cmluZyBmYXZpY29uVVJJID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ljb24vZmF2
aWNvbi5pY28iKTsKIAogICAgIC8vIENoZWNrIHRoZSBBUEkgcmV0cmlldmluZyBhIHZhbGlkIGZh
dmljb24uCi0gICAgdGVzdC0+bV9pY29uUmVhZHlTaWduYWxSZWNlaXZlZCA9IGZhbHNlOwotICAg
IHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VVUklB
bmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKTsK
ICAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb24pOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0
LT5tX2Zhdmljb25VUkkuZGF0YSgpLCA9PSwgZmF2aWNvblVSSS5kYXRhKCkpOwogICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5tX2Vycm9yKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9pY29uUmVhZHlTaWdu
YWxSZWNlaXZlZCk7CiAKICAgICAvLyBDaGVjayB0aGF0IHdpZHRoIGFuZCBoZWlnaHQgbWF0Y2gg
dGhvc2UgZnJvbSBibGFuay5pY28gKDE2eDE2IGZhdmljb24pLgogICAgIGdfYXNzZXJ0X2NtcGlu
dChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aCh0ZXN0LT5tX2Zhdmljb24pLCA9PSwgMTYp
OwogICAgIGdfYXNzZXJ0X2NtcGludChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQodGVz
dC0+bV9mYXZpY29uKSwgPT0sIDE2KTsKIAorICAgIC8vIENoZWNrIHRoYXQgYW5vdGhlciBwYWdl
IHdpdGggdGhlIHNhbWUgZmF2aWNvbiByZXR1cm4gdGhlIHNhbWUgaWNvbi4KKyAgICBjYWlyb19z
dXJmYWNlX3QqIGZhdmljb24gPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZSh0ZXN0LT5tX2Zhdmlj
b24pOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2JhciIpLmRh
dGEoKSk7CisgICAgLy8gSXQncyBhIG5ldyBwYWdlIGluIHRoZSBkYXRhYmFzZSwgc28gZmF2aWNv
biB3aWxsIGNoYW5nZSB0d2ljZSwgZmlyc3QgdG8gcmVzZXQgaXQKKyAgICAvLyBhbmQgdGhlbiB3
aGVuIHRoZSBpY29uIGlzIGxvYWRlZC4KKyAgICB0ZXN0LT53YWl0VW50aWxGYXZpY29uQ2hhbmdl
ZCgpOworICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7CisgICAgdGVzdC0+Z2V0
RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvYmFyIikuZGF0YSgpKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb24pOworICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXN0LT5tX2Zhdmljb25VUkkuZGF0YSgpLCA9PSwgZmF2aWNvblVSSS5k
YXRhKCkpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvbiA9PSBmYXZpY29uKTsKKyAgICBn
X2Fzc2VydCghdGVzdC0+bV9lcnJvcik7CisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGZhdmlj
b24pOworCiAgICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGFuIGludmFsaWQgZmF2aWNv
bi4KICAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zhdmljb24i
KS5kYXRhKCkpOwogICAgIHRlc3QtPndhaXRVbnRpbEZhdmljb25DaGFuZ2VkKCk7Ci0gICAgZ19h
c3NlcnQoIXRlc3QtPm1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQpOwogCi0gICAgdGVzdC0+Z2V0
RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvbm9mYXZpY29uLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VVUklB
bmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvbm9mYXZpY29uIikuZGF0
YSgpKTsKICAgICBnX2Fzc2VydCghdGVzdC0+bV9mYXZpY29uKTsKICAgICBnX2Fzc2VydCh0ZXN0
LT5tX2Vycm9yKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9pY29uUmVhZHlTaWduYWxSZWNlaXZl
ZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RHZXRGYXZpY29uVVJJKEZhdmljb25EYXRhYmFzZVRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBk
YXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZSh0ZXN0LT5t
X3dlYkNvbnRleHQpOwogCi0gICAgY29uc3QgY2hhciogYmFzZVVSSSA9IGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi8iKS5kYXRhKCk7CisgICAgY29uc3QgY2hhciogYmFzZVVSSSA9IGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCk7CiAgICAgR093blB0cjxjaGFyPiBpY29uVVJJ
KHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwgYmFzZVVS
SSkpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uVVJJLmdldCgpLCA9PSwga1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL2Zhdmljb24uaWNvIikuZGF0YSgpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
aWNvblVSSS5nZXQoKSwgPT0sIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pY29uL2Zhdmljb24u
aWNvIikuZGF0YSgpKTsKIH0KIAogc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGYXZpY29uKEZhdmlj
b25EYXRhYmFzZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCkBAIC0xOTYsOSArMjEyLDEyIEBA
IHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RmF2aWNvbihGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQogICAgIGNhaXJvX3N1cmZhY2VfdCogaWNvbkZyb21XZWJWaWV3ID0g
d2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKHRlc3QtPm1fd2ViVmlldyk7CiAgICAgZ19hc3Nl
cnQoIWljb25Gcm9tV2ViVmlldyk7CiAKLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsRmF2aWNvbkNoYW5n
ZWQoKTsKICAgICBnX2Fzc2VydCh0ZXN0LT5tX2Zhdmljb25Ob3RpZmljYXRpb25SZWNlaXZlZCk7
CisgICAgLy8gVGhlIGljb24gaXMga25vd24gYW5kIGhhc24ndCBjaGFuZ2VkIGluIHRoZSBkYXRh
YmFzZSwgc28gbm90aWZ5OjpmYXZpY29uIGlzIGVtaXR0ZWQKKyAgICAvLyBidXQgV2ViS2l0RmF2
aWNvbkRhdGFiYXNlOjppY29uLWNoYW5nZWQgaXNuJ3QuCisgICAgZ19hc3NlcnQodGVzdC0+bV9m
YXZpY29uVVJJLmlzTnVsbCgpKTsKIAogICAgIGljb25Gcm9tV2ViVmlldyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfZmF2aWNvbih0ZXN0LT5tX3dlYlZpZXcpOwogICAgIGdfYXNzZXJ0KGljb25Gcm9t
V2ViVmlldyk7CkBAIC0yMjAsOCArMjM5LDggQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIEZhdmlj
b25EYXRhYmFzZVRlc3Q6OmFkZCgiV2ViS2l0RmF2aWNvbkRhdGFiYXNlIiwgInNldC1kaXJlY3Rv
cnkiLCB0ZXN0U2V0RGlyZWN0b3J5KTsKICAgICBGYXZpY29uRGF0YWJhc2VUZXN0OjphZGQoIldl
YktpdEZhdmljb25EYXRhYmFzZSIsICJnZXQtZmF2aWNvbiIsIHRlc3RHZXRGYXZpY29uKTsKICAg
ICBGYXZpY29uRGF0YWJhc2VUZXN0OjphZGQoIldlYktpdEZhdmljb25EYXRhYmFzZSIsICJnZXQt
ZmF2aWNvbi11cmkiLCB0ZXN0R2V0RmF2aWNvblVSSSk7Ci0gICAgRmF2aWNvbkRhdGFiYXNlVGVz
dDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJhc2UiLCAiY2xlYXItZGF0YWJhc2UiLCB0ZXN0Q2xl
YXJEYXRhYmFzZSk7CiAgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImZhdmljb24iLCB0ZXN0V2ViVmlld0Zhdmljb24pOworICAgIEZhdmljb25EYXRhYmFzZVRl
c3Q6OmFkZCgiV2ViS2l0RmF2aWNvbkRhdGFiYXNlIiwgImNsZWFyLWRhdGFiYXNlIiwgdGVzdENs
ZWFyRGF0YWJhc2UpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRGYXZpY29uRGF0YWJhc2VGaW5h
bGl6ZWRDYWxsYmFjayhncG9pbnRlciwgR09iamVjdCopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0IGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAppbmRleCBlNmM4YTEwLi5l
ZmQ5ZTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJr
aXQybWFyc2hhbC5saXN0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dl
YmtpdDJtYXJzaGFsLmxpc3QKQEAgLTksNSArOSw2IEBAIE9CSkVDVDpWT0lECiBWT0lEOk9CSkVD
VCxVSU5UCiBWT0lEOk9CSkVDVCxPQkpFQ1QKIFZPSUQ6T0JKRUNULFBPSU5URVIKK1ZPSUQ6U1RS
SU5HLFNUUklORwogVk9JRDpVSU5UNjQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168732</attachid>
            <date>2012-10-15 09:57:14 -0700</date>
            <delta_ts>2012-11-05 12:29:18 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-favicon-changed4.diff</filename>
            <type>text/plain</type>
            <size>27745</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBkZTBhMGQ0Li4zNDBlMzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjYg
QEAKIDIwMTItMTAtMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIFdlYktpdFdlYlZpZXcgZG9lc24ndCBub3RpZnkgb2YgZmF2aWNv
biBjaGFuZ2VzIGZvciBrbm93biBmYXZpY29ucyBidXQgbmV3IHBhZ2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODg3NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHRoZSBwYWdlIGlzIHVua25vd24g
KG5vdCByZWdpc3RlcmVkIGluIHRoZSBpY29uIGRhdGFiYXNlKSBidXQKKyAgICAgICAgdGhlIGlj
b24gaXMga25vd24gKHJlZ2lzdGVyZWQgYnkgYW5vdGhlciBwYWdlKSBmYXZpY29uLXJlYWR5Cisg
ICAgICAgIHNpZ25hbCBpcyBub3QgZW1pdHRlZCBiZWNhdXNlIHRoZSBpY29uIGhhcyBhbHJlYWR5
IGJlZW4gaW1wb3J0ZWQKKyAgICAgICAgZnJvbSB0aGUgZGF0YWJhc2UuIFRoZSB2aWV3IGFsd2F5
cyBhc2tzIGZvciB0aGUgZmF2aWNvbiB3aGVuIHRoZQorICAgICAgICBsb2FkIGhhcyBiZWVuIGNv
bW1pdHRlZCwgYnV0IGl0J3MgdXN1YWxseSB0b28gZWFybHkgYW5kIHRoZQorICAgICAgICBmYXZp
Y29uIG9mIHRoZSBwYWdlIGlzIHN0aWxsIHVua293bi4gV2UgY2FuIHVzZQorICAgICAgICBkaWRD
aGFuZ2VJY29uRm9yUGFnZVVSTENhbGxiYWNrIHRvIGtub3cgd2hlbiB0byBhc2sgZm9yIHRoZQor
ICAgICAgICBmYXZpY29uIGVtaXR0aW5nIGEgZmF2aWNvbi1jaGFuZ2VkIHNpZ25hbC4gVGhlIGNh
bGxiYWNrCisgICAgICAgIGljb25EYXRhUmVhZHlGb3JQYWdlVVJMQ2FsbGJhY2sgaXMgc3RpbGwg
dXNlZnVsIHRvIHByb2Nlc3MgcGVuZGluZworICAgICAgICBpY29uIHJlcXVlc3RzLCBidXQgdGhl
IGZhdmljb24tcmVhZHkgc2lnbmFsIGNhbiBiZSByZW1vdmVkIGluCisgICAgICAgIGZhdm9yIG9m
IGZhdmljb24tY2hhbmdlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZh
dmljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChfV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0
ZSk6IEtlZXAgYSBtYXAgb2YgcGFnZSBpY29ucyB0aGF0IGhhcworICAgICAgICBiZWVuIGltcG9y
dGVkIHRvIG1ha2Ugc3VyZSB3ZSBvbmx5IGVtaXQgZmF2aWNvbi1jaGFuZ2VkIHNpZ25hbAorICAg
ICAgICB3aGVuIHRoZSBmYXZpY29uIFVSSSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYmVjYXVzZQor
ICAgICAgICBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTENhbGxiYWNrIGNhbiBiZSBjYWxsZWQgbXVs
dGlwbGUgdGltZXMgZm9yCisgICAgICAgIHRoZSBzYW1lIGZhdmljb24gVVJJIGluIHNvbWUgY2Fz
ZXMuCisgICAgICAgICh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGFzc19pbml0KTogUmVtb3Zl
IGZhdmljb24tcmVhZHkgc2lnbmFsCisgICAgICAgIGFuZCBhZGQgZmF2aWNvbi1jaGFuZ2VkIHRo
YXQgaW5jbHVkZXMgdGhlIG5ldyBmYXZpY29uIFVSSSBmb3IgdGhlCisgICAgICAgIGdpdmVuIHBh
Z2UgVVJJLgorICAgICAgICAoZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkxDYWxsYmFjayk6IEVtaXQg
ZmF2aWNvbi1jaGFuZ2VkIHNpZ25hbCBpZgorICAgICAgICB0aGUgZmF2aWNvbiBVUkkgaXMgbmV3
IG9yIGhhcyBjaGFuZ2VkIGZvciB0aGUgZ2l2ZW4gcGFnZSBVUkkuCisgICAgICAgIChpY29uRGF0
YVJlYWR5Rm9yUGFnZVVSTENhbGxiYWNrKTogUHJvY2VzcyBwZW5kaW5nIGljb24gcmVxdWVzdHMu
CisgICAgICAgICh3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUpOiBBZGQgaW1wbGVtZW50YXRp
b24gZm9yCisgICAgICAgIGRpZENoYW5nZUljb25Gb3JQYWdlVVJMQ2FsbGJhY2suCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAoX1dl
YktpdFdlYlZpZXdQcml2YXRlKTogQWRkIGZhdmljb24gVVJJIHRvIG1ha2Ugc3VyZSB3ZSBvbmx5
IGFzayBmb3IgYQorICAgICAgICBuZXcgZmF2aWNvbiB3aGVuIHRoZSBmYXZpY29uIFVSSSBoYXMg
Y2hhbmdlZC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdVcGRhdGVGYXZpY29uKTogVXBkYXRlIHRo
ZSBmYXZpY29uIGFuZCBlbWl0CisgICAgICAgIG5vdGlmeTo6ZmF2aWNvbiBpZiBpdCBoYXMgY2hh
bmdlZC4KKyAgICAgICAgKGdvdEZhdmljb25DYWxsYmFjayk6IFVwZGF0ZSB0aGUgZmF2aWNvbiBp
ZiB0aGUgcmVxdWVzdCBoYXNuJ3QKKyAgICAgICAgYmVlbiBjYW5jZWxsZWQuCisgICAgICAgICh3
ZWJraXRXZWJWaWV3UmVxdWVzdEZhdmljb24pOiBBc2sgZm9yIHRoZSBwYWdlIGZhdmljb24uCisg
ICAgICAgICh3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSSk6IFVwZGF0ZWQgdGhlIGZhdmlj
b24gVVJJIGFuZAorICAgICAgICByZXF1ZXN0IHRoZSBwYWdlIGZhdmljb24gaWYgdGhlIGZhdmlj
b24gVVJJIGhhcyBjaGFuZ2VkLgorICAgICAgICAoZmF2aWNvbkNoYW5nZWRDYWxsYmFjayk6IENh
bGwgd2Via2l0V2ViVmlld1VwZGF0ZUZhdmljb25VUkkoKSB3aXRoCisgICAgICAgIHRoZSBnaXZl
biBmYXZpY29uIFVSSS4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdXYXRjaEZvckNoYW5nZXNJbkZh
dmljb24pOiBDb25uZWN0IHRvCisgICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZTo6ZmF2aWNv
bi1jaGFuZ2VkLgorICAgICAgICAod2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RGYXZpY29uRGF0YWJh
c2VTaWduYWxIYW5kbGVycyk6IERpc2Nvbm5lY3QKKyAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFi
YXNlOjpmYXZpY29uLWNoYW5nZWQgc2lnbmFsLgorICAgICAgICAod2Via2l0V2ViVmlld0xvYWRD
aGFuZ2VkKTogQ2FsbCB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSSgpCisgICAgICAgIHdp
dGggdGhlIGN1cnJlbnQgZmF2aWNvbiBVUkkgd2hlbiB0aGUgbG9hZCBoYXMgYmVlbiBjb21taXR0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZhdmljb25E
YXRhYmFzZS5jcHA6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgICh0ZXN0Tm90
SW5pdGlhbGl6ZWQpOgorICAgICAgICAodGVzdEdldEZhdmljb24pOgorICAgICAgICAodGVzdEdl
dEZhdmljb25VUkkpOgorICAgICAgICAodGVzdFdlYlZpZXdGYXZpY29uKToKKyAgICAgICAgKGJl
Zm9yZUFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlz
dDogQWRkIG5ldyBtYXJzaGFsZXIuCisKKzIwMTItMTAtMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRp
c3RjaGVjay4KIAogICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgLmluIGZpbGVzIGluIFdl
YktpdDIvU2hhcmVkIHRvIEVYVFJBX0RJU1QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcAppbmRleCBjYjAx
NmFiLi5jNGFkYmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNp
bmNsdWRlICJXZWJLaXRGYXZpY29uRGF0YWJhc2UuaCIKIAogI2luY2x1ZGUgIldlYktpdEZhdmlj
b25EYXRhYmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRNYXJzaGFsLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0UHJpdmF0ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvSW1hZ2UuaD4KQEAgLTM1LDcgKzM2LDcgQEAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CiAKIGVudW0gewotICAgIElDT05fUkVBRFksCisgICAgRkFWSUNPTl9DSEFOR0VE
LAogCiAgICAgTEFTVF9TSUdOQUwKIH07CkBAIC00OCw2ICs0OSw3IEBAIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIFBlbmRpbmdJY29uUmVxdWVzdFZlY3Rvcio+IFBlbmRpbmdJY29uUmVxdWVzdE1h
cDsKIHN0cnVjdCBfV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZSB7CiAgICAgUmVmUHRyPFdl
Ykljb25EYXRhYmFzZT4gaWNvbkRhdGFiYXNlOwogICAgIFBlbmRpbmdJY29uUmVxdWVzdE1hcCBw
ZW5kaW5nSWNvblJlcXVlc3RzOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBhZ2VVUkxU
b0ljb25VUkxNYXA7CiB9OwogCiBHX0RFRklORV9UWVBFKFdlYktpdEZhdmljb25EYXRhYmFzZSwg
d2Via2l0X2Zhdmljb25fZGF0YWJhc2UsIEdfVFlQRV9PQkpFQ1QpCkBAIC04NCwyMyArODYsMjYg
QEAgc3RhdGljIHZvaWQgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfY2xhc3NfaW5pdChXZWJLaXRG
YXZpY29uRGF0YWJhc2VDbGFzcyogZmF2aWMKICAgICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXplID0g
d2Via2l0RmF2aWNvbkRhdGFiYXNlRmluYWxpemU7CiAKICAgICAvKioKLSAgICAgKiBXZWJLaXRG
YXZpY29uRGF0YWJhc2U6OmZhdmljb24tcmVhZHk6CisgICAgICogV2ViS2l0RmF2aWNvbkRhdGFi
YXNlOjpmYXZpY29uLWNoYW5nZWQ6CiAgICAgICogQGRhdGFiYXNlOiB0aGUgb2JqZWN0IG9uIHdo
aWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgICAqIEBwYWdlX3VyaTogdGhlIFVSSSBvZiB0
aGUgV2ViIHBhZ2UgY29udGFpbmluZyB0aGUgaWNvbi4KKyAgICAgKiBAcGFnZV91cmk6IHRoZSBV
Ukkgb2YgdGhlIFdlYiBwYWdlIGNvbnRhaW5pbmcgdGhlIGljb24KKyAgICAgKiBAZmF2aWNvbl91
cmk6IHRoZSBVUkkgb2YgdGhlIGZhdmljb24KICAgICAgKgotICAgICAqIFRoaXMgc2lnbmFsIGdl
dHMgZW1pdHRlZCB3aGVuIHRoZSBmYXZpY29uIG9mIEBwYWdlX3VyaSBpcwotICAgICAqIHJlYWR5
LiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZhdmljb24ncyBkYXRhIGlzIHJlYWR5IHRvIGJlIHVzZWQK
LSAgICAgKiBieSB0aGUgYXBwbGljYXRpb24sIGVpdGhlciBiZWNhdXNlIGl0IGhhcyBiZWVuIGxv
YWRlZCBmcm9tIHRoZQotICAgICAqIG5ldHdvcmssIGlmIGl0J3MgdGhlIGZpcnN0IHRpbWUgaXQg
Z2V0cyByZXRyaWV2ZWQsIG9yIGJlY2F1c2UKLSAgICAgKiBpdCBoYXMgYmVlbiBhbHJlYWR5IGlt
cG9ydGVkIGZyb20gdGhlIGljb24gZGF0YWJhc2UuCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1p
dHRlZCB3aGVuIHRoZSBmYXZpY29uIFVSSSBvZiBAcGFnZV91cmkgaGFzCisgICAgICogYmVlbiBj
aGFuZ2VkIHRvIEBmYXZpY29uX3VyaSBpbiB0aGUgZGF0YWJhc2UuIFlvdSBjYW4gY29ubmVjdAor
ICAgICAqIHRvIHRoaXMgc2lnbmFsIGFuZCBjYWxsIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dl
dF9mYXZpY29uKCkKKyAgICAgKiB0byBnZXQgdGhlIGZhdmljb24uIElmIHlvdSBhcmUgaW50ZXJl
c3RlZCBpbiB0aGUgZmF2aWNvbiBvZiBhCisgICAgICogI1dlYktpdFdlYlZpZXcgaXQncyBlYXNp
ZXIgdG8gdXNlIHRoZSAjV2ViS2l0V2ViVmlldzpmYXZpY29uCisgICAgICogcHJvcGVydHkuIFNl
ZSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24oKSBmb3IgbW9yZSBkZXRhaWxzLgogICAgICAq
LwotICAgIHNpZ25hbHNbSUNPTl9SRUFEWV0gPQotICAgICAgICBnX3NpZ25hbF9uZXcoImZhdmlj
b24tcmVhZHkiLAorICAgIHNpZ25hbHNbRkFWSUNPTl9DSEFOR0VEXSA9CisgICAgICAgIGdfc2ln
bmFsX25ldygiZmF2aWNvbi1jaGFuZ2VkIiwKICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKGZhdmljb25EYXRhYmFzZUNsYXNzKSwKICAgICAgICAgICAgICAgICAgICAgIEdf
U0lHTkFMX1JVTl9MQVNULAogICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwKLSAgICAgICAg
ICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19TVFJJTkcsCi0gICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9t
YXJzaGFsX1ZPSURfX1NUUklOR19TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVf
Tk9ORSwgMiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsCiAgICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZShmYXZpY29uRGF0YWJhc2VDbGFzcywgc2l6ZW9mKFdlYktpdEZhdmljb25EYXRhYmFzZVByaXZh
dGUpKTsKQEAgLTE3MCwxNSArMTc1LDMyIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NQZW5kaW5nSWNv
bnNGb3JQYWdlVVJMKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0CiAgICAg
ZGVsZXRlUGVuZGluZ0ljb25SZXF1ZXN0cyhkYXRhYmFzZSwgcGVuZGluZ0ljb25SZXF1ZXN0cywg
cGFnZVVSTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGljb25EYXRhUmVhZHlGb3JQYWdlVVJMQ2FsbGJh
Y2soV0tJY29uRGF0YWJhc2VSZWYgd2tJY29uRGF0YWJhc2UsIFdLVVJMUmVmIHdrUGFnZVVSTCwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3N0YXRpYyB2b2lkIGRpZENoYW5nZUljb25Gb3JQYWdl
VVJMQ2FsbGJhY2soV0tJY29uRGF0YWJhc2VSZWYgd2tJY29uRGF0YWJhc2UsIFdLVVJMUmVmIHdr
UGFnZVVSTCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotCiAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IFdFQktJVF9G
QVZJQ09OX0RBVEFCQVNFKGNsaWVudEluZm8pOworICAgIGlmICghZGF0YWJhc2UtPnByaXYtPmlj
b25EYXRhYmFzZS0+aXNVcmxJbXBvcnRDb21wbGV0ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gV2FpdCB1bnRpbCB0aGVyZSdzIGFuIGljb24gcmVjb3JkIGluIHRoZSBkYXRhYmFzZSBm
b3IgdGhpcyBwYWdlIFVSTC4KICAgICBTdHJpbmcgcGFnZVVSTCA9IHRvSW1wbCh3a1BhZ2VVUkwp
LT5zdHJpbmcoKTsKKyAgICBXZWJDb3JlOjpJbWFnZSogaWNvbkltYWdlID0gZGF0YWJhc2UtPnBy
aXYtPmljb25EYXRhYmFzZS0+aW1hZ2VGb3JQYWdlVVJMKHBhZ2VVUkwsIFdlYkNvcmU6OkludFNp
emUoMSwgMSkpOworICAgIGlmICghaWNvbkltYWdlIHx8IGljb25JbWFnZS0+aXNOdWxsKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBjdXJyZW50SWNvblVSTDsKKyAgICBkYXRhYmFz
ZS0+cHJpdi0+aWNvbkRhdGFiYXNlLT5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKHBhZ2VV
UkwsIGN1cnJlbnRJY29uVVJMKTsKKyAgICBjb25zdCBTdHJpbmcmIGljb25VUkwgPSBkYXRhYmFz
ZS0+cHJpdi0+cGFnZVVSTFRvSWNvblVSTE1hcC5nZXQocGFnZVVSTCk7CisgICAgaWYgKGljb25V
UkwgPT0gY3VycmVudEljb25VUkwpCisgICAgICAgIHJldHVybjsKKworICAgIGRhdGFiYXNlLT5w
cml2LT5wYWdlVVJMVG9JY29uVVJMTWFwLnNldChwYWdlVVJMLCBjdXJyZW50SWNvblVSTCk7Cisg
ICAgZ19zaWduYWxfZW1pdChkYXRhYmFzZSwgc2lnbmFsc1tGQVZJQ09OX0NIQU5HRURdLCAwLCBw
YWdlVVJMLnV0ZjgoKS5kYXRhKCksIGN1cnJlbnRJY29uVVJMLnV0ZjgoKS5kYXRhKCkpOworfQog
Ci0gICAgcHJvY2Vzc1BlbmRpbmdJY29uc0ZvclBhZ2VVUkwoZGF0YWJhc2UsIHBhZ2VVUkwpOwot
ICAgIGdfc2lnbmFsX2VtaXQoZGF0YWJhc2UsIHNpZ25hbHNbSUNPTl9SRUFEWV0sIDAsIHBhZ2VV
UkwudXRmOCgpLmRhdGEoKSk7CitzdGF0aWMgdm9pZCBpY29uRGF0YVJlYWR5Rm9yUGFnZVVSTENh
bGxiYWNrKFdLSWNvbkRhdGFiYXNlUmVmIHdrSWNvbkRhdGFiYXNlLCBXS1VSTFJlZiB3a1BhZ2VV
UkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBwcm9jZXNzUGVuZGluZ0ljb25zRm9yUGFnZVVSTChXRUJLSVRfRkFWSUNPTl9EQVRB
QkFTRShjbGllbnRJbmZvKSwgdG9JbXBsKHdrUGFnZVVSTCktPnN0cmluZygpKTsKIH0KIAogV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlKiB3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUoV2ViSWNvbkRh
dGFiYXNlKiBpY29uRGF0YWJhc2UpCkBAIC0xODksNyArMjExLDcgQEAgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlKiB3ZWJraXRGYXZpY29uRGF0YWJhc2VDcmVhdGUoV2ViSWNvbkRhdGFiYXNlKiBpY29u
RGF0YWJhc2UKICAgICBXS0ljb25EYXRhYmFzZUNsaWVudCB3a0ljb25EYXRhYmFzZUNsaWVudCA9
IHsKICAgICAgICAga1dLSWNvbkRhdGFiYXNlQ2xpZW50Q3VycmVudFZlcnNpb24sCiAgICAgICAg
IGZhdmljb25EYXRhYmFzZSwgLy8gY2xpZW50SW5mbwotICAgICAgICAwLCAvLyBkaWRDaGFuZ2VJ
Y29uRm9yUGFnZVVSTENhbGxiYWNrCisgICAgICAgIGRpZENoYW5nZUljb25Gb3JQYWdlVVJMQ2Fs
bGJhY2ssCiAgICAgICAgIDAsIC8vIGRpZFJlbW92ZUFsbEljb25zQ2FsbGJhY2sKICAgICAgICAg
aWNvbkRhdGFSZWFkeUZvclBhZ2VVUkxDYWxsYmFjaywKICAgICB9OwpAQCAtMTk3LDE4ICsyMTks
NiBAQCBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIHdlYmtpdEZhdmljb25EYXRhYmFzZUNyZWF0ZShX
ZWJJY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZQogICAgIHJldHVybiBmYXZpY29uRGF0YWJhc2U7
CiB9CiAKLWNhaXJvX3N1cmZhY2VfdCogd2Via2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbihX
ZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBDU3RyaW5nJiBwYWdlVVJMKQot
ewotICAgIEFTU0VSVChXRUJLSVRfSVNfRkFWSUNPTl9EQVRBQkFTRShkYXRhYmFzZSkpOwotICAg
IEFTU0VSVCghcGFnZVVSTC5pc051bGwoKSk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX3QqIGljb25T
dXJmYWNlID0gZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KGRhdGFiYXNlLCBTdHJpbmc6OmZy
b21VVEY4KHBhZ2VVUkwuZGF0YSgpKSwgMCk7Ci0gICAgaWYgKCFpY29uU3VyZmFjZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UoaWNvblN1
cmZhY2UpOwotfQotCiBzdGF0aWMgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yKiBnZXRPckNyZWF0
ZVBlbmRpbmdJY29uUmVxdWVzdHMoV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29u
c3QgU3RyaW5nJiBwYWdlVVJMKQogewogICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciogaWNv
bnMgPSBkYXRhYmFzZS0+cHJpdi0+cGVuZGluZ0ljb25SZXF1ZXN0cy5nZXQocGFnZVVSTCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29u
RGF0YWJhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGYXZpY29uRGF0YWJhc2VQcml2YXRlLmgKaW5kZXggNmM1MDk0OS4uOTg5ZmRlNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFi
YXNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZhdmljb25EYXRhYmFzZVByaXZhdGUuaApAQCAtMjcsNiArMjcsNSBAQAogdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKIAogV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiB3ZWJraXRGYXZpY29uRGF0YWJh
c2VDcmVhdGUoV2ViSWNvbkRhdGFiYXNlKik7Ci1jYWlyb19zdXJmYWNlX3QqIHdlYmtpdEZhdmlj
b25EYXRhYmFzZUdldEZhdmljb24oV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiwgY29uc3QgQ1N0cmlu
ZyYpOwogCiAjZW5kaWYgLy8gV2ViS2l0RmF2aWNvbkRhdGFiYXNlUHJpdmF0ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4
IGE4YzE1OTMuLjI2MjM2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0xMjQsOCArMTI0LDcgQEAgc3RydWN0IF9XZWJL
aXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgV2ViS2l0Vmlld01vZGUgdmlld01vZGU7CiAKICAgICBi
b29sIHdhaXRpbmdGb3JNYWluUmVzb3VyY2U7Ci0gICAgZ3Vsb25nIG1haW5SZXNvdXJjZVJlc3Bv
bnNlSGFuZGxlcklEOwotICAgIGd1bG9uZyB3YXRjaEZvckNoYW5nZXNJbkZhdmljb25IYW5kbGVy
SUQ7CisgICAgdW5zaWduZWQgbG9uZyBtYWluUmVzb3VyY2VSZXNwb25zZUhhbmRsZXJJRDsKICAg
ICBXZWJLaXRMb2FkRXZlbnQgbGFzdERlbGF5ZWRFdmVudDsKIAogICAgIEdSZWZQdHI8V2ViS2l0
QmFja0ZvcndhcmRMaXN0PiBiYWNrRm9yd2FyZExpc3Q7CkBAIC0xNDgsNiArMTQ3LDggQEAgc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBmYXZpY29uOwogICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBmYXZpY29uQ2FuY2VsbGFibGU7
CisgICAgQ1N0cmluZyBmYXZpY29uVVJJOworICAgIHVuc2lnbmVkIGxvbmcgZmF2aWNvbkNoYW5n
ZWRIYW5kbGVySUQ7CiB9OwogCiBzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7
IDAsIH07CkBAIC0yNjksNiArMjcwLDE2IEBAIHN0YXRpYyB2b2lkIHVzZXJBZ2VudENoYW5nZWQo
V2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzLCBHUGFyYW1TcGVjKiwgV2ViS2l0V2ViVmllCiAgICAg
Z2V0UGFnZSh3ZWJWaWV3KS0+c2V0Q3VzdG9tVXNlckFnZW50KFN0cmluZzo6ZnJvbVVURjgod2Vi
a2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzKSkpOwogfQogCitzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjYWly
b19zdXJmYWNlX3QqIGZhdmljb24pCit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYg
PSB3ZWJWaWV3LT5wcml2OworICAgIGlmIChwcml2LT5mYXZpY29uLmdldCgpID09IGZhdmljb24p
CisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPmZhdmljb24gPSBmYXZpY29uOworICAgIGdf
b2JqZWN0X25vdGlmeShHX09CSkVDVCh3ZWJWaWV3KSwgImZhdmljb24iKTsKK30KKwogc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld0NhbmNlbEZhdmljb25SZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCiB7CiAgICAgaWYgKCF3ZWJWaWV3LT5wcml2LT5mYXZpY29uQ2FuY2VsbGFibGUpCkBA
IC0yNzgsMjYgKzI4OSw0MyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q2FuY2VsRmF2aWNv
blJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICB3ZWJWaWV3LT5wcml2LT5mYXZp
Y29uQ2FuY2VsbGFibGUgPSAwOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3VXBkYXRl
RmF2aWNvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjYWlyb19zdXJmYWNlX3QqIGZhdmljb24p
CitzdGF0aWMgdm9pZCBnb3RGYXZpY29uQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCiB7Ci0gICAgaWYgKHdlYlZpZXctPnBy
aXYtPmZhdmljb24uZ2V0KCkgPT0gZmF2aWNvbikKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7
CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZmF2aWNvbiA9IGFkb3B0UmVmKHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFT
RShvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgIGlmIChnX2Vycm9yX21h
dGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgd2ViVmlldy0+cHJpdi0+ZmF2aWNvbiA9IGZhdmljb247Ci0g
ICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHdlYlZpZXcpLCAiZmF2aWNvbiIpOworICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcodXNlckRhdGEpOworICAgIHdl
YmtpdFdlYlZpZXdVcGRhdGVGYXZpY29uKHdlYlZpZXcsIGZhdmljb24uZ2V0KCkpOworICAgIHdl
YlZpZXctPnByaXYtPmZhdmljb25DYW5jZWxsYWJsZSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlj
b25SZWFkeUNhbGxiYWNrKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IGNo
YXIqIHVyaSwgV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdSZXF1ZXN0RmF2aWNvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewotICAgIC8vIENvbnNp
ZGVyIG9ubHkgdGhlIGljb24gbWF0Y2hpbmcgdGhlIGFjdGl2ZSBVUkkgZm9yIHRoaXMgd2Vidmll
dy4KLSAgICBpZiAod2ViVmlldy0+cHJpdi0+YWN0aXZlVVJJICE9IHVyaSkKKyAgICB3ZWJraXRX
ZWJWaWV3Q2FuY2VsRmF2aWNvblJlcXVlc3Qod2ViVmlldyk7CisKKyAgICBXZWJLaXRXZWJWaWV3
UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgcHJpdi0+ZmF2aWNvbkNhbmNlbGxh
YmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgIFdlYktpdEZhdmljb25E
YXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJh
c2UocHJpdi0+Y29udGV4dCk7CisgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmlj
b24oZGF0YWJhc2UsIHByaXYtPmFjdGl2ZVVSSS5kYXRhKCksIHByaXYtPmZhdmljb25DYW5jZWxs
YWJsZS5nZXQoKSwgZ290RmF2aWNvbkNhbGxiYWNrLCB3ZWJWaWV3KTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld1VwZGF0ZUZhdmljb25VUkkoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
Y29uc3QgY2hhciogZmF2aWNvblVSSSkKK3sKKyAgICBpZiAod2ViVmlldy0+cHJpdi0+ZmF2aWNv
blVSSSA9PSBmYXZpY29uVVJJKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBVcGRhdGUgdGhl
IGZhdmljb24gb25seSBpZiB3ZSBkb24ndCBoYXZlIG9uZSBhbHJlYWR5LgotICAgIGlmICghd2Vi
Vmlldy0+cHJpdi0+ZmF2aWNvbikgewotICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBm
YXZpY29uID0gYWRvcHRSZWYod2Via2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbihkYXRhYmFz
ZSwgd2ViVmlldy0+cHJpdi0+YWN0aXZlVVJJKSk7Ci0gICAgICAgIHdlYmtpdFdlYlZpZXdVcGRh
dGVGYXZpY29uKHdlYlZpZXcsIGZhdmljb24uZ2V0KCkpOwotICAgIH0KKyAgICB3ZWJWaWV3LT5w
cml2LT5mYXZpY29uVVJJID0gZmF2aWNvblVSSTsKKyAgICB3ZWJraXRXZWJWaWV3UmVxdWVzdEZh
dmljb24od2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIGZhdmljb25DaGFuZ2VkQ2FsbGJhY2so
V2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgY2hhciogcGFnZVVSSSwgY29u
c3QgY2hhciogZmF2aWNvblVSSSwgV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBpZiAo
d2ViVmlldy0+cHJpdi0+YWN0aXZlVVJJICE9IHBhZ2VVUkkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHdlYmtpdFdlYlZpZXdVcGRhdGVGYXZpY29uVVJJKHdlYlZpZXcsIGZhdmljb25VUkkpOwog
fQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0U2V0dGluZ3MoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzKQpAQCAtMzI4LDI0ICszNTYsMTkgQEAg
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RNYWluUmVzb3VyY2VSZXNwb25zZUNo
YW5nZWRTaWduYWxIYW5kbGVyKFdlYksKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdXYXRjaEZv
ckNoYW5nZXNJbkZhdmljb24oV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBXZWJLaXRX
ZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7Ci0gICAgV2ViS2l0RmF2aWNvbkRh
dGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZShwcml2LT5jb250ZXh0KTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBvbmx5IGNvbm5lY3QgdG8g
dGhpcyBzaWduYWwgb25jZSBwZXIgdmlldy4KLSAgICBpZiAocHJpdi0+d2F0Y2hGb3JDaGFuZ2Vz
SW5GYXZpY29uSGFuZGxlcklEKQorICAgIGlmIChwcml2LT5mYXZpY29uQ2hhbmdlZEhhbmRsZXJJ
RCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJpdi0+d2F0Y2hGb3JDaGFuZ2VzSW5GYXZpY29u
SGFuZGxlcklEID0KLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChkYXRhYmFzZSwgImZhdmljb24t
cmVhZHkiLCBHX0NBTExCQUNLKGljb25SZWFkeUNhbGxiYWNrKSwgd2ViVmlldyk7CisgICAgV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2
aWNvbl9kYXRhYmFzZShwcml2LT5jb250ZXh0KTsKKyAgICBwcml2LT5mYXZpY29uQ2hhbmdlZEhh
bmRsZXJJRCA9IGdfc2lnbmFsX2Nvbm5lY3QoZGF0YWJhc2UsICJmYXZpY29uLWNoYW5nZWQiLCBH
X0NBTExCQUNLKGZhdmljb25DaGFuZ2VkQ2FsbGJhY2spLCB3ZWJWaWV3KTsKIH0KIAogc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RGYXZpY29uRGF0YWJhc2VTaWduYWxIYW5kbGVy
cyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBw
cml2ID0gd2ViVmlldy0+cHJpdjsKLSAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNl
ID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHByaXYtPmNvbnRleHQp
OwotCi0gICAgaWYgKHByaXYtPndhdGNoRm9yQ2hhbmdlc0luRmF2aWNvbkhhbmRsZXJJRCkKLSAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KGRhdGFiYXNlLCBwcml2LT53YXRjaEZv
ckNoYW5nZXNJbkZhdmljb25IYW5kbGVySUQpOwotICAgIHByaXYtPndhdGNoRm9yQ2hhbmdlc0lu
RmF2aWNvbkhhbmRsZXJJRCA9IDA7CisgICAgaWYgKHByaXYtPmZhdmljb25DaGFuZ2VkSGFuZGxl
cklEKQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3Qod2Via2l0X3dlYl9jb250
ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHByaXYtPmNvbnRleHQpLCBwcml2LT5mYXZpY29uQ2hh
bmdlZEhhbmRsZXJJRCk7CisgICAgcHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQgPSAwOwog
fQogCiBzdGF0aWMgdm9pZCBmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrRGlh
bG9nKiBkaWFsb2csIGdpbnQgcmVzcG9uc2VJRCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiBy
ZXF1ZXN0KQpAQCAtMTI4NCwyNSArMTMwNyw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdF
bWl0RGVsYXllZExvYWRFdmVudHMoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBwcml2LT53
YWl0aW5nRm9yTWFpblJlc291cmNlID0gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGdldEZhdmlj
b25SZWFkeUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdw
b2ludGVyIHVzZXJEYXRhKQotewotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBmYXZpY29uID0gYWRvcHRSZWYod2Via2l0X2Zhdmljb25fZGF0
YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoKFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFKG9iamVjdCks
IHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgaWYgKCFnX2Vycm9yX21hdGNoZXMoZXJy
b3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkgewotICAgICAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHVzZXJEYXRhKTsKLSAgICAg
ICAgd2Via2l0V2ViVmlld1VwZGF0ZUZhdmljb24od2ViVmlldywgZmF2aWNvbi5nZXQoKSk7Ci0g
ICAgICAgIHdlYlZpZXctPnByaXYtPmZhdmljb25DYW5jZWxsYWJsZSA9IDA7Ci0gICAgfQotfQot
Ci1zdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3UmVxdWVzdEZhdmljb24oV2ViS2l0V2ViVmlldyog
d2ViVmlldykKLXsKLSAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnBy
aXY7Ci0gICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShwcml2LT5jb250ZXh0KTsKLSAgICBwcml2LT5mYXZp
Y29uQ2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgd2Vi
a2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24oZGF0YWJhc2UsIHByaXYtPmFjdGl2ZVVS
SS5kYXRhKCksIHByaXYtPmZhdmljb25DYW5jZWxsYWJsZS5nZXQoKSwgZ2V0RmF2aWNvblJlYWR5
Q2FsbGJhY2ssIHdlYlZpZXcpOwotfQotCiB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkQ2hhbmdlZChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50KQogewogICAg
IFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKQEAgLTEzMTUsNyAr
MTMxOSw5IEBAIHZvaWQgd2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQpCiAgICAgICAgIHByaXYtPm1haW5SZXNv
dXJjZSA9IDA7CiAgICAgICAgIHByaXYtPndhaXRpbmdGb3JNYWluUmVzb3VyY2UgPSBmYWxzZTsK
ICAgICB9IGVsc2UgaWYgKGxvYWRFdmVudCA9PSBXRUJLSVRfTE9BRF9DT01NSVRURUQpIHsKLSAg
ICAgICAgd2Via2l0V2ViVmlld1JlcXVlc3RGYXZpY29uKHdlYlZpZXcpOworICAgICAgICBXZWJL
aXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKHByaXYtPmNvbnRleHQpOworICAgICAgICBHT3duUHRyPGNoYXI+IGZhdmlj
b25VUkkod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBw
cml2LT5hY3RpdmVVUkkuZGF0YSgpKSk7CisgICAgICAgIHdlYmtpdFdlYlZpZXdVcGRhdGVGYXZp
Y29uVVJJKHdlYlZpZXcsIGZhdmljb25VUkkuZ2V0KCkpOwogCiAgICAgICAgIHByaXYtPnN1YnJl
c291cmNlc01hcC5jbGVhcigpOwogICAgICAgICBpZiAoIXByaXYtPm1haW5SZXNvdXJjZSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdEZhdmljb25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcAppbmRleCA0MGZiNWExLi5hYzEz
ZTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcApAQCAtMzYsMTEg
KzM2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3dlYkNvbnRleHQod2Via2l0X3dlYl9jb250
ZXh0X2dldF9kZWZhdWx0KCkpCiAgICAgICAgICwgbV9mYXZpY29uKDApCiAgICAgICAgICwgbV9l
cnJvcigwKQotICAgICAgICAsIG1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQoZmFsc2UpCiAgICAg
ICAgICwgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQoZmFsc2UpCiAgICAgewogICAgICAg
ICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dl
dF9mYXZpY29uX2RhdGFiYXNlKG1fd2ViQ29udGV4dCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoZGF0YWJhc2UsICJmYXZpY29uLXJlYWR5IiwgR19DQUxMQkFDSyhpY29uUmVhZHlDYWxsYmFj
ayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRhdGFiYXNlLCAiZmF2aWNvbi1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhmYXZpY29uQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAg
fQogCiAgICAgfkZhdmljb25EYXRhYmFzZVRlc3QoKQpAQCAtNTIsMTMgKzUxLDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGRhdGFiYXNl
LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBpY29uUmVhZHlDYWxsYmFjayhXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFi
YXNlLCBjb25zdCBjaGFyKiBwYWdlVVJJLCBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQorICAg
IHN0YXRpYyB2b2lkIGZhdmljb25DaGFuZ2VkQ2FsbGJhY2soV2ViS2l0RmF2aWNvbkRhdGFiYXNl
KiBkYXRhYmFzZSwgY29uc3QgY2hhciogcGFnZVVSSSwgY29uc3QgY2hhciogZmF2aWNvblVSSSwg
RmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCkKICAgICB7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgcGFnZVVSSSk7
Ci0gICAgICAgIHRlc3QtPm1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQgPSB0cnVlOworICAgICAg
ICBpZiAoIWdfc3RyY21wMCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh0ZXN0LT5tX3dlYlZpZXcp
LCBwYWdlVVJJKSkKKyAgICAgICAgICAgIHRlc3QtPm1fZmF2aWNvblVSSSA9IGZhdmljb25VUkk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZmF2aWNvbkNoYW5nZWRDYWxsYmFjayhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKKyAgICBz
dGF0aWMgdm9pZCB2aWV3RmF2aWNvbkNoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKICAgICB7CiAgICAgICAgIEZh
dmljb25EYXRhYmFzZVRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxGYXZpY29uRGF0YWJhc2VUZXN0
Kj4oZGF0YSk7CiAgICAgICAgIGdfYXNzZXJ0KHRlc3QtPm1fd2ViVmlldyA9PSB3ZWJWaWV3KTsK
QEAgLTc3LDcgKzc2LDcgQEAgcHVibGljOgogICAgIHZvaWQgd2FpdFVudGlsRmF2aWNvbkNoYW5n
ZWQoKQogICAgIHsKICAgICAgICAgbV9mYXZpY29uTm90aWZpY2F0aW9uUmVjZWl2ZWQgPSBmYWxz
ZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBoYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0KG1f
d2ViVmlldywgIm5vdGlmeTo6ZmF2aWNvbiIsIEdfQ0FMTEJBQ0soZmF2aWNvbkNoYW5nZWRDYWxs
YmFjayksIHRoaXMpOworICAgICAgICB1bnNpZ25lZCBsb25nIGhhbmRsZXJJRCA9IGdfc2lnbmFs
X2Nvbm5lY3QobV93ZWJWaWV3LCAibm90aWZ5OjpmYXZpY29uIiwgR19DQUxMQkFDSyh2aWV3RmF2
aWNvbkNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgICAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7CiAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3dlYlZpZXcs
IGhhbmRsZXJJRCk7CiAgICAgfQpAQCAtODksNiArODgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9mYXZpY29uKTsKICAgICAgICAgICAgIG1fZmF2aWNv
biA9IDA7CiAgICAgICAgIH0KKwogICAgICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFi
YXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKG1fd2ViQ29udGV4
dCk7CiAgICAgICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uKGRhdGFiYXNl
LCBwYWdlVVJJLCAwLCBnZXRGYXZpY29uQ2FsbGJhY2ssIHRoaXMpOwogICAgICAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7CkBAIC05Niw4ICs5Niw4IEBAIHB1YmxpYzoKIAogICAgIFdl
YktpdFdlYkNvbnRleHQqIG1fd2ViQ29udGV4dDsKICAgICBjYWlyb19zdXJmYWNlX3QqIG1fZmF2
aWNvbjsKKyAgICBDU3RyaW5nIG1fZmF2aWNvblVSSTsKICAgICBHT3duUHRyPEdFcnJvcj4gbV9l
cnJvcjsKLSAgICBib29sIG1faWNvblJlYWR5U2lnbmFsUmVjZWl2ZWQ7CiAgICAgYm9vbCBtX2Zh
dmljb25Ob3RpZmljYXRpb25SZWNlaXZlZDsKIH07CiAKQEAgLTEwOSwyOSArMTA5LDM0IEBAIHNl
cnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNv
bnN0IGNoYXIqIHBhdGgsIEdIYXNoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjaGFy
KiBjb250ZW50czsKLSAgICBnc2l6ZSBsZW5ndGg7CiAgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgs
ICIvZmF2aWNvbi5pY28iKSkgewotICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhUb0Zhdmljb24o
Z19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgp
LCAiYmxhbmsuaWNvIiwgTlVMTCkpOwotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhU
b0Zhdmljb24uZ2V0KCksICZjb250ZW50cywgJmxlbmd0aCwgMCk7Ci0gICAgfSBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL25vZmF2aWNvbi9mYXZpY29uLmljbyIpKSB7CiAgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CiAg
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkp
OwogICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hhciogY29udGVudHM7CisgICAgZ3Np
emUgbGVuZ3RoOworICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ljb24vZmF2aWNvbi5pY28i
KSkgeworICAgICAgICBHT3duUHRyPGNoYXI+IHBhdGhUb0Zhdmljb24oZ19idWlsZF9maWxlbmFt
ZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAiYmxhbmsuaWNvIiwg
TlVMTCkpOworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKHBhdGhUb0Zhdmljb24uZ2V0KCks
ICZjb250ZW50cywgJmxlbmd0aCwgMCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVu
Z3RoKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvbm9mYXZpY29uIikpIHsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vRmF2aWNvbkhUTUwgPSAiPGh0bWw+PGhlYWQ+
PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgbm9GYXZpY29u
SFRNTCwgc3RybGVuKG5vRmF2aWNvbkhUTUwpKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb250
ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9keT50ZXN0PC9ib2R5PjwvaHRtbD4iKTsKLSAgICAg
ICAgbGVuZ3RoID0gc3RybGVuKGNvbnRlbnRzKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnRlbnRzSFRNTCA9ICI8aHRtbD48aGVhZD48bGluayByZWw9J2ljb24nIGhyZWY9Jy9pY29u
L2Zhdmljb24uaWNvJyB0eXBlPSdpbWFnZS94LWljbzsgY2hhcnNldD1iaW5hcnknPjwvaGVhZD48
Ym9keT50ZXN0PC9ib2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBjb250ZW50c0hU
TUwsIHN0cmxlbihjb250ZW50c0hUTUwpKTsKICAgICB9CiAKICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Ci0gICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRz
LCBsZW5ndGgpOwogICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHkpOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0Tm90SW5pdGlhbGl6ZWQoRmF2aWNvbkRh
dGFiYXNlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICAvLyBUcnkgdG8gcmV0cmll
dmUgYSB2YWxpZCBmYXZpY29uIGZyb20gYSBub3QgaW5pdGlhbGl6ZWQgZGF0YWJhc2UuCi0gICAg
dGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT5nZXRGYXZpY29uRm9yUGFnZVVSSUFu
ZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpOwog
ICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Zhdmljb24pOwogICAgIGdfYXNzZXJ0KHRlc3QtPm1fZXJy
b3IpOwogICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2Vycm9yLT5jb2RlLCA9PSwgV0VCS0lU
X0ZBVklDT05fREFUQUJBU0VfRVJST1JfTk9UX0lOSVRJQUxJWkVEKTsKQEAgLTE1NiwzOSArMTYx
LDUwIEBAIHN0YXRpYyB2b2lkIHRlc3RHZXRGYXZpY29uKEZhdmljb25EYXRhYmFzZVRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBsb2FkIHRoZSBwYWdlIGZp
cnN0IHRvIGVuc3VyZSB0aGUgaWNvbiBkYXRhIHdpbGwgYmUKICAgICAvLyBpbiB0aGUgZGF0YWJh
c2UgaW4gY2FzZSB0aGVyZSdzIGFuIGFzc29jaWF0ZWQgZmF2aWNvbi4KLSAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2Fp
dFVudGlsRmF2aWNvbkNoYW5nZWQoKTsKLSAgICBnX2Fzc2VydCh0ZXN0LT5tX2ljb25SZWFkeVNp
Z25hbFJlY2VpdmVkKTsKKyAgICBDU3RyaW5nIGZhdmljb25VUkkgPSBrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvaWNvbi9mYXZpY29uLmljbyIpOwogCiAgICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRy
aWV2aW5nIGEgdmFsaWQgZmF2aWNvbi4KLSAgICB0ZXN0LT5tX2ljb25SZWFkeVNpZ25hbFJlY2Vp
dmVkID0gZmFsc2U7Ci0gICAgdGVzdC0+Z2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxS
ZWFkeShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0ZXN0LT5nZXRG
YXZpY29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9mb28iKS5kYXRhKCkpOwogICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvbik7CisgICAgZ19h
c3NlcnRfY21wc3RyKHRlc3QtPm1fZmF2aWNvblVSSS5kYXRhKCksID09LCBmYXZpY29uVVJJLmRh
dGEoKSk7CiAgICAgZ19hc3NlcnQoIXRlc3QtPm1fZXJyb3IpOwotICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX2ljb25SZWFkeVNpZ25hbFJlY2VpdmVkKTsKIAogICAgIC8vIENoZWNrIHRoYXQgd2lkdGgg
YW5kIGhlaWdodCBtYXRjaCB0aG9zZSBmcm9tIGJsYW5rLmljbyAoMTZ4MTYgZmF2aWNvbikuCiAg
ICAgZ19hc3NlcnRfY21waW50KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHRlc3QtPm1f
ZmF2aWNvbiksID09LCAxNik7CiAgICAgZ19hc3NlcnRfY21waW50KGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2hlaWdodCh0ZXN0LT5tX2Zhdmljb24pLCA9PSwgMTYpOwogCisgICAgLy8gQ2hlY2sg
dGhhdCBhbm90aGVyIHBhZ2Ugd2l0aCB0aGUgc2FtZSBmYXZpY29uIHJldHVybiB0aGUgc2FtZSBp
Y29uLgorICAgIGNhaXJvX3N1cmZhY2VfdCogZmF2aWNvbiA9IGNhaXJvX3N1cmZhY2VfcmVmZXJl
bmNlKHRlc3QtPm1fZmF2aWNvbik7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvYmFyIikuZGF0YSgpKTsKKyAgICAvLyBJdCdzIGEgbmV3IHBhZ2UgaW4gdGhlIGRh
dGFiYXNlLCBzbyBmYXZpY29uIHdpbGwgY2hhbmdlIHR3aWNlLCBmaXJzdCB0byByZXNldCBpdAor
ICAgIC8vIGFuZCB0aGVuIHdoZW4gdGhlIGljb24gaXMgbG9hZGVkLgorICAgIHRlc3QtPndhaXRV
bnRpbEZhdmljb25DaGFuZ2VkKCk7CisgICAgdGVzdC0+d2FpdFVudGlsRmF2aWNvbkNoYW5nZWQo
KTsKKyAgICB0ZXN0LT5nZXRGYXZpY29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9iYXIiKS5kYXRhKCkpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1f
ZmF2aWNvbik7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPm1fZmF2aWNvblVSSS5kYXRhKCks
ID09LCBmYXZpY29uVVJJLmRhdGEoKSk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9mYXZpY29uID09
IGZhdmljb24pOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Vycm9yKTsKKyAgICBjYWlyb19zdXJm
YWNlX2Rlc3Ryb3koZmF2aWNvbik7CisKICAgICAvLyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcg
YW4gaW52YWxpZCBmYXZpY29uLgogICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL25vZmF2aWNvbiIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsRmF2aWNvbkNo
YW5nZWQoKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9pY29uUmVhZHlTaWduYWxSZWNlaXZlZCk7
CiAKLSAgICB0ZXN0LT5nZXRGYXZpY29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9ub2Zhdmljb24vIikuZGF0YSgpKTsKKyAgICB0ZXN0LT5nZXRG
YXZpY29uRm9yUGFnZVVSSUFuZFdhaXRVbnRpbFJlYWR5KGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9ub2Zhdmljb24iKS5kYXRhKCkpOwogICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2Zhdmljb24pOwog
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fZXJyb3IpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX2ljb25S
ZWFkeVNpZ25hbFJlY2VpdmVkKTsKIH0KIAogc3RhdGljIHZvaWQgdGVzdEdldEZhdmljb25VUkko
RmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICBXZWJLaXRG
YXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29u
X2RhdGFiYXNlKHRlc3QtPm1fd2ViQ29udGV4dCk7CiAKLSAgICBjb25zdCBjaGFyKiBiYXNlVVJJ
ID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBi
YXNlVVJJID0ga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKTsKICAgICBHT3du
UHRyPGNoYXI+IGljb25VUkkod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJp
KGRhdGFiYXNlLCBiYXNlVVJJKSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGljb25VUkkuZ2V0KCks
ID09LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZmF2aWNvbi5pY28iKS5kYXRhKCkpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihpY29uVVJJLmdldCgpLCA9PSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2ljb24vZmF2aWNvbi5pY28iKS5kYXRhKCkpOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0Zhdmljb24oRmF2aWNvbkRhdGFiYXNlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKQEAg
LTE5Niw5ICsyMTIsMTIgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGYXZpY29uKEZhdmljb25E
YXRhYmFzZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgY2Fpcm9fc3VyZmFjZV90KiBp
Y29uRnJvbVdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Zhdmljb24odGVzdC0+bV93ZWJW
aWV3KTsKICAgICBnX2Fzc2VydCghaWNvbkZyb21XZWJWaWV3KTsKIAotICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKTsKICAgICB0ZXN0LT53YWl0
VW50aWxGYXZpY29uQ2hhbmdlZCgpOwogICAgIGdfYXNzZXJ0KHRlc3QtPm1fZmF2aWNvbk5vdGlm
aWNhdGlvblJlY2VpdmVkKTsKKyAgICAvLyBUaGUgaWNvbiBpcyBrbm93biBhbmQgaGFzbid0IGNo
YW5nZWQgaW4gdGhlIGRhdGFiYXNlLCBzbyBub3RpZnk6OmZhdmljb24gaXMgZW1pdHRlZAorICAg
IC8vIGJ1dCBXZWJLaXRGYXZpY29uRGF0YWJhc2U6Omljb24tY2hhbmdlZCBpc24ndC4KKyAgICBn
X2Fzc2VydCh0ZXN0LT5tX2Zhdmljb25VUkkuaXNOdWxsKCkpOwogCiAgICAgaWNvbkZyb21XZWJW
aWV3ID0gd2Via2l0X3dlYl92aWV3X2dldF9mYXZpY29uKHRlc3QtPm1fd2ViVmlldyk7CiAgICAg
Z19hc3NlcnQoaWNvbkZyb21XZWJWaWV3KTsKQEAgLTIyMCw4ICsyMzksOCBAQCB2b2lkIGJlZm9y
ZUFsbCgpCiAgICAgRmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJh
c2UiLCAic2V0LWRpcmVjdG9yeSIsIHRlc3RTZXREaXJlY3RvcnkpOwogICAgIEZhdmljb25EYXRh
YmFzZVRlc3Q6OmFkZCgiV2ViS2l0RmF2aWNvbkRhdGFiYXNlIiwgImdldC1mYXZpY29uIiwgdGVz
dEdldEZhdmljb24pOwogICAgIEZhdmljb25EYXRhYmFzZVRlc3Q6OmFkZCgiV2ViS2l0RmF2aWNv
bkRhdGFiYXNlIiwgImdldC1mYXZpY29uLXVyaSIsIHRlc3RHZXRGYXZpY29uVVJJKTsKLSAgICBG
YXZpY29uRGF0YWJhc2VUZXN0OjphZGQoIldlYktpdEZhdmljb25EYXRhYmFzZSIsICJjbGVhci1k
YXRhYmFzZSIsIHRlc3RDbGVhckRhdGFiYXNlKTsKICAgICBGYXZpY29uRGF0YWJhc2VUZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAiZmF2aWNvbiIsIHRlc3RXZWJWaWV3RmF2aWNvbik7CisgICAg
RmF2aWNvbkRhdGFiYXNlVGVzdDo6YWRkKCJXZWJLaXRGYXZpY29uRGF0YWJhc2UiLCAiY2xlYXIt
ZGF0YWJhc2UiLCB0ZXN0Q2xlYXJEYXRhYmFzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdEZh
dmljb25EYXRhYmFzZUZpbmFsaXplZENhbGxiYWNrKGdwb2ludGVyLCBHT2JqZWN0KikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxp
c3QgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0
CmluZGV4IGU2YzhhMTAuLmVmZDllMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdApAQCAtOSw1ICs5LDYgQEAgT0JKRUNU
OlZPSUQKIFZPSUQ6T0JKRUNULFVJTlQKIFZPSUQ6T0JKRUNULE9CSkVDVAogVk9JRDpPQkpFQ1Qs
UE9JTlRFUgorVk9JRDpTVFJJTkcsU1RSSU5HCiBWT0lEOlVJTlQ2NAogCg==
</data>
<flag name="review"
          id="181802"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>