<?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>68085</bug_id>
          
          <creation_ts>2011-09-14 09:07:16 -0700</creation_ts>
          <short_desc>[GTK] Loader client implementation for WebKit2 GTK+ API</short_desc>
          <delta_ts>2011-09-28 09:23:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          <dependson>67990</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>nayankk</cc>
    
    <cc>pnormand</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>467055</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-14 09:07:16 -0700</bug_when>
    <thetext>WebKitWebView doesn&apos;t implement loader client.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467061</commentid>
    <comment_count>1</comment_count>
      <attachid>107339</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-14 09:15:39 -0700</bug_when>
    <thetext>Created attachment 107339
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469992</commentid>
    <comment_count>2</comment_count>
      <attachid>107985</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-20 05:14:08 -0700</bug_when>
    <thetext>Created attachment 107985
New patch

- It still uses the glib/gio async pattern, but it removes the load progress callback
- It adds load-progress-changed and load-status-changed signals to notify about the load progress. I&apos;m using signals instead of properties in this case, because progress and load-status only make sense while the view is loading, so they are passed as parameters to the signal callbacks, but they are not saved and there&apos;s no API to get them.
- It adds is-loading property.
- It adds all API docs missing in previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470037</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-20 06:56:49 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=107985) [details]
&gt; New patch
&gt; 
&gt; - It still uses the glib/gio async pattern, but it removes the load progress callback
&gt; - It adds load-progress-changed and load-status-changed signals to notify about the load progress. I&apos;m using signals instead of properties in this case, because progress and load-status only make sense while the view is loading, so they are passed as parameters to the signal callbacks, but they are not saved and there&apos;s no API to get them.
&gt; - It adds is-loading property.
&gt; - It adds all API docs missing in previous patch.

I think the progress signal is a very friendly API and I&apos;m not too bothered by the fact that network traffic may have ceased at any given time. I think it&apos;s sufficient to say something like &quot;If the value of progress is 1.00, all network traffic for initial load of the page has ceased. Progress does not track the status of any asynchronous loading that happens on the page.&quot;

I don&apos;t really like the idea of the is-loading property, because the page may still be &quot;loading&quot; in a sense -- constructing the DOM, loading XHR, etc even after progress is 1. Progress really only tracks network traffic of the initial load. I think the API should be clear about that distinction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470060</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-20 07:52:25 -0700</bug_when>
    <thetext>(In reply to comment #3)

&gt; I don&apos;t really like the idea of the is-loading property, because the page may still be &quot;loading&quot; in a sense -- constructing the DOM, loading XHR, etc even after progress is 1. Progress really only tracks network traffic of the initial load. I think the API should be clear about that distinction.

is-loading property has nothing to do with the progress, it&apos;s set to TRUE when a load operation starts and to FALSe en it finishes. It&apos;s useful to to start/stop a spinner, for example. I think epiphany has this property in its EphyWebView object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470165</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-20 10:44:15 -0700</bug_when>
    <thetext>Carlos and I talked recently about the badness of the WK1 API https://lists.webkit.org/pipermail/webkit-gtk/2010-May/000241.html. We&apos;ve decided to make each callback a separate signal. Carlos agreed to split this patch up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470722</commentid>
    <comment_count>6</comment_count>
      <attachid>108136</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-21 05:19:16 -0700</bug_when>
    <thetext>Created attachment 108136
Another approach using an interface

This is another approach using an interface and a default implementation for the interface that emit signals. It&apos;s undocumented for now, since we still don&apos;t know which approach we&apos;ll finally use. I&apos;m still not sure about the default implementation, though. It&apos;s not clear when to use the default impl or implement the interface. You can do the same with both, using the default impl you don&apos;t need to create a GObject, but I think it&apos;s the only benefict. So, I wonder whether we should provide only one way, an interface for the user to implement, or just emit the signals from the view object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470865</commentid>
    <comment_count>7</comment_count>
      <attachid>108136</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-21 09:24:19 -0700</bug_when>
    <thetext>Comment on attachment 108136
Another approach using an interface

I like this approach a lot. We don&apos;t have to expose an interface at first, if we are unsure about it. One suggestion I have for the patch is to make the loader client responsible for creating the WK2 page client. The callback methods can call the interface methods directly -- they will receive it as their private data. Ths will reduce the amount of null checks and the code in WebKitWebView.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471377</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-21 23:37:40 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 108136 [details])
&gt; I like this approach a lot. We don&apos;t have to expose an interface at first, if we are unsure about it. 

In that case I don&apos;t see the advantage of using this instead of adding the signals to WebKitWebView. If I had to choose I would probably leave the interfac and not the default impl.

&gt; One suggestion I have for the patch is to make the loader client responsible for creating the WK2 page client. The callback methods can call the interface methods directly -- they will receive it as their private data. Ths will reduce the amount of null checks and the code in WebKitWebView.cpp.

The view will need to do things in those callbacks too, for example update the uri, load error pages, update the title, etc. even if there isn&apos;t a loader client. That&apos;s why I create the loader client on demand. 

I&apos;m also not sure whether we should expose all the C API callbacks in the interface, some of them doesn&apos;t seem to have anything to do with loading like processDidCrash or didChangeBackForwardList. So, for now I would only add the callbacks to replace the old load-status.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471578</commentid>
    <comment_count>9</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-22 08:36:46 -0700</bug_when>
    <thetext>(In reply to comment #8)

&gt; The view will need to do things in those callbacks too, for example update the uri, load error pages, update the title, etc. even if there isn&apos;t a loader client. That&apos;s why I create the loader client on demand.

I think it makes sense to make private methods of the WebView available to the loader rather than making the entire entire loader interface available to the WebView. There will just be fewer methods and less boilerplate.

We could even make some of these tasks the responsibility of the loader. There&apos;s no reason the WebView should be the one keeping track of the URL. I can just ask the loader for it. 

&gt; I&apos;m also not sure whether we should expose all the C API callbacks in the interface, some of them doesn&apos;t seem to have anything to do with loading like processDidCrash or didChangeBackForwardList. So, for now I would only add the callbacks to replace the old load-status.

Let&apos;s keep them associated with the loader client unless they move to some other client in the future. It&apos;s confusing having the logic of the loader client handled by different classes, IMO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472108</commentid>
    <comment_count>10</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-09-23 01:37:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 108136 [details] [details])
&gt; &gt; I like this approach a lot. We don&apos;t have to expose an interface at first, if we are unsure about it. 
&gt; 
&gt; In that case I don&apos;t see the advantage of using this instead of adding the signals to WebKitWebView. If I had to choose I would probably leave the interfac and not the default impl.
&gt;

I also have some doubts about the approach, adding two options is usually a way to confuse developers, because they have to decide if we do not say in which cases you should use one or the other. If we can explain that then we are ok with it.

&gt; 
&gt; I&apos;m also not sure whether we should expose all the C API callbacks in the interface, some of them doesn&apos;t seem to have anything to do with loading like processDidCrash or didChangeBackForwardList. So, for now I would only add the callbacks to replace the old load-status.

I would say that if we think this should be located in other API callbacks maybe we should propose a change in the C API, and get information about why they added it here, because I agree with martin that it is confusing just to fix it for ourselves adding the logic in other class.

Hope it helps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472144</commentid>
    <comment_count>11</comment_count>
      <attachid>108456</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-23 03:31:54 -0700</bug_when>
    <thetext>Created attachment 108456
New patch

This patch is similar to the interface approach, but using an object, like the previous default client one, that has virtual methods for the signals. This way you can use the object directly connecting to the signals, or use your own loader client inheriting from this one, and overriding the signal handlers, the same way it could be done with the interface. All the code related to the loader client has been moved from webview to webloaderclient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472177</commentid>
    <comment_count>12</comment_count>
      <attachid>108456</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-09-23 05:28:33 -0700</bug_when>
    <thetext>Comment on attachment 108456
New patch

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

I like this new approach. It seems simple enough for the developer and extensible if the developer needs more.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp:294
&gt; +     * The necessary transport requirements are stabilished, and the

s/stabilished/established ? or simply, set?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:169
&gt; + * Returns: (trasnfer-none): the #WebKitWebLoaderClient of @web_view.

typo: trasnfer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473039</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-26 03:50:38 -0700</bug_when>
    <thetext>*** Bug 57835 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473063</commentid>
    <comment_count>14</comment_count>
      <attachid>107985</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-26 05:24:10 -0700</bug_when>
    <thetext>Comment on attachment 107985
New patch

I assume this one is obsolete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473065</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-26 05:32:32 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 107985 [details])
&gt; I assume this one is obsolete.

Not exactly, because it&apos;s a different approach, but it seems nobody liked the gio aync pattern, so I guess we&apos;ll go with the second approach, anyway :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473066</commentid>
    <comment_count>16</comment_count>
      <attachid>108456</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-26 05:32:59 -0700</bug_when>
    <thetext>Comment on attachment 108456
New patch

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp:272
&gt; +     * This signal is emitted when an error occurs when starting to
&gt; +     * load data for a page. By default, if the signal is not handled,
&gt; +     * a stock error page will be displayed. You need to handle the signal
&gt; +     * if you want to provide your own error page.

I assume you can handle this signal to avoid the currently loaded page to be replaced by the error page, for instance? Might be good mentioning it here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp:318
&gt; +     * This signal is emitted when a page load complete, that is, when all
&gt; +     * the resources are done loading.
&gt; +     *
&gt; +     * This signal is emitted after #WebKitWebLoaderClient::load-committed.

What about that idea of also emiting a signal when the load stops either by finishing properly or by failing, giving us a single signal to know that the load try has finished?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473068</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-26 05:42:35 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 108456 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108456&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp:272
&gt; &gt; +     * This signal is emitted when an error occurs when starting to
&gt; &gt; +     * load data for a page. By default, if the signal is not handled,
&gt; &gt; +     * a stock error page will be displayed. You need to handle the signal
&gt; &gt; +     * if you want to provide your own error page.
&gt; 
&gt; I assume you can handle this signal to avoid the currently loaded page to be replaced by the error page, for instance? Might be good mentioning it here.

I&apos;m not sure I understand what you mean, it says that you need to handle the signal to provide your own error page. Do you mean it can be used to not show any error page at all?

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp:318
&gt; &gt; +     * This signal is emitted when a page load complete, that is, when all
&gt; &gt; +     * the resources are done loading.
&gt; &gt; +     *
&gt; &gt; +     * This signal is emitted after #WebKitWebLoaderClient::load-committed.
&gt; 
&gt; What about that idea of also emiting a signal when the load stops either by finishing properly or by failing, giving us a single signal to know that the load try has finished?

Do you mean adding a new signal in addition to the current ones or replace finished and failed signals by a single finished signal?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473075</commentid>
    <comment_count>18</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-26 06:08:46 -0700</bug_when>
    <thetext>Sorry, I didn&apos;t realize they were two different options, but yeah, I guess this one looks simpler and better overall.

(In reply to comment #17)
&gt; &gt; I assume you can handle this signal to avoid the currently loaded page to be replaced by the error page, for instance? Might be good mentioning it here.
&gt; 
&gt; I&apos;m not sure I understand what you mean, it says that you need to handle the signal to provide your own error page. Do you mean it can be used to not show any error page at all?

Yes, I mean can it be used to just not touch the page that is being shown? Since this is a provisional failure, you haven&apos;t committed yet, so you can remain at the already loaded page, right?
 
&gt; Do you mean adding a new signal in addition to the current ones or replace finished and failed signals by a single finished signal?

Not sure what&apos;s the best way, but I think the idea of simplifying detecting that the load has finished one way or another would be welcome. Maybe we should finished at the end regardless of whether it failed or not, then you can query the failure and final state from the loader client, what do you think? Adding a new signal sounds OK too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473076</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-26 06:19:15 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Sorry, I didn&apos;t realize they were two different options, but yeah, I guess this one looks simpler and better overall.

No problem.

&gt; (In reply to comment #17)

&gt; &gt; I&apos;m not sure I understand what you mean, it says that you need to handle the signal to provide your own error page. Do you mean it can be used to not show any error page at all?
&gt; 
&gt; Yes, I mean can it be used to just not touch the page that is being shown? Since this is a provisional failure, you haven&apos;t committed yet, so you can remain at the already loaded page, right?

Yes, ou can just connect to the signal and simply return TRUE. Note that default behaviour is not implemented yet.
 
&gt; &gt; Do you mean adding a new signal in addition to the current ones or replace finished and failed signals by a single finished signal?
&gt; 
&gt; Not sure what&apos;s the best way, but I think the idea of simplifying detecting that the load has finished one way or another would be welcome. Maybe we should finished at the end regardless of whether it failed or not, then you can query the failure and final state from the loader client, what do you think? Adding a new signal sounds OK too.

I&apos;m not sure, I think Martin wanted to map all callbacks to signals to give more control to the user over the loading process. With the previous patch it was more natural to have a single finish point, because it&apos;s how gio async pattern works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473078</commentid>
    <comment_count>20</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-26 06:24:04 -0700</bug_when>
    <thetext>Oh, sure, I&apos;m not arguing against having all the signals, I think they should be there, just saying we could have a signal that is always emitted in the end regardless of what happened - would make it simpler for those who do not need the finer grained control.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473079</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-26 06:28:43 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Oh, sure, I&apos;m not arguing against having all the signals, I think they should be there, just saying we could have a signal that is always emitted in the end regardless of what happened - would make it simpler for those who do not need the finer grained control.

For that case I added is-loading property to web view, so that users who only want to start/stop a spinner or something like that can monitor the property and don&apos;t need to use the loader client at all. I didn&apos;t add it in the last patch just to make it smaller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474572</commentid>
    <comment_count>22</comment_count>
      <attachid>108456</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-28 00:41:17 -0700</bug_when>
    <thetext>Comment on attachment 108456
New patch

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

This looks good to me. I do not think we should add any sort of convenience API until we definitely understand how all these callbacks fit together. For example does a failure during provisional load also call didFailLoadWithErrorForFrame as well as didStartProvisionalLoadForFrame? Carlos, do you mind taking a peak at the loader  code in WebCore and writing the answer to that question somewhere in the gtkdoc?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp:59
&gt; +static void didStartProvisionalLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void* clientInfo)

userData is unused, so the parameter name should be commented out.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp:66
&gt; +    WebKitWebLoaderClient* client = WEBKIT_WEB_LOADER_CLIENT(clientInfo);
&gt; +    gboolean returnValue;
&gt; +    g_signal_emit(client, signals[PROVISIONAL_LOAD_STARTED], 0, &amp;returnValue);

g_signal_emit takes a gpointer. Is it really necessary to cast clientInfo here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474686</commentid>
    <comment_count>23</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-28 05:48:02 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 108456 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108456&amp;action=review
&gt; 
&gt; This looks good to me. I do not think we should add any sort of convenience API until we definitely understand how all these callbacks fit together. For example does a failure during provisional load also call didFailLoadWithErrorForFrame as well as didStartProvisionalLoadForFrame? Carlos, do you mind taking a peak at the loader  code in WebCore and writing the answer to that question somewhere in the gtkdoc?

Sure.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp:59
&gt; &gt; +static void didStartProvisionalLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void* clientInfo)
&gt; 
&gt; userData is unused, so the parameter name should be commented out.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp:66
&gt; &gt; +    WebKitWebLoaderClient* client = WEBKIT_WEB_LOADER_CLIENT(clientInfo);
&gt; &gt; +    gboolean returnValue;
&gt; &gt; +    g_signal_emit(client, signals[PROVISIONAL_LOAD_STARTED], 0, &amp;returnValue);
&gt; 
&gt; g_signal_emit takes a gpointer. Is it really necessary to cast clientInfo here?

Yes, clientInfo is a const void * while g_signal_emit() expects a void *. We can cast directly instead of using a local variable, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474687</commentid>
    <comment_count>24</comment_count>
      <attachid>109008</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-28 05:52:15 -0700</bug_when>
    <thetext>Created attachment 109008
Updated patch

Patch rebased to current git master and updated according to comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474745</commentid>
    <comment_count>25</comment_count>
      <attachid>109008</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-28 08:48:16 -0700</bug_when>
    <thetext>Comment on attachment 109008
Updated patch

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp:314
&gt; +     * #WebKitWebLoaderClient::provisional-load-failed or #WebKitWebLoaderClient::load-failed
&gt; +     * are emitted.

So I guess only one is fired?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474757</commentid>
    <comment_count>26</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-28 09:11:50 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 109008 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109008&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp:314
&gt; &gt; +     * #WebKitWebLoaderClient::provisional-load-failed or #WebKitWebLoaderClient::load-failed
&gt; &gt; +     * are emitted.
&gt; 
&gt; So I guess only one is fired?

Yes, privisional-failed, load-failed or load-finished, these 3 finish the load.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474764</commentid>
    <comment_count>27</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-28 09:23:35 -0700</bug_when>
    <thetext>Committed r96226: &lt;http://trac.webkit.org/changeset/96226&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107339</attachid>
            <date>2011-09-14 09:15:39 -0700</date>
            <delta_ts>2011-09-20 05:14:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-loader-client.diff</filename>
            <type>text/plain</type>
            <size>51173</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3NDljZDk4Li40YjM2NDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEg
QEAKKzIwMTEtMDktMTQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIExvYWRlciBjbGllbnQgaW1wbGVtZW50YXRpb24gZm9yIFdlYktp
dDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY4MDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wbGVtZW50IGxvYWRlciBjbGllbnQgdXNpbmcgYXN5bmNocm9ub3VzIEFQSSBmb2xsb3dp
bmcgdGhlCisgICAgICAgIGdsaWIvZ2lvIHBhdHRlcm4gaW5zdGVhZCBvZiB1c2luZyBzaWduYWxz
LiBNZXRob2RzIGdldF91cmkoKSwKKyAgICAgICAgZ29fYmFjaygpIGFuZCBnb19mb3J3YXJkKCkg
aGF2ZSBiZWVuIGNoYW5nZWQgdG8gdXNlIGEgcHJvZ3Jlc3MKKyAgICAgICAgY2FsbGJhY2ssIHNp
bWlsYXIgdG8gZ19maWxlX2NvcHlfYXN5bmMoKSwgdG8gbm90aWZ5IGFib3V0IHRoZQorICAgICAg
ICBsb2FkaW5nIHByb2dyZXNzIGFuZCBzdGF0dXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRFcnJvci5jcHA6CisgICAgICAgICh3ZWJraXRfbmV0d29ya19lcnJvcl9xdWFy
ayk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdFdl
YlZpZXdDb25zdHJ1Y3RlZCk6IEluaXRpYWxpemUgdGhlIGxvYWRlciBjbGllbnQuCisgICAgICAg
ICh3ZWJraXRXZWJWaWV3U2V0UHJvcGVydHkpOgorICAgICAgICAod2Via2l0V2ViVmlld0dldFBy
b3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19pbml0KToKKyAgICAgICAgKHdlYmtp
dF93ZWJfdmlld19jbGFzc19pbml0KTogQWRkIHVyaSBwcm9wZXJ0eS4KKyAgICAgICAgKGxvYWRE
YXRhRnJlZSk6CisgICAgICAgIChsb2FkRGF0YU5ldyk6IEhlbHBlciBzdHVjdHVyZSBmb3IgYXN5
bmMgbG9hZCBvcGVyYXRpb25zLgorICAgICAgICAod2Via2l0V2ViVmlld05vdGlmeUxvYWRTdGF0
dXMpOgorICAgICAgICAod2Via2l0V2ViVmlld05vdGlmeUxvYWRQcm9ncmVzcyk6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3TG9hZEZpbmlzaGVkKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdMb2Fk
RmFpbGVkKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdMb2FkU3RvcElkbGUpOgorICAgICAgICAo
d2Via2l0V2ViVmlld0xvYWRDYW5jZWxsZWQpOgorICAgICAgICAod2Via2l0V2ViVmlld0NhbmNl
bEN1cnJlbnRMb2FkKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdVcGRhdGVVcmkpOgorICAgICAg
ICAoZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6CisgICAgICAgIChkaWRSZWNlaXZl
U2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6CisgICAgICAgIChkaWRG
YWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUpOgorICAgICAgICAoZGlkQ29tbWl0
TG9hZEZvckZyYW1lKToKKyAgICAgICAgKGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKToK
KyAgICAgICAgKGRpZEZpbmlzaExvYWRGb3JGcmFtZSk6CisgICAgICAgIChkaWRGYWlsTG9hZFdp
dGhFcnJvckZvckZyYW1lKToKKyAgICAgICAgKGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dEZvckZyYW1lKToKKyAgICAgICAgKGRpZFN0YXJ0UHJvZ3Jlc3MpOgorICAgICAgICAoZGlkQ2hh
bmdlUHJvZ3Jlc3MpOgorICAgICAgICAoZGlkRmluaXNoUHJvZ3Jlc3MpOgorICAgICAgICAod2Vi
a2l0V2ViVmlld0xvYWRlckNsaWVudEluaXQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2xv
YWRfdXJpKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaV9maW5pc2gpOgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyk6CisgICAgICAgICh3ZWJraXRfd2Vi
X3ZpZXdfZ29fYmFjayk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ29fYmFja19maW5pc2gp
OgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQpOgorICAgICAgICAod2Via2l0
X3dlYl92aWV3X2dvX2ZvcndhcmRfZmluaXNoKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19n
ZXRfdXJpKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYzogQWRkZWQuCisg
ICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgICh3ZWJMb2FkaW5nRml4dHVyZVNldHVw
KToKKyAgICAgICAgKHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24pOgorICAgICAgICAoZ2V0VXJp
Rm9yUGF0aCk6CisgICAgICAgIChsb2FkRmluaXNoZWRDYWxsYmFjayk6CisgICAgICAgIChsb2Fk
UHJvZ3Jlc3NDYWxsYmFjayk6CisgICAgICAgICh0ZXN0TG9hZGluZ1N0YXR1cyk6CisgICAgICAg
IChsb2FkRXJyb3JQcm9ncmVzc0NhbGxiYWNrKToKKyAgICAgICAgKGxvYWRFcnJvckZpbmlzaGVk
Q2FsbGJhY2spOgorICAgICAgICAodGVzdExvYWRpbmdFcnJvcik6CisgICAgICAgIChsb2FkQ2Fu
Y2VsbGVkRmluaXNoZWRDYWxsYmFjayk6CisgICAgICAgIChjYW5jZWxUaHJlYWQpOgorICAgICAg
ICAobG9hZENhbmNlbGxlZFByb2dyZXNzQ2FsbGJhY2spOgorICAgICAgICAodGVzdExvYWRpbmdD
YW5jZWxsZWQpOgorICAgICAgICAodGVzdExvYWRpbmdDYW5jZWxsZWRUaHJlYWQpOgorICAgICAg
ICAobG9hZEdvQmFja1Byb2dyZXNzQ2FsbGJhY2spOgorICAgICAgICAobG9hZEdvQmFja0Zpbmlz
aGVkQ2FsbGJhY2spOgorICAgICAgICAobG9hZFdlbnRCYWNrUHJvZ3Jlc3NDYWxsYmFjayk6Cisg
ICAgICAgIChsb2FkV2VudEJhY2tGaW5pc2hlZENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RMb2Fk
aW5nR29CYWNrKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L3dlYmtpdDJndGsuaDogQWRkIFdlYktpdEVycm9yLmguCisKIDIwMTEtMDktMTEgIE1hcmsgUm93
ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vOTg3ODI2OD4g
UHJlc3NpbmcgY2FwcyBsb2NrIGFmdGVyIGNsb3NpbmcgYSBzaG93TW9kYWxEaWFsb2cgd2luZG93
IHJlc3VsdHMgaW4gV2ViUHJvY2VzcyBleGl0aW5nCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWVkNDg2Yy4uNGRmYTcyYiAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisy
MDExLTA5LTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXSBMb2FkZXIgY2xpZW50IGltcGxlbWVudGF0aW9uIGZvciBXZWJLaXQyIEdU
SysgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODA4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
YXB0IHRvIFdlYktpdDIgR1RLKyBBUEkgY2hhbmdlcy4KKworICAgICAgICAqIEd0a0xhdW5jaGVy
L21haW4uYzoKKyAgICAgICAgKGFjdGl2YXRlVXJpRW50cnlDYik6CisgICAgICAgIChnb0JhY2tD
Yik6CisgICAgICAgIChnb0ZvcndhcmRDYik6CisgICAgICAgIChtYWluKToKKwogMjAxMS0wOS0x
MiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gUmVvcmdhbml6ZSBoZWFkZXIgZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggNTU3
MDRiMy4uOTc0MWQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0K
KysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTY4LDYgKzY4LDcgQEAgbGli
d2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9N
SU5PUl9WRVJTSU9OQF9sYV9IRUEKIAogbGlid2Via2l0Mmd0a2luY2x1ZGVkaXIgPSAkKGxpYndl
YmtpdGd0a2luY2x1ZGVkaXIpL3dlYmtpdDIKIGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMg
PSBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBcCiAJJChXZWJLaXQy
KS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggXAogCSQoV2ViS2l0MikvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuaApAQCAtNDQ4LDYgKzQ0OSw4IEBAIGxpYndl
YmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlO
T1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9jcHAvV0tS
ZXRhaW5QdHIuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVu
dEltcGwuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudElt
cGwuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5o
IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAgXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBcCkBAIC05
NzksMTAgKzk4MiwxMiBAQCBDTEVBTkZJTEVTICs9IFwKICMgVW5pdCB0ZXN0cwogVEVTVF9QUk9H
UyArPSBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIvdGVzdHdlYmNvbnRleHQgXAotCVBy
b2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQyL3Rlc3R3ZWJ2aWV3CisJUHJvZ3JhbXMvdW5pdHRlc3Rz
L3dlYmtpdDIvdGVzdHdlYnZpZXcgXAorCVByb2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQyL3Rlc3Rs
b2FkaW5nCiAKIG5vaW5zdF9QUk9HUkFNUyArPSAkKFRFU1RfUFJPR1MpCiB3ZWJraXQyX3Rlc3Rz
X2NmbGFncyA9IFwKKwktRFdFQktJVF9FWEVDX1BBVEg9XCIke3NoZWxsIHB3ZH0vJCh0b3BfYnVp
bGRkaXIpL1Byb2dyYW1zXCIgXAogCS1JJChzcmNkaXIpL1NvdXJjZSBcCiAJLUkkKHNyY2Rpcikv
U291cmNlL1dlYktpdDIgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvaW5jbHVkZSBcCkBAIC0xMDE1LDYgKzEwMjAsMTEgQEAgUHJvZ3JhbXNfdW5pdHRlc3RzX3dl
YmtpdDJfdGVzdHdlYnZpZXdfQ0ZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFncykKIFByb2dy
YW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3R3ZWJ2aWV3X0xEQUREID0gJCh3ZWJraXQyX3Rlc3Rz
X2xkYWRkKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdlYnZpZXdfTERGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQogCitQcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90
ZXN0bG9hZGluZ19TT1VSQ0VTID0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvdGVzdGxvYWRpbmcuYworUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdf
Q0ZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX3VuaXR0ZXN0c193ZWJr
aXQyX3Rlc3Rsb2FkaW5nX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNf
dW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19s
ZGZsYWdzKQorCiAjIFdlYktpdFdlYlByb2Nlc3MKIGxpYmV4ZWNfUFJPR1JBTVMgKz0gXAogCVBy
b2dyYW1zL1dlYktpdFdlYlByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEVycm9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hOTNkZDAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RXJyb3IuY3BwCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggTHVjYSBCcnVubyA8bGV0aGFsbWFuODhAZ21haWwuY29tPgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RXJyb3IuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvRXJy
b3JzR3RrLmg+CisKK0dRdWFyayB3ZWJraXRfbmV0d29ya19lcnJvcl9xdWFyayh2b2lkKQorewor
ICAgIHJldHVybiBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyhXZWJDb3JlOjplcnJvckRvbWFp
bk5ldHdvcmspOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRFcnJvci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjY0OWE0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RXJyb3IuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEx1Y2Eg
QnJ1bm8gPGxldGhhbG1hbjg4QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRFcnJvcl9oCisjZGVm
aW5lIFdlYktpdEVycm9yX2gKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxXZWJLaXQy
L1dLQmFzZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX05FVFdPUktfRVJS
T1IgICAgICAgIHdlYmtpdF9uZXR3b3JrX2Vycm9yX3F1YXJrICgpCisKK3R5cGVkZWYgZW51bSB7
CisgICAgV0VCS0lUX05FVFdPUktfRVJST1JfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAzOTksCisgICAgV0VCS0lUX05FVFdPUktfRVJST1JfVFJBTlNQT1JUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAzMDAsCisgICAgV0VCS0lUX05FVFdPUktfRVJST1Jf
VU5LTk9XTl9QUk9UT0NPTCAgICAgICAgICAgICAgICAgICAgICAgPSAzMDEsCisgICAgV0VCS0lU
X05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAz
MDIsCisgICAgV0VCS0lUX05FVFdPUktfRVJST1JfRklMRV9ET0VTX05PVF9FWElTVCAgICAgICAg
ICAgICAgICAgICAgPSAzMDMsCit9IFdlYktpdE5ldHdvcmtFcnJvcjsKKworV0tfRVhQT1JUIEdR
dWFyaword2Via2l0X25ldHdvcmtfZXJyb3JfcXVhcmsgKHZvaWQpOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlldy5jcHAKaW5kZXggODgxMDc5OS4uOTdhM2M1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTI2LDYgKzI2LDgg
QEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5o
PgogI2luY2x1ZGUgPFdlYktpdDIvV0tVUkwuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0zMywyOSArMzUsMzkgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBlbnVtIHsKICAgICBQUk9QXzAsCiAKLSAgICBQUk9QX1dF
Ql9DT05URVhUCisgICAgUFJPUF9XRUJfQ09OVEVYVCwKKyAgICBQUk9QX1VSSQogfTsKIAogc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgV2ViS2l0V2ViQ29udGV4dCogY29udGV4
dDsKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gbG9hZFJlc3VsdDsKKyAgICBDU3Ry
aW5nIHVyaTsKIH07CiAKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkZXJDbGllbnRJbml0
KFdlYktpdFdlYlZpZXcqKTsKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkQ2FuY2VsbGVk
KEdDYW5jZWxsYWJsZSosIFdlYktpdFdlYlZpZXcqKTsKKwogR19ERUZJTkVfVFlQRShXZWJLaXRX
ZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXcsIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0UpCiAKIHN0
YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiB7CiAg
ICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhvYmplY3QpOworICAg
IFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKworICAgIHdlYmtp
dFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwg
d2Via2l0V2ViQ29udGV4dEdldENvbnRleHQocHJpdi0+Y29udGV4dCksIDApOwogCi0gICAgd2Vi
a2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcp
LCB3ZWJraXRXZWJDb250ZXh0R2V0Q29udGV4dCh3ZWJWaWV3LT5wcml2LT5jb250ZXh0KSwgMCk7
CisgICAgd2Via2l0V2ViVmlld0xvYWRlckNsaWVudEluaXQod2ViVmlldyk7CiB9CiAKIHN0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQogewogICAg
IFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KTsKKyAgICBX
ZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAKICAgICBzd2l0Y2gg
KHByb3BJZCkgewogICAgIGNhc2UgUFJPUF9XRUJfQ09OVEVYVDoKLSAgICAgICAgd2ViVmlldy0+
cHJpdi0+Y29udGV4dCA9IFdFQktJVF9XRUJfQ09OVEVYVChnX3ZhbHVlX2dldF9vYmplY3QodmFs
dWUpKTsKKyAgICAgICAgcHJpdi0+Y29udGV4dCA9IFdFQktJVF9XRUJfQ09OVEVYVChnX3ZhbHVl
X2dldF9vYmplY3QodmFsdWUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwYXJh
bVNwZWMpOwpAQCAtNjUsMTAgKzc3LDE0IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdTZXRQ
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlCiBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKIHsKICAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKG9iamVjdCk7CisgICAgV2ViS2l0
V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwogCiAgICAgc3dpdGNoIChwcm9w
SWQpIHsKICAgICBjYXNlIFBST1BfV0VCX0NPTlRFWFQ6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9v
YmplY3QodmFsdWUsIHdlYlZpZXctPnByaXYtPmNvbnRleHQpOworICAgICAgICBnX3ZhbHVlX3Rh
a2Vfb2JqZWN0KHZhbHVlLCBwcml2LT5jb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1VSSToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2LT51cmku
ZGF0YSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOwpAQCAt
NzcsNyArOTMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdQogCiBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewotICAgIHdlYlZpZXct
PnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUod2ViVmlldywgV0VCS0lUX1RZUEVf
V0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdQcml2YXRlKTsKKyAgICB3ZWJWaWV3LT5wcml2ID0gbmV3
IFdlYktpdFdlYlZpZXdQcml2YXRlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmll
d19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQpAQCAtODgsOCAr
MTA0LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2Vi
Vmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgZ09iamVjdENsYXNzLT5zZXRfcHJvcGVydHkg
PSB3ZWJraXRXZWJWaWV3U2V0UHJvcGVydHk7CiAgICAgZ09iamVjdENsYXNzLT5nZXRfcHJvcGVy
dHkgPSB3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHk7CiAKLSAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUod2ViVmlld0NsYXNzLCBzaXplb2YoV2ViS2l0V2ViVmlld1ByaXZhdGUpKTsKLQogICAg
IC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6d2ViLWNvbnRleHQ6CiAgICAgICoKQEAgLTEwMSw2
ICsxMTUsMjgxIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktp
dFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHdlYiBjb250ZXh0IGZvciB0aGUgdmll
dyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9UWVBFX1dFQl9DT05URVhULAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oR19Q
QVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworICAgIC8qKgorICAg
ICAqIFdlYktpdFdlYlZpZXc6dXJpOgorICAgICAqCisgICAgICogUmV0dXJuczogdGhlIGN1cnJl
bnQgVVJJIG9mIHRoZSBjb250ZW50cyBkaXNwbGF5ZWQgYnkgdGhlIHZpZXcuCisgICAgICoKKyAg
ICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfVVJJLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygidXJpIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVS
SSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJDdXJyZW50IFVSSSBvZiB0aGUgY29udGVudHMgZGlzcGxheWVkIGJ5IHRoZSB2aWV3IiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR19QQVJBTV9SRUFEQUJMRSkpOworfQorCisvLyBMb2FkZXIgY2xpZW50LgordHlwZWRlZiBz
dHJ1Y3QgeworICAgIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGU7CisgICAgZ3Vsb25nIGNhbmNl
bGxlZElkOworICAgIFdlYktpdExvYWRQcm9ncmVzc0NhbGxiYWNrIHByb2dyZXNzQ2FsbGJhY2s7
CisgICAgZ3BvaW50ZXIgcHJvZ3Jlc3NDYWxsYmFja0RhdGE7CisgICAgV2ViS2l0TG9hZFN0YXR1
cyBzdGF0dXM7Cit9IExvYWREYXRhOworCitzdGF0aWMgdm9pZCBsb2FkRGF0YUZyZWUoTG9hZERh
dGEqIGxvYWREYXRhKQoreworICAgIGlmIChHX1VOTElLRUxZKCFsb2FkRGF0YSkpCisgICAgICAg
IHJldHVybjsKKworICAgIGdfY2FuY2VsbGFibGVfZGlzY29ubmVjdChsb2FkRGF0YS0+Y2FuY2Vs
bGFibGUsIGxvYWREYXRhLT5jYW5jZWxsZWRJZCk7CisgICAgZ19vYmplY3RfdW5yZWYobG9hZERh
dGEtPmNhbmNlbGxhYmxlKTsKKyAgICBnX3NsaWNlX2ZyZWUoTG9hZERhdGEsIGxvYWREYXRhKTsK
K30KKworc3RhdGljIExvYWREYXRhKiBsb2FkRGF0YU5ldyhXZWJLaXRMb2FkUHJvZ3Jlc3NDYWxs
YmFjayBwcm9ncmVzc0NhbGxiYWNrLCBncG9pbnRlciBwcm9ncmVzc0NhbGxiYWNrRGF0YSwgR0Nh
bmNlbGxhYmxlICpjYW5jZWxsYWJsZSwgZ3BvaW50ZXIgY2FuY2VsbGVkQ2FsbGJhY2tEYXRhKQor
eworICAgIExvYWREYXRhKiBsb2FkRGF0YSA9IGdfc2xpY2VfbmV3MChMb2FkRGF0YSk7CisKKyAg
ICBsb2FkRGF0YS0+cHJvZ3Jlc3NDYWxsYmFjayA9IHByb2dyZXNzQ2FsbGJhY2s7CisgICAgbG9h
ZERhdGEtPnByb2dyZXNzQ2FsbGJhY2tEYXRhID0gcHJvZ3Jlc3NDYWxsYmFja0RhdGE7CisgICAg
bG9hZERhdGEtPmNhbmNlbGxhYmxlID0gY2FuY2VsbGFibGUgPyBzdGF0aWNfY2FzdDxHQ2FuY2Vs
bGFibGUqPihnX29iamVjdF9yZWYoY2FuY2VsbGFibGUpKSA6IGdfY2FuY2VsbGFibGVfbmV3KCk7
CisgICAgbG9hZERhdGEtPmNhbmNlbGxlZElkID0gZ19jYW5jZWxsYWJsZV9jb25uZWN0KGxvYWRE
YXRhLT5jYW5jZWxsYWJsZSwgR19DQUxMQkFDSyh3ZWJraXRXZWJWaWV3TG9hZENhbmNlbGxlZCks
IGNhbmNlbGxlZENhbGxiYWNrRGF0YSwgMCk7CisKKyAgICByZXR1cm4gbG9hZERhdGE7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdOb3RpZnlMb2FkU3RhdHVzKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzLCBnZG91YmxlIHByb2dyZXNzKQorewor
ICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAgICBpZiAo
IXByaXYtPmxvYWRSZXN1bHQpCisgICAgICAgIHJldHVybjsKKworICAgIExvYWREYXRhKiBsb2Fk
RGF0YSA9IHN0YXRpY19jYXN0PExvYWREYXRhKj4oZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9v
cF9yZXNfZ3BvaW50ZXIocHJpdi0+bG9hZFJlc3VsdC5nZXQoKSkpOworICAgIGlmIChnX2NhbmNl
bGxhYmxlX2lzX2NhbmNlbGxlZChsb2FkRGF0YS0+Y2FuY2VsbGFibGUpKQorICAgICAgICByZXR1
cm47CisKKyAgICBsb2FkRGF0YS0+c3RhdHVzID0gc3RhdHVzOworICAgIGlmIChsb2FkRGF0YS0+
cHJvZ3Jlc3NDYWxsYmFjaykKKyAgICAgICAgbG9hZERhdGEtPnByb2dyZXNzQ2FsbGJhY2soc3Rh
dHVzLCBwcm9ncmVzcywgbG9hZERhdGEtPnByb2dyZXNzQ2FsbGJhY2tEYXRhKTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0V2ViVmlld05vdGlmeUxvYWRQcm9ncmVzcyhXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBnZG91YmxlIHByb2dyZXNzKQoreworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBw
cml2ID0gd2ViVmlldy0+cHJpdjsKKyAgICBpZiAoIXByaXYtPmxvYWRSZXN1bHQpCisgICAgICAg
IHJldHVybjsKKworICAgIExvYWREYXRhKiBsb2FkRGF0YSA9IHN0YXRpY19jYXN0PExvYWREYXRh
Kj4oZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIocHJpdi0+bG9hZFJl
c3VsdC5nZXQoKSkpOworICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChsb2FkRGF0
YS0+Y2FuY2VsbGFibGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9hZERhdGEtPnBy
b2dyZXNzQ2FsbGJhY2spCisgICAgICAgIGxvYWREYXRhLT5wcm9ncmVzc0NhbGxiYWNrKGxvYWRE
YXRhLT5zdGF0dXMsIHByb2dyZXNzLCBsb2FkRGF0YS0+cHJvZ3Jlc3NDYWxsYmFja0RhdGEpOwor
fQorCisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkRmluaXNoZWQoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKK3sKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXct
PnByaXY7CisgICAgaWYgKCFwcml2LT5sb2FkUmVzdWx0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUocHJpdi0+bG9hZFJlc3VsdC5nZXQoKSk7
CisgICAgcHJpdi0+bG9hZFJlc3VsdCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdMb2FkRmFpbGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdLRXJyb3JSZWYgZXJyb3IpCit7
CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworICAgIGlm
ICghcHJpdi0+bG9hZFJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgcmVzb3VyY2VFcnJvciA9IHRvSW1wbChlcnJvciktPnBsYXRmb3JtRXJyb3IoKTsK
KyAgICBHRXJyb3IqIHdlYkVycm9yID0gZ19lcnJvcl9uZXdfbGl0ZXJhbChnX3F1YXJrX2Zyb21f
c3RyaW5nKHJlc291cmNlRXJyb3IuZG9tYWluKCkudXRmOCgpLmRhdGEoKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VFcnJvci5lcnJvckNvZGUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUVy
cm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X3Rha2VfZXJyb3IocHJpdi0+bG9hZFJlc3VsdC5nZXQoKSwgd2ViRXJyb3Ip
OworICAgIHdlYmtpdFdlYlZpZXdMb2FkRmluaXNoZWQod2ViVmlldyk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRXZWJWaWV3TG9hZFN0b3BJZGxlKGdwb2ludGVyIHVzZXJEYXRhKQorewor
ICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRf
V0VCX1ZJRVdfQkFTRSh1c2VyRGF0YSkpOworICAgIFdLUGFnZVN0b3BMb2FkaW5nKHRvQVBJKHBh
Z2UpKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmll
d0xvYWRDYW5jZWxsZWQoR0NhbmNlbGxhYmxlKiwgV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sK
KyAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBvdGhlciB0aHJlYWRzLCBzbyBzdG9wIGxv
YWQgaW4gbWFpbiB0aHJlYWQuCisgICAgZ19pZGxlX2FkZCh3ZWJraXRXZWJWaWV3TG9hZFN0b3BJ
ZGxlLCB3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NhbmNlbEN1cnJl
bnRMb2FkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZh
dGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworICAgIGlmICghcHJpdi0+bG9hZFJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9lcnJvcihwcml2
LT5sb2FkUmVzdWx0LmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCwgIiVz
IiwgIk9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkIik7CisgICAgd2Via2l0V2ViVmlld0xvYWRGaW5p
c2hlZCh3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1VwZGF0ZVVyaShX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXS1VSTFJlZiB1cmwpCit7CisgICAgaWYgKCF1cmwpCisg
ICAgICAgIHJldHVybjsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmll
dy0+cHJpdjsKKyAgICBjb25zdCBDU3RyaW5nJiB1cmxTdHJpbmcgPSB0b0ltcGwodXJsKS0+c3Ry
aW5nKCkudXRmOCgpOworICAgIGlmICh1cmxTdHJpbmcgPT0gcHJpdi0+dXJpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBwcml2LT51cmkgPSB1cmxTdHJpbmc7CisgICAgZ19vYmplY3Rfbm90aWZ5
KEdfT0JKRUNUKHdlYlZpZXcpLCAidXJpIik7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdL
VHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBpZiAoIVdL
RnJhbWVJc01haW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyk7CisgICAgV0tVUkxS
ZWYgdXJsID0gV0tGcmFtZUNvcHlQcm92aXNpb25hbFVSTChmcmFtZSk7CisgICAgd2Via2l0V2Vi
Vmlld1VwZGF0ZVVyaSh3ZWJWaWV3LCB1cmwpOworICAgIGlmICh1cmwpCisgICAgICAgIFdLUmVs
ZWFzZSh1cmwpOworCisgICAgd2Via2l0V2ViVmlld05vdGlmeUxvYWRTdGF0dXMod2ViVmlldywg
V0VCS0lUX0xPQURfUFJPVklTSU9OQUwsIFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKHBhZ2Up
KTsKK30KKworc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJl
ZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBpZiAoIVdLRnJhbWVJ
c01haW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyk7CisgICAgV0tVUkxSZWYgdXJs
ID0gV0tGcmFtZUNvcHlQcm92aXNpb25hbFVSTChmcmFtZSk7CisgICAgd2Via2l0V2ViVmlld1Vw
ZGF0ZVVyaSh3ZWJWaWV3LCB1cmwpOworICAgIGlmICh1cmwpCisgICAgICAgIFdLUmVsZWFzZSh1
cmwpOworCisgICAgd2Via2l0V2ViVmlld05vdGlmeUxvYWRTdGF0dXMod2ViVmlldywgV0VCS0lU
X0xPQURfUkVESVJFQ1RfRk9SX1BST1ZJU0lPTkFMLCBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9ncmVz
cyhwYWdlKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJy
b3JGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tFcnJvclJlZiBl
cnJvciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKTsKKyAg
ICBXS1VSTFJlZiB1cmwgPSBXS0ZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKGZyYW1lKTsKKyAgICB3
ZWJraXRXZWJWaWV3VXBkYXRlVXJpKHdlYlZpZXcsIHVybCk7CisgICAgaWYgKHVybCkKKyAgICAg
ICAgV0tSZWxlYXNlKHVybCk7CisKKyAgICB3ZWJraXRXZWJWaWV3TG9hZEZhaWxlZCh3ZWJWaWV3
LCBlcnJvcik7CisKK30KKworc3RhdGljIHZvaWQgZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdLUGFn
ZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKGNsaWVudEluZm8pOworICAgIFdLVVJMUmVmIHVybCA9IFdLRnJhbWVDb3B5VVJMKGZy
YW1lKTsKKyAgICB3ZWJraXRXZWJWaWV3VXBkYXRlVXJpKHdlYlZpZXcsIHVybCk7CisgICAgaWYg
KHVybCkKKyAgICAgICAgV0tSZWxlYXNlKHVybCk7CisKKyAgICB3ZWJraXRXZWJWaWV3Tm90aWZ5
TG9hZFN0YXR1cyh3ZWJWaWV3LCBXRUJLSVRfTE9BRF9DT01NSVRURUQsIFdLUGFnZUdldEVzdGlt
YXRlZFByb2dyZXNzKHBhZ2UpKTsKK30KKworc3RhdGljIHZvaWQgZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1
c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBpZiAoIVdLRnJhbWVJc01h
aW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQgZGlkRmlu
aXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVS
ZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgaWYgKCFXS0ZyYW1l
SXNNYWluRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pOworICAgIHdlYmtpdFdlYlZp
ZXdOb3RpZnlMb2FkU3RhdHVzKHdlYlZpZXcsIFdFQktJVF9MT0FEX0ZJTklTSEVELCBXS1BhZ2VH
ZXRFc3RpbWF0ZWRQcm9ncmVzcyhwYWdlKSk7CisgICAgd2Via2l0V2ViVmlld0xvYWRGaW5pc2hl
ZCh3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFt
ZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tFcnJvclJlZiBlcnJvciwgV0tU
eXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGlmICghV0tG
cmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2Via2l0V2Vi
Vmlld0xvYWRGYWlsZWQoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCBlcnJvcik7Cit9CisK
K3N0YXRpYyB2b2lkIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKFdLUGFn
ZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQor
ICAgICAgICByZXR1cm47CisKKyAgICB3ZWJraXRXZWJWaWV3Tm90aWZ5TG9hZFN0YXR1cyhXRUJL
SVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIFdFQktJVF9MT0FEX0ZJUlNUX1ZJU1VBTExZX05PTl9F
TVBUWV9MQVlPVVQsIFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKHBhZ2UpKTsKK30KKworc3Rh
dGljIHZvaWQgZGlkU3RhcnRQcm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKK3sKKyAgICB3ZWJraXRXZWJWaWV3Tm90aWZ5TG9hZFN0YXR1cyhXRUJLSVRfV0VC
X1ZJRVcoY2xpZW50SW5mbyksIFdFQktJVF9MT0FEX1NUQVJURUQsIDAuKTsKK30KKworc3RhdGlj
IHZvaWQgZGlkQ2hhbmdlUHJvZ3Jlc3MoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisgICAgd2Via2l0V2ViVmlld05vdGlmeUxvYWRQcm9ncmVzcyhXRUJLSVRfV0VC
X1ZJRVcoY2xpZW50SW5mbyksIFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKHBhZ2UpKTsKK30K
Kworc3RhdGljIHZvaWQgZGlkRmluaXNoUHJvZ3Jlc3MoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgd2Via2l0V2ViVmlld05vdGlmeUxvYWRQcm9ncmVzcyhX
RUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIDEuKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
V2ViVmlld0xvYWRlckNsaWVudEluaXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBX
S1BhZ2VMb2FkZXJDbGllbnQgbG9hZENsaWVudCA9IHsKKyAgICAgICAga1dLUGFnZUxvYWRlckNs
aWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICB3ZWJWaWV3LCAgLy8gY2xpZW50SW5mbworICAg
ICAgICBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lLAorICAgICAgICBkaWRSZWNlaXZl
U2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSwKKyAgICAgICAgZGlkRmFp
bFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lLAorICAgICAgICBkaWRDb21taXRMb2Fk
Rm9yRnJhbWUsCisgICAgICAgIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lLAorICAgICAg
ICBkaWRGaW5pc2hMb2FkRm9yRnJhbWUsCisgICAgICAgIGRpZEZhaWxMb2FkV2l0aEVycm9yRm9y
RnJhbWUsCisgICAgICAgIDAsICAgICAgIC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JG
cmFtZQorICAgICAgICAwLCAgICAgICAvLyBkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZQorICAgICAg
ICAwLCAgICAgICAvLyBkaWRGaXJzdExheW91dEZvckZyYW1lCisgICAgICAgIGRpZEZpcnN0Vmlz
dWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lLAorICAgICAgICAwLCAgICAgICAvLyBkaWRSZW1v
dmVGcmFtZUZyb21IaWVyYXJjaHkKKyAgICAgICAgMCwgICAgICAgLy8gZGlkRGlzcGxheUluc2Vj
dXJlQ29udGVudEZvckZyYW1lCisgICAgICAgIDAsICAgICAgIC8vIGRpZFJ1bkluc2VjdXJlQ29u
dGVudEZvckZyYW1lCisgICAgICAgIDAsICAgICAgIC8vIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2VJbkZyYW1lCisgICAgICAgIDAsICAgICAgIC8vIGRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZUluRnJhbWUKKyAgICAgICAgZGlkU3RhcnRQcm9ncmVzcywKKyAg
ICAgICAgZGlkQ2hhbmdlUHJvZ3Jlc3MsCisgICAgICAgIGRpZEZpbmlzaFByb2dyZXNzLAorICAg
ICAgICAwLCAgICAgICAvLyBkaWRCZWNvbWVVbnJlc3BvbnNpdmUKKyAgICAgICAgMCwgICAgICAg
Ly8gZGlkQmVjb21lUmVzcG9uc2l2ZQorICAgICAgICAwLCAgICAgICAvLyBwcm9jZXNzRGlkQ3Jh
c2gKKyAgICAgICAgMCwgICAgICAgLy8gZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0CisgICAgICAg
IDAsICAgICAgIC8vIHNob3VsZEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtCisgICAgICAgIDAgICAg
ICAgIC8vIGRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4KKyAgICB9OworICAgIFdlYlBhZ2VQcm94
eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3
ZWJWaWV3KSk7CisgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudCh0b0FQSShwYWdlKSwgJmxv
YWRDbGllbnQpOwogfQogCiAvLyBQdWJsaWMgQVBJLgpAQCAtMTQ4LDI3ICs0MzcsMTEyIEBAIFdl
YktpdFdlYkNvbnRleHQqIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChXZWJLaXRXZWJWaWV3
ICp3ZWJWaWV3KQogICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5jb250ZXh0OwogfQogCi12b2lk
IHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBn
Y2hhciogdXJpKQordm9pZCB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgY29uc3QgZ2NoYXIqIHVyaSwgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExvYWRQcm9ncmVzc0NhbGxiYWNrIHBy
b2dyZXNzQ2FsbGJhY2ssIGdwb2ludGVyIHByb2dyZXNzQ2FsbGJhY2tEYXRhLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50
ZXIgdXNlckRhdGEpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVco
d2ViVmlldykpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAorICAgIFdlYktpdFdlYlZp
ZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAgICBMb2FkRGF0YSogbG9hZERhdGEg
PSBsb2FkRGF0YU5ldyhwcm9ncmVzc0NhbGxiYWNrLCBwcm9ncmVzc0NhbGxiYWNrRGF0YSwgY2Fu
Y2VsbGFibGUsIHdlYlZpZXcpOworICAgIHdlYmtpdFdlYlZpZXdDYW5jZWxDdXJyZW50TG9hZCh3
ZWJWaWV3KTsKKyAgICBwcml2LT5sb2FkUmVzdWx0ID0gYWRvcHRHUmVmKGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9uZXcoR19PQkpFQ1Qod2ViVmlldyksIGNhbGxiYWNrLCB1c2VyRGF0YSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxncG9pbnRlcj4od2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKSkpOworICAg
IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKHByaXYtPmxvYWRSZXN1
bHQuZ2V0KCksIGxvYWREYXRhLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihsb2Fk
RGF0YUZyZWUpKTsKKwogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNl
R2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSk7CiAgICAgV0tQYWdlTG9hZFVS
TCh0b0FQSShwYWdlKSwgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcodXJpKSk7CiB9CiAKLXZv
aWQgd2Via2l0X3dlYl92aWV3X2dvX2JhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldykKK2dib29s
ZWFuIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaV9maW5pc2goV2ViS2l0V2ViVmlldyogd2ViVmll
dywgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgRkFMU0UpOworCisgICAg
R1NpbXBsZUFzeW5jUmVzdWx0KiBzaW1wbGVSZXN1bHQgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQo
cmVzdWx0KTsKKyAgICBnX3dhcm5faWZfZmFpbChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3Nv
dXJjZV90YWcoc2ltcGxlUmVzdWx0KSA9PSB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkpOworCisg
ICAgaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3Ioc2ltcGxlUmVzdWx0
LCBlcnJvcikpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHJldHVybiBUUlVFOworfQor
Cit2b2lkIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmcoV2ViS2l0V2ViVmlldyAqd2ViVmll
dykKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7
CiAKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAg
aWYgKCFwcml2LT5sb2FkUmVzdWx0KQorICAgICAgICByZXR1cm47CisKKyAgICBMb2FkRGF0YSog
bG9hZERhdGEgPSBzdGF0aWNfY2FzdDxMb2FkRGF0YSo+KGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9n
ZXRfb3BfcmVzX2dwb2ludGVyKHByaXYtPmxvYWRSZXN1bHQuZ2V0KCkpKTsKKyAgICBnX2NhbmNl
bGxhYmxlX2NhbmNlbChsb2FkRGF0YS0+Y2FuY2VsbGFibGUpOworfQorCit2b2lkIHdlYmtpdF93
ZWJfdmlld19nb19iYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdDYW5jZWxsYWJsZSAqY2Fu
Y2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExvYWRQcm9ncmVz
c0NhbGxiYWNrIHByb2dyZXNzQ2FsbGJhY2ssIGdwb2ludGVyIHByb2dyZXNzQ2FsbGJhY2tEYXRh
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxi
YWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9J
U19XRUJfVklFVyh3ZWJWaWV3KSk7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9
IHdlYlZpZXctPnByaXY7CisgICAgTG9hZERhdGEqIGxvYWREYXRhID0gbG9hZERhdGFOZXcocHJv
Z3Jlc3NDYWxsYmFjaywgcHJvZ3Jlc3NDYWxsYmFja0RhdGEsIGNhbmNlbGxhYmxlLCB3ZWJWaWV3
KTsKKyAgICB3ZWJraXRXZWJWaWV3Q2FuY2VsQ3VycmVudExvYWQod2ViVmlldyk7CisgICAgcHJp
di0+bG9hZFJlc3VsdCA9IGFkb3B0R1JlZihnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3KEdfT0JK
RUNUKHdlYlZpZXcpLCBjYWxsYmFjaywgdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z3Bv
aW50ZXI+KHdlYmtpdF93ZWJfdmlld19nb19iYWNrKSkpOworICAgIGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKHByaXYtPmxvYWRSZXN1bHQuZ2V0KCksIGxvYWREYXRh
LCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihsb2FkRGF0YUZyZWUpKTsKKwogICAg
IFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VC
X1ZJRVdfQkFTRSh3ZWJWaWV3KSk7CiAgICAgV0tQYWdlR29CYWNrKHRvQVBJKHBhZ2UpKTsKIH0K
IAotdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
KQorZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2dvX2JhY2tfZmluaXNoKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIEZBTFNFKTsK
KworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlUmVzdWx0ID0gR19TSU1QTEVfQVNZTkNf
UkVTVUxUKHJlc3VsdCk7CisgICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X2dldF9zb3VyY2VfdGFnKHNpbXBsZVJlc3VsdCkgPT0gd2Via2l0X3dlYl92aWV3X2dvX2JhY2sp
OworCisgICAgaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3Ioc2ltcGxl
UmVzdWx0LCBlcnJvcikpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHJldHVybiBUUlVF
OworfQorCit2b2lkIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYktpdExvYWRQcm9ncmVzc0NhbGxiYWNrIHByb2dyZXNzQ2FsbGJhY2ssIGdw
b2ludGVyIHByb2dyZXNzQ2FsbGJhY2tEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKIHsK
ICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CiAKKyAg
ICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgTG9hZERh
dGEqIGxvYWREYXRhID0gbG9hZERhdGFOZXcocHJvZ3Jlc3NDYWxsYmFjaywgcHJvZ3Jlc3NDYWxs
YmFja0RhdGEsIGNhbmNlbGxhYmxlLCB3ZWJWaWV3KTsKKyAgICB3ZWJraXRXZWJWaWV3Q2FuY2Vs
Q3VycmVudExvYWQod2ViVmlldyk7CisgICAgcHJpdi0+bG9hZFJlc3VsdCA9IGFkb3B0R1JlZihn
X3NpbXBsZV9hc3luY19yZXN1bHRfbmV3KEdfT0JKRUNUKHdlYlZpZXcpLCBjYWxsYmFjaywgdXNl
ckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHdlYmtpdF93ZWJfdmlld19nb19m
b3J3YXJkKSkpOworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVy
KHByaXYtPmxvYWRSZXN1bHQuZ2V0KCksIGxvYWREYXRhLCByZWludGVycHJldF9jYXN0PEdEZXN0
cm95Tm90aWZ5Pihsb2FkRGF0YUZyZWUpKTsKKwogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdl
YmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSk7CiAg
ICAgV0tQYWdlR29Gb3J3YXJkKHRvQVBJKHBhZ2UpKTsKIH0KKworZ2Jvb2xlYW4gd2Via2l0X3dl
Yl92aWV3X2dvX2ZvcndhcmRfZmluaXNoKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIEZBTFNFKTsKKworICAgIEdTaW1wbGVBc3lu
Y1Jlc3VsdCogc2ltcGxlUmVzdWx0ID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUKHJlc3VsdCk7Cisg
ICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnKHNp
bXBsZVJlc3VsdCkgPT0gd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmRfZmluaXNoKTsKKworICAg
IGlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yKHNpbXBsZVJlc3VsdCwg
ZXJyb3IpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwor
Y29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZp
ZXcpLCBOVUxMKTsKKworICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT51cmkuZGF0YSgpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmlu
ZGV4IGNjZjI0NmUuLjIzMDUxYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTYwLDYgKzYwLDE5IEBAIHN0cnVjdCBfV2ViS2l0
V2ViVmlld0NsYXNzIHsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDcpICh2b2lkKTsKIH07
CiAKK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX0xPQURfU1RBUlRFRCwKKyAgICBXRUJLSVRf
TE9BRF9QUk9WSVNJT05BTCwKKyAgICBXRUJLSVRfTE9BRF9SRURJUkVDVF9GT1JfUFJPVklTSU9O
QUwsCisgICAgV0VCS0lUX0xPQURfQ09NTUlUVEVELAorICAgIFdFQktJVF9MT0FEX0ZJUlNUX1ZJ
U1VBTExZX05PTl9FTVBUWV9MQVlPVVQsCisgICAgV0VCS0lUX0xPQURfRklOSVNIRUQKK30gV2Vi
S2l0TG9hZFN0YXR1czsKKwordHlwZWRlZiB2b2lkICgqV2ViS2l0TG9hZFByb2dyZXNzQ2FsbGJh
Y2spIChXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAgICAgICAgICBwcm9ncmVzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICB1c2VyX2Rh
dGEpOworCiBXS19FWFBPUlQgR1R5cGUKIHdlYmtpdF93ZWJfdmlld19nZXRfdHlwZSAgICAgICAg
ICh2b2lkKTsKIApAQCAtNjcsMjAgKzgwLDUzIEBAIFdLX0VYUE9SVCBHdGtXaWRnZXQgKgogd2Vi
a2l0X3dlYl92aWV3X25ldyAgICAgICAgICAgICAgKHZvaWQpOwogCiBXS19FWFBPUlQgR3RrV2lk
Z2V0ICoKLXdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0IChXZWJLaXRXZWJDb250ZXh0
ICpjb250ZXh0KTsKK3dlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0IChXZWJLaXRXZWJD
b250ZXh0ICAgKmNvbnRleHQpOwogCiBXS19FWFBPUlQgV2ViS2l0V2ViQ29udGV4dCAqCi13ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQgICAgICAoV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcpOwor
d2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0ICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAqd2Vi
X3ZpZXcpOwogCiBXS19FWFBPUlQgdm9pZAotd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpICAgICAg
ICAgKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIgICAqdXJpKTsKK3dlYmtpdF93ZWJfdmlld19sb2FkX3VyaSAgICAg
ICAgIChXZWJLaXRXZWJWaWV3ICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAqdXJpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TG9hZFByb2dyZXNzQ2FsbGJhY2sgcHJv
Z3Jlc3NfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50
ZXIgICAgICAgICAgICBwcm9ncmVzc19jYWxsYmFja19kYXRhLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICB1c2VyX2RhdGEpOwor
V0tfRVhQT1JUIGdib29sZWFuCit3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmlfZmluaXNoICAoV2Vi
S2l0V2ViVmlldyAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQXN5bmNSZXN1bHQgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAqKmVycm9yKTsKK1dLX0VYUE9SVCB2b2lkCit3
ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nICAgICAoV2ViS2l0V2ViVmlldyAgICAgICp3ZWJf
aWV3KTsKIAogV0tfRVhQT1JUIHZvaWQKLXdlYmtpdF93ZWJfdmlld19nb19iYWNrICAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3KTsKK3dlYmtpdF93ZWJfdmlld19nb19iYWNrICAgICAg
ICAgIChXZWJLaXRXZWJWaWV3ICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TG9hZFByb2dyZXNzQ2FsbGJhY2sgcHJvZ3Jl
c3NfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIg
ICAgICAgICAgICBwcm9ncmVzc19jYWxsYmFja19kYXRhLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICB1c2VyX2RhdGEpOworV0tf
RVhQT1JUIGdib29sZWFuCit3ZWJraXRfd2ViX3ZpZXdfZ29fYmFja19maW5pc2ggICAoV2ViS2l0
V2ViVmlldyAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQXN5bmNSZXN1bHQgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHRXJyb3IgICAgICAgICAgICAqKmVycm9yKTsKIAogV0tfRVhQT1JUIHZvaWQKLXdl
YmtpdF93ZWJfdmlld19nb19mb3J3YXJkICAgICAgIChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3KTsK
K3dlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgKndl
Yl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAg
ICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
S2l0TG9hZFByb2dyZXNzQ2FsbGJhY2sgcHJvZ3Jlc3NfY2FsbGJhY2ssCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICBwcm9ncmVzc19jYWxsYmFj
a19kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50
ZXIgICAgICAgICAgICB1c2VyX2RhdGEpOworCitXS19FWFBPUlQgZ2Jvb2xlYW4KK3dlYmtpdF93
ZWJfdmlld19nb19mb3J3YXJkX2ZpbmlzaChXZWJLaXRXZWJWaWV3ICAgICAgKndlYl92aWV3LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAqcmVz
dWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAg
ICoqZXJyb3IpOworCitXS19FWFBPUlQgY29uc3QgZ2NoYXIgKgord2Via2l0X3dlYl92aWV3X2dl
dF91cmkgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAqd2ViX3ZpZXcpOwogCiBHX0VORF9E
RUNMUwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy90ZXN0bG9hZGluZy5jIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
dGVzdGxvYWRpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWFlNTE0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvdGVzdGxvYWRpbmcuYwpAQCAtMCwwICsxLDQ2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKKyAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAv
c291cC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdDJndGsuaD4KKwor
LyogVGhpcyBzdHJpbmcgaGFzIHRvIGJlIHJhdGhlciBiaWcgYmVjYXVzZSBvZiB0aGUgY2FuY2Vs
bGVkIHRlc3QgLSBpdAorICogbG9va3MgbGlrZSBzb3VwIHJlZnVzZXMgdG8gc2VuZCBvciByZWNl
aXZlIGEgdG9vIHNtYWxsIGNodW5rICovCisjZGVmaW5lIEhUTUxfU1RSSU5HICI8aHRtbD48Ym9k
eT5UZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchPC9ib2R5PjwvaHRtbD4iCisKK1NvdXBVUkkgKmJhc2VfdXJpOworCisvKiBGb3IgcmVh
bCByZXF1ZXN0IHRlc3RpbmcgKi8KK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2
ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJs
ZSogcXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQorewor
ICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBT
T1VQX1NUQVRVU19PSyk7CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi8iKSkgeworICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1B
TkVOVExZKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1zZy0+cmVzcG9u
c2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7CisgICAgfSBl
bHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKSB8fCBnX3N0
cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMyIikpCisgICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywg
SFRNTF9TVFJJTkcsIHN0cmxlbihIVE1MX1NUUklORykpOworICAgIGVsc2UgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvdGVzdF9sb2FkX2Vycm9yIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1QpOworICAgIH0gZWxzZSBpZiAo
Z19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRpbmdfY2FuY2VsbGVkIikpIHsKKyAgICAgICAg
c291cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2VuY29kaW5nKG1zZy0+cmVzcG9uc2VfaGVhZGVycywg
U09VUF9FTkNPRElOR19DSFVOS0VEKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBIVE1MX1NUUklORywgc3Ry
bGVuKEhUTUxfU1RSSU5HKSk7CisgICAgICAgIHNvdXBfc2VydmVyX3VucGF1c2VfbWVzc2FnZShz
ZXJ2ZXIsIG1zZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCit0eXBlZGVmIHN0cnVjdCB7
CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKKyAgICBHTWFpbkxvb3AgKmxvb3A7CisgICAg
R0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKKyAgICBnYm9vbGVhbiBoYXNCZWVuU3RhcnRlZDsK
KyAgICBnYm9vbGVhbiBoYXNCZWVuUHJvdmlzaW9uYWw7CisgICAgZ2Jvb2xlYW4gaGFzQmVlblJl
ZGlyZWN0OworICAgIGdib29sZWFuIGhhc0JlZW5Db21taXR0ZWQ7CisgICAgZ2Jvb2xlYW4gaGFz
QmVlbkZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dDsKKyAgICBnYm9vbGVhbiBoYXNCZWVuRmlu
aXNoZWQ7Cit9IFdlYkxvYWRpbmdGaXh0dXJlOworCitzdGF0aWMgdm9pZCB3ZWJMb2FkaW5nRml4
dHVyZVNldHVwKFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEp
Cit7CisgICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJV
RSk7CisgICAgZml4dHVyZS0+Y2FuY2VsbGFibGUgPSBOVUxMOworICAgIGdfb2JqZWN0X3JlZl9z
aW5rKGZpeHR1cmUtPndlYlZpZXcpOworICAgIGZpeHR1cmUtPmhhc0JlZW5TdGFydGVkPSBGQUxT
RTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwgPSBGQUxTRTsKKyAgICBmaXh0dXJl
LT5oYXNCZWVuUmVkaXJlY3QgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVk
ID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzQmVlbkZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc0JlZW5GaW5pc2hlZCA9IEZBTFNFOworfQorCitz
dGF0aWMgdm9pZCB3ZWJMb2FkaW5nRml4dHVyZVRlYXJkb3duKFdlYkxvYWRpbmdGaXh0dXJlICpm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVy
ZS0+d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7CisgICAg
aWYgKGZpeHR1cmUtPmNhbmNlbGxhYmxlKQorICAgICAgICBnX29iamVjdF91bnJlZihmaXh0dXJl
LT5jYW5jZWxsYWJsZSk7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRVcmlGb3JQYXRoKGNvbnN0IGNo
YXIqIHBhdGgpCit7CisgICAgU291cFVSSSAqdXJpOworICAgIGNoYXIgKnVyaV9zdHJpbmc7CisK
KyAgICB1cmkgPSBzb3VwX3VyaV9uZXdfd2l0aF9iYXNlKGJhc2VfdXJpLCBwYXRoKTsKKyAgICB1
cmlfc3RyaW5nID0gc291cF91cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpOworICAgIHNvdXBfdXJp
X2ZyZWUodXJpKTsKKworICAgIHJldHVybiB1cmlfc3RyaW5nOworfQorCitzdGF0aWMgdm9pZCBs
b2FkRmluaXNoZWRDYWxsYmFjayhHT2JqZWN0ICpvYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0
LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSA9
IChXZWJMb2FkaW5nRml4dHVyZSAqKXVzZXJEYXRhOworCisgICAgZ19hc3NlcnQod2Via2l0X3dl
Yl92aWV3X2xvYWRfdXJpX2ZpbmlzaChmaXh0dXJlLT53ZWJWaWV3LCByZXN1bHQsIE5VTEwpKTsK
KworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5TdGFydGVkKTsKKyAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0Jl
ZW5SZWRpcmVjdCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCk7Cisg
ICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCk7
CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkKTsKKworICAgIGdfbWFpbl9s
b29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Cit9CisKKworc3RhdGljIHZvaWQgbG9hZFByb2dyZXNz
Q2FsbGJhY2soV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMsIGdkb3VibGUgcHJvZ3Jlc3MsIGdwb2lu
dGVyIHVzZXJEYXRhKQoreworICAgIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlID0gKFdlYkxv
YWRpbmdGaXh0dXJlICopdXNlckRhdGE7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgIGNh
c2UgV0VCS0lUX0xPQURfU1RBUlRFRDoKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0Jl
ZW5Qcm92aXNpb25hbCk7CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuUmVkaXJl
Y3QpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCk7CisgICAg
ICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0
KTsKKyAgICAgICAgZml4dHVyZS0+aGFzQmVlblN0YXJ0ZWQgPSBUUlVFOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgorICAgICAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNCZWVuU3RhcnRlZCk7CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNC
ZWVuUmVkaXJlY3QpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRl
ZCk7CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuRmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0KTsKKyAgICAgICAgZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsID0gVFJVRTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9SRURJUkVDVF9GT1JfUFJPVklT
SU9OQUw6CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5TdGFydGVkKTsKKyAgICAg
ICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKKyAgICAgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOworICAgICAgICBnX2Fzc2VydCghZml4dHVy
ZS0+aGFzQmVlbkZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCk7CisgICAgICAgIGZpeHR1cmUt
Pmhhc0JlZW5SZWRpcmVjdCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lU
X0xPQURfQ09NTUlUVEVEOgorICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuU3RhcnRl
ZCk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAg
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCk7CisgICAgICAgIGdfYXNzZXJ0
KCFmaXh0dXJlLT5oYXNCZWVuRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KTsKKyAgICAgICAg
Zml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV0VCS0lUX0xPQURfRklSU1RfVklTVUFMTFlfTk9OX0VNUFRZX0xBWU9VVDoKKyAgICAgICAg
Z19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblN0YXJ0ZWQpOworICAgICAgICBnX2Fzc2VydChmaXh0
dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNC
ZWVuUmVkaXJlY3QpOworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVk
KTsKKyAgICAgICAgZml4dHVyZS0+aGFzQmVlbkZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCA9
IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6Cisg
ICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5TdGFydGVkKTsKKyAgICAgICAgZ19hc3Nl
cnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVy
ZS0+aGFzQmVlblJlZGlyZWN0KTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkNv
bW1pdHRlZCk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5GaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXQpOworICAgICAgICBmaXh0dXJlLT5oYXNCZWVuRmluaXNoZWQgPSBUUlVF
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVh
Y2hlZCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRpbmdTdGF0dXMoV2ViTG9h
ZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyICp1
cmlTdHJpbmc7CisKKyAgICB1cmlTdHJpbmcgPSBnZXRVcmlGb3JQYXRoKCIvIik7CisgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaVN0cmluZywgTlVMTCwg
bG9hZFByb2dyZXNzQ2FsbGJhY2ssIGZpeHR1cmUsIGxvYWRGaW5pc2hlZENhbGxiYWNrLCBmaXh0
dXJlKTsKKyAgICBnX2ZyZWUodXJpU3RyaW5nKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0
dXJlLT5sb29wKTsKK30KKworc3RhdGljIHZvaWQgbG9hZEVycm9yUHJvZ3Jlc3NDYWxsYmFjayhX
ZWJLaXRMb2FkU3RhdHVzIHN0YXR1cywgZ2RvdWJsZSBwcm9ncmVzcywgZ3BvaW50ZXIgdXNlckRh
dGEpCit7CisgICAgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUgPSAoV2ViTG9hZGluZ0ZpeHR1
cmUgKil1c2VyRGF0YTsKKworICAgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAgY2FzZSBXRUJLSVRf
TE9BRF9TVEFSVEVEOgorICAgICAgICBmaXh0dXJlLT5oYXNCZWVuU3RhcnRlZCA9IFRSVUU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6CisgICAgICAg
IGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5TdGFydGVkKTsKKyAgICAgICAgZml4dHVyZS0+aGFz
QmVlblByb3Zpc2lvbmFsID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRf
TE9BRF9DT01NSVRURUQ6CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5TdGFydGVk
KTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKKyAgICAg
ICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOworICAgICAgICBmaXh0dXJl
LT5oYXNCZWVuQ29tbWl0dGVkID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJL
SVRfTE9BRF9GSU5JU0hFRDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblN0YXJ0
ZWQpOworICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOworICAg
ICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKKyAgICAgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc0JlZW5GaW5pc2hlZCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbG9hZEVycm9yRmlu
aXNoZWRDYWxsYmFjayhHT2JqZWN0ICpvYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBncG9p
bnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSA9IChXZWJM
b2FkaW5nRml4dHVyZSAqKXVzZXJEYXRhOworICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOworCisg
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19sb2FkX3VyaV9maW5pc2goZml4dHVyZS0+d2Vi
VmlldywgcmVzdWx0LCAmZXJyb3IpKTsKKyAgICBnX2Fzc2VydChlcnJvcik7CisgICAgZ19lcnJv
cl9mcmVlKGVycm9yKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkaW5nRXJyb3IoV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyICp1cmlTdHJpbmc7CisKKyAgICB1
cmlTdHJpbmcgPSBnZXRVcmlGb3JQYXRoKCIvdGVzdF9sb2FkX2Vycm9yIik7CisgICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaVN0cmluZywgTlVMTCwgbG9h
ZEVycm9yUHJvZ3Jlc3NDYWxsYmFjaywgZml4dHVyZSwgbG9hZEVycm9yRmluaXNoZWRDYWxsYmFj
aywgZml4dHVyZSk7CisgICAgZ19mcmVlKHVyaVN0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9y
dW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlz
aW9uYWwpOworICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKK30KKwor
LyogQ2FuY2VsbGVkIGxvYWQgKi8KKworc3RhdGljIHZvaWQgbG9hZENhbmNlbGxlZEZpbmlzaGVk
Q2FsbGJhY2soR09iamVjdCAqb2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3BvaW50ZXIg
dXNlckRhdGEpCit7CisgICAgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUgPSAoV2ViTG9hZGlu
Z0ZpeHR1cmUgKil1c2VyRGF0YTsKKyAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmlfZmluaXNoKGZpeHR1cmUtPndlYlZpZXcs
IHJlc3VsdCwgJmVycm9yKSk7CisgICAgZ19hc3NlcnQoZXJyb3IpOworICAgIGdfYXNzZXJ0KGdf
ZXJyb3JfbWF0Y2hlcyhlcnJvciwgV0VCS0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JL
X0VSUk9SX0NBTkNFTExFRCkpOworICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisKKyAgICBnX21h
aW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY2FuY2Vs
VGhyZWFkKEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUpCit7CisgICAgZ19jYW5jZWxsYWJsZV9j
YW5jZWwoY2FuY2VsbGFibGUpOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lk
IGxvYWRDYW5jZWxsZWRQcm9ncmVzc0NhbGxiYWNrKFdlYktpdExvYWRTdGF0dXMgc3RhdHVzLCBn
ZG91YmxlIHByb2dyZXNzLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJMb2FkaW5nRml4
dHVyZSAqZml4dHVyZSA9IChXZWJMb2FkaW5nRml4dHVyZSAqKXVzZXJEYXRhOworCisgICAgc3dp
dGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIFdFQktJVF9MT0FEX1NUQVJURUQ6CisgICAgICAgIGZp
eHR1cmUtPmhhc0JlZW5TdGFydGVkID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
RUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVl
blN0YXJ0ZWQpOworICAgICAgICBmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwgPSBUUlVFOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKKyAgICAgICAg
Z19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblN0YXJ0ZWQpOworICAgICAgICBnX2Fzc2VydChmaXh0
dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOworICAgICAgICBpZiAoZml4dHVyZS0+Y2FuY2VsbGFi
bGUpIHsKKyAgICAgICAgICAgIEdUaHJlYWQgKmNhbmNlbF90aHJlYWQgPSBnX3RocmVhZF9jcmVh
dGUoKEdUaHJlYWRGdW5jKWNhbmNlbFRocmVhZCwgZml4dHVyZS0+Y2FuY2VsbGFibGUsIFRSVUUs
IE5VTEwpOworICAgICAgICAgICAgZ190aHJlYWRfam9pbihjYW5jZWxfdGhyZWFkKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKGZpeHR1
cmUtPndlYlZpZXcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklT
SEVEOgorICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RM
b2FkaW5nQ2FuY2VsbGVkKFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCit7CisgICAgY2hhciAqdXJpU3RyaW5nOworCisgICAgdXJpU3RyaW5nID0gZ2V0VXJp
Rm9yUGF0aCgiL3Rlc3RfbG9hZGluZ19jYW5jZWxsZWQiKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpU3RyaW5nLCBOVUxMLCBsb2FkQ2FuY2VsbGVk
UHJvZ3Jlc3NDYWxsYmFjaywgZml4dHVyZSwgbG9hZENhbmNlbGxlZEZpbmlzaGVkQ2FsbGJhY2ss
IGZpeHR1cmUpOworICAgIGdfZnJlZSh1cmlTdHJpbmcpOworCisgICAgZ19tYWluX2xvb3BfcnVu
KGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZGluZ0NhbmNlbGxlZFRo
cmVhZChXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQorewor
ICAgIGNoYXIgKnVyaVN0cmluZzsKKworICAgIGZpeHR1cmUtPmNhbmNlbGxhYmxlID0gZ19jYW5j
ZWxsYWJsZV9uZXcoKTsKKyAgICB1cmlTdHJpbmcgPSBnZXRVcmlGb3JQYXRoKCIvdGVzdF9sb2Fk
aW5nX2NhbmNlbGxlZCIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53
ZWJWaWV3LCB1cmlTdHJpbmcsIGZpeHR1cmUtPmNhbmNlbGxhYmxlLCBsb2FkQ2FuY2VsbGVkUHJv
Z3Jlc3NDYWxsYmFjaywgZml4dHVyZSwgbG9hZENhbmNlbGxlZEZpbmlzaGVkQ2FsbGJhY2ssIGZp
eHR1cmUpOworICAgIGdfZnJlZSh1cmlTdHJpbmcpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZp
eHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCBsb2FkR29CYWNrUHJvZ3Jlc3NDYWxsYmFj
ayhXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cywgZ2RvdWJsZSBwcm9ncmVzcywgZ3BvaW50ZXIgdXNl
ckRhdGEpCit7CisgICAgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUgPSAoV2ViTG9hZGluZ0Zp
eHR1cmUgKil1c2VyRGF0YTsKKworICAgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAgY2FzZSBXRUJL
SVRfTE9BRF9TVEFSVEVEOgorICAgICAgICBmaXh0dXJlLT5oYXNCZWVuU3RhcnRlZCA9IFRSVUU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6CisgICAg
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5TdGFydGVkKTsKKyAgICAgICAgZml4dHVyZS0+
aGFzQmVlblByb3Zpc2lvbmFsID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJL
SVRfTE9BRF9DT01NSVRURUQ6CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5TdGFy
dGVkKTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKKyAg
ICAgICAgZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCA9IFRSVUU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc0JlZW5TdGFydGVkKTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zp
c2lvbmFsKTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCk7Cisg
ICAgICAgIGZpeHR1cmUtPmhhc0JlZW5GaW5pc2hlZCA9IFRSVUU7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbG9h
ZEdvQmFja0ZpbmlzaGVkQ2FsbGJhY2soR09iamVjdCAqb2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJl
c3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1
cmUgPSAoV2ViTG9hZGluZ0ZpeHR1cmUgKil1c2VyRGF0YTsKKworICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfdmlld19sb2FkX3VyaV9maW5pc2goZml4dHVyZS0+d2ViVmlldywgcmVzdWx0LCBOVUxM
KSk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkKTsKKworICAgIGdfbWFp
bl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRXZW50QmFj
a1Byb2dyZXNzQ2FsbGJhY2soV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMsIGdkb3VibGUgcHJvZ3Jl
c3MsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJl
ID0gKFdlYkxvYWRpbmdGaXh0dXJlICopdXNlckRhdGE7CisgICAgY2hhciAqdXJpU3RyaW5nID0g
Z2V0VXJpRm9yUGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKTsKKworICAgIHN3aXRjaCAoc3Rh
dHVzKSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9TVEFSVEVEOiB7CisgICAgICAgIGNoYXIgKnVy
aVN0cmluZzIgPSBnZXRVcmlGb3JQYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKTsKKworICAg
ICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkoZml4dHVyZS0+d2Vi
VmlldyksID09LCB1cmlTdHJpbmcyKTsKKyAgICAgICAgZ19mcmVlKHVyaVN0cmluZzIpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKKyAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKGZpeHR1cmUtPndl
YlZpZXcpLCA9PSwgdXJpU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRf
TE9BRF9DT01NSVRURUQ6CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaVN0cmluZyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaShmaXh0dXJlLT53ZWJWaWV3KSwgPT0sIHVyaVN0cmlu
Zyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGdfZnJlZSh1cmlTdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCBsb2FkV2VudEJhY2tG
aW5pc2hlZENhbGxiYWNrKEdPYmplY3QgKm9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdw
b2ludGVyIHVzZXJEYXRhKQoreworICAgIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlID0gKFdl
YkxvYWRpbmdGaXh0dXJlICopdXNlckRhdGE7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3Zp
ZXdfZ29fYmFja19maW5pc2goZml4dHVyZS0+d2ViVmlldywgcmVzdWx0LCBOVUxMKSk7CisKKyAg
ICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
TG9hZGluZ0dvQmFjayhXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKQoreworICAgIGNoYXIgKnVyaVN0cmluZzsKKworICAgIHVyaVN0cmluZyA9IGdldFVyaUZv
clBhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
dXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaVN0cmluZywgTlVMTCwgbG9hZEdvQmFja1Byb2dyZXNz
Q2FsbGJhY2ssIGZpeHR1cmUsIGxvYWRHb0JhY2tGaW5pc2hlZENhbGxiYWNrLCBmaXh0dXJlKTsK
KyAgICBnX2ZyZWUodXJpU3RyaW5nKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5s
b29wKTsKKworICAgIGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCA9IEZBTFNFOworICAgIGZp
eHR1cmUtPmhhc0JlZW5Db21taXR0ZWQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuRmlu
aXNoZWQgPSBGQUxTRTsKKworICAgIHVyaVN0cmluZyA9IGdldFVyaUZvclBhdGgoIi90ZXN0X2xv
YWRpbmdfc3RhdHVzMiIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53
ZWJWaWV3LCB1cmlTdHJpbmcsIE5VTEwsIGxvYWRHb0JhY2tQcm9ncmVzc0NhbGxiYWNrLCBmaXh0
dXJlLCBsb2FkR29CYWNrRmluaXNoZWRDYWxsYmFjaywgZml4dHVyZSk7CisgICAgZ19mcmVlKHVy
aVN0cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBm
aXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNCZWVu
Q29tbWl0dGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkID0gRkFMU0U7
CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhmaXh0dXJlLT53ZWJWaWV3LCBOVUxMLCBs
b2FkV2VudEJhY2tQcm9ncmVzc0NhbGxiYWNrLCBmaXh0dXJlLCBsb2FkV2VudEJhY2tGaW5pc2hl
ZENhbGxiYWNrLCBmaXh0dXJlKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29w
KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIFNvdXBTZXJ2
ZXIgKnNlcnZlcjsKKworICAgIGdfdGhyZWFkX2luaXQoTlVMTCk7CisgICAgZ3RrX3Rlc3RfaW5p
dCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ19zZXRlbnYoIldFQktJVF9FWEVDX1BBVEgi
LCBXRUJLSVRfRVhFQ19QQVRILCBGQUxTRSk7CisKKyAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9u
ZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5j
KHNlcnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNl
cnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKKworICAgIGJhc2VfdXJpID0gc291cF91cmlfbmV3
KCJodHRwOi8vMTI3LjAuMC4xLyIpOworICAgIHNvdXBfdXJpX3NldF9wb3J0KGJhc2VfdXJpLCBz
b3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKKworICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtpdDIvbG9hZGlu
Zy9zdGF0dXMiLAorICAgICAgICAgICAgICAgV2ViTG9hZGluZ0ZpeHR1cmUsIE5VTEwsCisgICAg
ICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVNldHVwLAorICAgICAgICAgICAgICAgdGVzdExv
YWRpbmdTdGF0dXMsCisgICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVRlYXJkb3duKTsK
KyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0Mi9sb2FkaW5nL2Vycm9yIiwKKyAgICAgICAgICAgICAg
IFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAorICAgICAgICAgICAgICAgd2ViTG9hZGluZ0ZpeHR1
cmVTZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RMb2FkaW5nRXJyb3IsCisgICAgICAgICAgICAg
ICB3ZWJMb2FkaW5nRml4dHVyZVRlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0Mi9s
b2FkaW5nL2NhbmNlbGxlZCIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVM
TCwKKyAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlU2V0dXAsCisgICAgICAgICAgICAg
ICB0ZXN0TG9hZGluZ0NhbmNlbGxlZCwKKyAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJl
VGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQyL2xvYWRpbmcvY2FuY2VsbGVkX3Ro
cmVhZCIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKKyAgICAgICAg
ICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlU2V0dXAsCisgICAgICAgICAgICAgICB0ZXN0TG9hZGlu
Z0NhbmNlbGxlZFRocmVhZCwKKyAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRv
d24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQyL2xvYWRpbmcvZ29iYWNrIiwKKyAgICAgICAg
ICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAorICAgICAgICAgICAgICAgd2ViTG9hZGlu
Z0ZpeHR1cmVTZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RMb2FkaW5nR29CYWNrLAorICAgICAg
ICAgICAgICAgd2ViTG9hZGluZ0ZpeHR1cmVUZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0
X3J1bigpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyZ3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
Z3RrLmgKaW5kZXggZGZlYmJiNC4uZDM4ZmE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mmd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDJndGsuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBfX1dF
QktJVDJHVEtfSF9fCiAKICNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdEVycm9yLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0V2ViVmlldy5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvR3RrTGF1bmNoZXIvbWFp
bi5jIGIvVG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCmluZGV4IDg0OTJhNjEuLmQzMzkzMDAgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYworKysgYi9Ub29scy9HdGtMYXVuY2hl
ci9tYWluLmMKQEAgLTQ0LDcgKzQ0LDExIEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlVXJpRW50cnlD
YihHdGtXaWRnZXQqIGVudHJ5LCBncG9pbnRlciBkYXRhKQogICAgIFdlYktpdFdlYlZpZXcgKndl
YlZpZXcgPSBnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChlbnRyeSksICJ3ZWItdmlldyIpOwog
ICAgIGNvbnN0IGdjaGFyKiB1cmkgPSBndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGVudHJ5
KSk7CiAgICAgZ19hc3NlcnQodXJpKTsKKyNpZm5kZWYgV0VCS0lUMgogICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaSh3ZWJWaWV3LCB1cmkpOworI2Vsc2UKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF91cmkod2ViVmlldywgdXJpLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyNl
bmRpZgogfQogCiAjaWZuZGVmIFdFQktJVDIKQEAgLTk5LDEyICsxMDMsMjAgQEAgc3RhdGljIHZv
aWQgZGVzdHJveUNiKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtXaWRnZXQqIHdpbmRvdykKIAogc3Rh
dGljIHZvaWQgZ29CYWNrQ2IoR3RrV2lkZ2V0KiB3aWRnZXQsICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQogeworI2lmbmRlZiBXRUJLSVQyCiAgICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sod2Vi
Vmlldyk7CisjZWxzZQorICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKHdlYlZpZXcsIE5VTEws
IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGdvRm9y
d2FyZENiKEd0a1dpZGdldCogd2lkZ2V0LCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogeworI2lm
bmRlZiBXRUJLSVQyCiAgICAgd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQod2ViVmlldyk7Cisj
ZWxzZQorICAgIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkKHdlYlZpZXcsIE5VTEwsIE5VTEws
IE5VTEwsIE5VTEwsIE5VTEwpOworI2VuZGlmCiB9CiAKICNpZm5kZWYgV0VCS0lUMgpAQCAtNDQx
LDggKzQ1MywxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogCiAgICAgY29u
c3QgZ2NoYXIgKnVyaSA9ICh1cmlBcmd1bWVudHMgPyB1cmlBcmd1bWVudHNbMF0gOiAiaHR0cDov
L3d3dy5nb29nbGUuY29tLyIpOwogICAgIGdjaGFyICpmaWxlVVJMID0gZmlsZW5hbWVUb1VSTCh1
cmkpOwotCisjaWZuZGVmIFdFQktJVDIKICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2Vi
VmlldywgZmlsZVVSTCA/IGZpbGVVUkwgOiB1cmkpOworI2Vsc2UKKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkod2ViVmlldywgZmlsZVVSTCA/IGZpbGVVUkwgOiB1cmksIE5VTEwsIE5VTEws
IE5VTEwsIE5VTEwsIE5VTEwpOworI2VuZGlmCiAgICAgZ19mcmVlKGZpbGVVUkwpOwogCiAgICAg
Z3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQod2ViVmlldykpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107985</attachid>
            <date>2011-09-20 05:14:08 -0700</date>
            <delta_ts>2011-09-26 05:24:10 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-loader-client2.diff</filename>
            <type>text/plain</type>
            <size>61954</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0ZTgwZTVmLi4xNjk3Njk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODYg
QEAKIDIwMTEtMDktMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIExvYWRlciBjbGllbnQgaW1wbGVtZW50YXRpb24gZm9yIFdlYktp
dDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY4MDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wbGVtZW50IGxvYWRlciBjbGllbnQgdXNpbmcgYXN5bmNocm9ub3VzIEFQSSBmb2xsb3dp
bmcgdGhlCisgICAgICAgIGdsaWIvZ2lvIHBhdHRlcm4uIFNpZ25hbHMgbG9hZC1zdGF0dXMtY2hh
bmdlZCBhbmQKKyAgICAgICAgbG9hZC1wcm9ncmVzcy1jaGFuZ2VkIGhhdmUgYmVlbiBhZGRlZCB0
byBub3RpZnkgYWJvdXQgdGhlIGxvYWRpbmcKKyAgICAgICAgcHJvZ3Jlc3MgYW5kIHN0YXR1cy4K
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9u
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mmd0ay5oLgorICAgICAg
ICAod2Via2l0X25ldHdvcmtfZXJyb3JfcXVhcmspOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEVycm9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDJndGsuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZCk6IEluaXRpYWxp
emUgdGhlIGxvYWRlciBjbGllbnQuCisgICAgICAgICh3ZWJraXRXZWJWaWV3U2V0UHJvcGVydHkp
OgorICAgICAgICAod2Via2l0V2ViVmlld0dldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19pbml0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KTogQWRk
IHVyaSBwcm9wZXJ0eSBhbmQKKyAgICAgICAgbG9hZC1zdGF0dXMtY2hhbmdlZCBhbmQgbG9hZC1w
cm9ncmVzcy1jaGFuZ2VkIHNpZ25hbHMuCisgICAgICAgIChsb2FkRGF0YUZyZWUpOgorICAgICAg
ICAobG9hZERhdGFOZXcpOiBIZWxwZXIgc3R1Y3R1cmUgZm9yIGFzeW5jIGxvYWQgb3BlcmF0aW9u
cy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdOb3RpZnlMb2FkU3RhdHVzKToKKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdOb3RpZnlMb2FkUHJvZ3Jlc3MpOgorICAgICAgICAod2Via2l0V2ViVmlld1Vw
ZGF0ZUlzTG9hZGluZyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3VXBkYXRlVXJpKToKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdMb2FkRmluaXNoZWQpOgorICAgICAgICAod2Via2l0V2ViVmlld0xv
YWRGYWlsZWQpOgorICAgICAgICAod2Via2l0V2ViVmlld0xvYWRTdG9wSWRsZSk6CisgICAgICAg
ICh3ZWJraXRXZWJWaWV3TG9hZENhbmNlbGxlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q2Fu
Y2VsQ3VycmVudExvYWQpOgorICAgICAgICAoZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFt
ZSk6CisgICAgICAgIChkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRG
b3JGcmFtZSk6CisgICAgICAgIChkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJh
bWUpOgorICAgICAgICAoZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKGRpZEZpbmlz
aERvY3VtZW50TG9hZEZvckZyYW1lKToKKyAgICAgICAgKGRpZEZpbmlzaExvYWRGb3JGcmFtZSk6
CisgICAgICAgIChkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lKToKKyAgICAgICAgKGRpZEZp
cnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKToKKyAgICAgICAgKGRpZFN0YXJ0UHJv
Z3Jlc3MpOgorICAgICAgICAoZGlkQ2hhbmdlUHJvZ3Jlc3MpOgorICAgICAgICAoZGlkRmluaXNo
UHJvZ3Jlc3MpOgorICAgICAgICAod2Via2l0V2ViVmlld0xvYWRlckNsaWVudEluaXQpOgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmll
d19sb2FkX3VyaV9maW5pc2gpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGlu
Zyk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayk6CisgICAgICAgICh3ZWJraXRf
d2ViX3ZpZXdfZ29fYmFja19maW5pc2gpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dvX2Zv
cndhcmQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmRfZmluaXNoKToKKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmll
d19pc19sb2FkaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYzogQWRk
ZWQuCisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgICh3ZWJMb2FkaW5nRml4dHVy
ZVNldHVwKToKKyAgICAgICAgKHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24pOgorICAgICAgICAo
Z2V0VXJpRm9yUGF0aCk6CisgICAgICAgIChsb2FkRmluaXNoZWRDYWxsYmFjayk6CisgICAgICAg
IChsb2FkU3RhdHVzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RMb2FkaW5nU3RhdHVz
KToKKyAgICAgICAgKGxvYWRFcnJvclN0YXR1c0NoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChs
b2FkRXJyb3JGaW5pc2hlZENhbGxiYWNrKToKKyAgICAgICAgKHRlc3RMb2FkaW5nRXJyb3IpOgor
ICAgICAgICAobG9hZENhbmNlbGxlZEZpbmlzaGVkQ2FsbGJhY2spOgorICAgICAgICAoY2FuY2Vs
VGhyZWFkKToKKyAgICAgICAgKGxvYWRDYW5jZWxsZWRTdGF0dXNDaGFuZ2VkQ2FsbGJhY2spOgor
ICAgICAgICAodGVzdExvYWRpbmdDYW5jZWxsZWQpOgorICAgICAgICAodGVzdExvYWRpbmdDYW5j
ZWxsZWRUaHJlYWQpOgorICAgICAgICAobG9hZEdvQmFja1N0YXR1c0NoYW5nZWRDYWxsYmFjayk6
CisgICAgICAgIChsb2FkR29CYWNrRmluaXNoZWRDYWxsYmFjayk6CisgICAgICAgIChsb2FkV2Vu
dEJhY2tTdGF0dXNDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAobG9hZFdlbnRCYWNrRmluaXNo
ZWRDYWxsYmFjayk6CisgICAgICAgICh0ZXN0TG9hZGluZ0dvQmFjayk6CisgICAgICAgIChtYWlu
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyZ3RrLmg6IEFkZCBXZWJLaXRF
cnJvci5oIGFuZAorICAgICAgICBXZWJLaXRFbnVtVHlwZXMuaC4KKworMjAxMS0wOS0yMCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10g
V2ViUHJvY2VzcyBzaG91bGRuJ3QgdXNlIHRoZSBHVEsrIEFQSQogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwNjIKIApkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGI0OGJlZTguLmQ2Y2U2ZGIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OCBAQAorMjAxMS0wOS0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gTG9hZGVyIGNsaWVudCBpbXBsZW1lbnRhdGlvbiBmb3IgV2Vi
S2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjgwODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGFwdCB0byBXZWJLaXQyIEdUSysgQVBJIGNoYW5nZXMuCisKKyAgICAgICAgKiBHdGtM
YXVuY2hlci9tYWluLmM6CisgICAgICAgIChhY3RpdmF0ZVVyaUVudHJ5Q2IpOgorICAgICAgICAo
Z29CYWNrQ2IpOgorICAgICAgICAoZ29Gb3J3YXJkQ2IpOgorICAgICAgICAobWFpbik6CisKIDIw
MTEtMDktMTIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIFJlb3JnYW5pemUgaGVhZGVyIGZpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IDBmMTdmYzEuLmQwM2Q3NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC02NywxMSArNjcs
MTYgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lU
R1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9IRUEKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Y3BwL1dLUmV0YWluUHRyLmgKIAogbGlid2Via2l0Mmd0a2luY2x1ZGVkaXIgPSAkKGxpYndlYmtp
dGd0a2luY2x1ZGVkaXIpL3dlYmtpdDIKLWxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBc
Cit3ZWJraXQyZ3RrX2hlYWRlcnMgPSBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRFcnJvci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNv
bnRleHQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmgg
XAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuaAogCits
aWJ3ZWJraXQyZ3RraW5jbHVkZV9IRUFERVJTID0gXAorCSQod2Via2l0Mmd0a19oZWFkZXJzKSBc
CisJRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJLaXRFbnVtVHlwZXMuaAorCiBsaWJ3ZWJraXRn
dGtpbmNsdWRlX0hFQURFUlMgKz0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mmd0ay5oCiAKQEAgLTEzMCw2ICsxMzUsOCBAQCB3ZWJraXQyX2J1aWx0X3NvdXJjZXMgKz0g
XAogCURlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlck1lc3Nh
Z2VzLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIFwKKwlEZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1dlYktpdEVudW1UeXBlcy5jcHAgXAorCURlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2Vi
S2l0RW51bVR5cGVzLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViTWVkaWFDYWNoZU1h
bmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYk1l
ZGlhQ2FjaGVNYW5hZ2VyTWVzc2FnZXMuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJN
ZWRpYUNhY2hlTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCkBAIC0xNDgsNiArMTU1
LDcgQEAgd2Via2l0Ml9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJLaXQy
L1dlYlByb2Nlc3NNZXNzYWdlcy5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlByb2Nl
c3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2Vi
UHJvY2Vzc1Byb3h5TWVzc2FnZXMuaAorCiBCVUlMVF9TT1VSQ0VTICs9ICQod2Via2l0Ml9idWls
dF9zb3VyY2VzKQogbm9kaXN0X2xpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVS
U0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VUkNFUyA9JCh3ZWJraXQy
X2J1aWx0X3NvdXJjZXMpCiAKQEAgLTQ1MCw2ICs0NTgsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJL
SVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xh
X1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvY3BwL1dLUmV0YWluUHRyLmggXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmggXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBcCisJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBcCisJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggXApAQCAtOTc2LDggKzk4Niw1MyBA
QCBEZXJpdmVkU291cmNlcy9XZWJLaXQyLyVNZXNzYWdlUmVjZWl2ZXIuY3BwOiAlLm1lc3NhZ2Vz
LmluICQobWVzc2FnZV9nZW5fc2NyaXB0cwogRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi8lTWVzc2Fn
ZXMuaDogJS5tZXNzYWdlcy5pbiAkKG1lc3NhZ2VfZ2VuX3NjcmlwdHMpCiAJJChBTV9WX0dFTikk
KFBZVEhPTikgJChXZWJLaXQyKS9TY3JpcHRzL2dlbmVyYXRlLW1lc3NhZ2VzLWhlYWRlci5weSAk
PCA+ICRACiAKK0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViS2l0RW51bVR5cGVzLmg6IHN0YW1w
LXdlYmtpdDJlbnVtdHlwZXMKKwlAdHJ1ZQorc3RhbXAtd2Via2l0MmVudW10eXBlczogJCh3ZWJr
aXQyZ3RrX2hlYWRlcnMpICQoV2ViS2l0MikvR05VbWFrZWZpbGUuYW0KKwkkKEFNX1ZfR0VOKWds
aWItbWtlbnVtcyBcCisJCQktLWZoZWFkICIjaWZuZGVmIFdFQktJVF9FTlVNX1RZUEVTX0hcbiIg
XAorCQkJLS1maGVhZCAiI2RlZmluZSBXRUJLSVRfRU5VTV9UWVBFU19IXG5cbiIgXAorCQkJLS1m
aGVhZCAiI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+XG5cbiIgXAorCQkJLS1maGVhZCAiI2luY2x1
ZGUgPFdlYktpdDIvV0tCYXNlLmg+XG5cbiIgXAorCQkJLS1maGVhZCAiR19CRUdJTl9ERUNMU1xu
XG4iIFwKKwkJCS0tZnRhaWwgIkdfRU5EX0RFQ0xTXG5cbiIgXAorCQkJLS1mdGFpbCAiI2VuZGlm
XG4iIFwKKwkJCS0tZnByb2QgIiNpbmNsdWRlIDx3ZWJraXQyL0BiYXNlbmFtZUA+XG5cbiIgXAor
CQkJLS1lcHJvZCAiI2RlZmluZSBXRUJLSVRfVFlQRV9ARU5VTVNIT1JUQCBAZW51bV9uYW1lQF9n
ZXRfdHlwZSgpXG5cbiIgXAorCQkJLS1lcHJvZCAiV0tfRVhQT1JUIEdUeXBlXG5AZW51bV9uYW1l
QF9nZXRfdHlwZSh2b2lkKTtcblxuIiBcCisJCSQod2Via2l0Mmd0a19oZWFkZXJzKSB8IFwKKwkJ
c2VkICdzLHdlYl9raXQsd2Via2l0LCcgfCBcCisJCXNlZCAncyxXRUJLSVRfVFlQRV9LSVQsV0VC
S0lUX1RZUEUsJyBcCisJCT4geGdlbi1ndGggXAorCSYmIChjbXAgLXMgeGdlbi1ndGggJChHRU5T
T1VSQ0VTX1dFQktJVDIpL1dlYktpdEVudW1UeXBlcy5oIHx8IGNwIHhnZW4tZ3RoICQoR0VOU09V
UkNFU19XRUJLSVQyKS9XZWJLaXRFbnVtVHlwZXMuaCkgXAorCSYmIHJtIC1mIHhnZW4tZ3RoIFwK
KwkmJiBlY2hvIHRpbWVzdGFtcCA+ICQoQEYpCisKK0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2Vi
S2l0RW51bVR5cGVzLmNwcDogJCh3ZWJraXQyZ3RrX2hlYWRlcnMpICQoV2ViS2l0MikvR05VbWFr
ZWZpbGUuYW0KKwkkKEFNX1ZfR0VOKWdsaWItbWtlbnVtcyBcCisJCQktLWZoZWFkICIjaW5jbHVk
ZSA8Y29uZmlnLmg+XG4iIFwKKwkJCS0tZmhlYWQgIiNpbmNsdWRlIDxnbGliLW9iamVjdC5oPlxu
IiBcCisJCQktLWZoZWFkICIjaW5jbHVkZSBcIiQoR0VOU09VUkNFU19XRUJLSVQyKS9XZWJLaXRF
bnVtVHlwZXMuaFwiXG5cbiIgXAorCQkJLS1maGVhZCAiZXh0ZXJuIFwiQ1wiIHtcblxuIiBcCisJ
CQktLWZwcm9kICJcbi8qIGVudW1lcmF0aW9ucyBmcm9tIFwiQGZpbGVuYW1lQFwiICovIiBcCisJ
CQktLXZoZWFkICJzdGF0aWMgY29uc3QgR0BUeXBlQFZhbHVlIF9AZW51bV9uYW1lQF92YWx1ZXNb
XSA9IHsiIFwKKwkJCS0tdnByb2QgIiAgICB7IEBWQUxVRU5BTUVALCBcIkBWQUxVRU5BTUVAXCIs
IFwiQHZhbHVlbmlja0BcIiB9LCIgXAorCQkJLS12dGFpbCAiICAgIHsgMCwgTlVMTCwgTlVMTCB9
XG59O1xuXG4iIFwKKwkJCS0tdnRhaWwgIkdUeXBlIEBlbnVtX25hbWVAX2dldF90eXBlKHZvaWQp
XG57XG4iIFwKKwkJCS0tdnRhaWwgIiAgICBzdGF0aWMgR1R5cGUgdHlwZSA9IDA7XG5cbiIgXAor
CQkJLS12dGFpbCAiICAgIGlmICghdHlwZSlcbiIgXAorCQkJLS12dGFpbCAiICAgICAgICB0eXBl
ID0gZ19AdHlwZUBfcmVnaXN0ZXJfc3RhdGljKFwiQEVudW1OYW1lQFwiLCBfQGVudW1fbmFtZUBf
dmFsdWVzKTtcblxuIiBcCisJCQktLXZ0YWlsICIgICAgcmV0dXJuIHR5cGU7XG59XG5cbiIgXAor
CQkJLS1mdGFpbCAifVxuIiBcCisJCSQod2Via2l0Mmd0a19oZWFkZXJzKSB8IFwKKwkJc2VkICdz
LHdlYl9raXQsd2Via2l0LCcgXAorCQk+IHhnZW4tZ3RjIFwKKwkmJiBjcCB4Z2VuLWd0YyAkQCBc
CisJJiYgcm0gLWYgeGdlbi1ndGMKKwogQ0xFQU5GSUxFUyArPSBcCiAJJChCVUlMVF9TT1VSQ0VT
KSBcCisJJCh0b3BfYnVpbGRkaXIpL3N0YW1wLXdlYmtpdDJlbnVtdHlwZXMgXAogCSQodG9wX2J1
aWxkZGlyKS9zdGFtcC13ZWJraXQyZ3RraGVhZGVycyBcCiAJJCh0b3BfYnVpbGRkaXIpL1Byb2dy
YW1zL1dlYktpdFdlYlByb2Nlc3MKIApAQCAtOTg3LDEwICsxMDQyLDEyIEBAIERJU1RDTEVBTkZJ
TEVTICs9IFwKICMgVW5pdCB0ZXN0cwogVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvdW5pdHRl
c3RzL3dlYmtpdDIvdGVzdHdlYmNvbnRleHQgXAotCVByb2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQy
L3Rlc3R3ZWJ2aWV3CisJUHJvZ3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIvdGVzdHdlYnZpZXcgXAor
CVByb2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQyL3Rlc3Rsb2FkaW5nCiAKIG5vaW5zdF9QUk9HUkFN
UyArPSAkKFRFU1RfUFJPR1MpCiB3ZWJraXQyX3Rlc3RzX2NmbGFncyA9IFwKKwktRFdFQktJVF9F
WEVDX1BBVEg9XCIke3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIpL1Byb2dyYW1zXCIgXAogCS1J
JChzcmNkaXIpL1NvdXJjZSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIgXAogCS1JJCh0
b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCkBAIC0xMDIzLDYg
KzEwODAsMTEgQEAgUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdlYnZpZXdfQ0ZMQUdT
ID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rl
c3R3ZWJ2aWV3X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfdW5pdHRl
c3RzX3dlYmtpdDJfdGVzdHdlYnZpZXdfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQogCitQcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0bG9hZGluZ19TT1VSQ0VTID0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYworUHJvZ3Jh
bXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdfQ0ZMQUdTID0gJCh3ZWJraXQyX3Rlc3Rz
X2NmbGFncykKK1Byb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3Rsb2FkaW5nX0xEQUREID0g
JCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxv
YWRpbmdfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCiAjIFdlYktpdFdlYlBy
b2Nlc3MKIGxpYmV4ZWNfUFJPR1JBTVMgKz0gXAogCVByb2dyYW1zL1dlYktpdFdlYlByb2Nlc3MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9y
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTNkZDAzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwCkBA
IC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTHVjYSBCcnVubyA8bGV0
aGFsbWFuODhAZ21haWwuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
RXJyb3IuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvRXJyb3JzR3RrLmg+CisKK0dRdWFyayB3ZWJr
aXRfbmV0d29ya19lcnJvcl9xdWFyayh2b2lkKQoreworICAgIHJldHVybiBnX3F1YXJrX2Zyb21f
c3RhdGljX3N0cmluZyhXZWJDb3JlOjplcnJvckRvbWFpbk5ldHdvcmspOworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmI4Zjc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaApAQCAtMCwwICsxLDQzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEx1Y2EgQnJ1bm8gPGxldGhhbG1hbjg4QGdtYWls
LmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRFcnJvcl9oCisjZGVmaW5lIFdlYktpdEVycm9yX2gKKworI2lu
Y2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX05FVFdPUktfRVJST1Igd2Via2l0X25ldHdvcmtfZXJyb3Jf
cXVhcmsgKCkKKwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfTkVUV09SS19FUlJPUl9GQUlM
RUQgICAgICAgICAgICAgID0gMzk5LAorICAgIFdFQktJVF9ORVRXT1JLX0VSUk9SX1RSQU5TUE9S
VCAgICAgICAgICAgPSAzMDAsCisgICAgV0VCS0lUX05FVFdPUktfRVJST1JfVU5LTk9XTl9QUk9U
T0NPTCAgICA9IDMwMSwKKyAgICBXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQgICAgICAg
ICAgID0gMzAyLAorICAgIFdFQktJVF9ORVRXT1JLX0VSUk9SX0ZJTEVfRE9FU19OT1RfRVhJU1Qg
PSAzMDMKK30gV2ViS2l0TmV0d29ya0Vycm9yOworCitXS19FWFBPUlQgR1F1YXJrCit3ZWJraXRf
bmV0d29ya19lcnJvcl9xdWFyayAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApp
bmRleCA4ODEwNzk5Li43ZGYwMzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjEsNDEgKzIxLDY1IEBACiAjaW5jbHVk
ZSAiV2ViS2l0V2ViVmlldy5oIgogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJXZWJLaXRFbnVtVHlwZXMuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0UHJpdmF0
ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9XS1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogZW51bSB7CisgICAgTE9BRF9TVEFUVVNfQ0hBTkdFRCwKKyAg
ICBMT0FEX1BST0dSRVNTX0NIQU5HRUQsCisKKyAgICBMQVNUX1NJR05BTAorfTsKKworZW51bSB7
CiAgICAgUFJPUF8wLAogCi0gICAgUFJPUF9XRUJfQ09OVEVYVAorICAgIFBST1BfV0VCX0NPTlRF
WFQsCisgICAgUFJPUF9VUkksCisgICAgUFJPUF9JU19MT0FESU5HCiB9OwogCiBzdHJ1Y3QgX1dl
YktpdFdlYlZpZXdQcml2YXRlIHsKICAgICBXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0OworICAg
IEdSZWZQdHI8R1NpbXBsZUFzeW5jUmVzdWx0PiBsb2FkUmVzdWx0OworICAgIGdib29sZWFuIGlz
TG9hZGluZzsKKyAgICBDU3RyaW5nIHVyaTsKIH07CiAKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdMb2FkZXJDbGllbnRJbml0KFdlYktpdFdlYlZpZXcqKTsKK3N0YXRpYyB2b2lkIHdlYmtpdFdl
YlZpZXdMb2FkQ2FuY2VsbGVkKEdDYW5jZWxsYWJsZSosIFdlYktpdFdlYlZpZXcqKTsKKworc3Rh
dGljIGd1aW50IHdlYmtpdFdlYlZpZXdTaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKwog
R19ERUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXcsIFdFQktJVF9UWVBF
X1dFQl9WSUVXX0JBU0UpCiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChH
T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9X
RUJfVklFVyhvYmplY3QpOworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmll
dy0+cHJpdjsKKworICAgIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXRUJLSVRfV0VC
X1ZJRVdfQkFTRSh3ZWJWaWV3KSwgd2Via2l0V2ViQ29udGV4dEdldENvbnRleHQocHJpdi0+Y29u
dGV4dCksIDApOwogCi0gICAgd2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdFQktJVF9X
RUJfVklFV19CQVNFKHdlYlZpZXcpLCB3ZWJraXRXZWJDb250ZXh0R2V0Q29udGV4dCh3ZWJWaWV3
LT5wcml2LT5jb250ZXh0KSwgMCk7CisgICAgd2Via2l0V2ViVmlld0xvYWRlckNsaWVudEluaXQo
d2ViVmlldyk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdTZXRQcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcGFyYW1TcGVjKQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXct
PnByaXY7CiAKICAgICBzd2l0Y2ggKHByb3BJZCkgewogICAgIGNhc2UgUFJPUF9XRUJfQ09OVEVY
VDoKLSAgICAgICAgd2ViVmlldy0+cHJpdi0+Y29udGV4dCA9IFdFQktJVF9XRUJfQ09OVEVYVChn
X3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKTsKKyAgICAgICAgcHJpdi0+Y29udGV4dCA9IFdFQktJ
VF9XRUJfQ09OVEVYVChnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOwpAQCAtNjUsMTAgKzg5LDE3IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdFdlYlZpZXdTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJ
ZCwgY29uc3QgR1ZhbHVlCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBh
cmFtU3BlYykKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KG9iamVjdCk7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2
OwogCiAgICAgc3dpdGNoIChwcm9wSWQpIHsKICAgICBjYXNlIFBST1BfV0VCX0NPTlRFWFQ6Ci0g
ICAgICAgIGdfdmFsdWVfdGFrZV9vYmplY3QodmFsdWUsIHdlYlZpZXctPnByaXYtPmNvbnRleHQp
OworICAgICAgICBnX3ZhbHVlX3Rha2Vfb2JqZWN0KHZhbHVlLCBwcml2LT5jb250ZXh0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1VSSToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9JU19MT0FESU5HOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29s
ZWFuKHZhbHVlLCB3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKQEAgLTc3LDcgKzEwOCwxMCBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wSWQsIEdWYWx1ZSogdmFsdQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5p
dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewotICAgIHdlYlZpZXctPnByaXYgPSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUod2ViVmlldywgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktp
dFdlYlZpZXdQcml2YXRlKTsKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IEdfVFlQ
RV9JTlNUQU5DRV9HRVRfUFJJVkFURSh3ZWJWaWV3LCBXRUJLSVRfVFlQRV9XRUJfVklFVywgV2Vi
S2l0V2ViVmlld1ByaXZhdGUpOworICAgIHdlYlZpZXctPnByaXYgPSBwcml2OworICAgIG5ldyAo
cHJpdikgV2ViS2l0V2ViVmlld1ByaXZhdGUoKTsKKyAgICB3ZWJWaWV3LT5wcml2LT5pc0xvYWRp
bmcgPSBGQUxTRTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQo
V2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCkBAIC04OCw4ICsxMjIsNiBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdl
YlZpZXdDbGFzcykKICAgICBnT2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdFdlYlZp
ZXdTZXRQcm9wZXJ0eTsKICAgICBnT2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdFdl
YlZpZXdHZXRQcm9wZXJ0eTsKIAotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSh3ZWJWaWV3
Q2xhc3MsIHNpemVvZihXZWJLaXRXZWJWaWV3UHJpdmF0ZSkpOwotCiAgICAgLyoqCiAgICAgICog
V2ViS2l0V2ViVmlldzp3ZWItY29udGV4dDoKICAgICAgKgpAQCAtMTAxLDYgKzEzMywzMzEgQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNz
KiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJUaGUgd2ViIGNvbnRleHQgZm9yIHRoZSB2aWV3IiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZ
UEVfV0VCX0NPTlRFWFQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklU
RSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisgICAgLyoqCisgICAgICogV2ViS2l0V2Vi
Vmlldzp1cmk6CisgICAgICoKKyAgICAgKiBUaGUgY3VycmVudCBVUkkgb2YgdGhlIGNvbnRlbnRz
IGRpc3BsYXllZCBieSB0aGUgdmlldy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfVVJJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygidXJpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlVSSSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDdXJyZW50IFVSSSBvZiB0aGUgY29udGVu
dHMgZGlzcGxheWVkIGJ5IHRoZSB2aWV3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
LyoqCisgICAgICogV2ViS2l0V2ViVmlldzppcy1sb2FkaW5nOgorICAgICAqCisgICAgICogV2hl
dGhlciB0aGUgdmlldyBpcyBjdXJyZW50bHkgbG9hZGluZyBhIHJlc291cmNlIG9yIG5vdC4KKyAg
ICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfSVNfTE9BRElORywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKCJp
cy1sb2FkaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJJcyBMb2FkaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaGV0aGVyIHRoZSB2aWV3IGlzIGN1cnJlbnRs
eSBsb2FkaW5nIGEgcmVzb3VyY2Ugb3Igbm90IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6bG9hZC1zdGF0dXMtY2hhbmdlZDoK
KyAgICAgKiBAd2ViVmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0
ZWQKKyAgICAgKiBAc3RhdHVzOiB0aGUgY3VycmVudCAjV2ViS2l0TG9hZFN0YXR1cworICAgICAq
CisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIEB3ZWJWaWV3IGlzIGxvYWRpbmcg
YSByZXNvdXJjZQorICAgICAqIGFuZCB0aGUgc3RhdHVzIG9mIHRoZSBsb2FkIHByb2Nlc3MgY2hh
bmdlcy4KKyAgICAgKi8KKyAgICB3ZWJraXRXZWJWaWV3U2lnbmFsc1tMT0FEX1NUQVRVU19DSEFO
R0VEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygibG9hZC1zdGF0dXMtY2hhbmdlZCIsCisgICAg
ICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xhc3MpLAorICAgICAg
ICAgICAgICAgICAgICAgKEdTaWduYWxGbGFncylHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAg
ICAgICAgICAgICAgIDAsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICBnX2NjbG9z
dXJlX21hcnNoYWxfVk9JRF9fRU5VTSwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05F
LCAxLAorICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfTE9BRF9TVEFUVVMpOworCisg
ICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6bG9hZC1wcm9ncmVzcy1jaGFuZ2VkOgorICAg
ICAqIEB3ZWJWaWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAgICAgKiBAcHJvZ3Jlc3M6IHRoZSBs
b2FkIHByb2dyZXNzIGFzIGEgZG91YmxlIGJldHdlZW4gMC4wIGFuZCAxLjAsIGluY2x1c2l2ZQor
ICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIEB3ZWJWaWV3IGlzIGxv
YWRpbmcgYSByZXNvdXJjZQorICAgICAqIGFuZCB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIGxvYWQgY2hh
bmdlcy4KKyAgICAgKi8KKyAgICB3ZWJraXRXZWJWaWV3U2lnbmFsc1tMT0FEX1BST0dSRVNTX0NI
QU5HRURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJsb2FkLXByb2dyZXNzLWNoYW5nZWQiLAor
ICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZ09iamVjdENsYXNzKSwKKyAg
ICAgICAgICAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpR19TSUdOQUxfUlVOX0xBU1QsCisgICAg
ICAgICAgICAgICAgICAgICAwLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgZ19j
Y2xvc3VyZV9tYXJzaGFsX1ZPSURfX0RPVUJMRSwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQ
RV9OT05FLCAxLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0RPVUJMRSk7CisKKyAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUod2ViVmlld0NsYXNzLCBzaXplb2YoV2ViS2l0V2ViVmll
d1ByaXZhdGUpKTsKK30KKworLy8gTG9hZGVyIGNsaWVudC4KK3R5cGVkZWYgc3RydWN0IHsKKyAg
ICBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlOworICAgIGd1bG9uZyBjYW5jZWxsZWRJZDsKK30g
TG9hZERhdGE7CisKK3N0YXRpYyB2b2lkIGxvYWREYXRhRnJlZShMb2FkRGF0YSogbG9hZERhdGEp
Cit7CisgICAgaWYgKEdfVU5MSUtFTFkoIWxvYWREYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ19jYW5jZWxsYWJsZV9kaXNjb25uZWN0KGxvYWREYXRhLT5jYW5jZWxsYWJsZSwgbG9hZERh
dGEtPmNhbmNlbGxlZElkKTsKKyAgICBnX29iamVjdF91bnJlZihsb2FkRGF0YS0+Y2FuY2VsbGFi
bGUpOworICAgIGdfc2xpY2VfZnJlZShMb2FkRGF0YSwgbG9hZERhdGEpOworfQorCitzdGF0aWMg
TG9hZERhdGEqIGxvYWREYXRhTmV3KEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsIGdwb2ludGVy
IGNhbmNlbGxlZENhbGxiYWNrRGF0YSkKK3sKKyAgICBMb2FkRGF0YSogbG9hZERhdGEgPSBnX3Ns
aWNlX25ldzAoTG9hZERhdGEpOworCisgICAgbG9hZERhdGEtPmNhbmNlbGxhYmxlID0gY2FuY2Vs
bGFibGUgPyBzdGF0aWNfY2FzdDxHQ2FuY2VsbGFibGUqPihnX29iamVjdF9yZWYoY2FuY2VsbGFi
bGUpKSA6IGdfY2FuY2VsbGFibGVfbmV3KCk7CisgICAgbG9hZERhdGEtPmNhbmNlbGxlZElkID0g
Z19jYW5jZWxsYWJsZV9jb25uZWN0KGxvYWREYXRhLT5jYW5jZWxsYWJsZSwgR19DQUxMQkFDSyh3
ZWJraXRXZWJWaWV3TG9hZENhbmNlbGxlZCksIGNhbmNlbGxlZENhbGxiYWNrRGF0YSwgMCk7CisK
KyAgICByZXR1cm4gbG9hZERhdGE7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdOb3Rp
ZnlMb2FkU3RhdHVzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRTdGF0dXMgc3Rh
dHVzKQoreworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsK
KyAgICBpZiAoIXByaXYtPmxvYWRSZXN1bHQpCisgICAgICAgIHJldHVybjsKKworICAgIExvYWRE
YXRhKiBsb2FkRGF0YSA9IHN0YXRpY19jYXN0PExvYWREYXRhKj4oZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIocHJpdi0+bG9hZFJlc3VsdC5nZXQoKSkpOworICAgIGlm
IChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChsb2FkRGF0YS0+Y2FuY2VsbGFibGUpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHdlYmtpdFdlYlZpZXdT
aWduYWxzW0xPQURfU1RBVFVTX0NIQU5HRURdLCAwLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3Tm90aWZ5TG9hZFByb2dyZXNzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGdkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3
ZWJWaWV3LT5wcml2OworICAgIGlmICghcHJpdi0+bG9hZFJlc3VsdCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgTG9hZERhdGEqIGxvYWREYXRhID0gc3RhdGljX2Nhc3Q8TG9hZERhdGEqPihnX3Np
bXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19ncG9pbnRlcihwcml2LT5sb2FkUmVzdWx0Lmdl
dCgpKSk7CisgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGxvYWREYXRhLT5jYW5j
ZWxsYWJsZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywg
d2Via2l0V2ViVmlld1NpZ25hbHNbTE9BRF9QUk9HUkVTU19DSEFOR0VEXSwgMCwgcHJvZ3Jlc3Mp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3VXBkYXRlSXNMb2FkaW5nKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIGdib29sZWFuIGlzTG9hZGluZykKK3sKKyAgICBXZWJLaXRXZWJWaWV3
UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgaWYgKHByaXYtPmlzTG9hZGluZyA9
PSBpc0xvYWRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPmlzTG9hZGluZyA9IGlz
TG9hZGluZzsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyksICJpcy1sb2Fk
aW5nIik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdVcGRhdGVVcmkoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgV0tVUkxSZWYgdXJsKQoreworICAgIGlmICghdXJsKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7
CisgICAgY29uc3QgQ1N0cmluZyYgdXJsU3RyaW5nID0gdG9JbXBsKHVybCktPnN0cmluZygpLnV0
ZjgoKTsKKyAgICBpZiAodXJsU3RyaW5nID09IHByaXYtPnVyaSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcHJpdi0+dXJpID0gdXJsU3RyaW5nOworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVD
VCh3ZWJWaWV3KSwgInVyaSIpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3TG9hZEZp
bmlzaGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgV2ViS2l0V2ViVmlld1ByaXZh
dGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworICAgIGlmICghcHJpdi0+bG9hZFJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgd2Via2l0V2ViVmlld1VwZGF0ZUlzTG9hZGluZyh3ZWJWaWV3
LCBGQUxTRSk7CisgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKHByaXYtPmxvYWRS
ZXN1bHQuZ2V0KCkpOworICAgIHByaXYtPmxvYWRSZXN1bHQgPSAwOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3TG9hZEZhaWxlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXS0Vycm9y
UmVmIGVycm9yKQoreworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+
cHJpdjsKKyAgICBpZiAoIXByaXYtPmxvYWRSZXN1bHQpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvbnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IgPSB0b0ltcGwoZXJyb3IpLT5wbGF0
Zm9ybUVycm9yKCk7CisgICAgR0Vycm9yKiB3ZWJFcnJvciA9IGdfZXJyb3JfbmV3X2xpdGVyYWwo
Z19xdWFya19mcm9tX3N0cmluZyhyZXNvdXJjZUVycm9yLmRvbWFpbigpLnV0ZjgoKS5kYXRhKCkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlRXJy
b3IuZXJyb3JDb2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzb3VyY2VFcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF90YWtlX2Vycm9yKHByaXYtPmxvYWRSZXN1bHQuZ2V0
KCksIHdlYkVycm9yKTsKKyAgICB3ZWJraXRXZWJWaWV3TG9hZEZpbmlzaGVkKHdlYlZpZXcpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0xvYWRTdG9wSWRsZShncG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdl
dFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UodXNlckRhdGEpKTsKKyAgICBXS1BhZ2VTdG9wTG9h
ZGluZyh0b0FQSShwYWdlKSk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdFdlYlZpZXdMb2FkQ2FuY2VsbGVkKEdDYW5jZWxsYWJsZSosIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCit7CisgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgdGhyZWFk
cywgc28gc3RvcCBsb2FkIGluIG1haW4gdGhyZWFkLgorICAgIGdfaWRsZV9hZGQod2Via2l0V2Vi
Vmlld0xvYWRTdG9wSWRsZSwgd2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdDYW5jZWxDdXJyZW50TG9hZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIFdlYktp
dFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAgICBpZiAoIXByaXYtPmxv
YWRSZXN1bHQpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9z
ZXRfZXJyb3IocHJpdi0+bG9hZFJlc3VsdC5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9D
QU5DRUxMRUQsICIlcyIsICJPcGVyYXRpb24gd2FzIGNhbmNlbGxlZCIpOworICAgIHdlYmtpdFdl
YlZpZXdMb2FkRmluaXNoZWQod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdL
VHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBpZiAoIVdL
RnJhbWVJc01haW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyk7CisgICAgV0tVUkxS
ZWYgdXJsID0gV0tGcmFtZUNvcHlQcm92aXNpb25hbFVSTChmcmFtZSk7CisgICAgd2Via2l0V2Vi
Vmlld1VwZGF0ZVVyaSh3ZWJWaWV3LCB1cmwpOworICAgIGlmICh1cmwpCisgICAgICAgIFdLUmVs
ZWFzZSh1cmwpOworCisgICAgd2Via2l0V2ViVmlld05vdGlmeUxvYWRTdGF0dXMod2ViVmlldywg
V0VCS0lUX0xPQURfUFJPVklTSU9OQUwpOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZlU2Vy
dmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tG
cmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoreworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhjbGllbnRJ
bmZvKTsKKyAgICBXS1VSTFJlZiB1cmwgPSBXS0ZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKGZyYW1l
KTsKKyAgICB3ZWJraXRXZWJWaWV3VXBkYXRlVXJpKHdlYlZpZXcsIHVybCk7CisgICAgaWYgKHVy
bCkKKyAgICAgICAgV0tSZWxlYXNlKHVybCk7CisKKyAgICB3ZWJraXRXZWJWaWV3Tm90aWZ5TG9h
ZFN0YXR1cyh3ZWJWaWV3LCBXRUJLSVRfTE9BRF9SRURJUkVDVF9GT1JfUFJPVklTSU9OQUwpOwor
fQorCitzdGF0aWMgdm9pZCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUo
V0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLRXJyb3JSZWYgZXJyb3IsIFdLVHlw
ZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBpZiAoIVdLRnJh
bWVJc01haW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyk7CisgICAgV0tVUkxSZWYg
dXJsID0gV0tGcmFtZUNvcHlQcm92aXNpb25hbFVSTChmcmFtZSk7CisgICAgd2Via2l0V2ViVmll
d1VwZGF0ZVVyaSh3ZWJWaWV3LCB1cmwpOworICAgIGlmICh1cmwpCisgICAgICAgIFdLUmVsZWFz
ZSh1cmwpOworCisgICAgd2Via2l0V2ViVmlld0xvYWRGYWlsZWQod2ViVmlldywgZXJyb3IpOwor
fQorCitzdGF0aWMgdm9pZCBkaWRDb21taXRMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdL
RnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKK3sKKyAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoY2xpZW50
SW5mbyk7CisgICAgV0tVUkxSZWYgdXJsID0gV0tGcmFtZUNvcHlVUkwoZnJhbWUpOworICAgIHdl
YmtpdFdlYlZpZXdVcGRhdGVVcmkod2ViVmlldywgdXJsKTsKKyAgICBpZiAodXJsKQorICAgICAg
ICBXS1JlbGVhc2UodXJsKTsKKworICAgIHdlYmtpdFdlYlZpZXdOb3RpZnlMb2FkU3RhdHVzKHdl
YlZpZXcsIFdFQktJVF9MT0FEX0NPTU1JVFRFRCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZpbmlz
aERvY3VtZW50TG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBX
S1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgaWYgKCFX
S0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2
b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFt
ZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGlm
ICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKTsKKyAgICB3
ZWJraXRXZWJWaWV3VXBkYXRlSXNMb2FkaW5nKHdlYlZpZXcsIEZBTFNFKTsKKyAgICB3ZWJraXRX
ZWJWaWV3Tm90aWZ5TG9hZFN0YXR1cyh3ZWJWaWV3LCBXRUJLSVRfTE9BRF9GSU5JU0hFRCk7Cisg
ICAgd2Via2l0V2ViVmlld0xvYWRGaW5pc2hlZCh3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQg
ZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBm
cmFtZSwgV0tFcnJvclJlZiBlcnJvciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQoreworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgd2Via2l0V2ViVmlld0xvYWRGYWlsZWQoV0VCS0lUX1dFQl9WSUVX
KGNsaWVudEluZm8pLCBlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZpcnN0VmlzdWFsbHlO
b25FbXB0eUxheW91dEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBX
S1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgaWYgKCFX
S0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJraXRX
ZWJWaWV3Tm90aWZ5TG9hZFN0YXR1cyhXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIFdFQktJ
VF9MT0FEX0ZJUlNUX1ZJU1VBTExZX05PTl9FTVBUWV9MQVlPVVQpOworfQorCitzdGF0aWMgdm9p
ZCBkaWRTdGFydFByb2dyZXNzKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoreworICAgIHdlYmtpdFdlYlZpZXdOb3RpZnlMb2FkUHJvZ3Jlc3MoV0VCS0lUX1dFQl9WSUVX
KGNsaWVudEluZm8pLCAwLik7Cit9CisKK3N0YXRpYyB2b2lkIGRpZENoYW5nZVByb2dyZXNzKFdL
UGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHdlYmtpdFdlYlZp
ZXdOb3RpZnlMb2FkUHJvZ3Jlc3MoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCBXS1BhZ2VH
ZXRFc3RpbWF0ZWRQcm9ncmVzcyhwYWdlKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaFBy
b2dyZXNzKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHdl
YmtpdFdlYlZpZXdOb3RpZnlMb2FkUHJvZ3Jlc3MoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8p
LCAxLik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdMb2FkZXJDbGllbnRJbml0KFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgV0tQYWdlTG9hZGVyQ2xpZW50IGxvYWRDbGll
bnQgPSB7CisgICAgICAgIGtXS1BhZ2VMb2FkZXJDbGllbnRDdXJyZW50VmVyc2lvbiwKKyAgICAg
ICAgd2ViVmlldywgIC8vIGNsaWVudEluZm8KKyAgICAgICAgZGlkU3RhcnRQcm92aXNpb25hbExv
YWRGb3JGcmFtZSwKKyAgICAgICAgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWUsCisgICAgICAgIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JG
b3JGcmFtZSwKKyAgICAgICAgZGlkQ29tbWl0TG9hZEZvckZyYW1lLAorICAgICAgICBkaWRGaW5p
c2hEb2N1bWVudExvYWRGb3JGcmFtZSwKKyAgICAgICAgZGlkRmluaXNoTG9hZEZvckZyYW1lLAor
ICAgICAgICBkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lLAorICAgICAgICAwLCAgICAgICAv
LyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUKKyAgICAgICAgMCwgICAgICAgLy8g
ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUKKyAgICAgICAgMCwgICAgICAgLy8gZGlkRmlyc3RMYXlv
dXRGb3JGcmFtZQorICAgICAgICBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFt
ZSwKKyAgICAgICAgMCwgICAgICAgLy8gZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5CisgICAg
ICAgIDAsICAgICAgIC8vIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRGb3JGcmFtZQorICAgICAg
ICAwLCAgICAgICAvLyBkaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZQorICAgICAgICAwLCAg
ICAgICAvLyBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlSW5GcmFtZQorICAg
ICAgICAwLCAgICAgICAvLyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VJbkZyYW1l
CisgICAgICAgIGRpZFN0YXJ0UHJvZ3Jlc3MsCisgICAgICAgIGRpZENoYW5nZVByb2dyZXNzLAor
ICAgICAgICBkaWRGaW5pc2hQcm9ncmVzcywKKyAgICAgICAgMCwgICAgICAgLy8gZGlkQmVjb21l
VW5yZXNwb25zaXZlCisgICAgICAgIDAsICAgICAgIC8vIGRpZEJlY29tZVJlc3BvbnNpdmUKKyAg
ICAgICAgMCwgICAgICAgLy8gcHJvY2Vzc0RpZENyYXNoCisgICAgICAgIDAsICAgICAgIC8vIGRp
ZENoYW5nZUJhY2tGb3J3YXJkTGlzdAorICAgICAgICAwLCAgICAgICAvLyBzaG91bGRHb1RvQmFj
a0ZvcndhcmRMaXN0SXRlbQorICAgICAgICAwICAgICAgICAvLyBkaWRGYWlsVG9Jbml0aWFsaXpl
UGx1Z2luCisgICAgfTsKKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFz
ZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpOworICAgIFdLUGFnZVNldFBh
Z2VMb2FkZXJDbGllbnQodG9BUEkocGFnZSksICZsb2FkQ2xpZW50KTsKIH0KIAogLy8gUHVibGlj
IEFQSS4KQEAgLTE0OCwyNyArNTA1LDIwNyBAQCBXZWJLaXRXZWJDb250ZXh0KiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2NvbnRleHQoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKICAgICByZXR1cm4gd2Vi
Vmlldy0+cHJpdi0+Y29udGV4dDsKIH0KIAotdm9pZCB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmko
V2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgZ2NoYXIqIHVyaSkKKy8qKgorICogd2Via2l0
X3dlYl92aWV3X2xvYWRfdXJpOgorICogQHdlYlZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqIEB1
cmk6IGFuIFVSSSBzdHJpbmcKKyAqIEBjYW5jZWxsYWJsZTogb3B0aW9uYWwgI0dDYW5jZWxsYWJs
ZSBvYmplY3QsICVOVUxMIHRvIGlnbm9yZS4KKyAqIEBjYWxsYmFjazogYSAjR0FzeW5jUmVhZHlD
YWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9k
YXRhOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogUmVxdWVz
dHMgbG9hZGluZyBvZiB0aGUgc3BlY2lmaWVkIFVSSSBzdHJpbmcuCisgKgorICogV2hlbiB0aGUg
b3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4g
dGhlbiBjYWxsCisgKiB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmlfZmluaXNoKCkgdG8gZ2V0IHRo
ZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF91cmkoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgZ2NoYXIqIHVyaSwgR0NhbmNlbGxh
YmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIg
dXNlckRhdGEpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2Vi
VmlldykpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKIAorICAgIFdlYktpdFdlYlZpZXdQ
cml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAgICBMb2FkRGF0YSogbG9hZERhdGEgPSBs
b2FkRGF0YU5ldyhjYW5jZWxsYWJsZSwgd2ViVmlldyk7CisgICAgd2Via2l0V2ViVmlld0NhbmNl
bEN1cnJlbnRMb2FkKHdlYlZpZXcpOworICAgIHByaXYtPmxvYWRSZXN1bHQgPSBhZG9wdEdSZWYo
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyhHX09CSkVDVCh3ZWJWaWV3KSwgY2FsbGJhY2ssIHVz
ZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PGdwb2ludGVyPih3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF91cmkpKSk7CisgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIo
cHJpdi0+bG9hZFJlc3VsdC5nZXQoKSwgbG9hZERhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ry
b3lOb3RpZnk+KGxvYWREYXRhRnJlZSkpOworCiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
a2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpKTsKICAg
ICBXS1BhZ2VMb2FkVVJMKHRvQVBJKHBhZ2UpLCBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1
cmkpKTsKKyAgICB3ZWJraXRXZWJWaWV3VXBkYXRlSXNMb2FkaW5nKHdlYlZpZXcsIFRSVUUpOwor
fQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaV9maW5pc2g6CisgKiBAd2ViVmll
dzogYSAjV2ViS2l0V2ViVmlldworICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0LgorICogQGVy
cm9yOiBhICNHRXJyb3IsIG9yICVOVUxMCisgKgorICogRmluaXNoZXMgbG9hZCBVUkkgb3BlcmF0
aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoKS4KKyAqCisgKiBSZXR1
cm5zOiAlVFJVRSBpZiB0aGUgVVJJIHdhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLCAlRkFMU0Ugb3Ro
ZXJ3aXNlLgorICovCitnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmlfZmluaXNoKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmll
dyksIEZBTFNFKTsKKworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlUmVzdWx0ID0gR19T
SU1QTEVfQVNZTkNfUkVTVUxUKHJlc3VsdCk7CisgICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnKHNpbXBsZVJlc3VsdCkgPT0gd2Via2l0X3dlYl92
aWV3X2xvYWRfdXJpKTsKKworICAgIGlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRl
X2Vycm9yKHNpbXBsZVJlc3VsdCwgZXJyb3IpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAg
ICByZXR1cm4gVFJVRTsKIH0KIAotdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3KQorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nOgor
ICogQHdlYlZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBTdG9wcyBhbnkgb25nb2luZyBs
b2FkIGluIHRoZSBAd2ViVmlldy4gVGhlIGxvYWQgb3BlcmF0aW9uIHdpbGwKKyAqIGJlIGZpbmlz
aGVkIGFuZCB0aGUgI0dBc3luY1JlYWR5Q2FsbGJhY2sgb2YgdGhlIG9wZXJhdGlvbiB3aWxsCisg
KiBiZSBjYWxsZWQgd2l0aCAlV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEIGVycm9yLgor
ICoqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKFdlYktpdFdlYlZpZXcgKndl
YlZpZXcpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmll
dykpOwogCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2Owor
ICAgIGlmICghcHJpdi0+bG9hZFJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTG9hZERh
dGEqIGxvYWREYXRhID0gc3RhdGljX2Nhc3Q8TG9hZERhdGEqPihnX3NpbXBsZV9hc3luY19yZXN1
bHRfZ2V0X29wX3Jlc19ncG9pbnRlcihwcml2LT5sb2FkUmVzdWx0LmdldCgpKSk7CisgICAgZ19j
YW5jZWxsYWJsZV9jYW5jZWwobG9hZERhdGEtPmNhbmNlbGxhYmxlKTsKK30KKworLyoqCisgKiB3
ZWJraXRfd2ViX3ZpZXdfZ29fYmFjazoKKyAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJWaWV3Cisg
KiBAY2FuY2VsbGFibGU6IG9wdGlvbmFsICNHQ2FuY2VsbGFibGUgb2JqZWN0LCAlTlVMTCB0byBp
Z25vcmUuCisgKiBAY2FsbGJhY2s6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVu
IHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogdGhlIGRhdGEgdG8gcGFz
cyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIExvYWRzIHRoZSBwcmV2aW91cyBoaXN0b3J5
IGl0ZW0uCisgKgorICogV2hlbiB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBAY2FsbGJhY2sg
d2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4gdGhlbiBjYWxsCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ29f
YmFja19maW5pc2goKSB0byBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLgorICovCit2
b2lkIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdDYW5j
ZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2lu
dGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVX
KHdlYlZpZXcpKTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+
cHJpdjsKKyAgICBMb2FkRGF0YSogbG9hZERhdGEgPSBsb2FkRGF0YU5ldyhjYW5jZWxsYWJsZSwg
d2ViVmlldyk7CisgICAgd2Via2l0V2ViVmlld0NhbmNlbEN1cnJlbnRMb2FkKHdlYlZpZXcpOwor
ICAgIHByaXYtPmxvYWRSZXN1bHQgPSBhZG9wdEdSZWYoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25l
dyhHX09CSkVDVCh3ZWJWaWV3KSwgY2FsbGJhY2ssIHVzZXJEYXRhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9j
YXN0PGdwb2ludGVyPih3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjaykpKTsKKyAgICBnX3NpbXBsZV9h
c3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlcihwcml2LT5sb2FkUmVzdWx0LmdldCgpLCBs
b2FkRGF0YSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4obG9hZERhdGFGcmVlKSk7
CisKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VC
S0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpOwogICAgIFdLUGFnZUdvQmFjayh0b0FQSShwYWdl
KSk7CisgICAgd2Via2l0V2ViVmlld1VwZGF0ZUlzTG9hZGluZyh3ZWJWaWV3LCBUUlVFKTsKK30K
KworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFja19maW5pc2g6CisgKiBAd2ViVmlldzog
YSAjV2ViS2l0V2ViVmlldworICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0LgorICogQGVycm9y
OiBhICNHRXJyb3IsIG9yICVOVUxMCisgKgorICogRmluaXNoZXMgbG9hZCBwcmV2aW91cyBoaXN0
b3J5IGl0ZW0gb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjaygp
LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBwcmV2aW91cyBoaXN0b3J5IGl0ZW0gd2Fz
IHN1Y2Nlc3NmdWxseSBsb2FkZWQsICVGQUxTRSBvdGhlcndpc2UuCisgKi8KK2dib29sZWFuIHdl
YmtpdF93ZWJfdmlld19nb19iYWNrX2ZpbmlzaChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CisKKyAgICBHU2ltcGxl
QXN5bmNSZXN1bHQqIHNpbXBsZVJlc3VsdCA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVChyZXN1bHQp
OworICAgIGdfd2Fybl9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3Rh
ZyhzaW1wbGVSZXN1bHQpID09IHdlYmtpdF93ZWJfdmlld19nb19iYWNrKTsKKworICAgIGlmIChn
X3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yKHNpbXBsZVJlc3VsdCwgZXJyb3Ip
KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4gVFJVRTsKIH0KIAotdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorLyoqCisg
KiB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZDoKKyAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJW
aWV3CisgKiBAY2FuY2VsbGFibGU6IG9wdGlvbmFsICNHQ2FuY2VsbGFibGUgb2JqZWN0LCAlTlVM
TCB0byBpZ25vcmUuCisgKiBAY2FsbGJhY2s6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2Fs
bCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogdGhlIGRhdGEg
dG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIExvYWRzIHRoZSBuZXh0IGhpc3Rv
cnkgaXRlbS4KKyAqCisgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFj
ayB3aWxsIGJlIGNhbGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAqIHdlYmtpdF93ZWJfdmlld19n
b19mb3J3YXJkX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisg
Ki8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFj
aywgZ3BvaW50ZXIgdXNlckRhdGEpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
V0VCX1ZJRVcod2ViVmlldykpOwogCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3
ZWJWaWV3LT5wcml2OworICAgIExvYWREYXRhKiBsb2FkRGF0YSA9IGxvYWREYXRhTmV3KGNhbmNl
bGxhYmxlLCB3ZWJWaWV3KTsKKyAgICB3ZWJraXRXZWJWaWV3Q2FuY2VsQ3VycmVudExvYWQod2Vi
Vmlldyk7CisgICAgcHJpdi0+bG9hZFJlc3VsdCA9IGFkb3B0R1JlZihnX3NpbXBsZV9hc3luY19y
ZXN1bHRfbmV3KEdfT0JKRUNUKHdlYlZpZXcpLCBjYWxsYmFjaywgdXNlckRhdGEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkKSkpOworICAg
IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKHByaXYtPmxvYWRSZXN1
bHQuZ2V0KCksIGxvYWREYXRhLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihsb2Fk
RGF0YUZyZWUpKTsKKwogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNl
R2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSk7CiAgICAgV0tQYWdlR29Gb3J3
YXJkKHRvQVBJKHBhZ2UpKTsKKyAgICB3ZWJraXRXZWJWaWV3VXBkYXRlSXNMb2FkaW5nKHdlYlZp
ZXcsIFRSVUUpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkX2Zpbmlz
aDoKKyAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKiBAcmVzdWx0OiBhICNHQXN5bmNS
ZXN1bHQuCisgKiBAZXJyb3I6IGEgI0dFcnJvciwgb3IgJU5VTEwKKyAqCisgKiBGaW5pc2hlcyBs
b2FkIG5leHQgaGlzdG9yeSBpdGVtIG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X3dlYl92
aWV3X2dvX2ZvcndhcmQoKS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgbmV4dCBoaXN0
b3J5IGl0ZW0gd2FzIHN1Y2Nlc3NmdWxseSBsb2FkZWQsICVGQUxTRSBvdGhlcndpc2UuCisgKi8K
K2dib29sZWFuIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkX2ZpbmlzaChXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7
CisKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHNpbXBsZVJlc3VsdCA9IEdfU0lNUExFX0FTWU5D
X1JFU1VMVChyZXN1bHQpOworICAgIGdfd2Fybl9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9nZXRfc291cmNlX3RhZyhzaW1wbGVSZXN1bHQpID09IHdlYmtpdF93ZWJfdmlld19nb19mb3J3
YXJkX2ZpbmlzaCk7CisKKyAgICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9l
cnJvcihzaW1wbGVSZXN1bHQsIGVycm9yKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAg
cmV0dXJuIFRSVUU7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2dldF91cmk6CisgKiBA
d2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgVVJJ
IG9mIHRoZSBjb250ZW50cyBkaXNwbGF5ZWQgYnkgdGhlIEB3ZWJWaWV3CisgKgorICogUmV0dXJu
czogdGhlIFVSSSBvZiBAd2ViVmlldworICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYl92aWV3
X2dldF91cmkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIE5VTEwpOworCisgICAgcmV0dXJuIHdl
YlZpZXctPnByaXYtPnVyaS5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2lz
X2xvYWRpbmc6CisgKiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIFdoZXRoZXIg
QHdlYnZpZXcgaXMgY3VycmVudGx5IGxvYWRpbmcgYSByZXNvdXJjZS4KKyAqCisgKiBSZXR1cm5z
OiAlVFJVRSBpZiBAd2VidmlldyBpcyBjdXJyZW50bHkgbG9hZGluZyBhIHJlc291cmNlLCAlRkFM
U0Ugb3RoZXJ3aXNlLgorICovCitnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgRkFMU0UpOworCisgICAgcmV0dXJuIHdlYlZpZXctPnBy
aXYtPmlzTG9hZGluZzsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuaAppbmRleCBjY2YyNDZlLi44N2QwZWNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC02MCw2ICs2MCwz
NiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVz
ZXJ2ZWQ3KSAodm9pZCk7CiB9OwogCisvKioKKyAqIFdlYktpdExvYWRTdGF0dXMKKyAqIEBXRUJL
SVRfTE9BRF9QUk9WSVNJT05BTDogTm8gZGF0YSBoYXMgYmVlbiByZWNlaXZlZCB5ZXQsIGVtcHR5
CisgKiBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgdG8gcGVyZm9ybSB0aGUgbG9hZDsg
dGhlIGxvYWQgbWF5CisgKiBzdGlsbCBmYWlsIGZvciB0cmFuc3BvcnQgaXNzdWVzIHN1Y2ggYXMg
bm90IGJlaW5nIGFibGUgdG8gcmVzb2x2ZSBhCisgKiBuYW1lLCBvciBjb25uZWN0IHRvIGEgcG9y
dC4KKyAqIEBXRUJLSVRfTE9BRF9SRURJUkVDVF9GT1JfUFJPVklTSU9OQUw6IEEgc2VydmVyIHJl
ZGlyZWN0IG9jY3VycmVkCisgKiBkdXJpbmcgdGhlIHByb3Zpc2lvbmFsIGxvYWQuCisgKiBAV0VC
S0lUX0xPQURfQ09NTUlUVEVEOiBUaGUgZmlyc3QgZGF0YSBjaHVuayBoYXMgYXJyaXZlZCwgbWVh
bmluZworICogdGhhdCB0aGUgbmVjZXNzYXJ5IHRyYW5zcG9ydCByZXF1aXJlbWVudHMgYXJlIHN0
YWJpbGlzaGVkLCBhbmQgdGhlCisgKiBsb2FkIGlzIGJlaW5nIHBlcmZvcm1lZC4KKyAqIEBXRUJL
SVRfTE9BRF9GSVJTVF9WSVNVQUxMWV9OT05fRU1QVFlfTEFZT1VUOiBUaGUgZmlyc3QgbGF5b3V0
IHdpdGgKKyAqIGFjdHVhbCB2aXNpYmxlIGNvbnRlbnQgaGFwcGVuZWQ7IG9uZSBvciBtb3JlIGxh
eW91dHMgbWF5IGhhdmUKKyAqIGhhcHBlbmVkIGJlZm9yZSB0aGF0IGNhdXNlZCBub3RoaW5nIHRv
IGJlIHZpc2libGUgb24gdGhlIHNjcmVlbiwKKyAqIGJlY2F1c2UgdGhlIGRhdGEgYXZhaWxhYmxl
IGF0IHRoZSB0aW1lIHdhcyBub3Qgc2lnbmlmaWNhbnQgZW5vdWdoLgorICogQFdFQktJVF9MT0FE
X0ZJTklTSEVEOiBUaGlzIHN0YXRlIG1lYW5zIHRoYXQgZXZlcnl0aGluZyB0aGF0IHdhcworICog
cmVxdWlyZWQgdG8gZGlzcGxheSB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQuCisgKi8KK3R5cGVk
ZWYgZW51bSB7CisgICAgV0VCS0lUX0xPQURfUFJPVklTSU9OQUwsCisgICAgV0VCS0lUX0xPQURf
UkVESVJFQ1RfRk9SX1BST1ZJU0lPTkFMLAorICAgIFdFQktJVF9MT0FEX0NPTU1JVFRFRCwKKyAg
ICBXRUJLSVRfTE9BRF9GSVJTVF9WSVNVQUxMWV9OT05fRU1QVFlfTEFZT1VULAorICAgIFdFQktJ
VF9MT0FEX0ZJTklTSEVECit9IFdlYktpdExvYWRTdGF0dXM7CisKK3R5cGVkZWYgdm9pZCAoKldl
YktpdExvYWRQcm9ncmVzc0NhbGxiYWNrKSAoV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgICAgICAgICAg
cHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdw
b2ludGVyICAgICAgICAgdXNlcl9kYXRhKTsKKwogV0tfRVhQT1JUIEdUeXBlCiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3R5cGUgICAgICAgICAodm9pZCk7CiAKQEAgLTY3LDIwICs5Nyw1MCBAQCBXS19F
WFBPUlQgR3RrV2lkZ2V0ICoKIHdlYmtpdF93ZWJfdmlld19uZXcgICAgICAgICAgICAgICh2b2lk
KTsKIAogV0tfRVhQT1JUIEd0a1dpZGdldCAqCi13ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29u
dGV4dCAoV2ViS2l0V2ViQ29udGV4dCAqY29udGV4dCk7Cit3ZWJraXRfd2ViX3ZpZXdfbmV3X3dp
dGhfY29udGV4dCAoV2ViS2l0V2ViQ29udGV4dCAgICpjb250ZXh0KTsKIAogV0tfRVhQT1JUIFdl
YktpdFdlYkNvbnRleHQgKgotd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0ICAgICAgKFdlYktp
dFdlYlZpZXcgKndlYl92aWV3KTsKK3dlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCAgICAgIChX
ZWJLaXRXZWJWaWV3ICAgICAgKndlYl92aWV3KTsKIAogV0tfRVhQT1JUIHZvaWQKLXdlYmtpdF93
ZWJfdmlld19sb2FkX3VyaSAgICAgICAgIChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgKnVyaSk7Cit3ZWJraXRf
d2ViX3ZpZXdfbG9hZF91cmkgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICp3ZWJfdmlldywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgKnVy
aSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAg
KmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jl
YWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3BvaW50ZXIgICAgICAgICAgICB1c2VyX2RhdGEpOworV0tfRVhQT1JUIGdib29sZWFuCit3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmlfZmluaXNoICAoV2ViS2l0V2ViVmlldyAgICAgICp3ZWJfdmll
dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAg
KnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAg
ICAgICAqKmVycm9yKTsKK1dLX0VYUE9SVCB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2Fk
aW5nICAgICAoV2ViS2l0V2ViVmlldyAgICAgICp3ZWJfaWV3KTsKIAogV0tfRVhQT1JUIHZvaWQK
LXdlYmtpdF93ZWJfdmlld19nb19iYWNrICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3
KTsKK3dlYmtpdF93ZWJfdmlld19nb19iYWNrICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
KndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJs
ZSAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBncG9pbnRlciAgICAgICAgICAgIHVzZXJfZGF0YSk7CitXS19FWFBPUlQgZ2Jvb2xl
YW4KK3dlYmtpdF93ZWJfdmlld19nb19iYWNrX2ZpbmlzaCAgIChXZWJLaXRXZWJWaWV3ICAgICAg
KndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3Vs
dCAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJv
ciAgICAgICAgICAgICoqZXJyb3IpOwogCiBXS19FWFBPUlQgdm9pZAotd2Via2l0X3dlYl92aWV3
X2dvX2ZvcndhcmQgICAgICAgKFdlYktpdFdlYlZpZXcgKndlYlZpZXcpOword2Via2l0X3dlYl92
aWV3X2dvX2ZvcndhcmQgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAqd2ViX3ZpZXcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICpjYW5jZWxs
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxi
YWNrIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVy
ICAgICAgICAgICAgdXNlcl9kYXRhKTsKKworV0tfRVhQT1JUIGdib29sZWFuCit3ZWJraXRfd2Vi
X3ZpZXdfZ29fZm9yd2FyZF9maW5pc2goV2ViS2l0V2ViVmlldyAgICAgICp3ZWJfdmlldywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgKnJlc3Vs
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAq
KmVycm9yKTsKKworV0tfRVhQT1JUIGNvbnN0IGdjaGFyICoKK3dlYmtpdF93ZWJfdmlld19nZXRf
dXJpICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgKndlYl92aWV3KTsKKworV0tfRVhQT1JU
IGdib29sZWFuCit3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyAgICAgICAoV2ViS2l0V2ViVmll
dyAgICAgICp3ZWJfdmlldyk7CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMzJiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jCkBAIC0wLDAgKzEs
NDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEd1c3Rhdm8gTm9yb25oYSBT
aWx2YQorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+
CisjaW5jbHVkZSA8d2Via2l0Mmd0ay5oPgorCisvKiBUaGlzIHN0cmluZyBoYXMgdG8gYmUgcmF0
aGVyIGJpZyBiZWNhdXNlIG9mIHRoZSBjYW5jZWxsZWQgdGVzdCAtIGl0CisgKiBsb29rcyBsaWtl
IHNvdXAgcmVmdXNlcyB0byBzZW5kIG9yIHJlY2VpdmUgYSB0b28gc21hbGwgY2h1bmsgKi8KKyNk
ZWZpbmUgSFRNTF9TVFJJTkcgIjxodG1sPjxib2R5PlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyE8L2JvZHk+PC9odG1sPiIKKworU291
cFVSSSAqYmFzZV91cmk7CisKKy8qIEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLworc3RhdGlj
IHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNn
LCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwgU291cENsaWVudENvbnRleHQq
IGNvbnRleHQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBf
TUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBf
U1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKKworICAgIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiLyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1zZywgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOworICAgICAgICBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19hcHBlbmQobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAiTG9jYXRpb24iLCAiL3Rl
c3RfbG9hZGluZ19zdGF0dXMiKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIv
dGVzdF9sb2FkaW5nX3N0YXR1cyIpIHx8IGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5n
X3N0YXR1czIiKSkKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBIVE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RS
SU5HKSk7CisgICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRfZXJyb3Ii
KSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX0NB
TlRfQ09OTkVDVCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9h
ZGluZ19jYW5jZWxsZWQiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5j
b2RpbmcobXNnLT5yZXNwb25zZV9oZWFkZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOworICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIEhUTUxfU1RSSU5HLCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKKyAgICAgICAg
c291cF9zZXJ2ZXJfdW5wYXVzZV9tZXNzYWdlKHNlcnZlciwgbXNnKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2Vf
Ym9keSk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3
OworICAgIEdNYWluTG9vcCAqbG9vcDsKKyAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlOwor
ICAgIGdib29sZWFuIGhhc0JlZW5Qcm92aXNpb25hbDsKKyAgICBnYm9vbGVhbiBoYXNCZWVuUmVk
aXJlY3Q7CisgICAgZ2Jvb2xlYW4gaGFzQmVlbkNvbW1pdHRlZDsKKyAgICBnYm9vbGVhbiBoYXNC
ZWVuRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0OworICAgIGdib29sZWFuIGhhc0JlZW5GaW5p
c2hlZDsKK30gV2ViTG9hZGluZ0ZpeHR1cmU7CisKK3N0YXRpYyB2b2lkIHdlYkxvYWRpbmdGaXh0
dXJlU2V0dXAoV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkK
K3sKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmll
d19uZXcoKSk7CisgICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVF
KTsKKyAgICBmaXh0dXJlLT5jYW5jZWxsYWJsZSA9IE5VTEw7CisgICAgZ19vYmplY3RfcmVmX3Np
bmsoZml4dHVyZS0+d2ViVmlldyk7CisgICAgZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsID0g
RkFMU0U7CisgICAgZml4dHVyZS0+aGFzQmVlblJlZGlyZWN0ID0gRkFMU0U7CisgICAgZml4dHVy
ZS0+aGFzQmVlbkNvbW1pdHRlZCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc0JlZW5GaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuRmluaXNo
ZWQgPSBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2ViTG9hZGluZ0ZpeHR1cmVUZWFyZG93bihX
ZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGdf
b2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKGZp
eHR1cmUtPmxvb3ApOworICAgIGlmIChmaXh0dXJlLT5jYW5jZWxsYWJsZSkKKyAgICAgICAgZ19v
YmplY3RfdW5yZWYoZml4dHVyZS0+Y2FuY2VsbGFibGUpOworfQorCitzdGF0aWMgY2hhciAqZ2V0
VXJpRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIFNvdXBVUkkgKnVyaTsKKyAgICBj
aGFyICp1cmlfc3RyaW5nOworCisgICAgdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNl
X3VyaSwgcGF0aCk7CisgICAgdXJpX3N0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIEZB
TFNFKTsKKyAgICBzb3VwX3VyaV9mcmVlKHVyaSk7CisKKyAgICByZXR1cm4gdXJpX3N0cmluZzsK
K30KKworc3RhdGljIHZvaWQgbG9hZEZpbmlzaGVkQ2FsbGJhY2soR09iamVjdCAqb2JqZWN0LCBH
QXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgV2ViTG9hZGlu
Z0ZpeHR1cmUgKmZpeHR1cmUgPSAoV2ViTG9hZGluZ0ZpeHR1cmUgKil1c2VyRGF0YTsKKworICAg
IGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaV9maW5pc2goZml4dHVyZS0+d2ViVmll
dywgcmVzdWx0LCBOVUxMKSk7CisKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2xv
YWRpbmcoZml4dHVyZS0+d2ViVmlldykpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Q
cm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblJlZGlyZWN0KTsKKyAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydChmaXh0
dXJlLT5oYXNCZWVuRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KTsKKyAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNCZWVuRmluaXNoZWQpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJl
LT5sb29wKTsKK30KKworCitzdGF0aWMgdm9pZCBsb2FkU3RhdHVzQ2hhbmdlZENhbGxiYWNrKFdl
YktpdFdlYlZpZXcgKndlYlZpZXcsIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzLCBncG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSA9IChXZWJMb2FkaW5n
Rml4dHVyZSAqKXVzZXJEYXRhOworICAgIGNoYXIgKnByb3Zpc2lvbmFsVXJpU3RyaW5nID0gZ2V0
VXJpRm9yUGF0aCgiLyIpOworICAgIGNoYXIgKnVyaVN0cmluZyA9IGdldFVyaUZvclBhdGgoIi90
ZXN0X2xvYWRpbmdfc3RhdHVzIik7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgIGNhc2Ug
V0VCS0lUX0xPQURfUFJPVklTSU9OQUw6CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmll
d19pc19sb2FkaW5nKHdlYlZpZXcpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpLCA9PSwgcHJvdmlzaW9uYWxVcmlTdHJpbmcpOworICAg
ICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKKyAgICAgICAgZ19h
c3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCk7CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0
dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0Jl
ZW5GaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpOworICAgICAgICBmaXh0dXJlLT5oYXNCZWVu
UHJvdmlzaW9uYWwgPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FE
X1JFRElSRUNUX0ZPUl9QUk9WSVNJT05BTDoKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92
aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYl92aWV3X2dldF91cmkod2ViVmlldyksID09LCB1cmlTdHJpbmcpOworICAgICAgICBnX2Fz
c2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOworICAgICAgICBnX2Fzc2VydCghZml4
dHVyZS0+aGFzQmVlblJlZGlyZWN0KTsKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0Jl
ZW5Db21taXR0ZWQpOworICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkZpcnN0Vmlz
dWFsbHlOb25FbXB0eUxheW91dCk7CisgICAgICAgIGZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCA9
IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgor
ICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7Cisg
ICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSwg
PT0sIHVyaVN0cmluZyk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNp
b25hbCk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCk7CisgICAg
ICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKKyAgICAgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc0JlZW5GaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpOworICAgICAg
ICBmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXRUJLSVRfTE9BRF9GSVJTVF9WSVNVQUxMWV9OT05fRU1QVFlfTEFZT1VUOgorICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7CisgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSwgPT0sIHVy
aVN0cmluZyk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7
CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCk7CisgICAgICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOworICAgICAgICBnX2Fzc2VydCghZml4
dHVyZS0+aGFzQmVlbkZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCk7CisgICAgICAgIGZpeHR1
cmUtPmhhc0JlZW5GaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQgPSBUUlVFOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgorICAgICAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcod2ViVmlldykpOworICAgICAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl92aWV3X2dldF91cmkod2ViVmlldyksID09LCB1cmlTdHJpbmcpOwor
ICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOworICAgICAgICBn
X2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QpOworICAgICAgICBnX2Fzc2VydChmaXh0
dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKKyAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVl
bkZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCk7CisgICAgICAgIGZpeHR1cmUtPmhhc0JlZW5G
aW5pc2hlZCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGdf
YXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorCisgICAgZ19mcmVlKHByb3Zpc2lvbmFsVXJp
U3RyaW5nKTsKKyAgICBnX2ZyZWUodXJpU3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQgdGVzdExv
YWRpbmdTdGF0dXMoV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKK3sKKyAgICBjaGFyICp1cmlTdHJpbmc7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1
cmUtPndlYlZpZXcsICJsb2FkLXN0YXR1cy1jaGFuZ2VkIiwgR19DQUxMQkFDSyhsb2FkU3RhdHVz
Q2hhbmdlZENhbGxiYWNrKSwgZml4dHVyZSk7CisKKyAgICB1cmlTdHJpbmcgPSBnZXRVcmlGb3JQ
YXRoKCIvIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcs
IHVyaVN0cmluZywgTlVMTCwgbG9hZEZpbmlzaGVkQ2FsbGJhY2ssIGZpeHR1cmUpOworICAgIGdf
ZnJlZSh1cmlTdHJpbmcpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwor
fQorCitzdGF0aWMgdm9pZCBsb2FkRXJyb3JTdGF0dXNDaGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2Vi
VmlldyAqd2ViVmlldywgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMsIGdwb2ludGVyIHVzZXJEYXRh
KQoreworICAgIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlID0gKFdlYkxvYWRpbmdGaXh0dXJl
ICopdXNlckRhdGE7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgIGNhc2UgV0VCS0lUX0xP
QURfUFJPVklTSU9OQUw6CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19sb2Fk
aW5nKHdlYlZpZXcpKTsKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Qcm92aXNp
b25hbCk7CisgICAgICAgIGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCA9IFRSVUU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgorICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7CisgICAgICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0
dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKKyAgICAgICAgZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRl
ZCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6
CisgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7
CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgICAg
IGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOworICAgICAgICBnX2Fzc2VydCgh
Zml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBsb2FkRXJyb3JGaW5pc2hl
ZENhbGxiYWNrKEdPYmplY3QgKm9iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdwb2ludGVy
IHVzZXJEYXRhKQoreworICAgIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlID0gKFdlYkxvYWRp
bmdGaXh0dXJlICopdXNlckRhdGE7CisgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisKKyAgICBn
X2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpX2ZpbmlzaChmaXh0dXJlLT53ZWJWaWV3
LCByZXN1bHQsICZlcnJvcikpOworICAgIGdfYXNzZXJ0KGVycm9yKTsKKyAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKGZp
eHR1cmUtPndlYlZpZXcpKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkaW5nRXJyb3IoV2ViTG9hZGluZ0ZpeHR1cmUgKmZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBjaGFyICp1cmlTdHJpbmc7CisKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJsb2FkLXN0YXR1cy1jaGFuZ2Vk
IiwgR19DQUxMQkFDSyhsb2FkRXJyb3JTdGF0dXNDaGFuZ2VkQ2FsbGJhY2spLCBmaXh0dXJlKTsK
KworICAgIHVyaVN0cmluZyA9IGdldFVyaUZvclBhdGgoIi90ZXN0X2xvYWRfZXJyb3IiKTsKKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpU3RyaW5nLCBO
VUxMLCBsb2FkRXJyb3JGaW5pc2hlZENhbGxiYWNrLCBmaXh0dXJlKTsKKyAgICBnX2ZyZWUodXJp
U3RyaW5nKTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKKworICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoIWZpeHR1
cmUtPmhhc0JlZW5Db21taXR0ZWQpOworfQorCisvKiBDYW5jZWxsZWQgbG9hZCAqLworCitzdGF0
aWMgdm9pZCBsb2FkQ2FuY2VsbGVkRmluaXNoZWRDYWxsYmFjayhHT2JqZWN0ICpvYmplY3QsIEdB
c3luY1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJMb2FkaW5n
Rml4dHVyZSAqZml4dHVyZSA9IChXZWJMb2FkaW5nRml4dHVyZSAqKXVzZXJEYXRhOworICAgIEdF
cnJvciAqZXJyb3IgPSBOVUxMOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaV9maW5pc2goZml4dHVyZS0+d2ViVmlldywgcmVzdWx0LCAmZXJyb3IpKTsKKyAgICBnX2Fz
c2VydChlcnJvcik7CisgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRf
TkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEKSk7CisgICAgZ19l
cnJvcl9mcmVlKGVycm9yKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfaXNfbG9h
ZGluZyhmaXh0dXJlLT53ZWJWaWV3KSk7CisKKyAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUt
Pmxvb3ApOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY2FuY2VsVGhyZWFkKEdDYW5jZWxsYWJsZSAq
Y2FuY2VsbGFibGUpCit7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2FuY2VsbGFibGUpOwor
CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRDYW5jZWxsZWRTdGF0dXND
aGFuZ2VkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgV2ViS2l0TG9hZFN0YXR1cyBz
dGF0dXMsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0
dXJlID0gKFdlYkxvYWRpbmdGaXh0dXJlICopdXNlckRhdGE7CisKKyAgICBzd2l0Y2ggKHN0YXR1
cykgeworICAgIGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6CisgICAgICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKKyAgICAgICAgZ19hc3NlcnQo
IWZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgICAgIGZpeHR1cmUtPmhhc0JlZW5Q
cm92aXNpb25hbCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURf
Q09NTUlUVEVEOgorICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3
ZWJWaWV3KSk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7
CisgICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKKyAgICAgICAg
Zml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCA9IFRSVUU7CisgICAgICAgIGlmIChmaXh0dXJlLT5j
YW5jZWxsYWJsZSkgeworICAgICAgICAgICAgR1RocmVhZCAqY2FuY2VsX3RocmVhZCA9IGdfdGhy
ZWFkX2NyZWF0ZSgoR1RocmVhZEZ1bmMpY2FuY2VsVGhyZWFkLCBmaXh0dXJlLT5jYW5jZWxsYWJs
ZSwgVFJVRSwgTlVMTCk7CisgICAgICAgICAgICBnX3RocmVhZF9qb2luKGNhbmNlbF90aHJlYWQp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRp
bmcod2ViVmlldyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNI
RUQ6CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdExv
YWRpbmdDYW5jZWxsZWQoV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKK3sKKyAgICBjaGFyICp1cmlTdHJpbmc7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGZp
eHR1cmUtPndlYlZpZXcsICJsb2FkLXN0YXR1cy1jaGFuZ2VkIiwgR19DQUxMQkFDSyhsb2FkQ2Fu
Y2VsbGVkU3RhdHVzQ2hhbmdlZENhbGxiYWNrKSwgZml4dHVyZSk7CisKKyAgICB1cmlTdHJpbmcg
PSBnZXRVcmlGb3JQYXRoKCIvdGVzdF9sb2FkaW5nX2NhbmNlbGxlZCIpOworICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlTdHJpbmcsIE5VTEwsIGxvYWRD
YW5jZWxsZWRGaW5pc2hlZENhbGxiYWNrLCBmaXh0dXJlKTsKKyAgICBnX2ZyZWUodXJpU3RyaW5n
KTsKKworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKKworICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFz
QmVlbkNvbW1pdHRlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkaW5nQ2FuY2VsbGVkVGhy
ZWFkKFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7Cisg
ICAgY2hhciAqdXJpU3RyaW5nOworCisgICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJW
aWV3LCAibG9hZC1zdGF0dXMtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobG9hZENhbmNlbGxlZFN0YXR1
c0NoYW5nZWRDYWxsYmFjayksIGZpeHR1cmUpOworCisgICAgZml4dHVyZS0+Y2FuY2VsbGFibGUg
PSBnX2NhbmNlbGxhYmxlX25ldygpOworICAgIHVyaVN0cmluZyA9IGdldFVyaUZvclBhdGgoIi90
ZXN0X2xvYWRpbmdfY2FuY2VsbGVkIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZp
eHR1cmUtPndlYlZpZXcsIHVyaVN0cmluZywgZml4dHVyZS0+Y2FuY2VsbGFibGUsIGxvYWRDYW5j
ZWxsZWRGaW5pc2hlZENhbGxiYWNrLCBmaXh0dXJlKTsKKyAgICBnX2ZyZWUodXJpU3RyaW5nKTsK
KworICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKKworICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVl
bkNvbW1pdHRlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRHb0JhY2tTdGF0dXNDaGFuZ2VkQ2Fs
bGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMsIGdw
b2ludGVyIHVzZXJEYXRhKQoreworICAgIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlID0gKFdl
YkxvYWRpbmdGaXh0dXJlICopdXNlckRhdGE7CisKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAg
IGNhc2UgV0VCS0lUX0xPQURfUFJPVklTSU9OQUw6CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19pc19sb2FkaW5nKHdlYlZpZXcpKTsKKyAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUt
Pmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgICAgIGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25h
bCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVE
OgorICAgICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyh3ZWJWaWV3KSk7
CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgICAg
IGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKKyAgICAgICAgZml4dHVyZS0+
aGFzQmVlbkNvbW1pdHRlZCA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lU
X0xPQURfRklOSVNIRUQ6CisgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfaXNfbG9h
ZGluZyh3ZWJWaWV3KSk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNp
b25hbCk7CisgICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOworICAg
ICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkKTsKKyAgICAgICAgZml4dHVy
ZS0+aGFzQmVlbkZpbmlzaGVkID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBsb2FkR29CYWNrRmluaXNo
ZWRDYWxsYmFjayhHT2JqZWN0ICpvYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRl
ciB1c2VyRGF0YSkKK3sKKyAgICBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSA9IChXZWJMb2Fk
aW5nRml4dHVyZSAqKXVzZXJEYXRhOworCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2xv
YWRfdXJpX2ZpbmlzaChmaXh0dXJlLT53ZWJWaWV3LCByZXN1bHQsIE5VTEwpKTsKKyAgICBnX2Fz
c2VydChmaXh0dXJlLT5oYXNCZWVuRmluaXNoZWQpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfdmlld19pc19sb2FkaW5nKGZpeHR1cmUtPndlYlZpZXcpKTsKKworICAgIGdfbWFpbl9sb29w
X3F1aXQoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRXZW50QmFja1N0YXR1
c0NoYW5nZWRDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBXZWJLaXRMb2FkU3RhdHVz
IHN0YXR1cywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgY2hhciAqdXJpU3RyaW5nID0gZ2V0
VXJpRm9yUGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKTsKKworICAgIHN3aXRjaCAoc3RhdHVz
KSB7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9QUk9WSVNJT05BTDoKKyAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHdlYlZpZXcpLCA9PSwgdXJpU3RyaW5nKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6CisgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3KSwgPT0sIHVy
aVN0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6
CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJWaWV3
KSwgPT0sIHVyaVN0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGdfZnJlZSh1cmlTdHJpbmcpOworfQorCitzdGF0aWMgdm9p
ZCBsb2FkV2VudEJhY2tGaW5pc2hlZENhbGxiYWNrKEdPYmplY3QgKm9iamVjdCwgR0FzeW5jUmVz
dWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFdlYkxvYWRpbmdGaXh0dXJl
ICpmaXh0dXJlID0gKFdlYkxvYWRpbmdGaXh0dXJlICopdXNlckRhdGE7CisKKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfd2ViX3ZpZXdfZ29fYmFja19maW5pc2goZml4dHVyZS0+d2ViVmlldywgcmVzdWx0
LCBOVUxMKSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5nKGZpeHR1
cmUtPndlYlZpZXcpKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkaW5nR29CYWNrKFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciAqdXJpU3RyaW5nOworICAgIGd1
aW50IGhhbmRsZXJJZDsKKworICAgIGhhbmRsZXJJZCA9IGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVy
ZS0+d2ViVmlldywgImxvYWQtc3RhdHVzLWNoYW5nZWQiLCBHX0NBTExCQUNLKGxvYWRHb0JhY2tT
dGF0dXNDaGFuZ2VkQ2FsbGJhY2spLCBmaXh0dXJlKTsKKworICAgIHVyaVN0cmluZyA9IGdldFVy
aUZvclBhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7CisgICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaVN0cmluZywgTlVMTCwgbG9hZEdvQmFja0Zpbmlz
aGVkQ2FsbGJhY2ssIGZpeHR1cmUpOworICAgIGdfZnJlZSh1cmlTdHJpbmcpOworCisgICAgZ19t
YWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworCisgICAgZml4dHVyZS0+aGFzQmVlblByb3Zp
c2lvbmFsID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCA9IEZBTFNFOwor
ICAgIGZpeHR1cmUtPmhhc0JlZW5GaW5pc2hlZCA9IEZBTFNFOworCisgICAgdXJpU3RyaW5nID0g
Z2V0VXJpRm9yUGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMyIik7CisgICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaVN0cmluZywgTlVMTCwgbG9hZEdvQmFj
a0ZpbmlzaGVkQ2FsbGJhY2ssIGZpeHR1cmUpOworICAgIGdfZnJlZSh1cmlTdHJpbmcpOworCisg
ICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOworCisgICAgZml4dHVyZS0+aGFzQmVl
blByb3Zpc2lvbmFsID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCA9IEZB
TFNFOworICAgIGZpeHR1cmUtPmhhc0JlZW5GaW5pc2hlZCA9IEZBTFNFOworCisgICAgZ19zaWdu
YWxfaGFuZGxlcl9kaXNjb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsIGhhbmRsZXJJZCk7CisgICAg
Z19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibG9hZC1zdGF0dXMtY2hhbmdlZCIs
IEdfQ0FMTEJBQ0sobG9hZFdlbnRCYWNrU3RhdHVzQ2hhbmdlZENhbGxiYWNrKSwgZml4dHVyZSk7
CisKKyAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhmaXh0dXJlLT53ZWJWaWV3LCBOVUxMLCBs
b2FkV2VudEJhY2tGaW5pc2hlZENhbGxiYWNrLCBmaXh0dXJlKTsKKworICAgIGdfbWFpbl9sb29w
X3J1bihmaXh0dXJlLT5sb29wKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2
KQoreworICAgIFNvdXBTZXJ2ZXIgKnNlcnZlcjsKKworICAgIGdfdGhyZWFkX2luaXQoTlVMTCk7
CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOworCisgICAgZ19zZXRlbnYo
IldFQktJVF9FWEVDX1BBVEgiLCBXRUJLSVRfRVhFQ19QQVRILCBGQUxTRSk7CisKKyAgICBzZXJ2
ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7CisgICAgc291
cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxl
cihzZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKKworICAgIGJhc2Vf
dXJpID0gc291cF91cmlfbmV3KCJodHRwOi8vMTI3LjAuMC4xLyIpOworICAgIHNvdXBfdXJpX3Nl
dF9wb3J0KGJhc2VfdXJpLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKKworICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisgICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdDIvbG9hZGluZy9zdGF0dXMiLAorICAgICAgICAgICAgICAgV2ViTG9hZGluZ0Zp
eHR1cmUsIE5VTEwsCisgICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVNldHVwLAorICAg
ICAgICAgICAgICAgdGVzdExvYWRpbmdTdGF0dXMsCisgICAgICAgICAgICAgICB3ZWJMb2FkaW5n
Rml4dHVyZVRlYXJkb3duKTsKKyAgICBnX3Rlc3RfYWRkKCIvd2Via2l0Mi9sb2FkaW5nL2Vycm9y
IiwKKyAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAorICAgICAgICAgICAg
ICAgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RMb2FkaW5nRXJy
b3IsCisgICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVRlYXJkb3duKTsKKyAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0Mi9sb2FkaW5nL2NhbmNlbGxlZCIsCisgICAgICAgICAgICAgICBXZWJM
b2FkaW5nRml4dHVyZSwgTlVMTCwKKyAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlU2V0
dXAsCisgICAgICAgICAgICAgICB0ZXN0TG9hZGluZ0NhbmNlbGxlZCwKKyAgICAgICAgICAgICAg
IHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQyL2xv
YWRpbmcvY2FuY2VsbGVkX3RocmVhZCIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVy
ZSwgTlVMTCwKKyAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlU2V0dXAsCisgICAgICAg
ICAgICAgICB0ZXN0TG9hZGluZ0NhbmNlbGxlZFRocmVhZCwKKyAgICAgICAgICAgICAgIHdlYkxv
YWRpbmdGaXh0dXJlVGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQyL2xvYWRpbmcv
Z29iYWNrIiwKKyAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAorICAgICAg
ICAgICAgICAgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RMb2Fk
aW5nR29CYWNrLAorICAgICAgICAgICAgICAgd2ViTG9hZGluZ0ZpeHR1cmVUZWFyZG93bik7CisK
KyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyZ3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay93ZWJraXQyZ3RrLmgKaW5kZXggZGZlYmJiNC4uYTM2N2Y3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mmd0ay5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJndGsuaApAQCAtMjEsNiArMjEs
OCBAQAogI2RlZmluZSBfX1dFQktJVDJHVEtfSF9fCiAKICNpbmNsdWRlIDxXZWJLaXQyL1dlYktp
dDIuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgorI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RXJyb3IuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRXZWJWaWV3Lmg+CmRpZmYgLS1naXQgYS9Ub29scy9HdGtMYXVuY2hlci9tYWlu
LmMgYi9Ub29scy9HdGtMYXVuY2hlci9tYWluLmMKaW5kZXggODQ5MmE2MS4uNDU3ZGQwNyAxMDA2
NDQKLS0tIGEvVG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCisrKyBiL1Rvb2xzL0d0a0xhdW5jaGVy
L21haW4uYwpAQCAtNDQsNyArNDQsMTEgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGVVcmlFbnRyeUNi
KEd0a1dpZGdldCogZW50cnksIGdwb2ludGVyIGRhdGEpCiAgICAgV2ViS2l0V2ViVmlldyAqd2Vi
VmlldyA9IGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGVudHJ5KSwgIndlYi12aWV3Iik7CiAg
ICAgY29uc3QgZ2NoYXIqIHVyaSA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoZW50cnkp
KTsKICAgICBnX2Fzc2VydCh1cmkpOworI2lmbmRlZiBXRUJLSVQyCiAgICAgd2Via2l0X3dlYl92
aWV3X2xvYWRfdXJpKHdlYlZpZXcsIHVyaSk7CisjZWxzZQorICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3VyaSh3ZWJWaWV3LCB1cmksIE5VTEwsIE5VTEwsIE5VTEwpOworI2VuZGlmCiB9CiAKICNp
Zm5kZWYgV0VCS0lUMgpAQCAtOTksMTIgKzEwMywyMCBAQCBzdGF0aWMgdm9pZCBkZXN0cm95Q2Io
R3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1dpZGdldCogd2luZG93KQogCiBzdGF0aWMgdm9pZCBnb0Jh
Y2tDYihHdGtXaWRnZXQqIHdpZGdldCwgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CisjaWZu
ZGVmIFdFQktJVDIKICAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayh3ZWJWaWV3KTsKKyNlbHNl
CisgICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sod2ViVmlldywgTlVMTCwgTlVMTCwgTlVMTCk7
CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgZ29Gb3J3YXJkQ2IoR3RrV2lkZ2V0KiB3aWRnZXQs
IFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CisjaWZuZGVmIFdFQktJVDIKICAgICB3ZWJraXRf
d2ViX3ZpZXdfZ29fZm9yd2FyZCh3ZWJWaWV3KTsKKyNlbHNlCisgICAgd2Via2l0X3dlYl92aWV3
X2dvX2ZvcndhcmQod2ViVmlldywgTlVMTCwgTlVMTCwgTlVMTCk7CisjZW5kaWYKIH0KIAogI2lm
bmRlZiBXRUJLSVQyCkBAIC00NDEsOCArNDUzLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy
KiBhcmd2W10pCiAKICAgICBjb25zdCBnY2hhciAqdXJpID0gKHVyaUFyZ3VtZW50cyA/IHVyaUFy
Z3VtZW50c1swXSA6ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIik7CiAgICAgZ2NoYXIgKmZpbGVV
UkwgPSBmaWxlbmFtZVRvVVJMKHVyaSk7Ci0KKyNpZm5kZWYgV0VCS0lUMgogICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LCBmaWxlVVJMID8gZmlsZVVSTCA6IHVyaSk7CisjZWxz
ZQorICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LCBmaWxlVVJMID8gZmlsZVVS
TCA6IHVyaSwgTlVMTCwgTlVMTCwgTlVMTCk7CisjZW5kaWYKICAgICBnX2ZyZWUoZmlsZVVSTCk7
CiAKICAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVCh3ZWJWaWV3KSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108136</attachid>
            <date>2011-09-21 05:19:16 -0700</date>
            <delta_ts>2011-09-23 03:31:54 -0700</delta_ts>
            <desc>Another approach using an interface</desc>
            <filename>wk2-loader-client-iface.diff</filename>
            <type>text/plain</type>
            <size>42371</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0ZTgwZTVmLi5mZjNlYzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYg
QEAKKzIwMTEtMDktMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIExvYWRlciBjbGllbnQgaW1wbGVtZW50YXRpb24gZm9yIFdlYktp
dDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY4MDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSXQgYWRkcyBhbiBpbnRlcmZhY2UgV2ViS2l0V2ViTG9hZGVyQ2xpZW50IGFuZCBhIGRlZmF1
bHQKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhhdCBpbnRlcmZhY2UgV2ViS2l0V2ViTG9h
ZGVyQ2xpZW50RGVmYXVsdCB0aGF0CisgICAgICAgIGVtaXQgc2lnbmFscyBmb3IgZXZlcnkgbG9h
ZCBjYWxsYmFjay4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRv
IGNvbXBpbGF0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRl
ckNsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0X3dlYl9sb2FkZXJfY2xpZW50X2Rl
ZmF1bHRfaW5pdCk6CisgICAgICAgICh3ZWJraXRfd2ViX2xvYWRlcl9jbGllbnRfcHJvdmlzaW9u
YWxfbG9hZF9zdGFydGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfbG9hZGVyX2NsaWVudF9wcm92
aXNpb25hbF9sb2FkX3JlY2VpdmVkX3NlcnZlcl9yZWRpcmVjdCk6CisgICAgICAgICh3ZWJraXRf
d2ViX2xvYWRlcl9jbGllbnRfcHJvdmlzaW9uYWxfbG9hZF9mYWlsZWQpOgorICAgICAgICAod2Vi
a2l0X3dlYl9sb2FkZXJfY2xpZW50X2xvYWRfY29tbWl0dGVkKToKKyAgICAgICAgKHdlYmtpdF93
ZWJfbG9hZGVyX2NsaWVudF9sb2FkX2ZpbmlzaGVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfbG9h
ZGVyX2NsaWVudF9sb2FkX2ZhaWxlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViTG9hZGVyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkxvYWRlckNsaWVudERlZmF1bHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtp
dF93ZWJfbG9hZGVyX2NsaWVudF9kZWZhdWx0X2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl9s
b2FkZXJfY2xpZW50X2RlZmF1bHRfY2xhc3NfaW5pdCk6CisgICAgICAgIChwcm92aXNpb25hbExv
YWRTdGFydGVkKToKKyAgICAgICAgKHByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJl
Y3QpOgorICAgICAgICAocHJvdmlzaW9uYWxMb2FkRmFpbGVkKToKKyAgICAgICAgKGxvYWRDb21t
aXR0ZWQpOgorICAgICAgICAobG9hZEZpbmlzaGVkKToKKyAgICAgICAgKGxvYWRGYWlsZWQpOgor
ICAgICAgICAod2Via2l0V2ViTG9hZGVyQ2xpZW50RGVmYXVsdEludGVyZmFjZUluaXQpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudERlZmF1bHQuaDog
QWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6Cisg
ICAgICAgICh3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0X3dlYl92
aWV3X2luaXQpOgorICAgICAgICAoZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6Cisg
ICAgICAgIChkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFt
ZSk6CisgICAgICAgIChkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUpOgor
ICAgICAgICAoZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKGRpZEZpbmlzaExvYWRG
b3JGcmFtZSk6CisgICAgICAgIChkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lKToKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdMb2FkZXJDbGllbnRJbml0KToKKyAgICAgICAgKHdlYmtpdF93ZWJf
dmlld19nZXRfbG9hZGVyX2NsaWVudCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfc2V0X2xv
YWRlcl9jbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jOiBBZGRl
ZC4KKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHdlYkxvYWRpbmdGaXh0dXJl
U2V0dXApOgorICAgICAgICAod2ViTG9hZGluZ0ZpeHR1cmVUZWFyZG93bik6CisgICAgICAgIChn
ZXRVcmlGb3JQYXRoKToKKyAgICAgICAgKGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRTdGFydGVk
KToKKyAgICAgICAgKGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGly
ZWN0KToKKyAgICAgICAgKGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRGYWlsZWQpOgorICAgICAg
ICAobG9hZFN0YXR1c0xvYWRDb21taXR0ZWQpOgorICAgICAgICAobG9hZFN0YXR1c0xvYWRGaW5p
c2hlZCk6CisgICAgICAgIChsb2FkU3RhdHVzTG9hZEZhaWxlZCk6CisgICAgICAgICh0ZXN0TG9h
ZGluZ1N0YXR1cyk6CisgICAgICAgIChsb2FkRXJyb3JQcm92aXNpb25hbExvYWRTdGFydGVkKToK
KyAgICAgICAgKGxvYWRFcnJvclByb3Zpc2lvbmFsTG9hZEZhaWxlZCk6CisgICAgICAgIChsb2Fk
RXJyb3JMb2FkRmluaXNoZWQpOgorICAgICAgICAodGVzdExvYWRpbmdFcnJvcik6CisgICAgICAg
IChtYWluKToKKwogMjAxMS0wOS0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gV2ViUHJvY2VzcyBzaG91bGRuJ3QgdXNlIHRoZSBH
VEsrIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA0NWQyMzc2Li40OTgyOTYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9H
TlVtYWtlZmlsZS5hbQpAQCAtNzAsNiArNzAsOCBAQCBsaWJ3ZWJraXQyZ3RraW5jbHVkZWRpciA9
ICQobGlid2Via2l0Z3RraW5jbHVkZWRpcikvd2Via2l0Mgogd2Via2l0Mmd0a19oZWFkZXJzID0g
XAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBcCiAJJChXZWJL
aXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAorCSQoV2ViS2l0Mikv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmggXAorCSQoV2ViS2l0Mikv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50RGVmYXVsdC5oIFwKIAkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBcCiAJJChXZWJLaXQyKS9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5oCiAKQEAgLTQ2Myw2ICs0NjUsMTAg
QEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RL
X0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYkNvbnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJMb2FkZXJDbGllbnQuaCBcCisJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmNwcCBcCisJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50RGVmYXVsdC5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJMb2FkZXJDbGllbnREZWZh
dWx0LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
aCBcCkBAIC0xMDQzLDEwICsxMDQ5LDEyIEBAIERJU1RDTEVBTkZJTEVTICs9IFwKICMgVW5pdCB0
ZXN0cwogVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIvdGVzdHdl
YmNvbnRleHQgXAotCVByb2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQyL3Rlc3R3ZWJ2aWV3CisJUHJv
Z3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIvdGVzdHdlYnZpZXcgXAorCVByb2dyYW1zL3VuaXR0ZXN0
cy93ZWJraXQyL3Rlc3Rsb2FkaW5nCiAKIG5vaW5zdF9QUk9HUkFNUyArPSAkKFRFU1RfUFJPR1Mp
CiB3ZWJraXQyX3Rlc3RzX2NmbGFncyA9IFwKKwktRFdFQktJVF9FWEVDX1BBVEg9XCIke3NoZWxs
IHB3ZH0vJCh0b3BfYnVpbGRkaXIpL1Byb2dyYW1zXCIgXAogCS1JJChzcmNkaXIpL1NvdXJjZSBc
CiAJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvaW5jbHVkZSBcCkBAIC0xMDc5LDYgKzEwODcsMTEgQEAgUHJvZ3Jh
bXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdlYnZpZXdfQ0ZMQUdTID0gJCh3ZWJraXQyX3Rlc3Rz
X2NmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3R3ZWJ2aWV3X0xEQUREID0g
JCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdl
YnZpZXdfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQogCitQcm9ncmFtc191bml0
dGVzdHNfd2Via2l0Ml90ZXN0bG9hZGluZ19TT1VSQ0VTID0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYworUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtp
dDJfdGVzdGxvYWRpbmdfQ0ZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFncykKK1Byb2dyYW1z
X3VuaXR0ZXN0c193ZWJraXQyX3Rlc3Rsb2FkaW5nX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xk
YWRkKQorUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdfTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCiAjIFdlYktpdFdlYlByb2Nlc3MKIGxpYmV4ZWNfUFJP
R1JBTVMgKz0gXAogCVByb2dyYW1zL1dlYktpdFdlYlByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJMb2FkZXJDbGllbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ODhjOTIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJMb2FkZXJD
bGllbnQuY3BwCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFdlYkxvYWRlckNs
aWVudC5oIgorCitHX0RFRklORV9JTlRFUkZBQ0UoV2ViS2l0V2ViTG9hZGVyQ2xpZW50LCB3ZWJr
aXRfd2ViX2xvYWRlcl9jbGllbnQsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfbG9hZGVyX2NsaWVudF9kZWZhdWx0X2luaXQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50SW50
ZXJmYWNlKikKK3sKK30KKwordm9pZCB3ZWJraXRfd2ViX2xvYWRlcl9jbGllbnRfcHJvdmlzaW9u
YWxfbG9hZF9zdGFydGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCogbG9hZGVyQ2xpZW50KQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9MT0FERVJfQ0xJRU5UKGxvYWRlckNs
aWVudCkpOworCisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50SW50ZXJmYWNlKiBpbnRlcmZhY2Ug
PSBXRUJLSVRfV0VCX0xPQURFUl9DTElFTlRfR0VUX0lGQUNFKGxvYWRlckNsaWVudCk7CisgICAg
aWYgKCFpbnRlcmZhY2UtPnByb3Zpc2lvbmFsX2xvYWRfc3RhcnRlZCkKKyAgICAgICAgcmV0dXJu
OworICAgIGludGVyZmFjZS0+cHJvdmlzaW9uYWxfbG9hZF9zdGFydGVkKGxvYWRlckNsaWVudCk7
Cit9CisKK3ZvaWQgd2Via2l0X3dlYl9sb2FkZXJfY2xpZW50X3Byb3Zpc2lvbmFsX2xvYWRfcmVj
ZWl2ZWRfc2VydmVyX3JlZGlyZWN0KFdlYktpdFdlYkxvYWRlckNsaWVudCogbG9hZGVyQ2xpZW50
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9MT0FERVJfQ0xJRU5UKGxv
YWRlckNsaWVudCkpOworCisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50SW50ZXJmYWNlKiBpbnRl
cmZhY2UgPSBXRUJLSVRfV0VCX0xPQURFUl9DTElFTlRfR0VUX0lGQUNFKGxvYWRlckNsaWVudCk7
CisgICAgaWYgKCFpbnRlcmZhY2UtPnByb3Zpc2lvbmFsX2xvYWRfcmVjZWl2ZWRfc2VydmVyX3Jl
ZGlyZWN0KQorICAgICAgICByZXR1cm47CisgICAgaW50ZXJmYWNlLT5wcm92aXNpb25hbF9sb2Fk
X3JlY2VpdmVkX3NlcnZlcl9yZWRpcmVjdChsb2FkZXJDbGllbnQpOworfQorCit2b2lkIHdlYmtp
dF93ZWJfbG9hZGVyX2NsaWVudF9wcm92aXNpb25hbF9sb2FkX2ZhaWxlZChXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQqIGxvYWRlckNsaWVudCwgR0Vycm9yKiBlcnJvcikKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfTE9BREVSX0NMSUVOVChsb2FkZXJDbGllbnQpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKGVycm9yKTsKKworICAgIFdlYktpdFdlYkxvYWRlckNsaWVudEludGVy
ZmFjZSogaW50ZXJmYWNlID0gV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UX0dFVF9JRkFDRShsb2Fk
ZXJDbGllbnQpOworICAgIGlmICghaW50ZXJmYWNlLT5wcm92aXNpb25hbF9sb2FkX2ZhaWxlZCkK
KyAgICAgICAgcmV0dXJuOworICAgIGludGVyZmFjZS0+cHJvdmlzaW9uYWxfbG9hZF9mYWlsZWQo
bG9hZGVyQ2xpZW50LCBlcnJvcik7Cit9CisKK3ZvaWQgd2Via2l0X3dlYl9sb2FkZXJfY2xpZW50
X2xvYWRfY29tbWl0dGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCogbG9hZGVyQ2xpZW50KQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9MT0FERVJfQ0xJRU5UKGxvYWRlckNs
aWVudCkpOworCisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50SW50ZXJmYWNlKiBpbnRlcmZhY2Ug
PSBXRUJLSVRfV0VCX0xPQURFUl9DTElFTlRfR0VUX0lGQUNFKGxvYWRlckNsaWVudCk7CisgICAg
aWYgKCFpbnRlcmZhY2UtPmxvYWRfY29tbWl0dGVkKQorICAgICAgICByZXR1cm47CisgICAgaW50
ZXJmYWNlLT5sb2FkX2NvbW1pdHRlZChsb2FkZXJDbGllbnQpOworfQorCit2b2lkIHdlYmtpdF93
ZWJfbG9hZGVyX2NsaWVudF9sb2FkX2ZpbmlzaGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCogbG9h
ZGVyQ2xpZW50KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9MT0FERVJf
Q0xJRU5UKGxvYWRlckNsaWVudCkpOworCisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50SW50ZXJm
YWNlKiBpbnRlcmZhY2UgPSBXRUJLSVRfV0VCX0xPQURFUl9DTElFTlRfR0VUX0lGQUNFKGxvYWRl
ckNsaWVudCk7CisgICAgaWYgKCFpbnRlcmZhY2UtPmxvYWRfZmluaXNoZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbnRlcmZhY2UtPmxvYWRfZmluaXNoZWQobG9hZGVyQ2xpZW50KTsKK30KKwor
dm9pZCB3ZWJraXRfd2ViX2xvYWRlcl9jbGllbnRfbG9hZF9mYWlsZWQoV2ViS2l0V2ViTG9hZGVy
Q2xpZW50KiBsb2FkZXJDbGllbnQsIEdFcnJvciogZXJyb3IpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfV0VCX0xPQURFUl9DTElFTlQobG9hZGVyQ2xpZW50KSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChlcnJvcik7CisKKyAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnRJbnRlcmZh
Y2UqIGludGVyZmFjZSA9IFdFQktJVF9XRUJfTE9BREVSX0NMSUVOVF9HRVRfSUZBQ0UobG9hZGVy
Q2xpZW50KTsKKyAgICBpZiAoIWludGVyZmFjZS0+bG9hZF9mYWlsZWQpCisgICAgICAgIHJldHVy
bjsKKyAgICBpbnRlcmZhY2UtPmxvYWRfZmFpbGVkKGxvYWRlckNsaWVudCwgZXJyb3IpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9h
ZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJM
b2FkZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzczZTA2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViTG9hZGVyQ2xpZW50LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFdlYkxvYWRlckNsaWVudF9oCisjZGVm
aW5lIFdlYktpdFdlYkxvYWRlckNsaWVudF9oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5o
PgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBX
RUJLSVRfVFlQRV9XRUJfTE9BREVSX0NMSUVOVCAgICAgICAgICAgICh3ZWJraXRfd2ViX2xvYWRl
cl9jbGllbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9U
WVBFX1dFQl9MT0FERVJfQ0xJRU5ULCBXZWJLaXRXZWJMb2FkZXJDbGllbnQpKQorI2RlZmluZSBX
RUJLSVRfSVNfV0VCX0xPQURFUl9DTElFTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0xPQURFUl9DTElFTlQpKQorI2RlZmlu
ZSBXRUJLSVRfV0VCX0xPQURFUl9DTElFTlRfR0VUX0lGQUNFKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0lOVEVSRkFDRSgob2JqKSwgIFdFQktJVF9UWVBFX1dFQl9MT0FERVJfQ0xJRU5ULCBX
ZWJLaXRXZWJMb2FkZXJDbGllbnRJbnRlcmZhY2UpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
V2ViTG9hZGVyQ2xpZW50ICAgICAgICAgIFdlYktpdFdlYkxvYWRlckNsaWVudDsgLyogRHVtbXkg
Ki8KK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJMb2FkZXJDbGllbnRJbnRlcmZhY2UgV2ViS2l0
V2ViTG9hZGVyQ2xpZW50SW50ZXJmYWNlOworCitzdHJ1Y3QgX1dlYktpdFdlYkxvYWRlckNsaWVu
dEludGVyZmFjZSB7CisgICAgR1R5cGVJbnRlcmZhY2UgZ19pZmFjZTsKKworICAgIC8qIHZpcnR1
YWwgdGFibGUgKi8KKyAgICB2b2lkICgqIHByb3Zpc2lvbmFsX2xvYWRfc3RhcnRlZCkgICAgICAg
ICAgICAgICAgICAoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50KTsKKyAgICB2
b2lkICgqIHByb3Zpc2lvbmFsX2xvYWRfcmVjZWl2ZWRfc2VydmVyX3JlZGlyZWN0KSAoV2ViS2l0
V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50KTsKKyAgICB2b2lkICgqIHByb3Zpc2lvbmFs
X2xvYWRfZmFpbGVkKSAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICps
b2FkZXJfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgKmVycm9yKTsKKyAgICB2b2lkICgq
IGxvYWRfY29tbWl0dGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViTG9h
ZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50KTsKKyAgICB2b2lkICgqIGxvYWRfZmluaXNoZWQpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJf
Y2xpZW50KTsKKyAgICB2b2lkICgqIGxvYWRfZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAg
ICAgICAgICAgICAgKmVycm9yKTsKK307CisKK1dLX0VYUE9SVCBHVHlwZQord2Via2l0X3dlYl9s
b2FkZXJfY2xpZW50X2dldF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2
b2lkKTsKKworV0tfRVhQT1JUIHZvaWQKK3dlYmtpdF93ZWJfbG9hZGVyX2NsaWVudF9wcm92aXNp
b25hbF9sb2FkX3N0YXJ0ZWQgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViTG9hZGVyQ2xpZW50
ICpsb2FkZXJfY2xpZW50KTsKKworV0tfRVhQT1JUIHZvaWQKK3dlYmtpdF93ZWJfbG9hZGVyX2Ns
aWVudF9wcm92aXNpb25hbF9sb2FkX3JlY2VpdmVkX3NlcnZlcl9yZWRpcmVjdCAoV2ViS2l0V2Vi
TG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50KTsKKworV0tfRVhQT1JUIHZvaWQKK3dlYmtpdF93
ZWJfbG9hZGVyX2NsaWVudF9wcm92aXNpb25hbF9sb2FkX2ZhaWxlZCAgICAgICAgICAgICAgICAg
ICAoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJy
b3IgICAgICAgICAgICAgICAgKmVycm9yKTsKKworV0tfRVhQT1JUIHZvaWQKK3dlYmtpdF93ZWJf
bG9hZGVyX2NsaWVudF9sb2FkX2NvbW1pdHRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
V2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50KTsKKworV0tfRVhQT1JUIHZvaWQK
K3dlYmtpdF93ZWJfbG9hZGVyX2NsaWVudF9sb2FkX2ZpbmlzaGVkICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50KTsKKworV0tf
RVhQT1JUIHZvaWQKK3dlYmtpdF93ZWJfbG9hZGVyX2NsaWVudF9sb2FkX2ZhaWxlZCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xp
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgKmVycm9yKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJMb2FkZXJDbGllbnREZWZhdWx0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudERlZmF1bHQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZGM1YmUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJMb2FkZXJDbGllbnREZWZh
dWx0LmNwcApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViTG9hZGVyQ2xp
ZW50RGVmYXVsdC5oIgorCisjaW5jbHVkZSAiV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmgiCisKK2Vu
dW0geworICAgIFBST1ZJU0lPTkFMX0xPQURfU1RBUlRFRCwKKyAgICBQUk9WSVNJT05BTF9MT0FE
X1JFQ0VJVkVEX1NFUlZFUl9SRURJUkVDVCwKKyAgICBQUk9WSVNJT05BTF9MT0FEX0ZBSUxFRCwK
KworICAgIExPQURfQ09NTUlUVEVELAorICAgIExPQURfRklOSVNIRUQsCisgICAgTE9BRF9GQUlM
RUQsCisKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0V2ViTG9hZGVy
Q2xpZW50RGVmYXVsdEludGVyZmFjZUluaXQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50SW50ZXJmYWNl
Kik7CisKK3N0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworR19E
RUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0V2ViTG9hZGVyQ2xpZW50RGVmYXVsdCwgd2Via2l0
X3dlYl9sb2FkZXJfY2xpZW50X2RlZmF1bHQsIEdfVFlQRV9PQkpFQ1QsCisgICAgICAgICAgICAg
ICAgICAgICAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX1RZUEVfV0VCX0xPQURFUl9D
TElFTlQsIHdlYmtpdFdlYkxvYWRlckNsaWVudERlZmF1bHRJbnRlcmZhY2VJbml0KSkKKworCitz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX2xvYWRlcl9jbGllbnRfZGVmYXVsdF9pbml0KFdlYktpdFdl
YkxvYWRlckNsaWVudERlZmF1bHQqKQoreworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
bG9hZGVyX2NsaWVudF9kZWZhdWx0X2NsYXNzX2luaXQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50RGVm
YXVsdENsYXNzKiBkZWZhdWx0Q2xpZW50Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGRlZmF1bHRDbGllbnRDbGFzcyk7CisKKyAgICBzaWdu
YWxzW1BST1ZJU0lPTkFMX0xPQURfU1RBUlRFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoInBy
b3Zpc2lvbmFsLWxvYWQtc3RhcnRlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICAoR1NpZ25hbEZsYWdz
KUdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwgTlVMTCwK
KyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDAsCisgICAgICAgICAgICAgICAgICAgICBH
X1RZUEVfTk9ORSk7CisgICAgc2lnbmFsc1tQUk9WSVNJT05BTF9MT0FEX1JFQ0VJVkVEX1NFUlZF
Ul9SRURJUkVDVF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoInByb3Zpc2lvbmFsLWxvYWQtcmVj
ZWl2ZWQtc2VydmVyLXJlZGlyZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9N
X0NMQVNTKG9iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIChHU2lnbmFsRmxhZ3Mp
R19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAwLCBOVUxMLCBOVUxMLAor
ICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAg
ICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCwKKyAgICAgICAgICAgICAgICAgICAgIEdf
VFlQRV9OT05FKTsKKyAgICBzaWduYWxzW1BST1ZJU0lPTkFMX0xPQURfRkFJTEVEXSA9CisgICAg
ICAgIGdfc2lnbmFsX25ldygicHJvdmlzaW9uYWwtbG9hZC1mYWlsZWQiLAorICAgICAgICAgICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAg
ICAgICAgKEdTaWduYWxGbGFncylHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAg
ICAgIDAsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNo
YWxfVk9JRF9fUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAor
ICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1BPSU5URVIpOworICAgIHNpZ25hbHNbTE9BRF9D
T01NSVRURURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJsb2FkLWNvbW1pdHRlZCIsCisgICAg
ICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAgICAg
ICAgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKUdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAg
ICAgICAgICAgICAgMCwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1
cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUs
IDAsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSk7CisgICAgc2lnbmFsc1tMT0FE
X0ZJTklTSEVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygibG9hZC1maW5pc2hlZCIsCisgICAg
ICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAgICAg
ICAgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKUdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAg
ICAgICAgICAgICAgMCwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1
cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUs
IDAsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSk7CisgICAgc2lnbmFsc1tMT0FE
X0ZBSUxFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImxvYWQtZmFpbGVkIiwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKG9iamVjdENsYXNzKSwKKyAgICAgICAgICAg
ICAgICAgICAgIChHU2lnbmFsRmxhZ3MpR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAg
ICAgICAgICAwLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9t
YXJzaGFsX1ZPSURfX1BPSU5URVIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwg
MSwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSKTsKK30KKy8qIFdlYktpdFdl
YkxvYWRlckNsaWVudCBpbnRlcmZhY2UgKi8KK3N0YXRpYyB2b2lkIHByb3Zpc2lvbmFsTG9hZFN0
YXJ0ZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBsb2FkZXJDbGllbnQpCit7CisgICAgV2ViS2l0
V2ViTG9hZGVyQ2xpZW50RGVmYXVsdCogZGVmYXVsdENsaWVudCA9IFdFQktJVF9XRUJfTE9BREVS
X0NMSUVOVF9ERUZBVUxUKGxvYWRlckNsaWVudCk7CisgICAgZ19zaWduYWxfZW1pdChkZWZhdWx0
Q2xpZW50LCBzaWduYWxzW1BST1ZJU0lPTkFMX0xPQURfU1RBUlRFRF0sIDAsIE5VTEwpOworfQor
CitzdGF0aWMgdm9pZCBwcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KFdlYktp
dFdlYkxvYWRlckNsaWVudCogbG9hZGVyQ2xpZW50KQoreworICAgIFdlYktpdFdlYkxvYWRlckNs
aWVudERlZmF1bHQqIGRlZmF1bHRDbGllbnQgPSBXRUJLSVRfV0VCX0xPQURFUl9DTElFTlRfREVG
QVVMVChsb2FkZXJDbGllbnQpOworICAgIGdfc2lnbmFsX2VtaXQoZGVmYXVsdENsaWVudCwgc2ln
bmFsc1tQUk9WSVNJT05BTF9MT0FEX1JFQ0VJVkVEX1NFUlZFUl9SRURJUkVDVF0sIDAsIE5VTEwp
OworfQorCitzdGF0aWMgdm9pZCBwcm92aXNpb25hbExvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVy
Q2xpZW50KiBsb2FkZXJDbGllbnQsIEdFcnJvciogZXJyb3IpCit7CisgICAgV2ViS2l0V2ViTG9h
ZGVyQ2xpZW50RGVmYXVsdCogZGVmYXVsdENsaWVudCA9IFdFQktJVF9XRUJfTE9BREVSX0NMSUVO
VF9ERUZBVUxUKGxvYWRlckNsaWVudCk7CisgICAgZ19zaWduYWxfZW1pdChkZWZhdWx0Q2xpZW50
LCBzaWduYWxzW1BST1ZJU0lPTkFMX0xPQURfRkFJTEVEXSwgMCwgZXJyb3IpOworfQorCitzdGF0
aWMgdm9pZCBsb2FkQ29tbWl0dGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCogbG9hZGVyQ2xpZW50
KQoreworICAgIFdlYktpdFdlYkxvYWRlckNsaWVudERlZmF1bHQqIGRlZmF1bHRDbGllbnQgPSBX
RUJLSVRfV0VCX0xPQURFUl9DTElFTlRfREVGQVVMVChsb2FkZXJDbGllbnQpOworICAgIGdfc2ln
bmFsX2VtaXQoZGVmYXVsdENsaWVudCwgc2lnbmFsc1tMT0FEX0NPTU1JVFRFRF0sIDAsIE5VTEwp
OworfQorCitzdGF0aWMgdm9pZCBsb2FkRmluaXNoZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBs
b2FkZXJDbGllbnQpCit7CisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50RGVmYXVsdCogZGVmYXVs
dENsaWVudCA9IFdFQktJVF9XRUJfTE9BREVSX0NMSUVOVF9ERUZBVUxUKGxvYWRlckNsaWVudCk7
CisgICAgZ19zaWduYWxfZW1pdChkZWZhdWx0Q2xpZW50LCBzaWduYWxzW0xPQURfRklOSVNIRURd
LCAwLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgbG9hZEZhaWxlZChXZWJLaXRXZWJMb2FkZXJD
bGllbnQqIGxvYWRlckNsaWVudCwgR0Vycm9yKiBlcnJvcikKK3sKKyAgICBXZWJLaXRXZWJMb2Fk
ZXJDbGllbnREZWZhdWx0KiBkZWZhdWx0Q2xpZW50ID0gV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5U
X0RFRkFVTFQobG9hZGVyQ2xpZW50KTsKKyAgICBnX3NpZ25hbF9lbWl0KGRlZmF1bHRDbGllbnQs
IHNpZ25hbHNbTE9BRF9GQUlMRURdLCAwLCBlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dFdlYkxvYWRlckNsaWVudERlZmF1bHRJbnRlcmZhY2VJbml0KFdlYktpdFdlYkxvYWRlckNsaWVu
dEludGVyZmFjZSogaW50ZXJmYWNlKQoreworICAgIGludGVyZmFjZS0+cHJvdmlzaW9uYWxfbG9h
ZF9zdGFydGVkID0gcHJvdmlzaW9uYWxMb2FkU3RhcnRlZDsKKyAgICBpbnRlcmZhY2UtPnByb3Zp
c2lvbmFsX2xvYWRfcmVjZWl2ZWRfc2VydmVyX3JlZGlyZWN0ID0gcHJvdmlzaW9uYWxMb2FkUmVj
ZWl2ZWRTZXJ2ZXJSZWRpcmVjdDsKKyAgICBpbnRlcmZhY2UtPnByb3Zpc2lvbmFsX2xvYWRfZmFp
bGVkID0gcHJvdmlzaW9uYWxMb2FkRmFpbGVkOworICAgIGludGVyZmFjZS0+bG9hZF9jb21taXR0
ZWQgPSBsb2FkQ29tbWl0dGVkOworICAgIGludGVyZmFjZS0+bG9hZF9maW5pc2hlZCA9IGxvYWRG
aW5pc2hlZDsKKyAgICBpbnRlcmZhY2UtPmxvYWRfZmFpbGVkID0gbG9hZEZhaWxlZDsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRl
ckNsaWVudERlZmF1bHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkxvYWRlckNsaWVudERlZmF1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43NmExYjM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50RGVmYXVsdC5oCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRXZWJM
b2FkZXJDbGllbnREZWZhdWx0X2gKKyNkZWZpbmUgV2ViS2l0V2ViTG9hZGVyQ2xpZW50RGVmYXVs
dF9oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfTE9BREVSX0NM
SUVOVF9ERUZBVUxUICAgICAgICAgICAgKHdlYmtpdF93ZWJfbG9hZGVyX2NsaWVudF9kZWZhdWx0
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9XRUJfTE9BREVSX0NMSUVOVF9ERUZBVUxUKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9U
WVBFX1dFQl9MT0FERVJfQ0xJRU5UX0RFRkFVTFQsIFdlYktpdFdlYkxvYWRlckNsaWVudERlZmF1
bHQpKQorI2RlZmluZSBXRUJLSVRfV0VCX0xPQURFUl9DTElFTlRfREVGQVVMVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJf
TE9BREVSX0NMSUVOVF9ERUZBVUxULCBXZWJLaXRXZWJMb2FkZXJDbGllbnREZWZhdWx0Q2xhc3Mp
KQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0xPQURFUl9DTElFTlRfREVGQVVMVChvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfTE9B
REVSX0NMSUVOVF9ERUZBVUxUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9MT0FERVJfQ0xJRU5U
X0RFRkFVTFRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfV0VCX0xPQURFUl9DTElFTlRfREVGQVVMVCkpCisjZGVmaW5lIFdFQktJVF9X
RUJfTE9BREVSX0NMSUVOVF9ERUZBVUxUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1dFQl9MT0FERVJfQ0xJRU5UX0RFRkFVTFQs
IFdlYktpdFdlYkxvYWRlckNsaWVudERlZmF1bHRDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRXZWJMb2FkZXJDbGllbnREZWZhdWx0ICAgICAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnRE
ZWZhdWx0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkxvYWRlckNsaWVudERlZmF1bHRDbGFz
cyAgIFdlYktpdFdlYkxvYWRlckNsaWVudERlZmF1bHRDbGFzczsKKworc3RydWN0IF9XZWJLaXRX
ZWJMb2FkZXJDbGllbnREZWZhdWx0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKK307CisKK3N0cnVj
dCBfV2ViS2l0V2ViTG9hZGVyQ2xpZW50RGVmYXVsdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3Mg
cGFyZW50OworfTsKKworV0tfRVhQT1JUIEdUeXBlCit3ZWJraXRfd2ViX2xvYWRlcl9jbGllbnRf
ZGVmYXVsdF9nZXRfdHlwZSAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRl
eCBhZDdkYjVlLi5hMmExNWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjAsMTMgKzIwLDE2IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlldy5oIgogCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdFdlYkxvYWRlckNsaWVudERlZmF1bHQuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KICNpbmNsdWRlIDxX
ZWJLaXQyL1dLVVJMLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAg
LTM5LDggKzQyLDEyIEBAIGVudW0gewogCiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIHsK
ICAgICBXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0OworCisgICAgR1JlZlB0cjxXZWJLaXRXZWJM
b2FkZXJDbGllbnQ+IGxvYWRlckNsaWVudDsKIH07CiAKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdMb2FkZXJDbGllbnRJbml0KFdlYktpdFdlYlZpZXcqKTsKKwogR19ERUZJTkVfVFlQRShXZWJL
aXRXZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXcsIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0UpCiAK
IHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCkBA
IC00OSw2ICs1Niw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChHT2Jq
ZWN0KiBvYmplY3QpCiAKICAgICB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV0VCS0lU
X1dFQl9WSUVXX0JBU0Uod2ViVmlldyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdlYmtpdFdlYkNvbnRleHRHZXRXS0NvbnRleHQod2ViVmlldy0+cHJpdi0+Y29udGV4dCks
IDApOworCisgICAgd2Via2l0V2ViVmlld0xvYWRlckNsaWVudEluaXQod2ViVmlldyk7CiB9CiAK
IHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQpA
QCAtNzksNyArODgsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdQogCiBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewotICAgIHdlYlZp
ZXctPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUod2ViVmlldywgV0VCS0lUX1RZ
UEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdQcml2YXRlKTsKKyAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSh3ZWJWaWV3LCBXRUJLSVRf
VFlQRV9XRUJfVklFVywgV2ViS2l0V2ViVmlld1ByaXZhdGUpOworICAgIHdlYlZpZXctPnByaXYg
PSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0V2ViVmlld1ByaXZhdGUoKTsKIH0KIAogc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3
ZWJWaWV3Q2xhc3MpCkBAIC0xMDYsNiArMTE3LDEyOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNU
UlVDVF9PTkxZKSkpOwogfQogCisvLyBMb2FkZXIgY2xpZW50Lgorc3RhdGljIHZvaWQgZGlkU3Rh
cnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFt
ZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGlm
ICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKTsKKyAgICBX
ZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgaWYgKCFwcml2
LT5sb2FkZXJDbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYmtpdF93ZWJfbG9hZGVy
X2NsaWVudF9wcm92aXNpb25hbF9sb2FkX3N0YXJ0ZWQocHJpdi0+bG9hZGVyQ2xpZW50LmdldCgp
KTsKK30KKworc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJl
ZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBpZiAoIVdLRnJhbWVJ
c01haW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyk7CisgICAgV2ViS2l0V2ViVmll
d1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworICAgIGlmICghcHJpdi0+bG9hZGVyQ2xp
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJraXRfd2ViX2xvYWRlcl9jbGllbnRfcHJv
dmlzaW9uYWxfbG9hZF9yZWNlaXZlZF9zZXJ2ZXJfcmVkaXJlY3QocHJpdi0+bG9hZGVyQ2xpZW50
LmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJv
ckZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS0Vycm9yUmVmIGVy
cm9yLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
aWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pOworICAg
IFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAgICBpZiAoIXBy
aXYtPmxvYWRlckNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgUmVzb3VyY2VF
cnJvciYgcmVzb3VyY2VFcnJvciA9IHRvSW1wbChlcnJvciktPnBsYXRmb3JtRXJyb3IoKTsKKyAg
ICBHT3duUHRyPEdFcnJvcj4gd2ViRXJyb3IoZ19lcnJvcl9uZXdfbGl0ZXJhbChnX3F1YXJrX2Zy
b21fc3RyaW5nKHJlc291cmNlRXJyb3IuZG9tYWluKCkudXRmOCgpLmRhdGEoKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VFcnJvci5l
cnJvckNvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNvdXJjZUVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSkp
OworICAgIHdlYmtpdF93ZWJfbG9hZGVyX2NsaWVudF9wcm92aXNpb25hbF9sb2FkX2ZhaWxlZChw
cml2LT5sb2FkZXJDbGllbnQuZ2V0KCksIHdlYkVycm9yLmdldCgpKTsKK30KKworc3RhdGljIHZv
aWQgZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1l
LCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgaWYg
KCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pOworICAgIFdl
YktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAgICBpZiAoIXByaXYt
PmxvYWRlckNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2Via2l0X3dlYl9sb2FkZXJf
Y2xpZW50X2xvYWRfY29tbWl0dGVkKHByaXYtPmxvYWRlckNsaWVudC5nZXQoKSk7Cit9CisKK3N0
YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJl
ZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKTsK
KyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgaWYg
KCFwcml2LT5sb2FkZXJDbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYmtpdF93ZWJf
bG9hZGVyX2NsaWVudF9sb2FkX2ZpbmlzaGVkKHByaXYtPmxvYWRlckNsaWVudC5nZXQoKSk7Cit9
CisKK3N0YXRpYyB2b2lkIGRpZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tQYWdlUmVmIHBh
Z2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLRXJyb3JSZWYgZXJyb3IsIFdLVHlwZVJlZiB1c2VyRGF0
YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFt
ZShmcmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyk7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUq
IHByaXYgPSB3ZWJWaWV3LT5wcml2OworICAgIGlmICghcHJpdi0+bG9hZGVyQ2xpZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yID0g
dG9JbXBsKGVycm9yKS0+cGxhdGZvcm1FcnJvcigpOworICAgIEdPd25QdHI8R0Vycm9yPiB3ZWJF
cnJvcihnX2Vycm9yX25ld19saXRlcmFsKGdfcXVhcmtfZnJvbV9zdHJpbmcocmVzb3VyY2VFcnJv
ci5kb21haW4oKS51dGY4KCkuZGF0YSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUVycm9yLmVycm9yQ29kZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlRXJyb3IubG9j
YWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKSk7CisgICAgd2Via2l0X3dlYl9sb2Fk
ZXJfY2xpZW50X2xvYWRfZmFpbGVkKHByaXYtPmxvYWRlckNsaWVudC5nZXQoKSwgd2ViRXJyb3Iu
Z2V0KCkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3TG9hZGVyQ2xpZW50SW5pdChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIFdLUGFnZUxvYWRlckNsaWVudCBsb2FkQ2xp
ZW50ID0geworICAgICAgICBrV0tQYWdlTG9hZGVyQ2xpZW50Q3VycmVudFZlcnNpb24sCisgICAg
ICAgIHdlYlZpZXcsICAvLyBjbGllbnRJbmZvCisgICAgICAgIGRpZFN0YXJ0UHJvdmlzaW9uYWxM
b2FkRm9yRnJhbWUsCisgICAgICAgIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lv
bmFsTG9hZEZvckZyYW1lLAorICAgICAgICBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9y
Rm9yRnJhbWUsCisgICAgICAgIGRpZENvbW1pdExvYWRGb3JGcmFtZSwKKyAgICAgICAgMCwgICAg
ICAgLy8gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKKyAgICAgICAgZGlkRmluaXNoTG9h
ZEZvckZyYW1lLAorICAgICAgICBkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lLAorICAgICAg
ICAwLCAgICAgICAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUKKyAgICAgICAg
MCwgICAgICAgLy8gZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUKKyAgICAgICAgMCwgICAgICAgLy8g
ZGlkRmlyc3RMYXlvdXRGb3JGcmFtZQorICAgICAgICAwLCAgICAgICAvLyBkaWRGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZQorICAgICAgICAwLCAgICAgICAvLyBkaWRSZW1vdmVG
cmFtZUZyb21IaWVyYXJjaHkKKyAgICAgICAgMCwgICAgICAgLy8gZGlkRGlzcGxheUluc2VjdXJl
Q29udGVudEZvckZyYW1lCisgICAgICAgIDAsICAgICAgIC8vIGRpZFJ1bkluc2VjdXJlQ29udGVu
dEZvckZyYW1lCisgICAgICAgIDAsICAgICAgIC8vIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2VJbkZyYW1lCisgICAgICAgIDAsICAgICAgIC8vIGRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZUluRnJhbWUKKyAgICAgICAgMCwgICAgICAgLy8gZGlkU3RhcnRQcm9n
cmVzcworICAgICAgICAwLCAgICAgICAvLyBkaWRDaGFuZ2VQcm9ncmVzcworICAgICAgICAwLCAg
ICAgICAvLyBkaWRGaW5pc2hQcm9ncmVzcworICAgICAgICAwLCAgICAgICAvLyBkaWRCZWNvbWVV
bnJlc3BvbnNpdmUKKyAgICAgICAgMCwgICAgICAgLy8gZGlkQmVjb21lUmVzcG9uc2l2ZQorICAg
ICAgICAwLCAgICAgICAvLyBwcm9jZXNzRGlkQ3Jhc2gKKyAgICAgICAgMCwgICAgICAgLy8gZGlk
Q2hhbmdlQmFja0ZvcndhcmRMaXN0CisgICAgICAgIDAsICAgICAgIC8vIHNob3VsZEdvVG9CYWNr
Rm9yd2FyZExpc3RJdGVtCisgICAgICAgIDAgICAgICAgIC8vIGRpZEZhaWxUb0luaXRpYWxpemVQ
bHVnaW4KKyAgICB9OworICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNl
R2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSk7CisgICAgV0tQYWdlU2V0UGFn
ZUxvYWRlckNsaWVudCh0b0FQSShwYWdlKSwgJmxvYWRDbGllbnQpOworfQorCiAvLyBQdWJsaWMg
QVBJLgogCiAvKioKQEAgLTE1MSw2ICsyODQsMzQgQEAgV2ViS2l0V2ViQ29udGV4dCogd2Via2l0
X3dlYl92aWV3X2dldF9jb250ZXh0KFdlYktpdFdlYlZpZXcgKndlYlZpZXcpCiAgICAgcmV0dXJu
IHdlYlZpZXctPnByaXYtPmNvbnRleHQ7CiB9CiAKK1dlYktpdFdlYkxvYWRlckNsaWVudCogd2Vi
a2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xpZW50KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAw
KTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAg
ICBpZiAoIXByaXYtPmxvYWRlckNsaWVudCkKKyAgICAgICAgcHJpdi0+bG9hZGVyQ2xpZW50ID0g
YWRvcHRHUmVmKFdFQktJVF9XRUJfTE9BREVSX0NMSUVOVChnX29iamVjdF9uZXcoV0VCS0lUX1RZ
UEVfV0VCX0xPQURFUl9DTElFTlRfREVGQVVMVCwgMCkpKTsKKyAgICByZXR1cm4gcHJpdi0+bG9h
ZGVyQ2xpZW50LmdldCgpOworfQorCit2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfbG9hZGVyX2Ns
aWVudChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGxvYWRl
ckNsaWVudCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJW
aWV3KSk7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7
CisgICAgaWYgKHByaXYtPmxvYWRlckNsaWVudC5nZXQoKSA9PSBsb2FkZXJDbGllbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIHByaXYtPmxvYWRlckNsaWVudCA9IGxvYWRlckNsaWVudDsKK30K
KworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmk6CisgKiBAd2ViVmlldzogYSAjV2Vi
S2l0V2ViVmlldworICogQHVyaTogYW4gVVJJIHN0cmluZworICoKKyAqIFJlcXVlc3RzIGxvYWRp
bmcgb2YgdGhlIHNwZWNpZmllZCBVUkkgc3RyaW5nLgorICovCiB2b2lkIHdlYmtpdF93ZWJfdmll
d19sb2FkX3VyaShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBnY2hhciogdXJpKQogewog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKQEAgLTE2
MCw2ICszMjEsMTIgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgY29uc3QgZ2NoYXIqIHVyaSkKICAgICBXS1BhZ2VMb2FkVVJMKHRvQVBJKHBh
Z2UpLCBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1cmkpKTsKIH0KIAorLyoqCisgKiB3ZWJr
aXRfd2ViX3ZpZXdfZ29fYmFjazoKKyAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgor
ICogTG9hZHMgdGhlIHByZXZpb3VzIGhpc3RvcnkgaXRlbS4KKyAqLwogdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfZ29fYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKQEAgLTE2OCw2ICszMzUsMTIgQEAg
dm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAg
IFdLUGFnZUdvQmFjayh0b0FQSShwYWdlKSk7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl92aWV3
X2dvX2ZvcndhcmQ6CisgKiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIExvYWRz
IHRoZSBuZXh0IGhpc3RvcnkgaXRlbS4KKyAqLwogdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9y
d2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCAzMDViYzU2Li40MDIyNjk2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0y
NCw2ICsyNCw3IEBACiAjZGVmaW5lIFdlYktpdFdlYlZpZXdfaAogCiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRXZWJDb250ZXh0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJMb2FkZXJD
bGllbnQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAKIEdfQkVH
SU5fREVDTFMKQEAgLTYxLDI2ICs2MiwzMyBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7
CiB9OwogCiBXS19FWFBPUlQgR1R5cGUKLXdlYmtpdF93ZWJfdmlld19nZXRfdHlwZSAgICAgICAg
ICh2b2lkKTsKK3dlYmtpdF93ZWJfdmlld19nZXRfdHlwZSAgICAgICAgICAodm9pZCk7CiAKIFdL
X0VYUE9SVCBHdGtXaWRnZXQgKgotd2Via2l0X3dlYl92aWV3X25ldyAgICAgICAgICAgICAgKHZv
aWQpOword2Via2l0X3dlYl92aWV3X25ldyAgICAgICAgICAgICAgICh2b2lkKTsKIAogV0tfRVhQ
T1JUIEd0a1dpZGdldCAqCi13ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCAoV2ViS2l0
V2ViQ29udGV4dCAqY29udGV4dCk7Cit3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCAg
KFdlYktpdFdlYkNvbnRleHQgICAgICAqY29udGV4dCk7CiAKIFdLX0VYUE9SVCBXZWJLaXRXZWJD
b250ZXh0ICoKLXdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCAgICAgIChXZWJLaXRXZWJWaWV3
ICAgICp3ZWJfdmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOworCitXS19FWFBPUlQgV2ViS2l0V2ViTG9hZGVy
Q2xpZW50ICoKK3dlYmtpdF93ZWJfdmlld19nZXRfbG9hZGVyX2NsaWVudCAoV2ViS2l0V2ViVmll
dyAgICAgICAgICp3ZWJfdmlldyk7CisKK1dLX0VYUE9SVCB2b2lkCit3ZWJraXRfd2ViX3ZpZXdf
c2V0X2xvYWRlcl9jbGllbnQgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYkxvYWRlckNsaWVudCAqbG9h
ZGVyX2NsaWVudCk7CiAKIFdLX0VYUE9SVCB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkg
ICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAqd2ViVmlldywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICp1cmkpOword2Via2l0X3dlYl92aWV3X2xv
YWRfdXJpICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgKnVyaSk7
CiAKIFdLX0VYUE9SVCB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAqd2ViVmlldyk7Cit3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayAgICAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcpOwogCiBXS19FWFBPUlQgdm9pZAot
d2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQgICAgICAgKFdlYktpdFdlYlZpZXcgICAgKndlYlZp
ZXcpOword2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQgICAgICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAgKndlYl92aWV3KTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTFlNzFmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMKQEAgLTAsMCArMSwy
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgR3VzdGF2byBOb3JvbmhhIFNp
bHZhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K
KyNpbmNsdWRlIDx3ZWJraXQyZ3RrLmg+CisKKy8qIFRoaXMgc3RyaW5nIGhhcyB0byBiZSByYXRo
ZXIgYmlnIGJlY2F1c2Ugb2YgdGhlIGNhbmNlbGxlZCB0ZXN0IC0gaXQKKyAqIGxvb2tzIGxpa2Ug
c291cCByZWZ1c2VzIHRvIHNlbmQgb3IgcmVjZWl2ZSBhIHRvbyBzbWFsbCBjaHVuayAqLworI2Rl
ZmluZSBIVE1MX1NUUklORyAiPGh0bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nITwvYm9keT48L2h0bWw+IgorCitTb3Vw
VVJJICpiYXNlX3VyaTsKKworLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCitzdGF0aWMg
dm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtc2cs
IGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqIHF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCog
Y29udGV4dCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9N
RVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9T
VEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bXNnLCBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSk7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2FwcGVuZChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvdGVz
dF9sb2FkaW5nX3N0YXR1cyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90
ZXN0X2xvYWRpbmdfc3RhdHVzIikgfHwgZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRpbmdf
c3RhdHVzMiIpKQorICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25z
ZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIEhUTUxfU1RSSU5HLCBzdHJsZW4oSFRNTF9TVFJJ
TkcpKTsKKyAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZF9lcnJvciIp
KSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfQ0FO
VF9DT05ORUNUKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2Fk
aW5nX2NhbmNlbGxlZCIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3NldF9lbmNv
ZGluZyhtc2ctPnJlc3BvbnNlX2hlYWRlcnMsIFNPVVBfRU5DT0RJTkdfQ0hVTktFRCk7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX1NUQVRJQywgSFRNTF9TVFJJTkcsIHN0cmxlbihIVE1MX1NUUklORykpOworICAgICAgICBz
b3VwX3NlcnZlcl91bnBhdXNlX21lc3NhZ2Uoc2VydmVyLCBtc2cpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobXNnLT5yZXNwb25zZV9i
b2R5KTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXc7
CisgICAgR01haW5Mb29wICpsb29wOworICAgIGdib29sZWFuIGhhc0JlZW5Qcm92aXNpb25hbDsK
KyAgICBnYm9vbGVhbiBoYXNCZWVuUmVkaXJlY3Q7CisgICAgZ2Jvb2xlYW4gaGFzQmVlbkNvbW1p
dHRlZDsKKyAgICBnYm9vbGVhbiBoYXNCZWVuRmluaXNoZWQ7CisgICAgZ2Jvb2xlYW4gaGFzQmVl
bkZhaWxlZDsKK30gV2ViTG9hZGluZ0ZpeHR1cmU7CisKK3N0YXRpYyB2b2lkIHdlYkxvYWRpbmdG
aXh0dXJlU2V0dXAoV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0
YSkKK3sKKyAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJf
dmlld19uZXcoKSk7CisgICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBU
UlVFKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBmaXh0
dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuUmVk
aXJlY3QgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkID0gRkFMU0U7Cisg
ICAgZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkID0gRkFMU0U7CisgICAgZml4dHVyZS0+aGFzQmVl
bkZhaWxlZCA9IEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB3ZWJMb2FkaW5nRml4dHVyZVRlYXJk
b3duKFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7Cisg
ICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5y
ZWYoZml4dHVyZS0+bG9vcCk7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRVcmlGb3JQYXRoKGNvbnN0
IGNoYXIqIHBhdGgpCit7CisgICAgU291cFVSSSAqdXJpOworICAgIGNoYXIgKnVyaV9zdHJpbmc7
CisKKyAgICB1cmkgPSBzb3VwX3VyaV9uZXdfd2l0aF9iYXNlKGJhc2VfdXJpLCBwYXRoKTsKKyAg
ICB1cmlfc3RyaW5nID0gc291cF91cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpOworICAgIHNvdXBf
dXJpX2ZyZWUodXJpKTsKKworICAgIHJldHVybiB1cmlfc3RyaW5nOworfQorCisvKiBMb2FkIFN0
YXR1cyAqLworc3RhdGljIHZvaWQgbG9hZFN0YXR1c1Byb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoV2Vi
S2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQor
eworICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOworICAgIGdfYXNz
ZXJ0KCFmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QpOworICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5o
YXNCZWVuQ29tbWl0dGVkKTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwgPSBUUlVF
OworfQorCitzdGF0aWMgdm9pZCBsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2
ZXJSZWRpcmVjdChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgV2ViTG9hZGluZ0ZpeHR1
cmUgKmZpeHR1cmUpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFs
KTsKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlblJlZGlyZWN0KTsKKyAgICBnX2Fzc2Vy
dCghZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCk7CisgICAgZml4dHVyZS0+aGFzQmVlblJlZGly
ZWN0ID0gVFJVRTsKK30KKworc3RhdGljIHZvaWQgbG9hZFN0YXR1c1Byb3Zpc2lvbmFsTG9hZEZh
aWxlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgR0Vycm9yICplcnJvciwgV2ViTG9h
ZGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKK30K
Kworc3RhdGljIHZvaWQgbG9hZFN0YXR1c0xvYWRDb21taXR0ZWQoV2ViS2l0V2ViTG9hZGVyQ2xp
ZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFz
QmVlblJlZGlyZWN0KTsKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCk7
CisgICAgZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCA9IFRSVUU7Cit9CisKK3N0YXRpYyB2b2lk
IGxvYWRTdGF0dXNMb2FkRmluaXNoZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdl
YkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0Jl
ZW5Qcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblJlZGlyZWN0KTsK
KyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydCgh
Zml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkKTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuRmluaXNoZWQg
PSBUUlVFOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKK30KKworc3Rh
dGljIHZvaWQgbG9hZFN0YXR1c0xvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGll
bnQsIEdFcnJvciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworICAgIGdf
YXNzZXJ0X25vdF9yZWFjaGVkKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkaW5nU3RhdHVz
KFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAg
Y2hhciAqdXJpU3RyaW5nOworICAgIFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50ID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xpZW50KGZpeHR1cmUtPndlYlZpZXcpOworCisgICAg
Z19zaWduYWxfY29ubmVjdChjbGllbnQsICJwcm92aXNpb25hbC1sb2FkLXN0YXJ0ZWQiLCBHX0NB
TExCQUNLKGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRTdGFydGVkKSwgZml4dHVyZSk7CisgICAg
Z19zaWduYWxfY29ubmVjdChjbGllbnQsICJwcm92aXNpb25hbC1sb2FkLXJlY2VpdmVkLXNlcnZl
ci1yZWRpcmVjdCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c1Byb3Zpc2lvbmFsTG9hZFJlY2VpdmVk
U2VydmVyUmVkaXJlY3QpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwg
InByb3Zpc2lvbmFsLWxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkU3RhdHVzUHJvdmlzaW9u
YWxMb2FkRmFpbGVkKSwgZml4dHVyZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJs
b2FkLWNvbW1pdHRlZCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c0xvYWRDb21taXR0ZWQpLCBmaXh0
dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmluaXNoZWQiLCBHX0NB
TExCQUNLKGxvYWRTdGF0dXNMb2FkRmluaXNoZWQpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KGNsaWVudCwgImxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkU3RhdHVzTG9hZEZh
aWxlZCksIGZpeHR1cmUpOworCisgICAgdXJpU3RyaW5nID0gZ2V0VXJpRm9yUGF0aCgiLyIpOwor
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlTdHJpbmcp
OworICAgIGdfZnJlZSh1cmlTdHJpbmcpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUt
Pmxvb3ApOworCisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKKyAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QpOworICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPmhhc0JlZW5Db21taXR0ZWQpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5GaW5p
c2hlZCk7Cit9CisKKy8qIExvYWQgRXJyb3IgKi8KK3N0YXRpYyB2b2lkIGxvYWRFcnJvclByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRp
bmdGaXh0dXJlICpmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuUHJv
dmlzaW9uYWwpOworICAgIGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCA9IFRSVUU7Cit9CisK
K3N0YXRpYyB2b2lkIGxvYWRFcnJvclByb3Zpc2lvbmFsTG9hZEZhaWxlZChXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQgKmNsaWVudCwgR0Vycm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1
cmUpCit7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKKyAgICBn
X2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkZhaWxlZCk7CisgICAgZml4dHVyZS0+aGFzQmVlbkZh
aWxlZCA9IFRSVUU7CisKKyAgICBnX2Fzc2VydChlcnJvcik7CisKKyAgICBnX21haW5fbG9vcF9x
dWl0KGZpeHR1cmUtPmxvb3ApOworfQorCitzdGF0aWMgdm9pZCBsb2FkRXJyb3JMb2FkRmluaXNo
ZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0
dXJlKQoreworICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRl
c3RMb2FkaW5nRXJyb3IoV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKK3sKKyAgICBjaGFyICp1cmlTdHJpbmc7CisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50
ICpjbGllbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQoZml4dHVyZS0+d2Vi
Vmlldyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgInByb3Zpc2lvbmFsLWxvYWQt
c3RhcnRlZCIsIEdfQ0FMTEJBQ0sobG9hZEVycm9yUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCksIGZp
eHR1cmUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1m
YWlsZWQiLCBHX0NBTExCQUNLKGxvYWRFcnJvclByb3Zpc2lvbmFsTG9hZEZhaWxlZCksIGZpeHR1
cmUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FM
TEJBQ0sobG9hZEVycm9yTG9hZEZpbmlzaGVkKSwgZml4dHVyZSk7CisKKyAgICB1cmlTdHJpbmcg
PSBnZXRVcmlGb3JQYXRoKCIvdGVzdF9sb2FkX2Vycm9yIik7CisgICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaVN0cmluZyk7CisgICAgZ19mcmVlKHVyaVN0
cmluZyk7CisKKyAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7CisKKyAgICBnX2Fz
c2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc0JlZW5GYWlsZWQpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7
CisgICAgU291cFNlcnZlciAqc2VydmVyOworCisgICAgZ190aHJlYWRfaW5pdChOVUxMKTsKKyAg
ICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7CisKKyAgICBnX3NldGVudigiV0VC
S0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKKworICAgIHNlcnZlciA9
IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKKyAgICBzb3VwX3Nl
cnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKKworICAgIHNvdXBfc2VydmVyX2FkZF9oYW5kbGVyKHNl
cnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwpOworCisgICAgYmFzZV91cmkg
PSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7CisgICAgc291cF91cmlfc2V0X3Bv
cnQoYmFzZV91cmksIHNvdXBfc2VydmVyX2dldF9wb3J0KHNlcnZlcikpOworCisgICAgZ190ZXN0
X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKyAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0Mi9sb2FkaW5nL3N0YXR1cyIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVy
ZSwgTlVMTCwKKyAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlU2V0dXAsCisgICAgICAg
ICAgICAgICB0ZXN0TG9hZGluZ1N0YXR1cywKKyAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0
dXJlVGVhcmRvd24pOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQyL2xvYWRpbmcvZXJyb3IiLAor
ICAgICAgICAgICAgICAgV2ViTG9hZGluZ0ZpeHR1cmUsIE5VTEwsCisgICAgICAgICAgICAgICB3
ZWJMb2FkaW5nRml4dHVyZVNldHVwLAorICAgICAgICAgICAgICAgdGVzdExvYWRpbmdFcnJvciwK
KyAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24pOworCisgICAgcmV0dXJu
IGdfdGVzdF9ydW4oKTsKK30KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108456</attachid>
            <date>2011-09-23 03:31:54 -0700</date>
            <delta_ts>2011-09-28 05:52:15 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-loader-client4.diff</filename>
            <type>text/plain</type>
            <size>41493</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjODI4ZDUwLi42ZTc0MDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTEtMDktMjMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIExvYWRlciBjbGllbnQgaW1wbGVtZW50YXRpb24gZm9yIFdlYktp
dDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY4MDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkcyBhIG5ldyBvYmplY3QsIFdlYktpdFdlYkxvYWRlckNsaWVudCwgdGhhdCBlbWl0cyBz
aWduYWxzIGZvcgorICAgICAgICBldmVyeSBwYWdlIGxvYWRlciBjYWxsYmFjay4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHA6IEFkZGVkLgor
ICAgICAgICAoZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6CisgICAgICAgIChkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6CisgICAgICAg
IChkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUpOgorICAgICAgICAoZGlk
Q29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKGRpZEZpbmlzaExvYWRGb3JGcmFtZSk6Cisg
ICAgICAgIChkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lKToKKyAgICAgICAgKHdlYmtpdFdl
YkxvYWRlckNsaWVudENvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdFdlYkxvYWRlckNsaWVu
dFNldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdFdlYkxvYWRlckNsaWVudEdldFByb3BlcnR5
KToKKyAgICAgICAgKHdlYmtpdF93ZWJfbG9hZGVyX2NsaWVudF9pbml0KToKKyAgICAgICAgKHdl
YmtpdF93ZWJfbG9hZGVyX2NsaWVudF9jbGFzc19pbml0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJMb2FkZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q29u
c3RydWN0ZWQpOiBDcmVhdGUgdGhlIGxvYWRlciBjbGllbnQgZm9yIHRoZSB2aWV3LgorICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9s
b2FkZXJfY2xpZW50KTogR2V0IHRoZSBjdXJyZW50IGxvYWRlciBjbGllbnQuCisgICAgICAgICh3
ZWJraXRfd2ViX3ZpZXdfc2V0X2xvYWRlcl9jbGllbnQpOiBTZXQgYSBuZXcgbG9hZGVyIGNsaWVu
dC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYzogQWRkZWQuCisgICAgICAg
IChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgICh3ZWJMb2FkaW5nRml4dHVyZVNldHVwKToKKyAg
ICAgICAgKHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24pOgorICAgICAgICAoZ2V0VXJpRm9yUGF0
aCk6CisgICAgICAgIChsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk6CisgICAgICAg
IChsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk6CisgICAg
ICAgIChsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkRmFpbGVkKToKKyAgICAgICAgKGxvYWRTdGF0
dXNMb2FkQ29tbWl0dGVkKToKKyAgICAgICAgKGxvYWRTdGF0dXNMb2FkRmluaXNoZWQpOgorICAg
ICAgICAobG9hZFN0YXR1c0xvYWRGYWlsZWQpOgorICAgICAgICAodGVzdExvYWRpbmdTdGF0dXMp
OgorICAgICAgICAobG9hZEVycm9yUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk6CisgICAgICAgIChs
b2FkRXJyb3JQcm92aXNpb25hbExvYWRGYWlsZWQpOgorICAgICAgICAobG9hZEVycm9yTG9hZEZp
bmlzaGVkKToKKyAgICAgICAgKHRlc3RMb2FkaW5nRXJyb3IpOgorICAgICAgICAobWFpbik6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdDogQWRkZWQuCisK
IDIwMTEtMDktMjIgIEdvcGFsIFJhZ2hhdmFuICA8Z29wYWwuMS5yYWdoYXZhbkBub2tpYS5jb20+
CiAKICAgICAgICAgW1F0XSBUb3VjaFdlYlZpZXcgbG9hZCB0ZXN0IG5vdCBydW5uaW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtCmluZGV4IGZiY2I2YTguLmJkMmEyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFt
CkBAIC03MCwxMiArNzAsMTQgQEAgbGlid2Via2l0Mmd0a2luY2x1ZGVkaXIgPSAkKGxpYndlYmtp
dGd0a2luY2x1ZGVkaXIpL3dlYmtpdDIKIHdlYmtpdDJndGtfaGVhZGVycyA9IFwKIAkkKFdlYktp
dDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmggXAogCSQoV2ViS2l0MikvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5oCiAKIGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJ
JCh3ZWJraXQyZ3RrX2hlYWRlcnMpIFwKLQlEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYktpdEVu
dW1UeXBlcy5oCisJRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJLaXRFbnVtVHlwZXMuaCBcCisJ
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJLaXRNYXJzaGFsLmgKIAogbGlid2Via2l0Z3RraW5j
bHVkZV9IRUFERVJTICs9IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJn
dGsuaApAQCAtMTM3LDYgKzEzOSw4IEBAIHdlYmtpdDJfYnVpbHRfc291cmNlcyArPSBcCiAJRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUHJveHlNZXNzYWdl
cy5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYktpdEVudW1UeXBlcy5jcHAgXAogCURl
cml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViS2l0RW51bVR5cGVzLmggXAorCURlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvV2ViS2l0TWFyc2hhbC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2Vi
S2l0TWFyc2hhbC5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYk1lZGlhQ2FjaGVNYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJNZWRp
YUNhY2hlTWFuYWdlck1lc3NhZ2VzLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViTWVk
aWFDYWNoZU1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgXApAQCAtNDY1LDYgKzQ2OSw4
IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdU
S19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmggXApAQCAtMTAzMyw2ICsxMDM5LDIz
IEBAIERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViS2l0RW51bVR5cGVzLmNwcDogJCh3ZWJraXQy
Z3RrX2hlYWRlcnMpICQoV2ViS2l0MikvR05VCiAJJiYgY3AgeGdlbi1ndGMgJEAgXAogCSYmIHJt
IC1mIHhnZW4tZ3RjCiAKK1dFQktJVDJfTUFSU0hBTF9MSVNUID0gJChXZWJLaXQyKS9VSVByb2Nl
c3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CisKK0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
V2ViS2l0TWFyc2hhbC5jcHA6IHN0YW1wLXdlYmtpdDJtYXJzaGFsLmNwcAorCUB0cnVlCitEZXJp
dmVkU291cmNlcy9XZWJLaXQyL1dlYktpdE1hcnNoYWwuaDogc3RhbXAtd2Via2l0Mm1hcnNoYWwu
aAorCUB0cnVlCisKK3N0YW1wLXdlYmtpdDJtYXJzaGFsLmNwcDogJChXRUJLSVQyX01BUlNIQUxf
TElTVCkKKwkkKEFNX1ZfR0VOKSBlY2hvICJleHRlcm4gXCJDXCIgeyIgPiAkKEdFTlNPVVJDRVNf
V0VCS0lUMikvV2ViS2l0TWFyc2hhbC5jcHAgJiYgXAorCSQoR0xJQl9HRU5NQVJTSEFMKSAtLXBy
ZWZpeD13ZWJraXRfbWFyc2hhbCAkKFdFQktJVDJfTUFSU0hBTF9MSVNUKSAtLWJvZHkgPj4gJChH
RU5TT1VSQ0VTX1dFQktJVDIpL1dlYktpdE1hcnNoYWwuY3BwICYmIFwKKwllY2hvICd9JyA+PiAk
KEdFTlNPVVJDRVNfV0VCS0lUMikvV2ViS2l0TWFyc2hhbC5jcHAgJiYgXAorCWVjaG8gdGltZXN0
YW1wID4gJChARikKKworc3RhbXAtd2Via2l0Mm1hcnNoYWwuaDogJChXRUJLSVQyX01BUlNIQUxf
TElTVCkKKwkkKEFNX1ZfR0VOKSQoR0xJQl9HRU5NQVJTSEFMKSAtLXByZWZpeD13ZWJraXRfbWFy
c2hhbCAkKFdFQktJVDJfTUFSU0hBTF9MSVNUKSAtLWhlYWRlciA+ICQoR0VOU09VUkNFU19XRUJL
SVQyKS9XZWJLaXRNYXJzaGFsLmggJiYgXAorCWVjaG8gdGltZXN0YW1wID4gJChARikKKwogQ0xF
QU5GSUxFUyArPSBcCiAJJChCVUlMVF9TT1VSQ0VTKSBcCiAJJCh0b3BfYnVpbGRkaXIpL3N0YW1w
LXdlYmtpdDJlbnVtdHlwZXMgXApAQCAtMTA0NSwxMCArMTA2OCwxMiBAQCBESVNUQ0xFQU5GSUxF
UyArPSBcCiAjIFVuaXQgdGVzdHMKIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL3VuaXR0ZXN0
cy93ZWJraXQyL3Rlc3R3ZWJjb250ZXh0IFwKLQlQcm9ncmFtcy91bml0dGVzdHMvd2Via2l0Mi90
ZXN0d2VidmlldworCVByb2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQyL3Rlc3R3ZWJ2aWV3IFwKKwlQ
cm9ncmFtcy91bml0dGVzdHMvd2Via2l0Mi90ZXN0bG9hZGluZwogCiBub2luc3RfUFJPR1JBTVMg
Kz0gJChURVNUX1BST0dTKQogd2Via2l0Ml90ZXN0c19jZmxhZ3MgPSBcCisJLURXRUJLSVRfRVhF
Q19QQVRIPVwiJHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS9Qcm9ncmFtc1wiIFwKIAktSSQo
c3JjZGlyKS9Tb3VyY2UgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyIFwKIAktSSQodG9w
X2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL2luY2x1ZGUgXApAQCAtMTA4MSw2ICsx
MTA2LDExIEBAIFByb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3R3ZWJ2aWV3X0NGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19jZmxhZ3MpCiBQcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0
d2Vidmlld19MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKIFByb2dyYW1zX3VuaXR0ZXN0
c193ZWJraXQyX3Rlc3R3ZWJ2aWV3X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykK
IAorUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdfU09VUkNFUyA9IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMKK1Byb2dyYW1z
X3VuaXR0ZXN0c193ZWJraXQyX3Rlc3Rsb2FkaW5nX0NGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19j
ZmxhZ3MpCitQcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0bG9hZGluZ19MREFERCA9ICQo
d2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3Rsb2Fk
aW5nX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKKwogIyBXZWJLaXRXZWJQcm9j
ZXNzCiBsaWJleGVjX1BST0dSQU1TICs9IFwKIAlQcm9ncmFtcy9XZWJLaXRXZWJQcm9jZXNzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJMb2Fk
ZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
TG9hZGVyQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDI3
NjFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViTG9hZGVyQ2xpZW50LmNwcApAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0V2ViTG9hZGVyQ2xpZW50LmgiCisKKyNpbmNsdWRlICJXZWJLaXRNYXJzaGFsLmgiCisj
aW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXcuaCIKKyNp
bmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2VudW0g
eworICAgIFBST1ZJU0lPTkFMX0xPQURfU1RBUlRFRCwKKyAgICBQUk9WSVNJT05BTF9MT0FEX1JF
Q0VJVkVEX1NFUlZFUl9SRURJUkVDVCwKKyAgICBQUk9WSVNJT05BTF9MT0FEX0ZBSUxFRCwKKwor
ICAgIExPQURfQ09NTUlUVEVELAorICAgIExPQURfRklOSVNIRUQsCisgICAgTE9BRF9GQUlMRUQs
CisKKyAgICBMQVNUX1NJR05BTAorfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJP
UF9XRUJfVklFVworfTsKKworc3RydWN0IF9XZWJLaXRXZWJMb2FkZXJDbGllbnRQcml2YXRlIHsK
KyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHZpZXc7Cit9OworCitzdGF0aWMgZ3VpbnQgc2ln
bmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViTG9h
ZGVyQ2xpZW50LCB3ZWJraXRfd2ViX2xvYWRlcl9jbGllbnQsIEdfVFlQRV9PQkpFQ1QpCisKK3N0
YXRpYyB2b2lkIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2Us
IFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKK3sKKyAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50ID0gV0VCS0lUX1dFQl9M
T0FERVJfQ0xJRU5UKGNsaWVudEluZm8pOworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAg
IGdfc2lnbmFsX2VtaXQoY2xpZW50LCBzaWduYWxzW1BST1ZJU0lPTkFMX0xPQURfU1RBUlRFRF0s
IDAsICZyZXR1cm5WYWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFJlY2VpdmVTZXJ2ZXJSZWRp
cmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVm
IGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGNsaWVudCA9IFdFQktJVF9XRUJfTE9BREVSX0NMSUVO
VChjbGllbnRJbmZvKTsKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9l
bWl0KGNsaWVudCwgc2lnbmFsc1tQUk9WSVNJT05BTF9MT0FEX1JFQ0VJVkVEX1NFUlZFUl9SRURJ
UkVDVF0sIDAsICZyZXR1cm5WYWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZhaWxQcm92aXNp
b25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFt
ZSwgV0tFcnJvclJlZiBlcnJvciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvciA9IHRvSW1w
bChlcnJvciktPnBsYXRmb3JtRXJyb3IoKTsKKyAgICBHT3duUHRyPEdFcnJvcj4gd2ViRXJyb3Io
Z19lcnJvcl9uZXdfbGl0ZXJhbChnX3F1YXJrX2Zyb21fc3RyaW5nKHJlc291cmNlRXJyb3IuZG9t
YWluKCkudXRmOCgpLmRhdGEoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzb3VyY2VFcnJvci5lcnJvckNvZGUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUVycm9yLmxvY2FsaXpl
ZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSkpOworICAgIFdlYktpdFdlYkxvYWRlckNsaWVu
dCogY2xpZW50ID0gV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKGNsaWVudEluZm8pOworICAgIGdi
b29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFsX2VtaXQoY2xpZW50LCBzaWduYWxzW1BS
T1ZJU0lPTkFMX0xPQURfRkFJTEVEXSwgMCwgd2ViRXJyb3IuZ2V0KCksICZyZXR1cm5WYWx1ZSk7
Cit9CisKK3N0YXRpYyB2b2lkIGRpZENvbW1pdExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwg
V0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQoreworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQgPSBXRUJLSVRfV0VCX0xP
QURFUl9DTElFTlQoY2xpZW50SW5mbyk7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAg
Z19zaWduYWxfZW1pdChjbGllbnQsIHNpZ25hbHNbTE9BRF9DT01NSVRURURdLCAwLCAmcmV0dXJu
VmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV0tQYWdlUmVm
IHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKK3sKKyAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50ID0gV0VCS0lU
X1dFQl9MT0FERVJfQ0xJRU5UKGNsaWVudEluZm8pOworICAgIGdib29sZWFuIHJldHVyblZhbHVl
OworICAgIGdfc2lnbmFsX2VtaXQoY2xpZW50LCBzaWduYWxzW0xPQURfRklOSVNIRURdLCAwLCAm
cmV0dXJuVmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZy
YW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS0Vycm9yUmVmIGVycm9yLCBX
S1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgaWYgKCFX
S0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBS
ZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yID0gdG9JbXBsKGVycm9yKS0+cGxhdGZvcm1FcnJv
cigpOworICAgIEdPd25QdHI8R0Vycm9yPiB3ZWJFcnJvcihnX2Vycm9yX25ld19saXRlcmFsKGdf
cXVhcmtfZnJvbV9zdHJpbmcocmVzb3VyY2VFcnJvci5kb21haW4oKS51dGY4KCkuZGF0YSgpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJj
ZUVycm9yLmVycm9yQ29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc291cmNlRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCku
ZGF0YSgpKSk7CisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQgPSBXRUJLSVRfV0VC
X0xPQURFUl9DTElFTlQoY2xpZW50SW5mbyk7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7Cisg
ICAgZ19zaWduYWxfZW1pdChjbGllbnQsIHNpZ25hbHNbTE9BRF9GQUlMRURdLCAwLCB3ZWJFcnJv
ci5nZXQoKSwgJnJldHVyblZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViTG9hZGVy
Q2xpZW50Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFdlYkxvYWRl
ckNsaWVudCogY2xpZW50ID0gV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKG9iamVjdCk7CisgICAg
V2ViS2l0V2ViTG9hZGVyQ2xpZW50UHJpdmF0ZSogcHJpdiA9IGNsaWVudC0+cHJpdjsKKworICAg
IFdLUGFnZUxvYWRlckNsaWVudCBsb2FkZXJDbGllbnQgPSB7CisgICAgICAgIGtXS1BhZ2VMb2Fk
ZXJDbGllbnRDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgY2xpZW50LCAgLy8gY2xpZW50SW5mbwor
ICAgICAgICBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lLAorICAgICAgICBkaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSwKKyAgICAgICAgZGlk
RmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lLAorICAgICAgICBkaWRDb21taXRM
b2FkRm9yRnJhbWUsCisgICAgICAgIDAsICAgICAgIC8vIGRpZEZpbmlzaERvY3VtZW50TG9hZEZv
ckZyYW1lCisgICAgICAgIGRpZEZpbmlzaExvYWRGb3JGcmFtZSwKKyAgICAgICAgZGlkRmFpbExv
YWRXaXRoRXJyb3JGb3JGcmFtZSwKKyAgICAgICAgMCwgICAgICAgLy8gZGlkU2FtZURvY3VtZW50
TmF2aWdhdGlvbkZvckZyYW1lCisgICAgICAgIDAsICAgICAgIC8vIGRpZFJlY2VpdmVUaXRsZUZv
ckZyYW1lCisgICAgICAgIDAsICAgICAgIC8vIGRpZEZpcnN0TGF5b3V0Rm9yRnJhbWUKKyAgICAg
ICAgMCwgICAgICAgLy8gZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUKKyAg
ICAgICAgMCwgICAgICAgLy8gZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5CisgICAgICAgIDAs
ICAgICAgIC8vIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRGb3JGcmFtZQorICAgICAgICAwLCAg
ICAgICAvLyBkaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZQorICAgICAgICAwLCAgICAgICAv
LyBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlSW5GcmFtZQorICAgICAgICAw
LCAgICAgICAvLyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VJbkZyYW1lCisgICAg
ICAgIDAsICAgICAgIC8vIGRpZFN0YXJ0UHJvZ3Jlc3MKKyAgICAgICAgMCwgICAgICAgLy8gZGlk
Q2hhbmdlUHJvZ3Jlc3MKKyAgICAgICAgMCwgICAgICAgLy8gZGlkRmluaXNoUHJvZ3Jlc3MKKyAg
ICAgICAgMCwgICAgICAgLy8gZGlkQmVjb21lVW5yZXNwb25zaXZlCisgICAgICAgIDAsICAgICAg
IC8vIGRpZEJlY29tZVJlc3BvbnNpdmUKKyAgICAgICAgMCwgICAgICAgLy8gcHJvY2Vzc0RpZENy
YXNoCisgICAgICAgIDAsICAgICAgIC8vIGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdAorICAgICAg
ICAwLCAgICAgICAvLyBzaG91bGRHb1RvQmFja0ZvcndhcmRMaXN0SXRlbQorICAgICAgICAwICAg
ICAgICAvLyBkaWRGYWlsVG9Jbml0aWFsaXplUGx1Z2luCisgICAgfTsKKyAgICBXZWJQYWdlUHJv
eHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uo
cHJpdi0+dmlldy5nZXQoKSkpOworICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQodG9BUEko
cGFnZSksICZsb2FkZXJDbGllbnQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJMb2FkZXJD
bGllbnRTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdFdlYkxvYWRl
ckNsaWVudCogY2xpZW50ID0gV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9XRUJfVklFVzoKKyAgICAgICAgY2xp
ZW50LT5wcml2LT52aWV3ID0gYWRvcHRHUmVmKFdFQktJVF9XRUJfVklFVyhnX3ZhbHVlX2R1cF9v
YmplY3QodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVj
KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYkxvYWRlckNsaWVudEdldFByb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQgPSBX
RUJLSVRfV0VCX0xPQURFUl9DTElFTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7
CisgICAgY2FzZSBQUk9QX1dFQl9WSUVXOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIGNsaWVudC0+cHJpdi0+dmlldy5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BJZCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfbG9h
ZGVyX2NsaWVudF9pbml0KFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50KQoreworICAgIFdl
YktpdFdlYkxvYWRlckNsaWVudFByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BS
SVZBVEUoY2xpZW50LCBXRUJLSVRfVFlQRV9XRUJfTE9BREVSX0NMSUVOVCwgV2ViS2l0V2ViTG9h
ZGVyQ2xpZW50UHJpdmF0ZSk7CisgICAgY2xpZW50LT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHBy
aXYpIFdlYktpdFdlYkxvYWRlckNsaWVudFByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl9sb2FkZXJfY2xpZW50X2NsYXNzX2luaXQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50Q2xh
c3MqIGNsaWVudENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhjbGllbnRDbGFzcyk7CisKKyAgICBvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5
ID0gd2Via2l0V2ViTG9hZGVyQ2xpZW50U2V0UHJvcGVydHk7CisgICAgb2JqZWN0Q2xhc3MtPmdl
dF9wcm9wZXJ0eSA9IHdlYmtpdFdlYkxvYWRlckNsaWVudEdldFByb3BlcnR5OworICAgIG9iamVj
dENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdFdlYkxvYWRlckNsaWVudENvbnN0cnVjdGVkOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzp3ZWItdmlldzoKKyAgICAgKgorICAgICAq
IFRoZSAjV2ViS2l0V2ViVmlldyBvZiB0aGUgbG9hZGVyIGNsaWVudC4KKyAgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9XRUJfVklFVywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoIndlYi12aWV3IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldlYiBW
aWV3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlRoZSB3ZWIgdmlldyBmb3IgdGhlIGxvYWRlciBjbGllbnQiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9X
RUJfVklFVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUg
fCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2Vi
TG9hZGVyQ2xpZW50Ojpwcm92aXNpb25hbC1sb2FkLXN0YXJ0ZWQ6CisgICAgICogQGxvYWRlcl9j
bGllbnQ6IHRoZSAjV2ViS2l0V2ViTG9hZGVyCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBp
cyBlbWl0dGVkIHdoZW4gbmV3IGxvYWQgcmVxdWVzdCBpcyBtYWRlLgorICAgICAqIE5vIGRhdGEg
aGFzIGJlZW4gcmVjZWl2ZWQgeWV0LCBlbXB0eSBzdHJ1Y3R1cmVzIGhhdmUKKyAgICAgKiBiZWVu
IGFsbG9jYXRlZCB0byBwZXJmb3JtIHRoZSBsb2FkOyB0aGUgbG9hZCBtYXkgc3RpbGwKKyAgICAg
KiBmYWlsIGZvciB0cmFuc3BvcnQgaXNzdWVzIHN1Y2ggYXMgbm90IGJlaW5nIGFibGUgdG8KKyAg
ICAgKiByZXNvbHZlIGEgbmFtZSwgb3IgY29ubmVjdCB0byBhIHBvcnQuCisgICAgICoKKyAgICAg
KiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tl
ZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQg
ZnVydGhlci4KKyAgICAgKi8KKyAgICBzaWduYWxzW1BST1ZJU0lPTkFMX0xPQURfU1RBUlRFRF0g
PQorICAgICAgICBnX3NpZ25hbF9uZXcoInByb3Zpc2lvbmFsLWxvYWQtc3RhcnRlZCIsCisgICAg
ICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAgICAg
ICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdf
U1RSVUNUX09GRlNFVChXZWJLaXRXZWJMb2FkZXJDbGllbnRDbGFzcywgcHJvdmlzaW9uYWxfbG9h
ZF9zdGFydGVkKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3Ry
dWVfaGFuZGxlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JP
T0xFQU5fX1ZPSUQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FKTsKKworICAgIC8qKgorICAgICAqIFdlYktp
dFdlYkxvYWRlckNsaWVudDo6cHJvdmlzaW9uYWwtbG9hZC1yZWNlaXZlZC1zZXJ2ZXItcmVkaXJl
Y3Q6CisgICAgICogQGxvYWRlcl9jbGllbnQ6IHRoZSAjV2ViS2l0V2ViTG9hZGVyCisgICAgICoK
KyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBwcm92aXNpb25hbCBkYXRhIHNv
dXJjZQorICAgICAqIHJlY2VpdmVzIGEgc2VydmVyIHJlZGlyZWN0LgorICAgICAqCisgICAgICog
VGhpcyBzaWduYWwgaXMgZW1pdHRlZCBhZnRlciAjV2ViS2l0V2ViTG9hZGVyQ2xpZW50Ojpwcm92
aXNpb25hbC1sb2FkLXN0YXJ0ZWQuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBz
dG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAg
ICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKi8KKyAg
ICBzaWduYWxzW1BST1ZJU0lPTkFMX0xPQURfUkVDRUlWRURfU0VSVkVSX1JFRElSRUNUXSA9Cisg
ICAgICAgIGdfc2lnbmFsX25ldygicHJvdmlzaW9uYWwtbG9hZC1yZWNlaXZlZC1zZXJ2ZXItcmVk
aXJlY3QiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob2JqZWN0Q2xh
c3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAg
ICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50Q2xhc3MsIHBy
b3Zpc2lvbmFsX2xvYWRfcmVjZWl2ZWRfc2VydmVyX3JlZGlyZWN0KSwKKyAgICAgICAgICAgICAg
ICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgTlVMTCwKKyAgICAgICAg
ICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX1ZPSUQsCisgICAgICAgICAgICAg
ICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9O
T05FKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYkxvYWRlckNsaWVudDo6cHJvdmlzaW9u
YWwtbG9hZC1mYWlsZWQ6CisgICAgICogQGxvYWRlcl9jbGllbnQ6IHRoZSAjV2ViS2l0V2ViTG9h
ZGVyCisgICAgICogQGVycm9yOiB0aGUgI0dFcnJvciB0aGF0IHdhcyB0cmlnZ2VyZWQKKyAgICAg
KgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMgd2hl
biBzdGFydGluZyB0bworICAgICAqIGxvYWQgZGF0YSBmb3IgYSBwYWdlLiBCeSBkZWZhdWx0LCBp
ZiB0aGUgc2lnbmFsIGlzIG5vdCBoYW5kbGVkLAorICAgICAqIGEgc3RvY2sgZXJyb3IgcGFnZSB3
aWxsIGJlIGRpc3BsYXllZC4gWW91IG5lZWQgdG8gaGFuZGxlIHRoZSBzaWduYWwKKyAgICAgKiBp
ZiB5b3Ugd2FudCB0byBwcm92aWRlIHlvdXIgb3duIGVycm9yIHBhZ2UuCisgICAgICoKKyAgICAg
KiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIGFmdGVyICNXZWJLaXRXZWJMb2FkZXJDbGllbnQ6OnBy
b3Zpc2lvbmFsLWxvYWQtc3RhcnRlZC4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRv
IHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisg
ICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqLwor
ICAgIHNpZ25hbHNbUFJPVklTSU9OQUxfTE9BRF9GQUlMRURdID0KKyAgICAgICAgZ19zaWduYWxf
bmV3KCJwcm92aXNpb25hbC1sb2FkLWZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05B
TF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRX
ZWJMb2FkZXJDbGllbnRDbGFzcywgcHJvdmlzaW9uYWxfbG9hZF9mYWlsZWQpLAorICAgICAgICAg
ICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBOVUxMLAorICAg
ICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fUE9JTlRFUiwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLAorICAgICAgICAgICAgICAgICAgICAg
R19UWVBFX1BPSU5URVIpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViTG9hZGVyQ2xpZW50
Ojpsb2FkLWNvbW1pdHRlZDoKKyAgICAgKiBAbG9hZGVyX2NsaWVudDogdGhlICNXZWJLaXRXZWJM
b2FkZXIKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBjb250ZW50
IHN0YXJ0cyBhcnJpdmluZyBmb3IgYSBwYWdlIGxvYWQuCisgICAgICogVGhlIG5lY2Vzc2FyeSB0
cmFuc3BvcnQgcmVxdWlyZW1lbnRzIGFyZSBzdGFiaWxpc2hlZCwgYW5kIHRoZQorICAgICAqIGxv
YWQgaXMgYmVpbmcgcGVyZm9ybWVkLgorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1p
dHRlZCBhZnRlciAjV2ViS2l0V2ViTG9hZGVyQ2xpZW50Ojpwcm92aXNpb25hbC1sb2FkLXN0YXJ0
ZWQuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJz
IGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHBy
b3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKi8KKyAgICBzaWduYWxzW0xPQURfQ09N
TUlUVEVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygibG9hZC1jb21taXR0ZWQiLAorICAgICAg
ICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob2JqZWN0Q2xhc3MpLAorICAgICAgICAg
ICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NU
UlVDVF9PRkZTRVQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50Q2xhc3MsIGxvYWRfY29tbWl0dGVkKSwK
KyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwg
TlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX1ZPSUQs
CisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfVFlQRV9OT05FKTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJMb2FkZXJDbGll
bnQ6OmxvYWQtZmluaXNoZWQ6CisgICAgICogQGxvYWRlcl9jbGllbnQ6IHRoZSAjV2ViS2l0V2Vi
TG9hZGVyCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBwYWdl
IGxvYWQgY29tcGxldGUsIHRoYXQgaXMsIHdoZW4gYWxsCisgICAgICogdGhlIHJlc291cmNlcyBh
cmUgZG9uZSBsb2FkaW5nLgorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBh
ZnRlciAjV2ViS2l0V2ViTG9hZGVyQ2xpZW50Ojpsb2FkLWNvbW1pdHRlZC4KKyAgICAgKgorICAg
ICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZv
a2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVu
dCBmdXJ0aGVyLgorICAgICAqLworICAgIHNpZ25hbHNbTE9BRF9GSU5JU0hFRF0gPQorICAgICAg
ICBnX3NpZ25hbF9uZXcoImxvYWQtZmluaXNoZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19U
WVBFX0ZST01fQ0xBU1Mob2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdO
QUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0
V2ViTG9hZGVyQ2xpZW50Q2xhc3MsIGxvYWRfZmluaXNoZWQpLAorICAgICAgICAgICAgICAgICAg
ICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBOVUxMLAorICAgICAgICAgICAg
ICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fVk9JRCwKKyAgICAgICAgICAgICAgICAg
ICAgIEdfVFlQRV9CT09MRUFOLCAwLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViTG9hZGVyQ2xpZW50Ojpsb2FkLWZhaWxlZDoK
KyAgICAgKiBAbG9hZGVyX2NsaWVudDogdGhlICNXZWJLaXRXZWJMb2FkZXIKKyAgICAgKiBAZXJy
b3I6IHRoZSAjR0Vycm9yIHRoYXQgd2FzIHRyaWdnZXJlZAorICAgICAqCisgICAgICogVGhpcyBz
aWduYWwgaXMgZW1pdHRlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBsb2FkaW5nIGEgY29tbWl0dGVk
IGRhdGEgc291cmNlLgorICAgICAqIEJ5IGRlZmF1bHQsIGlmIHRoZSBzaWduYWwgaXMgbm90IGhh
bmRsZWQsIGEgc3RvY2sgZXJyb3IgcGFnZSB3aWxsIGJlIGRpc3BsYXllZC4KKyAgICAgKiBZb3Ug
bmVlZCB0byBoYW5kbGUgdGhlIHNpZ25hbCBpZiB5b3Ugd2FudCB0byBwcm92aWRlIHlvdXIgb3du
IGVycm9yIHBhZ2UuCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIGFmdGVy
ICNXZWJLaXRXZWJMb2FkZXJDbGllbnQ6OmxvYWQtY29tbWl0dGVkLgorICAgICAqCisgICAgICog
UmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQg
Zm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1
cnRoZXIuCisgICAgICovCisgICAgc2lnbmFsc1tMT0FEX0ZBSUxFRF0gPQorICAgICAgICBnX3Np
Z25hbF9uZXcoImxvYWQtZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9N
X0NMQVNTKG9iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9M
QVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYkxvYWRl
ckNsaWVudENsYXNzLCBsb2FkX2ZhaWxlZCksCisgICAgICAgICAgICAgICAgICAgICBnX3NpZ25h
bF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICB3
ZWJraXRfbWFyc2hhbF9CT09MRUFOX19QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgR19U
WVBFX0JPT0xFQU4sIDEsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUik7CisK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoY2xpZW50Q2xhc3MsIHNpemVvZihXZWJLaXRX
ZWJMb2FkZXJDbGllbnRQcml2YXRlKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJMb2FkZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOWRmZjgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmgKQEAgLTAs
MCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdFdlYkxvYWRlckNsaWVudF9oCisjZGVmaW5lIFdlYktpdFdlYkxvYWRlckNsaWVudF9o
CisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfTE9BREVSX0NMSUVO
VCAgICAgICAgICAgICh3ZWJraXRfd2ViX2xvYWRlcl9jbGllbnRfZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9MT0FERVJfQ0xJRU5ULCBXZWJL
aXRXZWJMb2FkZXJDbGllbnQpKQorI2RlZmluZSBXRUJLSVRfV0VCX0xPQURFUl9DTElFTlRfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfV0VCX0xPQURFUl9DTElFTlQsIFdlYktpdFdlYkxvYWRlckNsaWVudENsYXNzKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX1dFQl9MT0FERVJfQ0xJRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9MT0FERVJfQ0xJRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX1dFQl9MT0FERVJfQ0xJRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9MT0FERVJfQ0xJRU5UKSkK
KyNkZWZpbmUgV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1dFQl9MT0FERVJfQ0xJRU5U
LCBXZWJLaXRXZWJMb2FkZXJDbGllbnRDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRX
ZWJMb2FkZXJDbGllbnQgICAgICAgIFdlYktpdFdlYkxvYWRlckNsaWVudDsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJMb2FkZXJDbGllbnRDbGFzcyAgIFdlYktpdFdlYkxvYWRlckNsaWVudENs
YXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkxvYWRlckNsaWVudFByaXZhdGUgV2ViS2l0
V2ViTG9hZGVyQ2xpZW50UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRXZWJMb2FkZXJDbGllbnQg
eworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50UHJpdmF0
ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViTG9hZGVyQ2xpZW50Q2xhc3MgeworICAg
IEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiB2aXJ0dWFsIHRhYmxlICovCisg
ICAgZ2Jvb2xlYW4gKCogcHJvdmlzaW9uYWxfbG9hZF9zdGFydGVkKSAgICAgICAgICAgICAgICAg
IChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmxvYWRlcl9jbGllbnQpOworICAgIGdib29sZWFuICgq
IHByb3Zpc2lvbmFsX2xvYWRfcmVjZWl2ZWRfc2VydmVyX3JlZGlyZWN0KSAoV2ViS2l0V2ViTG9h
ZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50KTsKKyAgICBnYm9vbGVhbiAoKiBwcm92aXNpb25hbF9s
b2FkX2ZhaWxlZCkgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYkxvYWRlckNsaWVudCAqbG9h
ZGVyX2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAqZXJyb3IpOworICAgIGdib29s
ZWFuICgqIGxvYWRfY29tbWl0dGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50KTsKKyAgICBnYm9vbGVhbiAoKiBsb2FkX2Zp
bmlzaGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYkxvYWRlckNsaWVu
dCAqbG9hZGVyX2NsaWVudCk7CisgICAgZ2Jvb2xlYW4gKCogbG9hZF9mYWlsZWQpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmxvYWRlcl9jbGll
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgKmVycm9yKTsKK307CisKK1dLX0VYUE9SVCBH
VHlwZQord2Via2l0X3dlYl9sb2FkZXJfY2xpZW50X2dldF90eXBlICh2b2lkKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGFkN2RiNWUuLmIyZmM3MjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0yMCwx
MyArMjAsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3
LmgiCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldlYktpdFdlYkNv
bnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0
ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNl
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTM5LDYgKzQxLDggQEAgZW51
bSB7CiAKIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgewogICAgIFdlYktpdFdlYkNvbnRl
eHQqIGNvbnRleHQ7CisKKyAgICBHUmVmUHRyPFdlYktpdFdlYkxvYWRlckNsaWVudD4gbG9hZGVy
Q2xpZW50OwogfTsKIAogR19ERUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3LCB3ZWJraXRfd2ViX3Zp
ZXcsIFdFQktJVF9UWVBFX1dFQl9WSUVXX0JBU0UpCkBAIC00Niw5ICs1MCwxMSBAQCBHX0RFRklO
RV9UWVBFKFdlYktpdFdlYlZpZXcsIHdlYmtpdF93ZWJfdmlldywgV0VCS0lUX1RZUEVfV0VCX1ZJ
RVdfQkFTRSkKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChHT2JqZWN0KiBv
YmplY3QpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhv
YmplY3QpOworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsK
KworICAgIHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFT
RSh3ZWJWaWV3KSwgd2Via2l0V2ViQ29udGV4dEdldFdLQ29udGV4dChwcml2LT5jb250ZXh0KSwg
MCk7CiAKLSAgICB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2UoV0VCS0lUX1dFQl9WSUVX
X0JBU0Uod2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtp
dFdlYkNvbnRleHRHZXRXS0NvbnRleHQod2ViVmlldy0+cHJpdi0+Y29udGV4dCksIDApOworICAg
IHByaXYtPmxvYWRlckNsaWVudCA9IGFkb3B0R1JlZihXRUJLSVRfV0VCX0xPQURFUl9DTElFTlQo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9MT0FERVJfQ0xJRU5ULCAid2ViLXZpZXciLCB3
ZWJWaWV3LCBOVUxMKSkpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0UHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBhcmFtU3BlYykKQEAgLTc5LDcgKzg1LDkgQEAgc3RhdGljIHZvaWQgd2Via2l0
V2ViVmlld0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUq
IHZhbHUKIAogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKIHsKLSAgICB3ZWJWaWV3LT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKHdlYlZpZXcsIFdFQktJVF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3UHJpdmF0ZSk7
CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BS
SVZBVEUod2ViVmlldywgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdQcml2YXRl
KTsKKyAgICB3ZWJWaWV3LT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdFdlYlZp
ZXdQcml2YXRlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0
KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQpAQCAtMTUxLDYgKzE1OSw1MSBAQCBX
ZWJLaXRXZWJDb250ZXh0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQoV2ViS2l0V2ViVmll
dyAqd2ViVmlldykKICAgICByZXR1cm4gd2ViVmlldy0+cHJpdi0+Y29udGV4dDsKIH0KIAorLyoq
CisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQ6CisgKiBAd2ViX3ZpZXc6IGEg
I1dlYktpdFdlYlZpZXcKKyAqCisgKiBSZXR1cm5zIHRoZSAjV2ViS2l0V2ViTG9hZGVyQ2xpZW50
IG9mIEB3ZWJfdmlldy4gWW91IGNhbiB1c2UgaXQKKyAqIHRvIG1vbml0b3IgdGhlIHN0YXR1cyBv
ZiBsb2FkIG9wZXJhdGlvbnMgaGFwcGVuaW5nIG9uIEB3ZWJfdmlldy4KKyAqCisgKiBSZXR1cm5z
OiAodHJhc25mZXItbm9uZSk6IHRoZSAjV2ViS2l0V2ViTG9hZGVyQ2xpZW50IG9mIEB3ZWJfdmll
dy4KKyAqLworV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRl
cl9jbGllbnQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOworCisgICAgcmV0dXJuIHdlYlZp
ZXctPnByaXYtPmxvYWRlckNsaWVudC5nZXQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3Zp
ZXdfc2V0X2xvYWRlcl9jbGllbnQ6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAq
IEBsb2FkZXJfY2xpZW50OiBhICNXZWJLaXRXZWJMb2FkZXJDbGllbnQKKyAqCisgKiBTZXRzIHRo
ZSAjV2ViS2l0V2ViTG9hZGVyQ2xpZW50IHRoYXQgdGhlIHZpZXcgd2lsbCB1c2UgZHVyaW5nCisg
KiBsb2FkIG9wZXJhdGlvbnMuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X3NldF9sb2FkZXJf
Y2xpZW50KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkxvYWRlckNsaWVudCogbG9h
ZGVyQ2xpZW50KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdl
YlZpZXcpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfTE9BREVSX0NMSUVO
VChsb2FkZXJDbGllbnQpKTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2Vi
Vmlldy0+cHJpdjsKKyAgICBpZiAocHJpdi0+bG9hZGVyQ2xpZW50LmdldCgpID09IGxvYWRlckNs
aWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+bG9hZGVyQ2xpZW50ID0gbG9hZGVy
Q2xpZW50OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaToKKyAqIEB3ZWJf
dmlldzogYSAjV2ViS2l0V2ViVmlldworICogQHVyaTogYW4gVVJJIHN0cmluZworICoKKyAqIFJl
cXVlc3RzIGxvYWRpbmcgb2YgdGhlIHNwZWNpZmllZCBVUkkgc3RyaW5nLgorICogWW91IGNhbiBt
b25pdG9yIHRoZSBzdGF0dXMgb2YgdGhlIGxvYWQgb3BlcmF0aW9uIHVzaW5nIHRoZQorICogI1dl
YktpdFdlYkxvYWRlckNsaWVudCBvZiBAd2ViX3ZpZXcuIFNlZSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2xvYWRlcl9jbGllbnQoKS4KKyAqLwogdm9pZCB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgZ2NoYXIqIHVyaSkKIHsKICAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CkBAIC0xNjAsNiArMjEzLDE0IEBA
IHZvaWQgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNv
bnN0IGdjaGFyKiB1cmkpCiAgICAgV0tQYWdlTG9hZFVSTCh0b0FQSShwYWdlKSwgV0tVUkxDcmVh
dGVXaXRoVVRGOENTdHJpbmcodXJpKSk7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2dv
X2JhY2s6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBMb2FkcyB0aGUg
cHJldmlvdXMgaGlzdG9yeSBpdGVtLgorICogWW91IGNhbiBtb25pdG9yIHRoZSBzdGF0dXMgb2Yg
dGhlIGxvYWQgb3BlcmF0aW9uIHVzaW5nIHRoZQorICogI1dlYktpdFdlYkxvYWRlckNsaWVudCBv
ZiBAd2ViX3ZpZXcuIFNlZSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQoKS4KKyAq
Lwogdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQog
ewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKQEAg
LTE2OCw2ICsyMjksMTQgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KQogICAgIFdLUGFnZUdvQmFjayh0b0FQSShwYWdlKSk7CiB9CiAKKy8qKgor
ICogd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQ6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdl
YlZpZXcKKyAqCisgKiBMb2FkcyB0aGUgbmV4dCBoaXN0b3J5IGl0ZW0uCisgKiBZb3UgY2FuIG1v
bml0b3IgdGhlIHN0YXR1cyBvZiB0aGUgbG9hZCBvcGVyYXRpb24gdXNpbmcgdGhlCisgKiAjV2Vi
S2l0V2ViTG9hZGVyQ2xpZW50IG9mIEB3ZWJfdmlldy4gU2VlIHdlYmtpdF93ZWJfdmlld19nZXRf
bG9hZGVyX2NsaWVudCgpLgorICovCiB2b2lkIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
V0VCX1ZJRVcod2ViVmlldykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDMwNWJjNTYuLjQwMjI2OTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTI0LDYgKzI0
LDcgQEAKICNkZWZpbmUgV2ViS2l0V2ViVmlld19oCiAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dFdlYkNvbnRleHQuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkxvYWRlckNsaWVudC5o
PgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4KIAogR19CRUdJTl9ERUNM
UwpAQCAtNjEsMjYgKzYyLDMzIEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKIH07CiAK
IFdLX0VYUE9SVCBHVHlwZQotd2Via2l0X3dlYl92aWV3X2dldF90eXBlICAgICAgICAgKHZvaWQp
Oword2Via2l0X3dlYl92aWV3X2dldF90eXBlICAgICAgICAgICh2b2lkKTsKIAogV0tfRVhQT1JU
IEd0a1dpZGdldCAqCi13ZWJraXRfd2ViX3ZpZXdfbmV3ICAgICAgICAgICAgICAodm9pZCk7Cit3
ZWJraXRfd2ViX3ZpZXdfbmV3ICAgICAgICAgICAgICAgKHZvaWQpOwogCiBXS19FWFBPUlQgR3Rr
V2lkZ2V0ICoKLXdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0IChXZWJLaXRXZWJDb250
ZXh0ICpjb250ZXh0KTsKK3dlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0ICAoV2ViS2l0
V2ViQ29udGV4dCAgICAgICpjb250ZXh0KTsKIAogV0tfRVhQT1JUIFdlYktpdFdlYkNvbnRleHQg
Kgotd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0ICAgICAgKFdlYktpdFdlYlZpZXcgICAgKndl
Yl92aWV3KTsKK3dlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCAgICAgICAoV2ViS2l0V2ViVmll
dyAgICAgICAgICp3ZWJfdmlldyk7CisKK1dLX0VYUE9SVCBXZWJLaXRXZWJMb2FkZXJDbGllbnQg
Kgord2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xpZW50IChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgKndlYl92aWV3KTsKKworV0tfRVhQT1JUIHZvaWQKK3dlYmtpdF93ZWJfdmlld19zZXRfbG9h
ZGVyX2NsaWVudCAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xp
ZW50KTsKIAogV0tfRVhQT1JUIHZvaWQKLXdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICp3ZWJWaWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdjaGFyICAgICAgKnVyaSk7Cit3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkg
ICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqdXJpKTsKIAogV0tf
RVhQT1JUIHZvaWQKLXdlYmtpdF93ZWJfdmlld19nb19iYWNrICAgICAgICAgIChXZWJLaXRXZWJW
aWV3ICAgICp3ZWJWaWV3KTsKK3dlYmtpdF93ZWJfdmlld19nb19iYWNrICAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7CiAKIFdLX0VYUE9SVCB2b2lkCi13ZWJraXRf
d2ViX3ZpZXdfZ29fZm9yd2FyZCAgICAgICAoV2ViS2l0V2ViVmlldyAgICAqd2ViVmlldyk7Cit3
ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZCAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAq
d2ViX3ZpZXcpOwogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5jZDlkZGEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYwpAQCAtMCwwICsxLDI1NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1
ZGUgPHdlYmtpdDJndGsuaD4KKworLyogVGhpcyBzdHJpbmcgaGFzIHRvIGJlIHJhdGhlciBiaWcg
YmVjYXVzZSBvZiB0aGUgY2FuY2VsbGVkIHRlc3QgLSBpdAorICogbG9va3MgbGlrZSBzb3VwIHJl
ZnVzZXMgdG8gc2VuZCBvciByZWNlaXZlIGEgdG9vIHNtYWxsIGNodW5rICovCisjZGVmaW5lIEhU
TUxfU1RSSU5HICI8aHRtbD48Ym9keT5UZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchPC9ib2R5PjwvaHRtbD4iCisKK1NvdXBVUkkgKmJh
c2VfdXJpOworCisvKiBGb3IgcmVhbCByZXF1ZXN0IHRlc3RpbmcgKi8KK3N0YXRpYyB2b2lkIHNl
cnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywgY29uc3Qg
Y2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0
LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9H
RVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19O
T1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi8iKSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNP
VVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi90ZXN0X2xvYWRp
bmdfc3RhdHVzIik7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9h
ZGluZ19zdGF0dXMiKSB8fCBnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMy
IikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHks
IFNPVVBfTUVNT1JZX1NUQVRJQywgSFRNTF9TVFJJTkcsIHN0cmxlbihIVE1MX1NUUklORykpOwor
ICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkX2Vycm9yIikpIHsKKyAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5F
Q1QpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRpbmdfY2Fu
Y2VsbGVkIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2VuY29kaW5nKG1z
Zy0+cmVzcG9uc2VfaGVhZGVycywgU09VUF9FTkNPRElOR19DSFVOS0VEKTsKKyAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RB
VElDLCBIVE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RSSU5HKSk7CisgICAgICAgIHNvdXBfc2Vy
dmVyX3VucGF1c2VfbWVzc2FnZShzZXJ2ZXIsIG1zZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwor
fQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKKyAgICBH
TWFpbkxvb3AgKmxvb3A7CisgICAgZ2Jvb2xlYW4gaGFzQmVlblByb3Zpc2lvbmFsOworICAgIGdi
b29sZWFuIGhhc0JlZW5SZWRpcmVjdDsKKyAgICBnYm9vbGVhbiBoYXNCZWVuQ29tbWl0dGVkOwor
ICAgIGdib29sZWFuIGhhc0JlZW5GaW5pc2hlZDsKKyAgICBnYm9vbGVhbiBoYXNCZWVuRmFpbGVk
OworfSBXZWJMb2FkaW5nRml4dHVyZTsKKworc3RhdGljIHZvaWQgd2ViTG9hZGluZ0ZpeHR1cmVT
ZXR1cChXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQorewor
ICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKKyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwor
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOworICAgIGZpeHR1cmUtPmhh
c0JlZW5Qcm92aXNpb25hbCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCA9
IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQgPSBGQUxTRTsKKyAgICBmaXh0
dXJlLT5oYXNCZWVuRmluaXNoZWQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuRmFpbGVk
ID0gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24oV2Vi
TG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX29i
amVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihmaXh0
dXJlLT5sb29wKTsKK30KKworc3RhdGljIGNoYXIgKmdldFVyaUZvclBhdGgoY29uc3QgY2hhciog
cGF0aCkKK3sKKyAgICBTb3VwVVJJICp1cmk7CisgICAgY2hhciAqdXJpX3N0cmluZzsKKworICAg
IHVyaSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2UoYmFzZV91cmksIHBhdGgpOworICAgIHVyaV9z
dHJpbmcgPSBzb3VwX3VyaV90b19zdHJpbmcodXJpLCBGQUxTRSk7CisgICAgc291cF91cmlfZnJl
ZSh1cmkpOworCisgICAgcmV0dXJuIHVyaV9zdHJpbmc7Cit9CisKKy8qIExvYWQgU3RhdHVzICov
CitzdGF0aWMgZ2Jvb2xlYW4gbG9hZFN0YXR1c1Byb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoV2ViS2l0
V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQorewor
ICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOworICAgIGdfYXNzZXJ0
KCFmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QpOworICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNC
ZWVuQ29tbWl0dGVkKTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwgPSBUUlVFOwor
CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzUHJvdmlz
aW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNs
aWVudCwgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisgICAgZ19hc3NlcnQoZml4dHVy
ZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlblJl
ZGlyZWN0KTsKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCk7CisgICAg
Zml4dHVyZS0+aGFzQmVlblJlZGlyZWN0ID0gVFJVRTsKKworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gbG9hZFN0YXR1c1Byb3Zpc2lvbmFsTG9hZEZhaWxlZChXZWJLaXRX
ZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgR0Vycm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUg
KmZpeHR1cmUpCit7CisgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICByZXR1cm4gVFJV
RTsKK30KKworc3RhdGljIGdib29sZWFuIGxvYWRTdGF0dXNMb2FkQ29tbWl0dGVkKFdlYktpdFdl
YkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKyAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOworICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPmhhc0JlZW5SZWRpcmVjdCk7CisgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5D
b21taXR0ZWQpOworICAgIGZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQgPSBUUlVFOworCisgICAg
cmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzTG9hZEZpbmlzaGVk
KFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVy
ZSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOworICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+
aGFzQmVlbkNvbW1pdHRlZCk7CisgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5GaW5pc2hl
ZCk7CisgICAgZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkID0gVFJVRTsKKworICAgIGdfbWFpbl9s
b29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGlj
IGdib29sZWFuIGxvYWRTdGF0dXNMb2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xp
ZW50LCBHRXJyb3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKyAgICBn
X2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0TG9hZGluZ1N0YXR1cyhXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQoreworICAgIGNoYXIgKnVyaVN0cmluZzsKKyAgICBXZWJLaXRXZWJMb2FkZXJD
bGllbnQgKmNsaWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZGVyX2NsaWVudChmaXh0dXJl
LT53ZWJWaWV3KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwt
bG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkU3RhcnRl
ZCksIGZpeHR1cmUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwt
bG9hZC1yZWNlaXZlZC1zZXJ2ZXItcmVkaXJlY3QiLCBHX0NBTExCQUNLKGxvYWRTdGF0dXNQcm92
aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KSwgZml4dHVyZSk7CisgICAgZ19zaWdu
YWxfY29ubmVjdChjbGllbnQsICJwcm92aXNpb25hbC1sb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0so
bG9hZFN0YXR1c1Byb3Zpc2lvbmFsTG9hZEZhaWxlZCksIGZpeHR1cmUpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QoY2xpZW50LCAibG9hZC1jb21taXR0ZWQiLCBHX0NBTExCQUNLKGxvYWRTdGF0dXNM
b2FkQ29tbWl0dGVkKSwgZml4dHVyZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJs
b2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkU3RhdHVzTG9hZEZpbmlzaGVkKSwgZml4dHVy
ZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJsb2FkLWZhaWxlZCIsIEdfQ0FMTEJB
Q0sobG9hZFN0YXR1c0xvYWRGYWlsZWQpLCBmaXh0dXJlKTsKKworICAgIHVyaVN0cmluZyA9IGdl
dFVyaUZvclBhdGgoIi8iKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+
d2ViVmlldywgdXJpU3RyaW5nKTsKKyAgICBnX2ZyZWUodXJpU3RyaW5nKTsKKworICAgIGdfbWFp
bl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKKworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0Jl
ZW5Qcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblJlZGlyZWN0KTsK
KyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNCZWVuRmluaXNoZWQpOworfQorCisvKiBMb2FkIEVycm9yICovCitzdGF0aWMg
Z2Jvb2xlYW4gbG9hZEVycm9yUHJvdmlzaW9uYWxMb2FkU3RhcnRlZChXZWJLaXRXZWJMb2FkZXJD
bGllbnQgKmNsaWVudCwgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgZml4dHVyZS0+aGFzQmVlblBy
b3Zpc2lvbmFsID0gVFJVRTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gbG9hZEVycm9yUHJvdmlzaW9uYWxMb2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAq
Y2xpZW50LCBHRXJyb3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKyAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOworICAgIGdfYXNzZXJ0KCFm
aXh0dXJlLT5oYXNCZWVuRmFpbGVkKTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuRmFpbGVkID0gVFJV
RTsKKworICAgIGdfYXNzZXJ0KGVycm9yKTsKKworICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVy
ZS0+bG9vcCk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIGxvYWRF
cnJvckxvYWRGaW5pc2hlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgV2ViTG9hZGlu
Z0ZpeHR1cmUgKmZpeHR1cmUpCit7CisgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICBy
ZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRpbmdFcnJvcihXZWJMb2FkaW5n
Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGNoYXIgKnVyaVN0
cmluZzsKKyAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCA9IHdlYmtpdF93ZWJfdmll
d19nZXRfbG9hZGVyX2NsaWVudChmaXh0dXJlLT53ZWJWaWV3KTsKKworICAgIGdfc2lnbmFsX2Nv
bm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhsb2Fk
RXJyb3JQcm92aXNpb25hbExvYWRTdGFydGVkKSwgZml4dHVyZSk7CisgICAgZ19zaWduYWxfY29u
bmVjdChjbGllbnQsICJwcm92aXNpb25hbC1sb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0sobG9hZEVy
cm9yUHJvdmlzaW9uYWxMb2FkRmFpbGVkKSwgZml4dHVyZSk7CisgICAgZ19zaWduYWxfY29ubmVj
dChjbGllbnQsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRXJyb3JMb2FkRmluaXNo
ZWQpLCBmaXh0dXJlKTsKKworICAgIHVyaVN0cmluZyA9IGdldFVyaUZvclBhdGgoIi90ZXN0X2xv
YWRfZXJyb3IiKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmll
dywgdXJpU3RyaW5nKTsKKyAgICBnX2ZyZWUodXJpU3RyaW5nKTsKKworICAgIGdfbWFpbl9sb29w
X3J1bihmaXh0dXJlLT5sb29wKTsKKworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92
aXNpb25hbCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkZhaWxlZCk7Cit9CisKK2lu
dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBTb3VwU2VydmVyICpzZXJ2ZXI7
CisKKyAgICBnX3RocmVhZF9pbml0KE5VTEwpOworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZh
cmd2LCBOVUxMKTsKKworICAgIGdfc2V0ZW52KCJXRUJLSVRfRVhFQ19QQVRIIiwgV0VCS0lUX0VY
RUNfUEFUSCwgRkFMU0UpOworCisgICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VS
VkVSX1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwor
CisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJDYWxsYmFj
aywgTlVMTCwgTlVMTCk7CisKKyAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEy
Ny4wLjAuMS8iKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChiYXNlX3VyaSwgc291cF9zZXJ2ZXJf
Z2V0X3BvcnQoc2VydmVyKSk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53
ZWJraXQub3JnLyIpOworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQyL2xvYWRpbmcvc3RhdHVzIiwK
KyAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAorICAgICAgICAgICAgICAg
d2ViTG9hZGluZ0ZpeHR1cmVTZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RMb2FkaW5nU3RhdHVz
LAorICAgICAgICAgICAgICAgd2ViTG9hZGluZ0ZpeHR1cmVUZWFyZG93bik7CisgICAgZ190ZXN0
X2FkZCgiL3dlYmtpdDIvbG9hZGluZy9lcnJvciIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5n
Rml4dHVyZSwgTlVMTCwKKyAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlU2V0dXAsCisg
ICAgICAgICAgICAgICB0ZXN0TG9hZGluZ0Vycm9yLAorICAgICAgICAgICAgICAgd2ViTG9hZGlu
Z0ZpeHR1cmVUZWFyZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5s
aXN0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlz
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTg0NDQyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwu
bGlzdApAQCAtMCwwICsxLDMgQEAKK0JPT0xFQU46UE9JTlRFUgorQk9PTEVBTjpWT0lECisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109008</attachid>
            <date>2011-09-28 05:52:15 -0700</date>
            <delta_ts>2011-09-28 08:48:16 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-loader-client5.diff</filename>
            <type>text/plain</type>
            <size>42678</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlNWE1ZTMzLi5lMmQ5MTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTQg
QEAKIDIwMTEtMDktMjggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIExvYWRlciBjbGllbnQgaW1wbGVtZW50YXRpb24gZm9yIFdlYktp
dDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY4MDg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkcyBhIG5ldyBvYmplY3QsIFdlYktpdFdlYkxvYWRlckNsaWVudCwgdGhhdCBlbWl0cyBz
aWduYWxzIGZvcgorICAgICAgICBldmVyeSBwYWdlIGxvYWRlciBjYWxsYmFjay4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHA6IEFkZGVkLgor
ICAgICAgICAoZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6CisgICAgICAgIChkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6CisgICAgICAg
IChkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUpOgorICAgICAgICAoZGlk
Q29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKGRpZEZpbmlzaExvYWRGb3JGcmFtZSk6Cisg
ICAgICAgIChkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lKToKKyAgICAgICAgKHdlYmtpdFdl
YkxvYWRlckNsaWVudENvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdFdlYkxvYWRlckNsaWVu
dFNldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdFdlYkxvYWRlckNsaWVudEdldFByb3BlcnR5
KToKKyAgICAgICAgKHdlYmtpdF93ZWJfbG9hZGVyX2NsaWVudF9pbml0KToKKyAgICAgICAgKHdl
YmtpdF93ZWJfbG9hZGVyX2NsaWVudF9jbGFzc19pbml0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJMb2FkZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q29u
c3RydWN0ZWQpOiBDcmVhdGUgdGhlIGxvYWRlciBjbGllbnQgZm9yIHRoZSB2aWV3LgorICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9s
b2FkZXJfY2xpZW50KTogR2V0IHRoZSBjdXJyZW50IGxvYWRlciBjbGllbnQuCisgICAgICAgICh3
ZWJraXRfd2ViX3ZpZXdfc2V0X2xvYWRlcl9jbGllbnQpOiBTZXQgYSBuZXcgbG9hZGVyIGNsaWVu
dC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYzogQWRkZWQuCisgICAgICAg
IChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgICh3ZWJMb2FkaW5nRml4dHVyZVNldHVwKToKKyAg
ICAgICAgKHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24pOgorICAgICAgICAoZ2V0VVJJRm9yUGF0
aCk6CisgICAgICAgIChsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk6CisgICAgICAg
IChsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCk6CisgICAg
ICAgIChsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkRmFpbGVkKToKKyAgICAgICAgKGxvYWRTdGF0
dXNMb2FkQ29tbWl0dGVkKToKKyAgICAgICAgKGxvYWRTdGF0dXNMb2FkRmluaXNoZWQpOgorICAg
ICAgICAobG9hZFN0YXR1c0xvYWRGYWlsZWQpOgorICAgICAgICAodGVzdExvYWRpbmdTdGF0dXMp
OgorICAgICAgICAobG9hZEVycm9yUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk6CisgICAgICAgIChs
b2FkRXJyb3JQcm92aXNpb25hbExvYWRGYWlsZWQpOgorICAgICAgICAobG9hZEVycm9yTG9hZEZp
bmlzaGVkKToKKyAgICAgICAgKHRlc3RMb2FkaW5nRXJyb3IpOgorICAgICAgICAobWFpbik6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdDogQWRkZWQuCisK
KzIwMTEtMDktMjggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CiAgICAgICAgIFtHVEtdIEZpeCBQcm9ncmFtcy91bml0dGVzdHMvd2Via2l0Mi90ZXN0d2Vidmll
dwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5OTMK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAwMWQ1MDZmLi5iMTg2NmEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5hbQpAQCAtNzEsNiArNzEsNyBAQCBsaWJ3ZWJraXQyZ3RraW5jbHVkZWRpciA9ICQobGli
d2Via2l0Z3RraW5jbHVkZWRpcikvd2Via2l0Mgogd2Via2l0Mmd0a19oZWFkZXJzID0gXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBcCiAJJChXZWJLaXQyKS9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAorCSQoV2ViS2l0MikvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmggXAogCSQoV2ViS2l0MikvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mi5oCkBAIC0xNDgsOCArMTQ5LDIwIEBAIHdlYmtpdDJfYnVpbHRfc291cmNlcyArPSBc
CiAJRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJQcm9jZXNzTWVzc2FnZXMuaCBcCiAJRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9XZWJQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKIAlE
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlByb2Nlc3NQcm94eU1lc3NhZ2VzLmgKKwogQlVJTFRf
U09VUkNFUyArPSAkKHdlYmtpdDJfYnVpbHRfc291cmNlcykKLW5vZGlzdF9saWJ3ZWJraXQyZ3Rr
X0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJ
T05AX2xhX1NPVVJDRVMgPSQod2Via2l0Ml9idWlsdF9zb3VyY2VzKQorCit3ZWJraXQyZ3RrX2J1
aWx0X3NvdXJjZXMgPSBcCisJRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQyZ3RrL3dlYmtp
dDIvV2ViS2l0RW51bVR5cGVzLmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi93ZWJraXQy
Z3RrL3dlYmtpdDIvV2ViS2l0RW51bVR5cGVzLmggXAorCURlcml2ZWRTb3VyY2VzL1dlYktpdDIv
d2Via2l0Mmd0ay93ZWJraXQyL1dlYktpdE1hcnNoYWwuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9X
ZWJLaXQyL3dlYmtpdDJndGsvd2Via2l0Mi9XZWJLaXRNYXJzaGFsLmgKKworQlVJTFRfU09VUkNF
UyArPSAkKHdlYmtpdDJndGtfYnVpbHRfc291cmNlcykKKworbm9kaXN0X2xpYndlYmtpdDJndGtf
QFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lP
TkBfbGFfU09VUkNFUyA9IFwKKwkkKHdlYmtpdDJfYnVpbHRfc291cmNlcykgXAorCSQod2Via2l0
Mmd0a19idWlsdF9zb3VyY2VzKQogCiBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9S
X1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVVJDRVMgPSBcCiAJ
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudENvZGVyLmggXApAQCAtNDYw
LDYgKzQ3Myw4IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBf
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCBcCisJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmggXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5jcHAgXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBcCiAJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmggXApAQCAtODYyLDYg
Kzg3Nyw3IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdF
QktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfQ1BQCiAJLUkkKHRvcF9idWlsZGRpcikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL3dlYmtpdDJndGsgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0ay9pbmNsdWRlIFwKKwktSSQodG9wX2J1aWxkZGlyKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJndGsvd2Via2l0MiBcCiAJLUkkKHRvcF9idWls
ZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlL0phdmFTY3JpcHRDb3JlIFwKIAkt
SSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL2luY2x1ZGUvV2ViQ29yZSBc
CiAJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlL1dlYktp
dDIgXApAQCAtMTAzMiwxNCArMTA0OCwyOCBAQCAkKEdFTlNPVVJDRVNfV0VCS0lUMikvd2Via2l0
Mmd0ay93ZWJraXQyL1dlYktpdEVudW1UeXBlcy5jcHA6ICQod2Via2l0Mmd0a19oZWFkZQogCSYm
IGNwIHhnZW4tZ3RjICRAIFwKIAkmJiBybSAtZiB4Z2VuLWd0YwogCitXRUJLSVQyX01BUlNIQUxf
TElTVCA9ICQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAog
Ci1CVUlMVF9TT1VSQ0VTICs9IFwKLQkkKEdFTlNPVVJDRVNfV0VCS0lUMikvd2Via2l0Mmd0ay93
ZWJraXQyL1dlYktpdEVudW1UeXBlcy5jcHAgXAotCSQoR0VOU09VUkNFU19XRUJLSVQyKS93ZWJr
aXQyZ3RrL3dlYmtpdDIvV2ViS2l0RW51bVR5cGVzLmgKKyQoR0VOU09VUkNFU19XRUJLSVQyKS93
ZWJraXQyZ3RrL3dlYmtpdDIvV2ViS2l0TWFyc2hhbC5jcHA6IHN0YW1wLXdlYmtpdDJtYXJzaGFs
LmNwcAorCUB0cnVlCiskKEdFTlNPVVJDRVNfV0VCS0lUMikvd2Via2l0Mmd0ay93ZWJraXQyL1dl
YktpdE1hcnNoYWwuaDogc3RhbXAtd2Via2l0Mm1hcnNoYWwuaAorCUB0cnVlCisKK3N0YW1wLXdl
YmtpdDJtYXJzaGFsLmNwcDogJChXRUJLSVQyX01BUlNIQUxfTElTVCkKKwkkKEFNX1ZfR0VOKSBl
Y2hvICJleHRlcm4gXCJDXCIgeyIgPiAkKHdlYmtpdDJndGtfYnVpbHRfaGVhZGVyc19kaXIpL1dl
YktpdE1hcnNoYWwuY3BwICYmIFwKKwkkKEdMSUJfR0VOTUFSU0hBTCkgLS1wcmVmaXg9d2Via2l0
X21hcnNoYWwgJChXRUJLSVQyX01BUlNIQUxfTElTVCkgLS1ib2R5ID4+ICQod2Via2l0Mmd0a19i
dWlsdF9oZWFkZXJzX2RpcikvV2ViS2l0TWFyc2hhbC5jcHAgJiYgXAorCWVjaG8gJ30nID4+ICQo
d2Via2l0Mmd0a19idWlsdF9oZWFkZXJzX2RpcikvV2ViS2l0TWFyc2hhbC5jcHAgJiYgXAorCWVj
aG8gdGltZXN0YW1wID4gJChARikKKworc3RhbXAtd2Via2l0Mm1hcnNoYWwuaDogJChXRUJLSVQy
X01BUlNIQUxfTElTVCkKKwkkKEFNX1ZfR0VOKSQoR0xJQl9HRU5NQVJTSEFMKSAtLXByZWZpeD13
ZWJraXRfbWFyc2hhbCAkKFdFQktJVDJfTUFSU0hBTF9MSVNUKSAtLWhlYWRlciA+ICQod2Via2l0
Mmd0a19idWlsdF9oZWFkZXJzX2RpcikvV2ViS2l0TWFyc2hhbC5oICYmIFwKKwllY2hvIHRpbWVz
dGFtcCA+ICQoQEYpCiAKIENMRUFORklMRVMgKz0gXAogCSQoQlVJTFRfU09VUkNFUykgXAogCSQo
dG9wX2J1aWxkZGlyKS9zdGFtcC13ZWJraXQyZW51bXR5cGVzIFwKKwkkKHRvcF9idWlsZGRpcikv
c3RhbXAtd2Via2l0Mm1hcnNoYWwuY3BwIFwKKwkkKHRvcF9idWlsZGRpcikvc3RhbXAtd2Via2l0
Mm1hcnNoYWwuaCBcCiAJJCh0b3BfYnVpbGRkaXIpL1Byb2dyYW1zL1dlYktpdFdlYlByb2Nlc3MK
IAogRElTVENMRUFORklMRVMgKz0gXApAQCAtMTA0OCw3ICsxMDc4LDggQEAgRElTVENMRUFORklM
RVMgKz0gXAogIyBVbml0IHRlc3RzCiBURVNUX1BST0dTICs9IFwKIAlQcm9ncmFtcy91bml0dGVz
dHMvd2Via2l0Mi90ZXN0d2ViY29udGV4dCBcCi0JUHJvZ3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIv
dGVzdHdlYnZpZXcKKwlQcm9ncmFtcy91bml0dGVzdHMvd2Via2l0Mi90ZXN0d2VidmlldyBcCisJ
UHJvZ3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIvdGVzdGxvYWRpbmcKIAogbm9pbnN0X1BST0dSQU1T
ICs9ICQoVEVTVF9QUk9HUykKIHdlYmtpdDJfdGVzdHNfY2ZsYWdzID0gXApAQCAtMTA4Niw2ICsx
MTE3LDExIEBAIFByb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3R3ZWJ2aWV3X0NGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19jZmxhZ3MpCiBQcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0
d2Vidmlld19MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKIFByb2dyYW1zX3VuaXR0ZXN0
c193ZWJraXQyX3Rlc3R3ZWJ2aWV3X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykK
IAorUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdfU09VUkNFUyA9IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMKK1Byb2dyYW1z
X3VuaXR0ZXN0c193ZWJraXQyX3Rlc3Rsb2FkaW5nX0NGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19j
ZmxhZ3MpCitQcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0bG9hZGluZ19MREFERCA9ICQo
d2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3Rsb2Fk
aW5nX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKKwogIyBXZWJLaXRXZWJQcm9j
ZXNzCiBsaWJleGVjX1BST0dSQU1TICs9IFwKIAlQcm9ncmFtcy9XZWJLaXRXZWJQcm9jZXNzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJMb2Fk
ZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
TG9hZGVyQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzAw
OWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViTG9hZGVyQ2xpZW50LmNwcApAQCAtMCwwICsxLDM1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0V2ViTG9hZGVyQ2xpZW50LmgiCisKKyNpbmNsdWRlICJXZWJLaXRNYXJzaGFsLmgiCisj
aW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXcuaCIKKyNp
bmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2VudW0g
eworICAgIFBST1ZJU0lPTkFMX0xPQURfU1RBUlRFRCwKKyAgICBQUk9WSVNJT05BTF9MT0FEX1JF
Q0VJVkVEX1NFUlZFUl9SRURJUkVDVCwKKyAgICBQUk9WSVNJT05BTF9MT0FEX0ZBSUxFRCwKKwor
ICAgIExPQURfQ09NTUlUVEVELAorICAgIExPQURfRklOSVNIRUQsCisgICAgTE9BRF9GQUlMRUQs
CisKKyAgICBMQVNUX1NJR05BTAorfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJP
UF9XRUJfVklFVworfTsKKworc3RydWN0IF9XZWJLaXRXZWJMb2FkZXJDbGllbnRQcml2YXRlIHsK
KyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXc+IHZpZXc7Cit9OworCitzdGF0aWMgZ3VpbnQgc2ln
bmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViTG9h
ZGVyQ2xpZW50LCB3ZWJraXRfd2ViX2xvYWRlcl9jbGllbnQsIEdfVFlQRV9PQkpFQ1QpCisKK3N0
YXRpYyB2b2lkIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2Us
IFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKK3sKKyAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFsX2VtaXQoV0VC
S0lUX1dFQl9MT0FERVJfQ0xJRU5UKGNsaWVudEluZm8pLCBzaWduYWxzW1BST1ZJU0lPTkFMX0xP
QURfU1RBUlRFRF0sIDAsICZyZXR1cm5WYWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdl
LCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisgICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KFdF
QktJVF9XRUJfTE9BREVSX0NMSUVOVChjbGllbnRJbmZvKSwgc2lnbmFsc1tQUk9WSVNJT05BTF9M
T0FEX1JFQ0VJVkVEX1NFUlZFUl9SRURJUkVDVF0sIDAsICZyZXR1cm5WYWx1ZSk7Cit9CisKK3N0
YXRpYyB2b2lkIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VS
ZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tFcnJvclJlZiBlcnJvciwgV0tUeXBlUmVmIHVz
ZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGlmICghV0tGcmFtZUlzTWFp
bkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgUmVzb3VyY2VFcnJv
ciYgcmVzb3VyY2VFcnJvciA9IHRvSW1wbChlcnJvciktPnBsYXRmb3JtRXJyb3IoKTsKKyAgICBH
T3duUHRyPEdFcnJvcj4gd2ViRXJyb3IoZ19lcnJvcl9uZXdfbGl0ZXJhbChnX3F1YXJrX2Zyb21f
c3RyaW5nKHJlc291cmNlRXJyb3IuZG9tYWluKCkudXRmOCgpLmRhdGEoKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VFcnJvci5lcnJv
ckNvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXNvdXJjZUVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSkpOwor
ICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lUX1dFQl9M
T0FERVJfQ0xJRU5UKGNsaWVudEluZm8pLCBzaWduYWxzW1BST1ZJU0lPTkFMX0xPQURfRkFJTEVE
XSwgMCwgd2ViRXJyb3IuZ2V0KCksICZyZXR1cm5WYWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRp
ZENvbW1pdExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tU
eXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGlmICghV0tG
cmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2Jvb2xlYW4g
cmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRfV0VCX0xPQURFUl9DTElFTlQo
Y2xpZW50SW5mbyksIHNpZ25hbHNbTE9BRF9DT01NSVRURURdLCAwLCAmcmV0dXJuVmFsdWUpOwor
fQorCitzdGF0aWMgdm9pZCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdL
RnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKK3sKKyAgICBpZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lU
X1dFQl9MT0FERVJfQ0xJRU5UKGNsaWVudEluZm8pLCBzaWduYWxzW0xPQURfRklOSVNIRURdLCAw
LCAmcmV0dXJuVmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBkaWRGYWlsTG9hZFdpdGhFcnJvckZv
ckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS0Vycm9yUmVmIGVycm9y
LCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgaWYgKCFXS0ZyYW1l
SXNNYWluRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBSZXNvdXJj
ZUVycm9yJiByZXNvdXJjZUVycm9yID0gdG9JbXBsKGVycm9yKS0+cGxhdGZvcm1FcnJvcigpOwor
ICAgIEdPd25QdHI8R0Vycm9yPiB3ZWJFcnJvcihnX2Vycm9yX25ld19saXRlcmFsKGdfcXVhcmtf
ZnJvbV9zdHJpbmcocmVzb3VyY2VFcnJvci5kb21haW4oKS51dGY4KCkuZGF0YSgpKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUVycm9y
LmVycm9yQ29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc291cmNlRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgp
KSk7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRf
V0VCX0xPQURFUl9DTElFTlQoY2xpZW50SW5mbyksIHNpZ25hbHNbTE9BRF9GQUlMRURdLCAwLCB3
ZWJFcnJvci5nZXQoKSwgJnJldHVyblZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2Vi
TG9hZGVyQ2xpZW50Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFdl
YkxvYWRlckNsaWVudCogY2xpZW50ID0gV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKG9iamVjdCk7
CisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50UHJpdmF0ZSogcHJpdiA9IGNsaWVudC0+cHJpdjsK
KworICAgIFdLUGFnZUxvYWRlckNsaWVudCBsb2FkZXJDbGllbnQgPSB7CisgICAgICAgIGtXS1Bh
Z2VMb2FkZXJDbGllbnRDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgY2xpZW50LCAgLy8gY2xpZW50
SW5mbworICAgICAgICBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lLAorICAgICAgICBk
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSwKKyAgICAg
ICAgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lLAorICAgICAgICBkaWRD
b21taXRMb2FkRm9yRnJhbWUsCisgICAgICAgIDAsICAgICAgIC8vIGRpZEZpbmlzaERvY3VtZW50
TG9hZEZvckZyYW1lCisgICAgICAgIGRpZEZpbmlzaExvYWRGb3JGcmFtZSwKKyAgICAgICAgZGlk
RmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZSwKKyAgICAgICAgMCwgICAgICAgLy8gZGlkU2FtZURv
Y3VtZW50TmF2aWdhdGlvbkZvckZyYW1lCisgICAgICAgIDAsICAgICAgIC8vIGRpZFJlY2VpdmVU
aXRsZUZvckZyYW1lCisgICAgICAgIDAsICAgICAgIC8vIGRpZEZpcnN0TGF5b3V0Rm9yRnJhbWUK
KyAgICAgICAgMCwgICAgICAgLy8gZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJh
bWUKKyAgICAgICAgMCwgICAgICAgLy8gZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5CisgICAg
ICAgIDAsICAgICAgIC8vIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRGb3JGcmFtZQorICAgICAg
ICAwLCAgICAgICAvLyBkaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZQorICAgICAgICAwLCAg
ICAgICAvLyBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlSW5GcmFtZQorICAg
ICAgICAwLCAgICAgICAvLyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VJbkZyYW1l
CisgICAgICAgIDAsICAgICAgIC8vIGRpZFN0YXJ0UHJvZ3Jlc3MKKyAgICAgICAgMCwgICAgICAg
Ly8gZGlkQ2hhbmdlUHJvZ3Jlc3MKKyAgICAgICAgMCwgICAgICAgLy8gZGlkRmluaXNoUHJvZ3Jl
c3MKKyAgICAgICAgMCwgICAgICAgLy8gZGlkQmVjb21lVW5yZXNwb25zaXZlCisgICAgICAgIDAs
ICAgICAgIC8vIGRpZEJlY29tZVJlc3BvbnNpdmUKKyAgICAgICAgMCwgICAgICAgLy8gcHJvY2Vz
c0RpZENyYXNoCisgICAgICAgIDAsICAgICAgIC8vIGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdAor
ICAgICAgICAwLCAgICAgICAvLyBzaG91bGRHb1RvQmFja0ZvcndhcmRMaXN0SXRlbQorICAgICAg
ICAwICAgICAgICAvLyBkaWRGYWlsVG9Jbml0aWFsaXplUGx1Z2luCisgICAgfTsKKyAgICBXZWJQ
YWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVX
X0JBU0UocHJpdi0+dmlldy5nZXQoKSkpOworICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQo
dG9BUEkocGFnZSksICZsb2FkZXJDbGllbnQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJM
b2FkZXJDbGllbnRTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdFdl
YkxvYWRlckNsaWVudCogY2xpZW50ID0gV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKG9iamVjdCk7
CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9XRUJfVklFVzoKKyAgICAg
ICAgY2xpZW50LT5wcml2LT52aWV3ID0gYWRvcHRHUmVmKFdFQktJVF9XRUJfVklFVyhnX3ZhbHVl
X2R1cF9vYmplY3QodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFy
YW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYkxvYWRlckNsaWVudEdl
dFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBjbGll
bnQgPSBXRUJLSVRfV0VCX0xPQURFUl9DTElFTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJv
cElkKSB7CisgICAgY2FzZSBQUk9QX1dFQl9WSUVXOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmpl
Y3QodmFsdWUsIGNsaWVudC0+cHJpdi0+dmlldy5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfbG9hZGVyX2NsaWVudF9pbml0KFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50KQorewor
ICAgIFdlYktpdFdlYkxvYWRlckNsaWVudFByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUoY2xpZW50LCBXRUJLSVRfVFlQRV9XRUJfTE9BREVSX0NMSUVOVCwgV2ViS2l0
V2ViTG9hZGVyQ2xpZW50UHJpdmF0ZSk7CisgICAgY2xpZW50LT5wcml2ID0gcHJpdjsKKyAgICBu
ZXcgKHByaXYpIFdlYktpdFdlYkxvYWRlckNsaWVudFByaXZhdGUoKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X3dlYl9sb2FkZXJfY2xpZW50X2NsYXNzX2luaXQoV2ViS2l0V2ViTG9hZGVyQ2xp
ZW50Q2xhc3MqIGNsaWVudENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhjbGllbnRDbGFzcyk7CisKKyAgICBvYmplY3RDbGFzcy0+c2V0X3By
b3BlcnR5ID0gd2Via2l0V2ViTG9hZGVyQ2xpZW50U2V0UHJvcGVydHk7CisgICAgb2JqZWN0Q2xh
c3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdFdlYkxvYWRlckNsaWVudEdldFByb3BlcnR5OworICAg
IG9iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdFdlYkxvYWRlckNsaWVudENvbnN0cnVj
dGVkOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzp3ZWItdmlldzoKKyAgICAgKgor
ICAgICAqIFRoZSAjV2ViS2l0V2ViVmlldyBvZiB0aGUgbG9hZGVyIGNsaWVudC4KKyAgICAgKi8K
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9XRUJfVklFVywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoIndlYi12aWV3IiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IldlYiBWaWV3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIlRoZSB3ZWIgdmlldyBmb3IgdGhlIGxvYWRlciBjbGllbnQiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
VFlQRV9XRUJfVklFVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgLyoqCisgICAgICogV2Vi
S2l0V2ViTG9hZGVyQ2xpZW50Ojpwcm92aXNpb25hbC1sb2FkLXN0YXJ0ZWQ6CisgICAgICogQGxv
YWRlcl9jbGllbnQ6IHRoZSAjV2ViS2l0V2ViTG9hZGVyCisgICAgICoKKyAgICAgKiBUaGlzIHNp
Z25hbCBpcyBlbWl0dGVkIHdoZW4gbmV3IGxvYWQgcmVxdWVzdCBpcyBtYWRlLgorICAgICAqIE5v
IGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQgeWV0LCBlbXB0eSBzdHJ1Y3R1cmVzIGhhdmUKKyAgICAg
KiBiZWVuIGFsbG9jYXRlZCB0byBwZXJmb3JtIHRoZSBsb2FkOyB0aGUgbG9hZCBtYXkgc3RpbGwK
KyAgICAgKiBmYWlsIGZvciB0cmFuc3BvcnQgaXNzdWVzIHN1Y2ggYXMgbm90IGJlaW5nIGFibGUg
dG8KKyAgICAgKiByZXNvbHZlIGEgbmFtZSwgb3IgY29ubmVjdCB0byBhIHBvcnQuCisgICAgICoK
KyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcg
aW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUg
ZXZlbnQgZnVydGhlci4KKyAgICAgKi8KKyAgICBzaWduYWxzW1BST1ZJU0lPTkFMX0xPQURfU1RB
UlRFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoInByb3Zpc2lvbmFsLWxvYWQtc3RhcnRlZCIs
CisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisg
ICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAg
ICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJMb2FkZXJDbGllbnRDbGFzcywgcHJvdmlzaW9u
YWxfbG9hZF9zdGFydGVkKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxh
dG9yX3RydWVfaGFuZGxlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJz
aGFsX0JPT0xFQU5fX1ZPSUQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwg
MCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FKTsKKworICAgIC8qKgorICAgICAq
IFdlYktpdFdlYkxvYWRlckNsaWVudDo6cHJvdmlzaW9uYWwtbG9hZC1yZWNlaXZlZC1zZXJ2ZXIt
cmVkaXJlY3Q6CisgICAgICogQGxvYWRlcl9jbGllbnQ6IHRoZSAjV2ViS2l0V2ViTG9hZGVyCisg
ICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBwcm92aXNpb25hbCBk
YXRhIHNvdXJjZQorICAgICAqIHJlY2VpdmVzIGEgc2VydmVyIHJlZGlyZWN0LgorICAgICAqCisg
ICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBhZnRlciAjV2ViS2l0V2ViTG9hZGVyQ2xpZW50
Ojpwcm92aXNpb25hbC1sb2FkLXN0YXJ0ZWQuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJV
RSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50
LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAg
Ki8KKyAgICBzaWduYWxzW1BST1ZJU0lPTkFMX0xPQURfUkVDRUlWRURfU0VSVkVSX1JFRElSRUNU
XSA9CisgICAgICAgIGdfc2lnbmFsX25ldygicHJvdmlzaW9uYWwtbG9hZC1yZWNlaXZlZC1zZXJ2
ZXItcmVkaXJlY3QiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob2Jq
ZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAg
ICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50Q2xh
c3MsIHByb3Zpc2lvbmFsX2xvYWRfcmVjZWl2ZWRfc2VydmVyX3JlZGlyZWN0KSwKKyAgICAgICAg
ICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgTlVMTCwKKyAg
ICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX1ZPSUQsCisgICAgICAg
ICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMCwKKyAgICAgICAgICAgICAgICAgICAgIEdf
VFlQRV9OT05FKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYkxvYWRlckNsaWVudDo6cHJv
dmlzaW9uYWwtbG9hZC1mYWlsZWQ6CisgICAgICogQGxvYWRlcl9jbGllbnQ6IHRoZSAjV2ViS2l0
V2ViTG9hZGVyCisgICAgICogQGVycm9yOiB0aGUgI0dFcnJvciB0aGF0IHdhcyB0cmlnZ2VyZWQK
KyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1
cnMgd2hlbiBzdGFydGluZyB0bworICAgICAqIGxvYWQgZGF0YSBmb3IgYSBwYWdlLiBCeSBkZWZh
dWx0LCBpZiB0aGUgc2lnbmFsIGlzIG5vdCBoYW5kbGVkLAorICAgICAqIGEgc3RvY2sgZXJyb3Ig
cGFnZSB3aWxsIGJlIGRpc3BsYXllZC4gWW91IG5lZWQgdG8gaGFuZGxlIHRoZSBzaWduYWwKKyAg
ICAgKiBpZiB5b3Ugd2FudCB0byBwcm92aWRlIHlvdXIgb3duIGVycm9yIHBhZ2UuIFRoaXMgc2ln
bmFsIGZpbmlzaGVzIHRoZQorICAgICAqIGxvYWQgc28gbm8gb3RoZXIgc2lnbmFscyB3aWxsIGJl
IGVtaXR0ZWQgYWZ0ZXIgdGhpcyBvbmUuCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBl
bWl0dGVkIGFmdGVyICNXZWJLaXRXZWJMb2FkZXJDbGllbnQ6OnByb3Zpc2lvbmFsLWxvYWQtc3Rh
cnRlZC4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxl
cnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8g
cHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqLworICAgIHNpZ25hbHNbUFJPVklT
SU9OQUxfTE9BRF9GQUlMRURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJwcm92aXNpb25hbC1s
b2FkLWZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmpl
Y3RDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJMb2FkZXJDbGllbnRDbGFz
cywgcHJvdmlzaW9uYWxfbG9hZF9mYWlsZWQpLAorICAgICAgICAgICAgICAgICAgICAgZ19zaWdu
YWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAg
d2Via2l0X21hcnNoYWxfQk9PTEVBTl9fUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgIEdf
VFlQRV9CT09MRUFOLCAxLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1BPSU5URVIpOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0V2ViTG9hZGVyQ2xpZW50Ojpsb2FkLWNvbW1pdHRlZDoK
KyAgICAgKiBAbG9hZGVyX2NsaWVudDogdGhlICNXZWJLaXRXZWJMb2FkZXIKKyAgICAgKgorICAg
ICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBjb250ZW50IHN0YXJ0cyBhcnJpdmluZyBm
b3IgYSBwYWdlIGxvYWQuCisgICAgICogVGhlIG5lY2Vzc2FyeSB0cmFuc3BvcnQgcmVxdWlyZW1l
bnRzIGFyZSBzdGFiaWxpc2hlZCwgYW5kIHRoZQorICAgICAqIGxvYWQgaXMgYmVpbmcgcGVyZm9y
bWVkLgorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBhZnRlciAjV2ViS2l0
V2ViTG9hZGVyQ2xpZW50Ojpwcm92aXNpb25hbC1sb2FkLXN0YXJ0ZWQuCisgICAgICoKKyAgICAg
KiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tl
ZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQg
ZnVydGhlci4KKyAgICAgKi8KKyAgICBzaWduYWxzW0xPQURfQ09NTUlUVEVEXSA9CisgICAgICAg
IGdfc2lnbmFsX25ldygibG9hZC1jb21taXR0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19U
WVBFX0ZST01fQ0xBU1Mob2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdO
QUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0
V2ViTG9hZGVyQ2xpZW50Q2xhc3MsIGxvYWRfY29tbWl0dGVkKSwKKyAgICAgICAgICAgICAgICAg
ICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgTlVMTCwKKyAgICAgICAgICAg
ICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX1ZPSUQsCisgICAgICAgICAgICAgICAg
ICAgICBHX1RZUEVfQk9PTEVBTiwgMCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05F
KTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJMb2FkZXJDbGllbnQ6OmxvYWQtZmluaXNoZWQ6
CisgICAgICogQGxvYWRlcl9jbGllbnQ6IHRoZSAjV2ViS2l0V2ViTG9hZGVyCisgICAgICoKKyAg
ICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBwYWdlIGxvYWQgY29tcGxldGVzLCB0
aGF0IGlzLCB3aGVuIGFsbAorICAgICAqIHRoZSByZXNvdXJjZXMgYXJlIGRvbmUgbG9hZGluZyB3
aXRoIG5vIGVycm9yLiBJbiBjYXNlIG9mIGVycm9ycworICAgICAqIGR1cmluZyBsb2FkaW5nLCB0
aGUgbG9hZCBmaW5pc2hlcyB3aGVuIGVpdGhlcgorICAgICAqICNXZWJLaXRXZWJMb2FkZXJDbGll
bnQ6OnByb3Zpc2lvbmFsLWxvYWQtZmFpbGVkIG9yICNXZWJLaXRXZWJMb2FkZXJDbGllbnQ6Omxv
YWQtZmFpbGVkCisgICAgICogYXJlIGVtaXR0ZWQuCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25h
bCBpcyBlbWl0dGVkIGFmdGVyICNXZWJLaXRXZWJMb2FkZXJDbGllbnQ6OmxvYWQtY29tbWl0dGVk
LgorICAgICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBm
cm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9w
YWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICovCisgICAgc2lnbmFsc1tMT0FEX0ZJTklT
SEVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygibG9hZC1maW5pc2hlZCIsCisgICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAgICAgICAgICAg
ICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNU
X09GRlNFVChXZWJLaXRXZWJMb2FkZXJDbGllbnRDbGFzcywgbG9hZF9maW5pc2hlZCksCisgICAg
ICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIE5VTEws
CisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19WT0lELAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDAsCisgICAgICAgICAgICAgICAgICAg
ICBHX1RZUEVfTk9ORSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJMb2FkZXJDbGllbnQ6
OmxvYWQtZmFpbGVkOgorICAgICAqIEBsb2FkZXJfY2xpZW50OiB0aGUgI1dlYktpdFdlYkxvYWRl
cgorICAgICAqIEBlcnJvcjogdGhlICNHRXJyb3IgdGhhdCB3YXMgdHJpZ2dlcmVkCisgICAgICoK
KyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGxvYWRp
bmcgYSBjb21taXR0ZWQgZGF0YSBzb3VyY2UuCisgICAgICogQnkgZGVmYXVsdCwgaWYgdGhlIHNp
Z25hbCBpcyBub3QgaGFuZGxlZCwgYSBzdG9jayBlcnJvciBwYWdlIHdpbGwgYmUgZGlzcGxheWVk
LgorICAgICAqIFlvdSBuZWVkIHRvIGhhbmRsZSB0aGUgc2lnbmFsIGlmIHlvdSB3YW50IHRvIHBy
b3ZpZGUgeW91ciBvd24gZXJyb3IgcGFnZS4gVGhpcworICAgICAqIHNpZ25hbCBmaW5pc2hlcyB0
aGUgbG9hZCBzbyBubyBvdGhlciBzaWduYWxzIHdpbGwgYmUgZW1pdHRlZCBhZnRlciB0aGlzIG9u
ZS4KKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgYWZ0ZXIgI1dlYktpdFdl
YkxvYWRlckNsaWVudDo6bG9hZC1jb21taXR0ZWQuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAl
VFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2
ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAg
ICAgKi8KKyAgICBzaWduYWxzW0xPQURfRkFJTEVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygi
bG9hZC1mYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob2Jq
ZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAg
ICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50Q2xh
c3MsIGxvYWRfZmFpbGVkKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxh
dG9yX3RydWVfaGFuZGxlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJz
aGFsX0JPT0xFQU5fX1BPSU5URVIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVB
TiwgMSwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSKTsKKworICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShjbGllbnRDbGFzcywgc2l6ZW9mKFdlYktpdFdlYkxvYWRlckNs
aWVudFByaXZhdGUpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkxvYWRlckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uY2Q5ZGZmODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJMb2FkZXJDbGllbnQuaApAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0V2Vi
TG9hZGVyQ2xpZW50X2gKKyNkZWZpbmUgV2ViS2l0V2ViTG9hZGVyQ2xpZW50X2gKKworI2luY2x1
ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9MT0FERVJfQ0xJRU5UICAgICAgICAg
ICAgKHdlYmtpdF93ZWJfbG9hZGVyX2NsaWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRf
V0VCX0xPQURFUl9DTElFTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0xPQURFUl9DTElFTlQsIFdlYktpdFdlYkxvYWRl
ckNsaWVudCkpCisjZGVmaW5lIFdFQktJVF9XRUJfTE9BREVSX0NMSUVOVF9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfTE9B
REVSX0NMSUVOVCwgV2ViS2l0V2ViTG9hZGVyQ2xpZW50Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRf
SVNfV0VCX0xPQURFUl9DTElFTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0xPQURFUl9DTElFTlQpKQorI2RlZmluZSBXRUJL
SVRfSVNfV0VCX0xPQURFUl9DTElFTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX0xPQURFUl9DTElFTlQpKQorI2RlZmluZSBX
RUJLSVRfV0VCX0xPQURFUl9DTElFTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0xPQURFUl9DTElFTlQsIFdlYktpdFdl
YkxvYWRlckNsaWVudENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkxvYWRlckNs
aWVudCAgICAgICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFdlYkxvYWRlckNsaWVudENsYXNzICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50Q2xhc3M7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViTG9hZGVyQ2xpZW50UHJpdmF0ZSBXZWJLaXRXZWJMb2FkZXJD
bGllbnRQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFdlYkxvYWRlckNsaWVudCB7CisgICAgR09i
amVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnRQcml2YXRlICpwcml2Owor
fTsKKworc3RydWN0IF9XZWJLaXRXZWJMb2FkZXJDbGllbnRDbGFzcyB7CisgICAgR09iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIHZpcnR1YWwgdGFibGUgKi8KKyAgICBnYm9vbGVh
biAoKiBwcm92aXNpb25hbF9sb2FkX3N0YXJ0ZWQpICAgICAgICAgICAgICAgICAgKFdlYktpdFdl
YkxvYWRlckNsaWVudCAqbG9hZGVyX2NsaWVudCk7CisgICAgZ2Jvb2xlYW4gKCogcHJvdmlzaW9u
YWxfbG9hZF9yZWNlaXZlZF9zZXJ2ZXJfcmVkaXJlY3QpIChXZWJLaXRXZWJMb2FkZXJDbGllbnQg
KmxvYWRlcl9jbGllbnQpOworICAgIGdib29sZWFuICgqIHByb3Zpc2lvbmFsX2xvYWRfZmFpbGVk
KSAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJfY2xpZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICplcnJvcik7CisgICAgZ2Jvb2xlYW4gKCogbG9h
ZF9jb21taXR0ZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJMb2FkZXJD
bGllbnQgKmxvYWRlcl9jbGllbnQpOworICAgIGdib29sZWFuICgqIGxvYWRfZmluaXNoZWQpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpsb2FkZXJf
Y2xpZW50KTsKKyAgICBnYm9vbGVhbiAoKiBsb2FkX2ZhaWxlZCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKFdlYktpdFdlYkxvYWRlckNsaWVudCAqbG9hZGVyX2NsaWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdF
cnJvciAgICAgICAgICAgICAgICAqZXJyb3IpOworfTsKKworV0tfRVhQT1JUIEdUeXBlCit3ZWJr
aXRfd2ViX2xvYWRlcl9jbGllbnRfZ2V0X3R5cGUgKHZvaWQpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHAKaW5kZXggYWQ3ZGI1ZS4uYjJmYzcyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTIwLDEzICsyMCwxNSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXcuaCIKIAotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KICNpbmNs
dWRlIDxXZWJLaXQyL1dLVVJMLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMzksNiArNDEsOCBAQCBlbnVtIHsKIAogc3Ry
dWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgV2ViS2l0V2ViQ29udGV4dCogY29udGV4
dDsKKworICAgIEdSZWZQdHI8V2ViS2l0V2ViTG9hZGVyQ2xpZW50PiBsb2FkZXJDbGllbnQ7CiB9
OwogCiBHX0RFRklORV9UWVBFKFdlYktpdFdlYlZpZXcsIHdlYmtpdF93ZWJfdmlldywgV0VCS0lU
X1RZUEVfV0VCX1ZJRVdfQkFTRSkKQEAgLTQ2LDkgKzUwLDExIEBAIEdfREVGSU5FX1RZUEUoV2Vi
S2l0V2ViVmlldywgd2Via2l0X3dlYl92aWV3LCBXRUJLSVRfVFlQRV9XRUJfVklFV19CQVNFKQog
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIHsK
ICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKG9iamVjdCk7Cisg
ICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworCisgICAgd2Vi
a2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcp
LCB3ZWJraXRXZWJDb250ZXh0R2V0V0tDb250ZXh0KHByaXYtPmNvbnRleHQpLCAwKTsKIAotICAg
IHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlV2ViUGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJW
aWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0V2ViQ29udGV4
dEdldFdLQ29udGV4dCh3ZWJWaWV3LT5wcml2LT5jb250ZXh0KSwgMCk7CisgICAgcHJpdi0+bG9h
ZGVyQ2xpZW50ID0gYWRvcHRHUmVmKFdFQktJVF9XRUJfTE9BREVSX0NMSUVOVChnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfV0VCX0xPQURFUl9DTElFTlQsICJ3ZWItdmlldyIsIHdlYlZpZXcsIE5V
TEwpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdTZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cGFyYW1TcGVjKQpAQCAtNzksNyArODUsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3R2V0
UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdQogCiBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQog
ewotICAgIHdlYlZpZXctPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUod2ViVmll
dywgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdQcml2YXRlKTsKKyAgICBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSh3ZWJW
aWV3LCBXRUJLSVRfVFlQRV9XRUJfVklFVywgV2ViS2l0V2ViVmlld1ByaXZhdGUpOworICAgIHdl
YlZpZXctPnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0V2ViVmlld1ByaXZhdGUo
KTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2Vi
Vmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCkBAIC0xNTEsNiArMTU5LDUxIEBAIFdlYktpdFdlYkNv
bnRleHQqIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3
KQogICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5jb250ZXh0OwogfQogCisvKioKKyAqIHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZGVyX2NsaWVudDoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2Vi
VmlldworICoKKyAqIFJldHVybnMgdGhlICNXZWJLaXRXZWJMb2FkZXJDbGllbnQgb2YgQHdlYl92
aWV3LiBZb3UgY2FuIHVzZSBpdAorICogdG8gbW9uaXRvciB0aGUgc3RhdHVzIG9mIGxvYWQgb3Bl
cmF0aW9ucyBoYXBwZW5pbmcgb24gQHdlYl92aWV3LgorICoKKyAqIFJldHVybnM6ICh0cmFzbmZl
ci1ub25lKTogdGhlICNXZWJLaXRXZWJMb2FkZXJDbGllbnQgb2YgQHdlYl92aWV3LgorICovCitX
ZWJLaXRXZWJMb2FkZXJDbGllbnQqIHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZGVyX2NsaWVudChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CisKKyAgICByZXR1cm4gd2ViVmlldy0+cHJpdi0+
bG9hZGVyQ2xpZW50LmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19zZXRfbG9h
ZGVyX2NsaWVudDoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICogQGxvYWRlcl9j
bGllbnQ6IGEgI1dlYktpdFdlYkxvYWRlckNsaWVudAorICoKKyAqIFNldHMgdGhlICNXZWJLaXRX
ZWJMb2FkZXJDbGllbnQgdGhhdCB0aGUgdmlldyB3aWxsIHVzZSBkdXJpbmcKKyAqIGxvYWQgb3Bl
cmF0aW9ucy4KKyAqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0X2xvYWRlcl9jbGllbnQoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBsb2FkZXJDbGllbnQp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9MT0FERVJfQ0xJRU5UKGxvYWRlckNs
aWVudCkpOworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2
OworICAgIGlmIChwcml2LT5sb2FkZXJDbGllbnQuZ2V0KCkgPT0gbG9hZGVyQ2xpZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBwcml2LT5sb2FkZXJDbGllbnQgPSBsb2FkZXJDbGllbnQ7Cit9
CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpOgorICogQHdlYl92aWV3OiBhICNX
ZWJLaXRXZWJWaWV3CisgKiBAdXJpOiBhbiBVUkkgc3RyaW5nCisgKgorICogUmVxdWVzdHMgbG9h
ZGluZyBvZiB0aGUgc3BlY2lmaWVkIFVSSSBzdHJpbmcuCisgKiBZb3UgY2FuIG1vbml0b3IgdGhl
IHN0YXR1cyBvZiB0aGUgbG9hZCBvcGVyYXRpb24gdXNpbmcgdGhlCisgKiAjV2ViS2l0V2ViTG9h
ZGVyQ2xpZW50IG9mIEB3ZWJfdmlldy4gU2VlIHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZGVyX2Ns
aWVudCgpLgorICovCiB2b2lkIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBjb25zdCBnY2hhciogdXJpKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKQEAgLTE2MCw2ICsyMTMsMTQgQEAgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgZ2NoYXIq
IHVyaSkKICAgICBXS1BhZ2VMb2FkVVJMKHRvQVBJKHBhZ2UpLCBXS1VSTENyZWF0ZVdpdGhVVEY4
Q1N0cmluZyh1cmkpKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjazoKKyAq
IEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIExvYWRzIHRoZSBwcmV2aW91cyBo
aXN0b3J5IGl0ZW0uCisgKiBZb3UgY2FuIG1vbml0b3IgdGhlIHN0YXR1cyBvZiB0aGUgbG9hZCBv
cGVyYXRpb24gdXNpbmcgdGhlCisgKiAjV2ViS2l0V2ViTG9hZGVyQ2xpZW50IG9mIEB3ZWJfdmll
dy4gU2VlIHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZGVyX2NsaWVudCgpLgorICovCiB2b2lkIHdl
YmtpdF93ZWJfdmlld19nb19iYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwpAQCAtMTY4LDYgKzIy
OSwxNCBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCiAgICAgV0tQYWdlR29CYWNrKHRvQVBJKHBhZ2UpKTsKIH0KIAorLyoqCisgKiB3ZWJraXRf
d2ViX3ZpZXdfZ29fZm9yd2FyZDoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICoK
KyAqIExvYWRzIHRoZSBuZXh0IGhpc3RvcnkgaXRlbS4KKyAqIFlvdSBjYW4gbW9uaXRvciB0aGUg
c3RhdHVzIG9mIHRoZSBsb2FkIG9wZXJhdGlvbiB1c2luZyB0aGUKKyAqICNXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQgb2YgQHdlYl92aWV3LiBTZWUgd2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xp
ZW50KCkuCisgKi8KIHZvaWQgd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3
ZWJWaWV3KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmgKaW5kZXggMzA1YmM1Ni4uNDAyMjY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMjQsNiArMjQsNyBAQAogI2Rl
ZmluZSBXZWJLaXRXZWJWaWV3X2gKIAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4
dC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViTG9hZGVyQ2xpZW50Lmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogCiBHX0JFR0lOX0RFQ0xTCkBAIC02MSwy
NiArNjIsMzMgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogfTsKIAogV0tfRVhQT1JU
IEdUeXBlCi13ZWJraXRfd2ViX3ZpZXdfZ2V0X3R5cGUgICAgICAgICAodm9pZCk7Cit3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3R5cGUgICAgICAgICAgKHZvaWQpOwogCiBXS19FWFBPUlQgR3RrV2lkZ2V0
ICoKLXdlYmtpdF93ZWJfdmlld19uZXcgICAgICAgICAgICAgICh2b2lkKTsKK3dlYmtpdF93ZWJf
dmlld19uZXcgICAgICAgICAgICAgICAodm9pZCk7CiAKIFdLX0VYUE9SVCBHdGtXaWRnZXQgKgot
d2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQgKFdlYktpdFdlYkNvbnRleHQgKmNvbnRl
eHQpOword2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQgIChXZWJLaXRXZWJDb250ZXh0
ICAgICAgKmNvbnRleHQpOwogCiBXS19FWFBPUlQgV2ViS2l0V2ViQ29udGV4dCAqCi13ZWJraXRf
d2ViX3ZpZXdfZ2V0X2NvbnRleHQgICAgICAoV2ViS2l0V2ViVmlldyAgICAqd2ViX3ZpZXcpOwor
d2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0ICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
KndlYl92aWV3KTsKKworV0tfRVhQT1JUIFdlYktpdFdlYkxvYWRlckNsaWVudCAqCit3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQgKFdlYktpdFdlYlZpZXcgICAgICAgICAqd2ViX3Zp
ZXcpOworCitXS19FWFBPUlQgdm9pZAord2Via2l0X3dlYl92aWV3X3NldF9sb2FkZXJfY2xpZW50
IChXZWJLaXRXZWJWaWV3ICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmxvYWRlcl9jbGllbnQpOwogCiBX
S19FWFBPUlQgdm9pZAotd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpICAgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgKndlYlZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2NoYXIgICAgICAqdXJpKTsKK3dlYmtpdF93ZWJfdmlld19sb2FkX3VyaSAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICp1cmkpOwogCiBXS19FWFBPUlQgdm9p
ZAotd2Via2l0X3dlYl92aWV3X2dvX2JhY2sgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgKndl
YlZpZXcpOword2Via2l0X3dlYl92aWV3X2dvX2JhY2sgICAgICAgICAgIChXZWJLaXRXZWJWaWV3
ICAgICAgICAgKndlYl92aWV3KTsKIAogV0tfRVhQT1JUIHZvaWQKLXdlYmtpdF93ZWJfdmlld19n
b19mb3J3YXJkICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICp3ZWJWaWV3KTsKK3dlYmtpdF93ZWJf
dmlld19nb19mb3J3YXJkICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICp3ZWJfdmlldyk7
CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjI2OTMzYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwIEd1c3Rhdm8gTm9yb25oYSBTaWx2YQorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVk
ZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2Via2l0
Mi93ZWJraXQyLmg+CisKKy8qIFRoaXMgc3RyaW5nIGhhcyB0byBiZSByYXRoZXIgYmlnIGJlY2F1
c2Ugb2YgdGhlIGNhbmNlbGxlZCB0ZXN0IC0gaXQKKyAqIGxvb2tzIGxpa2Ugc291cCByZWZ1c2Vz
IHRvIHNlbmQgb3IgcmVjZWl2ZSBhIHRvbyBzbWFsbCBjaHVuayAqLworI2RlZmluZSBIVE1MX1NU
UklORyAiPGh0bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nITwvYm9keT48L2h0bWw+IgorCitTb3VwVVJJICpiYXNlVVJJ
OworCisvKiBGb3IgcmVhbCByZXF1ZXN0IHRlc3RpbmcgKi8KK3N0YXRpYyB2b2lkIHNlcnZlckNh
bGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1zZywgY29uc3QgY2hhciog
cGF0aCwgR0hhc2hUYWJsZSogcXVlcnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9p
bnRlciBkYXRhKQoreworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsK
KyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1Q
TEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi8iKSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RB
VFVTX01PVkVEX1BFUk1BTkVOVExZKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi90ZXN0X2xvYWRpbmdfc3Rh
dHVzIik7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19z
dGF0dXMiKSB8fCBnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMyIikpCisg
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1NUQVRJQywgSFRNTF9TVFJJTkcsIHN0cmxlbihIVE1MX1NUUklORykpOworICAgIGVs
c2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkX2Vycm9yIikpIHsKKyAgICAgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1QpOwor
ICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRpbmdfY2FuY2VsbGVk
IikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2VuY29kaW5nKG1zZy0+cmVz
cG9uc2VfaGVhZGVycywgU09VUF9FTkNPRElOR19DSFVOS0VEKTsKKyAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBI
VE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RSSU5HKSk7CisgICAgICAgIHNvdXBfc2VydmVyX3Vu
cGF1c2VfbWVzc2FnZShzZXJ2ZXIsIG1zZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOworfQorCit0
eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKKyAgICBHTWFpbkxv
b3AgKmxvb3A7CisgICAgZ2Jvb2xlYW4gaGFzQmVlblByb3Zpc2lvbmFsOworICAgIGdib29sZWFu
IGhhc0JlZW5SZWRpcmVjdDsKKyAgICBnYm9vbGVhbiBoYXNCZWVuQ29tbWl0dGVkOworICAgIGdi
b29sZWFuIGhhc0JlZW5GaW5pc2hlZDsKKyAgICBnYm9vbGVhbiBoYXNCZWVuRmFpbGVkOworfSBX
ZWJMb2FkaW5nRml4dHVyZTsKKworc3RhdGljIHZvaWQgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cChX
ZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZp
eHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsK
KyAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOworICAgIGdf
b2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOworICAgIGZpeHR1cmUtPmhhc0JlZW5Q
cm92aXNpb25hbCA9IEZBTFNFOworICAgIGZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCA9IEZBTFNF
OworICAgIGZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5o
YXNCZWVuRmluaXNoZWQgPSBGQUxTRTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuRmFpbGVkID0gRkFM
U0U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24oV2ViTG9hZGlu
Z0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICBnX29iamVjdF91
bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKKyAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5s
b29wKTsKK30KKworc3RhdGljIGNoYXIgKmdldFVSSUZvclBhdGgoY29uc3QgY2hhciogcGF0aCkK
K3sKKyAgICBTb3VwVVJJICp1cmk7CisgICAgY2hhciAqdXJpU3RyaW5nOworCisgICAgdXJpID0g
c291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNlVVJJLCBwYXRoKTsKKyAgICB1cmlTdHJpbmcgPSBz
b3VwX3VyaV90b19zdHJpbmcodXJpLCBGQUxTRSk7CisgICAgc291cF91cmlfZnJlZSh1cmkpOwor
CisgICAgcmV0dXJuIHVyaVN0cmluZzsKK30KKworLyogTG9hZCBTdGF0dXMgKi8KK3N0YXRpYyBn
Ym9vbGVhbiBsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkU3RhcnRlZChXZWJLaXRXZWJMb2FkZXJD
bGllbnQgKmNsaWVudCwgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisgICAgZ19hc3Nl
cnQoIWZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoIWZpeHR1cmUt
Pmhhc0JlZW5SZWRpcmVjdCk7CisgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Db21taXR0
ZWQpOworICAgIGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCA9IFRSVUU7CisKKyAgICByZXR1
cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRS
ZWNlaXZlZFNlcnZlclJlZGlyZWN0KFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJM
b2FkaW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVu
UHJvdmlzaW9uYWwpOworICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QpOwor
ICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKKyAgICBmaXh0dXJlLT5o
YXNCZWVuUmVkaXJlY3QgPSBUUlVFOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiBsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNs
aWVudCAqY2xpZW50LCBHRXJyb3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkK
K3sKKyAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIHJldHVybiBUUlVFOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gbG9hZFN0YXR1c0xvYWRDb21taXR0ZWQoV2ViS2l0V2ViTG9hZGVyQ2xp
ZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFz
QmVlblJlZGlyZWN0KTsKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCk7
CisgICAgZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCA9IFRSVUU7CisKKyAgICByZXR1cm4gVFJV
RTsKK30KKworc3RhdGljIGdib29sZWFuIGxvYWRTdGF0dXNMb2FkRmluaXNoZWQoV2ViS2l0V2Vi
TG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworICAg
IGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoZml4
dHVyZS0+aGFzQmVlblJlZGlyZWN0KTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuQ29t
bWl0dGVkKTsKKyAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkKTsKKyAgICBm
aXh0dXJlLT5oYXNCZWVuRmluaXNoZWQgPSBUUlVFOworCisgICAgZ19tYWluX2xvb3BfcXVpdChm
aXh0dXJlLT5sb29wKTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
bG9hZFN0YXR1c0xvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIEdFcnJv
ciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0X25v
dF9yZWFjaGVkKCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2Fk
aW5nU3RhdHVzKFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEp
Cit7CisgICAgY2hhciAqdXJpU3RyaW5nOworICAgIFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xp
ZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xpZW50KGZpeHR1cmUtPndlYlZpZXcp
OworCisgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJwcm92aXNpb25hbC1sb2FkLXN0YXJ0
ZWQiLCBHX0NBTExCQUNLKGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRTdGFydGVkKSwgZml4dHVy
ZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJwcm92aXNpb25hbC1sb2FkLXJlY2Vp
dmVkLXNlcnZlci1yZWRpcmVjdCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c1Byb3Zpc2lvbmFsTG9h
ZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KGNsaWVudCwgInByb3Zpc2lvbmFsLWxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkU3RhdHVz
UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSwgZml4dHVyZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChj
bGllbnQsICJsb2FkLWNvbW1pdHRlZCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c0xvYWRDb21taXR0
ZWQpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmluaXNo
ZWQiLCBHX0NBTExCQUNLKGxvYWRTdGF0dXNMb2FkRmluaXNoZWQpLCBmaXh0dXJlKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkU3Rh
dHVzTG9hZEZhaWxlZCksIGZpeHR1cmUpOworCisgICAgdXJpU3RyaW5nID0gZ2V0VVJJRm9yUGF0
aCgiLyIpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1
cmlTdHJpbmcpOworICAgIGdfZnJlZSh1cmlTdHJpbmcpOworCisgICAgZ19tYWluX2xvb3BfcnVu
KGZpeHR1cmUtPmxvb3ApOworCisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lv
bmFsKTsKKyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QpOworICAgIGdfYXNz
ZXJ0KGZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOworICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhh
c0JlZW5GaW5pc2hlZCk7Cit9CisKKy8qIExvYWQgRXJyb3IgKi8KK3N0YXRpYyBnYm9vbGVhbiBs
b2FkRXJyb3JQcm92aXNpb25hbExvYWRTdGFydGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xp
ZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKyAgICBnX2Fzc2VydCghZml4dHVy
ZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKKyAgICBmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwg
PSBUUlVFOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2FkRXJy
b3JQcm92aXNpb25hbExvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIEdF
cnJvciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7CisgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhh
c0JlZW5GYWlsZWQpOworICAgIGZpeHR1cmUtPmhhc0JlZW5GYWlsZWQgPSBUUlVFOworCisgICAg
Z19hc3NlcnQoZXJyb3IpOworCisgICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsK
KworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbG9hZEVycm9yTG9hZEZp
bmlzaGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAq
Zml4dHVyZSkKK3sKKyAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIHJldHVybiBUUlVF
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZGluZ0Vycm9yKFdlYkxvYWRpbmdGaXh0dXJlICpm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgY2hhciAqdXJpU3RyaW5nOworICAg
IFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2Fk
ZXJfY2xpZW50KGZpeHR1cmUtPndlYlZpZXcpOworCisgICAgZ19zaWduYWxfY29ubmVjdChjbGll
bnQsICJwcm92aXNpb25hbC1sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGxvYWRFcnJvclByb3Zp
c2lvbmFsTG9hZFN0YXJ0ZWQpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVu
dCwgInByb3Zpc2lvbmFsLWxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkRXJyb3JQcm92aXNp
b25hbExvYWRGYWlsZWQpLCBmaXh0dXJlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwg
ImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRFcnJvckxvYWRGaW5pc2hlZCksIGZpeHR1
cmUpOworCisgICAgdXJpU3RyaW5nID0gZ2V0VVJJRm9yUGF0aCgiL3Rlc3RfbG9hZF9lcnJvciIp
OworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlTdHJp
bmcpOworICAgIGdfZnJlZSh1cmlTdHJpbmcpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1
cmUtPmxvb3ApOworCisgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsK
KyAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuRmFpbGVkKTsKK30KKworaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIFNvdXBTZXJ2ZXIgKnNlcnZlcjsKKworICAgIGdf
dGhyZWFkX2luaXQoTlVMTCk7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwp
OworCisgICAgZ19zZXRlbnYoIldFQktJVF9FWEVDX1BBVEgiLCBXRUJLSVRfRVhFQ19QQVRILCBG
QUxTRSk7CisKKyAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwg
MCwgTlVMTCk7CisgICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7CisKKyAgICBzb3Vw
X3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBO
VUxMKTsKKworICAgIGJhc2VVUkkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7
CisgICAgc291cF91cmlfc2V0X3BvcnQoYmFzZVVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2Vy
dmVyKSk7CisKKyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIp
OworICAgIGdfdGVzdF9hZGQoIi93ZWJraXQyL2xvYWRpbmcvc3RhdHVzIiwKKyAgICAgICAgICAg
ICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAorICAgICAgICAgICAgICAgd2ViTG9hZGluZ0Zp
eHR1cmVTZXR1cCwKKyAgICAgICAgICAgICAgIHRlc3RMb2FkaW5nU3RhdHVzLAorICAgICAgICAg
ICAgICAgd2ViTG9hZGluZ0ZpeHR1cmVUZWFyZG93bik7CisgICAgZ190ZXN0X2FkZCgiL3dlYmtp
dDIvbG9hZGluZy9lcnJvciIsCisgICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVM
TCwKKyAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlU2V0dXAsCisgICAgICAgICAgICAg
ICB0ZXN0TG9hZGluZ0Vycm9yLAorICAgICAgICAgICAgICAgd2ViTG9hZGluZ0ZpeHR1cmVUZWFy
ZG93bik7CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0IGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTg0NDQyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdApAQCAtMCww
ICsxLDMgQEAKK0JPT0xFQU46UE9JTlRFUgorQk9PTEVBTjpWT0lECisK
</data>
<flag name="review"
          id="106127"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>